From fccb74bb3ce5765a0779243d7561fb7b1fb47118 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 14 Jan 2025 11:15:21 -0500 Subject: [PATCH 01/51] test --- pyiceberg/table/test.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 pyiceberg/table/test.py diff --git a/pyiceberg/table/test.py b/pyiceberg/table/test.py new file mode 100644 index 0000000000..e0369f70fe --- /dev/null +++ b/pyiceberg/table/test.py @@ -0,0 +1 @@ +print('test') \ No newline at end of file From 72985895bf617eada0afb74ed675416c0afa678a Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 14 Jan 2025 15:16:27 -0500 Subject: [PATCH 02/51] unit testing --- pyiceberg/table/__init__.py | 125 +++++++++++++++++++++++++++++ pyiceberg/table/merge_rows_util.py | 117 +++++++++++++++++++++++++++ tests/table/test_merge_rows.py | 53 ++++++++++++ 3 files changed, 295 insertions(+) create mode 100644 pyiceberg/table/merge_rows_util.py create mode 100644 tests/table/test_merge_rows.py diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index f2df84d7ee..90d9eb001d 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -136,6 +136,8 @@ from pyiceberg.utils.config import Config from pyiceberg.utils.properties import property_as_bool +from pyiceberg.table import merge_rows_util + if TYPE_CHECKING: import daft import pandas as pd @@ -1064,6 +1066,129 @@ def name_mapping(self) -> Optional[NameMapping]: """Return the table's field-id NameMapping.""" return self.metadata.name_mapping() + def merge_rows(self, df: pa.Table, join_cols: list + ,merge_options: dict = {'when_matched_update_all': True, 'when_not_matched_insert_all': True} + ) -> Dict: + """ + Shorthand API for performing an upsert/merge to an iceberg table. + + Args: + df: The input dataframe to merge with the table's data. + join_cols: The columns to join on. + merge_options: A dictionary of merge actions to perform. Currently supports these predicates: + when_matched_update_all: default is True + when_not_matched_insert_all: default is True + + Returns: + A dictionary containing the number of rows updated and inserted. + """ + + #merge_rows_util is a file + try: + from datafusion import SessionContext + except ModuleNotFoundError as e: + raise ModuleNotFoundError("For merge_rows, DataFusion needs to be installed") from e + + try: + from pyarrow import dataset as ds + except ModuleNotFoundError as e: + raise ModuleNotFoundError("For merge_rows, PyArrow needs to be installed") from e + + source_table_name = "source" + target_table_name = "target" + + + if merge_options is None or merge_options == {}: + merge_options = {'when_matched_update_all': True, 'when_not_matched_insert_all': True} + + when_matched_update_all = merge_options.get('when_matched_update_all', False) + when_not_matched_insert_all = merge_options.get('when_not_matched_insert_all', False) + + ctx = SessionContext() + + + + #register both source and target tables so we can find the deltas to update/append + ctx.register_dataset(source_table_name, ds.dataset(df)) + ctx.register_dataset(target_table_name, ds.dataset(self.scan().to_arrow())) + + source_col_list = merge_rows_util.get_table_column_list(ctx, source_table_name) + target_col_list = merge_rows_util.get_table_column_list(ctx, target_table_name) + + source_col_names = set([col[0] for col in source_col_list]) + target_col_names = set([col[0] for col in target_col_list]) + + source_col_types = {col[0]: col[1] for col in source_col_list} + #target_col_types = {col[0]: col[1] for col in target_col_list} + + missing_columns = merge_rows_util.do_join_columns_exist(source_col_names, target_col_names, self.join_cols) + + if missing_columns['source'] or missing_columns['target']: + raise Exception(f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}") + + #check for dups on source + if merge_rows_util.dups_check_in_source(source_table_name, join_cols): + raise Exception(f"Duplicate rows found in source table based on the key columns [{', '.join(join_cols)}]") + + + + # Get the rows to update + update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) + #print(update_recs_sql) + update_recs = ctx.sql(update_recs_sql).to_arrow_table() + + update_row_cnt = len(update_recs) + + insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(self.source_table_name, self.target_table_name, self.join_cols, source_col_names, target_col_names) + #print(insert_recs_sql) + insert_recs = self.cn.sql(insert_recs_sql).to_arrow_table() + + insert_row_cnt = len(insert_recs) + + txn = self.transaction() + + try: + + if when_matched_update_all: + + if len(self.join_cols) == 1: + join_col = self.join_cols[0] + col_type = source_col_types[join_col] + values = [row[join_col] for row in update_recs.to_pylist()] + # if strings are in the filter, we encapsulate with tick marks + formatted_values = [f"'{value}'" if col_type == 'string' else str(value) for value in values] + overwrite_filter = f"{join_col} IN ({', '.join(formatted_values)})" + else: + overwrite_filter = " OR ".join( + f"({' AND '.join([f'{col} = {repr(row[col])}' if source_col_types[col] != 'string' else f'{col} = {repr(row[col])}' for col in self.join_cols])})" + for row in update_recs.to_pylist() + ) + + #print(f"overwrite_filter: {overwrite_filter}") + + txn.overwrite(update_recs, overwrite_filter) + + # Insert the new records + + if when_not_matched_insert_all: + + txn.append(insert_recs) + + if when_matched_update_all or when_not_matched_insert_all: + txn.commit_transaction() + #print("commited changes") + + return { + "rows_updated": update_row_cnt, + "rows_inserted": insert_row_cnt + } + + except Exception as e: + print(f"Error: {e}") + raise e + + return {} + def append(self, df: pa.Table, snapshot_properties: Dict[str, str] = EMPTY_DICT) -> None: """ Shorthand API for appending a PyArrow table to the table. diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py new file mode 100644 index 0000000000..b691414122 --- /dev/null +++ b/pyiceberg/table/merge_rows_util.py @@ -0,0 +1,117 @@ + +from datafusion import SessionContext + +def get_table_column_list(connection: SessionContext, table_name: str) -> list: + """ + This function retrieves the column names and their data types for the specified table. + It returns a list of tuples where each tuple contains the column name and its data type. + + Args: + connection: DataFusion SessionContext. + table_name: The name of the table for which to retrieve column information. + + Returns: + A list of tuples containing column names and their corresponding data types. + """ + # DataFusion logic + res = connection.sql(f""" + SELECT column_name, data_type + FROM information_schema.columns + WHERE table_name = '{table_name}' + """).collect() + + column_names = res[0][0].to_pylist() # Extract the first column (column names) + data_types = res[0][1].to_pylist() # Extract the second column (data types) + + return list(zip(column_names, data_types)) # Combine into list of tuples + +def dups_check_in_source(source_table: str, join_cols: list, connection: SessionContext) -> bool: + """ + This function checks if there are duplicate rows in the source and target tables based on the join columns. + It returns True if there are duplicate rows in either table, otherwise it returns False. + """ + # Check for duplicates in the source table + source_dup_sql = f""" + SELECT {', '.join(join_cols)}, COUNT(*) + FROM {source_table} + GROUP BY {', '.join(join_cols)} + HAVING COUNT(*) > 1 + LIMIT 1 + """ + source_dup_df = connection.sql(source_dup_sql).collect() + source_dup_count = len(source_dup_df) + + return source_dup_count > 0 + +def do_join_columns_exist(source_col_list: set, target_col_list: set, join_cols: list) -> bool: + + """ + This function checks if the join columns exist in both the source and target tables. + It returns a dictionary indicating which join columns are missing from each table. + """ + missing_columns = { + 'source': [], + 'target': [] + } + + for col in join_cols: + if col not in source_col_list: + missing_columns['source'].append(col) + if col not in target_col_list: + missing_columns['target'].append(col) + + return missing_columns + + + +def get_rows_to_update_sql(source_table_name: str, target_table_name: str + , join_cols: list + , source_cols_list: set + , target_cols_list: set) -> str: + """ + This function returns the rows that need to be updated in the target table based on the source table. + It compares the source and target tables based on the join columns and returns the rows that have different values in the non-join columns. + """ + + # Determine non-join columns that exist in both tables + non_join_cols = source_cols_list.intersection(target_cols_list) - set(join_cols) + + + sql = f""" + SELECT {', '.join([f"src.{col}" for col in join_cols])}, + {', '.join([f"src.{col}" for col in non_join_cols])} + FROM {source_table_name} as src + INNER JOIN {target_table_name} as tgt + ON {' AND '.join([f"src.{col} = tgt.{col}" for col in join_cols])} + EXCEPT DISTINCT + SELECT {', '.join([f"tgt.{col}" for col in join_cols])}, + {', '.join([f"tgt.{col}" for col in non_join_cols])} + FROM {target_table_name} as tgt + """ + return sql + + +def get_rows_to_insert_sql(source_table_name: str, target_table_name: str + , join_cols: list + , source_cols_list: set + , target_cols_list: set) -> str: + + + # Determine non-join columns that exist in both tables + insert_cols = source_cols_list.intersection(target_cols_list) - set(join_cols) + + # Build the SQL query + sql = f""" + SELECT + {', '.join([f"src.{col}" for col in join_cols])}, + {', '.join([f"src.{col}" for col in insert_cols])} + FROM + {source_table_name} as src + LEFT JOIN + {target_table_name} as tgt + ON + {' AND '.join([f"src.{col} = tgt.{col}" for col in join_cols])} + WHERE + tgt.{join_cols[0]} IS NULL + """ + return sql diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py new file mode 100644 index 0000000000..f4ee4b2c0c --- /dev/null +++ b/tests/table/test_merge_rows.py @@ -0,0 +1,53 @@ +## unit test for merging rows +from datafusion import SessionContext +from pyiceberg.catalog.sql import SqlCatalog + +ctx = SessionContext() + + +def merge_rows_test_1(): + + print('**** START ***') + + warehouse_path = "./warehouse" + catalog = SqlCatalog( + "default", + **{ + "uri": f"sqlite:///:memory:", + "warehouse": f"file://{warehouse_path}", + }, + ) + + print(' ***** CATALOG CREATED *****') + + namespace = "test_ns" + catalog.create_namespace_if_not_exists(namespace=namespace) + print('namespace created') + + df = ctx.sql(""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type + """).to_arrow_table() + + table = catalog.create_table(f"{namespace}.target", df.schema) + + table.append(df) + + ## generate new dataset to upsert + df_new = ctx.sql(""" + select 1 as order_id, date '2021-01-05' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type + union all + select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type + """).to_arrow_table() + + + res = table.merge_rows(df_new, ["order_id"]) + + print(res) + +if __name__ == "__main__": + merge_rows_test_1() + From 25bc9cf1ef61170d883669a4f295f219ff34a47d Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 14 Jan 2025 16:13:42 -0500 Subject: [PATCH 03/51] adding unit tests --- pyiceberg/table/__init__.py | 39 ++-- tests/table/test_merge_rows.py | 183 +++++++++++++++++- ...884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet | Bin 0 -> 1269 bytes ...743534-d4bf-44dd-84e9-8bde8ee730c0.parquet | Bin 0 -> 1269 bytes ...c97079-ddf1-4e1f-a902-5eb19ff98914.parquet | Bin 0 -> 1252 bytes ...92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet | Bin 0 -> 1269 bytes ...c4d2ab-ff45-4223-b14a-bb7122648bb7.parquet | Bin 0 -> 1269 bytes ...d4367c-28d5-4ce2-ae9a-bca3aed92718.parquet | Bin 0 -> 1269 bytes ...81aa39-f25a-47e3-8909-bbb955d63a1b.parquet | Bin 0 -> 1252 bytes ...0b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet | Bin 0 -> 1269 bytes ...45d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet | Bin 0 -> 1269 bytes ...50de00-debc-4b44-ac41-3f10af7e59a7.parquet | Bin 0 -> 1252 bytes ...4f1a0e-cd51-462b-b4c2-81e91f278432.parquet | Bin 0 -> 1252 bytes ...a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet | Bin 0 -> 1252 bytes ...75c05a-c6cf-46f3-b251-37ace98c68f3.parquet | Bin 0 -> 1269 bytes ...fa771f-7647-43e2-8f86-fe095e1dc073.parquet | Bin 0 -> 1269 bytes ...363a35-c28c-4445-a9f3-27f83f5706a2.parquet | Bin 0 -> 1252 bytes ...2a44fd-e823-43b1-a1eb-66890d16181a.parquet | Bin 0 -> 1269 bytes ...9caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.parquet | Bin 0 -> 1269 bytes ...3f51c6-8b62-4cc2-99a8-3be667d35b9b.parquet | Bin 0 -> 1269 bytes ...51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet | Bin 0 -> 1269 bytes ...82678a-6ff9-4924-958c-22b926e25638.parquet | Bin 0 -> 1252 bytes ...c518c7-6c73-426a-855b-2db6ca782f5b.parquet | Bin 0 -> 1269 bytes ...b30373-a89a-44a1-bcee-d854aeb33acb.parquet | Bin 0 -> 1252 bytes ...24e0e2-59a6-472f-93fb-8933a1f200bf.parquet | Bin 0 -> 1252 bytes ...80981e-c2a9-4f8d-bbf8-38033b7735a6.parquet | Bin 0 -> 1269 bytes ...dc647f-b4a4-4e63-9a86-56ee7d6f5e07.parquet | Bin 0 -> 1252 bytes ...9f7ae1-abec-4da7-ac71-135f512de652.parquet | Bin 0 -> 1252 bytes ...d7103a-e46f-43fa-ae30-c19fd45e0406.parquet | Bin 0 -> 1269 bytes ...820ce5-8545-4c2c-ad01-d2d70ca569fc.parquet | Bin 0 -> 1252 bytes ...9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet | Bin 0 -> 1269 bytes ...68c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet | Bin 0 -> 1252 bytes ...d50ceb-ff50-4c31-8515-77245a727b91.parquet | Bin 0 -> 1252 bytes ...37aece-7657-4840-905b-26cc0d4353e1.parquet | Bin 0 -> 1252 bytes ...f73aa1-e388-47f7-ad3c-0e0547345595.parquet | Bin 0 -> 1252 bytes ...4c63ea-a734-4f86-b728-d35d56b3180c.parquet | Bin 0 -> 1269 bytes ...bbb6ea-f9ba-4642-9b62-57e55f553440.parquet | Bin 0 -> 1269 bytes ...c66652-5303-4cba-a9d6-8d909f55c160.parquet | Bin 0 -> 1269 bytes ...e31041-a16b-4018-97a8-f54121d210e7.parquet | Bin 0 -> 1252 bytes ...bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet | Bin 0 -> 1252 bytes ...443125-45ae-493f-b226-5729c263a793.parquet | Bin 0 -> 1269 bytes ...2c96ad-d3bc-4ae7-89f9-12e7ae273785.parquet | Bin 0 -> 1269 bytes ...45bf07-cc23-431a-a734-119b9ba5ce66.parquet | Bin 0 -> 1269 bytes ...2853cd-f607-4bb3-8a0c-0749c91539a3.parquet | Bin 0 -> 1269 bytes ...192fbc-35b1-4090-b0d4-b0c858966378.parquet | Bin 0 -> 1269 bytes ...5bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet | Bin 0 -> 1252 bytes ...60ac97-208b-4c5d-9196-e952352617b8.parquet | Bin 0 -> 1269 bytes ...c4729e-faab-4e6b-a5da-b8c0de8541b7.parquet | Bin 0 -> 1269 bytes ...467c7d-af98-4d40-b5c3-78a4507807d2.parquet | Bin 0 -> 1252 bytes ...309d30-424c-4c10-bb6d-79711a6576a8.parquet | Bin 0 -> 1269 bytes ...b485aa-72dc-4245-a543-002d315794c0.parquet | Bin 0 -> 1269 bytes ...f30a09-e7c5-42f4-a43f-81cb10b83af1.parquet | Bin 0 -> 1269 bytes ...679dff-e9d2-4743-8c9f-41100f6ed284.parquet | Bin 0 -> 1269 bytes ...09f507-047c-4d3b-b967-af45b8ced15c.parquet | Bin 0 -> 1269 bytes ...fe3f4d-7ddb-4ca3-adcf-c7b503a97189.parquet | Bin 0 -> 1252 bytes ...6b5ff2-453b-431e-9cde-884ceff64876.parquet | Bin 0 -> 1252 bytes ...3f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet | Bin 0 -> 1269 bytes ...1b7da7-41ac-4224-b399-e95130d3bc1a.parquet | Bin 0 -> 1269 bytes ...411624-4674-4dcf-a2f5-46beb4722430.parquet | Bin 0 -> 1269 bytes ...a6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.parquet | Bin 0 -> 1269 bytes ...568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet | Bin 0 -> 1252 bytes ...73260d-3475-439f-a9fa-a76fa4e0e177.parquet | Bin 0 -> 1252 bytes ...92ab29-b58f-4338-812c-096249a28990.parquet | Bin 0 -> 1269 bytes ...b31934-05a6-4e09-a869-bc4036a9aa7e.parquet | Bin 0 -> 1269 bytes ...184284-5950-45ae-8dd9-1db19f4b0a31.parquet | Bin 0 -> 1269 bytes ...8f6465-742a-450b-a358-12b08ae8ff62.parquet | Bin 0 -> 1252 bytes ...99ea5b-9db5-401c-b103-eac623af11f6.parquet | Bin 0 -> 1269 bytes ...17da15-e1e6-484c-87fd-d5c594ce88c8.parquet | Bin 0 -> 1269 bytes ...5041a6-7503-46d7-a94a-e367abc8212f.parquet | Bin 0 -> 1252 bytes ...674485-f7b4-45a2-b7b6-1a4c56568f70.parquet | Bin 0 -> 1252 bytes ...fe0557-72f8-4571-861f-1e38db10fcab.parquet | Bin 0 -> 1252 bytes ...e0a4be-6f80-4c5a-a750-e51d75296669.parquet | Bin 0 -> 1269 bytes ...28ecfe-009f-435b-9a1a-5cbc8465e7cb.parquet | Bin 0 -> 1269 bytes ...212431-1c5a-4680-924d-cb722127f8b2.parquet | Bin 0 -> 1269 bytes ...db173b-1d0e-457c-acd7-bd379e96c1a2.parquet | Bin 0 -> 1269 bytes ...4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet | Bin 0 -> 1252 bytes ...3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet | Bin 0 -> 1252 bytes ...d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet | Bin 0 -> 1269 bytes ...460c3d-034c-4f17-9db2-81edcb0f322d.parquet | Bin 0 -> 1252 bytes ...c0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet | Bin 0 -> 1269 bytes ...238f24-b593-4f0e-8ea8-4ede49211ff9.parquet | Bin 0 -> 1269 bytes ...f0d335-5975-450e-b513-14e7c173188a.parquet | Bin 0 -> 1269 bytes ...c93e86-c022-49c4-bc6f-35621c840a05.parquet | Bin 0 -> 1252 bytes ...44e2db-5959-4c27-8e91-e5ed66869db8.parquet | Bin 0 -> 1269 bytes ...f74252-bdf3-4d1e-b45f-4cf875682ac1.parquet | Bin 0 -> 1269 bytes ...3d6bac-76d6-44d7-84d8-25b914dcf93a.parquet | Bin 0 -> 1252 bytes ...caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet | Bin 0 -> 1252 bytes ...3b4af9-a9de-4e9c-addc-401a7a626d9b.parquet | Bin 0 -> 1269 bytes ...8253b2-45ca-4b85-a98a-1bede0a1358e.parquet | Bin 0 -> 1269 bytes ...72c63d-1f45-42b0-8c22-087b27e345d3.parquet | Bin 0 -> 1269 bytes ...502702-5de9-4147-9f01-2a63f690f3f8.parquet | Bin 0 -> 1252 bytes ...ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet | Bin 0 -> 1269 bytes ...0d6d50-d572-4127-b57d-a42a67df8e11.parquet | Bin 0 -> 1252 bytes ...011efa-994c-4030-8da7-53357c467c6f.parquet | Bin 0 -> 1269 bytes ...364e18-9a58-42f2-a886-b079f1ccfabd.parquet | Bin 0 -> 1269 bytes ...ca3419-f1ca-4149-bf5c-6d400c0c1c64.parquet | Bin 0 -> 1252 bytes ...7dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet | Bin 0 -> 1252 bytes ...933998-38fb-415a-8c6f-65c20c4b60af.parquet | Bin 0 -> 1269 bytes ...1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet | Bin 0 -> 1269 bytes ...a9e15d-4031-4715-bf68-69610e86a620.parquet | Bin 0 -> 1269 bytes ...4b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet | Bin 0 -> 1269 bytes ...d10516-886c-478f-8be2-84606aa42d96.parquet | Bin 0 -> 1269 bytes ...7221f8-b07c-4992-b24c-d23de23c47e6.parquet | Bin 0 -> 1269 bytes ...541d14-821b-4439-b27f-79328feb2cb7.parquet | Bin 0 -> 1269 bytes ...358415-49ec-446a-a261-bff1c048723b.parquet | Bin 0 -> 1252 bytes ...f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet | Bin 0 -> 1269 bytes ...b4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet | Bin 0 -> 1269 bytes ...985c5d-a0c2-4a0d-9431-a91c756b2433.parquet | Bin 0 -> 1269 bytes ...e05260-42fb-4b65-8ff2-fb0c04ea290a.parquet | Bin 0 -> 1252 bytes ...2d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet | Bin 0 -> 1269 bytes ...7e2165-822c-4192-a463-1384cab3f16d.parquet | Bin 0 -> 1269 bytes ...4b2273-468b-4c60-a6c4-99561a3f0d79.parquet | Bin 0 -> 1269 bytes ...c83adc-6c17-4552-aeff-a47f0e2b243d.parquet | Bin 0 -> 1269 bytes ...e4b741-ef48-447b-80e3-3a0b9cb05c3b.parquet | Bin 0 -> 1252 bytes ...566f28-bd86-431b-ba97-fd70c8073fae.parquet | Bin 0 -> 1252 bytes ...-83c4-4a49-9c56-a44b0aeca37b.metadata.json | 1 + ...-a457-48a3-bf17-1ad69a8c5851.metadata.json | 1 + ...-8e75-43dc-823b-9341542bc340.metadata.json | 1 + ...-0f92-46b7-a7c8-28c64da33723.metadata.json | 1 + ...-5494-4305-99eb-39ce9c88bdcb.metadata.json | 1 + ...-ecc1-43de-b6e6-1e0e2c007809.metadata.json | 1 + ...-a247-4213-917e-496db9b4cf29.metadata.json | 1 + ...-7516-4af1-9eea-0a11d9c8b2d6.metadata.json | 1 + ...-65c1-4aec-b293-92246e394a34.metadata.json | 1 + ...-266f-4a68-aed1-95eeb7f8b8aa.metadata.json | 1 + ...-b41b-43a4-aaf8-0e7b99f8129b.metadata.json | 1 + ...-59b1-44d2-b16a-855d7e8ef117.metadata.json | 1 + ...-ec92-4bb1-8f60-b06249855d02.metadata.json | 1 + ...-60ec-4db0-9577-717d002710be.metadata.json | 1 + ...-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json | 1 + ...-f46a-415e-a45a-6bd31a3f1a08.metadata.json | 1 + ...-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json | 1 + ...-9933-48d4-80c2-39ca6488f707.metadata.json | 1 + ...-41aa-4dcb-b08a-f961ee37eaec.metadata.json | 1 + ...-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json | 1 + ...-0b81-486d-9982-03cd1e0e7b04.metadata.json | 1 + ...-cc65-44cb-9499-f68551ef1364.metadata.json | 1 + ...-a782-49c2-9831-de02dc131b8b.metadata.json | 1 + ...-a254-4458-8072-e3c66bf4a1bd.metadata.json | 1 + ...-f2ee-4c97-9889-91a6469faae9.metadata.json | 1 + ...-2f25-4fa6-bdca-e6b3a129710f.metadata.json | 1 + ...-e606-4c37-82ac-3e0455c4cc61.metadata.json | 1 + ...-8a86-4224-968b-7c93ad27b09f.metadata.json | 1 + ...-b25f-4a55-a78f-c2f308f98a66.metadata.json | 1 + ...-16b8-4dcd-b92f-664162426cac.metadata.json | 1 + ...-e8be-4b20-952a-e98d8e756480.metadata.json | 1 + ...-a84e-4f4b-97fe-d2ccf275f241.metadata.json | 1 + ...-7749-4f19-9479-06b9f5c8a36c.metadata.json | 1 + ...-c2b3-4d87-9723-ef174b6fe9c9.metadata.json | 1 + ...-233b-4533-827a-89369113dfab.metadata.json | 1 + ...-6be3-45f1-9f60-8e015def371a.metadata.json | 1 + ...-4d17-42b0-9c71-4416706c6175.metadata.json | 1 + ...-b9d6-4da8-a875-cd47ada9f8db.metadata.json | 1 + ...-66f2-465b-93ca-7c2e1d6f7602.metadata.json | 1 + ...-4aea-478f-aa34-60953100b1b2.metadata.json | 1 + ...-652e-4a75-a925-7a46acea29c5.metadata.json | 1 + ...-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json | 1 + ...-bc58-472c-8598-6be139182129.metadata.json | 1 + ...-053b-4d8b-abe6-d451db408ffa.metadata.json | 1 + ...-dd83-4473-9a1e-8cdbec52548b.metadata.json | 1 + ...-8be3-451a-bd45-df558dcc14c5.metadata.json | 1 + ...-21ac-43e4-ace2-b416cfca1b2d.metadata.json | 1 + ...-e238-4911-a1c2-d24519a083e6.metadata.json | 1 + ...-1732-491c-acf9-056ca0adce82.metadata.json | 1 + ...-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json | 1 + ...-fc19-4bc7-9f51-8f48f5467838.metadata.json | 1 + ...-df90-4100-ab64-1f1e8fdf359d.metadata.json | 1 + ...-e757-4f13-9825-4fb0b61e1a9d.metadata.json | 1 + ...-b92e-435a-8d8b-68eb818c32ef.metadata.json | 1 + ...-4069-4ef7-973b-46385ef554e2.metadata.json | 1 + ...-f583-4d59-9ecb-8224e59353f5.metadata.json | 1 + ...-2cb7-4df2-9a89-b1efb016a0b0.metadata.json | 1 + ...-6b17-436f-987c-873233512551.metadata.json | 1 + ...-94ed-4beb-941e-6d61f20fa3d0.metadata.json | 1 + ...-432f-48a0-b450-1ccb6e7084b8.metadata.json | 1 + ...-c1f2-4e2d-820a-a223cb1b5b92.metadata.json | 1 + ...-13c5-4691-a67d-886c6f03db70.metadata.json | 1 + ...-ffb1-4cae-bcda-c157287d11e5.metadata.json | 1 + ...-e0d5-499d-bc3a-278d2bced975.metadata.json | 1 + ...-750e-419b-af01-d1fee743ba5b.metadata.json | 1 + ...-f835-42a2-9778-3a25d1c3f0fb.metadata.json | 1 + ...-486e-49b5-a1ea-30abc4b7710e.metadata.json | 1 + ...-9c5a-4a6d-a3c9-ce81024e7743.metadata.json | 1 + ...-d7cb-4582-a531-53d1cde9d1a2.metadata.json | 1 + ...-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json | 1 + ...-1c28-489f-8764-6205816f8e07.metadata.json | 1 + ...-f9ac-4b5a-9cad-765e9d17141a.metadata.json | 1 + ...-5850-4e23-87e3-867f77726f18.metadata.json | 1 + ...-7a33-4467-9f22-ccebd7535d85.metadata.json | 1 + ...-847a-46e2-b36e-711774a46b9a.metadata.json | 1 + ...-fa4d-4cd8-a310-5c3207336309.metadata.json | 1 + ...-fc0b-4a7e-8254-8a66c8678488.metadata.json | 1 + ...-a1c1-437e-8070-0bd4c9505623.metadata.json | 1 + ...-7527-4941-8bfb-ac88b170c630.metadata.json | 1 + ...-eca7-4b2c-b083-d426f2a2aed6.metadata.json | 1 + ...-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json | 1 + ...-884b-4a2d-816d-a18db542d8e2.metadata.json | 1 + ...-792e-4bc5-b696-2aa1ef282617.metadata.json | 1 + ...-5b1d-4b08-8b3a-b1635dfda75f.metadata.json | 1 + ...-1260-4527-aecb-2ecc6545966a.metadata.json | 1 + ...-4854-492f-8ddf-4e554da6fb3a.metadata.json | 1 + ...-fe0b-4b91-a6a6-625fe4837b0c.metadata.json | 1 + ...-f2c2-4693-a9da-24e5ae089331.metadata.json | 1 + ...-bd03-4313-b556-80ed3a8b562a.metadata.json | 1 + ...-a7c4-4287-b59a-a38d31b661ee.metadata.json | 1 + ...-37ac-472b-ad53-d28cf71f6cba.metadata.json | 1 + ...-4590-4be2-b12d-92a865e24604.metadata.json | 1 + ...-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json | 1 + ...-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json | 1 + ...-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json | 1 + ...-4512-4a44-9633-e3757055c9a7.metadata.json | 1 + ...-cf0c-4212-bc3e-aa89e8078cc2.metadata.json | 1 + ...-0e01-4907-8715-7f28a49089fa.metadata.json | 1 + ...-f6e6-4d8e-89c7-232ffdbabc11.metadata.json | 1 + ...-2cd0-4ac3-8a3d-717001ed3747.metadata.json | 1 + ...-d4cb-401e-8961-9a3e80abbd9b.metadata.json | 1 + ...-d10f-468c-88d4-d6335d6be5c7.metadata.json | 1 + ...-777e-4364-b90d-b90076f80330.metadata.json | 1 + ...-13af-4ba2-9961-3413e5c491a4.metadata.json | 1 + ...-afe6-47cc-bb7e-f3b8dafbd843.metadata.json | 1 + ...-3410-476d-863d-61096474e534.metadata.json | 1 + ...-c642-40a8-89a1-ac408a302b63.metadata.json | 1 + ...-30a0-46a2-bc66-751cd8c116ac.metadata.json | 1 + ...-a54d-4b15-92c9-9711ca18ff4c.metadata.json | 1 + ...-4744-4909-a9c4-6d18c4ede8ea.metadata.json | 1 + ...-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json | 1 + ...-cf13-4d22-a115-eeac5a729131.metadata.json | 1 + ...-cc54-479c-8608-02dffa3337b5.metadata.json | 1 + ...-98b2-4338-86ea-49db24ed0719.metadata.json | 1 + ...-05a6-49c2-8d21-e293a95b4837.metadata.json | 1 + ...-6612-404b-8058-56409fb03fde.metadata.json | 1 + ...-8430-434f-bf9d-c076a6044b06.metadata.json | 1 + ...e6f094-0145-4d30-be1e-b291d4941071-m0.avro | Bin 0 -> 4407 bytes ...f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro | Bin 0 -> 4404 bytes ...b31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro | Bin 0 -> 4405 bytes ...db173b-1d0e-457c-acd7-bd379e96c1a2-m0.avro | Bin 0 -> 4404 bytes ...2a44fd-e823-43b1-a1eb-66890d16181a-m0.avro | Bin 0 -> 4405 bytes ...81aa39-f25a-47e3-8909-bbb955d63a1b-m0.avro | Bin 0 -> 4405 bytes ...c93e86-c022-49c4-bc6f-35621c840a05-m0.avro | Bin 0 -> 4404 bytes ...c93e86-c022-49c4-bc6f-35621c840a05-m1.avro | Bin 0 -> 4406 bytes ...411624-4674-4dcf-a2f5-46beb4722430-m0.avro | Bin 0 -> 4404 bytes ...11fb69-c4b7-4732-98a3-154c8e821d41-m0.avro | Bin 0 -> 4406 bytes ...d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro | Bin 0 -> 4404 bytes ...8f6465-742a-450b-a358-12b08ae8ff62-m0.avro | Bin 0 -> 4404 bytes ...1fbc5e-5056-49f0-b44b-3c695b3b6812-m0.avro | Bin 0 -> 4404 bytes ...3f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro | Bin 0 -> 4405 bytes ...011efa-994c-4030-8da7-53357c467c6f-m0.avro | Bin 0 -> 4405 bytes ...4b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro | Bin 0 -> 4404 bytes ...820ce5-8545-4c2c-ad01-d2d70ca569fc-m0.avro | Bin 0 -> 4404 bytes ...541d14-821b-4439-b27f-79328feb2cb7-m0.avro | Bin 0 -> 4404 bytes ...17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro | Bin 0 -> 4405 bytes ...3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro | Bin 0 -> 4404 bytes ...3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro | Bin 0 -> 4406 bytes ...4c63ea-a734-4f86-b728-d35d56b3180c-m0.avro | Bin 0 -> 4405 bytes ...f0d335-5975-450e-b513-14e7c173188a-m0.avro | Bin 0 -> 4405 bytes ...f15f72-e09c-4a97-9812-0ee2b5b7b597-m0.avro | Bin 0 -> 4405 bytes ...e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro | Bin 0 -> 4405 bytes ...0bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro | Bin 0 -> 4407 bytes ...5d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro | Bin 0 -> 4407 bytes ...24e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro | Bin 0 -> 4404 bytes ...37aece-7657-4840-905b-26cc0d4353e1-m0.avro | Bin 0 -> 4404 bytes ...37aece-7657-4840-905b-26cc0d4353e1-m1.avro | Bin 0 -> 4407 bytes ...679dff-e9d2-4743-8c9f-41100f6ed284-m0.avro | Bin 0 -> 4405 bytes ...50de00-debc-4b44-ac41-3f10af7e59a7-m0.avro | Bin 0 -> 4404 bytes ...50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro | Bin 0 -> 4406 bytes ...6b5ff2-453b-431e-9cde-884ceff64876-m0.avro | Bin 0 -> 4404 bytes ...d10516-886c-478f-8be2-84606aa42d96-m0.avro | Bin 0 -> 4404 bytes ...363a35-c28c-4445-a9f3-27f83f5706a2-m0.avro | Bin 0 -> 4404 bytes ...363a35-c28c-4445-a9f3-27f83f5706a2-m1.avro | Bin 0 -> 4407 bytes ...4f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro | Bin 0 -> 4404 bytes ...d50ceb-ff50-4c31-8515-77245a727b91-m0.avro | Bin 0 -> 4404 bytes ...a6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro | Bin 0 -> 4405 bytes ...b4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro | Bin 0 -> 4404 bytes ...3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro | Bin 0 -> 4404 bytes ...3d6bac-76d6-44d7-84d8-25b914dcf93a-m1.avro | Bin 0 -> 4407 bytes ...fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m0.avro | Bin 0 -> 4404 bytes ...fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro | Bin 0 -> 4407 bytes ...76888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro | Bin 0 -> 4407 bytes ...dc647f-b4a4-4e63-9a86-56ee7d6f5e07-m0.avro | Bin 0 -> 4405 bytes ...bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro | Bin 0 -> 4405 bytes ...d4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro | Bin 0 -> 4405 bytes ...92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro | Bin 0 -> 4404 bytes ...238f24-b593-4f0e-8ea8-4ede49211ff9-m0.avro | Bin 0 -> 4404 bytes ...b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro | Bin 0 -> 4404 bytes ...985c5d-a0c2-4a0d-9431-a91c756b2433-m0.avro | Bin 0 -> 4404 bytes ...bae933-47ed-4fe2-b10e-e52b1e6a93ed-m0.avro | Bin 0 -> 4405 bytes ...f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro | Bin 0 -> 4405 bytes ...fa771f-7647-43e2-8f86-fe095e1dc073-m0.avro | Bin 0 -> 4405 bytes ...2d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro | Bin 0 -> 4404 bytes ...82678a-6ff9-4924-958c-22b926e25638-m0.avro | Bin 0 -> 4404 bytes ...c0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro | Bin 0 -> 4405 bytes ...358415-49ec-446a-a261-bff1c048723b-m0.avro | Bin 0 -> 4405 bytes ...358415-49ec-446a-a261-bff1c048723b-m1.avro | Bin 0 -> 4406 bytes ...467c7d-af98-4d40-b5c3-78a4507807d2-m0.avro | Bin 0 -> 4405 bytes ...ca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro | Bin 0 -> 4405 bytes ...ca3419-f1ca-4149-bf5c-6d400c0c1c64-m1.avro | Bin 0 -> 4407 bytes ...5bfd51-ebd0-4ba7-a45c-f84a42f3bd50-m0.avro | Bin 0 -> 4405 bytes ...fe0557-72f8-4571-861f-1e38db10fcab-m0.avro | Bin 0 -> 4404 bytes ...fe0557-72f8-4571-861f-1e38db10fcab-m1.avro | Bin 0 -> 4406 bytes ...45bf07-cc23-431a-a734-119b9ba5ce66-m0.avro | Bin 0 -> 4403 bytes ...7dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro | Bin 0 -> 4404 bytes ...6b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro | Bin 0 -> 4407 bytes ...d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro | Bin 0 -> 4404 bytes ...21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro | Bin 0 -> 4406 bytes ...5224f2-319a-4b68-9db6-5469d6ed3879-m0.avro | Bin 0 -> 4407 bytes ...0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro | Bin 0 -> 4404 bytes ...4a211e-5120-4462-9cef-76ab53d2a056-m0.avro | Bin 0 -> 4407 bytes ...9f7ae1-abec-4da7-ac71-135f512de652-m0.avro | Bin 0 -> 4405 bytes ...44e2db-5959-4c27-8e91-e5ed66869db8-m0.avro | Bin 0 -> 4404 bytes ...09f507-047c-4d3b-b967-af45b8ced15c-m0.avro | Bin 0 -> 4404 bytes ...0b9af2-7966-497a-b16f-9cfbddd7f0ca-m0.avro | Bin 0 -> 4405 bytes ...212431-1c5a-4680-924d-cb722127f8b2-m0.avro | Bin 0 -> 4405 bytes ...c66652-5303-4cba-a9d6-8d909f55c160-m0.avro | Bin 0 -> 4404 bytes ...4d9444-0e3a-4ad0-93f5-3e3eb577a853-m0.avro | Bin 0 -> 4404 bytes ...51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro | Bin 0 -> 4405 bytes ...72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro | Bin 0 -> 4404 bytes ...443125-45ae-493f-b226-5729c263a793-m0.avro | Bin 0 -> 4404 bytes ...45d2b8-dc7f-4aea-8b70-4c27277ba9b1-m0.avro | Bin 0 -> 4404 bytes ...ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro | Bin 0 -> 4404 bytes ...8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro | Bin 0 -> 4404 bytes ...9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro | Bin 0 -> 4405 bytes ...c4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro | Bin 0 -> 4405 bytes ...568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro | Bin 0 -> 4404 bytes ...568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro | Bin 0 -> 4406 bytes ...309d30-424c-4c10-bb6d-79711a6576a8-m0.avro | Bin 0 -> 4404 bytes ...75c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro | Bin 0 -> 4404 bytes ...884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro | Bin 0 -> 4405 bytes ...73260d-3475-439f-a9fa-a76fa4e0e177-m0.avro | Bin 0 -> 4405 bytes ...e0a4be-6f80-4c5a-a750-e51d75296669-m0.avro | Bin 0 -> 4404 bytes ...92ab29-b58f-4338-812c-096249a28990-m0.avro | Bin 0 -> 4404 bytes ...9a338b-66dd-4282-8794-c8be344730ce-m0.avro | Bin 0 -> 4406 bytes ...c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro | Bin 0 -> 4404 bytes ...4b3bb3-5428-4a86-80ef-58fb739d9d9b-m0.avro | Bin 0 -> 4404 bytes ...364e18-9a58-42f2-a886-b079f1ccfabd-m0.avro | Bin 0 -> 4404 bytes ...28ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro | Bin 0 -> 4404 bytes ...caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro | Bin 0 -> 4404 bytes ...e05260-42fb-4b65-8ff2-fb0c04ea290a-m0.avro | Bin 0 -> 4405 bytes ...68c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro | Bin 0 -> 4404 bytes ...8a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro | Bin 0 -> 4407 bytes ...99ea5b-9db5-401c-b103-eac623af11f6-m0.avro | Bin 0 -> 4404 bytes ...e31041-a16b-4018-97a8-f54121d210e7-m0.avro | Bin 0 -> 4405 bytes ...e31041-a16b-4018-97a8-f54121d210e7-m1.avro | Bin 0 -> 4407 bytes ...2c96ad-d3bc-4ae7-89f9-12e7ae273785-m0.avro | Bin 0 -> 4405 bytes ...3f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro | Bin 0 -> 4404 bytes ...1b7da7-41ac-4224-b399-e95130d3bc1a-m0.avro | Bin 0 -> 4405 bytes ...2853cd-f607-4bb3-8a0c-0749c91539a3-m0.avro | Bin 0 -> 4405 bytes ...566f28-bd86-431b-ba97-fd70c8073fae-m0.avro | Bin 0 -> 4405 bytes ...674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro | Bin 0 -> 4404 bytes ...7e2165-822c-4192-a463-1384cab3f16d-m0.avro | Bin 0 -> 4404 bytes ...c97079-ddf1-4e1f-a902-5eb19ff98914-m0.avro | Bin 0 -> 4405 bytes ...c97079-ddf1-4e1f-a902-5eb19ff98914-m1.avro | Bin 0 -> 4406 bytes ...7221f8-b07c-4992-b24c-d23de23c47e6-m0.avro | Bin 0 -> 4404 bytes ...c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro | Bin 0 -> 4404 bytes ...80981e-c2a9-4f8d-bbf8-38033b7735a6-m0.avro | Bin 0 -> 4404 bytes ...3b4af9-a9de-4e9c-addc-401a7a626d9b-m0.avro | Bin 0 -> 4405 bytes ...192fbc-35b1-4090-b0d4-b0c858966378-m0.avro | Bin 0 -> 4405 bytes ...a9e15d-4031-4715-bf68-69610e86a620-m0.avro | Bin 0 -> 4404 bytes ...460c3d-034c-4f17-9db2-81edcb0f322d-m0.avro | Bin 0 -> 4404 bytes ...184284-5950-45ae-8dd9-1db19f4b0a31-m0.avro | Bin 0 -> 4405 bytes ...60ac97-208b-4c5d-9196-e952352617b8-m0.avro | Bin 0 -> 4405 bytes ...9caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro | Bin 0 -> 4405 bytes ...933998-38fb-415a-8c6f-65c20c4b60af-m0.avro | Bin 0 -> 4404 bytes ...b485aa-72dc-4245-a543-002d315794c0-m0.avro | Bin 0 -> 4405 bytes ...502702-5de9-4147-9f01-2a63f690f3f8-m0.avro | Bin 0 -> 4404 bytes ...502702-5de9-4147-9f01-2a63f690f3f8-m1.avro | Bin 0 -> 4406 bytes ...c4729e-faab-4e6b-a5da-b8c0de8541b7-m0.avro | Bin 0 -> 4405 bytes ...a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro | Bin 0 -> 4404 bytes ...743534-d4bf-44dd-84e9-8bde8ee730c0-m0.avro | Bin 0 -> 4405 bytes ...f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro | Bin 0 -> 4406 bytes ...961953-5e03-4ad4-aaaa-44c9629344a8-m0.avro | Bin 0 -> 4407 bytes ...f74252-bdf3-4d1e-b45f-4cf875682ac1-m0.avro | Bin 0 -> 4405 bytes ...5041a6-7503-46d7-a94a-e367abc8212f-m0.avro | Bin 0 -> 4404 bytes ...-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro | Bin 0 -> 2020 bytes ...-1811fb69-c4b7-4732-98a3-154c8e821d41.avro | Bin 0 -> 1788 bytes ...-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro | Bin 0 -> 1905 bytes ...-3737aece-7657-4840-905b-26cc0d4353e1.avro | Bin 0 -> 1904 bytes ...-1b8f6465-742a-450b-a358-12b08ae8ff62.avro | Bin 0 -> 2022 bytes ...-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro | Bin 0 -> 1773 bytes ...-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro | Bin 0 -> 1773 bytes ...-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro | Bin 0 -> 1773 bytes ...-d57221f8-b07c-4992-b24c-d23de23c47e6.avro | Bin 0 -> 1787 bytes ...-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro | Bin 0 -> 1788 bytes ...-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro | Bin 0 -> 2019 bytes ...-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro | Bin 0 -> 2021 bytes ...-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro | Bin 0 -> 1773 bytes ...-284b2273-468b-4c60-a6c4-99561a3f0d79.avro | Bin 0 -> 1788 bytes ...-7d4a211e-5120-4462-9cef-76ab53d2a056.avro | Bin 0 -> 1788 bytes ...-a1309d30-424c-4c10-bb6d-79711a6576a8.avro | Bin 0 -> 1772 bytes ...-767dfbab-4f1e-4dfd-ac6a-07deb840532f.avro | Bin 0 -> 1904 bytes ...-d07e2165-822c-4192-a463-1384cab3f16d.avro | Bin 0 -> 1904 bytes ...-93443125-45ae-493f-b226-5729c263a793.avro | Bin 0 -> 1903 bytes ...-406b5ff2-453b-431e-9cde-884ceff64876.avro | Bin 0 -> 2021 bytes ...-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.avro | Bin 0 -> 1904 bytes ...-464f1a0e-cd51-462b-b4c2-81e91f278432.avro | Bin 0 -> 2021 bytes ...-7445bf07-cc23-431a-a734-119b9ba5ce66.avro | Bin 0 -> 1785 bytes ...-dda9e15d-4031-4715-bf68-69610e86a620.avro | Bin 0 -> 1773 bytes ...-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro | Bin 0 -> 1773 bytes ...-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro | Bin 0 -> 1904 bytes ...-fe5041a6-7503-46d7-a94a-e367abc8212f.avro | Bin 0 -> 1903 bytes ...-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro | Bin 0 -> 1773 bytes ...-79d7103a-e46f-43fa-ae30-c19fd45e0406.avro | Bin 0 -> 1905 bytes ...-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro | Bin 0 -> 1788 bytes ...-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro | Bin 0 -> 1904 bytes ...-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro | Bin 0 -> 1903 bytes ...-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro | Bin 0 -> 1905 bytes ...-b4364e18-9a58-42f2-a886-b079f1ccfabd.avro | Bin 0 -> 1773 bytes ...-61b30373-a89a-44a1-bcee-d854aeb33acb.avro | Bin 0 -> 1904 bytes ...-8044e2db-5959-4c27-8e91-e5ed66869db8.avro | Bin 0 -> 1787 bytes ...-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.avro | Bin 0 -> 1904 bytes ...-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro | Bin 0 -> 1904 bytes ...-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro | Bin 0 -> 1904 bytes ...-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro | Bin 0 -> 1773 bytes ...-44d10516-886c-478f-8be2-84606aa42d96.avro | Bin 0 -> 1902 bytes ...-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro | Bin 0 -> 1773 bytes ...-ab92ab29-b58f-4338-812c-096249a28990.avro | Bin 0 -> 1904 bytes ...-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro | Bin 0 -> 1773 bytes ...-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro | Bin 0 -> 1773 bytes ...-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro | Bin 0 -> 1905 bytes ...-88c66652-5303-4cba-a9d6-8d909f55c160.avro | Bin 0 -> 1773 bytes ...-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro | Bin 0 -> 1904 bytes ...-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro | Bin 0 -> 1773 bytes ...-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro | Bin 0 -> 1788 bytes ...-14c93e86-c022-49c4-bc6f-35621c840a05.avro | Bin 0 -> 1904 bytes ...-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro | Bin 0 -> 1773 bytes ...-15411624-4674-4dcf-a2f5-46beb4722430.avro | Bin 0 -> 1901 bytes ...-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro | Bin 0 -> 1773 bytes ...-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro | Bin 0 -> 1904 bytes ...-d680981e-c2a9-4f8d-bbf8-38033b7735a6.avro | Bin 0 -> 1904 bytes ...-c099ea5b-9db5-401c-b103-eac623af11f6.avro | Bin 0 -> 1788 bytes ...-73fe0557-72f8-4571-861f-1e38db10fcab.avro | Bin 0 -> 1903 bytes ...-46363a35-c28c-4445-a9f3-27f83f5706a2.avro | Bin 0 -> 1904 bytes ...-8509f507-047c-4d3b-b967-af45b8ced15c.avro | Bin 0 -> 1788 bytes ...-eb933998-38fb-415a-8c6f-65c20c4b60af.avro | Bin 0 -> 1773 bytes ...-6882678a-6ff9-4924-958c-22b926e25638.avro | Bin 0 -> 2020 bytes ...-ee502702-5de9-4147-9f01-2a63f690f3f8.avro | Bin 0 -> 1904 bytes ...-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro | Bin 0 -> 1774 bytes ...-796b30f2-b5b9-4d82-9b7f-39a0a8276bfa.avro | Bin 0 -> 1789 bytes ...-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro | Bin 0 -> 1774 bytes ...-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro | Bin 0 -> 1774 bytes ...-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro | Bin 0 -> 1789 bytes ...-3c679dff-e9d2-4743-8c9f-41100f6ed284.avro | Bin 0 -> 1906 bytes ...-01e6f094-0145-4d30-be1e-b291d4941071.avro | Bin 0 -> 1789 bytes ...-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro | Bin 0 -> 2022 bytes ...-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro | Bin 0 -> 1774 bytes ...-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro | Bin 0 -> 1774 bytes ...-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro | Bin 0 -> 1774 bytes ...-7c5224f2-319a-4b68-9db6-5469d6ed3879.avro | Bin 0 -> 1789 bytes ...-24011efa-994c-4030-8da7-53357c467c6f.avro | Bin 0 -> 1906 bytes ...-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro | Bin 0 -> 1774 bytes ...-2b541d14-821b-4439-b27f-79328feb2cb7.avro | Bin 0 -> 1772 bytes ...-a175c05a-c6cf-46f3-b251-37ace98c68f3.avro | Bin 0 -> 1787 bytes ...-66fa771f-7647-43e2-8f86-fe095e1dc073.avro | Bin 0 -> 1774 bytes ...-335d413f-b61d-4446-a8b3-3b77c0e9d78b.avro | Bin 0 -> 1789 bytes ...-ecb485aa-72dc-4245-a543-002d315794c0.avro | Bin 0 -> 1905 bytes ...-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro | Bin 0 -> 1774 bytes ...-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro | Bin 0 -> 1789 bytes ...-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro | Bin 0 -> 1906 bytes ...-b09a338b-66dd-4282-8794-c8be344730ce.avro | Bin 0 -> 1789 bytes ...-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro | Bin 0 -> 1789 bytes ...-330bf2a8-7467-4ab1-879b-56ef0a34a4ca.avro | Bin 0 -> 1789 bytes ...-87212431-1c5a-4680-924d-cb722127f8b2.avro | Bin 0 -> 1905 bytes ...-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro | Bin 0 -> 1789 bytes ...-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro | Bin 0 -> 1774 bytes ...-ce566f28-bd86-431b-ba97-fd70c8073fae.avro | Bin 0 -> 2021 bytes ...-de460c3d-034c-4f17-9db2-81edcb0f322d.avro | Bin 0 -> 2019 bytes ...-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro | Bin 0 -> 1774 bytes ...-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro | Bin 0 -> 1789 bytes ...-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro | Bin 0 -> 1774 bytes ...-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro | Bin 0 -> 1905 bytes ...-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro | Bin 0 -> 1774 bytes ...-e560ac97-208b-4c5d-9196-e952352617b8.avro | Bin 0 -> 1789 bytes ...-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro | Bin 0 -> 1906 bytes ...-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro | Bin 0 -> 1774 bytes ...-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro | Bin 0 -> 1774 bytes ...-c0e31041-a16b-4018-97a8-f54121d210e7.avro | Bin 0 -> 1906 bytes ...-49d50ceb-ff50-4c31-8515-77245a727b91.avro | Bin 0 -> 1904 bytes ...-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro | Bin 0 -> 1774 bytes ...-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro | Bin 0 -> 1906 bytes ...-a273260d-3475-439f-a9fa-a76fa4e0e177.avro | Bin 0 -> 2021 bytes ...-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro | Bin 0 -> 2020 bytes ...-65f73aa1-e388-47f7-ad3c-0e0547345595.avro | Bin 0 -> 1905 bytes ...-ce2853cd-f607-4bb3-8a0c-0749c91539a3.avro | Bin 0 -> 1789 bytes ...-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.avro | Bin 0 -> 2022 bytes ...-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro | Bin 0 -> 1774 bytes ...-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro | Bin 0 -> 1772 bytes ...-dd192fbc-35b1-4090-b0d4-b0c858966378.avro | Bin 0 -> 1774 bytes ...-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro | Bin 0 -> 1789 bytes ...-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro | Bin 0 -> 1905 bytes ...-7e9f7ae1-abec-4da7-ac71-135f512de652.avro | Bin 0 -> 1906 bytes ...-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro | Bin 0 -> 1905 bytes ...-6d358415-49ec-446a-a261-bff1c048723b.avro | Bin 0 -> 1906 bytes ...-2cf0d335-5975-450e-b513-14e7c173188a.avro | Bin 0 -> 1774 bytes ...-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro | Bin 0 -> 1905 bytes ...-d3c97079-ddf1-4e1f-a902-5eb19ff98914.avro | Bin 0 -> 1905 bytes ...-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro | Bin 0 -> 1774 bytes ...-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro | Bin 0 -> 2021 bytes ...-d93b4af9-a9de-4e9c-addc-401a7a626d9b.avro | Bin 0 -> 1905 bytes ...-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro | Bin 0 -> 1774 bytes 498 files changed, 314 insertions(+), 25 deletions(-) create mode 100644 warehouse/test_ns.db/target/data/0000/0001/1000/11111010/00000-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet create mode 100644 warehouse/test_ns.db/target/data/0000/0010/1111/00001110/00000-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.parquet create mode 100644 warehouse/test_ns.db/target/data/0000/0100/0100/10101000/00000-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.parquet create mode 100644 warehouse/test_ns.db/target/data/0000/1111/1010/01010011/00000-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet create mode 100644 warehouse/test_ns.db/target/data/0001/0101/0000/11011100/00000-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.parquet create mode 100644 warehouse/test_ns.db/target/data/0001/0101/1111/01010001/00000-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.parquet create mode 100644 warehouse/test_ns.db/target/data/0001/0110/0001/10111110/00000-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.parquet create mode 100644 warehouse/test_ns.db/target/data/0001/0111/0110/01100000/00000-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet create mode 100644 warehouse/test_ns.db/target/data/0001/1111/1101/00111001/00000-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/0011/0101/11100001/00000-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/0011/1100/10011010/00000-0-464f1a0e-cd51-462b-b4c2-81e91f278432.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/0110/1111/00001001/00000-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/1000/1011/10100000/00000-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/1010/0000/11001011/00000-0-66fa771f-7647-43e2-8f86-fe095e1dc073.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/1110/1100/11101000/00000-0-46363a35-c28c-4445-a9f3-27f83f5706a2.parquet create mode 100644 warehouse/test_ns.db/target/data/0010/1111/0100/01111100/00000-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/0000/0001/01011010/00000-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/0001/0001/00110000/00000-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/0110/0100/00100101/00000-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/1000/0000/11000101/00000-0-6882678a-6ff9-4924-958c-22b926e25638.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/1001/0001/10100110/00000-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/1101/0101/00000010/00000-0-61b30373-a89a-44a1-bcee-d854aeb33acb.parquet create mode 100644 warehouse/test_ns.db/target/data/0011/1110/1001/00001001/00000-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/0000/0001/10101111/00000-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/0000/1010/00000101/00000-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/0000/1011/01111111/00000-0-7e9f7ae1-abec-4da7-ac71-135f512de652.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/0010/1010/01011000/00000-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/0101/0100/01000101/00000-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/0111/0001/10111011/00000-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/1111/0111/00001001/00000-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet create mode 100644 warehouse/test_ns.db/target/data/0100/1111/1101/10111110/00000-0-49d50ceb-ff50-4c31-8515-77245a727b91.parquet create mode 100644 warehouse/test_ns.db/target/data/0101/0000/0001/11001110/00000-0-3737aece-7657-4840-905b-26cc0d4353e1.parquet create mode 100644 warehouse/test_ns.db/target/data/0101/0000/1111/11111000/00000-0-65f73aa1-e388-47f7-ad3c-0e0547345595.parquet create mode 100644 warehouse/test_ns.db/target/data/0101/0010/1010/10100101/00000-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.parquet create mode 100644 warehouse/test_ns.db/target/data/0101/0011/1001/00101111/00000-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.parquet create mode 100644 warehouse/test_ns.db/target/data/0101/0101/0001/10010110/00000-0-88c66652-5303-4cba-a9d6-8d909f55c160.parquet create mode 100644 warehouse/test_ns.db/target/data/0101/1110/1100/10001001/00000-0-c0e31041-a16b-4018-97a8-f54121d210e7.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/0001/0100/10001011/00000-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/0011/1110/11010110/00000-0-93443125-45ae-493f-b226-5729c263a793.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/0110/0010/10011000/00000-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/1001/0110/11001011/00000-0-7445bf07-cc23-431a-a734-119b9ba5ce66.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/1011/1101/11011100/00000-0-ce2853cd-f607-4bb3-8a0c-0749c91539a3.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/1101/0001/10111010/00000-0-dd192fbc-35b1-4090-b0d4-b0c858966378.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/1101/1000/01110111/00000-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet create mode 100644 warehouse/test_ns.db/target/data/0110/1110/1111/11000001/00000-0-e560ac97-208b-4c5d-9196-e952352617b8.parquet create mode 100644 warehouse/test_ns.db/target/data/0111/0010/0110/11101000/00000-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.parquet create mode 100644 warehouse/test_ns.db/target/data/0111/0110/1011/00110110/00000-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.parquet create mode 100644 warehouse/test_ns.db/target/data/0111/1010/1100/01001110/00000-0-a1309d30-424c-4c10-bb6d-79711a6576a8.parquet create mode 100644 warehouse/test_ns.db/target/data/0111/1101/0001/11000111/00000-0-ecb485aa-72dc-4245-a543-002d315794c0.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/0011/0110/11000100/00000-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/0011/1010/00110111/00000-0-3c679dff-e9d2-4743-8c9f-41100f6ed284.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/0100/1111/11101000/00000-0-8509f507-047c-4d3b-b967-af45b8ced15c.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/0110/0010/10001111/00000-0-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/0110/0110/10001101/00000-0-406b5ff2-453b-431e-9cde-884ceff64876.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/0111/0000/11111111/00000-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/1000/0111/01001000/00000-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/1100/0011/11010010/00000-0-15411624-4674-4dcf-a2f5-46beb4722430.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/1101/1011/11000000/00000-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.parquet create mode 100644 warehouse/test_ns.db/target/data/1000/1110/1001/00011111/00000-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/0010/0100/11010001/00000-0-a273260d-3475-439f-a9fa-a76fa4e0e177.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/0101/0000/11110011/00000-0-ab92ab29-b58f-4338-812c-096249a28990.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/0101/0111/10011011/00000-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/0101/1001/11001000/00000-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1010/0100/00110101/00000-0-1b8f6465-742a-450b-a358-12b08ae8ff62.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1010/1001/00111011/00000-0-c099ea5b-9db5-401c-b103-eac623af11f6.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1010/1110/11100000/00000-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1010/1111/01110101/00000-0-fe5041a6-7503-46d7-a94a-e367abc8212f.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1100/0110/00010010/00000-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1101/0001/10100000/00000-0-73fe0557-72f8-4571-861f-1e38db10fcab.parquet create mode 100644 warehouse/test_ns.db/target/data/1001/1101/1011/11110110/00000-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0001/0001/01110001/00000-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0011/0001/11110010/00000-0-87212431-1c5a-4680-924d-cb722127f8b2.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0011/1011/01000110/00000-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0011/1110/00101000/00000-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0101/0101/01101110/00000-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0110/0110/01001111/00000-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/0110/0111/10010110/00000-0-de460c3d-034c-4f17-9db2-81edcb0f322d.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/1000/1111/11011101/00000-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/1100/0111/10111011/00000-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.parquet create mode 100644 warehouse/test_ns.db/target/data/1010/1110/1110/10100001/00000-0-2cf0d335-5975-450e-b513-14e7c173188a.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/0010/1011/01100100/00000-0-14c93e86-c022-49c4-bc6f-35621c840a05.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/0100/0010/00010100/00000-0-8044e2db-5959-4c27-8e91-e5ed66869db8.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/0101/1010/01101111/00000-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/0110/1101/00010011/00000-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/1001/0011/00000111/00000-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/1001/1001/11001101/00000-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/1010/0100/01100100/00000-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/1011/0110/01000110/00000-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.parquet create mode 100644 warehouse/test_ns.db/target/data/1011/1101/1010/10101111/00000-0-ee502702-5de9-4147-9f01-2a63f690f3f8.parquet create mode 100644 warehouse/test_ns.db/target/data/1100/0101/0001/00011111/00000-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet create mode 100644 warehouse/test_ns.db/target/data/1100/0101/0001/11111111/00000-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.parquet create mode 100644 warehouse/test_ns.db/target/data/1100/1110/1110/00011110/00000-0-24011efa-994c-4030-8da7-53357c467c6f.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/0001/0100/01101000/00000-0-b4364e18-9a58-42f2-a886-b079f1ccfabd.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/0001/1000/10011010/00000-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/0001/1001/11111010/00000-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/0011/0101/10000111/00000-0-eb933998-38fb-415a-8c6f-65c20c4b60af.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/0111/0001/00111011/00000-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/1010/1100/10110011/00000-0-dda9e15d-4031-4715-bf68-69610e86a620.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/1011/1011/11011001/00000-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/1100/0000/00100111/00000-0-44d10516-886c-478f-8be2-84606aa42d96.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/1100/1001/11101001/00000-0-d57221f8-b07c-4992-b24c-d23de23c47e6.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/1110/0011/10001010/00000-0-2b541d14-821b-4439-b27f-79328feb2cb7.parquet create mode 100644 warehouse/test_ns.db/target/data/1101/1110/1010/11001100/00000-0-6d358415-49ec-446a-a261-bff1c048723b.parquet create mode 100644 warehouse/test_ns.db/target/data/1110/0011/0000/10110011/00000-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet create mode 100644 warehouse/test_ns.db/target/data/1110/1000/1001/01111100/00000-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet create mode 100644 warehouse/test_ns.db/target/data/1110/1000/1100/10011011/00000-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.parquet create mode 100644 warehouse/test_ns.db/target/data/1110/1001/0111/10111110/00000-0-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.parquet create mode 100644 warehouse/test_ns.db/target/data/1110/1110/1110/01110010/00000-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet create mode 100644 warehouse/test_ns.db/target/data/1111/0011/0101/01111111/00000-0-d07e2165-822c-4192-a463-1384cab3f16d.parquet create mode 100644 warehouse/test_ns.db/target/data/1111/0100/1111/01001110/00000-0-284b2273-468b-4c60-a6c4-99561a3f0d79.parquet create mode 100644 warehouse/test_ns.db/target/data/1111/0110/1001/01100011/00000-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.parquet create mode 100644 warehouse/test_ns.db/target/data/1111/1100/0001/01101011/00000-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.parquet create mode 100644 warehouse/test_ns.db/target/data/1111/1101/0111/00101010/00000-0-ce566f28-bd86-431b-ba97-fd70c8073fae.parquet create mode 100644 warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/01e6f094-0145-4d30-be1e-b291d4941071-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/08f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/0ab31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/0bdb173b-1d0e-457c-acd7-bd379e96c1a2-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/0e2a44fd-e823-43b1-a1eb-66890d16181a-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/1181aa39-f25a-47e3-8909-bbb955d63a1b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/15411624-4674-4dcf-a2f5-46beb4722430-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/1811fb69-c4b7-4732-98a3-154c8e821d41-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/18d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/1b8f6465-742a-450b-a358-12b08ae8ff62-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/1d1fbc5e-5056-49f0-b44b-3c695b3b6812-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/203f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/24011efa-994c-4030-8da7-53357c467c6f-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/284b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/28820ce5-8545-4c2c-ad01-d2d70ca569fc-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/2b541d14-821b-4439-b27f-79328feb2cb7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/2c17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/2c4c63ea-a734-4f86-b728-d35d56b3180c-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/2cf0d335-5975-450e-b513-14e7c173188a-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/30f15f72-e09c-4a97-9812-0ee2b5b7b597-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/32e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/330bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/335d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/3624e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/3737aece-7657-4840-905b-26cc0d4353e1-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/3737aece-7657-4840-905b-26cc0d4353e1-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/3c679dff-e9d2-4743-8c9f-41100f6ed284-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/406b5ff2-453b-431e-9cde-884ceff64876-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/44d10516-886c-478f-8be2-84606aa42d96-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/46363a35-c28c-4445-a9f3-27f83f5706a2-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/46363a35-c28c-4445-a9f3-27f83f5706a2-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/464f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/49d50ceb-ff50-4c31-8515-77245a727b91-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/5276888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/54dc647f-b4a4-4e63-9a86-56ee7d6f5e07-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/59bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/5dd4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/5e92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/60238f24-b593-4f0e-8ea8-4ede49211ff9-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/61b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/62985c5d-a0c2-4a0d-9431-a91c756b2433-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/62bae933-47ed-4fe2-b10e-e52b1e6a93ed-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/65f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/66fa771f-7647-43e2-8f86-fe095e1dc073-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/672d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/6882678a-6ff9-4924-958c-22b926e25638-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/6e467c7d-af98-4d40-b5c3-78a4507807d2-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/725bfd51-ebd0-4ba7-a45c-f84a42f3bd50-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/7445bf07-cc23-431a-a734-119b9ba5ce66-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/767dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/796b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/79d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/7b21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/7c5224f2-319a-4b68-9db6-5469d6ed3879-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/7d0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/7d4a211e-5120-4462-9cef-76ab53d2a056-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/7e9f7ae1-abec-4da7-ac71-135f512de652-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/8044e2db-5959-4c27-8e91-e5ed66869db8-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/8509f507-047c-4d3b-b967-af45b8ced15c-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/860b9af2-7966-497a-b16f-9cfbddd7f0ca-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/87212431-1c5a-4680-924d-cb722127f8b2-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/88c66652-5303-4cba-a9d6-8d909f55c160-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/8b4d9444-0e3a-4ad0-93f5-3e3eb577a853-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/8b51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/8b72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/93443125-45ae-493f-b226-5729c263a793-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/9545d2b8-dc7f-4aea-8b70-4c27277ba9b1-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/9a8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/9cc4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/a1309d30-424c-4c10-bb6d-79711a6576a8-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/a175c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/a1884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/a273260d-3475-439f-a9fa-a76fa4e0e177-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/a3e0a4be-6f80-4c5a-a750-e51d75296669-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ab92ab29-b58f-4338-812c-096249a28990-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b09a338b-66dd-4282-8794-c8be344730ce-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b1c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b34b3bb3-5428-4a86-80ef-58fb739d9d9b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b4364e18-9a58-42f2-a886-b079f1ccfabd-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b528ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b7caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/b7e05260-42fb-4b65-8ff2-fb0c04ea290a-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/c068c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/c099ea5b-9db5-401c-b103-eac623af11f6-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/c22c96ad-d3bc-4ae7-89f9-12e7ae273785-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/c73f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/cd1b7da7-41ac-4224-b399-e95130d3bc1a-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ce2853cd-f607-4bb3-8a0c-0749c91539a3-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ce566f28-bd86-431b-ba97-fd70c8073fae-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ce674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d07e2165-822c-4192-a463-1384cab3f16d-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d3c97079-ddf1-4e1f-a902-5eb19ff98914-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d3c97079-ddf1-4e1f-a902-5eb19ff98914-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/d57221f8-b07c-4992-b24c-d23de23c47e6-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d5c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d680981e-c2a9-4f8d-bbf8-38033b7735a6-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d93b4af9-a9de-4e9c-addc-401a7a626d9b-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/dd192fbc-35b1-4090-b0d4-b0c858966378-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/dda9e15d-4031-4715-bf68-69610e86a620-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/de460c3d-034c-4f17-9db2-81edcb0f322d-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/e0184284-5950-45ae-8dd9-1db19f4b0a31-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/e560ac97-208b-4c5d-9196-e952352617b8-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/eb933998-38fb-415a-8c6f-65c20c4b60af-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ecb485aa-72dc-4245-a543-002d315794c0-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m1.avro create mode 100644 warehouse/test_ns.db/target/metadata/f5c4729e-faab-4e6b-a5da-b8c0de8541b7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/f8a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/f9743534-d4bf-44dd-84e9-8bde8ee730c0-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/f9f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/fb961953-5e03-4ad4-aaaa-44c9629344a8-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/fdf74252-bdf3-4d1e-b45f-4cf875682ac1-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/fe5041a6-7503-46d7-a94a-e367abc8212f-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1165795474348715640-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1445752429382423980-0-3737aece-7657-4840-905b-26cc0d4353e1.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1457045964290920894-0-1b8f6465-742a-450b-a358-12b08ae8ff62.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-156875929699079505-0-d57221f8-b07c-4992-b24c-d23de23c47e6.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1644775352898622177-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1844314770242601776-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2179686375286065422-0-7d4a211e-5120-4462-9cef-76ab53d2a056.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-224386441439912473-0-a1309d30-424c-4c10-bb6d-79711a6576a8.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2251096554203142244-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2492927377825459959-0-406b5ff2-453b-431e-9cde-884ceff64876.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2537810747946166223-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-285316391250252069-0-fe5041a6-7503-46d7-a94a-e367abc8212f.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-2986888869253216203-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3224723533606729102-0-b4364e18-9a58-42f2-a886-b079f1ccfabd.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-329543906335174018-0-8044e2db-5959-4c27-8e91-e5ed66869db8.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3340463550367158800-0-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3420590106920179313-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-346030801285740797-0-44d10516-886c-478f-8be2-84606aa42d96.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-3964058929230744404-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4092764208808402358-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4183019543520611480-0-73fe0557-72f8-4571-861f-1e38db10fcab.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4312681858952059679-0-eb933998-38fb-415a-8c6f-65c20c4b60af.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4489414154952635593-0-6882678a-6ff9-4924-958c-22b926e25638.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4489525212361156766-0-ee502702-5de9-4147-9f01-2a63f690f3f8.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4915605823239118202-0-796b30f2-b5b9-4d82-9b7f-39a0a8276bfa.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5376886020839292182-0-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5395725435613174339-0-3c679dff-e9d2-4743-8c9f-41100f6ed284.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5620569175367488250-0-01e6f094-0145-4d30-be1e-b291d4941071.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5801931121445824490-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5824616610361792412-0-7c5224f2-319a-4b68-9db6-5469d6ed3879.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5871250312332596167-0-24011efa-994c-4030-8da7-53357c467c6f.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-5940108511084569748-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-603282837849840371-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6234413701284196546-0-66fa771f-7647-43e2-8f86-fe095e1dc073.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6240071354120329714-0-335d413f-b61d-4446-a8b3-3b77c0e9d78b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6473024829048856312-0-ecb485aa-72dc-4245-a543-002d315794c0.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6901877966207604987-0-330bf2a8-7467-4ab1-879b-56ef0a34a4ca.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6925287486837365462-0-87212431-1c5a-4680-924d-cb722127f8b2.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6933179781506472663-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7197919905951446818-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7354261991702844234-0-e560ac97-208b-4c5d-9196-e952352617b8.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7543542099974651966-0-c0e31041-a16b-4018-97a8-f54121d210e7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7909803071496021477-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8005085842327209807-0-65f73aa1-e388-47f7-ad3c-0e0547345595.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8198039180664750375-0-ce2853cd-f607-4bb3-8a0c-0749c91539a3.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8288941973562284942-0-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-833805222481799210-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8401722351562146185-0-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8454039229635992797-0-7e9f7ae1-abec-4da7-ac71-135f512de652.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8768996550935756846-0-6d358415-49ec-446a-a261-bff1c048723b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8932309241501447446-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-9125775206094479309-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-9164726099961267182-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 90d9eb001d..bb82a3e9fb 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1104,6 +1104,9 @@ def merge_rows(self, df: pa.Table, join_cols: list when_matched_update_all = merge_options.get('when_matched_update_all', False) when_not_matched_insert_all = merge_options.get('when_not_matched_insert_all', False) + if when_matched_update_all == False and when_not_matched_insert_all == False: + return {'rows_updated': 0, 'rows_inserted': 0, 'msg': 'no merge options selected...exiting'} + ctx = SessionContext() @@ -1121,38 +1124,33 @@ def merge_rows(self, df: pa.Table, join_cols: list source_col_types = {col[0]: col[1] for col in source_col_list} #target_col_types = {col[0]: col[1] for col in target_col_list} - missing_columns = merge_rows_util.do_join_columns_exist(source_col_names, target_col_names, self.join_cols) + missing_columns = merge_rows_util.do_join_columns_exist(source_col_names, target_col_names, join_cols) if missing_columns['source'] or missing_columns['target']: raise Exception(f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}") #check for dups on source - if merge_rows_util.dups_check_in_source(source_table_name, join_cols): + if merge_rows_util.dups_check_in_source(source_table_name, join_cols, ctx): raise Exception(f"Duplicate rows found in source table based on the key columns [{', '.join(join_cols)}]") - - - # Get the rows to update - update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) - #print(update_recs_sql) - update_recs = ctx.sql(update_recs_sql).to_arrow_table() - - update_row_cnt = len(update_recs) - - insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(self.source_table_name, self.target_table_name, self.join_cols, source_col_names, target_col_names) - #print(insert_recs_sql) - insert_recs = self.cn.sql(insert_recs_sql).to_arrow_table() - - insert_row_cnt = len(insert_recs) + update_row_cnt = 0 + insert_row_cnt = 0 txn = self.transaction() try: if when_matched_update_all: + + # Get the rows to update + update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) + #print(update_recs_sql) + update_recs = ctx.sql(update_recs_sql).to_arrow_table() + + update_row_cnt = len(update_recs) - if len(self.join_cols) == 1: - join_col = self.join_cols[0] + if len(join_cols) == 1: + join_col = join_cols[0] col_type = source_col_types[join_col] values = [row[join_col] for row in update_recs.to_pylist()] # if strings are in the filter, we encapsulate with tick marks @@ -1171,6 +1169,11 @@ def merge_rows(self, df: pa.Table, join_cols: list # Insert the new records if when_not_matched_insert_all: + insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) + + insert_recs = ctx.sql(insert_recs_sql).to_arrow_table() + + insert_row_cnt = len(insert_recs) txn.append(insert_recs) diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index f4ee4b2c0c..2e771cd3ac 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -1,14 +1,14 @@ ## unit test for merging rows + from datafusion import SessionContext from pyiceberg.catalog.sql import SqlCatalog + ctx = SessionContext() def merge_rows_test_1(): - print('**** START ***') - warehouse_path = "./warehouse" catalog = SqlCatalog( "default", @@ -17,12 +17,9 @@ def merge_rows_test_1(): "warehouse": f"file://{warehouse_path}", }, ) - - print(' ***** CATALOG CREATED *****') namespace = "test_ns" - catalog.create_namespace_if_not_exists(namespace=namespace) - print('namespace created') + catalog.create_namespace(namespace=namespace) df = ctx.sql(""" select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type @@ -46,8 +43,180 @@ def merge_rows_test_1(): res = table.merge_rows(df_new, ["order_id"]) + assert res['rows_updated'] == 1, "rows updated should be 1" + assert res['rows_inserted'] == 1, "rows inserted should be 1" + + #print(res) + +def merge_rows_test_2(): + + warehouse_path = "./warehouse" + catalog = SqlCatalog( + "default", + **{ + "uri": f"sqlite:///:memory:", + "warehouse": f"file://{warehouse_path}", + }, + ) + + namespace = "test_ns" + catalog.create_namespace(namespace=namespace) + + df = ctx.sql(""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type + """).to_arrow_table() + + table = catalog.create_table(f"{namespace}.target", df.schema) + + table.append(df) + + ## generate new dataset to upsert + df_new = ctx.sql(""" + select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type + union all + select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type + union all + select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type + """).to_arrow_table() + + + res = table.merge_rows(df_new, ["order_id"]) + + assert res['rows_updated'] == 2, "rows updated should be 2" + assert res['rows_inserted'] == 2, "rows inserted should be 2" + + #print(res) + +def merge_rows_test_3(): + + warehouse_path = "./warehouse" + catalog = SqlCatalog( + "default", + **{ + "uri": f"sqlite:///:memory:", + "warehouse": f"file://{warehouse_path}", + }, + ) + + namespace = "test_ns" + catalog.create_namespace(namespace=namespace) + + df = ctx.sql(""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type + """).to_arrow_table() + + table = catalog.create_table(f"{namespace}.target", df.schema) + + table.append(df) + + ## generate new dataset to upsert + df_new = ctx.sql(""" + select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type + union all + select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type + union all + select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type + """).to_arrow_table() + + + res = table.merge_rows(df_new, ["order_id"], merge_options={'when_not_matched_insert_all': True}) print(res) + assert res['rows_updated'] == 0, "rows updated should be 0" + assert res['rows_inserted'] == 2, "rows inserted should be 2" + + +def merge_rows_test_4(): + + warehouse_path = "./warehouse" + catalog = SqlCatalog( + "default", + **{ + "uri": f"sqlite:///:memory:", + "warehouse": f"file://{warehouse_path}", + }, + ) + + namespace = "test_ns" + catalog.create_namespace(namespace=namespace) + + df = ctx.sql(""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type + """).to_arrow_table() + + table = catalog.create_table(f"{namespace}.target", df.schema) + + table.append(df) + + ## generate new dataset to upsert + df_new = ctx.sql(""" + select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type + union all + select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type + union all + select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type + """).to_arrow_table() + + + res = table.merge_rows(df_new, ["order_id"], merge_options={'when_matched_update_all': True}) + print(res) + assert res['rows_updated'] == 2, "rows updated should be 2" + assert res['rows_inserted'] == 0, "rows inserted should be 0" + +def merge_rows_test_5(): + warehouse_path = "./warehouse" + catalog = SqlCatalog( + "default", + **{ + "uri": f"sqlite:///:memory:", + "warehouse": f"file://{warehouse_path}", + }, + ) + + namespace = "test_ns" + catalog.create_namespace(namespace=namespace) + + df = ctx.sql(""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type + """).to_arrow_table() + + table = catalog.create_table(f"{namespace}.target", df.schema) + + table.append(df) + + ## generate new dataset to upsert + df_new = ctx.sql(""" + select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type + union all + select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type + union all + select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type + union all + select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type + """).to_arrow_table() + + + res = table.merge_rows(df_new, ["order_id"], merge_options={'no_options': True}) + print(res) + #assert res['rows_updated'] == 2, "rows updated should be 2" + #assert res['rows_inserted'] == 0, "rows inserted should be 0" if __name__ == "__main__": merge_rows_test_1() - + merge_rows_test_2() + merge_rows_test_3() + merge_rows_test_4() + merge_rows_test_5() diff --git a/warehouse/test_ns.db/target/data/0000/0001/1000/11111010/00000-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet b/warehouse/test_ns.db/target/data/0000/0001/1000/11111010/00000-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0000/0010/1111/00001110/00000-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.parquet b/warehouse/test_ns.db/target/data/0000/0010/1111/00001110/00000-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0000/0100/0100/10101000/00000-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.parquet b/warehouse/test_ns.db/target/data/0000/0100/0100/10101000/00000-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0000/1111/1010/01010011/00000-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet b/warehouse/test_ns.db/target/data/0000/1111/1010/01010011/00000-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet new file mode 100644 index 0000000000000000000000000000000000000000..613e73a9075cba3d3016346e7652acee2e8ec88b GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0001/0101/1111/01010001/00000-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.parquet b/warehouse/test_ns.db/target/data/0001/0101/1111/01010001/00000-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0001/0110/0001/10111110/00000-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.parquet b/warehouse/test_ns.db/target/data/0001/0110/0001/10111110/00000-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0001/0111/0110/01100000/00000-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet b/warehouse/test_ns.db/target/data/0001/0111/0110/01100000/00000-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0001/1111/1101/00111001/00000-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet b/warehouse/test_ns.db/target/data/0001/1111/1101/00111001/00000-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0010/0011/0101/11100001/00000-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.parquet b/warehouse/test_ns.db/target/data/0010/0011/0101/11100001/00000-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0010/0011/1100/10011010/00000-0-464f1a0e-cd51-462b-b4c2-81e91f278432.parquet b/warehouse/test_ns.db/target/data/0010/0011/1100/10011010/00000-0-464f1a0e-cd51-462b-b4c2-81e91f278432.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0010/0110/1111/00001001/00000-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet b/warehouse/test_ns.db/target/data/0010/0110/1111/00001001/00000-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0010/1000/1011/10100000/00000-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.parquet b/warehouse/test_ns.db/target/data/0010/1000/1011/10100000/00000-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de GIT binary patch literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0010/1110/1100/11101000/00000-0-46363a35-c28c-4445-a9f3-27f83f5706a2.parquet b/warehouse/test_ns.db/target/data/0010/1110/1100/11101000/00000-0-46363a35-c28c-4445-a9f3-27f83f5706a2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0010/1111/0100/01111100/00000-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.parquet b/warehouse/test_ns.db/target/data/0010/1111/0100/01111100/00000-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0011/0000/0001/01011010/00000-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.parquet b/warehouse/test_ns.db/target/data/0011/0000/0001/01011010/00000-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de GIT binary patch literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0011/0110/0100/00100101/00000-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet b/warehouse/test_ns.db/target/data/0011/0110/0100/00100101/00000-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0011/1000/0000/11000101/00000-0-6882678a-6ff9-4924-958c-22b926e25638.parquet b/warehouse/test_ns.db/target/data/0011/1000/0000/11000101/00000-0-6882678a-6ff9-4924-958c-22b926e25638.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0011/1001/0001/10100110/00000-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.parquet b/warehouse/test_ns.db/target/data/0011/1001/0001/10100110/00000-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0011/1101/0101/00000010/00000-0-61b30373-a89a-44a1-bcee-d854aeb33acb.parquet b/warehouse/test_ns.db/target/data/0011/1101/0101/00000010/00000-0-61b30373-a89a-44a1-bcee-d854aeb33acb.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0011/1110/1001/00001001/00000-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.parquet b/warehouse/test_ns.db/target/data/0011/1110/1001/00001001/00000-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0100/0000/0001/10101111/00000-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.parquet b/warehouse/test_ns.db/target/data/0100/0000/0001/10101111/00000-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.parquet new file mode 100644 index 0000000000000000000000000000000000000000..613e73a9075cba3d3016346e7652acee2e8ec88b GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbYuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0100/0000/1011/01111111/00000-0-7e9f7ae1-abec-4da7-ac71-135f512de652.parquet b/warehouse/test_ns.db/target/data/0100/0000/1011/01111111/00000-0-7e9f7ae1-abec-4da7-ac71-135f512de652.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0100/0010/1010/01011000/00000-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.parquet b/warehouse/test_ns.db/target/data/0100/0010/1010/01011000/00000-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=cYuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0100/0111/0001/10111011/00000-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet b/warehouse/test_ns.db/target/data/0100/0111/0001/10111011/00000-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0100/1111/0111/00001001/00000-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet b/warehouse/test_ns.db/target/data/0100/1111/0111/00001001/00000-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0100/1111/1101/10111110/00000-0-49d50ceb-ff50-4c31-8515-77245a727b91.parquet b/warehouse/test_ns.db/target/data/0100/1111/1101/10111110/00000-0-49d50ceb-ff50-4c31-8515-77245a727b91.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0101/0000/0001/11001110/00000-0-3737aece-7657-4840-905b-26cc0d4353e1.parquet b/warehouse/test_ns.db/target/data/0101/0000/0001/11001110/00000-0-3737aece-7657-4840-905b-26cc0d4353e1.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0101/0000/1111/11111000/00000-0-65f73aa1-e388-47f7-ad3c-0e0547345595.parquet b/warehouse/test_ns.db/target/data/0101/0000/1111/11111000/00000-0-65f73aa1-e388-47f7-ad3c-0e0547345595.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0101/0010/1010/10100101/00000-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.parquet b/warehouse/test_ns.db/target/data/0101/0010/1010/10100101/00000-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.parquet new file mode 100644 index 0000000000000000000000000000000000000000..613e73a9075cba3d3016346e7652acee2e8ec88b GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0101/0101/0001/10010110/00000-0-88c66652-5303-4cba-a9d6-8d909f55c160.parquet b/warehouse/test_ns.db/target/data/0101/0101/0001/10010110/00000-0-88c66652-5303-4cba-a9d6-8d909f55c160.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0101/1110/1100/10001001/00000-0-c0e31041-a16b-4018-97a8-f54121d210e7.parquet b/warehouse/test_ns.db/target/data/0101/1110/1100/10001001/00000-0-c0e31041-a16b-4018-97a8-f54121d210e7.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0110/0001/0100/10001011/00000-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet b/warehouse/test_ns.db/target/data/0110/0001/0100/10001011/00000-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0110/0011/1110/11010110/00000-0-93443125-45ae-493f-b226-5729c263a793.parquet b/warehouse/test_ns.db/target/data/0110/0011/1110/11010110/00000-0-93443125-45ae-493f-b226-5729c263a793.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0110/1001/0110/11001011/00000-0-7445bf07-cc23-431a-a734-119b9ba5ce66.parquet b/warehouse/test_ns.db/target/data/0110/1001/0110/11001011/00000-0-7445bf07-cc23-431a-a734-119b9ba5ce66.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de GIT binary patch literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0110/1101/1000/01110111/00000-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet b/warehouse/test_ns.db/target/data/0110/1101/1000/01110111/00000-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0110/1110/1111/11000001/00000-0-e560ac97-208b-4c5d-9196-e952352617b8.parquet b/warehouse/test_ns.db/target/data/0110/1110/1111/11000001/00000-0-e560ac97-208b-4c5d-9196-e952352617b8.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de GIT binary patch literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0111/0110/1011/00110110/00000-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.parquet b/warehouse/test_ns.db/target/data/0111/0110/1011/00110110/00000-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0111/1010/1100/01001110/00000-0-a1309d30-424c-4c10-bb6d-79711a6576a8.parquet b/warehouse/test_ns.db/target/data/0111/1010/1100/01001110/00000-0-a1309d30-424c-4c10-bb6d-79711a6576a8.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/0111/1101/0001/11000111/00000-0-ecb485aa-72dc-4245-a543-002d315794c0.parquet b/warehouse/test_ns.db/target/data/0111/1101/0001/11000111/00000-0-ecb485aa-72dc-4245-a543-002d315794c0.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=chA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=c|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1000/0110/0110/10001101/00000-0-406b5ff2-453b-431e-9cde-884ceff64876.parquet b/warehouse/test_ns.db/target/data/1000/0110/0110/10001101/00000-0-406b5ff2-453b-431e-9cde-884ceff64876.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1000/0111/0000/11111111/00000-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet b/warehouse/test_ns.db/target/data/1000/0111/0000/11111111/00000-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1000/1000/0111/01001000/00000-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.parquet b/warehouse/test_ns.db/target/data/1000/1000/0111/01001000/00000-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1000/1100/0011/11010010/00000-0-15411624-4674-4dcf-a2f5-46beb4722430.parquet b/warehouse/test_ns.db/target/data/1000/1100/0011/11010010/00000-0-15411624-4674-4dcf-a2f5-46beb4722430.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1000/1110/1001/00011111/00000-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet b/warehouse/test_ns.db/target/data/1000/1110/1001/00011111/00000-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/0010/0100/11010001/00000-0-a273260d-3475-439f-a9fa-a76fa4e0e177.parquet b/warehouse/test_ns.db/target/data/1001/0010/0100/11010001/00000-0-a273260d-3475-439f-a9fa-a76fa4e0e177.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/0101/0000/11110011/00000-0-ab92ab29-b58f-4338-812c-096249a28990.parquet b/warehouse/test_ns.db/target/data/1001/0101/0000/11110011/00000-0-ab92ab29-b58f-4338-812c-096249a28990.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/0101/1001/11001000/00000-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.parquet b/warehouse/test_ns.db/target/data/1001/0101/1001/11001000/00000-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/1010/0100/00110101/00000-0-1b8f6465-742a-450b-a358-12b08ae8ff62.parquet b/warehouse/test_ns.db/target/data/1001/1010/0100/00110101/00000-0-1b8f6465-742a-450b-a358-12b08ae8ff62.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/1010/1001/00111011/00000-0-c099ea5b-9db5-401c-b103-eac623af11f6.parquet b/warehouse/test_ns.db/target/data/1001/1010/1001/00111011/00000-0-c099ea5b-9db5-401c-b103-eac623af11f6.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f12431457bbc3e298663feeacbeb8bbb717a612f GIT binary patch literal 1269 zcmb7^J8#-h6o8M7Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)ahA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=cYuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/1100/0110/00010010/00000-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.parquet b/warehouse/test_ns.db/target/data/1001/1100/0110/00010010/00000-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/1101/0001/10100000/00000-0-73fe0557-72f8-4571-861f-1e38db10fcab.parquet b/warehouse/test_ns.db/target/data/1001/1101/0001/10100000/00000-0-73fe0557-72f8-4571-861f-1e38db10fcab.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1001/1101/1011/11110110/00000-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.parquet b/warehouse/test_ns.db/target/data/1001/1101/1011/11110110/00000-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/0011/0001/11110010/00000-0-87212431-1c5a-4680-924d-cb722127f8b2.parquet b/warehouse/test_ns.db/target/data/1010/0011/0001/11110010/00000-0-87212431-1c5a-4680-924d-cb722127f8b2.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/0011/1110/00101000/00000-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet b/warehouse/test_ns.db/target/data/1010/0011/1110/00101000/00000-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/0101/0101/01101110/00000-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet b/warehouse/test_ns.db/target/data/1010/0101/0101/01101110/00000-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/0110/0110/01001111/00000-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet b/warehouse/test_ns.db/target/data/1010/0110/0110/01001111/00000-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/0110/0111/10010110/00000-0-de460c3d-034c-4f17-9db2-81edcb0f322d.parquet b/warehouse/test_ns.db/target/data/1010/0110/0111/10010110/00000-0-de460c3d-034c-4f17-9db2-81edcb0f322d.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/1000/1111/11011101/00000-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet b/warehouse/test_ns.db/target/data/1010/1000/1111/11011101/00000-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/1100/0111/10111011/00000-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.parquet b/warehouse/test_ns.db/target/data/1010/1100/0111/10111011/00000-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1010/1110/1110/10100001/00000-0-2cf0d335-5975-450e-b513-14e7c173188a.parquet b/warehouse/test_ns.db/target/data/1010/1110/1110/10100001/00000-0-2cf0d335-5975-450e-b513-14e7c173188a.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1cd3359562b1a3cf9c4c286cd53e37186f3d53b2 GIT binary patch literal 1269 zcmb7EJ8#-h82xN4WJL_9%C&6C1FD3@&^$;)lvK%Z%`2ga!b2G1r6S;v2q-R)62|Tw zI(F>TxkD>;=-B>=oQ@iy?oBO$ATg+Cz--xZ0i^gcm$C6yzwU% zeGMQ(u%zk9fQ6a<1jnKngiT$YP3Y=uMuWryRRj>IAp<}P$pYc=9G}Voz8?a7!|xK0 zLLFV99^&82mT^~^HHW)WLPi|3Y2%B?JCKlUT|({!ea3ML^zg8G>Gc{c3`~iGuJ#8l zZ}9x8Rh5CsSXc=Pt;WcUM^cK}MHm*jYm6qo7l%~XG_j#6hH30uU^2x>K{#sM;jxIO zXkR7mmt;AX`aiZB^fFKkSr)|ufC%I%!99I~;*F$zl&lZ3^;o@9+d7T zK)c#o$@&?x-i6FtHwwWoo>`WIz`)(*Eh=Oz5oddB&f z+ijlXyv@^XQL}O2grYR(M|5I7J29hHW=!=aZ2{CZK~rXz3EDoR7@x;502Mif`Mrso zcP91ia;llHVj)W{u^ko>fo7?kUF;4R(aWP&v zN042r9^s`p&k25^KTmnE@ZOxCZx=dly>Q{?bDJ(P2o~DXS-Ou96%@%cenLZiMlEjigihRHa)xS7ZqoI1^8GH zs%Gy8&(iICTGA_^3FM!8vDYSD=udO1ljenU6yQ2I06pe61~0F@(OT2@*BXOCe;j+| d4Te|!7qR5-dUAc!*vFq=@PQv8fFl0k{RNpK1#KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1011/0100/0010/00010100/00000-0-8044e2db-5959-4c27-8e91-e5ed66869db8.parquet b/warehouse/test_ns.db/target/data/1011/0100/0010/00010100/00000-0-8044e2db-5959-4c27-8e91-e5ed66869db8.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de GIT binary patch literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1011/1001/0011/00000111/00000-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet b/warehouse/test_ns.db/target/data/1011/1001/0011/00000111/00000-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1011/1001/1001/11001101/00000-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.parquet b/warehouse/test_ns.db/target/data/1011/1001/1001/11001101/00000-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1011/1011/0110/01000110/00000-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.parquet b/warehouse/test_ns.db/target/data/1011/1011/0110/01000110/00000-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1011/1101/1010/10101111/00000-0-ee502702-5de9-4147-9f01-2a63f690f3f8.parquet b/warehouse/test_ns.db/target/data/1011/1101/1010/10101111/00000-0-ee502702-5de9-4147-9f01-2a63f690f3f8.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1100/0101/0001/00011111/00000-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet b/warehouse/test_ns.db/target/data/1100/0101/0001/00011111/00000-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f12431457bbc3e298663feeacbeb8bbb717a612f GIT binary patch literal 1269 zcmb7^J8#-h6o8M7Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)aYuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1100/1110/1110/00011110/00000-0-24011efa-994c-4030-8da7-53357c467c6f.parquet b/warehouse/test_ns.db/target/data/1100/1110/1110/00011110/00000-0-24011efa-994c-4030-8da7-53357c467c6f.parquet new file mode 100644 index 0000000000000000000000000000000000000000..613e73a9075cba3d3016346e7652acee2e8ec88b GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbTxkD>;=-B>=oQ@iy?oBO$ATg+Cz--xZ0i^gcm$C6yzwU% zeGMQ(u%zk9fQ6a<1jnKngiT$YP3Y=uMuWryRRj>IAp<}P$pYc=9G}Voz8?a7!|xK0 zLLFV99^&82mT^~^HHW)WLPi|3Y2%B?JCKlUT|({!ea3ML^zg8G>Gc{c3`~iGuJ#8l zZ}9x8Rh5CsSXc=Pt;WcUM^cK}MHm*jYm6qo7l%~XG_j#6hH30uU^2x>K{#sM;jxIO zXkR7mmt;AX`aiZB^fFKkSr)|ufC%I%!99I~;*F$zl&lZ3^;o@9+d7T zK)c#o$@&?x-i6FtHwwWoo>`WIz`)(*Eh=Oz5oddB&f z+ijlXyv@^XQL}O2grYR(M|5I7J29hHW=!=aZ2{CZK~rXz3EDoR7@x;502Mif`Mrso zcP91ia;llHVj)W{u^ko>fo7?kUF;4R(aWP&v zN042r9^s`p&k25^KTmnE@ZOxCZx=dly>Q{?bDJ(P2o~DXS-Ou96%@%cenLZiMlEjigihRHa)xS7ZqoI1^8GH zs%Gy8&(iICTGA_^3FM!8vDYSD=udO1ljenU6yQ2I06pe61~0F@(OT2@*BXOCe;j+| d4Te|!7qR5-dUAc!*vFq=@PQv8fFl0k{RNpK1#KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/0001/1001/11111010/00000-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet b/warehouse/test_ns.db/target/data/1101/0001/1001/11111010/00000-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet new file mode 100644 index 0000000000000000000000000000000000000000..15c3780fc6a3276a2462bd13121be37bbf480a4c GIT binary patch literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/0011/0101/10000111/00000-0-eb933998-38fb-415a-8c6f-65c20c4b60af.parquet b/warehouse/test_ns.db/target/data/1101/0011/0101/10000111/00000-0-eb933998-38fb-415a-8c6f-65c20c4b60af.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/0111/0001/00111011/00000-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet b/warehouse/test_ns.db/target/data/1101/0111/0001/00111011/00000-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/1010/1100/10110011/00000-0-dda9e15d-4031-4715-bf68-69610e86a620.parquet b/warehouse/test_ns.db/target/data/1101/1010/1100/10110011/00000-0-dda9e15d-4031-4715-bf68-69610e86a620.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/1011/1011/11011001/00000-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet b/warehouse/test_ns.db/target/data/1101/1011/1011/11011001/00000-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/1100/0000/00100111/00000-0-44d10516-886c-478f-8be2-84606aa42d96.parquet b/warehouse/test_ns.db/target/data/1101/1100/0000/00100111/00000-0-44d10516-886c-478f-8be2-84606aa42d96.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=c|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)akd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1101/1110/1010/11001100/00000-0-6d358415-49ec-446a-a261-bff1c048723b.parquet b/warehouse/test_ns.db/target/data/1101/1110/1010/11001100/00000-0-6d358415-49ec-446a-a261-bff1c048723b.parquet new file mode 100644 index 0000000000000000000000000000000000000000..171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a GIT binary patch literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1110/0011/0000/10110011/00000-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet b/warehouse/test_ns.db/target/data/1110/0011/0000/10110011/00000-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1110/1000/1001/01111100/00000-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet b/warehouse/test_ns.db/target/data/1110/1000/1001/01111100/00000-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1110/1000/1100/10011011/00000-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.parquet b/warehouse/test_ns.db/target/data/1110/1000/1100/10011011/00000-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f12431457bbc3e298663feeacbeb8bbb717a612f GIT binary patch literal 1269 zcmb7^J8#-h6o8M7Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)aYuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1110/1110/1110/01110010/00000-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet b/warehouse/test_ns.db/target/data/1110/1110/1110/01110010/00000-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c1a072754b4a4eabc63ae63c35ec7a1acf1087f GIT binary patch literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1111/0011/0101/01111111/00000-0-d07e2165-822c-4192-a463-1384cab3f16d.parquet b/warehouse/test_ns.db/target/data/1111/0011/0101/01111111/00000-0-d07e2165-822c-4192-a463-1384cab3f16d.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ecae1371a93f4c70043d04dc55c8b7cdc46c77ad GIT binary patch literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=c|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-TxkD>;=-B>=oQ@iy?oBO$ATg+Cz--xZ0i^gcm$C6yzwU% zeGMQ(u%zk9fQ6a<1jnKngiT$YP3Y=uMuWryRRj>IAp<}P$pYc=9G}Voz8?a7!|xK0 zLLFV99^&82mT^~^HHW)WLPi|3Y2%B?JCKlUT|({!ea3ML^zg8G>Gc{c3`~iGuJ#8l zZ}9x8Rh5CsSXc=Pt;WcUM^cK}MHm*jYm6qo7l%~XG_j#6hH30uU^2x>K{#sM;jxIO zXkR7mmt;AX`aiZB^fFKkSr)|ufC%I%!99I~;*F$zl&lZ3^;o@9+d7T zK)c#o$@&?x-i6FtHwwWoo>`WIz`)(*Eh=Oz5oddB&f z+ijlXyv@^XQL}O2grYR(M|5I7J29hHW=!=aZ2{CZK~rXz3EDoR7@x;502Mif`Mrso zcP91ia;llHVj)W{u^ko>fo7?kUF;4R(aWP&v zN042r9^s`p&k25^KTmnE@ZOxCZx=dly>Q{?bDJ(P2o~DXS-Ou96%@%cenLZiMlEjigihRHa)xS7ZqoI1^8GH zs%Gy8&(iICTGA_^3FM!8vDYSD=udO1ljenU6yQ2I06pe61~0F@(OT2@*BXOCe;j+| d4Te|!7qR5-dUAc!*vFq=@PQv8fFl0k{RNpK1#YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/data/1111/1101/0111/00101010/00000-0-ce566f28-bd86-431b-ba97-fd70c8073fae.parquet b/warehouse/test_ns.db/target/data/1111/1101/0111/00101010/00000-0-ce566f28-bd86-431b-ba97-fd70c8073fae.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5293e0acc7d628a80de3cded6143c991e0ca429 GIT binary patch literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json new file mode 100644 index 0000000000..59a4fd3f0e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"0c845ee1-7262-44f8-aa11-1485668976f0","last-updated-ms":1736888846525,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json b/warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json new file mode 100644 index 0000000000..3153807021 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dffb4662-926c-4392-8af0-084cc190a9c4","last-updated-ms":1736888952091,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json b/warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json new file mode 100644 index 0000000000..49b534bbe7 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c25fd744-4e53-4544-99ba-65c20e364bf2","last-updated-ms":1736887154291,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json b/warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json new file mode 100644 index 0000000000..5482f159e8 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5808dc91-19d4-4f6a-bbd1-02b3919fdc83","last-updated-ms":1736888675009,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json b/warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json new file mode 100644 index 0000000000..a4427077cc --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"db091c68-0bd0-43f9-826b-06e2baa38467","last-updated-ms":1736886690238,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json b/warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json new file mode 100644 index 0000000000..f417cb625e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"61916a0b-1b5d-4cb6-a5d4-a7fd16311169","last-updated-ms":1736888951940,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json b/warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json new file mode 100644 index 0000000000..411fd5daed --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"43779038-fc40-451c-a2c6-d9f6a663bce7","last-updated-ms":1736889013289,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json b/warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json new file mode 100644 index 0000000000..4379598535 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5a04e9c0-5973-4e3d-936f-1fa9936f2893","last-updated-ms":1736886564886,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json b/warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json new file mode 100644 index 0000000000..c4a5ff93ca --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5ab184e-846f-4a28-8711-7c32665184b4","last-updated-ms":1736888675075,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json b/warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json new file mode 100644 index 0000000000..9eb03f8631 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3c5bd186-45f9-4454-bc14-2e8940dfb9f9","last-updated-ms":1736888817849,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json new file mode 100644 index 0000000000..92a045481e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"2980b2ad-b335-4be1-a029-2471edb4e419","last-updated-ms":1736889068575,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json b/warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json new file mode 100644 index 0000000000..fc8ff9f9ce --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"792ce7dc-3961-4630-902b-f63d4bd06683","last-updated-ms":1736889068686,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json b/warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json new file mode 100644 index 0000000000..e8815fc13d --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"6275b69e-8ddc-4f15-ab8b-b17b4e0dd926","last-updated-ms":1736889144101,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json b/warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json new file mode 100644 index 0000000000..7182130491 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"8e4e692f-a95c-4ec4-8e73-ebdc39e4c053","last-updated-ms":1736889144251,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json b/warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json new file mode 100644 index 0000000000..59a543f5ff --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d60bea05-258e-4e68-984e-42e94f73ae10","last-updated-ms":1736886580019,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json b/warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json new file mode 100644 index 0000000000..329f8db827 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"002574bf-b593-4b03-8f9b-87b4cca69a06","last-updated-ms":1736888738749,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json b/warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json new file mode 100644 index 0000000000..b5580d10e4 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"87eace76-7d50-4c06-b523-21c48781584c","last-updated-ms":1736888738672,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json b/warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json new file mode 100644 index 0000000000..ccb1fd4ddc --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dfa9fe5a-06c5-49f2-90e3-18acaad12269","last-updated-ms":1736889194882,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json b/warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json new file mode 100644 index 0000000000..994115ff24 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e111ca6-3c5f-4e88-8982-b43cdf84897b","last-updated-ms":1736886719503,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json b/warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json new file mode 100644 index 0000000000..50afb8c4de --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5fa2107-c0dc-43f0-87c3-d3732e5c9401","last-updated-ms":1736889068740,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json b/warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json new file mode 100644 index 0000000000..0d2fab5d57 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c0673838-0d93-4abb-83c4-df20d75220fc","last-updated-ms":1736888817650,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json b/warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json new file mode 100644 index 0000000000..83c4c52bd0 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3e9b1062-89d8-4912-b51d-6c08088de39e","last-updated-ms":1736886651716,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json new file mode 100644 index 0000000000..85c389e45c --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e47b10c-7d80-4c06-aa3f-422d05714b0b","last-updated-ms":1736888716030,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json b/warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json new file mode 100644 index 0000000000..3224c4e03b --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c47efb7a-caed-4568-a936-6a6978830a2f","last-updated-ms":1736888952005,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json b/warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json new file mode 100644 index 0000000000..3b02dcf8dc --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e35ba13b-9f12-444f-b0a2-51e6ca9f0c03","last-updated-ms":1736889068646,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json b/warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json new file mode 100644 index 0000000000..e40f3d20dc --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"84ff20ba-e69a-4deb-b97a-09fe32ab3ea2","last-updated-ms":1736888715966,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json b/warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json new file mode 100644 index 0000000000..ffd5d73d76 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"86e7778e-99e0-4e54-8700-6f60739a4dab","last-updated-ms":1736886777609,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json b/warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json new file mode 100644 index 0000000000..41156fcbfd --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1229ec8c-3d55-4a61-84d2-522378efdac3","last-updated-ms":1736889144280,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json b/warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json new file mode 100644 index 0000000000..9bab32b234 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"739bd7de-f8da-4aaa-ad33-f213251fa940","last-updated-ms":1736888846490,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json new file mode 100644 index 0000000000..bea3550fb0 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3d51896f-f5dc-46fb-a5bf-843d5994276b","last-updated-ms":1736889194975,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json new file mode 100644 index 0000000000..98fe7d4364 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"a694e23d-3ef3-4e36-92f7-90853dd8aea9","last-updated-ms":1736889013355,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json new file mode 100644 index 0000000000..7b790401b1 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c8873f38-a2e4-4437-8bea-ae7d127f54c7","last-updated-ms":1736888420861,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json new file mode 100644 index 0000000000..2e85fc41c0 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"175b9a2d-98e1-419e-a6ec-8f2c4238a3a2","last-updated-ms":1736887173183,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json new file mode 100644 index 0000000000..ca5e65999e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3beb9de1-ef29-47c5-8149-6a4fab9313ee","last-updated-ms":1736889194944,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json b/warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json new file mode 100644 index 0000000000..4ee75532ee --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"396c1ed6-f942-4308-9308-daa59fe3e6c6","last-updated-ms":1736889144050,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json b/warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json new file mode 100644 index 0000000000..0ae62aa67e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d66217e2-fb36-493c-9823-bf35e52530a4","last-updated-ms":1736889195019,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json b/warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json new file mode 100644 index 0000000000..5f8172b58f --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"48ea5b8d-c940-4edd-ac1b-f158f9e95e8e","last-updated-ms":1736889143984,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json b/warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json new file mode 100644 index 0000000000..e684aa3dc9 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"80a49832-dc87-47d9-a406-c249705a6039","last-updated-ms":1736888846420,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json b/warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json new file mode 100644 index 0000000000..b937158532 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"bf8bc38e-dbd9-4002-a42c-642a7e50b1d1","last-updated-ms":1736888817716,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json b/warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json new file mode 100644 index 0000000000..4f7ef6d31e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"9afb44a8-ed3c-4970-9ff7-48e02f20bf87","last-updated-ms":1736889013426,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json b/warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json new file mode 100644 index 0000000000..2c240be5c3 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d331040b-7228-4ee1-9e4b-0da3a4f65b6b","last-updated-ms":1736886756203,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json b/warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json new file mode 100644 index 0000000000..f86f69c8e3 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"df2fb31a-b9ee-4741-83e6-28b62a0ed8a1","last-updated-ms":1736889194820,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json b/warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json new file mode 100644 index 0000000000..72dcf63ef8 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"80a49832-dc87-47d9-a406-c249705a6039","last-updated-ms":1736888846449,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8313902679403056549,"snapshots":[{"snapshot-id":8313902679403056549,"sequence-number":1,"timestamp-ms":1736888846449,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8313902679403056549,"timestamp-ms":1736888846449}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json","timestamp-ms":1736888846420}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8313902679403056549,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json b/warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json new file mode 100644 index 0000000000..d11bca1ccf --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"a694e23d-3ef3-4e36-92f7-90853dd8aea9","last-updated-ms":1736889013360,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7051609426416309429,"snapshots":[{"snapshot-id":7051609426416309429,"sequence-number":1,"timestamp-ms":1736889013360,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7051609426416309429,"timestamp-ms":1736889013360}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json","timestamp-ms":1736889013355}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7051609426416309429,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json b/warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json new file mode 100644 index 0000000000..55d869516e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d60bea05-258e-4e68-984e-42e94f73ae10","last-updated-ms":1736886580051,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7268602573125653220,"snapshots":[{"snapshot-id":7268602573125653220,"sequence-number":1,"timestamp-ms":1736886580051,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7268602573125653220,"timestamp-ms":1736886580051}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json","timestamp-ms":1736886580019}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7268602573125653220,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json b/warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json new file mode 100644 index 0000000000..a9d7c08fd6 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c25fd744-4e53-4544-99ba-65c20e364bf2","last-updated-ms":1736887154345,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5940108511084569748,"snapshots":[{"snapshot-id":5940108511084569748,"sequence-number":1,"timestamp-ms":1736887154345,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5940108511084569748-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5940108511084569748,"timestamp-ms":1736887154345}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json","timestamp-ms":1736887154291}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5940108511084569748,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json new file mode 100644 index 0000000000..1a586192f6 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e35ba13b-9f12-444f-b0a2-51e6ca9f0c03","last-updated-ms":1736889068651,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5234292787271688478,"snapshots":[{"snapshot-id":5234292787271688478,"sequence-number":1,"timestamp-ms":1736889068651,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5234292787271688478,"timestamp-ms":1736889068651}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json","timestamp-ms":1736889068646}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5234292787271688478,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json new file mode 100644 index 0000000000..9d5fbbdfa3 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"df2fb31a-b9ee-4741-83e6-28b62a0ed8a1","last-updated-ms":1736889194846,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3420590106920179313,"snapshots":[{"snapshot-id":3420590106920179313,"sequence-number":1,"timestamp-ms":1736889194846,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3420590106920179313-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3420590106920179313,"timestamp-ms":1736889194846}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json","timestamp-ms":1736889194820}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3420590106920179313,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json b/warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json new file mode 100644 index 0000000000..ba1803397e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"002574bf-b593-4b03-8f9b-87b4cca69a06","last-updated-ms":1736888738760,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5799605361944678510,"snapshots":[{"snapshot-id":5799605361944678510,"sequence-number":1,"timestamp-ms":1736888738760,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5799605361944678510,"timestamp-ms":1736888738760}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json","timestamp-ms":1736888738749}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5799605361944678510,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json b/warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json new file mode 100644 index 0000000000..f2dbcab079 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"9afb44a8-ed3c-4970-9ff7-48e02f20bf87","last-updated-ms":1736889013433,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2600792867184750836,"snapshots":[{"snapshot-id":2600792867184750836,"sequence-number":1,"timestamp-ms":1736889013433,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2600792867184750836,"timestamp-ms":1736889013433}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json","timestamp-ms":1736889013426}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2600792867184750836,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json b/warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json new file mode 100644 index 0000000000..7e0cf6dd69 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"6275b69e-8ddc-4f15-ab8b-b17b4e0dd926","last-updated-ms":1736889144123,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3473198905970838950,"snapshots":[{"snapshot-id":3473198905970838950,"sequence-number":1,"timestamp-ms":1736889144123,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3473198905970838950,"timestamp-ms":1736889144123}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json","timestamp-ms":1736889144101}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3473198905970838950,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json new file mode 100644 index 0000000000..07791e6d49 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"0c845ee1-7262-44f8-aa11-1485668976f0","last-updated-ms":1736888846530,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1535538213156523650,"snapshots":[{"snapshot-id":1535538213156523650,"sequence-number":1,"timestamp-ms":1736888846530,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1535538213156523650,"timestamp-ms":1736888846530}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json","timestamp-ms":1736888846525}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1535538213156523650,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json new file mode 100644 index 0000000000..91095aed0d --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"87eace76-7d50-4c06-b523-21c48781584c","last-updated-ms":1736888738706,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8961750095722443909,"snapshots":[{"snapshot-id":8961750095722443909,"sequence-number":1,"timestamp-ms":1736888738706,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8961750095722443909,"timestamp-ms":1736888738706}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json","timestamp-ms":1736888738672}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8961750095722443909,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json new file mode 100644 index 0000000000..89146ae00b --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dfa9fe5a-06c5-49f2-90e3-18acaad12269","last-updated-ms":1736889194889,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3964058929230744404,"snapshots":[{"snapshot-id":3964058929230744404,"sequence-number":1,"timestamp-ms":1736889194889,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3964058929230744404-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3964058929230744404,"timestamp-ms":1736889194889}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json","timestamp-ms":1736889194882}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3964058929230744404,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json new file mode 100644 index 0000000000..f0bfb40476 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"2980b2ad-b335-4be1-a029-2471edb4e419","last-updated-ms":1736889068603,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":601589844698732085,"snapshots":[{"snapshot-id":601589844698732085,"sequence-number":1,"timestamp-ms":1736889068603,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":601589844698732085,"timestamp-ms":1736889068603}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json","timestamp-ms":1736889068575}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":601589844698732085,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json new file mode 100644 index 0000000000..8a684f5f66 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"db091c68-0bd0-43f9-826b-06e2baa38467","last-updated-ms":1736886690267,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7513461889513613785,"snapshots":[{"snapshot-id":7513461889513613785,"sequence-number":1,"timestamp-ms":1736886690267,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7513461889513613785,"timestamp-ms":1736886690267}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json","timestamp-ms":1736886690238}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7513461889513613785,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json b/warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json new file mode 100644 index 0000000000..2d07957ef9 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"84ff20ba-e69a-4deb-b97a-09fe32ab3ea2","last-updated-ms":1736888715992,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3787244053631992891,"snapshots":[{"snapshot-id":3787244053631992891,"sequence-number":1,"timestamp-ms":1736888715992,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3787244053631992891,"timestamp-ms":1736888715992}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json","timestamp-ms":1736888715966}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3787244053631992891,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json b/warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json new file mode 100644 index 0000000000..c22391ee72 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3d51896f-f5dc-46fb-a5bf-843d5994276b","last-updated-ms":1736889194987,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7022889893183814165,"snapshots":[{"snapshot-id":7022889893183814165,"sequence-number":1,"timestamp-ms":1736889194987,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7022889893183814165,"timestamp-ms":1736889194987}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json","timestamp-ms":1736889194975}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7022889893183814165,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json b/warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json new file mode 100644 index 0000000000..11c645ccae --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d331040b-7228-4ee1-9e4b-0da3a4f65b6b","last-updated-ms":1736886756231,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":224386441439912473,"snapshots":[{"snapshot-id":224386441439912473,"sequence-number":1,"timestamp-ms":1736886756231,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-224386441439912473-0-a1309d30-424c-4c10-bb6d-79711a6576a8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":224386441439912473,"timestamp-ms":1736886756231}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json","timestamp-ms":1736886756203}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":224386441439912473,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json b/warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json new file mode 100644 index 0000000000..e5cd982eb2 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e111ca6-3c5f-4e88-8982-b43cdf84897b","last-updated-ms":1736886719533,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6234413701284196546,"snapshots":[{"snapshot-id":6234413701284196546,"sequence-number":1,"timestamp-ms":1736886719533,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6234413701284196546-0-66fa771f-7647-43e2-8f86-fe095e1dc073.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6234413701284196546,"timestamp-ms":1736886719533}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json","timestamp-ms":1736886719503}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6234413701284196546,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json b/warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json new file mode 100644 index 0000000000..3e950e5231 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c47efb7a-caed-4568-a936-6a6978830a2f","last-updated-ms":1736888952017,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5697805165312478410,"snapshots":[{"snapshot-id":5697805165312478410,"sequence-number":1,"timestamp-ms":1736888952017,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5697805165312478410,"timestamp-ms":1736888952017}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json","timestamp-ms":1736888952005}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5697805165312478410,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json b/warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json new file mode 100644 index 0000000000..1da9c58889 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5fa2107-c0dc-43f0-87c3-d3732e5c9401","last-updated-ms":1736889068802,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3533502525690906202,"snapshots":[{"snapshot-id":3533502525690906202,"sequence-number":1,"timestamp-ms":1736889068802,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3533502525690906202,"timestamp-ms":1736889068802}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json","timestamp-ms":1736889068740}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3533502525690906202,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json b/warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json new file mode 100644 index 0000000000..cce07ff207 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"739bd7de-f8da-4aaa-ad33-f213251fa940","last-updated-ms":1736888846495,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6486622511572862241,"snapshots":[{"snapshot-id":6486622511572862241,"sequence-number":1,"timestamp-ms":1736888846495,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6486622511572862241,"timestamp-ms":1736888846495}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json","timestamp-ms":1736888846490}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6486622511572862241,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json b/warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json new file mode 100644 index 0000000000..453b4eace9 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"86e7778e-99e0-4e54-8700-6f60739a4dab","last-updated-ms":1736886777635,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1513626882798940460,"snapshots":[{"snapshot-id":1513626882798940460,"sequence-number":1,"timestamp-ms":1736886777635,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1513626882798940460,"timestamp-ms":1736886777635}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json","timestamp-ms":1736886777609}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1513626882798940460,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json b/warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json new file mode 100644 index 0000000000..6c9d32179a --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c0673838-0d93-4abb-83c4-df20d75220fc","last-updated-ms":1736888817677,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4312681858952059679,"snapshots":[{"snapshot-id":4312681858952059679,"sequence-number":1,"timestamp-ms":1736888817677,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4312681858952059679-0-eb933998-38fb-415a-8c6f-65c20c4b60af.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4312681858952059679,"timestamp-ms":1736888817677}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json","timestamp-ms":1736888817650}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4312681858952059679,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json b/warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json new file mode 100644 index 0000000000..c0f1285809 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c8873f38-a2e4-4437-8bea-ae7d127f54c7","last-updated-ms":1736888420917,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8831663020960733836,"snapshots":[{"snapshot-id":8831663020960733836,"sequence-number":1,"timestamp-ms":1736888420917,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8831663020960733836,"timestamp-ms":1736888420917}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json","timestamp-ms":1736888420861}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8831663020960733836,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json b/warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json new file mode 100644 index 0000000000..4e94290de6 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e47b10c-7d80-4c06-aa3f-422d05714b0b","last-updated-ms":1736888716035,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1544115459057157291,"snapshots":[{"snapshot-id":1544115459057157291,"sequence-number":1,"timestamp-ms":1736888716035,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1544115459057157291,"timestamp-ms":1736888716035}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json","timestamp-ms":1736888716030}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1544115459057157291,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json b/warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json new file mode 100644 index 0000000000..44c2974e0e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"792ce7dc-3961-4630-902b-f63d4bd06683","last-updated-ms":1736889068709,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3528314312383791020,"snapshots":[{"snapshot-id":3528314312383791020,"sequence-number":1,"timestamp-ms":1736889068709,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3528314312383791020,"timestamp-ms":1736889068709}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json","timestamp-ms":1736889068686}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3528314312383791020,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json b/warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json new file mode 100644 index 0000000000..a3e21d027d --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d66217e2-fb36-493c-9823-bf35e52530a4","last-updated-ms":1736889195025,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3544944504255224038,"snapshots":[{"snapshot-id":3544944504255224038,"sequence-number":1,"timestamp-ms":1736889195025,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3544944504255224038,"timestamp-ms":1736889195025}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json","timestamp-ms":1736889195019}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3544944504255224038,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json new file mode 100644 index 0000000000..70fd545a89 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1229ec8c-3d55-4a61-84d2-522378efdac3","last-updated-ms":1736889144284,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2733438816956970508,"snapshots":[{"snapshot-id":2733438816956970508,"sequence-number":1,"timestamp-ms":1736889144284,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2733438816956970508,"timestamp-ms":1736889144284}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json","timestamp-ms":1736889144280}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2733438816956970508,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json b/warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json new file mode 100644 index 0000000000..98d3f22d19 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3c5bd186-45f9-4454-bc14-2e8940dfb9f9","last-updated-ms":1736888817854,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8348544302231969911,"snapshots":[{"snapshot-id":8348544302231969911,"sequence-number":1,"timestamp-ms":1736888817854,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8348544302231969911,"timestamp-ms":1736888817854}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json","timestamp-ms":1736888817849}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8348544302231969911,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json new file mode 100644 index 0000000000..409137bfc5 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3beb9de1-ef29-47c5-8149-6a4fab9313ee","last-updated-ms":1736889194951,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4842535345802092226,"snapshots":[{"snapshot-id":4842535345802092226,"sequence-number":1,"timestamp-ms":1736889194951,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4842535345802092226,"timestamp-ms":1736889194951}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json","timestamp-ms":1736889194944}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4842535345802092226,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json new file mode 100644 index 0000000000..5545aefcdc --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"48ea5b8d-c940-4edd-ac1b-f158f9e95e8e","last-updated-ms":1736889144013,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6933179781506472663,"snapshots":[{"snapshot-id":6933179781506472663,"sequence-number":1,"timestamp-ms":1736889144013,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6933179781506472663-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6933179781506472663,"timestamp-ms":1736889144013}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json","timestamp-ms":1736889143984}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6933179781506472663,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json new file mode 100644 index 0000000000..158dcb0f37 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5ab184e-846f-4a28-8711-7c32665184b4","last-updated-ms":1736888675080,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":9164726099961267182,"snapshots":[{"snapshot-id":9164726099961267182,"sequence-number":1,"timestamp-ms":1736888675080,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-9164726099961267182-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":9164726099961267182,"timestamp-ms":1736888675080}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json","timestamp-ms":1736888675075}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":9164726099961267182,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json b/warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json new file mode 100644 index 0000000000..19905d0556 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"61916a0b-1b5d-4cb6-a5d4-a7fd16311169","last-updated-ms":1736888951968,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1844314770242601776,"snapshots":[{"snapshot-id":1844314770242601776,"sequence-number":1,"timestamp-ms":1736888951968,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1844314770242601776-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1844314770242601776,"timestamp-ms":1736888951968}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json","timestamp-ms":1736888951940}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1844314770242601776,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json b/warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json new file mode 100644 index 0000000000..5cd6cf5330 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"8e4e692f-a95c-4ec4-8e73-ebdc39e4c053","last-updated-ms":1736889144256,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3889083549440119316,"snapshots":[{"snapshot-id":3889083549440119316,"sequence-number":1,"timestamp-ms":1736889144256,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3889083549440119316,"timestamp-ms":1736889144256}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json","timestamp-ms":1736889144251}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3889083549440119316,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json b/warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json new file mode 100644 index 0000000000..6a55051814 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5808dc91-19d4-4f6a-bbd1-02b3919fdc83","last-updated-ms":1736888675038,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":833805222481799210,"snapshots":[{"snapshot-id":833805222481799210,"sequence-number":1,"timestamp-ms":1736888675038,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-833805222481799210-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":833805222481799210,"timestamp-ms":1736888675038}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json","timestamp-ms":1736888675009}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":833805222481799210,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json b/warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json new file mode 100644 index 0000000000..716a08d0b2 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dffb4662-926c-4392-8af0-084cc190a9c4","last-updated-ms":1736888952100,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4948184997192531561,"snapshots":[{"snapshot-id":4948184997192531561,"sequence-number":1,"timestamp-ms":1736888952100,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4948184997192531561,"timestamp-ms":1736888952100}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json","timestamp-ms":1736888952091}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4948184997192531561,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json new file mode 100644 index 0000000000..3d27bc644e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"bf8bc38e-dbd9-4002-a42c-642a7e50b1d1","last-updated-ms":1736888817728,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7505909271869725036,"snapshots":[{"snapshot-id":7505909271869725036,"sequence-number":1,"timestamp-ms":1736888817728,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7505909271869725036,"timestamp-ms":1736888817728}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json","timestamp-ms":1736888817716}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7505909271869725036,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json new file mode 100644 index 0000000000..ea815a530a --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3e9b1062-89d8-4912-b51d-6c08088de39e","last-updated-ms":1736886651745,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3224723533606729102,"snapshots":[{"snapshot-id":3224723533606729102,"sequence-number":1,"timestamp-ms":1736886651745,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3224723533606729102-0-b4364e18-9a58-42f2-a886-b079f1ccfabd.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3224723533606729102,"timestamp-ms":1736886651745}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json","timestamp-ms":1736886651716}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3224723533606729102,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json new file mode 100644 index 0000000000..6b4ca40e98 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"175b9a2d-98e1-419e-a6ec-8f2c4238a3a2","last-updated-ms":1736887173219,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2972879693291038375,"snapshots":[{"snapshot-id":2972879693291038375,"sequence-number":1,"timestamp-ms":1736887173219,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2972879693291038375,"timestamp-ms":1736887173219}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json","timestamp-ms":1736887173183}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2972879693291038375,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json b/warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json new file mode 100644 index 0000000000..b0cdb99d01 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"43779038-fc40-451c-a2c6-d9f6a663bce7","last-updated-ms":1736889013318,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5801931121445824490,"snapshots":[{"snapshot-id":5801931121445824490,"sequence-number":1,"timestamp-ms":1736889013318,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5801931121445824490-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5801931121445824490,"timestamp-ms":1736889013318}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json","timestamp-ms":1736889013289}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5801931121445824490,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json new file mode 100644 index 0000000000..67c9287925 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"396c1ed6-f942-4308-9308-daa59fe3e6c6","last-updated-ms":1736889144056,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7582912806309123259,"snapshots":[{"snapshot-id":7582912806309123259,"sequence-number":1,"timestamp-ms":1736889144056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7582912806309123259,"timestamp-ms":1736889144056}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json","timestamp-ms":1736889144050}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7582912806309123259,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json b/warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json new file mode 100644 index 0000000000..436471c401 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"a694e23d-3ef3-4e36-92f7-90853dd8aea9","last-updated-ms":1736889013420,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2986888869253216203,"snapshots":[{"snapshot-id":7051609426416309429,"sequence-number":1,"timestamp-ms":1736889013360,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8401722351562146185,"parent-snapshot-id":7051609426416309429,"sequence-number":2,"timestamp-ms":1736889013382,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8401722351562146185-0-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-records":"0","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"0","total-files-size":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":7037381790004132039,"parent-snapshot-id":8401722351562146185,"sequence-number":3,"timestamp-ms":1736889013400,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2986888869253216203,"parent-snapshot-id":7037381790004132039,"sequence-number":4,"timestamp-ms":1736889013420,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2986888869253216203-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7051609426416309429,"timestamp-ms":1736889013360},{"snapshot-id":8401722351562146185,"timestamp-ms":1736889013382},{"snapshot-id":7037381790004132039,"timestamp-ms":1736889013400},{"snapshot-id":2986888869253216203,"timestamp-ms":1736889013420}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json","timestamp-ms":1736889013355},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json","timestamp-ms":1736889013360}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2986888869253216203,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json b/warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json new file mode 100644 index 0000000000..28d1d401a6 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"2980b2ad-b335-4be1-a029-2471edb4e419","last-updated-ms":1736889068633,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2492927377825459959,"snapshots":[{"snapshot-id":601589844698732085,"sequence-number":1,"timestamp-ms":1736889068603,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4183019543520611480,"parent-snapshot-id":601589844698732085,"sequence-number":2,"timestamp-ms":1736889068624,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4183019543520611480-0-73fe0557-72f8-4571-861f-1e38db10fcab.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-files-size":"1252","total-data-files":"1","total-equality-deletes":"0","total-records":"1","total-position-deletes":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":8581846891827290437,"parent-snapshot-id":4183019543520611480,"sequence-number":3,"timestamp-ms":1736889068627,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2492927377825459959,"parent-snapshot-id":8581846891827290437,"sequence-number":4,"timestamp-ms":1736889068633,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2492927377825459959-0-406b5ff2-453b-431e-9cde-884ceff64876.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":601589844698732085,"timestamp-ms":1736889068603},{"snapshot-id":4183019543520611480,"timestamp-ms":1736889068624},{"snapshot-id":8581846891827290437,"timestamp-ms":1736889068627},{"snapshot-id":2492927377825459959,"timestamp-ms":1736889068633}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json","timestamp-ms":1736889068575},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json","timestamp-ms":1736889068603}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2492927377825459959,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json b/warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json new file mode 100644 index 0000000000..f7b0f87091 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"6275b69e-8ddc-4f15-ab8b-b17b4e0dd926","last-updated-ms":1736889144205,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":9125775206094479309,"snapshots":[{"snapshot-id":3473198905970838950,"sequence-number":1,"timestamp-ms":1736889144123,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":9125775206094479309,"parent-snapshot-id":3473198905970838950,"sequence-number":2,"timestamp-ms":1736889144205,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-9125775206094479309-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3473198905970838950,"timestamp-ms":1736889144123},{"snapshot-id":9125775206094479309,"timestamp-ms":1736889144205}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json","timestamp-ms":1736889144101},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json","timestamp-ms":1736889144123}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":9125775206094479309,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json b/warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json new file mode 100644 index 0000000000..9ddf77227e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5ab184e-846f-4a28-8711-7c32665184b4","last-updated-ms":1736888675127,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6925287486837365462,"snapshots":[{"snapshot-id":9164726099961267182,"sequence-number":1,"timestamp-ms":1736888675080,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-9164726099961267182-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5620569175367488250,"parent-snapshot-id":9164726099961267182,"sequence-number":2,"timestamp-ms":1736888675105,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5620569175367488250-0-01e6f094-0145-4d30-be1e-b291d4941071.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-delete-files":"0","total-data-files":"0","total-position-deletes":"0","total-files-size":"0","total-records":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4225042140904107668,"parent-snapshot-id":5620569175367488250,"sequence-number":3,"timestamp-ms":1736888675114,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6925287486837365462,"parent-snapshot-id":4225042140904107668,"sequence-number":4,"timestamp-ms":1736888675127,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6925287486837365462-0-87212431-1c5a-4680-924d-cb722127f8b2.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":9164726099961267182,"timestamp-ms":1736888675080},{"snapshot-id":5620569175367488250,"timestamp-ms":1736888675105},{"snapshot-id":4225042140904107668,"timestamp-ms":1736888675114},{"snapshot-id":6925287486837365462,"timestamp-ms":1736888675127}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json","timestamp-ms":1736888675075},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json","timestamp-ms":1736888675080}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6925287486837365462,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json b/warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json new file mode 100644 index 0000000000..db1b1f3aa5 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3c5bd186-45f9-4454-bc14-2e8940dfb9f9","last-updated-ms":1736888817868,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3204946293128688606,"snapshots":[{"snapshot-id":8348544302231969911,"sequence-number":1,"timestamp-ms":1736888817854,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3204946293128688606,"parent-snapshot-id":8348544302231969911,"sequence-number":2,"timestamp-ms":1736888817868,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8348544302231969911,"timestamp-ms":1736888817854},{"snapshot-id":3204946293128688606,"timestamp-ms":1736888817868}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json","timestamp-ms":1736888817849},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json","timestamp-ms":1736888817854}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3204946293128688606,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json b/warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json new file mode 100644 index 0000000000..a4a3d4e9b7 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"0c845ee1-7262-44f8-aa11-1485668976f0","last-updated-ms":1736888846544,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2429342651217145121,"snapshots":[{"snapshot-id":1535538213156523650,"sequence-number":1,"timestamp-ms":1736888846530,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2429342651217145121,"parent-snapshot-id":1535538213156523650,"sequence-number":2,"timestamp-ms":1736888846544,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1535538213156523650,"timestamp-ms":1736888846530},{"snapshot-id":2429342651217145121,"timestamp-ms":1736888846544}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json","timestamp-ms":1736888846525},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json","timestamp-ms":1736888846530}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2429342651217145121,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json b/warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json new file mode 100644 index 0000000000..45dcf045b5 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5808dc91-19d4-4f6a-bbd1-02b3919fdc83","last-updated-ms":1736888675069,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1457045964290920894,"snapshots":[{"snapshot-id":833805222481799210,"sequence-number":1,"timestamp-ms":1736888675038,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-833805222481799210-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8932309241501447446,"parent-snapshot-id":833805222481799210,"sequence-number":2,"timestamp-ms":1736888675062,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8932309241501447446-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-delete-files":"0","total-data-files":"1","total-position-deletes":"0","total-files-size":"1252","total-records":"1","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7440866824021855995,"parent-snapshot-id":8932309241501447446,"sequence-number":3,"timestamp-ms":1736888675066,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1457045964290920894,"parent-snapshot-id":7440866824021855995,"sequence-number":4,"timestamp-ms":1736888675069,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1457045964290920894-0-1b8f6465-742a-450b-a358-12b08ae8ff62.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":833805222481799210,"timestamp-ms":1736888675038},{"snapshot-id":8932309241501447446,"timestamp-ms":1736888675062},{"snapshot-id":7440866824021855995,"timestamp-ms":1736888675066},{"snapshot-id":1457045964290920894,"timestamp-ms":1736888675069}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json","timestamp-ms":1736888675009},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json","timestamp-ms":1736888675038}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1457045964290920894,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json b/warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json new file mode 100644 index 0000000000..11ec99082c --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e47b10c-7d80-4c06-aa3f-422d05714b0b","last-updated-ms":1736888716060,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2440352229145444371,"snapshots":[{"snapshot-id":1544115459057157291,"sequence-number":1,"timestamp-ms":1736888716035,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1320653015771546028,"parent-snapshot-id":1544115459057157291,"sequence-number":2,"timestamp-ms":1736888716052,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-position-deletes":"0","total-records":"0","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":603282837849840371,"parent-snapshot-id":1320653015771546028,"sequence-number":3,"timestamp-ms":1736888716056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-603282837849840371-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2440352229145444371,"parent-snapshot-id":603282837849840371,"sequence-number":4,"timestamp-ms":1736888716060,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1544115459057157291,"timestamp-ms":1736888716035},{"snapshot-id":1320653015771546028,"timestamp-ms":1736888716052},{"snapshot-id":603282837849840371,"timestamp-ms":1736888716056},{"snapshot-id":2440352229145444371,"timestamp-ms":1736888716060}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json","timestamp-ms":1736888716030},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json","timestamp-ms":1736888716035}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2440352229145444371,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json b/warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json new file mode 100644 index 0000000000..94e0af83d5 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"48ea5b8d-c940-4edd-ac1b-f158f9e95e8e","last-updated-ms":1736889144044,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1837055597910465939,"snapshots":[{"snapshot-id":6933179781506472663,"sequence-number":1,"timestamp-ms":1736889144013,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6933179781506472663-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3409260926258592601,"parent-snapshot-id":6933179781506472663,"sequence-number":2,"timestamp-ms":1736889144036,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-delete-files":"0","total-position-deletes":"0","total-files-size":"1252","total-equality-deletes":"0","total-records":"1","total-data-files":"1"},"schema-id":0},{"snapshot-id":8420686025710548535,"parent-snapshot-id":3409260926258592601,"sequence-number":3,"timestamp-ms":1736889144039,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1837055597910465939,"parent-snapshot-id":8420686025710548535,"sequence-number":4,"timestamp-ms":1736889144044,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6933179781506472663,"timestamp-ms":1736889144013},{"snapshot-id":3409260926258592601,"timestamp-ms":1736889144036},{"snapshot-id":8420686025710548535,"timestamp-ms":1736889144039},{"snapshot-id":1837055597910465939,"timestamp-ms":1736889144044}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json","timestamp-ms":1736889143984},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json","timestamp-ms":1736889144013}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1837055597910465939,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json b/warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json new file mode 100644 index 0000000000..7b59e688ff --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"bf8bc38e-dbd9-4002-a42c-642a7e50b1d1","last-updated-ms":1736888817842,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1391988045888484974,"snapshots":[{"snapshot-id":7505909271869725036,"sequence-number":1,"timestamp-ms":1736888817728,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6901877966207604987,"parent-snapshot-id":7505909271869725036,"sequence-number":2,"timestamp-ms":1736888817768,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6901877966207604987-0-330bf2a8-7467-4ab1-879b-56ef0a34a4ca.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-position-deletes":"0","total-data-files":"0","total-files-size":"0","total-delete-files":"0","total-equality-deletes":"0","total-records":"0"},"schema-id":0},{"snapshot-id":7354261991702844234,"parent-snapshot-id":6901877966207604987,"sequence-number":3,"timestamp-ms":1736888817783,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7354261991702844234-0-e560ac97-208b-4c5d-9196-e952352617b8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1391988045888484974,"parent-snapshot-id":7354261991702844234,"sequence-number":4,"timestamp-ms":1736888817842,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7505909271869725036,"timestamp-ms":1736888817728},{"snapshot-id":6901877966207604987,"timestamp-ms":1736888817768},{"snapshot-id":7354261991702844234,"timestamp-ms":1736888817783},{"snapshot-id":1391988045888484974,"timestamp-ms":1736888817842}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json","timestamp-ms":1736888817716},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json","timestamp-ms":1736888817728}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1391988045888484974,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json b/warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json new file mode 100644 index 0000000000..ce9211000d --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"61916a0b-1b5d-4cb6-a5d4-a7fd16311169","last-updated-ms":1736888951999,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4489414154952635593,"snapshots":[{"snapshot-id":1844314770242601776,"sequence-number":1,"timestamp-ms":1736888951968,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1844314770242601776-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3556890778772681136,"parent-snapshot-id":1844314770242601776,"sequence-number":2,"timestamp-ms":1736888951991,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-delete-files":"0","total-files-size":"1252","total-equality-deletes":"0","total-data-files":"1","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":2836891935063041882,"parent-snapshot-id":3556890778772681136,"sequence-number":3,"timestamp-ms":1736888951994,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4489414154952635593,"parent-snapshot-id":2836891935063041882,"sequence-number":4,"timestamp-ms":1736888951999,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4489414154952635593-0-6882678a-6ff9-4924-958c-22b926e25638.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1844314770242601776,"timestamp-ms":1736888951968},{"snapshot-id":3556890778772681136,"timestamp-ms":1736888951991},{"snapshot-id":2836891935063041882,"timestamp-ms":1736888951994},{"snapshot-id":4489414154952635593,"timestamp-ms":1736888951999}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json","timestamp-ms":1736888951940},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json","timestamp-ms":1736888951968}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4489414154952635593,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json b/warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json new file mode 100644 index 0000000000..59a5637cf2 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e35ba13b-9f12-444f-b0a2-51e6ca9f0c03","last-updated-ms":1736889068681,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4092764208808402358,"snapshots":[{"snapshot-id":5234292787271688478,"sequence-number":1,"timestamp-ms":1736889068651,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4915605823239118202,"parent-snapshot-id":5234292787271688478,"sequence-number":2,"timestamp-ms":1736889068670,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4915605823239118202-0-796b30f2-b5b9-4d82-9b7f-39a0a8276bfa.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-equality-deletes":"0","total-records":"0","total-position-deletes":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":3020510205452172551,"parent-snapshot-id":4915605823239118202,"sequence-number":3,"timestamp-ms":1736889068675,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4092764208808402358,"parent-snapshot-id":3020510205452172551,"sequence-number":4,"timestamp-ms":1736889068681,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4092764208808402358-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5234292787271688478,"timestamp-ms":1736889068651},{"snapshot-id":4915605823239118202,"timestamp-ms":1736889068670},{"snapshot-id":3020510205452172551,"timestamp-ms":1736889068675},{"snapshot-id":4092764208808402358,"timestamp-ms":1736889068681}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json","timestamp-ms":1736889068646},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json","timestamp-ms":1736889068651}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4092764208808402358,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json b/warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json new file mode 100644 index 0000000000..7647c2e8d9 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"df2fb31a-b9ee-4741-83e6-28b62a0ed8a1","last-updated-ms":1736889194876,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5644840696415505864,"snapshots":[{"snapshot-id":3420590106920179313,"sequence-number":1,"timestamp-ms":1736889194846,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3420590106920179313-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8768996550935756846,"parent-snapshot-id":3420590106920179313,"sequence-number":2,"timestamp-ms":1736889194868,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8768996550935756846-0-6d358415-49ec-446a-a261-bff1c048723b.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-data-files":"1","total-records":"1","total-delete-files":"0","total-files-size":"1252","total-equality-deletes":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":3540412790301280861,"parent-snapshot-id":8768996550935756846,"sequence-number":3,"timestamp-ms":1736889194871,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5644840696415505864,"parent-snapshot-id":3540412790301280861,"sequence-number":4,"timestamp-ms":1736889194876,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3420590106920179313,"timestamp-ms":1736889194846},{"snapshot-id":8768996550935756846,"timestamp-ms":1736889194868},{"snapshot-id":3540412790301280861,"timestamp-ms":1736889194871},{"snapshot-id":5644840696415505864,"timestamp-ms":1736889194876}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json","timestamp-ms":1736889194820},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json","timestamp-ms":1736889194846}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5644840696415505864,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json b/warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json new file mode 100644 index 0000000000..9f5b8e3cdb --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c47efb7a-caed-4568-a936-6a6978830a2f","last-updated-ms":1736888952072,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6672072926019974762,"snapshots":[{"snapshot-id":5697805165312478410,"sequence-number":1,"timestamp-ms":1736888952017,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2179686375286065422,"parent-snapshot-id":5697805165312478410,"sequence-number":2,"timestamp-ms":1736888952041,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2179686375286065422-0-7d4a211e-5120-4462-9cef-76ab53d2a056.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-data-files":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":6817748211346412300,"parent-snapshot-id":2179686375286065422,"sequence-number":3,"timestamp-ms":1736888952056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6672072926019974762,"parent-snapshot-id":6817748211346412300,"sequence-number":4,"timestamp-ms":1736888952072,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5697805165312478410,"timestamp-ms":1736888952017},{"snapshot-id":2179686375286065422,"timestamp-ms":1736888952041},{"snapshot-id":6817748211346412300,"timestamp-ms":1736888952056},{"snapshot-id":6672072926019974762,"timestamp-ms":1736888952072}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json","timestamp-ms":1736888952005},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json","timestamp-ms":1736888952017}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6672072926019974762,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json b/warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json new file mode 100644 index 0000000000..b92b6b53a5 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3beb9de1-ef29-47c5-8149-6a4fab9313ee","last-updated-ms":1736889194969,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5871250312332596167,"snapshots":[{"snapshot-id":4842535345802092226,"sequence-number":1,"timestamp-ms":1736889194951,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5871250312332596167,"parent-snapshot-id":4842535345802092226,"sequence-number":2,"timestamp-ms":1736889194969,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5871250312332596167-0-24011efa-994c-4030-8da7-53357c467c6f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4842535345802092226,"timestamp-ms":1736889194951},{"snapshot-id":5871250312332596167,"timestamp-ms":1736889194969}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json","timestamp-ms":1736889194944},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json","timestamp-ms":1736889194951}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5871250312332596167,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json new file mode 100644 index 0000000000..68a851947c --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"80a49832-dc87-47d9-a406-c249705a6039","last-updated-ms":1736888846484,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1165795474348715640,"snapshots":[{"snapshot-id":8313902679403056549,"sequence-number":1,"timestamp-ms":1736888846449,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7909803071496021477,"parent-snapshot-id":8313902679403056549,"sequence-number":2,"timestamp-ms":1736888846474,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7909803071496021477-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-position-deletes":"0","total-files-size":"1252","total-records":"1","total-equality-deletes":"0","total-delete-files":"0","total-data-files":"1"},"schema-id":0},{"snapshot-id":757219070076398543,"parent-snapshot-id":7909803071496021477,"sequence-number":3,"timestamp-ms":1736888846478,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1165795474348715640,"parent-snapshot-id":757219070076398543,"sequence-number":4,"timestamp-ms":1736888846484,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1165795474348715640-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8313902679403056549,"timestamp-ms":1736888846449},{"snapshot-id":7909803071496021477,"timestamp-ms":1736888846474},{"snapshot-id":757219070076398543,"timestamp-ms":1736888846478},{"snapshot-id":1165795474348715640,"timestamp-ms":1736888846484}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json","timestamp-ms":1736888846420},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json","timestamp-ms":1736888846449}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1165795474348715640,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json new file mode 100644 index 0000000000..527ef9c9dd --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"87eace76-7d50-4c06-b523-21c48781584c","last-updated-ms":1736888738743,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":903412967392675108,"snapshots":[{"snapshot-id":8961750095722443909,"sequence-number":1,"timestamp-ms":1736888738706,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7543542099974651966,"parent-snapshot-id":8961750095722443909,"sequence-number":2,"timestamp-ms":1736888738735,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7543542099974651966-0-c0e31041-a16b-4018-97a8-f54121d210e7.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-delete-files":"0","total-files-size":"1252","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"1"},"schema-id":0},{"snapshot-id":8454039229635992797,"parent-snapshot-id":7543542099974651966,"sequence-number":3,"timestamp-ms":1736888738739,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8454039229635992797-0-7e9f7ae1-abec-4da7-ac71-135f512de652.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":903412967392675108,"parent-snapshot-id":8454039229635992797,"sequence-number":4,"timestamp-ms":1736888738743,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8961750095722443909,"timestamp-ms":1736888738706},{"snapshot-id":7543542099974651966,"timestamp-ms":1736888738735},{"snapshot-id":8454039229635992797,"timestamp-ms":1736888738739},{"snapshot-id":903412967392675108,"timestamp-ms":1736888738743}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json","timestamp-ms":1736888738672},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json","timestamp-ms":1736888738706}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":903412967392675108,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json new file mode 100644 index 0000000000..3b78ed9f6f --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"43779038-fc40-451c-a2c6-d9f6a663bce7","last-updated-ms":1736889013349,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7929386983707208693,"snapshots":[{"snapshot-id":5801931121445824490,"sequence-number":1,"timestamp-ms":1736889013318,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5801931121445824490-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4213073582251903126,"parent-snapshot-id":5801931121445824490,"sequence-number":2,"timestamp-ms":1736889013340,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"1","total-files-size":"1252","total-delete-files":"0"},"schema-id":0},{"snapshot-id":3226660396203515851,"parent-snapshot-id":4213073582251903126,"sequence-number":3,"timestamp-ms":1736889013344,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7929386983707208693,"parent-snapshot-id":3226660396203515851,"sequence-number":4,"timestamp-ms":1736889013349,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5801931121445824490,"timestamp-ms":1736889013318},{"snapshot-id":4213073582251903126,"timestamp-ms":1736889013340},{"snapshot-id":3226660396203515851,"timestamp-ms":1736889013344},{"snapshot-id":7929386983707208693,"timestamp-ms":1736889013349}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json","timestamp-ms":1736889013289},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json","timestamp-ms":1736889013318}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7929386983707208693,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json new file mode 100644 index 0000000000..6540538869 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"792ce7dc-3961-4630-902b-f63d4bd06683","last-updated-ms":1736889068734,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4070318998856319896,"snapshots":[{"snapshot-id":3528314312383791020,"sequence-number":1,"timestamp-ms":1736889068709,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4070318998856319896,"parent-snapshot-id":3528314312383791020,"sequence-number":2,"timestamp-ms":1736889068734,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3528314312383791020,"timestamp-ms":1736889068709},{"snapshot-id":4070318998856319896,"timestamp-ms":1736889068734}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json","timestamp-ms":1736889068686},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json","timestamp-ms":1736889068709}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4070318998856319896,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json b/warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json new file mode 100644 index 0000000000..c867d2c423 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"396c1ed6-f942-4308-9308-daa59fe3e6c6","last-updated-ms":1736889144090,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3480954675033900833,"snapshots":[{"snapshot-id":7582912806309123259,"sequence-number":1,"timestamp-ms":1736889144056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6555608599426066461,"parent-snapshot-id":7582912806309123259,"sequence-number":2,"timestamp-ms":1736889144077,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-delete-files":"0","total-position-deletes":"0","total-files-size":"0","total-equality-deletes":"0","total-records":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":1849061518691625497,"parent-snapshot-id":6555608599426066461,"sequence-number":3,"timestamp-ms":1736889144083,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3480954675033900833,"parent-snapshot-id":1849061518691625497,"sequence-number":4,"timestamp-ms":1736889144090,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7582912806309123259,"timestamp-ms":1736889144056},{"snapshot-id":6555608599426066461,"timestamp-ms":1736889144077},{"snapshot-id":1849061518691625497,"timestamp-ms":1736889144083},{"snapshot-id":3480954675033900833,"timestamp-ms":1736889144090}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json","timestamp-ms":1736889144050},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json","timestamp-ms":1736889144056}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3480954675033900833,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json b/warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json new file mode 100644 index 0000000000..c6dc93388c --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c8873f38-a2e4-4437-8bea-ae7d127f54c7","last-updated-ms":1736888420981,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1656754234135740529,"snapshots":[{"snapshot-id":8831663020960733836,"sequence-number":1,"timestamp-ms":1736888420917,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3340463550367158800,"parent-snapshot-id":8831663020960733836,"sequence-number":2,"timestamp-ms":1736888420967,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3340463550367158800-0-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-equality-deletes":"0","total-delete-files":"0","total-files-size":"1252","total-records":"1","total-position-deletes":"0","total-data-files":"1"},"schema-id":0},{"snapshot-id":285316391250252069,"parent-snapshot-id":3340463550367158800,"sequence-number":3,"timestamp-ms":1736888420972,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-285316391250252069-0-fe5041a6-7503-46d7-a94a-e367abc8212f.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1656754234135740529,"parent-snapshot-id":285316391250252069,"sequence-number":4,"timestamp-ms":1736888420981,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8831663020960733836,"timestamp-ms":1736888420917},{"snapshot-id":3340463550367158800,"timestamp-ms":1736888420967},{"snapshot-id":285316391250252069,"timestamp-ms":1736888420972},{"snapshot-id":1656754234135740529,"timestamp-ms":1736888420981}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json","timestamp-ms":1736888420861},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json","timestamp-ms":1736888420917}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1656754234135740529,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json b/warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json new file mode 100644 index 0000000000..cb3107dbc2 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c0673838-0d93-4abb-83c4-df20d75220fc","last-updated-ms":1736888817710,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2542743111193882798,"snapshots":[{"snapshot-id":4312681858952059679,"sequence-number":1,"timestamp-ms":1736888817677,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4312681858952059679-0-eb933998-38fb-415a-8c6f-65c20c4b60af.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4489525212361156766,"parent-snapshot-id":4312681858952059679,"sequence-number":2,"timestamp-ms":1736888817702,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4489525212361156766-0-ee502702-5de9-4147-9f01-2a63f690f3f8.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-position-deletes":"0","total-data-files":"1","total-files-size":"1252","total-delete-files":"0","total-equality-deletes":"0","total-records":"1"},"schema-id":0},{"snapshot-id":8005085842327209807,"parent-snapshot-id":4489525212361156766,"sequence-number":3,"timestamp-ms":1736888817705,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8005085842327209807-0-65f73aa1-e388-47f7-ad3c-0e0547345595.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2542743111193882798,"parent-snapshot-id":8005085842327209807,"sequence-number":4,"timestamp-ms":1736888817710,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4312681858952059679,"timestamp-ms":1736888817677},{"snapshot-id":4489525212361156766,"timestamp-ms":1736888817702},{"snapshot-id":8005085842327209807,"timestamp-ms":1736888817705},{"snapshot-id":2542743111193882798,"timestamp-ms":1736888817710}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json","timestamp-ms":1736888817650},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json","timestamp-ms":1736888817677}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2542743111193882798,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json b/warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json new file mode 100644 index 0000000000..0a015eaead --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"002574bf-b593-4b03-8f9b-87b4cca69a06","last-updated-ms":1736888738787,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":346030801285740797,"snapshots":[{"snapshot-id":5799605361944678510,"sequence-number":1,"timestamp-ms":1736888738760,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6240071354120329714,"parent-snapshot-id":5799605361944678510,"sequence-number":2,"timestamp-ms":1736888738780,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6240071354120329714-0-335d413f-b61d-4446-a8b3-3b77c0e9d78b.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":156875929699079505,"parent-snapshot-id":6240071354120329714,"sequence-number":3,"timestamp-ms":1736888738784,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-156875929699079505-0-d57221f8-b07c-4992-b24c-d23de23c47e6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":346030801285740797,"parent-snapshot-id":156875929699079505,"sequence-number":4,"timestamp-ms":1736888738787,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-346030801285740797-0-44d10516-886c-478f-8be2-84606aa42d96.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5799605361944678510,"timestamp-ms":1736888738760},{"snapshot-id":6240071354120329714,"timestamp-ms":1736888738780},{"snapshot-id":156875929699079505,"timestamp-ms":1736888738784},{"snapshot-id":346030801285740797,"timestamp-ms":1736888738787}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json","timestamp-ms":1736888738749},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json","timestamp-ms":1736888738760}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":346030801285740797,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json b/warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json new file mode 100644 index 0000000000..0e524c5a50 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3d51896f-f5dc-46fb-a5bf-843d5994276b","last-updated-ms":1736889195013,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":329543906335174018,"snapshots":[{"snapshot-id":7022889893183814165,"sequence-number":1,"timestamp-ms":1736889194987,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5824616610361792412,"parent-snapshot-id":7022889893183814165,"sequence-number":2,"timestamp-ms":1736889195009,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5824616610361792412-0-7c5224f2-319a-4b68-9db6-5469d6ed3879.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":329543906335174018,"parent-snapshot-id":5824616610361792412,"sequence-number":3,"timestamp-ms":1736889195013,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-329543906335174018-0-8044e2db-5959-4c27-8e91-e5ed66869db8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7022889893183814165,"timestamp-ms":1736889194987},{"snapshot-id":5824616610361792412,"timestamp-ms":1736889195009},{"snapshot-id":329543906335174018,"timestamp-ms":1736889195013}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json","timestamp-ms":1736889194975},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json","timestamp-ms":1736889194987}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":329543906335174018,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json b/warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json new file mode 100644 index 0000000000..af20705cb7 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"84ff20ba-e69a-4deb-b97a-09fe32ab3ea2","last-updated-ms":1736888716024,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":700734091558935978,"snapshots":[{"snapshot-id":3787244053631992891,"sequence-number":1,"timestamp-ms":1736888715992,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3829301046240051457,"parent-snapshot-id":3787244053631992891,"sequence-number":2,"timestamp-ms":1736888716014,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-files-size":"1252","total-data-files":"1","total-position-deletes":"0","total-records":"1","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3364091044142178334,"parent-snapshot-id":3829301046240051457,"sequence-number":3,"timestamp-ms":1736888716018,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":700734091558935978,"parent-snapshot-id":3364091044142178334,"sequence-number":4,"timestamp-ms":1736888716024,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3787244053631992891,"timestamp-ms":1736888715992},{"snapshot-id":3829301046240051457,"timestamp-ms":1736888716014},{"snapshot-id":3364091044142178334,"timestamp-ms":1736888716018},{"snapshot-id":700734091558935978,"timestamp-ms":1736888716024}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json","timestamp-ms":1736888715966},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json","timestamp-ms":1736888715992}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":700734091558935978,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json b/warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json new file mode 100644 index 0000000000..c1eb07ef02 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"175b9a2d-98e1-419e-a6ec-8f2c4238a3a2","last-updated-ms":1736887173251,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8288941973562284942,"snapshots":[{"snapshot-id":2972879693291038375,"sequence-number":1,"timestamp-ms":1736887173219,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3060050269327575568,"parent-snapshot-id":2972879693291038375,"sequence-number":2,"timestamp-ms":1736887173244,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-equality-deletes":"0","total-data-files":"1","total-position-deletes":"0","total-records":"1","total-files-size":"1252","total-delete-files":"0"},"schema-id":0},{"snapshot-id":8926228177826919489,"parent-snapshot-id":3060050269327575568,"sequence-number":3,"timestamp-ms":1736887173248,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8288941973562284942,"parent-snapshot-id":8926228177826919489,"sequence-number":4,"timestamp-ms":1736887173251,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8288941973562284942-0-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2972879693291038375,"timestamp-ms":1736887173219},{"snapshot-id":3060050269327575568,"timestamp-ms":1736887173244},{"snapshot-id":8926228177826919489,"timestamp-ms":1736887173248},{"snapshot-id":8288941973562284942,"timestamp-ms":1736887173251}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json","timestamp-ms":1736887173183},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json","timestamp-ms":1736887173219}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8288941973562284942,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json b/warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json new file mode 100644 index 0000000000..bb26968b75 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c25fd744-4e53-4544-99ba-65c20e364bf2","last-updated-ms":1736887154419,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7998744310280295035,"snapshots":[{"snapshot-id":5940108511084569748,"sequence-number":1,"timestamp-ms":1736887154345,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5940108511084569748-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1445752429382423980,"parent-snapshot-id":5940108511084569748,"sequence-number":2,"timestamp-ms":1736887154410,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1445752429382423980-0-3737aece-7657-4840-905b-26cc0d4353e1.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-equality-deletes":"0","total-files-size":"1252","total-delete-files":"0","total-position-deletes":"0","total-data-files":"1","total-records":"1"},"schema-id":0},{"snapshot-id":308720073320660216,"parent-snapshot-id":1445752429382423980,"sequence-number":3,"timestamp-ms":1736887154415,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7998744310280295035,"parent-snapshot-id":308720073320660216,"sequence-number":4,"timestamp-ms":1736887154419,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5940108511084569748,"timestamp-ms":1736887154345},{"snapshot-id":1445752429382423980,"timestamp-ms":1736887154410},{"snapshot-id":308720073320660216,"timestamp-ms":1736887154415},{"snapshot-id":7998744310280295035,"timestamp-ms":1736887154419}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json","timestamp-ms":1736887154291},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json","timestamp-ms":1736887154345}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7998744310280295035,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json b/warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json new file mode 100644 index 0000000000..486e9eef5f --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"86e7778e-99e0-4e54-8700-6f60739a4dab","last-updated-ms":1736886777665,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6989454375805241585,"snapshots":[{"snapshot-id":1513626882798940460,"sequence-number":1,"timestamp-ms":1736886777635,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2537810747946166223,"parent-snapshot-id":1513626882798940460,"sequence-number":2,"timestamp-ms":1736886777658,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2537810747946166223-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-equality-deletes":"0","total-delete-files":"0","total-data-files":"1","total-position-deletes":"0","total-files-size":"1252"},"schema-id":0},{"snapshot-id":2251096554203142244,"parent-snapshot-id":2537810747946166223,"sequence-number":3,"timestamp-ms":1736886777661,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2251096554203142244-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6989454375805241585,"parent-snapshot-id":2251096554203142244,"sequence-number":4,"timestamp-ms":1736886777665,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1513626882798940460,"timestamp-ms":1736886777635},{"snapshot-id":2537810747946166223,"timestamp-ms":1736886777658},{"snapshot-id":2251096554203142244,"timestamp-ms":1736886777661},{"snapshot-id":6989454375805241585,"timestamp-ms":1736886777665}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json","timestamp-ms":1736886777609},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json","timestamp-ms":1736886777635}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6989454375805241585,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json b/warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json new file mode 100644 index 0000000000..dc4fb90b51 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dfa9fe5a-06c5-49f2-90e3-18acaad12269","last-updated-ms":1736889194938,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3956409816803284574,"snapshots":[{"snapshot-id":3964058929230744404,"sequence-number":1,"timestamp-ms":1736889194889,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3964058929230744404-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6927406033723608373,"parent-snapshot-id":3964058929230744404,"sequence-number":2,"timestamp-ms":1736889194911,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":25667599030805015,"parent-snapshot-id":6927406033723608373,"sequence-number":3,"timestamp-ms":1736889194926,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3956409816803284574,"parent-snapshot-id":25667599030805015,"sequence-number":4,"timestamp-ms":1736889194938,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3964058929230744404,"timestamp-ms":1736889194889},{"snapshot-id":6927406033723608373,"timestamp-ms":1736889194911},{"snapshot-id":25667599030805015,"timestamp-ms":1736889194926},{"snapshot-id":3956409816803284574,"timestamp-ms":1736889194938}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json","timestamp-ms":1736889194882},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json","timestamp-ms":1736889194889}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3956409816803284574,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json b/warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json new file mode 100644 index 0000000000..762e9fb5e3 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"8e4e692f-a95c-4ec4-8e73-ebdc39e4c053","last-updated-ms":1736889144275,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8198039180664750375,"snapshots":[{"snapshot-id":3889083549440119316,"sequence-number":1,"timestamp-ms":1736889144256,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5376886020839292182,"parent-snapshot-id":3889083549440119316,"sequence-number":2,"timestamp-ms":1736889144272,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5376886020839292182-0-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-delete-files":"0","total-position-deletes":"0","total-files-size":"0","total-equality-deletes":"0","total-records":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":8198039180664750375,"parent-snapshot-id":5376886020839292182,"sequence-number":3,"timestamp-ms":1736889144275,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8198039180664750375-0-ce2853cd-f607-4bb3-8a0c-0749c91539a3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3889083549440119316,"timestamp-ms":1736889144256},{"snapshot-id":5376886020839292182,"timestamp-ms":1736889144272},{"snapshot-id":8198039180664750375,"timestamp-ms":1736889144275}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json","timestamp-ms":1736889144251},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json","timestamp-ms":1736889144256}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8198039180664750375,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json b/warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json new file mode 100644 index 0000000000..307893aba7 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"739bd7de-f8da-4aaa-ad33-f213251fa940","last-updated-ms":1736888846520,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7197919905951446818,"snapshots":[{"snapshot-id":6486622511572862241,"sequence-number":1,"timestamp-ms":1736888846495,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3799741043573514301,"parent-snapshot-id":6486622511572862241,"sequence-number":2,"timestamp-ms":1736888846513,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-position-deletes":"0","total-files-size":"0","total-records":"0","total-equality-deletes":"0","total-delete-files":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":4179982296980602400,"parent-snapshot-id":3799741043573514301,"sequence-number":3,"timestamp-ms":1736888846516,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7197919905951446818,"parent-snapshot-id":4179982296980602400,"sequence-number":4,"timestamp-ms":1736888846520,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7197919905951446818-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6486622511572862241,"timestamp-ms":1736888846495},{"snapshot-id":3799741043573514301,"timestamp-ms":1736888846513},{"snapshot-id":4179982296980602400,"timestamp-ms":1736888846516},{"snapshot-id":7197919905951446818,"timestamp-ms":1736888846520}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json","timestamp-ms":1736888846490},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json","timestamp-ms":1736888846495}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7197919905951446818,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json b/warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json new file mode 100644 index 0000000000..b930df6b14 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5fa2107-c0dc-43f0-87c3-d3732e5c9401","last-updated-ms":1736889068823,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1644775352898622177,"snapshots":[{"snapshot-id":3533502525690906202,"sequence-number":1,"timestamp-ms":1736889068802,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6683184572107984435,"parent-snapshot-id":3533502525690906202,"sequence-number":2,"timestamp-ms":1736889068820,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-equality-deletes":"0","total-records":"0","total-position-deletes":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":1644775352898622177,"parent-snapshot-id":6683184572107984435,"sequence-number":3,"timestamp-ms":1736889068823,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1644775352898622177-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3533502525690906202,"timestamp-ms":1736889068802},{"snapshot-id":6683184572107984435,"timestamp-ms":1736889068820},{"snapshot-id":1644775352898622177,"timestamp-ms":1736889068823}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json","timestamp-ms":1736889068740},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json","timestamp-ms":1736889068802}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1644775352898622177,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json b/warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json new file mode 100644 index 0000000000..b05a333a8a --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"9afb44a8-ed3c-4970-9ff7-48e02f20bf87","last-updated-ms":1736889013449,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6473024829048856312,"snapshots":[{"snapshot-id":2600792867184750836,"sequence-number":1,"timestamp-ms":1736889013433,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6473024829048856312,"parent-snapshot-id":2600792867184750836,"sequence-number":2,"timestamp-ms":1736889013449,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6473024829048856312-0-ecb485aa-72dc-4245-a543-002d315794c0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2600792867184750836,"timestamp-ms":1736889013433},{"snapshot-id":6473024829048856312,"timestamp-ms":1736889013449}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json","timestamp-ms":1736889013426},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json","timestamp-ms":1736889013433}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6473024829048856312,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json b/warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json new file mode 100644 index 0000000000..3ee745ae7a --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dffb4662-926c-4392-8af0-084cc190a9c4","last-updated-ms":1736888952111,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5395725435613174339,"snapshots":[{"snapshot-id":4948184997192531561,"sequence-number":1,"timestamp-ms":1736888952100,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5395725435613174339,"parent-snapshot-id":4948184997192531561,"sequence-number":2,"timestamp-ms":1736888952111,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5395725435613174339-0-3c679dff-e9d2-4743-8c9f-41100f6ed284.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4948184997192531561,"timestamp-ms":1736888952100},{"snapshot-id":5395725435613174339,"timestamp-ms":1736888952111}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json","timestamp-ms":1736888952091},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json","timestamp-ms":1736888952100}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5395725435613174339,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/01e6f094-0145-4d30-be1e-b291d4941071-m0.avro b/warehouse/test_ns.db/target/metadata/01e6f094-0145-4d30-be1e-b291d4941071-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..e72dc7054720cb69a7b9d1c42ceb0114f7ef611f GIT binary patch literal 4407 zcmb`Ky^rHW6u^^QwAuo#5Fn~6My`{MKX&s)b%u|3(Cb!;;p?<$<~ z2S5Ro`~mdbe?SAG1Bse~3Z&DuAS%RrGqGbkxv-l{6h-!A=Djz+_c3oiaz3dayq35V zHl@$+Jk`W3X4+6o1W#R|wY0I%0x!{q=T9}?(}qS%3+WVRMBHQChOt(*CWyidc;oET z)aMK)gA6ursfA``p+^NUuspBN)vOfV5z@O@2I7zUA56}y#?m8Q24MP-j@b}=j909&wiP?}17;^1Wgl%T8;RSf zpkl1K6nIk?ESy*oWLO2;q!*B3;VkQEDgA!o4B2f@WU)02|AjHG!9rxZJQE@Cd?y%L`)d6R+&pMbIV9n>e+6TLK1=S zEa}0AhF%D3l_X2;r!oylG$u+yLVTqR8JAT^>WTjuv;EL^W`b37+0ct|qzYud&9g|* zfS?S5GEj|@QA$rY3est4RzV=Gw^$*K%7jpLU? z-08t&Vl}m1p_-ciQ%%=Gw02ldC98E1;ZU`wOi*le@*r6>^j4v9%PXd)Y#l+6zU*kc zAG&-N%eE23lT18ug2*YmFo^?S*wJ{LFtL&dR-u>6)h|1Uyt!Zjo5D3HGa5Uqtlv&@vjlIra7-tl z0$8qE5JI%&#Uw!fYH-G*5-M{q)d}=T1xanc1bJ)42oJ}I2)`8Ag z*kN+$IUPay1rr?%_>Qg{2K?yxk72-@jzhZM*4w6TjgJkt+wMDEvwh^cW_vK8{kG+> zZnx)I$IiexT->(~9^QNO@ss;!&F616_8Py}o6qWdU)O8!+-x@Yn)py_*7j<(20p%C guc=RS|A+T$wY|nYIoilaf0U!|!t};I3|4pkAC?17kN^Mx literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/08f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro b/warehouse/test_ns.db/target/metadata/08f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..c107d0a56a275e03c032d0e63ccf6dbdcbefc374 GIT binary patch literal 4404 zcmb`K&2QsG6u{Fos)|4r5{T0ZjeOvgH2&x|AA3UVR;t97Ww(2(B5Pug8*d%kjK{6Q z5-yyO03js)0uD%A*gu0S;)KKjuB#sS6L@bXc5Ejb+HBgUvL`d|z4^V5dGpEe+1B1$ zi8Eqj`f~fZCMGe{`dT7*>Iki=c|Hr=MC+eD*L+v&8%-^wW1JCjmvI}$n%SBl3eVw< zv(HkWGnfoA*tDq@nw5nv6>PqA_O^VfRaq)c%(a50{xZFTrlxk)Lc8@Qn9oAt!+v;6 zZVJY6UxVqLm~!C@KMGq(%$&yAKr4^H%({NZi};v|)+OT!Os$)HP813dxeLbA_vj^$ z_Lai#?qwJWz;FPR)+9Md0wfhe0+gvpll)t0DbZoF@&eKPP-xR8DXa)-oQxtN!Ow)M zWyXBjnHHu&fMTUf2JqlAkEVgp`UJl!iv)kM&|!9%j)#m_tg+S=>-hn*la;a$)|HLK zZB$S()|?BxsS9RKtOzo!f^E_Z$S`t%pLPU#i3$dSj_eckeUn7o!G8o|2Y^=mCTYY} zjH-(CqPw$L&UJkpITQnvJbipju6!{fM^A{1GFFZYDPI}2prH^MnAb8}at&+kCQpwA zT{rds24$88+|W(jPDc1qmX8D-O+*?8tf{t5$&e<@C4fYX7_wHGOE7cGNL1?CPLx6t zf$%Kp!H0%k2y2xjbL}TG4M^k>B_SccQihDnDkSy9|D4%=Xb&fXRdd%L%PsC7_BvcfX2OPLcc z45MRT8b&u~g)0ih>VipGnFK6N6{<$3WceixQkkLIl5GD)PZ-_l09_wM=e|ROQ+fOl zZA@crI)L$V;lcrxg%4?rE>d)e?-CKg9|DyuAwFC`xhT6!8l(bZ5oHf#&kWrF${wIJ z^&HUcQTA?+($qJNQszz*0@Ddn7wU#QJO~Y4azanaZ1GsJR{=H(h3@qMn+5_l*9UAG zYXCMk2N-z~$qQl_D^$sxkcKN^TAfWstJMXVR&RZnR<~sRjS}DLZ4xGSE?5sBE)~_h zYO4xS#v4Re(7O(SJG6j6vRIJJyPHI79%7t!awWGe1m@vtv`bGNv$Hw2k`ZR}!zZz98$mqD#FJqV4a+V};=mVnVW-!o%BHc!W1#=r9tJV&@5chRX!w zV?ShsM^_}X5c{|M*#(^ft_jfGCHocV5eMe^?YUfi4wjvg@&dBT?hI`)ly|0ABUz}`X(C~)6n-=B5V-DC))H~d8u_GmpQw5Ue*5i z>iFj`zy9`{pMLn_-t|8(-l+e!U9bQ3=dag4{`<@CAJl5K>n+@Izun$%Us29R5g={I+LHRioZH)G|q3e2E*A1f$AH5A9c#%W!(1PEtXX#Y$wOGfw+d444gBCro zyjIt6hK4@uTGTW4XP2$LM;|`^^y!1s#>;o=JN3V}8ZWkXzTc|BbEDDNY2ZVxQQN82 o>iGEfHkgV(jotT;Yqg#FM{=~G24VEghd6p4rq_32u)6L409VIM82|tP literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/0ab31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro b/warehouse/test_ns.db/target/metadata/0ab31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..682fbf6cb4558a84d4b2c756cc98c94f93ee02a3 GIT binary patch literal 4405 zcmb`K&5zqe6u^@-TI~U?kbqv=!^jsd`S8a!UmQ>oU9l1@rQM!Zku|X=8+RSsjK{kQ zRsIFUoqqr!4u}KXIG}Q%{{s>iBvf(chQxa_v12=F*iDmNMfPOoy*I!2F>gK{J*^(R z5jzt$r7v$i)5I)d+CYm1PaL5&w6Vv0H`WGc&os}~21Y{*=oDv!+-2N`u|~Sa4})`f z1}$+ z!(L$ev>pJ zDkfz`dfwe>EN8kt4jqbtNuE49CRd)AkfX;$Mj0!{g_N(1TG5b;49shpEt!U`c9W&Y zimq#W0E04318(RhZYL%DFwIATjwT|BeAZCgres88<`O_6CJb4t%q5t)MIGR4iz+1b*!zOnUSN-Af|YaG(DQMm3S_p; z(@;>KpbUaCP>qsNNKYs9lWAb%j8*A9FnduevZP-|KINRwaO<96Q>b-NN7BNwtV^jA zE)1h5_E+c~2O<`4C<2hv%L{{Zo1T z5N%2$Z9atYV&TF8m4%mo!KP#45@@$X*z_1C)J0 zY3doEo1^UC9Hpu68l}vg1_Y+#Coa?td3X>Sxa5SM6xrgjVs8R$}$Fs=UfFs)v}`fDY=)!!vd>|C%OKwK)S zS=Ck*qKMZIub_7w0e5Htfn>fQnfG>y*6d)Mb~7b6E(B(0GupMMj@jKETgi$@Rz-+O z6ulbaP7fv%tEu%G)zti-YPuGpwZn2MS*?QzhpIhgf?}hS1<9hJw{neJRxveY>kxwU zRY&84z~Qq0>34e5C8GY-pso$fW<{{JjP1@`9 znq>>X_vJYx2=PR_aA-sW_tm|xsug&y*Xw(Ae5lkbdzDHJ kAKye%@l)S_{!yi}SGzAqYibZif0d&j!1UTa43_u(AIGjsZ~y=R literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/0bdb173b-1d0e-457c-acd7-bd379e96c1a2-m0.avro b/warehouse/test_ns.db/target/metadata/0bdb173b-1d0e-457c-acd7-bd379e96c1a2-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5d33f8590acffd4d41f0bffb1e1b5c00763daf7b GIT binary patch literal 4404 zcmb`KPjBNy6u^@-s(L^b5{T0tMm{Hv$L=;wI4xo;R)VsBx~CGEu{~+Lb!;;pw+gG= zIRN6wkt+uz1YZFpPF(l`%Yn;^PXHI*n~5De$%ZzYw2JJ>%zJNs@6WvX*nL*teZaNf5aQ#zRGnu8uugX$l!es3QVg!*irY%xh5wRp4#ZrNv3DwK! zeA&4XWnqY7l}iTj;PWBNLTU5~{!|qS{^F6xohTc-Tr5~)Zz^^egxpEj%0ApwHWGJG z!Gf{YT;NSzFmvL9AZnLvQ(i!Zu?PH&6VOX^Fc5TPpP=tsBo-ci5r`cCy5KiOBVls1 zsK_k4JCEf;*N3skFfhr}#}CMLAV=in2~knTt8t;^YonGllp+K3T4hV2VWZs?>9M5i z#vZ_+%+o+n)57iKgdgVlNYK$lW=Y6fdfSY+Eag4{Byz-&wa#3EnOjAoQ_u0@43Y?h z=SdGfq-H6sb&|}rpQ+!q4|=0|7B0m@VD>5#xDGKPNys#rpN_(6JEb(b|^qLqP31NPP>JYTNeWBXg%7Mr;gR#9$UqVC{|U7S(3aO z;#LnP3#+O98r9VLpK7`iqP@j(s#vXp2#2aO=8|EfQv}JZp|?woTTw9$ZR-Gn^i@aW z{m2uOM750|p5)?*8^&(cg=rE7(us$|l*^?=uuHvMp?=;$6wL(>`53N2xzX5J<^6_k zt=697PtXL(Txf!FJ1PMW7YGJ3CUD_dw(y3jx?tha?JPXO8!&VjDao+&gg(RPl8bQ= zaU$Ytl3R%VTk-6JP6^ipXztR31?aH==Ed!~T73>zos#MTvd-fV-iKZ_5j@2kE*#S- zsDP^oT+s2N0-bV@DpPbzm3Mpsnr`Krd|=F?V8~PHfEY0`rf;iDtrz>;+r#s!_Q~&` z{`?1h^b`MKXK?oKKVLO|+i5gjeEG#+e}4Do`@4=i?sqx|oogoeC{j=uFw;H>R7xm_k_1$mkHF$0|o4ZYXs5NW5wORuo->ieF g_-XF_@WBt9I^LV{u6NgtxpTaCvex67_uhQ(XWo1^d{W>DGFl`DNr0qANPsexX_Eh{EF~sP)?Oe+5J_X!B83$Zjgv8#3jAECUS=(p zof%OYhA39KWB@Nd8__hBMxWqMWs%@77J1B#(#epCiZ#xrVn;#9++?lngH2^4aTgU- zjI|d6uj_)j6Dxu&r(m1%0y5+t@H37ueH$@|+a$Hqp z7Tul2a<1zW?okX(^7!F>auvuiIetV`l(BMLDEZo`B@Knhz`R!3l55y#H+gz2>AJQD zFetM$5SD4_h%#gLtT!NWfMxs;C^>_+N1j4hV z2OnByA*^+hEVQ4fG$4FLw1k8NS{X7ft5DRF;A`dvkvp79R?TJ0EXI*8koh)GxuhXM z83bjZ8ZD!go*oa=N#x>;W$8UIdtNK@q+din6@pH2>w#nwsC7_Bvcj^cOPLccEbGv{ zw5(pv3Re`0)df?sG6`6kDpak*lI52)OjU+vOS1hJJz@1`19W}J&jXK!r|S42#)QVk zYyjis!i57m3qPeXx=7O@flnlde*~&nLVWl^a#41dGDru+GRh;6JvVdQ0U$qux%k=dvn0HwEXmxr3(>dB4rqe4~f33uKji~lEbw}g9 z$P?38wT&R2Wa7y%@hD1g=4u(b!pK{f2I> z)}G^!&;&_`&;(_6lmZ?u5EN!i;li_Q;WbmWVqy1Y79Qgb7&?rEq}X{vpW!pf#3YCq z5&Vi|7GnRFzx$w5!ZiV!yJWutoeN-|-=53W=U~+-sV*SvJbwQp=v8CE61?HUF`a-4 zxQf699WN@-DF=x%MYmL0$0wlaR=&vwCNv60ERimV5mRG!TU}~B?lW%}&#T(o?5m%j z{qRlw_RB9`2LJs2ZR6KljmA&Upa1di-_KtBR`oT1gG78|y^-QJPu zTV1PX(f#>tYwy9`ho3*bciMdQZeyqMXTAAjedqgn4c?p0=1vn|YR%eCt=7QTchFRP fn!CSzT&wLg?yAv-9)!^sYV<>x-q?k~>c0O2WgkqT literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/1181aa39-f25a-47e3-8909-bbb955d63a1b-m0.avro b/warehouse/test_ns.db/target/metadata/1181aa39-f25a-47e3-8909-bbb955d63a1b-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..6cb593f524c38d8f77f83ef0aa06d40de3a153ab GIT binary patch literal 4405 zcmb`K&2QsG6u=#CRrP=>BoL=PjC|peH2!Ft4^Atw6_ubYyWLY2Sz~+Bm^!u@k6Xej z2RLv-ocI@zR{R4T_8(Yr0Zwq_j1X6Di1%hyvF|J5>z_<%@&0@V6>PqB_HFf6r?yp^SZW1J!&Q0*O+%fkg?5`wFrURDg!Ay0 zJQU31xdzkwDdi#*VG_5pl=(Xs1EV?vD|Pe!FyUh=TGxzcuvEAA{UjD3au1BB@6c2~egY&&pq=rNo5A$_vB@V_{62WMM~4(`=Lo34SJ2 zZL{XvE{r&jA`~lKGJrwAhBS|a(I@y*RV4U}#XfW6eC#n^v&Pv}>@bX&o2`|7xT$O; z?xKR4vG!cxZCx;PVoi|cEZ8Q!fD98K_!%dlm#APM=*T`n-#1CZef&otb^vJ2Z<0nz z#i*{xTy%F4%cZUl6Q5#WlBbVP$xSFm}KhmNYCx2IjTQmQuq;rzz88 zN!P7CfI(TL0k=#Wk5dqSROBN;M-!2!5o@YrQ{vH#1q6_Y5kuB0a|vc{6^Tkc*H3at zA`o6AJ^0Wv7s6U4$z1!HOaqb(iIR|!P$@&kRTYwY7Jk9pFm}C(VD((K%*8lT1+qNm zc_L^;PzFI6s7A@Cq^F-m`8alQ#j^A+m_4f%Wzx?hpK?woc=S-PG1NM!BSm4E*QLS< zSC-XruPv)vvceq;#p;SlS%m~FO*N`kr(*dvjdGcx#g^jyi=ME$(*e3ZN-jg6M(6VS zA;y@d#&iJl)xw1nDhofNDY{6}Az?s70)GfpvV`~u!tAQ*E@_Yoh-H*LkUcYW3n+Vl z(l$##cSqT~J4)N!HcFX0O$bas$^)ny^70@w4#*ijtFpyw#a##3S}1g{57@R4u)R58 z+u8uIy*!*se8>u;6#PH&qqv2($C0CB0P zmQ`C-h$`MFxq;r*1MbiQ0?EaKWFKu4t$mDf+9{RXxe(aL>(Q>fb?nae*h*GJvZ_MN z)AZF4w|X(zSWTVRsHXP+RMV9Zoh_DA$!ZluxK!OS6BHYrGDv0(y|d7`l@-%awhkaj zUv)J;jD0>yW!nhiNg{#XQ7uX)z3SKvbkUp8^bfGFd93n zqTf)h)!KXf37R0N2Tf36Mhxe8C z{G0DS|NZY5znz_qLjB!;U+6#G)Ag@@{r<-#)O|R<~#N zTAt_ij*fz3hg#mj?6tN3=)vPpo<2O+U%sX9>c2F0o;P;CZfG#pcik0%)8z0? bG!;KPdoMrGv|arHE?6G~cltDpNnk@8I> literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m0.avro b/warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..b4ee631a7affd62a5aa60fde58ff0a1825334245 GIT binary patch literal 4404 zcmb`KPjBNy6u@0?RaFR8NFcbZ(8xEWr176LO~MJpR;&bN+3lXH$V}`>+R$KzIE zl?y_g5FGdl95`~|18_mwBPUM#309oABk|r$?AT5=wAn;aWKU+^d-HpL=FJzwCp!mk zrrwxM=*v6L3^7fZ(Kk}TGfx-|V-&E^PmTWhGb8YgzSS@yI>8w+_ZfF#tdXw?i8Vo%Q?gBZ0U5>~@H0+8FHylj(2;$DzHgA2d-y{jb^vJ2Z<0nr z#kj7>EW108WFj$#o#c}KhmNb+i1M^yDOQB(--4yAu zr0d2Wz@W_2fLo@G+sO$($n%k)qlw6pkTuk{DH+m~`2>)NF+5V^ytVD((K%yJy50$FVH zEEY5*D1)F3RHI~6($kB>Y!bORV_A9^%%0bZBIy^APdTSk+Qe56 zOUpWTuPm!uu)-CkVs*)+tXu+?rW#f2xMKMg4Ktac`I3D9Wlvb$*#KQ1#utG{!!vpO z5Mx3UV>W>CYT?2Gm4%zA0oxV=wl@cC zTN?njw+9$`5y=Z;7%No8oQOtiVLHd#j8>-$FrD7!Fr9A2`Wq#_)7vIY>|C%OKwK)S zMb%anqKY?+uc3Dx0(WQufn>QL*+<(%Yj-eCj|(NYE(CUGJ=&G0j(xm6wvrW*tf~;R zBzZN&tsYD^R#WFSs;T`y)pR99XN%=jvRVZZ4pn!;1jRAIywe}o;geC|&geEArqZ06NfuJyB3KyPb3vZaJH48hpv+x9Oz|di&B*V@V`V5~5 z#wS6<2#>ExZXxz>#j_7O1zZ!Lxl0dg&|?nFi`#Rx`m|S_lJWww&g1t#fnGJ?EX5lx z9MdVNfU5{x(D9-IopO*$Q&dZpcYGY0Zt0tRU_zr{#8Tmc7(O*-@5oE77yHcH$MZ^~ z@Au#M_22KG{`k{Z?|q>C^+JDsN7ujk_QgLhfB)_0Cz_`Hy@NaMw_1m-Ys%R;24pR0 zi-jAdhyJi7D8FE$h0)%!Ov`GSre)5bEDK*u7=lmJY+7xv=df<4>6y0OZ1=o&bLe$O zP3Nd%TVA(qQuF9=e%U&B@X^CBAKyFEpTDi|>3{C*{<5?8-Hry&`Y!z7gSM;fX_|a| dO9xZ&v%CMtr<%5>e~c4WjB2{R57X+~{txPPNO%AM literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m1.avro b/warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..c9538d873007a1b2a95afacf744282556bf93aba GIT binary patch literal 4406 zcmb`Ky>BB$6u@nt6{SEC5{T-G(b7=Z@qQ$+W2!@3#7Pj2yBtkqt!8(}mnG|+Wp*}^ zIr(2WrKLhb(9_aGM@vIRhjgN*h4*H>>)o}_BtA!xGoH-6_vZIL=FR8cSIxb*QvZTY z=&O4#3^`4hF*H&sGG7`UV;r(5NR8q73nL7Sq17>BI>8lO1WdRv*U9%pJbn(}1p7J* z1%t&PgUvd6qg~q=P{|fs=igRub!uCciG^0MG+d>3)G_p_x@foA0rOcbLpYD|QaE!qS$#=kr*C$Xzg=zDKVF-`5IX zewbq<0K*4RMu!w236RtX2~egoON;+1ONj}KwHJsH#?qK|NNGn*lk|d11%576Z?hKL z&W$*WA{47!GJ-+C#x#qhF(mk}sz~q`i+$$C*~DX_W{tC{*l`#!H(e|HU{l#h+(iX7 zW9@~&+qz)x#F`+>DcPpHfDE}0{EQROOLQ<0bmWkr?>mGGA3q4h4gjtBP0>iGyr?TO z%kIu&xzP0~_bCP@dG_QHxenz8IeAJ{l(A}DDEZo`B@Ly>z`R!3QfS!dG(~zW>AJNC zFevjh5SD4KN<5mffB+JC!H~7iT!NWfMWR#B^?3$K1j6&A z2OnByDXevpEVQ4hG$4FTw1kv|S{X8~s!-I^@EhiavFlAGtLL(1mg7hl$l{o1T+)c3 z41zLHjh0bKPoGEGBzAGdvh)F%J+Bo-(k~*P3PGoM^iZ-1)HhTmqJ+8da-bvHXfgnaa?7OMd>cC#=D2gszYH^U$Z!nYw<6F`GZc5t(#CbOsgcZwzV*gf*1JEhqnE=gQx?h9N1u!pO&(-R4uq#n}GugvxcDudP#zCXq*l9FcIDEU=&_C_n bUp{Fxc3KbAY^#|4Rn2|`%UioJSwHxHksL>8 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/15411624-4674-4dcf-a2f5-46beb4722430-m0.avro b/warehouse/test_ns.db/target/metadata/15411624-4674-4dcf-a2f5-46beb4722430-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..67344d2781e360504853103b2d97d360035b8132 GIT binary patch literal 4404 zcmb`K&2QsG6u{FoDwRML(jrbPH1dH{()c57J~$zED^+64vfDjXku|X=jj6vFk6VQ* zS1w41e}F4T#2>&JA+DS_AaO%l?S+2;@!m}A*iJUI*+fxfPiEeG^Lroj=CjckI|uJ1 z&V&W@gjWj)>I44%0ib4wpcoUTfNk(ER`naTES9pmEK`fQ@d)R-Fg$uXQA+5KfEP3 z1>?A{;p|~dx$uM+g{>rJPUB*zl}BJ^U4J-^ctAz#n(+jt*3APa3I&MV2jl7c^qNP9 zO5wL3Wf%#-Z~&CnBsoX|Bo#sel&MIQ{9kD)(P6Uk0@1usXtO3MtO#kGOd=t{&xNXG z#$wrp7N)+BVx>!l@ZhpBO?{ya2>w+T3I1ZC!|X5(MvPaiu{ISu_Ize1Yh`yfm5s!0 zR8TS2TnN0Y3+7I&2r{gKZPE+KFmiyOb^>~d3I>9X91!$x;~8@ih)U9JUb;fo|ur6=R`&sE60VDuZ&vKP>2l7Ynd&%hK+WUr^k}6 zJ9_|wGD`z)=q7F_Bm6YWM}m$fB8`34RNJOxL=)x`Kq4j#S*y$?n7L&nD)nq9N+F3r zc$W0wLqjiwwMvqO_A{9VBpMSXAt9bphK$Q9B=yAmirHRhkEViEbJ@^~aij`lzRmMU zP@kX-f-+Ezl2J-eC-T!Ev~k9=^d6W!uN8UHFCw3EPN%qaPp|-L9n_Jmuq^6Q=7cN5 z=-StY(aTxkibAovVp3Kn0ZUVbs?jZ3eog&UW@xq~+kep$MsGGm*Za|>=TQG#9zR42 zXspeKFkUWPIH0od360T3iVpEyA|m)AP{|VF!}XG@vb&@~Dj=3o_CfaC&@G_s14>iR z0o@;E|NbaVecLEy?ld7V9Y1xUZpg!f(9k7k^sLMlj}?0zV53mz-W;%LAYgNIz^1VQ zU~_wbkr$D?AcnC*mCOlgxE7|>-Db2}J%DNTH-~BUO4i>g@vZ(gVPfZk^#I~hQO&Ei zst{$oeslx9>j=0*3kW2O1<5?xCR+0t=q$#SU$~ry{O}F$-HW1Lz8?!{%Acjx1*?aO*>qIVd_VK)`)xY`k zw-0Bcr{8}6;H@8i|FQn-ZoU5VAFqD-`k#OQ4r;a9s~z0&pxr)f-%!pb5g={$BY{IYfM^y6orzj%D!c=@2dSO06L@zc)UcRMwBZZsNu4Sc9IYJ0U>9UtG_ j1yk|U*#F?PR@43(d+xj|#R}I)7We)T%6%CgxhfQh$}+VM|lHYNOqH3(RMs@L@l^ zEjI<@xUb>tc1*eOg&&3OBxY{&@lY#|z|4kzdlc~r741vL6PVgC_uMEHAaWOsr*G0r z9_=fIU);$s5`f_XD6K_ukOW97gajy4ktX@C(o&+sWaR~-`JvEeEmBw!(l{AMLV}+Q zRm+UUvd3DO1_6qdE*Zju$3`>_gf<}fQ&}YVi-j(;!*t>>Ua`j7RP4wPn4PSZeXyx) zByOXEim~QG;B{RvcVb15VHIqXUO5Om~#pzm8G;x2v>h#df0@tdR( zQ!%b8(u?lSVma6KLF7^lO!DZ#eRAcCF*$xnWR$UTTuAxKs3i@B$iTdo*^+D6Xg7I! zEa|$o2QVnJG~kAA;&w8^r&&G{bTkoZ9I%$!HYE;Cm`4DK7&Bz8GM8ZHmXWB`v)w3# zBm&`C(t{5Ty%5$aNfz2qWEzlYM3jVt_(~ZvE~}8#6aO=2`=RYj1*_(=p%>#w707&> zXOW-*K^X*Ppc*Bkl%8%Bq?6Fb8OzdpVD`LLk4P-5h2A<|s{l+bCu3v>-6uAoZYb$isus&?6`Gq|6qN6?+|EqfqEx9UmhOt7G%n50@7N&Ky&1kiH0MqJk4%6zDtiM*`Tm5aq#Lfll0mP-E znpbUAA(Q<}b}WJfm{>{#tI*5k>K7eE-dwPNP2d`o8I7G) z)^DiRYVA4x5KR!&fhH)kqZIIPfuJyB3KyPb3$K}~6$`sJv+x*iz|dhNB*o4X`V5Z= z#wUKr2#>BvW+C=(`LhQ)1zZ!Lxl8sd&?64a^V@T|`W&n}CFKQVoyYIL2fb>{S%NoQ zIHnU&0ap>YpyNdaI%PkRrl^)G>-ab{-O@MNz=VeWh$X@XF?_1c-jJ7CH}aUfi|1AC zo6*02z4G1HKmPIUFK^vB{p6j-ueX|w-@bbG?DHS~{O9ckd}@E!anFNJXTNhrIU7d+ ztpkm*u)}2Eb2@_Zb0#_%?;XR?jgD>@@TKDuKEgk~>3Uml8=f(8+(Xtr)DOGugZ@Zw zI|m0&+j6`8L&tKuJ;U6eU$^#7?>_kW(Y>?g^Vb_Yjo<6d@9R5X)@$(GY&LhA_)u%s nc51Z-KE773sZVqFr}t~MoyJ``+Q>(LmZR^&^u{g>RyY11A6QHt literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/18d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro b/warehouse/test_ns.db/target/metadata/18d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..8b89ecd57d7cfb6b5b4c63a271bfd5936782c502 GIT binary patch literal 4404 zcmb`K&5zqe6u^@-TI~U?kf`9&!^q;8Z2Ym^d~l%^T~P^^(r!ee$u&SGW^j6{mmlSa!J2Q2gxV{rP+2z+B;wTy^PaRwJY6E2LkvNa)(&frb3 zFVjFUm<%%5yrmb~m4!Z)Y`JvtwtlHoS*lFTwSuL=I=#b|p?B3ryUiAu&mtMXeneYs z3dV6?!}*<<3K__NN9`nLUh{Nllt*A@!@M)*VoGKEf{6sCHtao*M-oKtg7NfSdLj6} zR`~pb3?l&;9)L1hBnL@=q((@9GL>nP|Enw|CQQ~|AVv^LW8NZ#6%mb-36~1|La1J5 zEtj1dQ5uFQR=H#d4?Y{yG?d1G;9q5t;4c<=%#G6Nh>40d&Zc6=LCDm$5JB#I9*C*Vg7?|YgxjkP~wBgs3QE<+xDtwNWb?3Xy?%t+FN8u+eVv^jOh# zZ4Y2jW@#WS)5h&&gdb)3NYK$lrg6wxdfSwYXu^B~NaTbeYn{0SGq;RHr=IKa6p{#p zXGsq}w9Gm*rfKUQf#_?T!32??|^WL#FEs3*Z!%nc%UG?T2F%a&P;BV8c#ZJuyR zLxM60%0M+*Mkzf#9;VaC#Tl#8dtmmWR^&;)jC?8to#EC4$)-^2ppImPWm%UpC!AYW z*S)Z;Ud{?v6pGb3Q?fD%SehzSt!~Nk3mT>>L$f8>{)?Wldh;Q=KICVCN5d0!{19VG zV`Dyq@p9q90iA`P(imN&>5#xDlEW8)DwYr*evq7(-K7lD0kMj*53(1AZUJQmmM0=72?Y+D-u zwzmfuc@f16Vi+q_$()ErSHg6<+l*GH2QZ!f<}jUJ$@*(0zSG|(Ozd2+9za}bs(IDc z6{3tcnoOW|1H!cMB;nir@o;r4Sdu$aeqF9w7rg8jw zh+93FY^P97wShTbVOZh6Htw5>x3($^i0 z4!`mPJd;ibIZ?_ta7vKN*-HVq$eDhwdR{Oh-J05g8`<+WF*n|VJ4z$J6 zjgozT)R9!2G1F^`+a&aYWI4U-#!?_;HXQT_FV=C ze|PNplsfy1%hukbdyhYV`rxGb>Yc_;qra-r`!Kz+3xm~d{|EFvOy&Rp literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/1b8f6465-742a-450b-a358-12b08ae8ff62-m0.avro b/warehouse/test_ns.db/target/metadata/1b8f6465-742a-450b-a358-12b08ae8ff62-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..4068be06a9e49a7f2553b3f51168237239e7515d GIT binary patch literal 4404 zcmb`K&2QsG6u@1#sw#mhBvzbOXyg-zr13|ars0HOD^-HBAKgX6Fb?^W)roRGnsks&F_88n@_#Zw)Wr5 z{Sk}lU)#?OG0vFLH*&!XUl=W87_unHjsE3xBMgkb)iM$qV$WvE@X(QdN^=CeeEupi!* zn}TuN*I;r#qg;d{Op|t=F@NWBVAMxorf%LJraY#iea(0dQ+0daPZI$m_rQ4i4!!2- zfl~PO`z1yKFnj=Iv`7V#07-?A0A(tQy!usIN=%rnyg-aF5yqrN=2j#$%SWk@;HN^> zGHbT%(nyLZLb1{%19%D8kQR|J`UHQfiv)kM#Aj|(`fYn*k(4#SAK`AXS`>&iyr zE-GjkYtIDU)&)~1HUwGDoNdwz$T0PRpK%I$i3$dSj_eckeT$^r#|MGf0iX@PNg5dy zqoyKr-rZ#^SGqn?m zUAOiC24$HB+%j$4PD%J-nU4e=O+=AJtfjV1iAQr55I`bE3|XtpC78K&Br5e>KP@1M zKzNz-;6uxt3u~1mGwtUx4M;j9NZ2_yu#r#P!C4HFMcA=i^8f$ZDGx zsh|--83bjZ8YQEao_-n?apK~PMd>{-ds-{1q@P7T<(!Uj>!DyV)H-yFrAb2VLH8<^|wlV=VX&Gv2($C0CB0P zR#jV7h&tXVy@B4<1MbiQ0?GM;WFKu3t=+{qJ+748xe(ah)o7QVI`;AA*h*GJvZ_NY zvh39mH+nGHSWTVRsHXP+RMVvpoeh>#$!ZxyI8@!335tzQ6(rM!-kEFMs)}hSTL%!N zuR0nZBt9Q!vTX$Mq!drQDD~SrB9)m*TM#c&NOjmFNZ z>^D?vwelQ)f+h&+K@(KkQ44suKv0-5h6~T4g||%AhK1d`S$K*!VCXP%Qefu^eMZ0p z<8hcU!qXd4T8RBy^&Wsu0oMd*?(%~M^ppeh>h@f(K8MRrNqGTTCh zzj^fAxBtYywDWsk{;~JQ_xg)%UH|vjmp}aY=g&XAr)k>XTe#zXr*qJ`p`49UK-Ph_ zShz`k5O^Iy`7$BhTX&NQTzDNrtQNc(`!@b zsMoe^&+Jjw8xFhn!Su4V|L}vykDflb&|kc*@9HnNcD~!%{c1~tcYOyQ_@eD-yP76n e-`WOK@w2n{?wO|T>L22SC8L_I@4>X@w*Lcf14=Fc literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/1d1fbc5e-5056-49f0-b44b-3c695b3b6812-m0.avro b/warehouse/test_ns.db/target/metadata/1d1fbc5e-5056-49f0-b44b-3c695b3b6812-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..9fedf89711b3dae97fdaa410061d7d88bbce3e77 GIT binary patch literal 4404 zcmb`KPj4GV6u@oQigG{!2?UoOMtkT1?0Ekqj%`jwG@=rO(x#`#TFvf`<89Wv%j|3- zxAK)EAie@004{ukB5_4391sUi94hz@yf@=r@2*{wxQ>!&Jf3;)&F}r0H=jFC>U(b_ z?wC#J%UjPhF^!ov&=SE@S7s_w87ak&G)o{(b7UX!4(nr7`I`rmF)?l@EksI z_GRjG28%%ko3+$Nv$D~nf-SbrKds(sRklhKbFE;hze?}0rKwZ3(Qds3=Ce@va30>4 zhk|)L*Kl?_rd;^KkHU5mGq-s*)XFokvZ3D|MSMa<`;zelmNv{iHwp!a+y&$5yY!Mr z`%2;0A7&T{z;FSS)*?Ab0wfhe0+gvpll)t0DbZoE@&eKPP-wFjDeMSooQxwO!Ow-N zZN_5TnHHu&fMTUfhA{Bhh^B$i1_Zwxa09r*#XleMxBHkFOU zZB$S()?5g@t_$W)tOzo!f^E_Z$S`t&pLPs-i3$dSjvNs5eTzig#eW212Y^=mCTYY} zjH`r3@LDRY>ZI|CHH&XggEEs<~|F#W+$0GC$^N zBxpcT20VipGnFK6N6{^Nj$?{7Yq%uRZE!p{to-lf|A-X<@&V82#r}FwC z+Jwg1YzXt^!i5tm3qPYVx=7I>zDGm^zX(*ag!u6MLN7=tQN>kr9N|`$?2uwFfJ*XS<@*p(y$O%0uv&C!0UI*AH6uQ?3Y#IpI+#IlJ zYyjBY9$@4}Brk|ztWYI$LK?1xX&r4dTCE#f15C|bHRE5ajB^0 zRa;evGTtD%g5K2u?$81P$znk=54VZd>|&fAy_ig_rq*jzQ}chS=}L&!7R#w*wF)9!s`i8lij7VlB=d&eDl~3+#nhCoLkQAW zU5)obmrrBaHiCGPi6>4FIb|0nao`I(8jTVrmJ-1#^m4iSMF){L7c5{Ccm`!gV`r81 z8>+QhdyhXt69jdj3Cip!1w1?;D6E*mgJ;>oYo=<&!tTv1JjNF=bQlRqvGasJ!()Q+ zi61h;qbrhGi2YkW_CTkAX96^L$$kZT#DRJKdM;O=gH^Yre1NR;`2CNeSB*JK@P!N4 zbOI{iDFP34e5gRD>?hI`)ly|0ABUz}`X-y0(9j>TMA#sPPqo=Q@=@zX9&>l`zN-ED z^v&H5zJKq}Z+?4TzjNo09~!^hYBYZT?!}9*e){|0_iMG2*4u_>j2!onwGZ{fZu_7=(%a6# zfz!6!ZvW7+oNmuB_veqTy$5$6e)0I;Y4hdVjh)6{_2!TDop0+k7&n{EohA-y&Du__ n*1+Lgbublwn!C?GsnvEGcjatDO~UNYa`q!w-q?l7>aqU=jW0>A literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/203f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro b/warehouse/test_ns.db/target/metadata/203f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..16c482ca1b5fb48d832e71fa7826e546d53818fc GIT binary patch literal 4405 zcmb`Ky^rHW6u^^Q6m5Z4NFb^c8o72h{@BeI)gf-hNw6Gudo-)a8rzeNS;scx@vg!t z5;XRLpnI3wmh;|`4J`I<0}&f$x* z&$56sm<%%5TvrRN%0izCwp_aS+Pu`RER`k}TEWs_lirc8sa>_vZbJw2StJ734{ys& z!8q<~G{2irE&>t6Q9DhT*E}0(9df${V$ddcGh zrSPkFa*PCEcmPV%Ndb}oNrjLAWh%0?_*Gg;44ACEK(rtd+FU0qD1!6*u9}^j6tQ;3ozA|b}!%AdeUdwDLG~8-8MS861 zy0!-}DDyPnreWcBa>5Vud?e^-BC;f8y4p4+E=`$F0Ew6|WUVrnVCI&QsMK@3ID;et z;d#=74^3kwtW}aMwV%i|An}+e2`LGbGGts+OTf}pp=$O@mS55^lNp*X$@jnN39~;Rq3gr=Jn(3EDvuwc zO=+UdM=)M4TsWYz@I#uQixeFa_(a6;k3c0$hz~zVFUszc2C0BpM>zo53qyB+asVhT zqX2Ysl!Ke2w2WP&l)0lrV0vNZL*0;v2ceNqPUuOQEgmb*Ho)dep?h_}mWhC^+XJ@D zTL89p2N-z~$qQl_D^$sxh(=ps+Pz&ytKA2f_Tcs~?S9GnYbCxt*d$X z)m9avj5mz0pm%kFJG6j6ag|rLWJM&aGQ=!N zUJh}m2a|=>)P99(YW+_&-3Za%VL6qoHbI0#)tNFuvC%1lWYN&uD~(%GF*RlD2!ixw zN8|m-v9rqi z4b@t0J;xuT34*%N1m$*=0v;|96lToe!n1DSHB+@>VfSVh9^(xdI*gQL*m**q;WNSb zG>91C@fFD}#Qv>#_d%zCYXUTP=|Kg0%z=4vdoEX>!%e58ynt-;_=ESLS4}ue@rDb> zbP6iqDgqaDyr@8@9Hi0|)l%ghABUz}`X(Qk(kK|SR5&1p&$RiQ@>1)?KJ)hQysG_l z_QmsW|M~6W*(YzeCeQTm8_(}F8h?EK<2=$Ew`;WzJ)w)f)Kv jI+}`q&AngVuhm+Odvdg)24VD9Ir=V4Z|uQfb>II18yZX! literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/24011efa-994c-4030-8da7-53357c467c6f-m0.avro b/warehouse/test_ns.db/target/metadata/24011efa-994c-4030-8da7-53357c467c6f-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..699ddd83aec3f8231583382acb3310e3fb2ff031 GIT binary patch literal 4405 zcmb`KOK&4Z5P)sRiXwp`Bp#;~Y7JLAo`(}ZxUjGrDH5AqcC+FTS)=w$JD$zF=;=vh zR{jesegh{YF8l&69FVy16F^)LDIki&jXdVNiPk@Vu6eH3HyT<<1Dp|YmvI}$8rd2@3NPS` zvoBJQGnfoA*tDS*nhOhED%gDK>}&N>YhkH0G1m%~daLvf8k*Ww6YbU;U_J|l2m9eo zxhWXOeGR5}V#~tY1Fbv)Gi&;tQN#l(npcb`FtujxJ5eY=u36N9>2~egYP4Zu*r9_9x$_qsELZM9?q_85SaWamC1V0n1 zmKpP9=USNhK8lqt8NiFnMl|(>)+hK=StR(2g$}dBG#E0zV2!n@*pcTmJ6S8cy{T*@ zZli()W6in1o4R1;#05cyRj^HZ0U1UP@Y9Y#FHylj(2;$DzHg9-JNO_FI{}KhmNXP11M^yDORiy~-Q?-9 zr0d2Wz@W_1fE&7r+sOz&%JPw*qlrjkpEcCBDH+m)xdf1iF+J^0Yj3t_F2WUl>GrU8jYL`g`9r<5V%vIsrKc15X%N~tV_A9^%%0VXJn83=PdTR(+`1=N0JRS4NLEO$R+hXcM1UHML%&nwtMpO;bHRKTz%?i{8au13 z-%zd9+H?E~njq*9nxM>%QozFng2IdmTzHl(ykV*?Sa@_h3y<*z3>`*7QtUjT&v2Pw zJn%wBcyvuN3$cI8-(Aot;FtMTzde_$PkYrVDK8-FJbrQydexY-1aG)- zOedfMt|D+j$BPPd%3dN(Q7u*0@o{LnrEjuXqF} orG~F>?SQHHSKoX8q*B?feIiHeY7j=>cz~n#V0vv21{e4JA3p0#PXGV_ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/284b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro b/warehouse/test_ns.db/target/metadata/284b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5f213b8227d2019635f2c0d52d7f8e89862e508a GIT binary patch literal 4404 zcmb`Ky^kA36u@oAI$eQINT7%!5~G#q?DKv&{-R1kP6WXbl1p{6R^#3Ad2{RCWp?&X zCUTnw3DNN{fM^i(GzcmG0WB>N4Gjea;=LK~dUx%ZJIB`PG#<~q_vZIL=FO+0r`3Zu zVrRmp^yQ6bnwUjQ8)&iMi6gXzHujkB#@gWYndZ6Lz-VXzo#Kj+yNuf~*GTvHVQ>cD zIQu;DID^F?gUuUiqgmSMQo)v67vI)zwMtv1iJ4Zg)LW-_*wECenrOG)0P|TOJU9<; z%0t0Co@+S26;Uoc;e|mnj+j$F9cslHSXt9=jYB@AqIto13`=X~ffEJ-MDBy}^d`OF z;h|Fa)%z(%0x%o^r8P(fk^o7CkN{;Wk~sTST1s?Sth_)pFA&ZEO3||B-0V&C2Op0#g09n+3`l%?QLZv zaT^tsj5U`6uj+z@6H9^&D`%VZ0x}F8;HMpdUZR45pd$waecvDGR4iz+1b*!zOnUSN-Af|YaG(DQMm3S@T7 zlTc8fpbUaCP>qsNNKYs9lWAb%idE@7FnduevZP-|KINRw@aUdkQ>b-NN7BNwtV^jA z&JCk$Ul>L&V}(0%#p;|%S*ZjpO(m*Ew_y1N^%I$)>6Y~Tc~2O<`4C<2hi9Hc{S$fp z5N%2$Z9atgV&TFGm4%!a*nAEl}98l}vg1_Y+#Coa?td3g{Txa61~7un*qVs8R$}$Fs=UfFs)v}`YR>A)!!vd>|C%OKwK)S zS=Ck*qKMZIFQIoG0e5Htfn>fQnYVX|*6d)Mb~7c{E(B(0GupMcj@jKETgi$@Rz-+O z6ulbaPA?`CtEu%G)zti-YPuGpwZn2MS*?Qzm#RHwf?}hS1<9hJw{neJRxveY>kxwU zRafKvz~Qq-D`l4l4D^UZqmQ l;hR-36+iX;Uq7r=_G)+KY)wtV>JNO?saw&oXTsU#!h!7XV4G{0m#E$J`Lz_($MfPOoy*I!2F>gK|JlooTCG|#Z zOn=*cZiq?3jGmDSo_WG(7{h>terohCo*RL0^sI&v(J{`5xzD%@V~u=G7)O`z#@T0C zz!^*i8Eo263+>uMp9(f#I(u8b)Tu3%CKg)3(qNh1e#20^YNFj{1I%ZU2w*?FDK`b< zxUc^7K|;9*L=Z>KG-2M(Mc=57z)anIFpT+_ism)rDNNPveJ_p#h};9?=^ON##|KK` zS8wMS3Bd3Gl+hpsNCG4kLIRYj$kO6pX(=&bvho5kf=C$C1}UwGXp)X%A;Hgts%6%E z*@Y2hVTfX-OZxEOvmwnwVe|<8RTT;TVv)z(C>swLuUX@)D|Q%!%uQFyK3rEe5_eHS z%~*Rb@UAYHIk6_la!R&IFCfF%1AfK{=p`x`2s*My(Dw}za}R$A#0~(h`AyPDs2J51 znPqq9v0Ui-F!m@0CVBe!l-vYjL{6R%8D*>*7gD}5YC%IOGBB@YwiFuH+D(xj3%c&? z0SwAK4Y+06xSgEvqdXr8I+}1WFk)uBwpK)8KRF29Z0M2v*N!%Phx{Dv-rC&tpMD zf-(roKs8E6B|W`3%*K(6GZv+H!0cJAD3X32`IK`y!L0{^jiJ^-9mxyJye{QVxU#Ia zdu>^rf)%bP6{{;IW#tmEG}WkD?TY2sG|Xg%=1cPZmpx&1rhRmM7+(e+4bSEALyR#^ zjAHEE@_Yoh((lLkUcYW11P(I(l!e~ z_ea^iKT6x&G)kE}4G2sx%zUUD^6(%u^2r%JtFpyo#a#v1Diyky2W(pi*j^v7ZLI;= z-W*`$MI<2qr@Kj**tuXmfVfmti>j?E zL=|rs-$3s=0PfHN0?BegvX3^2);`8KZ5K-JT?p*s)o7QVI(B<=Y$YoqSydrsN%CTd z8$Fn8tftOOR8#wZs_9aQ&IZe=WVH+;9IEb^35tzQ5hSyQ-YGS1Ma49ft$hg67affc zBacrK**1cBl8YyUFdkH0m?mK$+;})lnOH~!r_{?8>gOFq(Oj^Qjo})U8;zY+-fyVZ zYUMfp1Wgch08LPCMT|g4l#~~cRUSWmA9~e&@+nc|# zH$VO9yKnw{=lehY{oq2s-PZMAzqtM7=O6z5r>SY$?_0RzUaNJ`x}ltnVnEh{wph4P zdf*RQg7QlyS{Usu(=tu`v5F^Cy_xW7noYaYu}zO1H9JR#N6kae_L|f;t)_4LZPTMi z$K9cKFuQE+KYI7^Cr=-q>$k7zyZVn?J6~_@ez~Q=v%UjA_@M1*yP75+U)=^%@w2n{ W)~TlL>hIx%C8L_I@4>YCw*LdVA5Mw@ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/2b541d14-821b-4439-b27f-79328feb2cb7-m0.avro b/warehouse/test_ns.db/target/metadata/2b541d14-821b-4439-b27f-79328feb2cb7-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5c5446666a1a73465fd55774a30f5143b8342b11 GIT binary patch literal 4404 zcmb`Ky>BB$6u@nt6{SGYNg%2#MqAtQemJomszY4FNf3^^q>8N7?Cv;Tvff>0XA_x| zB}yv9A3#S(bu?6zfcO(a1rpww_&W6tqG#=0={wf zdFpcplR*ZXwbVkhve2V~Etbx|tzK$XmP!+ItzfCYO7F0xsa>_vZoLKOvrzc3AKsRm zf^po}aP}ysT=>F|!gdlfw|PF)$|Eqdp+6c$d_qP0itz-dHq1RY3I&MV1>@IoA~{F`Bo#sel&MIQ{8woy(P6Uk0@3_XXtNe6tO#kGj3Xhz&xNXG z#$wsI7N$XfVx>!l@Zhl#O#`7F5&Wqv68yzNm)T)DaTu>yV{IyS-s2iDF!Avd;XMM`(jLvUl18(tQ;3ozA|b_Lm@ISuVuF68aCQZo*qlO z?(6{!$}A1Ip_{m!jPSE89|<~|h%^pZOKqDHhbGJ;fJBTLvR0W(FmuaDRO;DoltL1L z@GR-UhlXAVYn3Dm?I$t~NHii!LPC6{3>lYINa~6I1+)FocBX<=bJ@^~aij`lzRlA} z(14%}f-+Ezl2J-eHww~8Xyc4!>3uMJUMupXUqn9ToKA7;zF-rmbx=pL!m_AKnG-Gz zqi0_kMn7kTD+Rl)D3xf5E^>qgr1by;;~|{18fuu-J1h84Fqg%4%jp{ z0Bmj#F!Caj7sN1DsFFD$4cEf7dfSXvs}C@(!R9cne#!bfCB8M-CQR&HupU5MDyn(a zRu!U*H;AsGcXfa}w17aeSdh$vZK5>~F;08Al6w~d^Kd=dm8Xu`+a6oVibz&vh-nLk0_xrw{JIg8h_TCuj)JB)NAnEY&LhA_)u%sc51Z- lK0d62srYK{{`_IBw$pelM;mGoMt_l`@5A)QE(}(;{U3J8Pm2Hm literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/2c17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro b/warehouse/test_ns.db/target/metadata/2c17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..af051536c2b53dfa7c9769d2179937ecfa9e9849 GIT binary patch literal 4405 zcmb`K&5I*N6u^^A7zUIgpNd zlEaEOK?M=dUOkBaffqsWZ}8y3)8fVd!1t=so$gLH&SVop)2URw_v-gP>eZ*CXZ8Iz z6KBE#`f}&FCZ;jd23jI`>Iki+jXmbOi8i=+u6eFDFj`tj1Dp|YmvI}$TG<*u3ZKF+ z&OS>$&R{agV6&E5XjT@wRItU;`LESWt;$kqVy+b|^;YQ}wluY?HrlPXzpfS68v1K zT4pSkU1(wI`zThrWC$-V8`IPm+JN9+Ws%@77COuh(_qAS#Tsii4{SHRj^HZ0U1UP@Y7B}FHylj(2)azzHgC;JNO_FI{>ueH%TL= zVp3J47u}u3a<1!>$e|dRAJB8FetM$;D&DEb~3^bvV0`yXd=?sXDzjDN=7tcE&(KB!jQGfT!NWfMxs*BcA^xL z2!v-z4?Z;XLRhOLS!h3#X+WYeQ4$j3DP_pGtU^*xyw92Kh4yGFST&aoy%Yh$qLJ&E@e)* zG>oo&Wf;Aj6|N{0t4k(jWfHJ7Rj3->lI2&_Pi2N?OS1hJJz?}_Lv+0#J@p*wpUdNi zXaSA2*$~Fdg$oB%7T%{Zx=7I>o=ZdoUj!;yLVUPha#?nlG)M)+GRi*4o*TLalzl*H z>N%j>qwL=vrKxWlrOcfc1g7JsF4PTqcn})80l~k{84%0 z)m9avjMtB@p?4htcW42DWU(NbN83be9%Gz#b0xPf1m^L2v@1^?v%5XEk`$-JSr3XNM{F*RlD5Q6ko zN8`QF;nP^QjUb+6;>pO5Mr9W!vF`~x8jlkumJ-1#^m4iSMF){L7tCh?T!S*Bv9rqh z4b@t$J;xuT34)HG3Cip!1w33JD9o6`g=g8q8>VW-!sFXnc!D=z=r9tJV&@5chRX!w zffq8uqid2`i2Yms?t)GM*92(pl7kBLhy(Nd_FS$$hpSFWc>!7H@zcA|tHzuqc*BKb zIsp}M6@d#nUR0n{_7Z7|YN@i0k3-WfeUl9YH1x(S5jKe7Q*HK+ywp08%bYztuWIl8 z^zR2hhhOvuFTVQm%ZJ)GjX!o8jo<$K;n(k9eE0Y7^;)g=PaU^B=yVP`*OaqK1k5_n z7YjQ~4%|^kQ2vyO4u*Tj&~*bIhTbuZ`9p_K2OoM{Z<~(Mb*XXGW(GTMANCHNcCR~j z+wPHb)IW4sujlj*=C`f=2Om9p_~hPs^X1!(-Ns+_<}dZ#Z|gO9Z#J8|O?;^}YrC~t n17F|T0aNkQ+BuN_F! literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro b/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..4f2f30176b7c9b4dfc8f517b3ffa097caf7e1a74 GIT binary patch literal 4404 zcmb`K&2QsG6u@0?RrP=>BoL<+8u`E}Y5b8kADlqD6)QnmcDoW%623+>uMp9;2EI{&tMsZ(1jO)Rv6rNJt_gNC7Y)kM3^2AIzx5x{0YBpe^b!>e1RdEY==%nVxrYw|u>(MBev>p3 zD#mq1X4&0&EEl>yjXjEiNuE4qP05g^%qM_Ej2W_4nM*Kpt4LJpxn7(> z5`pkM>A{DVSqf{FBn$1QG7U&PB1%F^0;LQYS5-*rY4A03gUB6D1*_+>WtQVe706^CkKI%bu{hvjMt3j4uL@hG+8l zA;yFz#%uuN)xw1XDhofO3A#wpA%Ras41WkzvV{2XgY>fME@_Yoh-H*LkUcka3n+Vl z(l!e~w@2B#Jxbf$HcFX04G2sx%zUUD^6(%u^2sSZt+K^q#a##3Diyjn2W(pi*xnql zZEXP9-X37&MI0cVLIK4^*2gj?EL=|rsUqkOY1n$rR0?BegvX8cj);`8K?G#FGT?p*s^=Ma~I(BD!Y$YoqSydrs zN%DG#TRoU;tftNzR8#wZs_9CI&KAq5WVH$+9IEbw35tzQ5hU}5-YGS1Ma49ftpfK7eE(Oj^QP2d`o8;zY+ z-fyVZYVA4x7)=m#2u)CKMeF6zO3Dk!I*&iN2fb>-S&BDY zIHprj0ap>YpyNdaI^`ghrl^)G@Ax=0-O@Mtz=TG@h^4{>F??#w-j$bHFZP+YkLQ*4 zkNf+pKjWuAeDLjyFYmqo)8G2bJG%be_y4~5<&Wn-pJjZ2M<4b^u?3=XZp)`^gaEzo!uXI_P*KC;9cK^2fk>#+McG#*SB>r b6+gTCzkZ@=d-}&XVa2GX>-#XRzU}`2nbS?T literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro b/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..eedaf2aaab787e2a0272b90ae239c96618ea7138 GIT binary patch literal 4406 zcmb`K&2Jk;6u|AR73F{;q#`7w9!7gacDx@>>=1|SgBtTLjBtV&pEG>SOmJ$OdD=!e;kAyyNlhTTaCh0U568u7_ zT4pYnUFcC31SnRzWCSlBo6sx}`jFsHRgvH?7P-ucvT)3J%^G`Ku@gUFPP$QcZ(G?& z+(893W38pYo4R1(#F`+}F4-o%fDB_7`01yhm#APM=*S^K-?vH3UHnHNb^vJ2Z<0nr z#k8)-D7!n4}KhRy33%1M^yDOQB(_-4yAu zqU**Uz@W_2fSZPe+sO$(%JY$+qlw6pfVI`ODH+q0c?6J%DMQvOa|vc{6^Tkc$Bi>c zA`qS@J^0WxN@1;%WU2j3rU8j3L`g`AuaqIx|BQN z(lq6tS*_9l}o_VRHJJ4E0$l;Ad?xIFUj{`_Jlc@kI?l&{LFW0a4wG@ zqK7om=OY-e7A_o6S@;D_&_#+4@jW79_(PzQCB%p4rlwzdas znOgw1b_W=F5y=Z;7%No8oQOsnVcPv&MyovlnD)u`FzrFb`Wq#_eX>iK*tuXmfVfmt zi>j?EL=|rkUqkOY2JX-T0?BegvW|9%);h*G?H5XJT?nk>&1l!2I#z#oY$YoqSydrs zN%CfhJ3W{ztfux`R8#AJs_9yY_72ObWVH?=9I8&p1jRuv9o8hR^i*d-782#vXI`@w{sM zZka#mKWlft|Da*L`ndN}dwHj&y?XK6zrXzb$9ErU@HGBu;+}`y?qTa6~J_Kfs0eW@5*7vZ2kUs-nqc=Djz+_c3oi8Gc^fe=Byz zY(ih|Jk!K9Vp?B|1y3BIHMEh(d^gtmm(MiM)%r$53+Mz_gxqD^hPg(%#}9)m_{P~6 ziN_f%1{rMDP#ewCMwbe<*gF5VdaG61DoxC^f~DRny@Q6PPSr%a^#+*F0^z}VcvBt< z=J8yE*@K93;R!DcnsLOO`sF|?&cMo={$LdH2^Gy7#$#AoGxwb^5Fm07jHmC>8y+4g zh2MOTVk7{=0Z>|lWFQHUR0s)BrXq>6U!|o)hsDYZMDqfn%^D=PBcM?{4uu3i7pk@y zi*1)$koZ1|l`a{;z-1$v_(JOw{HZ7s{KW!?*+DWHGG4OA+Enbw^O+s5m3_FWY$R@@ zf|9Z3Lf~CpFn3}}kYVL)lU_iEp#%K16VOXkFc5TPpP=s>B;*c$5QrTBTJoEu5m7NN zE7J4sPGdRK^>OG>3`}zI;VkQG!3|+n|Pd*@Z&Te2|AjHB=T899h;INjhRaTi5N3vtumKj<`$8t)U%y1fg}Rq zY0`ra4LujuDoGaF&tw{qa72`Zn0QJVGA^o+)MM{UW_y7>oC;RXWkb)$kt&ecG0#Im zeS$Iw%0M+rMj<_&&`&0TjVqR=cfss=t;mvo5&4vJI>n=Vf=!^-K^;j8%c3r&PPjIV zj(uYo-Ha9P$Q7$=CS|1(ur!sZ8l8gWH`GsLhNfH6^XENbbY}x}y&qnA4)xFF^+U7? zjkMVS=8J_3CsYlAKpUmIt1>}0s_f=K{AiFiPmgmoOUuL_bvoxdp+8fw~pD_9$U$ZNLEFNNff;r z;#Myv6RWB98r9VNpK7`iqP4|xDp{?92$!loVS-|#lLg7Vp|^64TUIeOW$OTf^i@~m zap3T2B-=(1Pg3z@=!e6i3**T5gdL7XF%wIPVC8zbO#PyR$eIi0vk5$dQlqi6O8X7f zTCKgupP~tZ4xtH3?I;91JRm5nn8Jf+*}^-fYRSU({VY7e7cg`fF-frVgg(P%g7JwL zFv7!Il3IxUTQ+tlPR-eOFx1@Z4tn>KkL+Di_&SHGw!ZjU( z3V4dZ105eK&?$SdG)1*kX~)N*>6X4pCnhxTMl2RKh~ZOh_O5)?I-$#)J-n|fUrm4g z>xZwOfB)i*i_end=6AJUc51cXe*fd2pI`j@{HJQAQu(`zNA9;;2d!Jm**FAdE$EAd z9mEIjuq7zJVxooN-qH=-XzB3Tf`R&&PwBee)SISr=(H_Ho3vvcHV;SLc5~Pd6luk2PTH5|UZ j1E%6%eeeC#N@ch9k({loNtk`}5zan@<+VMSET8*7Ni9nQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/2cf0d335-5975-450e-b513-14e7c173188a-m0.avro b/warehouse/test_ns.db/target/metadata/2cf0d335-5975-450e-b513-14e7c173188a-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..a790e6acb8e4ce9cd073e4f6bf3919c3df2c642e GIT binary patch literal 4405 zcmb`K&2QsG6u^@-s(L^b5{T0tM!u3X9=mBi;IfFVSP9C0w5KYvCibN9*0GH}ZWUJf z2M|Jggnt5h;xAx1aO230bH#xRSHycWv12>g&}I`wkv*At@6GRh%$qNVFRJ_R#P*m^ z*zL|sO-w_s^|e?;i7m8-HgdV=#9IISrRF+XpEfj~O>jmKIXtpptdXwq0{;TuBK}q4 zMjR%C3_fe9g+^(i!vtR}oxiPKYL=Et6Em$~sk=(=prNTCo_)ZsqToO& z{O+R^BLNsTfYKTy14)3SLP&rz6G@!?D=j5DOjceXn(GT~)*!hRJ`3YLM zmYr*U;&~`mx?}(k4j-|^6I!3(UqzANFYepi@{`GsMd)k1m4vJb0?MrQ8Qz$9nS9+PWVjLGqHBBP8K<3h?;MlET`MF!@z%$7{UM!U(lJ$Aq5mg`%?so>>Yrg}b(RDsO4c^U}j z5tKnt2C7jq3h8MFUNZ45oUtsu3ue!2MV9o7$Y)W+rnq%i@Cnp9s3U1%S=6P}373?1 ztSd^p87o|oD^{0W%1R|*X(~~ror2|8%u8g3rc2WO=RHBYvjMu^3ocxnd8hLDA=-q6 z+H3&h#lnRHDht10A-YJ>A+AG20ABP&h1_Y+cM1SH8tO&ni~I8O;1cf9 z+tD%?0=P1g=4;(b!p~{f26- z)}G_f(FDPU&;+G+6apSD5DaEa;li_Q;T==8WZ}{MEIh^=FmxC(NwD*TKEvUHM-$iQ zBnqxcY9aP-*|P&W1zZ!Lxr+}<(1Qq=XSe5K^*LO1O3Dk!I*&j86nfP#;xXQE;h2s= z1zbhof{qsz=#<@9nxa~&wBw7Q>6X4p2PVvSM?4l5h>51!?0tEuwF8ISdw5<|KK}4* z=ZCXjpWgiO_wV+%|K8Mo+o{#Qzy0R*&p-b3>Yr+*Qu(WjTkf}72d!%s@o@mmTF@5@ z%a0G7VN0;+f{PZ0dyDE+Z&8~4z$<)c3xD;d-Zboy?wDq~+3t1P&BM0No5MCWoAi)( zY}zqtx62OZx2^pr51&0fdvsdAeXq7#`?FfVsqVh2R^Yi_ukY6Jp;E8xRw^}od>2i{ fPkrx~&nlJO+Cw>7Q-d)2T8@4K(`$P$Sl;)4^^!OOzn-{b zHlZ(eo@!zmGi{(Hf~T&~TH45GftP55^QW5cX#=CBg>-@|BJMG6!(1!d6GY)-_{Q01 zsm~cK1{rMDQX9?6Mvn@%*gF5VdaG60DoxC_f~Ec{y~CEKPSr-c^%j`VLgB-Ccv~I{ z=J8y^+3lEe;R``S1}1s*;2yd1#h9EtBr?iaIWDApWz>>}LS$fG%WTOtY;>ADJ(hG` z+XEPsSsHLdH}N`iSehzSjc&>EOB$pyL$fW}`HP+~db1(AK8POsE)CA)^+U7? zjkVbj=F5c(CsY=GL}PT3qCsALK8;rYo$*_J$cso`5W`rZO6G(#Tnp3cZZle~9>BEvo5QqvCF`%1_*Q?LFtKyNdH`{$sOD8$ zRfsa)Ai9Fy)dB9%0s_fmK{AiFiPk*EIPK<2Zd?e=c#?@HP7pa|7bbDw3p*N(5+;@s!7B7}x%x#1kvA7CU=w%-WkzFXmGv8{ zwOV_RKSUD*b)X5#>?j31JRm5nn8Jf+*}`k4YQ@6in^|~*FJR~}5|U!)34Mmg1mhDw zWQ0doB(o6vw|wk@P65vZXzr4O3iOBr^ZfN(u0DsWZb|t7S?BS4??JB`bC%!>7q009 zRKQaN9_aW`flk>^q$#SU$~ry{O}F$-HZh^0KVpfnK@6X2vp40V){Q*o?%{n^`|0`H zzdifl)7O6Zcjr(4)^}et{@7_WzWnF!AAkPl`(MAR*J`!D>UiWqr*qJ`qMVH*VAg@Y zSlD55;5i*Z`C}$J815azF!YYD8wPynddGlK{!MS|ZA%{+N29LUW_sUkAJTre-R~J@ zTW8F4j-0M@)bAe5Ut9b4?>zYA(cQD=i(8G|#`Ajfm-_Cv^%{(u&E{?s2eoExw^nQ5 k@C`H-|C)Qx-mlem8+YVvLruc$?{fBCSl-x!$?CcP15Thz0RR91 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/32e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro b/warehouse/test_ns.db/target/metadata/32e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..23abcc87a41fb10c46ba8e8136da3c982737cf9f GIT binary patch literal 4405 zcmb`K&2QsG6u=#CRrP=>BoGo(K_j1&#vj?{gVRd1VkIccZueA0*4Uo3-a57!k6VQ$ zSB~&MaN@v!05=Y-I3Om8HzzIUgF;H!xE-4@LiY+9V4rVwz@`iICuDLe(;B zzU=q%_`uIN0lh>813^a)2>QNB67J)JK6f$hfLPQqRIKm>b5fHxaC!%a*wqN2)-U+dNAI zjR?vhC)eP3O0sX2X&+W(1S(lVd<0>3Rdts%NCm_)%09@R8M+0OeL!iO zC7`>b?B5-wZEhQ-%$+6#rXS@2)D3xf5E=*Ml%7`E;<4hc18gl6y4MG6TL{?R9I$O| z0NCChVB|$4FNk5RP!)4x8n1=vbhjC;P7h!@{mo%Iy^8g>N_?lkO_pXT?BB|906GO+6QH@v4r|a84$RBjbG7<(R-Kaa0v>HtO_Role(l^-Sip z9BO)f-!t#~j(0e_ZS6mL@c6T*$7lMBxAa~8x5mzQjoq&r8jSTFc;Gl|N--BuOeg6l)#7hbQ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/330bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro b/warehouse/test_ns.db/target/metadata/330bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..c634e2e572831ef129e9b8f4c209fb86e489fc77 GIT binary patch literal 4407 zcmb`K&2QsG6u^^gRP}%=BoN}TD~)_k8h^C;;{WfE3}q2_F3R1+VJeT=6l-EXlWsx;*5xUjN35Q%GLx?cn;q< zdzSi~!DNuZ<}J0*tSt1XV9TY8Z|j#@m8H_eTq{`WuhTnfX=+z(v|De1`79JZ?1#7I zreGZRHJaazDHp!*qp+RC%x#{HwDJhdZ0L8#5uZ}gzGOUssSR__jY0t;cfol24!z{j zzEb$*dl^OoFkAqowMY(<07-?A0A(uDB>z=fN_3d4yg)QR6xzH+3M)byCzD7>@C%`8 znXz1UriEz`pjhdW5xjV8Ow&MULxMk*MS{Or=rTJ@rw-#4YpmOf9s2>ZlZ~2+-kYVHkKkW$g5)}*t9XTZE`xc3~iw^>^13)W&lQd!~ zCRIgx(cM`r=ejpOahjs3RR<5viy<;sm#!9Nw)u@Cyf4lgsu;wbKj-GsXTs& zHl?vPAHjIJaN&T;!jEZ;E>d)e?-3Ef9|DyuAwE1mxhT6!8l(bZ73BbAFAUuR$^oD> z^&HU6Q4Vg7($u$&Qszzz0@Dpr59)?IJO~Xva!ilQZ1GsJHvu*Zh3@qMn+5_lZx7fs zZUNZb9$@4}Brk|ztWYI$LK<#_Y4x@ltyUjkT7%oewE89Mua)@LV4E|&huawRt|1ZH$)cgR3XNM{F*RlD2!ixg zN8^Lg<+E6}jUb+6;)xSPPT7S?9QeYH#^Z#El|--#y^z~*@R(qH z>W7T*=!#?(V*i%Ed!SRmH36EtWWNGE;=nw=J(sJ`!MamYUO+Z^{NV@CtHzuqc*BKb zIsp}M6@d#nUR0n{_7iD}YN@i0k3-WfeUlALY3PqxB5V-DXWIO2d8u_HkGZ>eUe)gX zeedLpXTz^Q|M%UW#c%)A8^7FXHeUSs;+x;U|L)sg>katS{;K1qhn>!T=ZbPRiGW%M zI%8pn$-d`w1m)*UbTHsMx^5U9_}Af~!vmj&4nz29>+QaCXpDRMLA&pcd+h_y>bCob zp4%Qc)H*PouG>9y_ZRoAy_5ToK7I1wwE6O_#!lmpdh>_+&R6vsyf>T8ohH82nzfx; lt%0v^)@$n1-2L&xT5YFsUye5N(Vyh#`!Kz+3xn02{|8!1OeX*U literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/335d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro b/warehouse/test_ns.db/target/metadata/335d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..cf7ea9f63dc81eb0130ffa136d83899c7107e73c GIT binary patch literal 4407 zcmb`Ky>Ht_6u>1}Fgz4SffgN#3|FEfW%0wdJ_-a#&=?KSx@qD}hCrOilf{}Mnd8xh z8t7jrI(2TlX35k&LA&NJ=+HUnpU|Q2-H8-QDXOiA5CrOU_ujkT`?z=C4!^JOe~`Fi zHlc5Ko@-(nGp(;Bf~T&~bZz9bz)Q6L`E$+pw7#ipA)VlihJq$Y3*FEwm~NJu28@>HOE~rFLbhG%?o-minvo4s=cJs)cqNI+)Kw;lqA-OKu9r zabJVkotSdr3qJ~5NzB~l`9Ld=z|4kmXB6=X6|F1A6PVht_T4BHAaW0kr=QR(9vvu! zKYo#6Bmlz&P?}D1kOW97gajy4ktX@S(o$l;WaR~-`JvEeIw`COX`GBBA;Hgus%7S4 z*|`>`L4abVO9t@bu@OxJq4f#=RTc^UVxh~NFr5q;uUKPmDt6=t%t_YDKHO9`5_eER z#aL@0@TM-9JFz0jvN zjH0`OirE<8D*>-7gD}5YDq&OGBB@Yw&WT%+D)DwOS*3C z0SwA44Y+AoxSfpfqbwf@I+}A{DlQ3z|5Bn$1QG7U&HB1%F+e5DK-msLpWiT?w0{LmRr1*_(=X%yo~707&>XOW-* zK^X*Ppc*Bkl%8%Bq?6FW8OzeUVD`LLP%09Rkx0QV;5eJUj>uJ#tD<%WUyjan=Dg3x)3e0b3>lwl)WBnHvDM zwg(t_5y=Z;7%NoCoREfVVcMN-MyuTgn09Y-n0B{h{f!de?rjq$b}m>CATAZvylSfo zQN|lY*U-BTfjhK-K(bhntfOtBwT>}PJGqiu7Xs^eJ=&G0j@8*7Tgi$@R%M839KRdl zRu3i%tEv4S)ztc*YPu4ly~T1WS*?NyhpIDSf?}hS2g$slw+oG1UNJRg>i~lET}R`C z(B;!uwv8a3Wa7y%h=yesCUM{kCmM|sCYBPxF7$G_`b7tkHy12m6SxLtMq_7{^&6_S zT6>N^K@$WWLKBqPQ3`mtKv0-5g$vKJg*QyqiiO9wv+x9Oz|dhNB*o4X`V5Z=#wUKr z2#>BwW+C=(`MU=?1zZ!Lxl0Zz&?64a^V@T|`W&u0CFKQVoyQ-33B78}S%NoQIHnU& z0ap>YpyNdaI%PkRrl^)G>-ab{-O@MNz=VeWh$X@SF?_1cK9-kSH}aUfhv!x8vz_1Q zr=S1+vh(WM#jpC^*Nrzj&BkA^-n@SC^NW9fsW;%M{Zq$H_uK7*_BG{f909d9bjHF7 zlLK$q7L;Ew(Z+yp8-`)F4HLdhc;uTJf^VZ`w2nOQ&_3?CEvxGtwGLfowJ7V+*3hLk zWnRzfnB9ZGy~p1@eQ?%%`%z=J@prxXvcCIMy$0{iW^=cRFSTZEw^nQ5>xcE4 edYXHGd{wLMHtxyMMn3wd9K8?I8+$NV-T8mwX-R(o literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/3624e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro b/warehouse/test_ns.db/target/metadata/3624e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..a0a2b2da5e2688d986e3b07075d341b4cad6ed8d GIT binary patch literal 4404 zcmb`K&2QsG6u=#CRrP=>BoL=X8u^?w{^&LzoK|8hR$@!p?VhU08r$Q>)Uk~{ZWUHJ zAt7<$%8DDDK>P!U6WUXc`~zH(K%DpscyA_lY$qGqY^o}nOlIDD^Lroj<`d_$*8W?W zJ7yF5_q`VypC(KjY8g*+muqd!4_N4B+VK2^7I@mwXloIj;EFi)SZc#uyVw)P(FJ@< z+2?tXGFS{U*sLu#nvIPfSZW1JgH?J*ZB3r4gLdm}FrP&{fb*ms zaVVI_bB$*A6PogX2XWNN66WrlkF@#>tW@>;ew3k^o7GkN{=M^Q`<;SW0wQEWJRqAmZArO)5Jgnq=dc3-EKH za+|T(cCJNv7@}C=k`W9%=F>dn+K}K+b&=pN7P-uh@`=OJhBelvV*MawcD7db;ij^Y zxQz-L#+nO(w{^kXi48%9Rk2NY0U5?F@Y9Y#FOk7O(2+xezHgH_b@78h>;TY)-vo_> z@^MpXny&6ZdK$gcm zi#ZJm${;8M)kqn&^mOAepF}pUSeD)gv*)#Qdo^ zOT*~dSBB9qS>cXKvASeJRv`gPQ-i9}t66?U!(3!&v86bF)e}a4HbU2j@kQX$@Jw7k zM4Qk=n~h+;Ubt{VX5kZ>po=6O5_p8i@Q*+RONb9I$S&*d5(deDSVlPj*>gj;fN}sR zO}zwkca(#>qcrtxqZGN*hQM^g+=IFyE)PN@kDSnxI$OL}>~(;RN}+pmz@~wK&CLOu z#s+}R?Eyw!MDT(b#tKz4C!*0>m{xC_(Q5SprZw0crq!=mf2+i|2HS**oeS0jh)YSe ztlF|d)bWP#HT13yaEBHUNLCAy`Cyx9%_EG{Ua92Hg}^*ok9Os)WA?VkR;eDn2 za{BLIfBgB|llQgnzWjdg+n4IiJyrenr&q6D{`~b1j-n|4wD82kZug*jO;a|G0a+K? zVs1y-f#-BNO)nVlVzhU4-7va_Vdz~0hVT_Wi-F$JJJykT$aH3Q9t`MF=dfq`oq^>$ zo&LbGsNtKs?)V4u$JYMo!>6AHt_6u@c5Fgz4S(H5Cf;J~SaWbwncJ~}06j0R}jG;tk9)c5X0ilh|PRwM`nb-H`+-S2(eyRQe&w)Q?q zy%8JJzi&M^#3W%x&qxK&JYh79VZcH^HF{^yjleg0R>O$s7-z)XXWWIcM!qJDqjUJh z*|%B18B7KlY}!x@?b<@03N~Ll`?Y+jQ(G!cEVP29!7{!5hM{)VM7zxfn9m{+zvoLb{K@rO;^f3SXVX@ zcTqvjSbHw;x-OVGu_nlJO14QaAj8-Le#SBAB`O#QI5ki|An zV?jfLG6>2*HA+S$J-s;0#*vFN7NvK<>{+cSl71fflyf@4tp|dQq1Hhi$qUQ8F6BwSishFy%w&eop9dZdPv!AL zj4@4&X&=U`g$oB%7Cxj2x=7I>flovXUj!;yLVWl^dQo+kG)M)+BFZkvo*B9UlwCk+ zn+2eoqwL-srEP8+rOcfM1f~~eKGY3)cn})-$X z)m9aviZ_g}pm!YrcW42DWVs;OhnqxeA7Pxf3ne!$1oqKtv`bGNyS+KKk`t;#YU$Hl37FVlp439Vj9ZUJ_PBz zj>h|u$0vzw8$mqD#gjo852`LqlQ0l&JRGJ>EF^+c>g5Xc^A4hDE?CIMa1F|h#?C75 zH&ko2@*IDHCI~u!CMdU~67X<=pfF@#l{&nxZw zmw!zze|`1h^+&fqef#pyhx(gay8g%S|GxV9hu1%SrfJ$gTe#z1tF_;{qMVIlK-Pk` zSh!KT?+;pn@^dCy80{_7GOd;gAADFX%Yr97k?ZueA0*4Umj-a57!k6VRR zB=`adapD6Y!ErwV5^&vbfW&!)gv5;-@6E)H?PNonP1HvAWahm$zxQX}eC|B2@4b__ zV>Y3$@4V2&G-ldBO9W3{p|!M;&jK&e2Ins{-_r(0OAF})XGGj%+=j7MwkC+e3wYz~ z%hcx#CW8z%YpI21WuZp}TP&TwtzK$XmP!+ItzfCYO7F0xsa>_vZoLKOvrzc3AKsRm zf^po}aCSeYT=>F|!gdlfw|PF)$|Eqdq2C`xd_qP0itz-dHq1RY3I&MV1>@-l^omFO zO5wL3Wf%#-Z~>IoA~{F`Bo#sel&MIQ{8woy(P6Uk0@3_XXtNe6tO#kGj3Xhz&xNXG z#$wsI7N$XfVx>!l@Zhl#O#`6~2>w(S3I1ZC%j__nIE+`Uu{ISu@&jfkYh`ygm5s!0 zR8TS2TnN0W3+7I&2r{gKZPE+KFmi#Pb_{xn3I>9X91!$x*kU^#lR%bo;)Jgz8I6^r$j~>E60VDuZ&vKP>2l7Ynd&%hK+WUr^k}6 z8+!nQGD`z)=q7F_BYc|WBSA+Kk;VaQsclo@(1dvekccru)+%!eW^NgYN*quVzwXJ&Q!2!E*p9=j#Ponw|N!` z8W5C0PzI_|GD_*`MnO6WZJeV`Z#2n{`QLQl$U@mR6f0X7PS?(G4a1_CxW2W%P} z05-P=7hHGJ3N85~6s|PTx{^l^PUdj3!CBD_)CQR&HupU5MDyn(a zRu!U*H;AsGcXfa}w17aeSdh$vZK5>~F;0(iCATgF=HYs@D^DHsXnSlWD~9l^M9)8N{H4L%c*3w3L+e;_Jj$FjZPjU^M>9kG;Vpt)Re752+}tl zjSoYYPh;6Of_RdNCr%JKWfvxK;0rq%jS?o762U6;a=H3N2az`yEMOD324zNLXO;CE zsLI0a@qqN1s5i8grK54Hu5- z1XRFP1TN@!QGrg`PoycTrOG-!4o$c8O*Sy0p+91Yut5x;YO{OtQtL(@b9eE)s{Ql+ z)xDSh{_x@5cTZ0rfAfdicy*`Q`1$)^fBO2>FMt17Z@{PaR~s4PA#X!|3R`ZgdQMgnxX~^|s#b)BZu%^1AHWf;lf|R1qq2O;=q|d05~AA+9Q7e@6E)H?PNonO;lBr$;^9ie(z)6d@}yLe)xLg zOxTn@-+QKsSC4gH=M@hKJUYsM2;+At5DC=?*_0F0+^(`z0b zDTUvBkYOYM!vRoQi{u~)kW>f>P^KbH@?WK;M2E%73q#T9^g_ij^)I!N6r6O#`6~3I0?T3I1ZC!|X7fjv235V{I$e^8;ol8)bL5m5s!0 zR8TS2TnfCc3l>hS2r{gKZPE+KFmiyOb_#ll3I>9X91`?>i$vVPe*|I&fL8n_X~a}a zs*3cYyR%r%b$uK;6a$kyd2~i@d@&)XkBN*jR*nlPUm3Ncp%59E*D_mj4O^WiPmdK{ zxAp)AWtIlq&`mr}M)+Ztj|3e}L>dRIrH)O>m?q36fJ96fvR0W(FmuaDRO;DIltL1L z@GR-UhlXAVYn3ER?dLKLNaPVEAtAm}hK$Q9B=yAqlG%P}k7t5abJ@^~aij`le$0zV z(14%}f-+Ezl2J-eCkoPOXyb}i>3uMJQ7iJKUq(LVoX+s*zF!I zqi0_mMn7kTI|{|>ib+|S1T0Mzsz$G5`85qvnW5R1?EFPf82$MOT^~eGeTN1Y^7g%c_ZAJ7dEPnW_~FkMCyTDZYTA!$?SqohS4eE)$GT z{g4qJ-H^;e?BDXS3pxcn6QH?Ejw;Y24$Sk{bGiC-*WHrx0kX;CXD86B#+)Vi!i8%( z0Tu8Rfd@K1RG?G#6KRTSsj`lbL(?sNlTA!%=zA;?Hi+RfZT^;g)H;#NoCCbCYJZJ? z`tkSo{&s%->Yc0e&kj!-zwI>|U;p#{zrVcr`Ooj_wOZ{(9gjThbdEYVl(R_$%sS8) z3p-4X+;K-x{*;LhhI_}*b-knOh5;i(jo^y`Q}Ai)ZOb|C4P4J_vw>^2yS=W}?mGjo z-8EpRcg$R~-#uEqwhkYD_~_Fo_b-~y-)!tR{-`&9sPBJUufe$4Z0emA9Dgd$AhPL?u%=WJxuXJDmn-W?}=N=4_A@eG#g_P(FQ0z~eC@$_|i$&&-6 z@awk;VkQA`Q4@+IXCT@WUb>2|AjHJdIde9h(x5W-K6pL`)d6R+&pMbL&V{>bZWBLlS}T zBI&`0mRSjFl_X2;Co&C4GA2qwMna_w8P`=v>RI?XbHmv6W`Z?y*)pqfqzYtt%+o~B zh@cFDGEj|@QAxURq zni}&F%-0JSPN*#WfTrjoMTdj|5efVuP{|VFBM7sLy1S%7Dj-%-4nX$8&@G@G07}~| z0o@+u;PxnObK59o?zAB={U{HhZph1n&^RC`^rX%fuNC(?z*eQuy*OaoLcsRsfNg67 z!1ne4BQGL(K@4Mss+kkh_*$4wf1ApSPvjB71gq8 zs|r!a8zooJyL!MKT0kIKElBp^HqqMmFi!iWl3N!7``-0v*WNmIe|u~tDk_ikt5F}{GI!^lXEohS4e0TYZ* z!>;?BB|906GOc6QH@v4jRxC4$RBfbG`cX*4>iw0dk$kAG`~_YRXxLFI>2$ zGf)9f5qO~ELj^kJFq5XJma6FZI5geTH^s!1#^IP{!UZvWX3Srck6J$on7@bjmDc*| z&F|dbcR&8|?AveN_~Mh7^k;W;{qLXu`s0V+e)-eWH0|FOo_N^p9(1oLXOjewb)hX5 zZk!ziURO|l&O{fZy=$75iC- ZcJ_XHPt$hwcW}X)SxwjXU|I9n{{dd;NVEU| literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro b/warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..aa9d3d6312824a5f2f2040cfe6475e1d11d952e1 GIT binary patch literal 4406 zcmb`Ky>BB$6u@nt6;hxG350}n#b|4P>_;w+O?8NiI0?dWm#ZRcHM={G_p)Ei&L)_X zdx{gHq@<;z;XiK(GX|E++*B^u};1wh@%U5~y2-!);|FaT^uX zj5U`6Z|Z`D6KjGDt7Mz>0y2zU;HRB{UZR45pd&{FecvH5ckzor>;TZ3-z1HMifLVu zUUqjL%Z08_W0zuJlBbU!l51Z~$;lHUql{JKLdsW0t!OAk2IjTQmO{f;yD8FRMc0iz zfI*q30XK9Lx04fol; zltEAis!=j3>FLHn7DhJCSe1SZW-n?*k@U;Rr<~InZrv9wgjxr6Brhz>x|BQN(l7@0 zm0=tgtZ+rCSY0wHE0=(!sYcZpR4l)uK_)XaUy|>?>`j1;QlWcuz@~wK&Ful3#uk9h z-2p~kMDl_d#tKz2C!*0tnATvI(P|w7Ol!D3OzXH}{f!de8txJ%b}m>CATAZvqH3!O zQNbF74Hz#~hd!x94j0Ib3&2$_vOQk3akvdewxp6mPh2OsAj% zt|D+j$BPPd%6=+MQ7u*8@o{LnrEl_qkVgK5rNRa=e5TFclb2dI_L#em=T)QeqW9L% z_P_H#e*Y_tKKQEJ`t44;_436xfB*TzkKbD@_%!}$;+{wSey@K`Ih)1+tq+Z{u%oo+ zIekI-1rvRY_r9SUdSBNK1D}jOyx|KD!KVvIFP=U)YrlH8wby#tZ2#2U`>xr5=XSfj*T#oNyRp}3wD9qrW@W{{RkpN~Hh* literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/406b5ff2-453b-431e-9cde-884ceff64876-m0.avro b/warehouse/test_ns.db/target/metadata/406b5ff2-453b-431e-9cde-884ceff64876-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..37cc5d60d02ee532e1ff7a4b5f43b178c28bc2be GIT binary patch literal 4404 zcmb`K&2QsG6u=#~sw#vkBtFDpg+@l4NE&~n`Qn72l`275cDtu4vL^PpF?DQXk6VRR zt{mAb{{RyI1JZJ2j~qB~=7mvXjTx_Dc^)T%8NCKg)3Qh%M^QB#wWW6_yemCQC06%@4UYZ<5lAkjCjG;sX3as9a_& zmtAOK76d3(xMTzmF7s#>aBWENr>aQs7YiL`huL(@lA1NveZ_iy!0dFR?9P2?Ti$BM37 zdjNwnPlLqJP25gS_+g%p1RYIy76+^;w@t~IrpzUPgijce)_|K@x%R zJn6xQhF%J5nIuc?XCe(qW8|oK2zDK^@5p%d#%zPPj6R zo_%c?{el&)C>5(KCS>Ijur$@E8oi3;*EGmPhUQE1{g*vq^yedVeGpyx4h_!5@k6vJ zjkWm*#;b)32V@q0PGfYDq(gj{@Cg19s9*{4;ri)S)m_3M84#-|2OxW4=oU~80HvuH zfbNcRaCelZzHO8ucbX8GPLR1!H^kvVXy}qNdRAqN$BMlPuu&>>uMXHW5U_cFz@~8z zz~=SHAzE83r-Icwh;XRdQ^qMaIz^By8hWeLxD^#sleUf^NMCj| z9*0gci$&WA;z=%^jDu)gbzvF@KDQ&!OBr8D1gq4`73!BAMA2NZfKA~VlpBqmRo-vN z)@tK9{uoW*bPP>UZbv2H;Q~Qn#tbezs}|leRcjV@?`Gi%-hiRQNJ)mBC-fOE<1Cr_ zAtOn2LvjnTe=D9{(8=MN0L@)`Sc4uVz`VFUSF2BF-6<(9Ae%gX`YH6Pal%r(;leSU zf(p2bzy%#ID$ptWsW3&hRC&jjK+`RJlMhU3=zA>XHi$`P+WakXsdXZkIs15CDX(3> z{mZ-mzJK%lgWv!8q4D9*>Wdv!{rjh9e>{Ko+xN$cqWsms9S_^>!}bkL*dzjEZD@tF%;_m}vz|y>)tr4NdK;iFWG^FrNj&gZ=QP+!T!C zzJ~L=5#_=YUKljvh&lE1p;jD$nKk|HIOJ0*npcd+FtuhLI$i@ zew<2~egYiL-yDr9_9x$_qsE0-?n7J1ODEX+9EkG!aSUvxeF>B_kR$mjDtmVaQr#F2T$#B2lSlJ7EGz1j5s# z2Ok=GF056OEVZA?G$7%aCOamKdtV-{J*^63{CH*q;Dd%*CTlWN;Lal>3k`|U_T}qvBX&7Dm z$}oBvD_oH)R+mi5N+n=vDp57M1kr8N|`$i2u#OMT&NrJ@E|mB$tgW8vc+S?-UQgl6}qd<9 z!)K9f8$mot#gmaAj*2dfBi|EtI3CALtR#Y!>*X@_%MK!IE||}za1Bb0#?C73H&ko2 z@f?4OCI~u$CMdO|5b$t;pfFbPOus zDgqaDyr@8@?8VX))l#J$ABUz}`X(Ki(!d+DSlA$j&$Rgm@>1)BE^`j>ysG^0(>JfG zzXYc*UcRVWU%&dU_Um4)_Rn8`{QL87-~WE6QmOo1#T^e?t)td85f2{6*TdlxzyR%6{z=Ia*hPF#66T9DM-OYX>k`-u8c9DM{}D literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/46363a35-c28c-4445-a9f3-27f83f5706a2-m0.avro b/warehouse/test_ns.db/target/metadata/46363a35-c28c-4445-a9f3-27f83f5706a2-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..d5f2c3dac4b103cb6947c273d2d3adee9da3b173 GIT binary patch literal 4404 zcmb`K&2QsG6u@0?sd_*a5{T0tMm{HvKhh-4p7_{`N>G;F?x~8bi9Kmd9ovk@t->ne zfV9W`BRH)DN5lHoi5=U?hBlk3ji!^C_ul;8$GrJ+`1Q`gyQw#3 z6Z+S^XNH(2%;+1b;F%|khA|3Q=%+^i;+YZnM&D`}5uMCyeSU_ z^LVbo?0!PI2t*J^%`{=&?!~~U&cI6Dyg!Qhgo@@h<0&lF?E^241c=-RN>5>5qd^Vz4D2zVAuc{)!Uo7&N8)cIr<27rXO~sCakh$qv+3ihbBXJiM z)Qq(k0&nYrxf5%GET?3f^a3)BJ>X}YfL@}4fuJM%1byEiG57F;KAc?(|}v1jmOCeKg#owpreV%l8`mju_+nSl=%dZh%rOfDsu^DZWW12J=cpfNForP zCq4MkGD~5tl4PO%Or`;eM?^_TNuZP=Jhw)|L(ePYeKg5{O z#F!0WzFN3&LS^9>G(i_BIwbIkh~XE3N|q2Gevn>O-6aiD0kMqo7-Y{4-2%#EKxvx= zpu3|yzB@|W+%`&?I}Hd-FU)+X8}jlXH1f$AJ*%?CYsFm$*eVsew+C!n2-w~nux)Js z*xnvs}mQt%d1yw;8QY4`4dSo5OT^73*)6_|EY*VPfZk^#I~hQ7x*r zst{GYVSEF<>kzm@3kW331<5|zCR)3LaoR1E+_@0go%Lu}-a2-7du$~uB3V@-W=Zm9 zh+DmwY^|eAl!H~N|{(n1gF%?73voqMA2NZkWJtjlpBqmRo-u? z)@toN{sc`BbO=pQZbv2H;Q>Km#S|Vq%NE`;RcjV@?q=Z$zJQ^_NJ)mBC-fOU6O2!S zh!Gy&klaG---@vhIt4rvpt(yAYtUm3%!}7^wfeMI-IDSFvd-hDpF*#iaF*f=7q00P zRKQaN9_aW`flfI{r75bV$~!&|O}F$-J~5$DFk-22K@6W7vk&B>){A}S?c;r=z4PZM zzx;Og;`;~R{nOG;fBsv4bx+rS`r+k|zdnEcuh2B@^$wo6-)bGUZYXEt7?8D~Ef#K+ z9{R(Up!|}F7Dju^G%d4bS@OeFBg=#V{F!FcY_>a2$Dz(q)3bYCv)yhVHR=Z~#}M;|@@>gmIC{nh*Wp8m(q?#rFM=Q|pV^^9QXhnkPy{=2Y7ELc5Ejb+H9<Dw8~ZHq67Bfnh30$OvC+~(I>i|g_ZYWftd*?^qVN*F zIQu;HIfKa{gUwrNp;=kzQNfl=7hmg_T9u{J#9S*_>aWu~YH4a$ZM0i&f%z;HKJ16L z<)&a9_cfZ|k0}?v@T0Ju#LR78jI{Cy%xviQ#}S`W(Y|6lfvFAiz>PuyBKN^~`X0UF zQAa8K=KTyK0T?cT(pn@3Nr0q6NPsdGX_EgcEhRckR$d^Q9|~>WB83$pjgv_vB>06; zwai#9yU@Zk2vDqa$p~INHl}GHv}1xll|_QTSm-i4Os5Xx6>F?*#g6@e*~v!Py=`S9 zaT^s>j5U`6Z|j1E6DxuYt6-b-0y2zT;HRB{UZR45pd*h7`o2XX?&3cJu>(LWev>p} zDkfD$dePlkEa$pDid>3;NuHfOCfB~0kdvoGMj0!|g_N(1TG3F549shpExCrRc9W;a zimqFG0E04118(RhZYLxBB+EyFjwT|F1J+X8ro^EM^9Udj6Nao+<`T@@G7^<~wi~68 zL?Ap%dhns47s6U4$x{2NOal^)iIR{IUnxVzWfhWo;(x(xKeU~hVAWhU^kN*T0-0~~ zJQ6e@D1)F3RHI~+($kHCbQ;r&=~ z=Z4X@uMA_5v%(dHV)dL!S(yYZO%0-5+#O)#MIX@oT|@8c0C#8sfn>2DnTNYXYaU^o_H!k7E(GS$X0&Th9kahXwvrW*tjZA6 zIDS3EogPdkR#WQ@s;T)u)pRXHYlr1jvRVfb4pn=~1jR-t50XVgZxtH1ykcs~))55h z>yE}pq048nY#Tv5$;1;Uh@7$ulQ{5&9gW8c6Dx^e6?(Z`{j!6|n+q1ODO`gxqp`Ef z`VG}uZ9K=Hq6vaJ&;(_6lmZ?u5EN$2;KH+N;Vo0OV&T!UKEq>z z@u?p&!lP@FS&02x{_cTJ0oMd*?vhRgdc=WwetRxgpWeDtQeHqddHnH1=v8CR61?HU zF`a-4xQf699WN@-Df@{uMYU8}$H$@RmcGdbrZn`&ED<({;WKUiuDsN`k;mM9Jg;i@ z*AIWc`KR-$H~jLa@a)^a8o%9ZHvahT-={nKv$$^^Jb7^T>9a@Y&6{@`dyPNq%^&M~FY7gUZ#J8IO?;^}YkRd? k17F{+*VNP8|M|mOZLje_jyCeqU*zZqFuk!4gVmk?2X|&pbpQYW literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/464f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro b/warehouse/test_ns.db/target/metadata/464f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..7fdcfcd2372b0d6a487474df2986785534056b3c GIT binary patch literal 4404 zcmb`KPjBNy6u@1#sw#vkBv=k;wHo=HH2#xq{%}I$q&%klHEO3Dv2kuCS8()C;W@5*7vZ2kUYF%eC^WK}^`!jF87=E>L_-^Wr z*@XVR`_d58gc*G!6+H8V(J)2<3;opSU%WH|-{@NnBcc15ieT6d(zZR0s)BrXov=Z>6QggvrVa#0Vl`%o?P$BBDt;j)eq27pj(7 zi)9x^l!YORl`a{;i_bB<3DI2*eHmt@%yTNT?Xs z6`5ss=doPq`YiS+1}1s_^pxBLVoXk+5gBEy8W&Q&GHOXfDKapxWwsO=Hrh>*9!t7z z?EwtRJPo*I+PIyZ@RK|r2|AjHED2ddZJUxIO_@&si5N3vtumKj=2nrY)N{Q!gCqjs zdD4RqEwdEXDoGaF&tw{qctn(hlmto{GOntS)YIT=<_3{FoC;RYWy>tbkt&eIHqT>0 zLxM60%0M+rMkPJHILs!Ii!+v`cfss=ttgUy5&4vJI>oIAf=!^-K^@5p%c3sjPPnqH zj(crc-GUXaC>5(KCS~Okur$@ETAhmJ*EGyzhUQE1{g*vqb!P)~eHdQ`9u3ds@k5LW zO^n$9#;b)32UHe*P7`#IqC*0oh!}nmsALK8;Roqe)m_pc6%flPdmwvm=oV1+0Htjf zfbNd6cXyPwxowm(cN!3wUYPk%H{{_#XylVKdRAqN$BMfSuvIE_Zx7hE5U{;DVB6XN zu)RIN$cso`5W`rZD&|BqS_{+ZY%^M&F2Hnpo5OUv73*)6_)c$|FtKyNdH`{$s1{XQ zRfsCyFusA_bqL&{1q71if@DA3CR+O#bzz!>fpFu|C}m=KIxgC{&hYJLS8B@6MEL(WXRIOQfd^ZbE@CFPWMoKd5JfY9Ro?M&Xu73u@_`ABf)PuF3u5@xn0+8GwO;Hq?*Pv$?Unw{ zy?^~j_q1O=`th4zUp&xX@9O%WuYUUeuRnhO`9#ySe|B)k{Z{L!bwfED$AGK_ZLx5p z^vEB!1m%}Zv@qIRrfHe@uv(U7nl1Q)|8mGQ&8FFGAGb#qHCfa1A6oFq9yW(<&u(@t z*0V--r`vYyqxog)@X04nzkL4qTz~z(zOVnbv-iW!{ aia&b?4^B00U;h**tQggF{Q#!bxBVYZBt{Vc literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/49d50ceb-ff50-4c31-8515-77245a727b91-m0.avro b/warehouse/test_ns.db/target/metadata/49d50ceb-ff50-4c31-8515-77245a727b91-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..1e6be0e1e2ae5b1fa75aff0aae830c3e3f858c04 GIT binary patch literal 4404 zcmb`K&2QsG6u=#CRTXJfA@OnA!^m8d#ve`d!D%J7VkNdLyIpCeDzYZ_WNYf!W;|{c zR=IHC2;AVr6;AMH&;tkl4GKrrSo5_mpZkj(!@e5SQ@O-J8T+iS1q*LY=ZeL5&`Uox8$Z^ z9QQSx-AgDJfe7NLl_t#FIU5?)5tyl)_r@`wP|><%JcX&cz3;`50FirOJbjm5^7ue0 z{ObK2BLNs5fHIn-07-zPLP&rz6O)+D7B5lzzbSV-`5p=z16 zSaxPaSs0>N>5?J5_-stGP#6P(e^o_-zgXlkH_9d>#%tC%n~EI=A#>BUvJW?vjl^A4 zP&3wE2)wBa=1!~$vYe7_(hJBi_JE&p40?$Q27-*9!t7z z>;VkQJPo*I+PIyZ@Z&rm2|AjHED2dtZJUx2O_@&si8yD-T4gT5%&j6(spooe21x|M z^P~qKT4pJ%Rgx^UpU5;I@t7zHDG8J^WL#Atsi(o`%nc%UG!?9#%a&P=BUK=aZJx%0 zh6H60l!0oLj7oZXahOda7iTO>?}6F#T2UnZBJwHcbc$OK1e-vugF2EImPK94op51U zUH8(mdIc+7Q7Tp!Ov=h7U}>sRwYn9{FKL*`49%D1`!9RK>dl7e`Y?VGcr-kf#}6?k zG%;pF7_SyC98g*Kh$iSFMTZ1F5ixubsALK8;RoqO)m_pc6%flP`yhL6=oV1+0i|sg zfNqbne|wa+xowm(cbX8GUYPk%H{{_#XylU8?^o5OT^73*)5_)dSDFtKyNdH`{$s1{XQ zRfsCyFusD`bp+g@1q71if@F8LiPk>CIPDfnZe0lMqxEQ4o;r4Sdu$~uB3V@-W=ZmD zh+93FY^|eAl!I7PMKIr1gF%?73voqMA2NZkWJtklpBqmRo-u? z)@toJ{uE6RbOcRMZbv2H;Q~Qn#uP3*%NE`+RcjU=-Oj>eya7Xpk&+BMPv|pzCK#Ut z5hFalBDsawzZLI3=oD~GfaWees6mf8FfVS;)#`J&>XeihkaZq^_yP2)31=zZaN(Fv zK?Phz;DU}973h?MRGOk%s=VXl&~!`R)BbGWjtA}bLHmkwb{+$=HnhdU zjnV^u)E1P#V4{uD-Zm}MY+LYwhY1f8-z~Fk;-_V{4*Pz`^w_919(UlE=UA;?$Lh4Y zUHh;@yLNZfw+`l)t^LRMpM3J{!Kr@zmcFb1*4X*6vHN91gLi!g9{8f|XuFywU*Bwi bsrcF1yZ%tqcJ=!>Va2GX>w7S*zU}`2o(@Vk literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro b/warehouse/test_ns.db/target/metadata/4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..7ca106f0b84d28445793a5c53e4a34ca17217e22 GIT binary patch literal 4405 zcmb`K&2Jk;6u@oAL^+@c3B;)q!=CMUKSKP`QxT1*1fjI)DY91M-Ep(cdS{uPO=KcV z@DCt_IK#hCi6a*da6w!VCnRo2RsRUyoAIu9*RDxiN0Bui&%F2M_de#$XQOBJ{WlZu zoK5J9ooho*V`dDDM2ggtM#~rnEc6p&aCU73zA>;`MnosLf(xGs7v@^oo{&dR;hSJz zq=8_t7-Xa9*?t1>ay3YG?|^bT8wK2;m-Hd|mmi(~-j5p8uS zn8$MsXLn*MWFP|`wUd~6&9k9Vo`IDO^Uj!y36_-stmP#Ob*Kb1v-zgXlkH%ccXCMwoAn~EI=A#;QN7xbX0UKbV|IA&EeE zmh|95%PfSoPLhT86O{&pkBOF$kU%R##$^?XdJ=re+#qsCQ^~5iY?;M4(giX<<|&sn zBq)QR3{<0Kl+x4VVLFLiT(K;@2WHP}MV|DF$frWkDIPtLYy!0o>PS{t7Ii6e!i8mZ z-Al{r<*aZ=p;%ooB`cGFrKv*I>Xt0Oq+zNuG~1G$zvv08HyfhsL;f`IXn3lwA7V^s zY|Mr*UoKoYp|kK)8l#Ie9TNCNa`;D}iY3H{A0!uLcPWE(KrEx|gY3DXTR_JN<3K#Lfll0mP-InpbUI zAGJV7VR9)EoI)>`t6y{wd2_)+Hi2hQW;AwIS-+uM ztF`y|V>Ch15i~)W9i@PW2Ly!`Q+V(!TX@4%typ+;I}4BT1q>ZVLQ?EJq0jJ{WMUFT zj0k>3G7GVP%f~+Gl<-V|<}Nv?K<5IO=db5-^*LO1OR5LRI*&j22zu36umoSYa7`zm z0-hr9K*xs)bjm@ZOwlb>*6|5wx|MITi3yE@F-xQiV#L&#y`vtr9`~8Ihxb+Oy`4Ay zcscv)t6%P3|H$9}x!d@Cr_uQSr{{lv{qLXO{ZOyfYA@?}^o`l)o)a-|_ys-z9)pP#`dVNb+ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro b/warehouse/test_ns.db/target/metadata/4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..f32177b99be086a0f674415a4d1874732bad9b27 GIT binary patch literal 4404 zcmb`KPmkL~6u^@-TI~U?kU*Sz82OxR{3qRH!-XQcPzjdOZpC30SrdEGxa)Y#c)Y7n z<-`>b9FRElio^wp4*?RNffM3b_zb{%GqGbkY1mB@MUg$3dGF2d{h2o(kDk^KUQ4_Q zo6;Azo*8l$Gh<*RQly?VTE;kFp`RFo^Jhlj8w0ClM0AQXxbT^9VXT#{33>Dc-URzB z4FrS9AcM_YdZAre=u^p-OBZkJmpYZD%EVkNSQ@O;J8T(xS8cT0Y=QYKk^$^TwAH3y z9QQSx-;Sw}fed)mPGaUY&xb~N1ZFnO+hZ=KRJJdfNMLHiKJa)XLF7IdPv4@Kf*)#y zU%#DUBmlz$P)3X7APJDv2nkT8GEMS-m8Hal$=VCV2qJ0BTcofeqH!|eQh{Fx)yu5q zvU4L!!w|(Pmki;-XJeX%(ijl@t1J@y#UhWnQ92zlQL)C^R_r(knVW2s-Q89;5_eHS z#aMeO@VYKoII$wgatgL7FCati0YBpe^b#Em1RXgb==&Do!owc|u>(LWep57JDkoJ% zX3^bQEa$pDFMz>oklLsSe4!fvlq1@Px@u#Qz7UKw;o6~g<1!7Br7b-x|BKL!m@hq zrDgSVR=A>2tS*?6l}W(TRH171N|s;JFjX0vEy?y@^n}%)57G4@e-d~!JX6OHF{U&& z=0g}S7cLyoS@;o+(M6gL349_sd=aQ(3Gv|v$wk>+${-yOt0<2__QKE|pgabYwwVLE zIm+XkqqNOkqg1)mg242`)Q7sE4i7>jpPbUuGFv=W+)aS3LZN$gz_x{e?d<{E))s*6 z-2p~kMDcCATBl4ylU$T zQN|ncE9hNEz#UpZAXzL(_MKg#wU01Pd%2Pu7XtfeGupMMj@{cGTg8efR%M839KRgm zP7fvkxwUWk=(^ z$P=?zwT&R2Wa7yv@hD6s|#;(b!pK{f2I> zHlE{;&;&_G&;(_6lmZ?u5EN$2;KH+N;WbmWV&T!vEIh#*FmxCRNwM>UKEr2{iD?iq zBKQ@_EX4jTfA&GAglhsccgbM|Iv2n^zde_$Pj}rZsV*R!JbwQ@=v8CE61?HUF`a-4 zxQf699WN@-DF=x%MYmL0$0wlaR=&vwrZfu1ERimV5i?`{rn=O6+-KfCo>#T64Eg-q zccS0_`Ro1JmxE9LZ2Wes(fIMF=imSP!*^dqwOZ}(I_`MT=^S>hs9+Ng$U4v#OE*dm z{ZU6!@r20^MtjGyEVE;oruwluCcMLl*?|$$Y@6*a8+F+o>bJ*c&ue%6Bi5$2<+R7t z@%mk-*B{f~;o`D&@Zj#lPafYpYrc4+vDf&c-u$_~_f5S9&&_6YuZa(}W^J!lYvAMS jbubk_&HZ0KsMYowchzV^55nlLYV=*0-q?r1>bCy_)VEBV literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro b/warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..c2bf566becc4eba941f294797c55a8cd16470568 GIT binary patch literal 4404 zcmb`K&2QsG6u@0?RrP=>BoGI*hmmhcN#l=fzBqx{ij|-&+xCE}U`^~v+x@wio3 zMO@Gx(H`MH;D*HifV9W`JNWnumILq2#E$J`L)%T1L=$J`y*I!2F>k&aJ>5BYC-o+5 zO8>m~%n-AL83Q8~JoALnFvbB3{nQwoKQjW~7+4J>qEnm^bDwb+o;C6{VH{n+FV4Qp z0?uGE$YAq^T4>i6`c$yx(#5a!OP$(MX=0%jEDhG_9X1TLt0vlQHo$xqi2(M)n{rd| z9QQSx-%ltPfe7NLnI_EJJs%p?Cooet?~h|XrJ{MocnVW>`@oAM0V4Ooc=`do;_;zU z_|wNZMglNA0A(~t0g?bog^&PcDzdcrS6WI;n5?`&j35%myg^DUBATR=SV-^-p=z16 zTy}0mSs0>N>5?G~d^V<8D2xHYzp5g^Uo7&N8)efG<27rXyNVqLA#>A>vfFo+jl^A4 zP&3wE3cRTc7EY`QvYe7_(hJBi_JE&p1bT@I27-;{5a1?f{rF4OG4IA+oohhQ|1#uA|?!3tIQ>sxm6@8^;|E`Ac;VD zp7h{D%PfVpN|L4aW0?jd9up-YC4o|gjH@an^)&dNxk2QPW`fmo*)q#Q z>t0z_uV95MO2z7uNm;oBEKN14R<~mL6%8|)q4|=0|7A~Dz4;JbAI2AfN5fNj{19VG z6JtJv=hec64^$R@NfUIDqC*0oh#1}oRI-Hl@PqWS>Mm)J3W!ydeUQB{bPFi^fYLS# zK(|NPzdcIZ+%`&?I}Hd-FU)+X8}jfVH1f$YJ+89FW5wMB*eVsew+C!n2-vjA{2qFPjK zRUxW)!}uC{*AZ}s77$353zGd{n`rG0#%Z@ua_d51cQ&J4d+ONT?Xi`th-6iTm?g=Z zA#U|xvay;vZ&6L{|EZ>HAv#+ur;^n=h;XR7Qzj@jIz^By8hWSHxD^%CP__;sNZ)ic zK8!p*OJv&!;z=%^jKX+Sbzz!>fpFvTIAvlb5u8#lSEyfh5JhvrLNT1X!v%uEj2T>bRxP|?s@5#*+|I%yya7Xpk&+BMPv|pzCK#Uv z5hFalCb@;!zZGL2bPBj8Ky#NK)}Y56m>0L_YV~QaJ0;}>WRu4qeFnX1!dZ$pTsWpv zPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`GYBqf-y^l3u5@pn7=PCwO;HqZy(PqZT#=g zXMa6^eR9(N@WnSD1wZI7@9FyQ|NQdf>)&3y`c~7lzjtuQgI4RXbxk>&#DJ^?ZLx5p z^w1x*1mzb@v@qIRmT6fn_?RvDz{oT$c*}ulHqB;x?D(A#^_ty|-)Xknez)0c`@N?9 zVAQwTzBleW^l)+6I(YoaldsPnp6V~()A#gOJG;N`>^ zVN?42)}uT)Oym^-`y@RGFA-1xtgg^bT8w-c=jzHd|mmi(~-%5pA_8 z7{`4L=eJ`jWFP|`wUd~6&6A-~9)Xz+^Y)mFDV6PWCK8z1u=hM3Nf5aU#?!axx#0U+ z;g|O^j09kK0Lo~Q93%mf8X*D7RHjM(udq2zrSQ27-f!G0{6~8GOF_n|5 zBD3i3ES7U!A99akV3MbgACikePRQXCqN0qI<3h>TMy+TlL$di5<`BVrx!>tFBO`+C79mxvIvMyy#IJ2y- zdv001oE5Gp6st3)WMvYtG*zft-IC?!G)z^7W=pdD7d>J1=0kLS$WH^0hR5poA;y%( z#(W6l<-&ynItxFdF}g_8A%RaMhYtc(EFnJpAUP|$OBtjCVijc{WG@We0?Iz1w9OpQ z%~AGmj?y-_jZ)=K3j)&%Qy=PvIy?xCd~!sO%53pian}L13We_F0oxV=wl@cCTN?nj zw+9$`5ycB)7%NoCoQOtiVLIJyMyt~Um`;Clm`<-`{k0O`>2DJzb}m>CATBl4ylU$T zQN|nc3+P=(z#UpZAXzL(_T6owwGS{(ySb7Z7XtfWJ=!Zz9lN_dwu%)|tjZA6IDRq2 ztsYD^R#WFCs;T`y)$~e;&KAq5Vs#ZnI8@y!lN1}BJV+J|y;Er1@``C_TZa&&FFG0@ zM4p(%s%-@EBoj|YAs>}pn8aZqT|OQsOs*t?Q|RS#^~(+-Z!TEKrf?0)jKo;_3 zwe}o;f+k2hf+i@lqZIIPfuJyB1{a=H3$K}~6$=k;X5k^;fT6=kNQ#{&^cg;rOiY7_ z5y3A=W+C=(`MVD~C0rArxl8sd(76ES`R%z}eePU!N~#OUI*&hm4|>&Dumo?oa7-tl z0*6|5wx|MITfhmoGF-xQiV#Lgtzo{;@9`~8Ii|1ACgCF1d z{@>UC`1JDaXZP$^zDXOu-D)P$RS_e8~ z=|;)EKk7&-PMPdrz;{f`G8bPayjdm=m@tG-+iZKb?e!0+-}ar6*SH}16u=!{6s3R&0iwEMz!3f^b}NRajZG_BipyYn$;n(Q?|B z21JcSLrKm5fRqwi_zw^?P+iA+Gi$Hy-CL5qT}75XnR)Nc?|sah&qmL;_TI?6OE#u| zK6qh>Ny?0YkqMrA!e|*m$Ra;82Int~&^HEF%ZTY1XC&Nb+=a1Lu_j953;5#f%RJ-^ zCW8z%ZK;KJW1&w4n=hSxEnn(1mP!*#tzc=mOz*H|s9m+uZnFjEvsi?%AKsRmf^po} zaQZN%T!bP_;&zrYZ~J^`)JI^ZZaxeWKBl65&3Fb=b$icCVgVv|!Fc)}z2?cjQuy8b z1x5leJOE|1NC}bvNrjLAWh(Nl{I9f>m@rv+ff!*djA@HhR>U;TE)yZa&xERF)_mEy z5$92aVx>!l@Zz(8=8-T41pieR3I1ZS$J{s{j~H)Q2=4+60RKpTFOG*T)qn~Kb; zyNg&Zb$ya}6a$kyd-|B%gyNDMpAs2mtR5FqzA|b-LnSgWuVuEB8rIrPnH~$e?(6{! z$|4Q8W!ku%g7A|f9|<~|h&+v0OKqEy5zUxS0ExI{$XaDC!OX2AQK{#8Ne)Q_!i%H_ zA6jN5tW}cCwV%i|AW1-!gp7nr88WV`kkqsAE9Qo=JDLdA%w@~0#*r$JS*<9OejfRhb2`DThk}iv) z5XS3;3kOsdeo9kxk)lIFpNIth5U6Ac@!^NrRoz|EAQcdcDElCLX6Ob`_5r1BmVoY$ zvVVV+wz+APGIv@Km|m3oP&ee^L1^rg6M9l-i^qz)3b0ivbgvKCwh*wrK49Bg1F*e0 zz{rb8UJ%1rp=##DG+qhQ>25MwogTn+`s>4VdNu3sl=x16lQ6M!!Fm93si>A!TUCfU z-YB_&-gN}rp#=nz)q-RnZW671gmKy}mE5}!*hj0;E5M)d&B!W}vSj5I~4JwSr&Z_7)RBN^J z96v=91RX&WRM=4qc(_1Nm@$D1&!UBQOx1>kNB6Vv7;nJPVPqu7&J+3!p9#jtVay0m zZb)Gv_HX684>|>06QH@v_8ZU>4$RBjbG`Z;EITFT1!R@SAAbbBYRXxLH(WTTGf)9n z5xAh^MFl$LFq5XJma6FZI5geTH^so1#$muR;er@GF{bazORbmq%-hBDN;?hSp1f)Q zkbVEnKjLry<-hvv16}{|_UCVZd-?kxUuc^4*B0)0(CO@VZYXD$2_Wl0TP)l-+xJHu zLHPv}9gOylWtwKkv@Cd-@W4+Ce((jqw%I;31Lgz=e!J`YqxOMEoi_EopzU=>ho(dO zU8~pMpIx^0o_z51^JkCF^xJpz9sSp>?Vq-GzTVQ{UEhWWzG&Opj;6`iw{$QSf7`pi We5`3Z`iD4S$*895yD+V}?f(Ey0!;k? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro b/warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..c92ee0d26be88c008a6d7348cce8027c59c46287 GIT binary patch literal 4407 zcmb`KPjBNy6u^^gRP}%=B+#B#XykL!cs1 zX4iL~8*&nJqh};iq^>j?#?a@1ml(bC=Z5bYJ=!orHpUr|@VIbbtdXq=qVOra3I18? z3l5V(2A?+cLTh26$0VOGoxQDIYA-BRCgxhfQh$}+e#6kaYNFj{1I*{4^kF}usWt`U zxUc^7Ud)8_r5}aOB<61Yyl<38U}nv{H;lxX$>t>&2~4e7du|j;5V;G+v%Bn4MEhFd zSMO#R3BYgxl+hqLNCG4^LIRYTOq2XyWhpUXvi1To{7@Rx1}UrvS)7a_sld;K>Sc7k z?A!>`AV9IoC4G4C_>iT6GS9f&Rl|-TSlT&&vBy^k_d!n zNe@1xW+AL~lFYTAsx%6xp3it&ccsaj4sl2i0=^@!54ulmJlDFpInsPr3}&mv5fKvWX}xU0?H#mX_+~o z+oL?XJxa^mHcFK{4G2s(NIj?<>hK^e^vEeYEwjaA#aRcK77E?#1GXpvwl)WB(G37w z+XIZeh~fn?j1{V6PRPQwFzwDZqt)&LO#5han0B{h{f!deKH4Ts>|C%OKwN67dDYex zqKr3)uAp}v0C#8sfn>2DS?z72wGJ^(JGqiu7Xs^WJ=&G0j@8*7Tg8efR%M839KRak zRu3i%tEv4O)ztc*YPu4ly~T2>SgnExhpIE?l3}Bh2g$6Vw+oG1UNH@AYafF2RY&84 z&=r$dwT&R2Wa7ynhz4aBCUM|PCmIeDE|(I)F7$G_`gsSDHy1qMW4H!oMq_7{^&7gi zT6>N^MiV3(KogYNQ3`mtKromwfeX*Fg*Qyq1q%;vXW=p4fT6=kNQ#{&^cfzPT#WsY z6A@jJ%tGwn@@EfpO1LIKbC>KdK#v44&u`D=>T|H_lvEdxbsj%?A9~eT@C0wTa7-tl z0*6|5wx|MITfiVmHAy1?OV#LIlzO62`Zsc)y7tgE8pFjU~ z^4z#V-o9i!M{`CD1FaE98;8Xd#ikt4WTKlalCio}F!c*-G9h9Um(7%1)(H!^bzP g75%C2{_;VkvQxXSMr--#OEvl)Ot0<2;Ns5z1G!F3B>(^b literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/5276888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro b/warehouse/test_ns.db/target/metadata/5276888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..3a5bc3213049a1042caed8a071de46f0bff7c93f GIT binary patch literal 4407 zcmb`K&2QsG6u^^gRP}%=BoL=PjC@0K8h>P)4^E5Nij|-&+wQ4~tcg8oOdZ>d$F0ID z7bLD#k+^f>j`~`5~y_wjtoor~kv8vRW%)IyJ_de#$XQMCbdv7J~ zgiYzId(Sm7iPqw;PkoXd)mO%wUAD6M#MeF9T?NIH9-`f!8gvn zOnuH^GRRa_QpR`lWVdsWdUy3YPlo^bU1R?W%=#8#3m)w& zg;yVB7zw~|0hFeb93%mf3Lyc?RHRA%tF)9DFj;wlXnrWPxlRfzLK-KNNJ#Jtp=z1A zTz0C3X%L`T>5?J5cx+75KxhMkKb1v-zgXxpCrqa!#w*s?cNIJK1Lh8;Lup zpkl1G6nIk?ESy*oWZDJWq!*B30>A|?!3tIQ>sxn(3O^&B@!A&EeE zmh|95(*IezGjW`b37*))oAqzYud&67yb zfS?S5GEj|@QA$rY3esul;EYx2JurJwEApgYMn2`7&T#9#U{k1dP)D-DvaCy)6V6Su z>s**-FK2}-3dQQ2Nm-c$EKL=vX18Sd1r1V}q1lpb|3y!jz4;JbA4F%qOM?@6{19zQ zV{JZ!@p9q90hNWH(imN&=n&r{B7#2zDp^8&cz$wTc9%3r1;i@KKFD4ex&@SdKxr8{ zpxdMD-yWr9Y#XJ_9UTJG4N?#4hCDn74Lx#1kIHQESaCK1HVcLB%>i2`0=DiB*fQ?` z*xDXoHA=+Ckr;^n=h;XPnQzj@jI(d*R8hX3XxaAd7Q??EvNMCm} zJ_=nvi)Gsg;z=f+jDl!Xc3~0+zHp-PIALNX5$r-Qm#bfP5P5UK0yc$fP-ZlCR$0HH zTC0uc_%WIw=m?si%#KpP!v%uEj2T>bRxP|?s#YvKxSfTEcmswGBOxhvp3rA_OfWw6 zLq>RXNiqwuf6L!J&?(@W0L@*pUx6NRV4mNe%hji|?v#`lkWC(c{1No3F=q+haN(Fv zKm}Yy;DU}973h@xM4F;ns;uMV&~!`RWCK$g`eT*|2gLB1Hh))MYTd|V?k=8Jwd3%` z)z80tumAi0*WX_M^YXg!`@Lr4*YE!P;g1(r-~3c>z*GCXj+-8|+xzWH%Go3WYHjF@ zg%c+G-l#1oKVzbe0pB*@fe+JYoAAi5@E?cZX&J3?zuU1N*qxTw8I4<=j_0*{9oBF4 zMjq=i*0l}S*k9bY_MSX^`uVd*C(T#yGG;FuC!7WSrdEGdh6I`JZ=?M zIlzG<{{jaj#NV+J5+4^%96519oL3xqZzgu^Bpcdnsw$mKXWo1Bdmr=Wv*GjF!CR?! z$;R~Wofn3fB+Td=sojJh!jSm>ul|NMm!_(tEV8xbAjikSP1yD(SJ_k?kD0pB?L zA`3W!#UO)C>uRIDu+gW2&9~0Jt={S^Y?US!TEWs_mEJ+!P^W63-DVxkXORftJiH+f z1@m~W!SsGYxd=oMM~yUL-tPIpsLsGj-Ml}F`Iw5vHRCBP)$Ic>js%F@2jl6x^qR+q zO5wK;a*PCEcmT?%lL90Gk_sUK%2Z@&@n2~vF=4Ut0x^O}7}Gi_?TBcSUdBR#p9xjl ztogQcBg(=M#Y&e9VBoV6%|c=H3I3}p68yy?kGWAc9x}dQjkBrPQ4lgWT`Rk_scaB#nfM z%SAg<{Dd%*8M-K!WL#=~4k{6bFUCNzs zWmz5f+OoO@E8I~kR#!~Q$|YcFTA*rmDwbcsd=YpwJd@WC zF~&48rURI-7A~AnS@()9Gyv)9F^Mzg6Npy=}t8&IRiM#HFHI zRBcrus(8cr271>aaEBHUNR|tdeY8!qb{pfgQz*G}A+X!)(XPC8?9TSsN>)U&szS_? z03$cGI#y;p2@JxW_EGor?u*qln;<~9zXdQdewxp6koV- zO{bs&o+9u-$A=1Z%0VhkQ7u*8@o{LnrEl_yF^z%|ON9$!_{5mLBOkS1>@#m4?$|W1tZAC|PYsXUZ#EB`H7??Go zFBWc;9{R(kp!|Y~CWd>{v`n*U!cWtJp&Y?qOAQ)kh7`AAu(PC|<(WBjV zefaqErw`BcpWoK^^xtc{Ki2lXscA6Qci{sE+OD>zX>xdP c2TaAE-Tn7ZG;L4+2p6oF)pUIymMxz9KSl~k7ytkO literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/59bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro b/warehouse/test_ns.db/target/metadata/59bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..ad5596d6b6dfb27b30170a2244dac3ef063de818 GIT binary patch literal 4405 zcmb`K&2HO95P&5`FpQ!w0<`EUhXv1)#UK4x>ZJ)9qXAMkO`MY<5KD4pF{VgnxwN4M zI`!P550E$LrKj`-+Do1yryPO+1q!t1&g_a5DJiP0NHC1mYIkP#o1dNi&Uscn_%w0H zY(n4NdZCGF%(Q`)2%fq^YiJ{%1zw^J&R%G~rwxpT7Sai>h`7hN4ReibPY{LY@Qt(Q zsm~cK1{rMDP#evqjUE+jv334!{Z?yft28m!3YPlo^bQ-EI#mt>t{o)JOe9h`khh4CsZ^q8Bbto%{*|UP=LsNFrI!vFL`vR z6#o2WhLHda7eHwZl7l2bQXwQjnTj;Yf0dRJ9TqDu5X}#THfxZ=j*!O5I1&>4T&UV+ zEVi9#VHyM|R=Q*e1CNbp8VGGb@Tam!@D~eRW{2s-VSLFNYg@4+KVWvUQFeP<*+|?* z1xv=73xU^l!Q6>Uf()x*oAd%Qj9lQS9fMw?f`OnT2LyfJAQ5-*AA#5bpi6#}G-4{o z%Zl`(yR%r%bv=w+ih)UdRIp^i<7Llfo^KqAHrS*y$?n7L&nD)nqPN+F3r zc$W0wLqjiwwMvqO_7j-~BpMMVAtAm}hK$Q9B=yAqf!Tg&J5#}ybJ@^~aij`le$3NI z(14%}f-+Ezl2J-eHww~8Xyb}i=|^DpyjJ8%zleOwIi2FseZeMB>!6Ngg=JBfGACRZ zM$f)9jH8?t?kE(i3npb{60kHaQ8juc%P(n=$_&l6Walq>!Z?}@(e*)e?z=QNmDdl^ zCN$P&LzpiYE}T$V_$`gmMT!pbJt89bL!go+#E0i67iD)zgH%AQqU?k0xuH8i*$0%S zo&&l$%Kpt!n)-E4gtYFuR-4uDx~4-tO2+Rz$KYLrmlN z!w`3RF_~CRt&gat=KoaFwGgcxmQ%@U9YnZP?FkbU8=X8z<_*17Xx#FOsVQ5B5TqZv z8t;cLpT@Fn1o0#jPn;lf$}UXez!!Ej8YN7uB!X4w<#P3l4kB+ZSimOm49bkg&MNCS zRBN^I9)E%+2wEIkS1%7J*OooKWCza;oi~>-Dv5$VYCeRk0ThvHyuAsz1itIj?-ndIqEyK+3vQ@X5Zn`D^Ro(cQ=2KfQlifA?8!ulA-||E;?BOSJ;ydcD3^$3dlD*{f7) kIJ}Lf;-|j<$2XPAUhS@&t*J?v{Zr1~gXOh-m|Q;he-OY+oB#j- literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/5dd4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro b/warehouse/test_ns.db/target/metadata/5dd4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..875a83a432576bd62e87e71e0938f4862a2f4e98 GIT binary patch literal 4405 zcmb`Ky^kA36u@oAoUTA8BoI}K(U!y+Kf_1>h6A9q7Rf;pAgK@%piD)YFPQCx_Gl_tHJ1&&7)Po==G#1t z1oa8ZASeUXC>f>nbRs_uLK|l+OYec%^IDN7{UY)y=X8o&_XG=|)bot|%0%3npb{60kH?s2bgp<(Je?Wrk);vi%o5Vf1E0biE&)dk*zayFIp&6_KpU5Ysq* zHN>qROeR)S>ouyW`9IZkB}8kBLI0a@qq`*)#NjX6v3h6~4Z z0xIAt0vB|=s6eOeCDIhtQe_<(^iYxx4q?Z(n}&?2YeUG=93(X#D>D&p$l>=J~(R>a|+!?>cUI(CO@Vt|(`d2$*%C zFBW!~?7O3mp!}SP4u*S2*L9<#8}KmTBj3~zJoUETK6Kp!>!|Cr&7OPMK5&@XrmRof zBZpd)xqY*1^!Dest-S|#9)9-t-f8pY+l`&ZANA(9^_{QlHF$3}n>$T>sWodmwORvT j-$GOI)7*XWVXd~)xFbg!Y7j<$l%pTO^u{g>R`>lMgH%q% literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/5e92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro b/warehouse/test_ns.db/target/metadata/5e92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..9f570cc052220cc2c9461ef5aa0e38a5b3ed97ef GIT binary patch literal 4404 zcmb`K&2QsG6u{Fosw#oXN+3=vH29n}{z#h-PKez~mDsZEb|s`Lvc~pgW9r!6@wio3 z-bYT)1%Iz=`)}V#ju}q0J_0BYQIQ-kab1m^Ys|pYI&J znYd#%p)YrzYhoHRZJ;HBr>@YN+Q?^tmuQ2F=bGP??lEq|STkD_MB!6- z_Q9EAV9IwB|~`d*odZq&;|s5DvJbvvCw69m`)tVE7n+>iXHg@vy-*5JDbWz z;x;O%7;7#B-qZziCsqU*R>3yu1!Nexz)w2?y+j2AK}QY<`o2jb?&24L*a4swzeyS~ z72~QRz3A>NmUCSnM=r&{Bu^fll51a#$;o3Pql}f~LdsW0Eomr32IjTQmR!R|yUEjI zN!N`%fI*q10XK9Lx04ZmnB^luM-!380c)ylQ{vEsc?6J%F+J^0Yj3t_F2WTE{`rU8jYL`g`9uaqIFGv6Itgu@u`Im@X3uLyp7e{zr<~I%ZrvAb0<{k6NLE-Dbt!Yg zrD1gKE5qpJtZ+r4SY0wHE0chwsY2E0mMp)bK`JveTaxX+=n11Y8=~uj=&A40;9MR* zM4Ql9n+;*ST)1#RW#I!Fql*+B;(J6y@P|MpONbB8PcF;uk_M@OSVq|g*>gj;fU*xL zO+5#6dzAg#qcrtxqm;SRgurxz)PuSq4-Y~^kDSr7GFv=W>~(;RLZN$oz@~wK&CLOu z#s+}R?Eyw!MDl_d#tKz3C#2z8m{xb2(Q5Sorq$mZrqwH1f1|{=`rCwwoeS0jh)YE^ zuiC0Yl<@}9HT13yaEBHUNEQo{d9+Qm<}t=;H&=4&LSP=RN4xUWF}vGiD_IfAsthrW z<5xr6>cM1UHML%&nwtMpO;S(+lx_lbTwh_dWOgwRd$SJ!pi34BQ(P)$~v6Ki_p_j|mFFJ_4xnKdCz%?i{8au13 z-%zd9+H?FdnjokHO;Bb>Dd6D(L1D%eECh1kF4&mQO$a7}>bE;+0~k2o;TZ_nlG(^+*&$_vOkkDuOyUNz<{!5c0d z(+Q}6s|Z}s@uC8qvY$v(R7;h0d>oo?>6>g|LPLMV5@CZFKGkOL$V;sodCc9%^Q!ji zZ^`h*vmgHc`mKMyd;h1aJN2J;>-8Uh`R0!oe}4P#XSG`GuN~a+pxr)fUsKM;5g=-?U57Uu*IRn)i1kgULwl{Gey7vwbabyp z`(4&zPXFlm*g2-Xk#jh|Y#luO@X@DF?w>bazFps||Gv}serNBiofT(3TOg3C@Ux$Atr9t$a-wM`!RR z_$OH)I7|i^eAdznt;#}=NxoP*f4h3AU0JG3EVP29!Bu*PEkp0Bjdq(YFrP;2*HCjd~J>59WCXs_PR;BmA?0Kyyl712SOb9l`tp}1%pw>Yh$qUP(F6B-* zr}WUdptM)8!WB!!>YOWCxdbdt6{_^GWcdXPGnJwFl6?Qmo}j(i5M3X}XMxMY6LtI$ zW5N<+HiYqV;lcr(g&(p6U8L!dz#}q-F9KC8AwIkyJukaU8KeVZ6=fe}&kfxI%08g9 z%mUEOQTA_+(lWP=Qsqty0@DpM59)?GJP3TND9Xn*+A! z27s;Y0Y+X#@q!q}3RN;EV$oWd_Te_8)$RdIyT3V1yH~RQT8VG>w+RzF7pw;mmzru( zwRMFk;|=3W=v_y^9a=yjxm=K}JKIES9blXu7D{eh2&{wkXs@tn1g=53(b!q# z{f2I>)}G^!(FDmx&;;dnlmZ?u5DaEa;li_O;WbmWV&TEfEIh&+FmxCx$*}W;KEvaZ zi%Af1BH~MuTZsKz@$7+43D*Q@?$Z4V^jHA%;`UswKHaNMNp%5P=kW*cL$8_$p5hG` zj_DLsz*Ph;=y*|qPB}=GDY~V~J3awTxAILsFkw;P^He$@Mof*_o9a^Q#vXTf@w}?N z_56>|zW?)g_Qn10vLBLnes27BtI_!B+t0uH=igtx9Mx*Izw5Z;L8r6dxnzQmV?fq{ zwpcn*y6=rTl8G}eI~eU9YErX9scCjhN-4g=3p|+kX`Af>)3STM)oqXN^zC-nH+j3q zS+CvY9`E)oN`1e-Kfi44J-qwq<0tn{nlIjH>@@zWH-D_}d{eK%bFvjs7!$X literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/61b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro b/warehouse/test_ns.db/target/metadata/61b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..a77b3907508c4f1a75caf4334462dd8969f15466 GIT binary patch literal 4404 zcmb`Ky^rHW6u=!{wAuo#5Flu-7`aY1{@B}mP@TlBI0=^HZVw5qf;F}$yS{a7Gam0M zoYGQKQc)oadj0^ADAZQ)YQfXqT6)X)`=^eHVwW~JTZMMLC7K;$}!`pIG zFpm2gPVc6ai%^6~+|E+wH&2H~eFSFe=G{@k$5ga08P8yY%#HK0$M}LZ&Zc5VVZ_{Qt?YwMWg~GH z6)YHQ&jsGp1v4iu2(p}tZPE+KF!6z(aRhpa3I>9X91!$2c`dW0)UeTR%Jf*$ zbz=`;P!?&xEz`#B6oelY`AE>wMC572T58*rcr;@H0VLv_A#0Vn1T(jeM5UhVCpjb$ z2rrTzd}x`KuvSSj*M2P1fFvWLBxEF1%8+qgg`}Q^pD{O#U2h`TVlG=|HI7t)EVp@* z2pSQTK~M&&Q8H@j=_gS>j$NFwEWHP2&uT@P^z+E4oYM(zJrryVwGQe?QCQ}6sc^!D zWp&+4%j%V^a7Cq9T`(!DkbtFWfvVN5S$;{QTxMvoq}YGe6IO3JMAt{jS?JT~L>@oH z7}M044q?1rxNtya;rld27b!X<42VeJgFq!qh>sx5F6!=*2C0BpM%f41Geft4vJWV2 zvjlW|l>OVIw9Rd!l)2M_!1SX$fVv?M4?^RB9Mj`ETRc|Wb%3o(p?i72wuON0%>moi z27vAD0Y+X#@`4z~3RN>Frtw;sPIsHp>hu7n)88DX)2ms3qr`Xm+k}ao3)TaOOGUM; z+Nwg-@kYrN^sXLohZYb>Rtu7SZ<}cCLyXgIspQs$z&>1$cIByKcelq@vLcdI9b%rQ zFNV0)gUQBf>byiXwg0D@u7v1pv7Aa)t02Om>W-P9*yxl&GHd9aO5;{mOhef^gdly< z(fAYfxb{c2-5d zp<1i8=lByeK~N8xpu&z?z{3TC!i))Ac$O`^VX7`zcz8PtkMITz9Y#iS>^z~*2$*1e z9L9|BNTlOt>J1PmJjs@>1(30rPk9ywawx z{rbyC#y{Wu^~sNKec$~1cm4W~u7COO55Il&^>;sgtZCYx4czgd)7kG_QO?d2K-Ph_ zSh#VvA9x)>`56-(jP{OcT2{xhOsiwcFB2cjgmHMU;aM%hukb`;R|-`rt&reqGIZh;BAov@QK>IInSLb;UZVFep6kA+_symr(kae}xW~8yW6f+$5QUfUjk9l3 zpEH;YGT6MS7Fv~s9u;i4bn$KdQoFKLnwV<^OZ|0vhfQ7Ws)cqNO)#H@!iW9vmfRGK z zmk%_QLIAV9IwB|~`e*qEk)(E9{`DvJbvvCw5sm`+EGSFEwO6+89=<|G?sA8jiei94vE zVyv|kcv}}NoLCWL+6CLB7m#7(0zZ8KdWi}Kf{yGH^nH^=+{Fih*a4swzeyS~6_ctW zqv-A|mUCU7M=r&{Bu}3_A~(L6kii*|QO3$~A>}KhRx}hM1M^yDORiz7-Q?-9qU+Wk zz@W_1fSZPe+sOz&&hn9&DH+j(c?6J%2}9N@a|vc{8Hq|g$Bj}*A`qS> zJ^0Wx3Sq61WU2jBrU8k@L`g`9uaqIr&=~E7R;a z*QVLcS>cL8vASYXRwe;UQ-!M8DOr9^gH&c{wj|qs(GzBOK1A0C(WURw;9MR*M4!@F zpATWYT)1#RW#JbzMi(hM#P^7Z;2(iXmJlDFpInvQB@I#mv5K+>vKNN#0A&wQT1F1& z?kIbAM`;-M5D3`lQ{5&6OG3S6Dx^e7kar|{j!6|n+q1ODO`gxqp`Ef`VG}u zZ9K=%&;&t8&;(_6lmZ?u5EN$2;KH+N;Vo0OV&Tc%EF9ns7&?rEq}X{vpW!jV_|y*> z;n5ArEX4jTfA>JAfNKIYcgbM|dc=WwetRxgpQClBq`ZJ^^7x}qpjVAKOYnvZ$8-WJ z;3@(abiAlQr|c)v6xC8?9Uq6LTlyv&n9|T6vqU%`hR^i*`|?ujMjmtb@w}>iHaNC_ z`1gD5muFuO&VI6f)Lz}ww3q+<{@b4~Ui@`dtJVIlubHt_6u>FQFgz4Sffk)I95_oBKOD<)rT~r60I8EE&SVJ0kvv(fDUv-NZK#2k z0`1TO1-kW5Xs0ge+%;&I{tI0TqeFoX-TL00NRgDH+KL2QqE2`3z5Bh7d-ufqw6*(A z=8xEz{(0x6Atos^j*Lw3+!sdM7=|ngGUMp%r4a_kk<~V0I>s3Z4;Xi0tX-^$lK33H zarRjrat4z@2Aj6kLc6grpn}bp&b}>Q>NJ*06HBdNX}C=9plzsKbmp zk(+{X+}B`wH>F&JB23~=mNI|qY+%$!V5V-~9VUECMdy<745sS#uAjsLMDBp`^aFay zlRc&I+xrDZ0x*04Wwc2Nk^o7CkN{;W@~r$-T1rfqth_*sFc!wNO)4v5nr5R!NbobE zYMC`(c4owR6rot@k^wvfY)JD+7)Jzus*41FvDjyBoR2-m8`e1MiXDa#bF-DQ_t%w; z#9dU-FxH+6yr~OjPHYIWoQiGI3&=3>fuC^nbGmEc~3gVeEPn!J4^jnbkN_1+v`c zX(DJuPzFI6s7A@CrKg`n`8alQ#-j8?Fnd-j%A}u1KINQFaO^vI+@Uni^ECUd{4L8s#!WizUVWtDdk9rvr3-l$?h?jZWq9 zLyR#^jp+c!>xBykR2F_rQ*@D{L&AWF1pW}HWC`&RgxN*iUD6;G5Q`}LAbV!$22l0^ zrEQjgZjZ8mdz7}hX_PW|+7Ot2lm}2ZJN-?<#Lfll0mP-E zT2^gUA?kReq1~3tVX-^)UkV;V=Gw^$*K-9 zPt!L;+~~n%V>NZ&qMF+OQ%#pbbT(K{C97o+;ZSwQOi*le${?9F^iHL5D=Vga)M>l#~~cRUUuzA@r pmb z;h4@q1zbhof{qsz=#;}unxa~&qT}PxbW7h917jM8LzW2_#PEqReP3Q`{Ul)i4xU%q zZ~ugU{A>RB(>G6EJ-)nt^|Su#9bNzW%U{0u`@8G!|7vNPcHP1)A9cHX-7Cu3C;?_& z=!=CLXM2Iy6_lSd(Zz7@nwDjDP1CgC$uzt051$r%!&k@b9M~RZeaGqS_gK)`A2Pe+ zStjeSd$wn>1KM|3us6GH?LK|*?2{J{PxaUD>D&76t*swg+h4Ubc-FVz4Ii{EZClgi dWK`4j9hlbK_kR|IP(c6y literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/65f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro b/warehouse/test_ns.db/target/metadata/65f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..f0fd4e0160303f9052a21b96a216eeac9a94e577 GIT binary patch literal 4405 zcmb`Ky^rHW6u=$dYPAJgA%Uo_7+IoAHvZUbK7isRZpBKl9QPrLRb)-<$;PZ>oAG#8 z;gl9SBq}QCkPuX~G<4{66@LLjqC*t$AMoBx?AT5&?CvFsB6~9P-kab1m^UAeK56W~ zl6n(1rGMRdYKU3FjDe8~o_WG(8smV4ergQPo*IE~46LRR(J9V|xzD%@W6gX`7)R&u z#@VM?z!^*i8EoEE3+>uMp9;2Ix_Dc^)Tu3%CKg)3(qNt5Vbf5%YN6d`6U=9k2w*?F zB{v1*xUb>-ZbG>TL=Z=eLEkq?%su=e5IX?0<~KXB6LJ-Z2|0d5WR$ULTuAxKs1*&R$iTdo*-~h@)ozOP zSkZND4`5K{X}~Sh#_i;UALRK+(9uL>NywUN+mwuG%6tMy#DpPhmAM2nw~9oip6kUK zBoPSDlOB9%nWeB+NwU;_D${_(W1=LaBv8tbaaDz+o(7*WH;CNPOt5+`TV^?qRDmqE z`8XCdBq)QR3{<0JRMOLn!)zM4IAc|M56oWFiX!Qkkxx0NGu(P0*c56V)RDZfEbCJ4 zgbT~+x|f#KD_G%*Qn9*VQdTYjOH+-i)vZ{5NyAKLXuc%hf7ugOZ$3oVhw*vf(eSZ6 zeuy!pi7_9-c(rihfXc!TXo4N-6aiD0kMj*53(1AZUJQ< zP}*hz=;kQmoOTN(H!cMB(Pp%3PaV6vJ+_h+k*ul^ zvm|*j#H}7oHda&TC90|YKh<5GoW`;o_IiEJA|JjunAQ5cV^E=-d!5NY|{3iZnlqG&Ey$fj@&%8ka( zD(^Q`Yqjwle}pCoI)WxBx1$p9aDkvOV+I$VRSU0~sx=FbZf4;z-hiRQNJ)mBC-fOU z6O2!Th!GxNk=#P;-->4+bPBj8Ky#NK)S$;4m>0L_YV|o>cS_0&$R>}UybHZ*!dZ$p zTsWpvPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`M{J$!I-7O1u=YP%wLz6S}*pQw}zz;rXJKCw7S*zVH74*W^o- literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/66fa771f-7647-43e2-8f86-fe095e1dc073-m0.avro b/warehouse/test_ns.db/target/metadata/66fa771f-7647-43e2-8f86-fe095e1dc073-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..c9415c6de9dfaba3d03567ba5442bec77af34f0f GIT binary patch literal 4405 zcmb`K&5zqe6u^@-TI~U?kU*Sz82OxRJoYwUoQmj*m0&6D_Oy!3#2z>9I<~RLyUJF% z!3n8?D_71){11ST$_cJqI9L1!2#NP*V#jvUu$v}|B6~9P-kab1m^Yt}pVbfEO6&=r zvR8MWYho60ZKx$8PHmyJG}q(4lW4>9=bGneL)y{;HpLlX?C{uvu~xRm4}+)h7V|Gs zFXk{AWbk=QEi@_%9VYm4>EdnuQnRvDnwV<^OTBe^M=ee5s*QH*Eij)4!h`+9ZMi8J z$9;|FcOw=HPk3R_P9knM&qrE$1ZFn$yKWdynP^|~IDx4RCB0V4Ooc=jH1y6 zkzRCn7R$M=k3*YbV3H?~PRNxfCgk`rkx|CWaUta^qgFH&A_MbUW=pPNtKH=3v7+n7 z9>Ac?(jca~f!oOlKg{xxpreUMBcHd_wiy|-ggXR~hzUp5Dsu^DZW)P6JV>dYNwU;_D${_3E>RK^;wfdwxU51_PrPexd4V;a30}=*su$x(707&>XQ5y| zK^X*Ppc*Bkl%96zr_;c~8LQI!VD_R`z9v%(dHVs*i#tV{xyrV3TsD_MTY{8VOWwj|qs(G#>kAEE30@Tq4r|4be~M4Pfm zn~z|;T)1#RW#K0*LKi7I#B+!U;fp{eONbB0OD@Xpk_M@OSVcJi*$YE=fN}sR4Lt{R zdz6FQqcrqgqm;SRg21%>)PcGo4-diuhn%w0GFv=WtWAJvq0qfKV1puHV|%~`-2$+& zJHW_`NL~=bSfNVh1T5GH)9mdsTFpMdGzZ(mH2Wp%ZolEs2#+}kBuqlRp zJ(vuvrsf+|Q{#WC=~{^94$G-zwGJX2s@9YXhK)`hB#VaLEHrL;#nhCoBM8#h9gPnH zJDx?dZ3OWo6Hmr|I4-*|iF{93q3b4GtR#Y2=;dbE;+0~4`X1S-=53W=V;w2DK8+KJbv;a^r}(J6TIQVF`a-4 zxQf699WN@-DSL@DMYU8}#}`A>Eq#*>Oj+Q$JP{U%iD%mUU3sasLxp!0=ZeLA5(2Xh^u@vo zl0#?Q5iEYnMF+#Zqw7@fQ2f#1)1edxD3xz|TW@!}F6;HE+wOIbdhH{V8|}W^@3vj8 z5AJd5*m}=AT->$}9^QZS*^>un%~$U<_8NcHn?Kg~zNy#Xx!G*)HSwX=tnJlm4SakX iO~p@h|L2ctwY|oDIoeQzF#3xe{Q#yn_F=HP@BaW_^i0wK literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/672d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro b/warehouse/test_ns.db/target/metadata/672d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..65df2497c5b61802e755c255b82c74f0bcdea415 GIT binary patch literal 4404 zcmb`Ky^rHW6u^^Qv|1!sA%Uo_7`a5r#vi+z4Pe$zi~|<>i7_~PVg$Z1uv$h$r#OQPp9vSnTG^VAM~~r6 zuusxJFqjN7*u13|+LeVqm2A0m@wR%YQ(3A^%(a50!79DOmZ5jmM!U@xn9m{^zz`gN=%rny+Dj0lE%D63M(QSClf9e_=Qlt z%vvrxGomyMQLJ*w5FUIsrfDdR0l~k@BEerQ@|YW?(-9LDYn)BRj)Rc7$y(V5o61Jw zE-I)PYcB;}*98kFRs>m2!8YXuWXL_>XB>lGqJx2;BL@V1-y&Ri_(LFe0BFT;ibhQ3 zq^ig)x;u;IT-W>DqZpXv(Sv*BGLRE;{E(<9W97I|^0iS{G!!BO^IBy~u3@9yL7An2uuL1blM%k3U zB@GG6ASeUXXc?vS^mv#~BNt~}mEHrh7quc!`eo!(A?OUZ9!NHYS_gF`D=f>plsVzt zvbyetW%Y7axS~+3&Y6;xNx;%np=xzYmS4~?RT-Ks$@X9Lgw>l5(e)vJ9C$Q5RmTr8 zrZhI@Ll`d?E*#KV_yLX4MVbx?d?Gn~5vXDb@!;p>M z%mLjTW&h?VZFAcwRqnJPFugGKp>C+dgV4w)C-kJu7LOHo9bl_a=w2MKZ6RQLbHKK> z0bqN3fRPtbydZ|LLY2&kXtWll)7@sYIz52t^f!m;^h(xWEAgHFHeq7tg7pC6Qd7;V zwyqFmydl4Y-gN}rp#=nz#e!rXZWFD2gmK!!Ji3{M$9MyV4kIBccAn5@_)Ib} z4I)Maza*K3*uUk^KIoKiO@QVu*{?w70+{Ew=W_KqSanLO3&=W;-+LE&)mX3uZ@6$w zC!hkZB5*;+iwbngL8462EmhX>323^NZ?b_Yje;>tqzhui%$UEfF0~%_nYWAQRn7nA zrO*EP@#`Owr@P<2^7mJ7H-5R*Xng+t?|=UG?{~kxS*z9ls^g9aoz8yek_tBAfUE;; zv2>$k-yd}(6_1(hV6=BE%Q6c;Ccc|6Wa6i7wvW2DZ!*VkA9{VOec;eun|fBa-Diis z@A>wq@AUQ;m#w|~cOHE7=qd%+BcVK#B7Y3`_{tpH9Ol|-G literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/6882678a-6ff9-4924-958c-22b926e25638-m0.avro b/warehouse/test_ns.db/target/metadata/6882678a-6ff9-4924-958c-22b926e25638-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5930533c15997c3e4caf9abc3cb6339bed5b34b5 GIT binary patch literal 4404 zcmb`KPjBNy6u@1#sw#mhBoGI*LL;A(#(&!U;{t-MR0+zm+dWmmn%I+#w~lSb<5pqG zl_Li@z(?RC@DcX15)y(BfH5z!tbkt&eIF)w04 zLxM60%0M+rMkPJHILs!Iiz}9;cfss=ttgUy5&4vJI>n<0f=!^-K^@5p%c3sjPPnqH zj(crc-GUYFC>5(KCS~Okur$@ETAhmJ*EGyzhUQ!H^Orqgb!P)~eHcFpJQ`le>xUQ< zni#VI%vTE+PN*#Wj3($JMTZ1F5i$HDP{|VF!w=G{s=K5?Dj=3o_CWUB&@G_s0ZQ8} z0NovB@9rpVbK59o?ld4Uy)g5kZph1n(8wp}^t{RzuN8M4V5?Nkzm@3kW331<5|yCR)3VaoQ=A+_@0g?e%C^-a2+?du$~uB3V@-W=ZmD zh+DmwY^|eAl!H~N|{(n1gF%?73voqMA2NZkWJtjlpBqmRo-u? z)@toN{s>JFbO=pQZbv2H;Q>Km#S|Vq%NE`;RcjWu?`GjCzJQ^_NJ)mBC-fOU6O2!S zh!Gy&klaG---@vhIt4rvpt(zrYS3d2%!}7^wfY>dx+UcUWSz&)K7n2};Vi`$E?m0-bV@N>fxzm3Mp`nr`Wvd}2bQV8l}4f*3wEX79*Htrz>uJHY!&`|-U$ z|N7^{H;zw!{~^2j()mMwzN_os|Mu@MFMoRR;u}rV{@%e8_gk%_)(z!s90Rfzw8g@W z(j$M^5|lq-qJ`1kGEK{BS*B^i2tF(vTBaqxnN73V?sn~Vr%Rjd(Wuuv?%Bu9-bvSM z+V-$#x0!v?cDhIN$JXJ4j~;&U`2L0d{B3<-|8-~Y=bim;cQhF5d+>n+ZBN_RG&y{0 c7fi*!y@U79G;Lr17#FOV)pY#;mer5_AM=DsDF6Tf literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro b/warehouse/test_ns.db/target/metadata/6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..b0ffe0f20030087deb4e836677a9ef0aed2d1df6 GIT binary patch literal 4405 zcmb`KOK&4Z5P)s373F{;BoL=PG;_s{=aIw@PK(%xl^`tH>?yKF?U{Bwn|aaGlgO-m zKte(S3324gjpP0Zka+w7Zoq}Z3UPoxKvlPAJTvy1#A_>>jN9E+)n7fj`oqza`ra#v zGhqRJe&?wsrZLk7S|WJr2(6`!J?6WKHaLH(d9F4vT3Sd0oDp%CaT~^3*&06zFW?(z zAEzE?Fd1a9SxYT6D+^sJ*kbAY+v=rOWvMhV*9w+;tMm?An%Y$x?bcghJ`05h`{8Z5 zDHz9n4QF>_%7rJqC~PM&bDHNvtvmuV8~WXG!~-hYSBxhxwPEf#Q7Ayy+JHto-h6A9q7Rf;pAgK@%piD)Y9SUE1Fd}Y*j3ZSb^KG6* zg8Bqy5R`#xl#Eh(I+33Sp^Y<^rT4(>d9BEkei8YUb2`PXdx8Z}>!6Ngg=JBfGACRb zM%TVFj9$(PR}_lXC6lr;30RscRE=)Q@+<16GDEW^+5U^3FnY5gy55g2Jcs&c^7tWI zKx1t-gz<9W!U2_qAJ7yFIp&6_KpU5Ysq* zF~qGNOeR)S>m{nG`9IZkB}8kBLI0a@qq2k%0!8grK54Hu5- z1XRFP1TN@!QGrg`OQb2PrOG-!4o$c8O*RnF&>OQv*dT^awb|?PQtL!6b9V8(s=f8i zn}2Kem%o1Y`KQmq(|`YL{Cua;`0lZ-4u#UaQsqs^gXioz8yensPRYfLRCn zVqu5LzB}p&$}gDcV7PY--O%Bo!vj9>(BYqMbYMi++j{%Rar8s$khU#KY5TzG>FvJ7 z^tN+2(z_#h+D_x19BrsU82v$xz5~-6yD(VY_kSY8PBH)h literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m0.avro b/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..2bebb8f8a2eab0eb9677ec191e3fe9330444e0c9 GIT binary patch literal 4405 zcmb`K&2QsG6u=#~s(L^bViBi33_d4~KhiYGo)2*IZWUIM zIB^920M3Xj7w#Z|(4P1M;Km7Yf)h91n~5De$%ZzYsI{EQ%zJNs?_=IP96YNXyq0<+ zHl}~>JU7H7VMfnL115iet6d(zZR0s)BrXov=U!|qQgvrVa#0Vl`OzWhyBBDt;iiHF}6RMV3 z^JV8ol!YORl`iSSi_eBM3x&}m_)}FR_=`mzbE9lLV0^(EXH&7mAY^X3R(5Ms*+|?) z1q;U7bAdN?!OV#Zf-I+GoAd%Qj6L9IoPb`Uf`OnTdjx%7Co%W%K_GSj=z`xQjf9HP zq9U{G?mU(YT_46C#lR#_A3q@1ff$jKCqzaWtHyKx9Ynd&DhK+Vpq{ou3 z8+!nQGEW0;nKo`GC;TYSM}m$fB1=M6SKFp!KvU)uKq5vAS*y$?n7LIXD)n41&LD|E zc%Jm&L(43MwMvq?_EVV#BpwnaAtixQhK#E!B=t1-l(|9V4km&v=CWm$<46_AVw-2N zpdmpS1ZAKaC8Ls_UL0oQ$i*4U(mP=GtX33BKaYIMIi29v1Hr~n>!6P0g=Josawl9` z*0FnKS)GCvt|%3&OD1LI60kHaP_>RLmS52@lNp*X$@gFOgw>h$(e+_`5qLB_lgAG+ z#xyaeeHgD6E*wx<_z_LeMT!myd?I4_L!go+#D^cGmsNL3gH%8)qwIq0nW0-i*#(rg zSpd2{%I@t^+UB-V%G{|#V0vNZL*0;v2ceNqPU&ftEgmcGI>1(`(7iff+d{zh=74Q$ z1Hkt703$CVc|iU036)7>1V)2Ud0qr`W*+k}ao3)TaOOGUM) z+NwfS@rLm=^sWQo4lN*%EEgpEXq#y5Hpc03q2$(uz;3TcyYkerkGIEGvLcdI6=Ieo zFNe6*gUQBf>bycVwg0D@u7v1pv7Aa)t02Om>W-P9*yt2NGHd9aQsY)sOheh)hai2~ z(Re@d_#}~SBZw!tcrpm%LDhw65(dJJhr^VKr9^N_y!7H@dxigubOa{;tdy$ z=@eAJRRk{Rcu|2)IY^}`s-?<1J`PQ{^i4i6rcp3tsc=CIpBU3O<)zk(edg`sd8Ix3 z;m12yZ-4n>=j%6q{_2|#9_lZ4bp5x_zW@7=e}Dh(pPHs=f7Niyy=L>Uc}+PR#lWly zeX($(^w1wP1?3k^G%?(pmStM-u*@dBz{4_4{BN50X_$?+?;Len)={I?WnQDzYSRX_ z+g4*R99o{)>Kxn7;Ba=^I(YQX#+McG# f*VlD06+gTCKfSMMd-}ULVa2GX>-#Wmao_&|j+aV+ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m1.avro b/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..73258991fe5db78717b286e3b6f666aec284690b GIT binary patch literal 4406 zcmb`K&2QsG6u^^gRP}%=BoL<_Mm{HvKicMFPm6XdR$9uk+dWmm8rze`)UnNY+$y`u zb%i(}{sE3iAP(#w0XJ@3;D$J^khpT>y_wjtoor~cNt?)-%)IyJ_de#$C(h^fy>}9K z%qH~pofn#z#!MS%iQuU#w3asVS>Pqw;QWQ=d)mNgX(659jEH-T+c4J3)&x;_0pB?L zBK0|g$smKxT56$LS?E#07E9;fRxhijc<1I1&>4T&P-R zES8;XVHyM|R=Q*e4;~xQG!WW=;7?_d;4c=s%ns9u!+6CSYg4f!KVWvUR`%hhvXQur z3M$5$3xPLv!Q6=zL55YZO?m+tMlSHvPCzeF!9dWF1A@M9k%+taK_GSjXvJ@mMoh)H zsz@)oJB#I9*Q3a#7?|YQlZWKm7h`hrl*lM!<+zaYl~GF?3Xy?%Ewd%pu+eVv^jOk$ zV-H|ZW@*3;-Nfx=gdb=5NYK$lq;bGnYTJ}JG+`bABx1~vwaQ$AnOjDpQqOjy6p{#p zXGsq}H1tAPt0Y-yKb2`fq7hLN65=am$hfRRQcwKn%=SaunF?0TWkWB|_rUCVt;myp5&4vJI>oK~f=!^-K^@5o%c3r2PPjCT zu6<<~y_^-UC={zpCS_$3uryVu8r_oRS2RdvhGt8${TDr9^kzeJeGpyvE)CA)@k6u; zjkVbj#><5Z2UHe*Ok;GBqCsALK8;rYpB*_J$cso`5W`rZO6G(#Tnp3cZZle~9>BEvo5QqvCF^gL_*Q?LFtKyNdH`{$sOD8$ zRfsa)Ai9R$)dB9%0s_fmK{AiFiPk*EIPK<2Ze0k>quW7#%>c#?@HP7pa|7bbDw3p*N(5+;@s!7B7}x%x#1kvA7CU=z3oWkzFXmGv8{ zwOV_QKSdJ+b)X5#>?j31Tp%dSn8Jl;*}@y9YQ@6i+gW&mH(=;65|U!)34Mmg1mhDw zWQ0f8B(o6vxBS@yodT{2(A*^l73dKM=K1ZpTzw8#os#kbvd-fV??bN|bC%!@7mn!! zRKQgPF6eksflk>^q$#SU$~ry{O}F$-HZY-~KVpfnK@6X2v-jnt){Q*o?&5h>`}XKK z{oZ-`!%zP_r}uyVali5Foo3^&Kfe0y%kN(O`&k2CwZH4Q=Rv1)(7C3ZjU#~8fyP+a zVRGO(9YOg86CI5Aj$!CV2j1BSKI$-}MbU;;4}(%-g-_8`Tk*shjtQF&|UWxMnZAZkfTTi5fHDQ(ULZyg31eC(r4Kq=BEerQ@|YWC;{oFf);ODr9R?wD)3vf&o61Jw zE-F|s)}9NztqW#OTo7bACEKJIkYVfrKjQ@S5)}*t9oZx3`#OoahYtd=13(x2CTS#8 zj20D{Wq0SXT%UYtP^ zf$%)(!H1Sv3Tu@lbM0p`4M;pBNY-@CkE+$Q?`sTg+w4EXR>5ki|C7 zV?jfLG6>2*HA+S$J-s;0#*vFNmZf*V>{+cSl71fflyf@4tp|dQq1Hhi$qUQ8F6BGz6?AXp3CEh z7-O0k(>{z>3l|QkEPS6P=psdj1U?Zld=aQ*3Gv|v=~dNT(jXNO%P6}bduHesP<8>O zZ5Dv;jl zRa;evD&8=@f!=ih+@S>olI4PAA8iw@eT;G1E|lE45ZK4-(XKpo?DqE9N>)U&szS_? z`*FGVDB|&+wUG zd>llK@c4%07GnQay!)V2z%>DyyYz4Yddz`&aeJ;-pVq2VQeHsTdHnP}=v5QWQoP~9 zF`a@6xQf699WN@-DF>-EMYU9U$H$@RmcGdc#xx3sEEO(@;S*zePhM)h*k|58o>$sW z-A|vt_4ObB{QT#=AOC&$=0yK>N7tW!_tp1beEY-iU)D5D`@4o)?lqf-%^S+uCs@YeNX?bw);(O@3Wc)@A@u0@I~9z_B2ht ezPbaZ;%9gNjZ;nA)8EAjD@HY4--l_7`~D9H`AdfY literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro b/warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..301de8de5f3e6b0ed4630252c094132eba43d088 GIT binary patch literal 4405 zcmb`K&5zqe6u=#KS#2e>LIQE>VdQhN@kg57gcGP;wNhD1yFIOfHL)ifcOBb|$GZwu zPDn^xxN_#kf52Z*3H8LC14kr;5GO7O!Fw~YV>@ZsO%p|yGnsks&F_88n@@(%8~bmk z-k443Z?|3;Vwy0cZ=`}}o-mrmC}5$V8vU~uM&KKLt7$}Zf-_?7Gw#AzGhY+N(K-C$ z?DH((3?_pNHfySdc5R_g1zRkg|60A&sV$Wz7Fxm5V3poM(@?u=q1|Q^%x94ZU_ZPi zHwELkufgn2Lb(V;5J#;vVcyQ!z^IPEOx?UQiur_!)+OU9Ox5juFOCF=+ymq3`}C5> z2TI{LALJMb!0-T+(If>(0wfhe0+gx9(&ArfDKTNP@&Yk}NEovwDXoZTl8$2`!Ow-N zW!7TZnGt1Sh+?Hn2Jqsu5zRtj^a=h|6$$=gk;mL9n+zGRS>tRfb`*rnP1nlqY$_Xx zyQrXMti2F;T^G!qSQBJ9CEKJIkYVfrKjRqm5)}*t9oZ-7`zDFGhYtd=13+tjlQa@4 z#&tzz+1+_87rGwB9>u^U&z?LaSAiIl4d| zu4{V$gECJ8ZkaZ2Cnx+k&qsoeCL&8h)>PZ3WJpuy6F?%y3|XtpC78KYBr5e>FU}x| zKzN??;6uwSg|$kOh4vGf1|%L4B_Sn&QihDHDkSwZ_=34X;W$8y?_PkaUNxz7E$~m3l)&s#NQ0t(MK@I|1KCB%mxq!(3pNrO~CETim!?75*^K-mM7 zwpjqWIm+J6QQGFVQOewDLSTAf=0n|(hX1`7xb}m>CATAZv zqH3!OQNyF0zk;kWrY#Tv5$;Fdl7!Rv1Op`DWZaf;LOe`gWQ|jdk^@|RoXf9aDCU6bPjmFL@ z?>AIywe}o;iY5p;geEArqZ06NfuJyB3KyPb3$K}~H4D2pv+x*iz|di&B*V@V`V5~5 z#wS6<2#>EwZXxz>#k&tW1zZ!Lxl0df&|?nFi`#Rx`gB&ElJWww&f^d7L9d!{mf{T; zj_DLsz*Ph;=y*|qPB}=WDXOK)J3bCgxAaXuFriT}VySRJ44)da_vEG4i+$$p;d!O~ z`TXLo=`RmH`}K$0fBg0L$s_&MEnR>0?U(<2{qJ`#e{N`+_Im@j+;6uJ+Et4sZCR$(Hcfa~@Wcm>m^fsbEwj}fdDQ7xz1GO`Xscs&dadE; zuGi}N9ngpNd z5-;AxKfpgi5X3*gy?EHW;9(Kn!yrtx)qGDI7!56?6I>B-k8vC38rhy83LnEa z&b~~2&R{XfV6%qWXqGm5RItU?`M333tM*hgxw4R@U^}qlizaXkId&z|xv|;6|YUk^5jgeV<

OAWJ(!8YkmONbqx^ zYMZgxcCLkK5TID;k|7K{Hlk@Dv;o1NiXy>ZEOeP2rW1$pk~P-0Vn=?!>|~?t_O`N- zxQz-*#+nO(*LA_%i6udXwPc(00y2zT;HMpfUZR45pd$waecvDvckv&A*a4s=zeyS~ z72~oZec9bvEa$pDi(HCKeQ6j+IV;?;RIDzTl$A-q(o~{q^a_?=(jb)?nr+F>zw8O)Xf{OG2hn5SrNNoJ zeuy@qu{ImRe6euhgv!FtX^bvXbcpW}5y2kE;!ZCn6RWB92G!L3pK7`mqP4?vDp{?A2$!loVS-|#lLyJXp|_SAx4dF%%GMzS z>Fch>yP?acv1}VbJjuipCy1P)3zInTg&mDX2@@-cU@i4>x%x#1kvA7CU=w%-WkzFX zmGv8{wc2=(KSUD*b)X5#>?j00JRm5nn8Jf+)xvA0YRSUx%`7~|7cg`f2}!Z@gg(P# zg7JwTGQy)Pl39rTTR!$cr+{YyG^=FYbt8|t`*>ef zzW(dy=fD4P`rDsxojkk$Ht_6u>FPFgz4SfPPFF4xA;6AF?H@Q-H>(f!0kOXEFrhNS-X#6v-ZsHq=0C z$8P-(GIa0S?m?G!=+L2S3pD*ervlyj-knI1w4&OI3|SygckjLXy^nkMk^4zw_l?vW zvk859@0l*93DXC9DtP7zy`_%=7W%0^IDe)GzCJKpdPFBUBj!Hi4ve+(HDMfGz#C_u zW&vj~8Dy|oOD(i&3wg}~doVD7}4Ak!|{CcS_RV-NW0N1&IeU?Awo0YTrlNX$L_A`m+OwB|QSBcWnk zS7emkoyT&a>x0;%7?|Yg=`pzu#F!jCAu`HXH7=xlWz-D~rO3d%mf2EhSZg;$dfd=; zYY$*h=4rr9!@}+4gdgYmNYK$lWJ$uYNt0Y-yKapub;t^32QW7X-$hfLPQcr`=m=i>fI~A;+%cfC|BUK=aZJxz~ zh6H60l!0oLj7oZXahOda2WQ-r-UqYiwW3J+MdVY?=@hpf2sVLQ2X!PbEQ`97JK@qa zd(M?<_6t_HqExIdnUs}Fz|vHsYW6CYU(qm=8JaK2_h0se*`E#3^V`Z#2#tJlLQkq}@mO(I0X9p8?)3p%CIYtB2W**Z z0Jb&<7ADOHUoEw>h?w6_Ko}5VItC zHN=e`OcqvC`!%Ym^*_~gDMWjNci>dMw31nH}e z#z&FIr-^JEK|IOD6E}?AsteO341^PpMky0F62UI@a)tUu2T?Q^EMyb72IWR$XO;IG zs|>06QH?E_iE5%4$O<&bG7<(mz|RG0a(}xrPhmm=I!8lrTugN z^y_cizx?|5^Kbq<{{HQk&F}6tn}7ZE<-foG`26SJ8k(m4(ZDSaI-R}FHRWs^1G5hF z#lnfwJ>TsJ$}gDcV7PY-(=Fz^+gO|t_phS4_KJ!{_``TJ&@xxUfvy0q7( z-F>e;>UU|^8riPDZ|u!)Tf2`Ro__rF(OL7wo6YU!4~?y_8rz>YGD*kQlym(*Jwwn)e!je&~+1!C?^?m;b79mkP literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m0.avro b/warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..524f6fcd29b0ed6abf0c0a239f4c25d62a08c76e GIT binary patch literal 4404 zcmb`K&2QsG6u@0?RaFR8NT5CKVdNu98h^CS2Pe>O#Y#|?-R`N1tcg9|m^!u@k6VRR zBu*d>Aa48%ATBHZ0}e=ggEJ@2EB*-Hn~5FU$%ZzYD2nXK%zJNs?_=J4Hu_@c;O)#C zvk855=eZ%KDKiE}CV1`%qh$mki~P(OTs${I-xydeBc>Cak#L`J7sgt}nkb2%!5e2^ z<{@V=8Dy|oOD(h;3wiYJFk z;SV1a7zx1e0F==pB}f7!6+!}(smQbPUuh{ZVY2c9F~V3FvlgkWh-sRQ6CuIRg{o!N zV%dce=TU@WrAvnJ;In|{kuU}X|Eh}wf3etOZk$g>j5n-tHWeF$5p%P(vX3^Ejl^A4 z&@k3s2)wBa=1yz~vYd)-(hJBi@qnLk3VMkO27-S8;j|(YZ8MUOL5*e7+GFwUw8||h{k0o6< z_5cQDkp|o{ZQM>l_)(FM1RYI8o<^*twoS>1X3QsmM2s1-R+&pMbL&V{>bYK$LlS}T zBI&`0mRSjFl_U%8XEF^)5)dUJBcW1;jO!{S^(_2~xnb;%rh+wd*)pqfqzYuY&GSUi zh@cFDGEj|@QAQ z>t0z_uVjTQD#hxONm+#iEKLonR<~yP6^(M4p~aG7|5Z;|z1a|5A0^L1k4ES6_#wuG zrp9atFbWh z2eHSescaiTJSoJJQIw48F3i#>6mAj(852v1;8c3KQvITXD4Powu?bv*3Zt>JD*6r8 zTCF|DpP&hXj-UxD?5G7iTp%dSn8Jl;*}@y9YQw^l+gW&uH(=;6GLmEG34Mmo1mlx1 zW`rl#q_7bCxANHsodT{2(A;H*4d@96=H>0VUVV;Mos#kbvd-fV??bPea+cu@7mn!+ zRKQgPF6eksflfKhq$#SUDmp$6O}F$-F)*QV7_dyZAcjwk*?aO*>m@$(_VK*ZUi>)g z|9bkq`RCuiyt;e;pSSdvcXa*5Z(slZ)3@J!FEma2cL#So=yVP{*Oaqy0?0bh77I7d z4*gL_Q2vaG4n}*&GEJ*vS@2`ZCldzXgKwtUHrrh%VCM00x81daUi;{{YqfhPR?xPX z)AL7`8F+MbIKONiJo@nQ=T9G;>o4Ec_w>JZc7NX4`({UjXMGob@Il+v_B2gCzN3Sw a_}Sh6<6}+R(?7xqD@HY4--l_X~WBvzZq?J&DZ9 z62AcP1Gw=A;KmPt0}|rAhy$D>{s9-Nx;^6=+iMc9oyZ=yyQ`|ddUW+?&WrlNTd6x? zA-%cxQWMjJX+td)JadKC(#Aduyi^;WztntB8yYPwq9M+RxyQH-W37Bm5JwmAjk7N^ zpEH;YGT5x87Me>7Ju28@>HORJrPk6?X=0%jEcMsv9kn#It2WxLx4?WB2_N>u+j3Jd zj{6$T9wd|tU-)sF(D_S8;jSDGX8MUIJ6d9P;GFu7_TkWPuj}=|F z_5cQDo(9~|P25gS_(`6R1RYI8mISP&woQpcQ|1vsA|?!3tIQ>sxm6@8^=voJAc;VD zp7h{DLobE3N|J^4Q<(-N9up-YCB9OIjH@an_0<20*?wd@Q^A&V+0e^zqzYuQ&9hk0 zfS?S5GEj|@QAtlX4ze(^amK3jKA1hP6-Cl7BA;?jr?_=run=k;)RDZfEb3D3giFKd z*;j_qFIeGh&gh~XcBN|q2Go}XS;-6aiD0kMj50J7(X?f~TgP?~xH z=K?`=73ED0h`+cHjOO+ zo4W&yyolrlF^mEN%Q^)M>j;&-xB&#aKEJZ&(b{1-m8{l5ghSO1nV{I{6hSg?=&e%YR#Z$)**bzCecjP` z9Jzd&$hHy0lUzJ;g4n6LFiiqq*ztIrGO>~fR;iaO)Gs=SqPbuJ3*j1+8;zY+-fyVZ zYU4Tn3{4Q!fhH)oqZ06NfuJyB3KyPL3vZdKOBNp8&B7DB0Yit8k_eF3!O3Dk!CXYY<2zu3ovlMT*a7?G5 z0T2^>?p+{Qi&o4S3c5spFo9oz7wBnsPRY0a^zdV_`?> zq33i2_+-naD{JU5%oy(T`?nzg-Jt$~mC h>oxUi?*II8t+v;ABu5*?=r3~gLzv#!hr#8I{|7ZnO49%U literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/7445bf07-cc23-431a-a734-119b9ba5ce66-m0.avro b/warehouse/test_ns.db/target/metadata/7445bf07-cc23-431a-a734-119b9ba5ce66-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..62c9915dd9ac3ea62d233cd8f391ce73122f7b2e GIT binary patch literal 4403 zcmb`Ky^rHW6u^^QwAunzNFb^!MyAb&KeC%msQ9=QC&6;u?NzJD8rzeNS;scx@vg#M z3L1nc(3R9Qbcp|e3PedsgG5DfqCxxvyf+g&wv!9HxkRhgWHR&Ko8SAGHy=Bn)(>7u z+zFe~=XaiHViq%Ps3n4@uFzWA*k^&4Xv6a-n(t{tqosv(iYp@SF>b?LE87!9;RSr- z?6cJ83>Je7HgBnoW@V#C1zT=id|SWOs%(`e=32p0f1Tb@OH-$6quqK7%x9tS;XJ%8 z4+ZmhuF?E%Ou6udABF8CW^VI*q?Ko2WkbI^j`);{_7&p^ENz$vZWIa-xevzEH|Z6R zI!fU;Z)X?@z;FSS)*?Ab0wfhe0+gvpll)g{DbZoE@&eKPP-ycODeMSooJ=Ai!7qfW zZN_rjxfZ5DfMTUfMlkT$n5Kcyh6H~qiv)kM&}DX*P94T8)>zw$9s2>ZlZ~=_+sa1b zHY%tXYc2)e)CCJCRsR$q+dop<($s&=)Pc6sC7_Bvcj^gOPLcc z4Wn;g8OCwW3U?HW)g_a%G6`6kDpZYr$?_{2q%uRZE!p{to-mH*BXoTbUHC2y&gAt& zv?-0X`3UCAg$pNC7JfuybdjP%e2<6-{t&2S3Gw0i$z|DH(jXNOt0)H`dtvAfP!0g4 zspo)hk8*H(l%~FGlrnc(5SVU|dQdmy1 zbT!@!T|SFt+X&)GCZ0G!ZL4<30WeO%T+9CMdI`6!7qXps->F51v&EZik&C)86Fdi zPyLV)9$k~nLhRr2u?IQ@JQJX~OF9+k5eMe^>$zNgdh2dU`2gAE@%!&XuNrff;0qV7 z=>$~3Qv@F9_)vjP*-xY?s-?<0J`PQ{^i4J~rJ+A&iLgNopK0?qeO0sg zmw)~C>K_MRJbm`o@Be)LwDHTGM&pOCe)|63@4h{+)oOp&@xa4wx6{3*oJ}Gi)`hNE z*kRJ~oUWk!f{88$dsjCMy=&;Yu^8bH=DIq5+IqX+>m52{z2A0S(`xrDgSKhk>a`7H z;0zpk=(3}u&f=|g@ZgE(?^(SD<7TtD*Tg}sS=+1C8aRBd j4yNL#x&QMAwc1|eT{+uOlQ8?MoP7_LH}+w&dg}iGn%zqG literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/767dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro b/warehouse/test_ns.db/target/metadata/767dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..13a0f5c2d954bfbe3cd1b10b85631ff6aff10890 GIT binary patch literal 4404 zcmb`Ky^rHW6u_O_YPAJgA%Uo_7~CMCWaE#$O*SB;leiTp!E)T~RjbGv+vAN{$M%iK zy9%eYloW^p(b3WHCm>OwE$OLf5hVpB@6E)H?c~C4E>UDTlbQG4{NBgB`P}`owf{!u zjoF0$b?>DvrYX~hdM0@83B98SA&dM>AD+L|Lth`79X+NKoRM&!aRgn+s6GM;S(ylSBz&cwQcQtNi0C*9vDyGp;tUP zPzt~Kpuk7~h6kYZ4k?QnB=}cdB>0QP9&_S+;xgW_#@ewAtRwuhK%bfB=s!(iaBBIxKqKJxojHMI8p_&+~!## zXhcv3K^dq<$*85Lmqhs_c5ueB^Z}SXuN7s|FCw3EPN%r_P_PNqI;bN>VOi9r!U>nA z*>|o?b5OFv6_sLj$)v180+yx*RkL5S{E9}o%+O*bJia?h%h)zbnL8Z_OfSlPs2lR|AT;*LDLt*T#bd=;2iU9>y4MG6nF!e09I$0> z0NC0dVB|$4FNk5RP&IR68n1U(zulsQ&+Z*AV^a1a+YaD(t8QJX|0s%$UN3XW7DArfS2&qq|vnf;V93Ffx*3=Lvm=&jjO> zFlK}&*QBrz`?vDl2b}`03DDeS2My>62j=DNxn6w^SDljb0<1k>Ea6k;7>a(}yrPfP)=I!BmrTzHb zi+890zW3qJf3VRH?_av@n|tl{&7a@?_Rsgf{_>HgX@9qH$HQLlpm$9<8z+FQ2W_!% z;_Se8dxG){CVCj{J<~MIo?*blln)a=hH2oCVRVgd|ETW=E_J(yfyugue&BbhcSO5J z-)HXN(0E{5!NL5pwg2Sd(=VPsI&0s&)!uFY-rD)8wfl8TgZK6hJn%)^(RMXWzP{N4 bQ}MI2ck_v+?Y1A{gcYM&yS)d~n%n*laC}QM literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/796b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro b/warehouse/test_ns.db/target/metadata/796b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..61da0df2357ecb4a2554f7bcd8ea408fa521646f GIT binary patch literal 4407 zcmb`K&2QsG6u^^gRP}%=BoL=%HS#%W{LyWia9YGxtORA*?Ov!NYiv&%Q-3iYw+gG= zI3xHQ_y-UYCy5@0HY@ zu#jHgd9I0R!nC253ZA(_>u6)21zxHR&z@_(rwxsc7SRxA#N1=thOth*CWxbRc;oDo z%;yXygA6w7sD);2p+^NV*c z@bkBFj09k~07~nS0we*F3Lyc?RAg!Kue6ltFj;wlXnrKLS%;KXL^Me!v5?^BLe(;3 zvFuEXvLHaQ(j_B!@YtAUfzXBo|Eh`vf3e7Ac9ew<<27rnO~sD=fZ6F<*$11-M&dRq zs2OW61m4sIb0^jW8CJ=pMyTDI72E9ZD13^a)3HrW6V(#J(f!G0{HNQz32^EvN zBE9VHJeCVx@5L^~z$DL}JR(=Vn2_VAL`E5_#)Xuxj9SuAiVVzanJtBejdoL{$C9oa zdjNwnPXlh~CT=Gu{5a1?f{rF4O9IwW+or^!Df0**5fg^2Rpt`R+$s{4dbS&9kVGIn zPkQj7p_js1CCNhjiA)0$kBO3y5??7p##I%Pdg_15Y(KJ{sbKY7HuQ2FsRCJS^E4JT zASi>N3{<0JRMOLpgDi|}oUttZ2+W?>iX!P3kxx0NQ{1{QSO~Qa>PTK#7Ii6i!i8b< z?MuTrDp=u)Qn9*VQdTYjOH+-i(XUv3NrOygXuc%hf7uhp(QJgS58`v*rNOB@eux&* zM4OFZyjr+$KxN_kG(i_BI>h&gh~bMsB}<48&rdI^?ve(nfLKO30NHaxw}5g0C{4Wp zbbFM8+oLq~ZKIUA(}BQrgUo}vArB8iBafWWlPX(0R_t|vjZ&d|dBCQDfX&STo5lu! z&Fuk3UPSVO7{&@!F(;zYT9{UUo6%|=0ZePKIZW%QV*QO0-x_QaCU!1Z4)+{`{orTAE1BMPGB^h>}&}Vo|Fdq65 zBRsw$xrNxj70({%6mU&|<}Tf@L612wFK*A(>T|H_l#~~cbsm584)m%CXDQxr;h0WA z1zbhof{qsz=#>3bnxa~&yyN50bW7jl10jw4F-wIFV)#^>y)G}cZtO947tgDP^Xuf> zdw>1-$D8-Q`KABSHEsQNr``Jgvmd_u{qKLj`m))APvf5^ZhF}3?f0%IXOkGH^`J8r zc9iaWPESyN&O{FbzGvvVu6}gGFnT(?%OM!n^{(D^J;UjHwBJ22sM|d-&4aFE4F+8{ zxDWNfvmDo;`}6zO-s1;PK797@w0-?rYp3;Rv;B2*=Zj_op4;vAP8%N@?Z!@{(Za`9 hn+^48@BZ{|qp{O^AV*up=+AQWZJ6HLg~9sH{{zk*O&kCK literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/79d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro b/warehouse/test_ns.db/target/metadata/79d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..f86bf262a23bf04d5a647c27d3a2f7f9fa17142c GIT binary patch literal 4404 zcmb`K&2QsG6u{Fosw#mB5{T0Zjm$M^{E=;%a6;@>s>GJ1+dWm0HL)kHw~oh*$F0ID z;?4na;=o_Ar#-@P`7hwaVYN5JfgA75#E$J`Lz_+1TFzwVy*I!2F>k&eKHJ)RKk+Wv zn7-bAZpcZ@jJ}abk$Tc-8l!-Peq!{`pBsU1^sS~5(J{{8!e_#Tv1Ya=>DGMXd@Nr0qANPsexX_Eh{EF~sP)?Oe+5J_X&B!v|bjgw0*75JG@z08^~ zJ2#><3{k9d$pBt_Hlk@LjXuGj$|AvEEb^EerQ;zJ6>FSz#g2lIxyee|opog+aTgU- zjJ4+iZ|j1Y6Dxu&r(m1%0y5+t@H37;FVVq3(2;$DzHbsPJbVy{9ROPKo1zg@d0ACt z7Tul2a<1zu?okX(^7QnW+ywHH96cc_%2+urlzeT}f`&q5U|y?i$u+FCn>;-hblutm z7?fEW2+Oo_I~n1}Sw0eUG?8f>vZmfPB}1App8yhh$&j_qT!NWfMxs;C^>_+N1j4hV z2OnByA*^+h%(b7WG$4FLw1k8NS{X7ft5DRF;5+69kvp77R?TJ0EXI*8koh*xxTGOL z83bjZ8ZD!go*oa=apdBRMd^oN_N-RqNk5N#Dg>S2)&t4LQ0t(MWQAp3mog_@SytD* zwyeXP6|N{0t1G5tWfHJ7Rj69slI7PlOjU+vOS1hJJz*VA2k82cUj!Zv&(!flj4_Rk z=>W#dg$oCC7Cxdex=7O@flnldKLn~+LVWl^a#ePhGDru+BFY}fo*B9Uls!Ocn>nDn zqwL)srEP8+rOKTq1g00JKGY3$cn})-wbHRE5ajB{1Ra;kx zGTxBiK<_#P?$81P$znmW?{5;VeSmS=&6V7_5ZDK+(Jno8?C$2+Dpo|XDnm@;`0Wrk zdNA2oO`UhBruP3-)1?rd4VF{IY8ga0RNXO?6dRp9NM;SaQ)t}sifL$D2N0xhI~pHG zo|wd{Z3OWo6HkUAAC_I1#9<&^J{l!VE+m3e=;dik&C)89tLtjDv^~ z!EZ=rA@*3tHy#Qc*BKbIsp}M z6@d#nUR0n{4iaUGZmF`4Pe9YHe3K1~X%viDB3%$8CdTw*b*c5Z&%9kcuWCQM`Io%< z{^j;(gWf;Uiw}OO|Gr(X|NO^qFMs{()!(PJTJ6mi?zrD>@3(KLV3!<_wV^GRZj|i% z!?vX2g2^^Ud)u^3vu(n&ZQ%p{Ef~Qe__WMcx94}EQKv1|IT*D%&WN@sbIg`!^+tZ@ zJ~KP!!T#*BwfFdo({G+WJZrrEsJ>JGbF1-UYv-q}8oW0ejhzO*)Ec#&TCI++A8v!G h_-X8ZdR(jR)W1}t4Lt~>?>)lN2Qa<93xm~d{|BurN}K=y literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/7b21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro b/warehouse/test_ns.db/target/metadata/7b21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5751159862fd73cd2d770ab23e8573cbc9a6699d GIT binary patch literal 4406 zcmb`KPjBNy6u^^gR8<01NFYvo82Owu{*!Iea9Xrmu@aQB+r3al*2Eq+rjBjK<5ppn z6Bon*aaqKnS0p5a#AiV4jqd;_4lBf0fcIu%$9A%z%_fQ>douIho8S90Z$2Jrd;^KkHU5mGpBhr)XF0;v!UPhB0iy_eaUzNQyb=<6NLgq?t=03U3$r* zeWmc5_cDwGU^oCuYmpoz0g?(K0m@XQN&c_2l;|*7d4XttD70CN6jp>ZPR5at;O9cs zGGnpqObgQ>K(W##LwInRN7F!P1A>2*MS{Or=rB7>CnLry)>xa0_56U@$y(XnO=Tl- z8x>THH5USJ>VmlwD}oHGV4L&;GK?JHryYS_qJn{-BL@V1-y#ur@P|O`0MLrxB#oGg zaaECCbaxiZxvmc*hhkuor;i_zD_@Ms(Gw!0jFsa;%2!4$X(&Vn=C#b0T*F4Y$EwGQe?R#+BwDRaVw zVf5@v!|3O%a7Ce5T`(ytlYphELe=P%EWe~dDl;@&lI_3f38Oz7qU(d`+;?bjDvuwc zO=zsmhA>_(TsWYz@FNLGL;O?$81P$znk=?`;#Ud4O@+%az=^5SRz+(XKpo%-;6cN>)U&Dnm@; z_|*`%dN7$-O|93crsn@t)0GgdEtXTsY86B{RP6~96dRp9NahW_RcPGuim54EhY+N% zIvO8_4xh%dZ3OWo6Hi7#G%C9=i34BQk>@2$EG2?f=;dik&C)87>oy zPyCP(9$k^lLhRr2XBTt|xF$ezm+V)dM;w^vx94*8>8?5@oo?>6>g|LPOtUiLgNopK7yr^`BLHRio9gO#mVHkSH&~^D^baZ%!5xoN=y582?T{h~nd(>@vde3Qh-2>L9 zreU=`YB~L`)$4n-w?Dsb?Va3z{K?aYr_GmdH+C9-)|eDhPZI3%7F_94xBlniZc>7-kXUX+eyQ2n(QjFCo}K8`Mr;M^U3J5`oUX? zJ7H7$>eh2z%wnbw^hEH~6?#)2`z-JheQ@?%_dR`JHuaEBaYn>F#vK@IW@~~dJcl>V zK2LqlU^2*H^QKy8RTg?wu;tRl+xn$;WvMhV*9w;U>+}wry4qC>?KYZVJ`05p`{6CQ zDHz9n4d=IG%7ridC~PG$a~o$vy*vUlHRJX;;!`SGmy9PcRkIG7bgU9fOsMUZJ1Y?EFW^kdLVR4@>9n1l$LkDN9O7DT$i&~K<{W9_?=X8c!_XV3mt%Ev}6_#aP%A9av znqBA8G;p>6 z$N}9PW&h?VEo0XxW$rW~Fx?>apl-;+gV4|;C-kJu7LOHY6JWDY=-wQ#Wg=i}d%%{t z1z>A;fRPuGydZ|LLY2%3X}A%l-Q8uh+C6}2_qT^>_e$1ZEAj3AE@5Klg7pC6Qc=yT zwyF?iyg_sYz3T|LLkkEbiv`KLvrDvA2jjGxE4gtYusWO3u03_E?(W!1Rz$KYLrmlN z^$>S@Fj-hl?Kh~V*8fz~wGizcmQ%@U9Yi=(ohcI(8=X8z77e{!Xx#FOsViHD5Tvg= z8t;cLpT)9m1o0#jPewsBD!VX=17A4Nc$_e?k_dL8m&?^JJBYlwU;&%LH7GM0JFBeU zP_5O*bNmUKAm|91pv;a^z{3TC!i*VQcvdaEW~x>!?A*-4W4r-FhmnvJJ5T5{JSG^Q z`XM7cx+0l{*uUk^9_SQsO@QVuIjlgBI55v|&*kcKwCkE4;uEep>KHN4D9wk6OkZ+G!mzqu-*vPQNvB zj|{s*`;>Os;o`n^@aW#-PoLgDZM=F%+tdE6H-4z^eN(T&bEDDNYv4nzQQNE4G<ulo+Mae#j%xYnFLLw)n6B-^V0GvJ0cfR6G5`Po literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/7d0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro b/warehouse/test_ns.db/target/metadata/7d0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..cfd1d204df2c4cdd5b7b5a709c706cd4d6f33ee7 GIT binary patch literal 4404 zcmb`KPjBNy6u@1#Dn&vS5{T0ZjVy6X8vkjVG@KA@rAkni-R`N1tcg9@c-^O zeVRvt!DNuZCJnvNom&`E$!1HZZ_Af@b4!(prB<*sTBf(xu=K8)Xt&(}^I0Mz*pFzc zO~E+st2eoqQXwN5@uZohEZDj1S@jW^Y1;P&T#Tq}UNe!wRMXuLcp^dM9vDyGqSt~S zXoX+DTVNyrBLGlVgOnf%kkkkXP^L1^%72xm#D>Y*3&e^NX-yiWvLc~rHsn%)p9 zoY}HVE6L*+#VVKd;2~rKn#a=W68x(!68y!IfcZ&2>N7ECjkm7YK@>ATTPgc+UD-(7 zM+I}nx-)^db-~n$bAlYNVw>^;GUNg9vra)T(ZN8_kzInmZxAj5{2>rK0Cdi8ibhK1 za9)vJb$1cVrLGToKrt}M2d9AXg)UeiW%Jf*! zb!!h`P!?$*9NWe16oelX`AE>wMCNJC8hYE5^l8RI0!ZYLA#0tv1T(jeM5mq~@Eno| zgcnH60kJQQFYoi%dcsis|+oc6#K7w!s$$U==zvHi2@p5sN;uN zBbr*19*oxu7Y^tw{D`LLB29-xA(0%u2vo6z_z0uys_rgjkPe7NlqVp2YUl<~o&ZYM zE&<&g<;mSqy7s0~s@!QnULfue@2cbzw&gprbEgmcWD!@*q(7ilh*FnJU`hZ<$ z4Z!Z^03$D=ctH$fg{qm8&}1b{uf54=^*R94J6Rv5*Qr^5tHk$CHVG3u7pw;mmzru> zwRMH4wspQUuz&&1#cIm0(wl~LCu_B699b%rQ zFNV0$gUQ8e>b*oYb^oWDE`{iAu$(GZ%OJv`>W`SD*yxl&GHvL+O5;{mOiSC^gCKp; z(Re=z#5h%LBZw!3c+!t~zwW{;jU(yv!60LDArZVvFITFcbr5B9!D2RoYfxb{c2-5d zpPp5hG{I*g3u*m**q5i-fd zC`uR+{Du@3V*ge?hoDo!H36Et>|hQ$7r?x{J=d$x;j&XwT|icO{OkkhRa3z-yy3zz zoq-CtiogXOFDlR}N0~B3w^T*PC!pz8z9|MqG>HZ*lRk(MV{7uJy3__dWWgSuSH`Q? zU;h2mzkj^*)hoa7-QT@$%;(#t`OlA^fBWkXzkN>(!}x0pcie5Y4q7)=-zwnIBS4v*|+c+_^AhfqbE{iAl+ zq=zm&Zij;obDV?eWo!Szdk;T(eE-6H{)V}0{=BvG-PZ0GTLwIvJMe=K#*VRT80zu$ cZ7>x-J9}@R8OE;pK2BINYMAC8Oq<{Ke+z<1>;M1& literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/7d4a211e-5120-4462-9cef-76ab53d2a056-m0.avro b/warehouse/test_ns.db/target/metadata/7d4a211e-5120-4462-9cef-76ab53d2a056-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..7efc2a6f0bf4282b8643e929576071037394380d GIT binary patch literal 4407 zcmb`K&5I*N6u^^g7)FpmSn;%nqK}e~{un18g0SKa4(Pb<&Yp(QRJtpZ-svx^t7nKy z4*mm+h!-#7pRln1f?fp$kAgR0@#J6NdsXR9cPATXvI#?|)KtCq>i0hC)feNZ^@Fz) zXUYQl>drGw%wnbuwM6jL5n4-|c+7VbZFv4n^IUCcw6u^0xFX^%<2KB-vORtjUcfKT zzDhmLU@^#G^Oo9ZRyMj+u;tdpuk~B4%2sJ&t`#ix*6AI!Gf>P^KbH^8ZRpi4KdE7l`JCLYucpVMj>gWEu$xej!wC zGnU)VwJ`O46f0daf`Q8>H1&lxB>1ngNbna69cG7VFlM}BjkT@ViRUvr*(m#PTiHn5 zMg4#x!9r0VHC|khRKOf|*-JqEgRxq7;${ zgl9<)J~Z?~SgRyiYCn}}K%xmz5)$GmWyrX!LQ+q>ubJ(I_IM^(HJ1&&7)Po==EppX z1oa8ZASeUXC>f>nbRs_uLK|1CO7DZ&i&~K<{W9_?=X8cg_XG=|) zjGldE82y|T?kE(iOD1Jy60kH?s2aVJg%c_ZKc_LeNYNplOGE^J2vo9!_;9`Cvg|HtkP3)Zlmn2xFmwkf2Y}Ml zb3nI8Ik-JaQ{Od8nL8~AOvg`Ms2lR~AT)HzDLpN-#cRdh1lTAPx;F=G8VK0j9!JpRv%zmgY98j{gU-JN_=auOPJWXU_F4iR8;e- zttvzruOD4Q?>YwV&;kOmly+VluIsT5nKI&Ht&UYav=YET@vyI*4$o+5r<38=X8z77e{sXx#FOsVQ4W5TviW z8XtrXpT)9m1o0#jPsV;UF1s*^eNWiYWRftkk_c9zm&?^JJBYlwU_J}r8I&1~omJLv zsMc!ZJ^mO?5OfSpP-aId;Nby5VZ{s{JgXMoFjXrS9^KBuV|)QahmnvJJ5T5{TqYO~ zypRzdU6ag0?BDXS3pxcn6QH?EIu+;<2j=Uij3x7+DnQ_iLlQ0qcx zEbK7pxZ|#%{DO%t27K4hb-imCx&b2tzVJ6r$?vw_K4kQW4k!$$>$DHuzSABL`n~o9 zC)uRu_MAy)@!mRkc>mFtPad2#U)^o&HU6qMU)1-$t=C}OY&Q3rIH)yid$n2vhws#D f>eJl+`O{i$uW?__HuBkDHt_6u>FQFgz4Sffk)I960NPAGT#FQ-H>3fYwc72Pj|&#ECpvtSOQ`9&M=3rAEe%x zP3W6@FAOnFn9(;<(JcX&cz3;`50FirOJpF`T^SG@P ze*YlHNC1Whpo}IdKoTIS5E7tFMV1!-N=u0ela&{U5k$h6HA!hjM3ZzJ3kiNMR4ua> z%Px#43ququT{3_NpN(i13ZqZ(uc}D!7mGaRM%iS@c+DDTQ?a8UWNx}v_Q9sIk+_Qr zYR1|Nfwy(R+=(?omQ%7#dI1^69`G|xKrd0jK+utWg1&E(n0xp`Aa(#~&2N%MLdCeQ z$Sk`%kL5zw=dnjIFv;_0kI79S#^mIT$S7mgxRCOdQA-+1k%4(Fv!&3m(QbNywUN+msAx%6tMy#F!y#mAM2nw~9oip6kUKBoPSD zlOB9%nWeB+NwUy>D${_(BcddvBv8tbaaDz+o(A7CH;CNfRIqw3TV^?qRDmqEc^(TI z5|lwu2C7jqD(UIPVK#|eoUttZ7|fp6iX!P3kxx0NQ`~wW*aT`F)RDZfEb3D3ge%MH zy4RL}0s_f$L9!3GiPk>CIPDfn?pz4$qxEQ4o;r4Sdu$~uB3V@-W=ZmH zh+93FY^|eAl!H~N|{(n1gF%?73voqMA2NZkWJtklpBqmRo-u? z)@toJeugFpI)o-Dx1$p9aDkvOV+t3ZWeabasx=Fb?q=Z$-hiRQNJ)mBC-fOU6O2!S zh!Gy&klaG--->4+bPBj8Ky#P2YtUm3%!}J|wfY>aIwj==WSz$!e+s>7!dZ$pTsWpv zPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`M`um!HA{81u=YT%s!TvS}*pQw}2SkR)VnXW>1kdv}fA!Z01EzPa?DO z4X%K=@&`EP#DP1~{tP5;3x5DkRCRmCGh?qwypE#LOuM_P`m0A*e=&YmKX@~7rYxW@ z?>*PVEN0qJO9W3Hp|!M$$9y-@hUd>U&((%TOABd$Ga~LXZo^nBTjNLJ1$=S#b?R{j zlR*ZXx70$jve2c1Etf97)-SaxOQngqRxz(LIEQ8!Fc)}z2ecKQuzG` z8Abvy8~~-YNDh(!NrjLAWh&An|5aK_beOEXKr}BD+Pp;yD?%D4(@0403!!S6v0Qep zg{kkOSm}}xytr&aQ(tI9f9L=5>1GbkPuHPL&jwll6vBO!)!0K$1}mIxoqggI8p^N-{x5)s83J^ zK^dq<$tb0#6ZvTn+BjoXdLPVQ)QUXmmyu67r!(BTCs+Wr4(do&SeA7ubHb%z^z19c z=;y3(MWI+-GAS#QfTgKI)##NhzoLFBGc;S0?Z4;=qdy;^>;34$bEtnNj~}81G}h)L z7%vwt98g*KIgQapiVpEyA|m)lppqrThwCMmWp_z~R6wkv9DwYFp*ui10F1mlQ9xL`Hz(%3ay*^;mK)~kqfK6iyz~=4% zBQGL(K@4MsDwz|~a3f5sx65d?`T)}!Y!B1wm#n{4;#-4V!ojA{2qMBE2RUyiF z{pcEc*D-L177$1l3zB)fOSEPe5} zV%au=c#?@HV?P>~U6{naC+ui4Ntjqk1gp@?)`?u^?BjV=`{l2ufAibf z`(M5LEWG*QAJKSmuhIDS*Y9rr{rS(I-l)}Tf7fxx!%pY0b4@v$Mu4mXZLzS!f}TW|OEqa$XzCA zcL(mcf4I189X$H*@t02@oHbv*-PmjVQE%SV_kOI`;Jw*w?ltkH)~xN-Y7KmSs}82( gUvvNWPiwWk#z%6rp$1{}g&h4DrZ@Isu)6L40DtRBMF0Q* literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/8509f507-047c-4d3b-b967-af45b8ced15c-m0.avro b/warehouse/test_ns.db/target/metadata/8509f507-047c-4d3b-b967-af45b8ced15c-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..26bf57f60ee4f08ff0684802287911eef65dabd1 GIT binary patch literal 4404 zcmb`K&5zqe6u_M{TI~U?koY+DF!-Eo{IR?F;KWB)tprPHx2IKPjqS_pJOBd!vj!ylN2BckW>f>P^KbFi+`o1#DK}l3q%hhp--D+VMRofbQB8-ekN2c zGv~|B^e78M6f0dafCrxqX%-5-Pw=m@NbnbnJmy5%*k!z8jlHSZVGuGWT`T)wQ`tz| zK?N0Kt+~MKx?twSiXhWouuXaa8O9#)(~m(fQNcjak$r-`Z<3gM_(LFe0BFT;l14(s zsH(_Vbax)hg|1Ixk78hwM-T3it3Zs%@k1h`jFsa;%2!4$X;_F1%xjq~g@%oGQ>4d| zu4{V$gECJ8ZWPZ3#HA_o2_O+8hOAZQ63pB(5|w(67iW+} zAUscc@S$legtbbNx%Ly81|%L5B_Sn&QihDnDkSwZ_=-6}Ts<~_$i*ck1WUw#cnsC7_B^1?E&OSuy+ zOta%$nr63Pg)0_{)diEXatT$bCHejrJz;jI19W{Dp9dZdPv!AL z^f68J=>W#dg$oB%7Jf<-bdjP%0-uN&z6eyZg!u4-^rGx8X^;wtWt2UTJu`F*D0_g? zG73O9N7=hMO3Tl zRa;evGTt!0g5K2y?$81P$;EN>)U&DnrbY zbF5Ry{k2x?eZqMcFbFk`^loyb79>4c7^r{JGDc*45 zm`*_jTt(o5ju#c^l!H{7qFSoFN@QFTsTV86t*k|4@o>$sk z?aN>P{O!eyXYal9?CXENd0Kydt6u-{_n*G|;jf>+&ooW@w}w0Jx7+*eE6Uj@24rn$ zi-i-V`@Y*2l%F%v#%OPwhGDb~_-&i;!5@5qA^fzAR`<~84G)b@%Q)zGtpne7TW;^D z)1t$JL$~WO-#qm8XP2$L`yV{`{L!7$#>=X7j`wD~Ywy}IcaE*oX*`~J@6GRh%$v`h$Mu7^ zQ+LcJ^wo_gnwTa`8)~WGnJcuG<_9eFQf+wlL<>A^XtcD5PH;ucJ;rUAYvp^wIC=!% zIQudSID^F?gUwoMqgmPLQNb2l=ikOmTBKN^~`aZqj z@u5=q&8-|G0T?cT(psbdNr0q6NPsdGSz7!mEhRcER$d@l5D9J8B1=0Wnxx}cNbqx^ zYMZgxcBVyH7@}C|k`W9%=F=<`+K}K+Ws%@77P-uhvWdfZ#Tsi{v3?LTJKZSzXj|Dx z+(rczW6g!YtGZzB#EKxpTCz=g0U5?F@Y9Y#FHylj(2+xezHgD3yZDbl>;TY;-z1HM zig8tuzU=NimJ3~<#xBLcBoFW3C6|F1lj8?OMj0!|g_N(1TG6l+8JO2HTM7+Zou){S z6qsNN>4Wqvq@y*idE@-FneArilkpeKINQF@#ukI6R34iNAkk5s7tvM z&JCkyUl>NeV1+xDiq$!jvT_MnnkrO{Udi$c8fG#>^DX)Lmpx(hXCrid7(WVJ8lKAQ zhiDU;XtNQ_mkSq8s4V=9Cg>tXhXfuGG5jG=$r9qj3)1tlyQD!XAXZThK=$0w9iSWl zN>eWYT_5G(`Y26(*C=J~v>-6uF!P{p$jgJ!$Rj88q|6qt6?+q4W2w-+IbhR3z~=UV zO=And=I#I^FCuwC3}b~VnG?}yBTTEe%V@Rw0Mi<557X+GtiMv?TZ3J~#Lfll0mP-E zT2yUSAT0C%Jgygt1e0VVZ=2uw&m(nOI2#YpItj)Gs=SqPbupo4_+DHyS&u zyx&l*)y8}L0h%DF15HqFM=9Xp0YPEK6dpXQ7G5z`D;9RIXW=ovfT6=kNrs&#^cfx# zj8B4y5guQX+(PW%im?Ye1w0d=xl0c#&|?nFi`R3x`W&shCFKKTlgICV483Z?S&A=Q zxTaH30Z$QlpyNXYI^`ghrl^)G@Ax=0-O@Mt#DqqH&r)H77(Ufz@5x848+**%$NQ@G z!HbuF-unKu2`-yWbnnZ!{V&|NY_VFJJ%q-Mhn-8x**FGf z9q5aN9i@k!(-D+EVxoiL-qCg4=;($a|LHh_865`rY3uENS9b=~H`~2Ix7$7%^k~~L zx_*1$`i|#$Jzsa};rz9AaPRj0FCN}GZN7T9vDf&c-u$V)_ieof<7TtD*Tg}sS=+1C l8aR9hO~p@h|F=(SwY|n|IonW^F#Al-egw-K`!HEO_kRk2P=5db literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/87212431-1c5a-4680-924d-cb722127f8b2-m0.avro b/warehouse/test_ns.db/target/metadata/87212431-1c5a-4680-924d-cb722127f8b2-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..315da5d93fdc8d65c39edf78bb1c023c25af6622 GIT binary patch literal 4405 zcmb`KPjBNy6u^@-sw#mB2*hcHM!s-K8jsy={%}HcD^+64vfG}j$eP%b##_fW<8iC7 z%2z-jj@&qN*pILh5<*+mAsge2NO)X0FxJS{1W|YazXbm( z^#zB?AcIdEdZATX=rPIXOJ~1sUTT+?Did?9V5xtT-hRW-yK17{W&_OUq4Z%tqNz3o z^j^$_^rat#%_Qb-{k(4!M_^{nyf=)*n91f97YR(QS-Wl&N)WjN#zRGnpp&TV*LRVY2oDG5k;((*{{s5wbWLMN)yE3DwK! zeA&4Xra^#Wl}q~Y;PD|#18MXKzAB0YfAP@ePMD4dT$HS_*A+YT1MVa%W$&*m8;Lup zpk%By7kFD2%$!&fMC}FJloya;9{^j0+`S8?~fiAu=$pRkq|B*4j;;9!t7z z?EwtREDZ!TE!<8<_)(UR1RYIe8V9_gx6R0aCEO!`M2N#$dLK1=S zEa}0A)LaN_og{PZCn^m{G$dL=LVT?Z85dP3>WTj~cl^*9Oe8PoGBp?DNEgU_o2QXv z0YMoAWuO`@qmZ6%6r|(O!5PcaJ7D&#R^&-Pk9;Nso8Z=c$;VLZppImPWnPyuCtOn6 zcCIMx(NTOH+v|Z5J%RVnM1hG+UDGf6)`PGwq}6gXqF{S#YY3A7YGI zY)tzwUMyTVptJBHi_t}z4)HxABltt0iY3H{=O>p%cPWE(KrEx|g6x^08$j6wl$MzT zx;x75-BDWRrctWgX+U7QLFz%>P=^O$p+`>GNs%ocE6yswbfM6_Ibe$-U~7HA7F`3d zwK>4Zizr?Y!&spT=7cO<3Da(GGFt5pz_h#T!?ZgE>u;6#c6XC7v2($C0CB0Q=2cr) zh$7w~x`y6$0NkMk1d@vd$-2KuwAKN}X**YP=R#l|tVVm|sbjS_$5yc-id7L}8pp4P zxY2{j!fI;2K{d7hr<&df(cWM=Rjh7;2#2aO=8|EflLyJHp|=+rx4dE++SWb<>FbWh z2cat_v1%JZJjuk9K@bg!E==OUmrgVsCR{Ehg1yko%9TsWo^ zPytsFxS-=j1v+IvQKsmYD(ml}H zoW0on`Qz_L@BQ)4;lDrDe%q?me){YAFModb>klugl}hFBDsH*gYVEbInc$-cn6;oU zmQI-Ld4rZ@;)2T-hI@;e)NGk1rSN6a7KIP|$07JM&1R=mlE&3utGU<<*OcGBk?zoFOuDi2%7(!F&u1wnLFRQC( zh)Yi1)sugRc=f8F;8D<%2;LTt9u<7AD&6VsWaCUWAvB#z)qAgg@1tIQIQpc%_fq0a zSU{iMda8+O%(Q`)2%b7ZYiVPT`EH^O&Yo(Xs|}2n7SaG`MBHWEhOt(*#*e~t_{G_$ zsmB>i1{rMDQVY$>LYE4*SUUf;dZ|@eDoxC_f~DRny~CEKcGX6^^%j`VLgB%Fcw24? z#&KW6+3lEe;R!Da+eyrv=GjmykHE}^etR78fQt4d;|WY{n0rnX3J|#q#?#m6C6D%% z!Y|&+FcN^_04S|Ra*zZ_Due_mQ;{b5ztU2o!(`VnU7|6B%W!92Zi)GHOXfAu=$pWwzuRHrh>|9!t8e z?EwtREDgA!o4B2f@WU)02|AjHH1=6bZJUx2O_)mniI^~CtumKj=9ZDD)U%x^g(L#u zS<-_K4ZRT7DoGaFPh=X9XiSuZgm_9BGA^r-)D!PBW_zJMnhI9UWkWB}fdtmmwR^&;)h`iSehzSjiZv~m()*XhGt8${TDr9^kzeJy&s)>4)ssv@k6wL z#@cKMZyTk|ofZV9 zDnuEtA6-H3Is)#{0s_fmK{5}wiPr35oF3&$Zd?e=?s~KGO`p zd!fUpv1}VbJjuk9kspo9E=*$I6LvHnCrm6Qf>r3{a`lT2B5y93&jPpxWkzFXmGv8{ zwOV_QKSmP-9YGV6*-;93xIj>tF@+1yvW3@7)ry7Pn^|~_H(=;65|U!)34Mmk1ml4h zGQy)Pl39rTTmJ5XP65{hXzr5z3iOBr^ZfQ)u098=PDyzIS?BQw??A5_bC%!@7mn!! zRKQgPF6eksflk>=q$#SU$~ry{O}F$-HW1Lz8?!{%Acjx1*{kwW>qIVdcJaKbeLjBo z{u|%@{ocR-y#D6LcYgo1@#C#VG+=_f$pJ#GW*!j%~){R$-MZ zM{XQAazXG9@E0s-Pkj6dToGpu91!o##E$J`Lz_)hRg=lgdvAX4W8Qo+{A}m&jno^n z3H@{Txgn+rGx|msd~O83(YG2#L?^f+=04*t%r){oVH{n-H_krK z0?uGD$Y8UE+Gy7{`c$yR*7>*9Tb8rOcUnqT@H-u46M}62cwuzsA%3Wp2AYyKJ?;9fXD+dp1wnGczmQ3 ze)V3CkpK)2Kp72EfFwXtAtXSViYzUDm6j3{7Ar3hBZ!1CYmm~8h$iVc783kisM=;N zwp|)g7KSKRx?}(YpN(i13ZqZ(r>aQs7mGaRM%iS@c+DDTQ?a8UWNx}vc6(FVNZdsQ zHDm3Cz`MF&?!=lP%PH9=y?_j35BM1;pqHp%An3?GLEkq>%su=^Aa(#~&2N%MLdCeQ z$Sk`%kL5zwN3lmSFv+v?Q*s-KF*$ikWR$ULTuAxKs3i@h$iTdo*-~iO=rl!oEa|$l z2QVn}G~kwL<8gArPx5>u=x8FcBxDVBY)XbSWj+BUV$6`W%3Ok(TScN$&-LOAk_d$7 zNe@1>%u-mZBw1)blW9QW5m6FS5-4TJxT-=@PlGR*8$|AKDp)<2Ewda)sz4UUyod!2 z3CbWS1Jx)QmGt!DFq=d!u2`1d1+(Y1qDcBh2Y* zF=hjpuNE$xP+9mfP0&S(4heiBV)#R#k|o54AEeh+cS(a(KrEx|f$X`VTR_xrsTgUEfkF8`yB&#aKEJZ$(b-}-m8@1lgiF<(FhQ}=DS~9)&^x8Zt*DrWvULDK`l_q( zapdu7BHKm~Pjc~O7{U%=2|q$I=66Z#CF3C1Tu z#0ZaXNp2zbZ^hULodTW-(A=d*HRv%1=Edu|T7BB9Zb|t7S?BT752060I7{(`3)gfC zD&Q#s4|IH}K&Kp}(iGKF%~6v4)DIxe);Dc zw;TNQ`;R|g{qb)9{8#Zko)Y%{KMTX3rTNHy!4% z;c=%!yT{Ja{IPZT%Z;neZRB+<&FkpeGmTOK-<&yHBAoR+yztd Zvv=_DRMYnL4{*VXSxwguU|Idx{{dO7Ofvug literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/8b51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro b/warehouse/test_ns.db/target/metadata/8b51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..f7a722e917545344dc644560bad337b74562e20a GIT binary patch literal 4405 zcmb`KPjBNy6u^^gRP}%=BoL=PjC@WS|7r85oQifURzO*Hy9ZQ7*4UnGymf3d9=8gs zdv-;i} zi92Q!dVS})CZ;jdjDw8~H5o67A^xx#oM?k8wc_ZYWftd*?^qVOqv ztZcMrGg&&3OBxY{&e5jR2U}i(VJBs*(iuNVr2~2I6du|j85V;G+(|714 zkM@V>Ua`j7RP4wPn4PSZeXyx) zByOXEim~QG;7wgHcVb15VHIqXUO5Om}bLEpDX#9e$4h#df0@tdR( zQ!%b8(u?lSVma6KVdPQ_O!DN>19IhyF*$imWR$UTTuAxKs3i@B$iTdo*^+D6Xg7I! zEa|$j2QVnJG~kAA;&w8^53_tE=x8F+IAATcZAu)PFpmHdF=ohGWiG+YEhAB>XS-1f zNd&^Pqz4}wdLgV;k}R~J$}}L+h$smO@s%=UTvj2eC;sQm_Cwp53RcZ!LoddWDvKeQ6l|oE5Gp6srp+Wn~huG*ze?y^`gZG)QHJW=pdD7d>J0XG3&-5Iyx>8l1`F zhiDTTYqKGYmkSpTs4V=5#^@qNhxi^55&R)g$r9qj^OK9RyQD!XAeK=MK=$0wEub6# zN>k4P-5%xO_9#t#+bCu3v>-6uAoZYb$isus&?Bexw9FQd6?+|EqfqExAFyd4U~_Z8 zrm+EFb9;c17m>UmhOt7G%n50@7N*tPX0%#;fN2djhiUao*54@ct-&^7V&{VO0OC?n z&8xPm5M{hUbOpVu1Kgnn1d_#qWFBr4t=Yvm?d3{tT?owXdbBG~9kaJRwvrW*tjZA6 zIDR$6tsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4pn=?1jR-t50ZI9ZxtH1ykcs~)*%Gx ztB%I|q06VSY#Tv5$;1;Uh@7$ulQ{5&9gRi_6HAF;6?(Z`{i1`&n+q1O30#9Rqp`Ef z`VG}utv$ydqX~jK&;(_6lmZ?u5EN!i;li_Q;SE!@Vqy1o7M|b@7&?rEq}X{vpW!jV z_{0wx;n5YzEX4jTfA>JAfNKIYcgcPQdc=WwetRxgpMzDWq`ZKv^Z0{%(5uFrC3wSy zV>$s9a20_II$l(uQ}z>SifXB{j*mmrEq#*>OlatjSR!l?!>8KpZF#A6BagYecwW`M zJO29Hzh8Xy`@PY>pI*PHf6(~#PNVViub1Ea@#7EQ|5mTnYX8)6%SWBge&>pEHjaQ< z2l`@RhsnO@bOhy3ndo4+cXZt_I`FT$kF#;dSe#`tNZ>Bc5_aX literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/8b72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro b/warehouse/test_ns.db/target/metadata/8b72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..f7f4df03dd07d7fabb4a7e447cd52f709323c45d GIT binary patch literal 4404 zcmb`K&2QsG6u^^g6!m~ABoL=PjC{_AKiVeEo))ncD?wSd-BT4=V|&t=b!_i=+$yZ{ zFRXe%NSrxv<;)qR{RfaZazk1nae^znHxoOylMQV)Rn<-=Gw;3my^neGh4WQ?|GmVW zuql0W@1-VYG1G=xB6#Wwt*woH7I=v^ym+bko;EbvT1cn3BH|w7Hq5oNJwX&+!Y9sN zq&{b`7-X<{TWvHe8$Bx6a_i#L`mI)Ft28m!3YPlo^p4t^I#mbl*4tn{3xyBo;T?G> zn8$OC=J#XDg)jUl>?ARBn-?RkJOe8m`u%alr&M&V7*Akn!`yeHP=LriFrI!yuXxl| z3ST|QFcN^_0w}Fba*zZ_Due_mQ;{b5x6)Fg!(!zHqWPiF=512g5z;uBL_&gJ2vysR z<+ckgOoIT$N|%ga;IT1H1ECEGepMC;{$ioa>@b}=j909&wiP?}17;^1Wgl!S8;RSf zpkl1K6nI+~ESy*oWLO2;q!*B39h(w|Cd?y%L`)d6R+&pMbIV9n>e+6TLK1=S zEa}0AhF%D3l_X2;r!oylG$u+yLVTqR8JAT^>WTj~v;EL^W`b37+0ct|qzYty%=1Xl zfS?S5GEj|@QA$rY3est4bpiMbEge~=?19>bwgergoYkDrKe@Kc&*r*02_ru_wImA0|A@c12&B< z0Gqo5jJ$~C1u={js$@<`!;LVl{w|}{8URe|czc-Epk)2665l%BB~0vGupU5MDyn(a zRu!U*H;AsGcXfa}w17aeSdh%aU7|IQFi!iqk~RIONebTw`eT*|8^rLLHvdpQYTd|V?jGJ(wFhS` z{jID0{cY=;pI-m){a=mO_Zp3VZf^eg^}Byx`L$Z@&pMuX*z0wB*OaqK1ju^O77IH} zx}MV$lwUH@!)Wgrx?!k4FwlFtq3db@|MiaE8905@J+i!xF+Mo#9GDJFxu)6C2Ytuv zGwa~cv$~7N*8Y=+PrrQj=)C#ngGQ_Id%gK%y>(Ns!MNFMwwgGoHEXR}t%1Y$>tHJW fH1~e~v{q|19?IEUE6u=$Fm_SP?wDh!;L8mR)u|Aymqo=aFfj~Fi?q*NHh_N(|)yR@M8YQ@k zOX+2MDtqdmQ0T3HM*oMUu=E%TJ@wqaH)F|?>~#~b9mmMynfKoO-p9Q8a`^Sm{`;{r zW)pg|`$7}bh-rN-7Cdo;*3d>C^W9kMpTE#NSL+)MEua&e5ptJt8^#*x8b1s!;2US( zBpzol8Dy|oLoGB*3tcMMV(I+b>ZMj`sWdUu3YL1S^bQ)D+Eo+n)*E0x3xo&z;Z3g(ti)XvPt9YUcy3I07@P`n^%eCsZ`A7>{9U)!cW&K!C_SFrI!)uXuQ% z6#n#Cije>e2S8~Jl7S>ZQXwQjnTjONewCII9VRO;5X}pOHfxaFihxG(I2026T&P-R zES8;XLE`%;R=Q*W4=x+g#1~qh;7>)7;4c<9%np*tknxf=)}~@dp3m%ft?c%uvXQur z3QESB3xT(F!Q6=@L57vHO?m+th7R!4jzKR`!9dWFeS*GkkdQn0K_GSjXvuGqMnuK9 ztVqwhJB{T`*B7BfF)+#Vrzhmv6Jv7xjL0Zs#ki32l~GF?a*=^~Ewd%lu+eU^^jOk$ zYY$*hrfI+p-NfyrgrB7ONYK$lB$3Y=YTJ|yY0O*#NW_>SYn8bKGq;FDrJn7C2_z8+ zPm>;eXz01HR!OqZek#*|gd?IP#Kcp|ka1Ckq#k?UGTRI6;Z(44E*pA2j#Ponws{r` z>JyYfPzI_|G79PGgnlv!Y@D$yy$fc~Yekmyi^!*((;3S;bEtnNj~}8< zXr#>sFkUQNIH0odF^$kgiVpEyB0_j0P{|VF!}a3JqPwI)Dj=3o_CWUB&@G_s0ZLQP z0NovB@9ro~ecLEy?ld4U9Y1lQZpg!f(7+|9^t8wpj}?0zU?W%P-W{-MAYgNIz^1VQ zU~_wbkr$D?AcnC*70d}}uokA(*=Dp_U4UuzHiv0-3)bH%@vYuAVPfZk^#I~hQO&Bh zst`rIes~SN>kzm@3kW3h1<5?zCR+0d=KIsU3xYhYJLS8B@6MEL(WXR4rL}bT7pqTu)hQ`2AnQDS@(_B}h_e`PxNuCz zpaQNUa6!k53Uta|EKN}@Rod}!Xu73u(t!yLyb+6q4Py9In|&lNwNB_VXAjS-%8mBx z{ZIe=`Q;D))bGE3`R{kt-*>CkU%r3y>c`iA|M8$wsrhZKwWfrvlHlTCHBghf1wduT-k| l_`xoiim%$4iV>{Wr#9_Q*jkT%RksmNSSu6WsQ`tz| zMgElP_+81MT{DjCTW97Jz@|96b8VZqtc`dUg*RauU^7L5J zb!!h`P-bbs4c)};WQ0$%d?e^-BGNcuEwyb*9GWnX01`1~$XaDC!OSfqQK@IUQ3^=} z!n33Y9~ycgtW}aMw4cZ{Akl~@2?_C)GGtsd9BEkei8YUb2`PX`+`lN) zjIMoU7`>bot|%0%OD1Jy60kH?s2bgpTWYytscO%`kTYFdL`>`mH1YFn=r9+!Fm93si@{v zTUCfM-XOY$-qiu_&;kO9kG;Vpt)Re752-4Rb zjSoYYPh;6Of_RdNCr%JKWfvxK;0rq%jS?o762U6;a=H3N2az`yEMOD324zNLXO;CE zs z4wHS)=?Ka%nCM`%cXVAhItF~;3!dN?{Fe{#rmeU8hX;qA>Gay3+a0wJD5LG3)79Gt zuGuxaU5EA^V}E|x+B<#l_{*mc&zdjaY3wxqtT%tG?|fgc!E>|O+-c%Nty$Zt)f)Kt kb{$N`PjmODPiwWE#sfLpP=he~vmE^xrZ;wBu)6L40EG!m`Tzg` literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro b/warehouse/test_ns.db/target/metadata/95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..c8ff1862f6533b6df363c1d915423f9d2dae71d1 GIT binary patch literal 4404 zcmb`K&5I*N6u^^g80N4Hg5qfpWgk2xlm3{QdK4&l)WUyIFEi@|&T`JgO>HKZ=Qme95nwV<^OZ`=Phb>L*s*QH*Eij*j!iW9v zw%inqfSQGRjyvE~I>A)RKlmWME#)Y{@ljw3|FV zmUP|N0~nN98gN55aXT5|hgm)nbTkoZ9I%$!HYFpPFqZ%lF=ohGWiG+YEhAB>XFE{} zNd&^Pqz4}wdLgV;k}R~J$TT34N0fww_(~ZvE~}8#6aNcl`=LFW3RcZ!LoddWDvaeQ6lIoE5Gp6srp+Wn~huG*ze?-IC>(G)QHJW=pdD7d>J0WBH%Y_RER2F_hV|0{p6zTE@_Yoh-H+0kUcka3n=@5 z($sT6w@2B(JxWvGHcFX0EeK2}NL{EK^6(%ubjb-lDYM06#a;*4C=|L^2W%P$*xVej zX>0)4+#X=$MIX@oT|w_U0`AZP0?A@QG7q`b7tkHy12m6SxLtMq_7{ z^&6_ST6>N^MiT@bK@*hOQ3`mtKv0-5g$vKJg*QyqiiJnFv+x*iz|dhNB*o4X`V5x| z#wUKr2#>BvW+C=(`Lhc;1zZ!Lxl8sd&?64a^V@T|`W&n}CFKQVoyQ-12)$~|S%NoQ zIHnU&0ap>YpyNdaI%PkRrl^)G>-ab{-O@MNz=Vdr#}Z+K7(UfzZ^%on6S>UU#q+A> zef8G6gX^=Ozx(l@->!dn`^(1jJB`NgfByQ{*Wds0ce_@r{aeQ!4?3Ow&K2cs909Tp zw8g>>lYMv85tN@Z(ZOi%7>2HQbVD~fx<3Cg;Dc|v-qzdwL(el@x7+TUhSNScaJ+Vp z(Ze>i4qdCu4o4$L-=AN$_8z|X=(8vHPn$1ZZ|pR#>&>6)JKxr8@Z4-RcbfQ6Yu0vZ nwFW-ERtHn@)7<^zqgrjJ@xB~ws6iNgE=NCr>5W|&tZw^1=)Fv~ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/9a8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro b/warehouse/test_ns.db/target/metadata/9a8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..d7f44382ce9b6da6280998a285f79d67d44a4538 GIT binary patch literal 4404 zcmb`K&2QsG6u^^gRP}%=BoL<+8krkP8h^CgB%Btp6)T`DyWLZXtg$_5O#Q`p+$yYc z=7v_BkoX%A{0DFVi4!*@4oGl799BsD3%oZIJGPSzZ8lMBIg^?9-u&Ljy!p`iq`CJ} z>P}clpWS+*iD|;Lp_U4sxkBq`W1j_HstwPcXuhWnjgA)45NE{PW88+ZPQE6HqjUJi z*{7M$8B7KlY}Qc=&Duhb3bt4}|F(LmRa+`eEVP29{wlqrj;40iMZ5J5n9m~N!+v;I zZVJY6U!&RWgmU2vKaRR-!rb=RNUM&(%$9z89P^Nh?j_?XOl_HaZX5{^xeLbA*XSjW z_m#pg-pVl&fZ+lttwRcs1V}1`1SnIHrNyt(Qli6T^13+tjlQa@4 zCUr%6+1+_87rNe$U5bH89zVQKu6!{e$B&4NGFFWXDPI}2q@ffUnAb8}3Jn|Wrbv$^ zUDx&i24$WG+|W(jPEPnio{t0_O+=OitfRI~i9=K75kMj)3|XtpC78KYBr5f6H_jl5 zKzN??;6p<%g|$kOh4vGf1|%L6B_SogQihDHDkSyP|BTswWII#A>bY#_uS$ZGLp4W;Z=@*etIj2+Hx-VD=wGQe?URV}&DR;t! zVI0|)hS4ur;fhkRx?oaPE&)qZjjC}}vHX$-nat39NxuKGCyf4VgsuCi`?2Ligf;O#=a&n*%nD z4FH?l1B|?gOfXjh&(=F#@pN>)U&szS_? zT&!MF&wd7c5{QT!V6>v9rqi z4b@t$J;xuR34%J%1m$*A0v;|96lP4}!n17QHB+@_;hmdVc#Jn-=rB@}Vdn{bhQ|cs zp&v2A<13O|i2Ymf?txAL*92(p()}9rm;>|T_FSz#2dhp=c>!7H@%!&UubOa{;tdy$ z=@eAJRRk{Rcu|2)*-xb@s-?<1J`PQ{^i4hx(#RjPRM;SfPqo>r@>1)@9&>l`ylV7L zzW(8tkH7r(@A2!ue)GofZ?=BE)oOk9+aKTm_4(6(-)l4)|1@#O!(MN{cSSjy#DJ^^ zZLzSUbl-D&g7R}FdKm3JLpKb3=sozy2R!AA4xg^x9nijcXgOy0;LxSr1E+u3rGq~0 z8V>WAP7Uj@&-Uk+t-S|#AAa=s-f8>UE3KW@pUw7n&7G&s2E4c1?VUEhG}?`wMx%wV kFE_zd{Iqv}e7DiqY2B5hEj0+EKgrRzVR~y92J74Y5B32}a{vGU literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro b/warehouse/test_ns.db/target/metadata/9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..98de676fb0d114c19508c134a9346117e866a380 GIT binary patch literal 4405 zcmb`K&2QsG6u^^gsCqyZ0>o(#Ba36w_#U16)@t@h|Y+OzhZBHniPTX=G1k-h1!~|s zA$@-5sU~I#(?(hCj z>1B84v0Ui-ICd!pCVBGc0lD(UlpH@MGRjyrE~I>A)QW~uWME#)Y$-I{YBxoCtmwM7 z2QVn}G~kAA;&yVv5A%E^=x8FcBw!u2ZAu)PGLHZfF=fbFWiG+Yts+sWXS;C*Nd&_4 zqz4}wdMT_`k}S2K$TT4FgeVCq@s%=UTvZ{dr~X&W_9NSw30BW#LodgXDv-rCPh&v? zf-(roKs8E6B|Y6Z$im3R8LQF^vT_Mnnrc*yql)F1G{|Iz=1cPZmpx$&=3{hy5TE-l4Nm3pL$r`4 z+I$S-)xw1XDhofM3A#wpA-+dM3?Bq4SwehxetJ=Lmo!KP#45@m$X*z_1(ZWTY3c=_ zo1+}w9Hpsm8>P&h4g{tfWFFKFd3X>SdE|tiRN3OOVs8R$lnULe12zo=Y~CKQY1{&^ zxjn$hi%4D&!&spz=0r5w2-7;+X0%!ZfN2eH57Qb{tiM*`Tf=R_#Lfll0mP-ET2yUS zA*y(T_zHSg2e?BE2qen|$voI5TJsR&^r%pB<3eB_ZbrNI)G?2?$5yf;l2sLAmLxBS zxYdKn#A<52LNzu2r<$&XXl=2aN>=M2!l7!1Oi*leiXd4u^j4{HD=Ma@Y#l?8zU*kc zAGv&%$hHy0lUzJ;g4n6LFiiqq*zshNGO>~fR;iaO)Gs@TqPbuJ3*j1+8;zY+-fyVZ zYU4Tn7)=n=fhH)oqZ06NfuJyB1{a=H3$K}~H46`KX5lg3fT6=kNrs&#^cfx#jE8>2 z2#>EwZXxz>#j^)G1zZ!Lxl8wJ&|?nFi`#Rx`t;YGlJWww$>R?`gkCk_EX5lx9MdVN zfU5{x(D9-IowA=wQ&dZpcYGY0Zt0tRAf%B$VX3e|44-N9x8;(68h{DU`N z{6K&C=3Vma#0y{hr}gKZR_mwle|z@zU%&qQW3$m{ylCQ6 z>AvUm1m)*U^f26ex}odvWf(nO*NvWmkMNIgy57~hLpnU@TVB6=;PnUH{=hN2&cO4! z9zCRoea~|yj=R6OZS6h0_vo`H_fOl;-)il&{%*E^Zti^7Y`}B7-QH>AL!;f;X*62+ k_y(Gaf9>7hKWa2~TKD8=OAW&4A9D14nBLlj!TP@c1I7SK3IG5A literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/9cc4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro b/warehouse/test_ns.db/target/metadata/9cc4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..9e41d361274d8dae95f54df706073ecbcb78a437 GIT binary patch literal 4405 zcmb`Ky>BB$6u@ntu~MK233Q^kVzjj#?}rnAP#xkTPJ(dUB?XGC)$Hy#*~@-0JDbRy z+)^U`3pzwaLxltlfQ@YOcSP!v{dlS6UuHgM zFd1a9Sz9eMmlk?du*K5(+xn%}(o$(+p%pCk*XbR%HMOe_+O4<2d=?2G_QN}JQ!tME z8qXdilnY<@anwl@<~GmAT6F|wHuMLRn1@t!t{G2ZYQx-j<4AzWJusf$r`J3_Pzt~K zAje1mh6|vyHYq?7AgK@%piD)U7QaeMi4K#M7l`IZLYuWoX+=bn^fDF_{9LG7W-OMS zYf%;iC|0^;3=bZg&@2$zh~Q6Ek>D>Dxy+8T&|!SZ8f#mz6F*>fx>0s-TiHn5Mg>d8 znhSxqb-~<;OM(omWSjH?GK^i|ryYY{qJn{-BS!>%-zG74@ryw00MI4BNg4?im&=Ou zvb*zGE_8hoyA%VHoIQO^ZhUb`j-L@3Wvm((Qob^3MMEhvFt25{6dJbLO_3fex^C?O z49YwWxS^Z4ot*HKJRb=2*HA+S$J>59S!pO!MtI`Kx_PkaUNxz7E$~m3l)_uW3sC7_B^1`yHOSu!S45M#f z8^)kug)2(M>WWEOxdbdtOH_@1#qw(!WHLkZCHel#o-hWpF}gm8FMO8II;? zqa5BHrK#^4rOcf+1g0Bg9@Gtacn}(SN}CtwF{5TP40V+$BuxT(BNMTq>$X)m9av ziZ_UFpm%kEJG6j6vRshN!(E~^k1$UAg_1iL0`q7y+O?;S+20*o$%;r;Rft)VydL6C z4<-|^z~*@R(pc^dm-i zd_!^zv41O`J8ZVwN!b>$D!$#zR3qd8u=5J3LC`msWy90UTWRgW9}ZFSGD`%trlzk z@#A-29G>lmzrWx3?Ovnt@5`_M{{H8GetKE2)oOp$am%A__n>=2IlGL3Sr__ZVMpnK z=X3?-7ff_9+`GE28(rPNFZgr~c!GajzUdvkGj!daXHus#ne+}jJ=3&0j?tqX$LYh- zf7Bbm!@>Nvwg2Sd)6dTyoi<;++h{fZtT%tCx4x~{;JMjswwm}*Yt~w|S_2>7K~wS5 e-23I@TCLT1C`TJ=5JrEMqaVWb#vTkV@B2UTmPeof literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro b/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..b0646f896d04682106e476c7e79a826b80b04195 GIT binary patch literal 4404 zcmb`Ky>BB$6u>uoAxeQFBoNgVqpj_DKk{K48W0x|3Bqxgt0HSP-W|t#*)L{i6Pc3> z8cO~ED(J4EL`X=KNLL~L0(3P;Ps@8V-u3R3z&Z)e_^ zMfC4`&kQk1nb9{g!E;X-En^h0(9ewi#WN%DjlR_~VjAI$g!_!UFxD#8gh_k}Z=8LV z2b{rVkin)cwa{)X^r>L;rL(u?OP$72X=14rEDe_F9kdL!t2Wwgw!nNAivae++j3Jd zj{6!+@28ZDKm#B!W$Q*slCF*$imWR$UbTuAxKs09s`$iTdo*-~m)Yd2+jEa%t~0RB$;bJlW9Pb5m6E{5-4TJxUND{&w{U+8^rE#B3Lt*EwdU&sz8?8JWm7- z3CbWS1Jx)Qwe<9oFppvvXDmwZg4wfLQ6~L7@+s$Zf?E#+i=fs)9VrUSye<_^xU#Hc z_u8_$B`aJ}DOOiZ$|@vaX=+flj%$`*(=eAAS}ZB{U-g95oet3TVR9LGG(4Bb4>2N| z8q)!c*9#X8s4V=PrsyI?hXg(m349T#WC`)%2iaBKUD6;G5Q`{#AbV!$22l0@rEQjg z?vAo|ca*ldX_PW|S`e6CnEOyS=xnf@N>7G*IF(+mR6p+^%I1QFEP`uLVKjDDMZck1 ztCi>YV>Cg~Av8gS9kqam3j~E36S(j!T6oJ;ZCH48Hw#bj1`HiWMsn;tq0jJ{U_1(9 zMtE{V3JbA+E1!MPDd3s_&0V(NfSzz*Uf!PT)#qT@DJd@?t2}=C3G}KdXBpmb;h4@q z1zbhof{qsz=#+y@nxa~&qT}PxbW7h90}+jb5zB-NV)(?Ez9%oWUg9%v7tbs0`zAKj{qfkX!Lz;%Klq?+Yde}IAK%fz bRQzo3{{E?^?dTulge9YzuJ6LM=C=O>vuR7i literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro b/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..3f54f76e0d735acff7bd6c6221fdc5c4fc1c16fd GIT binary patch literal 4406 zcmb`K&2QsG6u^^gRP_KA5{T0tMwYlGjX#=?hEow+u@aP}+n%b(8rze`)UnNY+$yZ{ zFR&bd!-{_ai7Q7C+z@{Q7eK5KoVoGdOzgx?HniD9RWzB-y!Yn!KIYAb&d1fgR}y!` z#`O8UCz_bVOzUfj;HfLLhBowB;3ZoB;)&*aTHk1BAsyq2hB;qc95r`cCTJoEu5mPZL zE7BL;oyBsl>;1^37?|Yz^dY(N#fTg~CNj!cF)pNhWz>>}g~-6Xmf4bP*yuEQdMxR> zwFfXLvozp_ZsKt=!jH0iB(7N3pR#Y2X!PXEc3dQIpNAM zy7skU^m10XW1(1GF)1sPfTgKK)#w&1zotPdGc?TWYytscO%4mXEs^$OPCD)FtuZNkLP1?vICrJ|Zw zZB-$Pc!TH$dRGUyLkkEb7YmZv-X>bJgK^r;mE5@yn4R@#SKc~icYAClD8I&1~omJLv zsMc!jJ^mO?5Y&MtD6^vw@bG}3uwnuao@EPfnW`lVJ9o427+=89VI(BQ&J+3!j|s-d ze#i)qZb)V!_HX&v1Dyh%3DDdn`z7cR2j=xR)X;2TEpW#~9Ibo{03O}**0-L}zlyUmWMC@6pleN9PaD>d#-V?bLp)*1xUpd|s`eZv+^XkEy zi96;K_VU&XLr!CE^o>M{)RjiV82LQ#5~F|i!tgz#Pa8(aCb%LJ9v2SGHL^WH6rRI3 z!9PoV!C^7T;IoF_Xq7g4O!CFn`M333?b23dVy+b|_1EbgGz@*JCfaQ_zA1 z>QFF`=NioJ#7szE`cc?SV(!+@21aoPR@Tfrqex7cY+iDaz|xv^;6|YYk^5jgdzW2` z=uj*C>irBO0T?cTG8!ZYNr0qANPsevX_Eh{EF~r^)?OfnA4+4^AWJ(!7ANCKD)4im zdK+DAJ2S#G2vDqY$p8i(AF(u$MxWqMMUmhy9=hBK)5(yFk~Q|WVn=?!on)izqitm) zaR(KYjI|a5uj_)j6H9`qy=0s60y2zT;Ab3zUZR76pdA{E8TncNQBn#~)Dh)_9B3eR1e60)_7gZ?giT^ow{LmRrB`@bPHJ9T^7s&jW zr;%gItvAW<&Rwe;UQ;90=6fD1FL8>w|+mfAs*%P!o8=&ih=-hW%aH_5! zVoX?U%my%DEL=FDv+!dUql+{h;(J6!@P|MZONbB8PcDk?QU>XOSVh?b*>gj8fU*ZD zEi(snbCkWCqqNLjqg1)mfWUNv)PuUAE)T*&kDRcRB3ryxoK1k~QlWc&z!pWo*7krc zx&>fscYu)>QM@3Au|gHh30b%irrp_PwAx*OY4^5=X?F|OUn}wL-Y#Kc=YsVB;!;!1 ztG2EXMZ7_D1-T0|nx?&ouwh_dWOgtF|(Xi;kBo2J(M59r{@tm1fD^e(b!pK z{f2I>Hs0e;(FDnc&;(_66apR|5DZpK;lZOif*a0j!!_-t$dSBOjziTcp@DTBc{ge9rdVnBagfLcwbe1 zp8o#*AH4_vKKk^H_iq1i`>gicty=A;FTeQfpKreXZm&|Q{9VNp_gk&Q))fJ_lC mhQqh2U@Cs<`@cM>RQ783)ND;p!tAeV_5)a6+lR^WvHt^c*+>-t literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/a175c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro b/warehouse/test_ns.db/target/metadata/a175c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..2773d3de0bf7c12a2a5cf65fd69770f55877a7db GIT binary patch literal 4404 zcmb`K&2QsG6u^^gRP}(Wl|WqB!{Bq$_@m7i7Z%uxm7pxU-BT4=6MMYz*0Ifa+$y`u z9WDs*Cm?Z0Li`Cx{V(9eVL@CuaN)g~*s+~#XtSv*%bv`<_vZIL=FJ!5=kHrlPXzpfS68u7_T4pSl zooitl1SnRzWCSlR^Jp3fZAkE^vPke33ms;M>2%C^#Tsi{v7R3=JJ~4vXj|Dx+(rcz zW6h<&o4R1(#EKxpD%d8yfD9uC_-QAgm#APM=*S^K-?vD_9efao9ROPKo1_s_F{vuj zi|)>1IoI`BRz`T~(l55y%H+g!j=(@27 zFetM$;D&DEb~3_`vV0`yXd==$U@f(6O2#x{E&(KB!jQGfT!NWfMxs*BcA^xL2!v-z z4?Z;XLRhOLS!zF(X+R>6C>pRw1b;{tIUNp*@}nR?THYFUFB7koh*xB0&R! zG6>2*HA+S)J)I~>r=g8AR;BmB>_x4}lYSZblyf@6t^0yaq1Hhi$qLJ|E@e)*FpQpk zX&C*S6|N{0s|zM&WfHJ7Rj3-hlI52)NM(j*OS1hJJz@0cBXoTbJ@XwJoXO*dXj2+% z^AU`f3l|QkEc~3t=psdj_%0C<{3B4w65_-4lZ&#uq(LemR#6T>_QKE|pd0{7Q_lh2 z9_8TnC{2CWC}r-nATXUEb)jy^!-LS!C8zYX%odLodlO)zQ0U$quxTJ*b9=z1u?1jr zcYu)>k-Q*=u|k#132C?yrq$bJv|4?DX$`iAY4uCi-zf2|!7gE9=YsVB;!;t~tG22T zWxPRj1-+S1 zc#c0o69gSY6O`Fe3V66cP?#};3(u;BH%!%vh27g(c!D=z=r9tJV&@5chRX!wQ$J*c zM^_}X5c{|M-36Tjt_jfGC5IL05eMe^?YUfij@F%$@&dBS;}1W9UNz<{!5c0d(+Q}6 zs|Z}s@uC8qvY$v(R7;h0d>oo?>6>g|N<-gciLgNopK0@V>QRRc z`cAj+S%-_u*1@CukH38S;H>%T?Z#f?_j>cE`rdc-8oW1~&AleR)S9)uTCIVvck5s( g{x$c1{j^rwYkVX}8)^_nujS~+Fuk!4gVk;S2PZK|`Tzg` literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/a1884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro b/warehouse/test_ns.db/target/metadata/a1884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..fa06126f3fb05c4b5257f1798f3278ca540bafed GIT binary patch literal 4405 zcmb`KPmkL~6u^@-TJ``dBv4Nk8d)5ZjsI+SlW;1~6_sEq?e?@p*2JD{%sL)39`7nt z`2rj&J_;X!L%ASvK|M&D`~5uM-+E_^0j7;9x~LLQyNFTuV| z1HoW2$Y8UUUT9Yq`c$&T()q8|OP$J6Wn!)sEDcua9kdL+t2Wwgw!nNA$pH2v+GukD%+P#BrvsM?|D3uAaWOsr?=^);QLzP zvyU>21Ymdo%4m@sBmt5dApy!%rb+&pyJ#9dTS zG1guPysiu8POJ#BoPur23&@arz|S}ay+j8CK}Yrp`o2ZD@bHU3>;TY;-xQ6Q%5hbZ zS#)<6%ek)4xkoWD$&*J9$W*2F+Yh$qLJ&E@e)*u&g8Z z(z3caD_l`1Ru@dk$|PWEs!+9#N|s;JFjX0vEy?y@^n}%&4bb%=KMy<_o~q-A7!w*B zvjL2k3l|RPEc}AT=ps#r1U``*J_uB?g!u4-tZ<{c&bHRE5ajB{1Ra;kx zGTxA1LGL;Q?$81P$znmW?`{*VeTZ>-lqcM1VHFe&gn%e(UO;%QozFng2Id`TzHl(yk@FaEIhoKg~xaUh7KbkDR!RFXZTDqF$p3@ z1ivDgh1kF4?>^|1a7}>bF4?a@=K`4Lx94*8IaqZ{std?Ek3aYndevC41aG)-OedfM zt|D+j$BPPd%0Z$`(JfWh@d;?Um2a|v35|jgOQZ{8#MGF*uP(J7_nEhg=T+^UtABp| z>Ei1TUesT`^~Wc-KWzMRtI_!Wx4(Y>``Pn9|EhD@_dF1n=F9gQJB=6h=8yHAAL=!DZ#J7dO?;^}Ydf`C17F`o hQ}Jo;KL4y%+iBcWqYXU>qd%+Bk70Ua7Y3{Q{tt|>O1S_4 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/a273260d-3475-439f-a9fa-a76fa4e0e177-m0.avro b/warehouse/test_ns.db/target/metadata/a273260d-3475-439f-a9fa-a76fa4e0e177-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..8ee9c75a8fbf69ef5c44e2d3a01ada7eb2a22d33 GIT binary patch literal 4405 zcmb`K&2QsG6u=#~sw#mhBoGqP3XObD8h><~4^9ZSQW2D8w|lB0Yhq6tQ^z*raZ6a` z$^i-f2rh6z`~&;}d>mNrd*-n4NATWE?AT5=wAoZm;!I}Vd-HoA^XAjx=Z%BcQ*X>B z^u^9oLrfE9^o>;T%o9e_7zHf!Q=@>DGMc0SNr0q6NPsdGSz7!mEhQ#QR$d@R5D8<}B&8J*P112JB>1^dwai*9 zyD*|G3{k9f$p9XFHlkT5j6T7isv^N(Eb^EeWs@P}HEWzr#g2lIx#?QjN1Mt<;w~zv z8EY>D-qr?Oal^+h?0y#0oxV=wl@cCTN?nj zw+9$`5y=Z;7%No8oQOtiVLF{{Myt~Wm`-nVm`=B1{jCz;>1`7xb}m>CATAZvqH3!O zQNAIy zwe}o;j3x*=geEArqZ06NfuJyB3KyPb3vZdKH4BgLX5k6mfT6=kNrs&#^cg-Aj8B4y z5gy-=+(PW%if12m3b-afbC(|0pvN4T7q{nX^*LH~O3Dk!I**@z2)$~;S&BDYIHprj z0ap>YpyNdaI^`ghrl^)G@Ax=0-O@Mtz=TG@h^4{>F??#w-jbJEFZP+YkLQ*4+n-;4 zYroU)e8hkG>!;Vgf2RMwqw6nz{^N(gpa1jC^M<%MEwe@Kj$d$F0ID zp8&Li17{@o0{byIaNa8%I4ztwbKt$1*s+~#XtRl`YBHI5@6GT1nKxeyzuGx?KlR3J zLf`DZ(8V-idS6ck&pe?U`Y2$bpX&X~7kc39eap}zI>8k&_ZfF#&dB$Kar7L%arSi< za0ZJ(2Adgbqg~tRQ^6Kn=igRub!uCsiG^0MG+3o~VCd>pEwtM-z0K)@Nx!+!)~2Y}Z6CTS#8jO&Wb zvb*zGE_6MNJ&J)zo;^7uH-Q+F)2Bp68LP&Hl&_3h(ol*F%xjq~g@%nzQ>4d|u3LKm zgECJ8ZkaY7Cnx+k&qsoeCL&8hW~gIRGNdW<2_O+;hOAZQ63pBx5|w(c7iW+}AUscc z@S$av!dfNCLi@Q)0}_vjl8}->DMQ9p6_R=ye8b!za)(pF>bY#0Xz3U`!>)fJPnatT$bE&2J&p0G}419W{DKMy<_UdZc*=o6ag zvjNOk3l~nPEPO;0bdjP%0-uN&{t&2S3Gv|v=~dNT(jXNO%P4ywdv53!Q1$?&Z5Dv; zj2$Xlt7ac^=T(FQ$;2D$~jh$8AZ>ZL4 z?LGb!O%QYlO;Bz}CE(!!L1D!d9z4qy-ZE8d7IyAt;VHg=p~FZ?hMgz$89oz?PlAXM z9^a7MLhRp)u@5>0JQJX~OAl+%V-C!V*K@V{9Id(~}58F4CvvCZ_+RzpYH%brv zVOvoCoQXC@d)qQit8H2M&$MuaW6Nxt_-UCf>M)ZY4Oy!*Ix$;E-Z5>_?y=co$Clqc zwtJmUr*}AiY#luQ?8%qU9$Ylve5mbdf9y10?d*NO(|~ca+1zX5pwVpXH5wWYKiCCR h@zdP@|B8O*IL#?>)lV`>9w5gd7MCU$Hm8`^B5D6%Ir@4flGk9qTv^L%UX&D0&U zkX~=U(8MHR+CWPM&s?FkwUN&PFVzO;FEroN21Z+pXoxdn?lEq|SUX=6#L+W&-Tev1Yo!TN^6q>Bmt5NApy!%WNGoQw3O&DS$TnIek8PMo0L{WG)c#?kl<%R)iPtg z>|BeoAV9IwB|~`d*obC<&;|tms)_`EvB+h1l!XrCHEXPO#g6=d+38Bz2kXj4;x;O% z8Eei3-qZy%C)NZRR>?N$1!Nezz)w2{y+j2AK}QY<`o2wK?&1%D*a4t5zeySi72~=h zz3lEhmJ3}EVwYlIlBbVP$dxa~}Kh7BrM11M^yDOQB({-4yAupzFpS zz@W_2fE&7r+sO$(%JY$+qlw6pfVI`ODRF4ZJOW6>m?3MGxdbz}ibSQJ?Zz1-5eUzd z9(-u%rLa~>GS_}8(}2Vyq9mlmSIUraRfVLU`kyn~k8EcmSUr~wy&OlXKo;9Pivg<{Dd%*8TlWPEq1Hhi$qUQ8F6BmH@v|2rYY4z8KY4s}B-zf2|{w85!=YsVB;!;s9solI4PA-rXcx^AO|os8Dk2LSP=QM!WRXF^@LKRS(+l zxqOnywh_dWTs(1t*r~cOO#)xo@o1DXv5*K>sh2C%&pU{sxnKbc;Tn`1jh$8AZ>ZL4 zA@*;@vj;i_Toa(VOZRKgV-C!V+jF)094tE}1)@9&>l`ylPCo`02|Z zKl}He!ymr+kC|ICp!a&Vgn1Iz7X5J9_`n zJm^!i*YE55v&+`rqYoZ`{Pg}=>-z2HPV@Jz*2}G(Z?_uo+-kLUTKLdtHFg?}CO*Ek j4W{C!wfo*lqp{QcP>#0LAdJ585J&I9^yV%M*0=p1--JyW literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/b09a338b-66dd-4282-8794-c8be344730ce-m0.avro b/warehouse/test_ns.db/target/metadata/b09a338b-66dd-4282-8794-c8be344730ce-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..3d04b09de4fa1ddfe58757e0869ab615ca44f489 GIT binary patch literal 4406 zcmb`KPmkL~6u^@-TK0feNFYu66ph7}I;=*U(z$ZX(zk^5jgdz)Q~ z_)sf+_HK@m01OvE87)$PBtTLlBtV(TEG>RjmJ$;tYcCKZh@>%Vk_ z?x2DtW37e2>$+g>#3e!0F4?BMfDB_7_!%dlm*`+1=*R&<-?vCCT>M8Mb^z#--xQ66 z$?>uxv+V9XmJ3}U#V*6ZB#$57Cs%^5tBnW;u>@fh@Lp z7E2ZqltEAis?jnk>FLH{Hi;aZu`0a>X3uLyk@SnmXF{+kZat8E0<{k6NM2YLbt!kk z1*ON%C8fQB6|N{1s|&7VC{^yXATZr9^Pq01!-KHMBd6@N$`+3mXA@vrDs-<7*rEv7+8(e) zw*YMI4lwc}iWkH%R;Y?O5sNm$w2yZgt#%J!+WqZe+P#YP*Ghc5ze||dxnMnjxYSgO zs;w(T6>k_{LGL;O?$81P$#Oxm?(7n+b%b$xTqwD5A+U}%qg{LISjW3#t5^}mstPen zl9xl=>A_@SHML)%np*!;P1i!ScUVppt920JP<19;GHi5;AelGxcByeIDyE@r9YT=4 z>}b3fxni2Awh_dWTs#?t@u=#;GzkOg#J-<$xsnKWsh2C%FFJ^#x!@t6z%?j08au1J z-_Whq#&i4;njqN-nxNc{O2ESfg29X_TzFP3yk@E{S$K3a3s3L{3>`*FGVDB|&+xe9 zViH80i1>=+7GnQaynCQi!ZiV!yYz4gdMto>aeJ;-pYFO-Qe8kcdHntd(5ohbr+CAK zV>$&Da20_II$l(uQw~yPif*a$j!!_-t$dRYOjs27Je3ZJ5mRIKmb%osvB%wgJg;is zzw^Vl?>+0h_LF$==V#W7VdIZm&BiZ3e)Y{i|Ni>*r~yyy?>g>z(CHj@u9)EC7@&2a zF_uo09(tpWWa0^z9gO!5HL2O5)HFLLr4&Em171vg+GhL6wCtX5b=#vmeY@TDP2TQt z)@ygU$Gd%tQs3_%&aYbs5AHtv^zps3=JPijdyT*9&7bRg-_>jI-fTAan)p&{*7j<( k2EM*guj!|`|J#SP+Fs+X8f_G#zpK&rVR~a92A4PfAKzw5Q2+n{ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/b1c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro b/warehouse/test_ns.db/target/metadata/b1c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..395379a012fa202e521db28cb2d01d6c3b3ea6a9 GIT binary patch literal 4404 zcmb`KPj4GV6u@oQigKtTBoL<_MtcN1-akp~m{Sprs01Oj=_#^SQFF`=NioJ#Z<^Z20UsfG4q-i1EV|xD;ws$5f>9G+gD5^u(VsX1~Bm1h^C=5`UJl!iv)kM$YXAlPKHcWtZ_CKI|@SPCTnFMY$_Xx zyQrXIti2F;Qy0vgSP^771>2MtkRkVgpK$_ui4F#Wj_eckeT#76;V%NQ13)W&Q#4{K z$5lmU(cM`r=ej=O9>u^UPaZua*MS_9lgC6w87s$ylCO!s^Wi==zX94Llm2tLujt z6B-+{0nC>R7f$Fb{FKJ%B29+`K9L-L5U64a@!b%3oxp?h<{wuON0%>moi z27vAD0Y+X#@q!q}3RN;EqS0EIPIsHp>hu7nbG$iBr&qH6Mv3nnZxbeVE?5sBE;ZG> zYU>J7#vAf$=v{}v9a=yjSu9BQ;Wp9QM;NEwT*<8qfqk?d?aEun?rx8*Vnr0IGQ>2F zUk`Ds7n6073e? ztMNhPiD|6bMi5Uj@njhCVcCUA90tf>eEr+e&v#$^_{X!T@#~#N@{{8;1pT2spR;&G8#}oHEo&C-=6>Q7_SqIu; z=|;)EKkP^6n&fb}ZA>Blrsg{It#X(DHf?^}Y6yXLZ{Lhlh5XveBqb z54t0h*+cul@%QJCt-Z7Rk3N6$;Jo?j?Z!^y&wBHR`p&oY8jPFG=1vm_wPtOnR%_t! ktvZ;BpXTn%k88D^#(g#0(33Fxi<z zU*3DJiD}HVftCoKx&B{WL3bt4}|F(LmRaq)c%(a50{wlr0mZo;qM!WSEn9oAt!+v;MZVJY6 zU&GmcOu6udABF8CW^VIhsFg=xW<%c}MSMa<`2+-kYVHkKkWqc5)}*t9XTNA`xc3~iys7H2Y^=mCTYY}jH`d)e?-3EfKLV93AwE1mxhlI$8l(bZ8D$@2&kfxI%08ep^&HUM zQTFeS($u$&Qszzz0@Dpr59)?IJO~Xva!OCjZ1GsJ*8w&Ph3@qMn+5_lHwSDQ8vr)9 z2N-z~$qQl_D^$sxkcMkvTHS3%tJMRTR)2GtR~4>(WJM&aGQ>2FUk!1q z2a}1_)Ow9-YW`0(T?x_JVmXzpRzZYA)t)dxvC+wcWZuwQg~lzfn3}S62toR)qw!(r z@@XvFMi5Uj@x%!tr|iNc4t!xpqfx@dQX*J|UM^R^=pgduf(2{>*PzU3?5whWL$y|G z&+(^df}jpGL75$;fQJhNg&9-0@GM(+%T%pcczibtPw)l|9Y#V@>^z~*@R(qH;)jgz z=!Rq#V*i#ud!SRmH36EtRtHzuqc*BKbIsp}M z6@d#nUR0n{_7iD}YN@i0k3-WfeUlALXy}hvB5V-Dr`qf-d8u_HkGZ>eUe&%o`{k2= z-M_y)uMa-^dH*ZF@$0=tUE6u@n-2|1Kd+S1b&1|5qX>mwU~6bid^Ll@d~o6R0dFk&Q)V{K$fI~pZ; z7yk?Wpx6Ep{RaxAbfNtRdg-O-rR}w+Lf@OQWJ&hAiPs?rX*~1Zo8SAGH=j9A>U(b_ z?wC#J%UjPiF^!ov&=SE@S7s_w87bP&G)o{(b7UX!5ImuhmPf%2H`!t`#ixSLq$LG_|WX+O4<1d=?5H_QTt9 zQ!tME8qRLVlnY<@QP@sm<~GlUT6qL!HuT%0h)<|!UoxJ+)P}j|Mxg+ayI?$hmtOK{ zUn%_ZgA5}97%qU)S|kTafTTi5fHDTHH5US}>w>uxD}oHGV4L&;GK^f{ryYS_qJn{-BL@V1-y#ur@j)PV0BFT;l15C$ zxT;7mx;u;IT-PU&OEECXwM5J-RT58*rI5c4%0VHC~khRKOf|*-JqEgRxqZE<| zgl9<)J~Z?~SgRyiXg`)|K%x;*5)$GoWyrX!LQ+rsXUz6P+nEYh&1FL`#*r$J`8H1@ zK?8y^2+BY;N=7L?-6%*Wp^Y<^rT4(>d9BEkei8YUb2`PX`+`lN)bot|%0%3npb{60kH?s2bgp<(D)_Wrk);vi%o5Vf1E0bbSz=`z{Smk)lIi^qz+4zN)ubgvKCG!U@4IbhS+ z0I<0|z{rb8UJ%1rp-Se2G+YbQ>TWYytscO%`kTYFdL`?xmH1YFn=r9+!Fm93si@{v zTUCfM-XOYy-qiu_&;kO~p!Ui#Xs?FY!ms&USn7fPTRqe08 zzj`Zt|MzF#Jo)zI!}q*j8^7FYG`{=o#XtZ4@Y9c9)M~Xq>$u}Vr?cO=qMVH*K-Ph_ zSlD5*?>QYo`8g9EjP{OU=tf7^@nPsXJm4EXaY)zOdfPd$4iA{oYxn7$Ui-itnQhwZ z9kw04+aDROJED%aKfi44J-mDJ`Q!Vi&6jUCb{c=wo8Q-WzOL8cz1eK;H1Va@tnJil m4SapG4yNK?bNAv&6-)8} literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/b528ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro b/warehouse/test_ns.db/target/metadata/b528ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..cb14674e777d0de2976d33f8b09b7564c339ba17 GIT binary patch literal 4404 zcmb`K&5zqe6u^@-TI~TXNFYui|g_ZYWftd*?^qVNLVIQu;H zIfKa{gUwrNp;=kzQNfl=7jNsAT9u{J#9S*_>aWu~YH4a$ZM0i&f%z;HKJ16L<)&a9 z_cfZ|jVTwt@T0Ju#LR6z8)@YcnAy-RH^1Yo!TN^6lEBmt5NApy!%q)Gm-w3O&DS$TnIekingixgIbG)^Xwkl+_W)iPtb z?3os(L4abVOGfbEu`x{pp$!TCRTc^UVxi0IFr7M#SFEwN6+89=W+xkEA8jieiQA~4 zVyw9ocvBZFoLCWLSOwdp7m#7(0zd5p^b!>e1RXgf==&ClxQjmoVh4a${3dC{R7|Rh z^rE}7Sk85Q6uA@wlRQ0pNUnV`Atz6Wj51b^3n^b2wW6UA8JO2HTXGFs?Iur;6 z00w222Hen1+)hULah8t+9Zf_U2dt&GO^HJj<`F<5CJb4t%q5t)Wh5%~Y&S|Fi9mRk z^x#87FNC#9lBM=jnFb^p6D1)bzEXya%PJ)G#Q%cXerP*0!K%4z=*2iv1v1~}c_e5+ zPzFI6s7A>srKcMO=`^%)#;Wu_n7ybKdD1TQ<}t=;FIRHwLSPA_@THML%&nwtMpP1i!Sc34g&t920JP_?H_P;7MaAXzl@R-tjrE2gGw9YK)3>S%lr zx_lPPwh_dWOgwRd$SJ!pi34BQ(RiFNv62W@p_j|mFFT05xnKdC!Zj!}8au13-%zd9 z#&i4$njokHO;Bb>Dd6D(L1D%WECh1kF4&mQO$a7}>bE;+0~k2o;TZ_nlGbF}W1loyaq9)EZrdexY-1aG)-OedfM zt|D+j$BPPd%6=kEQ7u*0@o{LnrEjuBQLdX!D#Oox}kS;T{jj#hGArHy582?PS@-+cg)(lJ{Y%;tgh1@P=mI+uH*KP zj=QYqI){tP*1_X@XP-QMaNd0Rc4M#ccfI*Teeauk4W66L=3WyYYR%eSt=7QDx9VUj gewzEgd|0dPHSWpLh8l#?U*+frFuk!4gVk;S2f~X=ivR!s literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/b7caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro b/warehouse/test_ns.db/target/metadata/b7caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5036783b41f4359e86b34834e1efa648378ca6b8 GIT binary patch literal 4404 zcmb`K&2QsG6u_NqRrP=>BvzdEF!DKR{LwZaoEEW#m6o#Xwh~emSz~*$F?DP+9=8gs zT=#@Hap#H<{0002Juc#J;DR_HafAc!&BTuFWJ8-x)LPDD=Djz+_c3oibH8ltzms}n zHlcsqd#Q_Q!t{Zj3Z8jFZ|S3eg?_3JE?(+^uMfZNvVsWh?B3YG?|^bT9P+Ep9vHd93uf39)QwYqyR~Pq(Vr5G8I``{3 zwFfXL^EBY5Vc~Xi!cX&jBoIAf=!^-K^@5p%c3sjPPjD9 zu5)FYy@D04C>5(qCS~Okur$@En%#=!S2WCIhUQE1{g*vq_GUwLeHgz8JQ|+K-I zn&`73j8_X64yY{rlqTpRMTZ1F5i$HBP{|VF!w=HSs=K5?Dj=3o_CfaC&@G_s14_#% z0NovB|L!O)W7{ZY?zA8PfV6#-{-X5@JB4BHCz?QiI zU~7ATkr$D?AcnC*Rm_QKv=*k_-Db4fJ%DNVH-~BWD%RgB@$LRLVPfZk^#I~hQ7x*r zst{GYVSEj}s|(zr1q71if@B?S6RmZOaoR1E+_?}~$LrCqJaw$@_Si~RM6#+v%#!5I z5Vv|TSy)Z&x2UGp|5VeJ5bZ6NQ^{%-L^xEP2@@0>ogzr)4ZU4z+=_~+D_e&Uq;EPJ zA4MLYCbDe=@gx^d+%R^lE=-d!5KcTArA#a(f?ew63iXQ)qG&Ey$R=OvEg+ffO4xIj>tF@+1yvW2%y)tZIJceC&WZ@|!Dq$I=66Z#CF3C1Tu z#0ZbCNp2zbZ^gS0It5%4pt(yAYS3d2%!}J|wfY>cIwj==WSz$!e+0d1!dZ$pTsWpv zPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`M`um!HA{80Wo~4&+f}htrz>u+r#rp`~Ksf zU;SvjzW>{k^M8N&@S881H}{&&zyAK`yPtmj{bo5*()gooJ~$!RN|m52yWLY2Sz~+Lm^!u@k6VRR zI3mP>zW@+N?nwL%z+Mn{t{ectzrcIr*s+~#X|su{XfmC7@6GRh%$pCLk6U{$rS6zb z=$~6pG%-z>Hq=tVGgoMB%@0`UrP}cPi57U;&}eHBo#2X?dyLyK*Dm&iadZK{IQt|E zID^F?gU#CcMzgWeqk=8A&VQ}mYBjb>6HBdNX|PJ~sIBFv>Y&|v8_Z{s2;e-tBM$}h zc&^dxUP8GDL=Z=vG-2-c`ADnJz)DrW=f`|PMdym~6qc&yo*PF3MDBv|^mTg0>3BYgxl-4FCNCG5tgajy4k)`E-rKLoN#km)V7DPguwMk`1M3ZzJ3kiNMG~Z?{ zww-HH7KSKRx?}_ckNGqUg*GJkuewO^7mHkGN7=+-ykU*Cu2??^nVsG!`(Rz!NZdvR z4P(uPz}vcD?!<;5!>ZUOy?_j37x-z%pqJ#qK+usxg1&E)n7jBzAa(#~!*7yCLdCeL zNUyrPh~-k(`>{(gFv;VGC*(R1V{-h6$S7m=xRCO5qn0#OA_MbUW=pAIt<#k0v83zP z9>Ab1(tsPfiN`4jKPd8%preV%l909YV^iYLlz9Y@h%rOfdFB$#+&Ypx^=voJAc;VD zk@Vn0L$8E&o+JzHr!oyl?2}wVN`hP&GOnwT)YIToW(Se&Oa*J^vY}VwC@+xZG0$Q_ zLxM60%0M-_j9PlSahOda8&@n#?}OR%T2UtbBJwHcbc#n01e-vugE~?amPK7EoN#Fv zJ^RWq`XwveQ7KlJOv)-GU}xXC) znrO2T%-0JSPUKnm0Zq_FIUN#sM8xoiKqX6v4=+eB>+X^UYGL>bEge~>4upHbwgerghn1YrKfeac&*qs0X8ay?)d?m1_CzM2W%Q^ z05&%V7>tw=KoaFl@P5BmQ%@U6-2mH?FkbU8=W#p<_*17Y23<+spYngAV{Be zHQtY0K22oX2;xa0o;YFb)Lob+VIb_-_fsa862YqUa;5r32T?W`EMyaS1{FqQXI1nY zd24m!J^lzy5Y&MtsIa3J@bG}3uwn`io@EPfnW_y7kM3sSF}{GI!$?VnohS4e9utgD zf`}0wUz5T@?BB|<2Ra2j6QH?E_Z!e-4$RBfbG`Z;thy!T1LP);pS%aXYQkBHFI>2$ zQ&0g<5qO~ELj^kJAeE-%EmhI+acH`wZ;FWtjRK#g!Ui#Xs?A=Nk6JhOn7fPjm9q2Z zTkeZLKK<+8-+un=wHLm5s{XR2s$c)}<#)gT@a-3Wv=l}8yM;#{cDwuCYs%R;24-F8 zi-jGf`<~MklwUB>#c=N$hM{*2T{pTq3}FP{IHlvKqj#Jh(+|xfy>nptPUpZmI_&g) z-|YB~?&=4OnggBg&tF@658iqB(c}AP>QAqzJL<2k?eAMVpSKhktK0B}17%y;Q4~3R dc?(R%&-U&cCyKJ8zKaW1%qpt73(K14{tp%oNwoj~ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/c068c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro b/warehouse/test_ns.db/target/metadata/c068c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..5527289414f0132ed06b18e0e6a27a874cd2e744 GIT binary patch literal 4404 zcmb`K&2QsG6u=#CRrLS`3B&>RF!DKR{85?@PAlyeRzO*HyQeC$CibN9*0H_gajWbq zS1w50ICAF?;L5!>kPs&%BrZrG{sC^hHxoOylMQV)Q58+5Gw;3my^neG#qe2U|Bcie zvkCqC&Pzi~6K3>{RPf9bM$;GtEc8>OfA-P{e4}qQjfhTgMa+H1U6^a;d%`$6hhLmM z&jQY1G00%ErrK!NHu_Ys#n$<+)mxp~R%v3P6)X)_=^Zo;b*dKHZ8pJt7Ks4P!&~xD zFpuXN%I|&Z&AX$RPpD{JGM>Ux-QM@&NPx&aFrL0gFL`{R z6n^tjj*$Qi4?r1BQh+2tQXwQjnTjke{wpmdCM;H7AVv@gW7Z_49T82^aV#YGxlpyu zT5LNrqAUzitaQl$20k0nEEGnc;J>OO!Cx%$m>Xr2A>%b`oK3}!f{?lCTG@x2%0}WY zDySK2F9hDy1#>6X1X)hWHt7Xq7<<6aI0n5$1p`4x_6hpFNn-Bd7lGITpf$fq8VMES zx+1ge?mU(YU7y7s#lR#_A3r2lff$qHCqzaWtHyKx9Ynd&DhK){Bq{ou3 z8+!nQGEW0;nKm9LC;TYSM}m$fB1=NnRL7=dNK@t$KqAHrS*y$?n7LIXD)n41&LD|E zc%Jm&L(43MwMvqO_7j-~BpwkZAtixQhK#E!B=t0S!Q3Enhf~4oxonx`I8p_&IOb_A zXh={7K^dq<$*82K7l+v-a&g77^e&h^uN6hoFCw3EPN#VEK(GnaI;bOgVOi9r+zA(! z)p0K^t6Q+b9i?J*!KAEQ0+yy4RjX66{E~*5%+P#Ge*Us2tnO@pt`Fn$z@y=*yncu= zp@}gYzV~{L2#tJlLQkq}@mg`$0k%qo?)3rN76P_62W(p# z0JgUW7ALZ*!PVw_^Q`65r`<6DD>pSPvjB71g3@ zs|r!Y8^%}AyAFXnw17aeT#)P!w~5w1!Z_^|N^V^U?4$K)SKc~yXM1cVD9jHEu=4G?c9a2+~(w zjSnJ^PZQZTf_RdPC&MrvR$Z7TVIbUiG)kFRN(86W%N6Pu9YoPwu#ipQ8I&81omJj% zsMc!jJ^lnu5OfGlP;N&h;Nby5VZ{_4Jj)i|FjZ?79^KBuV|)Qahmn#DJ5T5{d?py5 z1Q8=Vz9PAW*uNEHA9M2$ zQ&0g<5qO~ELj^kJAeE-5mMZV~I5geTH~GYbM!|@s!UZvWYRul1k6JJGnYV}cmG;M9 zZ@vHHryqy?-+tPC@$Cn1>eqL4{fF;<`S;JSfBpSL)3kpYc;bG$ebBz5oQ-2Z)`qrN zxKVoG58HzBb0*pt?QPRC&9(&}7~vOuU`7qhmf7;mqpo+@8MTHZo3#!{mIov1w7RU@ zV@JN}IF@xVe{AhPy7&0Yrw>l`>v!~B{pZHc_l@1J8XAoC9r(h5wxjK8njF5}08{a^ Yvv>W8rtRwYaKVaMP1pBeS^e1m0mAu7p8x;= literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro b/warehouse/test_ns.db/target/metadata/c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..1d898f1a7c2936caf4310e62e3b8bcf44f118789 GIT binary patch literal 4407 zcmb`K&2Jk;6u@oQigG{^5{OfUMtip7{cz(CPDM1L0zzrhQ?OREyW@JB{bF`Dk*R#; zf`s@>5aL=12??$o`WJAnD4gH`7v7ukuDxs5B(AN*+8xil_vZIL=FO+hlls9MsXJjI zeR1olCZ-9~hFU6k<_fK)jeQn)sWv=+s`;KaG+J6jL!1$Fk8vBuTKSqFjvm7sXJ2GK zXD}ILuvtqjG%E`|D%fJ_{B8YGtFly@SZD=H{dIarElusJjdtrTFrP)jhyC!j+!T!C zzDBd#3FX2UejK&agt^W0kyajonGOB+IOZW0?Muc}nA$K8+&B^-avzMR@6bygA1a04 zyq9An0K)}PT8k7Q36N9>2~egYON(Enr9_9x$_qsEBcaV&WNAf2lXMab34ShAEi)F& z&b25D0u(DjcFDLZAkE^vPke3i(F<$S?DlcvBug~?AQ;Oood|Zi@6+(RFPP zU{L01zzyBR?c{_Xve14a(}2Wdq9mlmSIUraS%svY`d>2Jk8EcuST&aoeL0R)fh@Lp77H2> zltEAis!=jZ>FLHn7DhJCSe4!fv*)#3k{6amUCNzsVHiF8 z(lGi3D_pTutS*?8l}o_VRH170N|s;JAd?xIFUj}6>oi__6QO;7lGrLuk_M@OSVcJi*>gj8fN}sRO}zkg zbCiRdqcrthqm;SRg1~fx%!9fi4-Y~kkDSnxGFv=W>`j1;r9$`mfK3Ado7)36jV%D1 zy9128h~xz^j1{V6PDG=PFsj;AMRY&8! z$mP>Swv8a31F#7^0TX%hItj>qGaiIqgKmU_8D{i1^?nhO@N5UxSF(b!q#{f26- zHlE|BXo8>)G(ou?rGSSE1cez>xbUo6c+FI;Sa@_Z3y<*z3>`*FGVDB|&+wRFJoF<* zczi{23$cGIo;}bh;F4zq^r{JGDc*45m`*_j zTt(o5ju#c^l>JniqFSoF@jyA&#T&xU%wmv z@$AnhpTGR)qkm7u4~<`MH5-3F|LWy;KmGOWdA$Lj+V6GT^sv)8>|9aKCNWU!KxZuM zC_VI?j-dQ86CDirj;`xQM>p^bJ{<#|;9r+-dRuP~T(|3))M<~$-8=2BXh|H`aDLx9cyRaOXOHfkHDA2d*lYY&Z+>6j`?g+#=Vr6H*Tjcfv$j{OHSqDx hdQE+r`#*nJtL-)J%F#wK`imTWAEr0Z^9z_ z^3IhmrYX~hdM0@83B9Y20~Y$3K0Le9179DST|K4|&Pce=xC3L|VojLDPvMQTFY|yi zm<%%5tg9AUjfFlHY_W9ywtA`ESSn2{wSuL=D!rqwu6ET!yNxcG&teh4et1uA3dV6? zquJe*auJ9iiF;Yfyw2H3uaCe?&A2;Gctl0-g7FNdYSxaI!~#TagYon|dcl)jrSRK( z1x5leJOHJ4NePkwNrjLAWh(Nl{8w5^44ACEK=dFM`m9STD`J{vlSD}HbD?UPxmb3l z$9Wi{Sm}}xJos!(^HAtRf`8RTg1=boF(=L=m+^)*_PS!nLCBo!TG@N+%0}W2DrgvM zEd<`w1#>4h1etclHt7Xqn0UZXKL))-1p`4x4hj0cOA_wk4}sVLpbfuC8YvZ%rXr*2 z?jn{;U7sc%#lR#_9z7tJftZlv$3#XMtH*_uuZ&vKP>Br8Ynd&jhP8H6rpJ=58+!nQ zvPc7N8WwJ+ApEe%M}m$fB2PosRokY-r5W=HAQ2OWtX1X`%-lK>m3oesg##)JKcgwSNYNpIPecM=1S(lVeE30jUU!!?NCm_)$^pop8@d6M13+mRC7|1* z9NZqIWo#Oy%$+U-rWfWu)D3xf5E}dBgr3yd;<4gf2iU9>y4MG6nF!cgAFySv0od9c zVB|$4FNk5RP&IR68ea?3KHOxq+D8D>9;^@3KB`%Nqr|rdn}ms-3)TaOOGUM;+Nwg- z@rKDI^sX*&hZYb>Rtu7~ze%*#0mkWJspQs$z&f}d?aEWfI@}yv$%;r;b%=SIz8d02 z4<-w%sr?$&)cT)lx)P$j!E!2Dt%3-LsuM9mvC%1mWZux*mBy{Cn7Xoc1VQ?$qw#+1 z@o6gCMi5U5@x%=ix9-9$4FlmM<8j8sQX<%uUanNX=pf4Gf`u%CYfxb{c2-5dp<1hJ z&+*4-f}k!mL4_T)fQJhNg&9-0@GM(+!&GfpcyK!lkMRZ!9Y#iS>^z~*@R?vd3Svfh za!Cpcv41O{eb6c3ngGpRw%dT7aA02Ep6k_TZ`CO&FCf=>{K3c2tEQY~c*BKbIs+AO z6@d#nUR0n{4l-$qYN?8jk3-WfeNzlXG!Dir6Ap;sQ+@WXywrM$&%A9suUhZ_@%A&# z{_UIR-qlahuW$ULy||-kzyJHg&)@(3y59S{5c-To!zY?1)7KD5QciL+hb z?F-7EGSSCq@0*5U!jEaFCwMdA&FmZa=@~uG7z`NQcY6ch-S6!grq^?!aqlte9auIU zo96gncYfL0dHBJjFP_{#?Yw+P+tU7QcYbMaeb;WmbEnhU>fl4G)7omaG<yP95Jq3f(T`xdwhe>LZT|=HRZ6G; literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m0.avro b/warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..8089a69b7f0352aeaf4e1c86923338509ae6424c GIT binary patch literal 4405 zcmb`K&2QsG6u=X2RrP=>5D0PD!^r2P@z~ww191Sc6)QnmcDo0(3f9D)G^UPi#^Y9D z6^RR+5EsteIDo`~3;zK~h!Y?G0pf)C6FBhROzhZBwzSz)mE%li-h1U}>;U@33X+UA56}s|DusNCvPU z(N>#+aopE%emh}81~Q1FcA9W+=kd_2j=)UAx;>7?l*#r57b#3N?0qkeB#7JtDx1xNxUH9`WEnatASS7j-&V6yfCF@s2&^A;(sh**+NVyVC{ zgz9B3;`1@fLTL^N{!|qS{^F6x-6)%mxTsm1Y!q(*8HYu zBuq}~imbA`^H?r)y&ZcD1Cu;@aF1LDazc(D5*1~<8W&2wHflvfDKapxRkjowHrh>* z9xJ-8?EwtRJPic3Y}`&x_bYK= zK@x%RJn6xQ)GCFwPLiee6O{%e9uqAgC4p9kjH@aX^)&dHyFuiRW|G%)nOfyI(gm{E z=4mWhNKghr8K_3fsHCSChuJi8amK3j9+-WE@hAoh*gw*ki9T;3n=@5 z(zXgfH%HmOIZE5wHcFK{EeK36%zUUD>hK^e^2rH1sj|gm#k~qJEfu-yFrEJ9Fr8k-`fDY=)88gc>|C%OKwN67 zMb*|7qKY?+FQIoG0e5Htfn>QL*>|>y);_{G?G{RITnOx=tI@7Kb?ol;*eX^;v8qDM zlH}%~6z_VB!F z{PFc`;>Qnuu)g~C{XbuMVf>x(%PqtB_mj`R{Qa*_zyGb-Xf*z5;+6-U&Ozsr2|kH| zSqJ)J=|<^+Kk7&(&baJgxOXgS(GI25f`dG2*G}^@t z?z!|33ZZ{T^GBq&(n6uveq2NUfFAqaj3rC5nHD_ul;8$GrJ`^kx0voy424 zDSdtGnIUH}GX_Q?Me0eTWsCzB`iU_(e`W-}F|b-jM5j1|3!e!W##-5$kVjA9mtbF| zfnYEhWUzTlFSIKQeJa^<>EhS=rA}q3GBMW*mImwe4qJxaRU7R#TVOtmWB~gSZM7*F z$9)aww__?~AOjw?lbCtU^Py25ftd~S_Lz$)mF-I=5}4Ys4?G@85V;S=(+}vS;D=h_ z^Sc>F0x&!PWwb~Rk^o7KkN{;W(tAd<$sMG7k-8YdGj75Ifvz06uJ zJ2#><3{k9d$q-(AHl}GPjRC>G$|AvEEb^EerPC1;6>FSr#g2oJxyeS^N88Fq;w~zv z7;7&DUe^T+CsqVmPQfX8B0a(L|+uwl2!v-z z4?eWaLRjl0S!zF3X+ZdxXbA}kv@&E|R-vdT!Pm?UB6l>CteVS~S&SoHAoFdWaY;jh zG6>2*HCjd~Jv|<#)5ygctI~U5_M%qgNxzJIDg>S3)&t3=Q0t(MWQAo}mog_@Sk|$7 zX<5CT6|N{0s|%)NWfHJ7Rj69WCCe{qn5qoTmSp=cdcx|>hv@o{KMgz@o~h%97*iS> z^C66v3l|RPEc}ed=ps#r1U``*J_uB?g!u4-tf0r<^bHRE5ajB{1Ra;kx zGTxA1LGL;O?$81P$znmW@9Yw--NiUP&XwG_5ZK+#XxE-P_VMo6Dpo|XDnm@;_{|V^ zdNA2oO`W%>ruP3-)3p$t9hOtYY8^y4RNX0)6dRp9NEQvfQ)t}sifL$DhY+N1IvVds zo|wg|Z3OWo6Hi7VAC+C0#9<&^J{~7bt|Wp}=;da1F|g#?C71H*{;Y z@f?4QCP+GhCMdI`6!36?pfF$~3 zRRk{Rcu|2)IY^W#x~0lGJ^@X)@=Z1{rBN_uiF84Xm>Ki;)uqH{$HF%YAJbAprr9>z)avz)M)XeG?2h~GBW549`(D4-_U*Ap z?NQ(FcG=OA- zOa1^oh~l3heq0o9UOnhV5WIL7yvXVw;d@o-PIo7poyjH)L#0yn-mBmHs8{ceKdc|T zkT_Eo&?h$@Yho5NZKx%Jr;gBC+QehNn`pzc$C~GAL!+gIG{6-RcNw=~u9fZaqwo=Y z$|O9fkQU3^==)v9cjCgxhfQg5B!QA<;&YNOqH3(RMs@ZdbW zEe{3rc&^d>W=y&8gcpVFBxX+YY^0TEU}ZzUIf-~cMf-yB1eP|;11Aavh};L`=_~Yt zM;)c`vo|t~1YkG-N^6lEBmt5NApy!%q)Gm(w3O(uSb2eHUMRGAixhT*G)|_Gkl+_W z)iz_f?Mw?(-$$|1B_kNPY(i6CXhVWOl|_QTSm-c2OoK7w6>F?*#ZEk**~v!Phug|V z;x;O%7;7#CUeyH)CsqU*R>3yu1!NdGz)w2{y+j2AK}QY=`o2XX?%+QHu>(LWev>p} zDyCIMdePlkEa$r3i5!Z7Ngm$6OD;VzCC3klj51b^3n^b2wW6UA8JO2HTXGFsohDC@ z6dsoP05%h%q4(COc}CPnM*Kp%Scq}*-n%~ z5`pk6>A{DFUI=TIBunilG7U&HAxc6*Jf#d7msLpWiT5$Hz0e-d1gqw#w70CRU zr;(sOK^X*Ppc*Bkl%7uHr$K1ridE@-Fndue@}yrzKINRw@aUdk0n|FEBUxct)}_n| z=Z4XtV{xyrV3S~SF-$q`l-y&Y)f|jq9=_0e1xv|qeq@Y{Zo1U z5G|mwHXp%!xp3ix%EEVPj4o1ii02X!!5;#ZEFnHzFF7x}OB$pCVin~8WG@We0m=cO zH1!m{z}J{go2m8tf7#b}m>CATAZv zylSfoQO4^>m(aV8fjhK-K(bhn%v-xeYaU^o_HrfHE(GS$X0&T>9kaJPwvrW*tjZA6 zIDR_BonA~PR#WRas;T*mYPuGpwZn2MS*?Qzm#Q5wL9x-vgJjXrTZP6gub7&$bp%2B zw5#z>=!li2r!9Ze<)6Dx^e6?(Z`{j!6|n+xW%0G>ga(b!pK z{f26-Hs0e8&;&up&;(_6lmZ?e5ENF-;K8$M;T2Q0V&T#CEIh^+FmxCRNwM>UKEq{# z@xTii;n5|@EX4jTAG@Gaz%v1wyQEWr9&uovzn;t0=WyLEDIXx4Jbw2r=v8CR5`5vp zHJyM8c#6OS9Um&tDSL@DMYU8}$H$@RmcGd*0vdV~mIxcf@R>G$Sw3o=$Ystx-dDA+ zzWMgF^XJ!Je(>6NufG2Mr++klyU}R;@b5pL{Qbr6KmA;<)oTCM@yNq&x6{3(oJ}KO z)`h-U*kRIf$6Z1BBPO~S?p@t5^u<3NMuv_PI!xiGt+yT1bOuM%ZM)XkX&+M7Yxf6} zLEA7{k214o_4>Cui`Uk{z1#QSe|YD#`Q)X>UgNKN^T+z$=k*$lo6Y8469=_sZLd~q l;P6E>6+g}WU*4|O_8Pb4Y(q`L?5}e6O<3O8hso->{|7{4OjiH^ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/c73f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro b/warehouse/test_ns.db/target/metadata/c73f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..4840a94d7b7293cdbc914da98b15d7af6690715c GIT binary patch literal 4404 zcmb`K&5zqe6u^@-TI~TXNFYu1DC zfHNTe2DorRaOA)R38elRhy#a;KLCjf@6E)H?WAEhO|)7~CNuB7`Mr;M^Wpg8`oU|7 zGhtKu;?^@w%wnbuwM6jL5n4<0d=|KgHavT#`K~rJT3Se_xFX^%<2KB-vOPf*p2IiJ zK1qGfU@^#G^Oo9ZRyMj+u;tdpxAj}C%2sJ&t`#ix*XbR#GH30Pk4zt5_I%d3LjkT><&kvZLY?R&IRyGp1 zQ9;F6b1Cq;E?79RBFL}`wn;A_!^i=C+A-)QDi{bla!AnkEfR4D{}G5C09x^zq!Cjw zsVdTo?#^O4*Y$qnPz+4+4#x!9r0VHC=khRKOf|*-JqEgRxq7;${ zgl9<)J~Z?~SgRyiYCn-_Kq8MQ2?_C)GGtsj3ZSb^JAVy zf(8U-5R`#xl#Eh(I#G~LLmOADO7DZ&i&~K<{W9_?=X8cg_XV3mt%Ev}6_#aP%A9av z7(M&aF#0(w+)*f27fi~^Bw%T(P&Ilb%P(n=$_&l6Walq>!syRO==vZ!_Z=FX%Ik+{ zQyOdY5zLnh7fz@w{D8*jB1MPzE)fy@AyCN@;=}cmi?X|2NhO?}rWW$v^fFr6TEp>D{_gV4|=C-kJu7Oxe16JVoI=w2PLX&_*8d%&i# z1z>Y`fRPuGydZ|LLY2%3X}A%l)!SvXT77_N4Yr4A^-I=YEAg$tE@5Klg7pC6Qc=yT zwyF?iyg_sYz3UjbLkkEbiv`KNvrDw*5yojRS90S*U>fMArlxEiL6E-e zYP=shd=|^L5yX>BJQ)Ykxa`6t4t!xpo|iDOk_c9zm&?^JJBYlwU;&%LGbl3}JFBeU zP_5O*d;Bq)Am|vHpv;a^z{3NA!ipI@cvdaEW~x>!Ji3{M$M^z<4kIBccAn5@xJ)oU z^+QH@bVV`?v46|QF6b2SOn~MtIjlgBI55v&&*kdVU3W{$2goLmKez|IYRp-JFI>2$ z6Hoz95qO~ELj^izKar-WmMZJ`I5geTH`&CLhQ7xVVS^Yx)8=oPOT0?Dc=O&wu!~@%&b!@%{5Jzx(y)zy7(X)oOp&@x;SU=dg1{Ih#a)tOISa zu*2lg9d`uf=S*}k+B=4>>mA)Nj1CO+4h-Z+e$(4}+v!=J<=r`In_Y9z?mBL_JmAKlg8As&3N1@ zta9UwfPaBM0PY}hfeR964qOo2R-6$>-kXUX+sT$Tn<$Fx$;^9ie(z)6eB^%8+Wj-c}2(+CrZSwp_Y+Tffw?A{(fnRQxd=oMN1ZfbUh8b6S4Uu`X51Ucd`d;9dg7NfqddcH` zrSOZla*PCEcmPUolL90Gk_sUK%2Z@&@vpR$7%*9Rf#^Xb^m&_hS2{P@HZPE+KF!q3-egt}n3I>9X91`?>o5bA19|ExhKx=-JG!iN% zbwx(m-FYk*x;}_Kih)U{*|5|4?Jkdi+?inYTsDnz9H|0XZ1Xf0 zG$bg4pbS)_WK`1Ai^FUhIXGig`XQLTs1-%hFC(9FPG`9FK(Hy)I;bOgVOiFt+zA(^ z*>^5Y^RQrrD@w)cf=OAq1T0N8s%F1p`6UfAnW6cTeE(%nn1}Nbx;~801CNHM^7tY8 zlqULo1mo4hg##)JKcoq|NYNpIPecq~1S(lVeE30nQFWIzNCm_y$^pn;7`g?N13+mR z1)$rb9NZqIWo#Rz%$+s_rWa;D)D3xf5E}X9m>yTz;<4gf2iPnXx|auRnF!e09I$0> z0NC0dVB|$4FNk5RP!)3`8eI$1?r$?%?L&ZR4>pHsA6BftQR3T!ZNkLP1?vICrJ`C? zZB-$vc*FP#dRG^?LkkEb%LU20zfH8(0mf;+P;%=+U>#hKcI~NS^|!}XvLcdI6=Ieo zFNV0)gUP~bYQID^wf?7?u7zlCv7Aa)>mb6R>P(rS*yt2NvS{e-QsY)sOkLSJf*^g- z(fBa(_$-laBZw!tc;be!TXkWYgn@A4@i=8-B@ygWFIT8vb`V8#!9q5LYfx@9c2;@6 zp<1hJ&+#W{f}k!mLAf23fQJhNg&8xr@T^*R!&I$VcyK!lkMITz9Y#tr>^z~*@R?wI z8bpln_=@BfV*ge=`=C?6H36EtbiW2Y=D@tTJy)wwZ`~;=FCf=>{L#D6t0tVKc*BKb zIt3MQ6@d#nUR0n{4pM1~YN_&$k3-WfeUlGNX%viEDjX2QXZrj#d8zecpLx4@UNzqM z^V^g6-~Ls5^XuQ~UGYy(`{j zv2dbv-*>x$@^dD-817xuFbwr$n5Nk^;9U;EuwitJj^~?h->3af&!k?bXIZ_DYYzq; zHn1#7$1Tuw3Hrl81~YOWbKD-ee~3imegck{UZW}p85y$RsyAz-g@e#&_E&dkLY_d+STq#QEf%Sh|zfFy*I!2F>gK_J+ANF zPMiq~=*wGAG%<~tHqa8mQ%7hmZR|1MO|-$;6U}qAfzi@J8sLhEyNuf~*UI+zQFso& zIQug7ID^F?gUwoMqgmPLQo$Bm=f75OwJKYsiMdv=)LW%@*wWOg+Gw}l0`plYJU9<; z%R|9Do@+R}6H_ic;YDFPiJ8+p8*1elSlQ6;j3XXU(Y|Cnfu#*|&xt|-B6q=f`Zm4f z(Y{jn^t}ut0T>Q|(pn@3Nr0q6NPsdGX_Eg}T1s?Sth_)pFBICWMG8AY8Yh!TNbqx^ zYMZgxcBX}?@1t1hk|7LSHm0dBv;o0?l|_QTSm-c2OoI{Q6>F?b#g09n*~wbj2b;=9 z;x;O%7;7#BUe^V4CsqU*R>3yu1!NdGz)w2{y+j2AK}QY<`o2XX?%)@J*a4swzeyS~ z6_ctWz3A>NmUCU7L=MHkB#$24BUhf7kmH9$Mj0!|g_N(1TGCL649shpExCq`PLrp{ zlCEoe0E04118(Rh9w#GwKg&mgjwT|Feb!RPres7D<`O_6CJb4t%q5t)Wh5%~Y$r+~ zi9mRk^x#87FNC#9l7;pYnFb^p6D1)bo>GR4%PJ)G#QTcbUTBY|f>m?b(2H@T3S@rF z(@0RCpbUaCP>qsNN>3;9(;&2Q#j^Asm_4r*dD1T;pK?y8cyv#&0BRl7k*u&R>Qd%} z3&ZHzmxj^HS>cXCvASSVRwe;UQ-!M0Em?j^{ZwXXwk11%(Gx~*HbmF^(YfbP|5RQ- zLgj;fU*xL zO+5#6bCms?qcrtxqm;SRg1~hA)P=esFAqXPmz>a(GF!Y>>~(;RLZN$oz@~wK&CLOu z#s+}R?Eyw!MDl_d#tKz3C#2z8m{xb2(Q5Sorq$mZrqwH1f33u~`rCwwoeS0jh)YE^ zuiC0Yl=1q}74)tn;0`SykSrD?^KhGJ%_EG{Zm#6Ug}^*ok9Os)V|KU4RT0|jI(!<-wh_dWOgtI+(WvagB=$XFN8@qA#8M(yg`*7QtUjT&v2Pw zJn%wBcyvWF3$cI8$1dm;@JxW_F4?a@k2o;TU(e<0bFk``ln;<~9>4by^r|su3BGXQ znod9kJVoGvjt>>+l)XfnqFSn~>`6yX}L~$ZGef z?zHvpLEq^chgP3j`}5b<-u?FgHB26;@ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/ce566f28-bd86-431b-ba97-fd70c8073fae-m0.avro b/warehouse/test_ns.db/target/metadata/ce566f28-bd86-431b-ba97-fd70c8073fae-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..3d45a50934dd9d8e0c11f906caa7235423e933c3 GIT binary patch literal 4405 zcmb`K&2QsG6u=#~s(L^b5{T0ZjeJ2!N#l=hzBnP+N)=F+-7c3ZvL^PV@z$};c-$(i za^=XCKVUEX4crhCLYz1uP8>KQ#2)}i@ZL=9*iJUI-K3Q@ac16o^Lroj=Ht=R#=$G8 zH(^uy`_3~%%o1h{j8yQ<6Gqb*2Q2hcV{rb=2z+B;HI0Z)aYoF2#$9;V%-4i*bOGNu z`z#AMgUKL+&6{eWU0di=!In!G-_|d6YD=Ywg;uaMSf_W`G}NwIXt&t}^I0SU*bi^X zO~HHI*KmF>p@8lQ>!0-T+(If>(0wfhe0+gx9(&ATXDKTNP@&Yk}NEq`bDXoZTl1^eF!7qfW zW!7@pxe;Yyh+?HnhA{Bim}a3c1_XbqiUfbL$YXAlO-GE^ta0utb{vGvO*hIux~ps? z?xKR4vG!8nOdGhFlTnA!8jvo^lWvm((Qob^3MMEhvFt25{6dLZdn<70{ zblunk7?gP$aLcrDJ2~Npc|Hgh-Dd%*CTMq=ALal>3k{6a`UCNzs zX<1$O%CdR|D_l`3R+mi5$|YcFs!_GN70a(^n8^&ym*o2|d&26?hv@n+z6d-Tp2_2f z7*m=U^C7&i7A}0DvhX9CpoK@Q*+xONb9YNH44Ik_M@OSVh?f*$YFrfU*xL zZL|C%OKwK)S zMb%anqKY?+uc3Dx0e5Htfn>QL+4r}J*6v`Ob_*r9E(CUGGupMMj@{iJTgi$@R#k{u zlDrt=Ru3i{tEux6)ztokxwU zMMvX<$m6p_wv8a3$VCXPXl40iweTL5j zp`z>L9s{Q=W+xm|?y8heqU%z?&=Xd{p+t4)aj|Oge&~6{LuPJAf7?`!8 zFBWc;9{QuUp!|Y~HimoKf)6}Qt8L=QG+_vTFn~|XY9>=rq?sO&X}^p#ck{0;k%DMdGg>)|KT-#Pyea0`*maQi-rbceHR`$&~~*wO_Re{ dcfeHq?C!sLqG@~jdpKduTTR#ZVOo9P{{e7hOHcp+ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/ce674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro b/warehouse/test_ns.db/target/metadata/ce674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..b46309bb38028a71d9ee330b56b69db0bd5b4fce GIT binary patch literal 4404 zcmb`K&2QsG6u@1#s(L^b5(tD?p^?QgY5b9|h7*FVRB0*8ZkJ0HSz~+Bc z(7$$HXnYzoZJ?z*$y}~Aw2{vOFVzMYFEroN21Y{*=>%s)iN_Kf#v1vWAPO(xSHix? z{Di?|kiljRxzMaF^eAVGrSo5_ms+)@!o)%=Sn99RJ8WojS535AZ-DtM1yEXp6d(zZln4n>raViFe}$z)hsn|lMDs(g%^IY%BBXITj<^6n7b=$- zi)9yDm<0if6)qXVi^oPZ3%E8Q_*YdV_=|-uv%_rSu%u>{ zE7HsE&SSaI^(b;F1}1s-*9!t9J z>;VkQJPi^}f`(XCGRuoCUhsRHF_1xuW68p49%D1`!9RK=+B1e`XIXWT^gK=1;0h`7K zfX(dzMqWhlf*8gMRWT=|;aZqhZ=2C-^#P`Jyg5v(U$Op9iEkZm6DD>pSPvjBCDo#8 z%L-A&8$>tIyE?!fT0kIKE=Xo)n`q50#%Zrma_>T5cGsg_dFq(G?XeZCh+tKPn8oqS zA#U|xGO?OkuTV|R|EZ=cAzE83r-Icgh;XRd6UHevIz^Do8+xnMxD^#sleP{aNMCj| zJ`CMt8jH3O#FJb+ae~OHx-g9cpWD%Blrp}Q2v(_=E7UJKh@!b*0h_=zC^s5AtGwTk zt<~Cd{3)8isRK<=Zbv2H;Q~Qn#uP3*%NE`-RcjV@?`Po&-hiRQNJ)mBC-fN}<1Cr@ zAtOn2LvjnTe=FWS(8=MN0L@)`RD&KRz`VFUSF2BZ)hQ`1AnQDS`Z4sXal%r(;leSU zf(p2bzy%#ID$ptWsW3&hRC&jjK+`RJlMhU2=#N;+Z4i@8wb`5EQtL(@a}V&mQvUqB z6@B${=ezgcef#epe|hwSdb_Ktx8MKq@9)3ee)Eo^DF5u>jt8yQQR{{#Y#afy7PQ6O z4$~vgX>podGTy>yZyCC7vDk{dH&Wr=9(;cNBP6_uzpq%AT^XDB|_? cT`(0tdk62GD$2h45l&b!s;KG#OsjAEKUSqkSpWb4 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/d07e2165-822c-4192-a463-1384cab3f16d-m0.avro b/warehouse/test_ns.db/target/metadata/d07e2165-822c-4192-a463-1384cab3f16d-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..d09c64caef292b60c653468c5e60aa9cbaa6c1df GIT binary patch literal 4404 zcmb`KPmkL~6u`6DXtfe(g#_YM(8y&sd5PSzdKo1C2969kZ;98YCN8X!>9otF6ZW=3!oXO04Z+`F3y!mSQeCOc(#2vE< zeZBia6VsS!eJv3@b%myDBcBCcqV>;TXuhZQOi* z3?_pNHq+HYtFq9ef-RQLf303>SC&c>bFE;hze?{w*VL|>Xt$w*`79JZ?1wkyreGZR zHJIIrDHp!*qp+F8%x#o^p;Gwc zXBkEUFkAqo=_Ch9fTTi5fHDv7!itc_$v6@c{9LG7W-gYU zYhfA$C|0^;052XJ(KHZRpWt6*k>D>Dy37gF$&m4iHTI@rM}EMZWUcJ>rm~T^g9<9f zS_^?Ub-~<;6+xz5uuXaa8AdMf(~dzeQNcjak$r-`*Ga@({2~xL0JP#aNh79WTvcQg z-JQj9uItOlr5Kpx*^?7;?TaxveoADNv2t8U`O2sz4TZ?Syq4LLYuIQvd3r4Ay0Hf^ zD6=%+reWcBGQy9ud?e^-BGNcuy4p4+Lz*y;01`1~$XaDC!OSfqQK{#+Q3^=}!n33Y zADTuXtW}aMw4cf}Akl~@2?_C)GGts1l$LI-CoOYef&^IDN7{UY)y=X8o&_XV3kt%Ev}6_!O^%A9a%nn%u+ zX?Al~xS~+3E}4{-Nx;%np=utLEWe^bDl;@&lI_3f39~yJpzDL^!gpzKCXXMYO=zsm z1~6VOTsWYz@DYvCMT!pbJt89bAW+E?;=}Wk%d)$qK`J1YQT9Og+|Vtc>;X#4$N}9R zW$*SVEo0j#W$x$@m~N1IP&ee^L1^faQ+irvi^qzy4zO7$bngz>G7+$~Ibh4&0I;<^ zz{rb8UJ%1rp-Se2G+YbQKH6rq+FgKY_cn)VcT3jaDDmyyHeq7tg7pC6Qc=yTwyF?i zyg_sgz3ULTLkkEbiv`KLyG^uK2jlc8S90q@V0G4`U3uzQN84j7SrN&q3^9%4w?o|O z!DL}IwcnwdTK`i`S3fMArlxEiK#;!eXnYvD zd>YHP5yX>BJQ)Vju*PzU3?5whWL$y|G z&+(^df}lfaf-*Zw0S^}l3Nxl~;aRruhN)VyuyZ>LkMRZ!9Y#V@>^z~*@R(qH;)jgz z=$d2}V*i%Ed!SRmH36EtacH`wZ?b_24gC>IgacyuRGWPyFSTyuF?S!&tJ)|3w)NxB z|M}wgSNDE+^WEjk`k%Y?`X9f3|LT{Y|NiZMtyX)pgFEiGT8FJ`%Go#qWG!fmg%c)+ z-moPozhI(;(cUuQX&DB7nFfBT2ZrEj8cokQVwTyt+w5AF+iaUXt4Z4(yJ_0pwo8Zh z$n1EB^UK!3<9koOe)jOJ@%qF1Uj46~#><_(pLS~S-e@%T8u(Ic)b?t%I=+6e3#Q`J f*#GpTR@*c97 zk$Dp~rGMOdri)q1^r4;!o_j(!^dMxBpXtN1XL{)CL(9-(I>i|Y_ZfF#%qZ4GN&FPv zIQuLQIfKa{gUt=K&~7aBsbI^ci?{VloyJmWVyP7@4cF-%8M@k42kkZuFrURDg#GZ2 z+!T!CzDDyqDdi#*VG?(;lzBU6BfUNXGd1&0knkxLoeRb@n5x z4wS;L-YqZ^fZ+is-5@1M0wfhe0+gx9v+`eQDKTNP@&eJrSm<+uR93_^%_fPE;1@#G zGHbc)Opo&@Lb1{%BY5yxK=VlGLxO+RMS{Or>@hdar(?z&);ODr4Z?`I*_E;nH0iX@PNg62? zlcplG>h2L0O~$w@e$iQxJYw zpVCyHk6^rBxNtya;YTz@7b!X<^odB|i$Enyhz~!^&g<@y2C0BpML7W33q!YnasVi8 zvjlW=l!Ke2w9Rd!l(}O-V0uyRL*0;v2cfY~PUuOUEgmcGRe-HZp?iJ6wuON0%>moi z27vAD0Y+X#@`4z~3RN>Frty_9o!&O1)#(FFXRtX;r(d)FT8Zxrwh0qE7pw;mmx^jx zwN-_vJalZ zeKo|b9!xe?Q|C3Rsr^6IbS*?@i{(_ZS_cshRd>n+#YU$Ll0`%BR2sLkV(QA)5d`V0 zj>dbj$7iW*8$moN#FKH9jO#AU(kK*e5(F6&D~aG#dbv{lvV$m_3l^~{T!RXuv9l`r z4b@s*d5%9u69gSY6I9qy3wXFdP?#};3(u;B*G$!hg-18D@EC8v&|zdG$IcV_44(%pN`q_9dFPxdxMVe2Uh2hSwV*mOuKWJ zjjcft4Eh7>@L+M<+JE@oqfegPJJo)EQ`^;kZSQ>B-u>dAAk@NMFBHa!E1>( zVN?3z)>A{yVrC4CM2ggtM#~rnEc6p&aQ4&)d}Cm>jEGKg1{XdPE{wIZH6f4A;Z3lw z(?Bqo3^Lffr5D;sQS5=8EU@$@ZvDfppQ z`0aZcMglNA0A;jD4w3*#jgSCkD$^wYS6NC-n5?}(j3AQ6yhREtA{r+XE*1ENP`%7r zE;}=#Gz?L!a>)=Ld^VQ0`6BTQmZN-j*kh#f5*+<*TM&d3i zs2FQ61zy($3nx|tSx&(=X{?gI=P8fuJJ?1byEkTzL3HAa(#~#czs6Oy#7i z$Sk@$i{)I`$K0bBnB>W$2jnV{6LS2Rs3>FQxKQ%7Q7ak>k%4)wvL)BB)o$|iSkZND z4`5JcX&@}q#_eQ;A7=ST(9uMuamZSF+mwuG!h8Zqow)=vw~R!mp6l@xk_d!n zNe@1>%tBb}Bw1=dQE5Q=Tv%4u zy|k=e&I(r)iq!>EvN8!+nkrPSZprdX8m1~kvnAR7i=ME0^C7xEsSkBS9Ug>6J~^Q$Wwv;%xSIf5g+ll0fNcu_+uH-Stt|lC zy9128h~fn?j1{V6PDG=PFrDr$qt)pFOsBs+Os7|}{#uFe^mhppI~S}65SN;2UbS_F zDB}(J74)tn;0`SykSrD?`_3-W+IKNdySb7Z7Xth4X0&Th9lN_bwu%)|tjZA6IDR?A zogPd!R#WE{s;T`y)pRXHXNTofv04Wa4pn!`B*jK250XVg?-UxhykZ*K)*%Gx%Z|qT zktb%cY8yd3$;6XU$VX)tCUF=@mygE@lPihf6neQ_{j!6|n+q1QDO`gxqp`Ef`VHM$ zZ9K;xqY09Zpb5(CCN9&|c~ohvHXgafn=G{(}6 zl0$#gkyM;B*}-`4Sf*umOl$dL!i!~fO#HOXw$=0deR?!%_j;D!J{rT|s7syp9R^2# zckKC;I){tv*1^Mjk3M^H|FrqyjmBQ%uX^*B`rfm84W66L=3WyYYR%eSt=7QD*XuR? eY3~2_QLVPuxTi)N`RMOz^nIA#*oVRD#{UD}k4km` literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/d57221f8-b07c-4992-b24c-d23de23c47e6-m0.avro b/warehouse/test_ns.db/target/metadata/d57221f8-b07c-4992-b24c-d23de23c47e6-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..343ac4cb2d1df3ced916198099d553b6a4fd80ef GIT binary patch literal 4404 zcmb`KOK;mo5P&5`Fnmbe0u6e~VZpOx@!?pHp8AN<0I8dYb20>CNvvnp+P=Z$0!J^w<_Xc4k+kNJ>#{MS?AmtKFH|Zyr1Qh4Zw&cQbLv zY(ih(c&>?Q%(Q`)2%fq^YiT2&1zw^JPM>SOrwxpj7SajMh`7hN4P&irO%R1=@W$D* z)aMK)gA6unsfA``p+^N>1&G`Q@b};j909&HWfSa17;^{Wgl!R8;RSf zpkl1K5O`G=%$-;fWLO2;q!*B3>BE}3^tIQ>sxn(3O^=vmvA&EeE zmh|95LobB2N|J^4W0?jd8WANSA-+@*?wp{Q^BgaZ0N-}QUx;K=1C-I zKu`uj8K_3dD5a+x1?eQTamKRr9+*9^6?xJxBA;?jr?_=runE*Us3TcnS=6P>3Fn5< zwJ!{#m$SkZg<^Hiq^wK=mZl0-qg%54f(EI~&}>Pz|Dq?1-fW1j527>QrNN0jeuy@q zu{ImRc)4)lfXc$pX^bvXbcpW}5y2kOJI=~%TKp9 z;#LnP6RWB97S+`JpK7`iqP4|xDp{?92#2aYVS-|#lLyJXp|=W+TV63WW$O@v^i4K2PoYe9-aJ*4y5lu4x*hUfa>TZu_9$H`|VR;I=)} z@|bD42VHi!Kfi44J^1L+!zXu7ny=q)>@@zUH-D_}yr|dUx!G*)H1VOtf!%V>d literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/d5c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro b/warehouse/test_ns.db/target/metadata/d5c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..569976c17fb43458ba4f6afee5cfa1dd62399f71 GIT binary patch literal 4404 zcmb`K&2QsG6u^^gRP}%=BoL=PjC|naH2!El8cvJYLM13mw|lB0Yiv(8-a57!k6VRR z_!D3+T#&eOK}hf?Ac4e*Ge<5QSn)^j-c0P+Nj9|ER8=&Y%)IyJ_de#$r|z@*!5gVJ zW)u4I-g8Y%6Q&KcRPf9bny!rk7W%0+xO}b!zBVv*Eus@#5p$n$2j=vAPZ&o};Tvb4 zX8~uh7-X=St~Odr8+|I+V(a|d`mOfTR%v3P6)X+b=^g5tI#mnpHgqtbMIwOn@RmFj z%;UL+v-=6Pj4xSZZ!2~bgv?1d%0AjwHWGJG z!IH7oLf~y(Fn8jTAk!|{CcS_RV-NUgC!m+8U?Awo0YTsEB<3D|5QrTBy5u)WBcWov ztjH+4JCEf;*T=C(F)+!K^HXvYh%q^NOk|X?YFtS9%BU3$rO3d%mf2Eh*y=PzdaUTW zwFfXL^EBY5Vc~Id!jJNNBIyNOPO_@&si5N3vtumKj=2nrY)N{NzgCqjs zdD4RqO`{anDoGaF&tw{qctn(hlmto{GOntS)YIS#<^+-BP6b=eWz#6fkt&eIF)w04 zLxM60%0M+rMkPJHILs!IgDY00_rdIWttgUy5&4vJI>n<0f=!^-K^@5p%c3sjPPj77 zo^x%Q{el(lC>5(KCS~Okurw`EHG37yuW6Xc49&OX=P!H0?9Ybi`Y?VPcr?6_*ALMq zG|^^5n6DNtoKRW#2~E&NiVg{UB4YSQppqrThaaR@Rd-2)R6wkvJO4ljObwgerghoC&qi0pNc&#{_0Gp*k_xgY>69HS>1Gda9 z09(5QjJ$~C1u={js$xz=qm3}_-Y%on?gLEwczc+3zheEZ65l@FB~0vGupU5MDyl`* zRu!U(H;iwfcXfd~w17aeT#&5JF40TX86_SUg_yJIU^5y`3wF-wwH zL)_`bWMMV6U!$5@|5HuZLbP{SP9>{#5aCjFCQMLlbc!IEH}rO?aVsjOrfeNTkiP0_ zd>DCrn#i^h#FJb+al_cHx-d<`KsfPelrpiB2zIHLE7UJKh@!b*A)CN6C^s5AtGwS( zt<}bR{4ts!s0&R{Zbv2H;Q>Km#S|Vqs}|leRhKO6-p#@jd;vp;k&+BMPv|pzCK#Ut z5hFalA-RRvzZGL2bP9MTKy#NKERo?M&Xu73u@`(wJf)PuF17i48o4qX`wO;HqZy)cg+IN?y zKfg$R`2Np#gAeu7FQdlq_Zp2qzWwo^ufO^Gm-AY!_HP|eJZQHM+c%W6aSX`X&=w0P zN)LUvEhvA=L>r^MZ5XE6HsKRS@L?J_HVyn{7%ijacf5|-_j;|a*RxwkR+qN=osQeG ze7Eb-Uf&vZ+{5`}>)_FY^Ut0`^Mv4 zg(D>`;$NVnq@kjrq@YKlKp?u)Np#Ti-c0P+PA=@`5=D_cnR)Nc?|sahPo2-}`)?-h zm`&)5o#&dE#!MS%iQuU#w3asVS>Pqw;NrRFd)mNgX(659jEH-T+c4J3)&x;_32&S| zOMT8@GRR=FmRe|57J5{$#nSoP>ZMj?sWdUy3YPk-^bT8^+Ep9v)>~jc3xyB+;cdAo z7{`4LXZK>tg)jUlY$q{un-@c^JOVQt`n^%aCseer8Bbtp!`yeHP=LriFrL0guX%K! z6n_0-hLHda7eHw(l7l2bQXwQjnTj;Y|CN>!9VRO;5X}#THfxc>ijc<1I1&>4T&P-R zES6npVHyM|R=Q*e4;~xQG!WW=;9q5t;4c=s%ns9u!+6CSYg4f!KVWvUR`%hhvXQur z3M$5$3xT(F!Q6=zL55YZO?m+tMlSHvPCzeF!9dWF1A@M9k%+taLm+klXvJ@mMoh)H zsz@)oJB#I9*C&xnF)+!~$EW1R7h`hrgvcmk<+zaYl~GF?3Xy?%Ewd%pu+eVv^jOk$ zYY$*hW@*3;-Nfx=gdb)3NYK$lq;bGnYTJ}JG+`bABx1~vwaQ$AnOjDpQqOjy6p{#p zXGsq}H1tAPt0Y-yKa*)dq7hLN65=am$hfRRQcwIZnC*wQGZn0w%Z6TzBUK>tZJtMh z1_Wggl!0oLj8b~KQIJkT8)qy_?}6F#T9GIHBJwHcbc$Q|1)D&vgF2EGmPK94oN#3r zUHjTFdO0gxQ7BedOv=h6U}>sQHM%9suW69V49%8g`!9OJ=*@=c`XIXWT^gLr@I1L3W#NteULpjbPFi^fYQ`+ zKzB#kzdK4(-!@8_J1q!IH%L9G8}jfVH1x zDnuD?5ZyrU>Hv3W0fA((Ael$oL~9;noOW|1cP<3x@p`l?PaU(nJ+_h+k*vxP(>Q)L z#H}7oCRS7HHL9ukKh<<4L~D!XRI*wH5e`**!UV-eCl8W&LvIxtx4dF%%GMzS>8p;$ z2cgTSv1}VbJjuipCy1P~3zInTg&mDX2@^|+U=@0~T>YYh$eRlmunAm)GNZAx%K8n} zTCF|DpP&hXI?x1Vc9a4hE)W!EOyR<_Y~d|awPNA%-7Gx88!&Vj2}!Z@gg(P#g7JwT zGQy)9l39rTTmI~UP65{hXzr4O3iOBr^ZfQ)u0DsWPDyzIS?BT7`_QY#oF#a}g=0Da z6>t@S3p!p@pi}k}X^Lv8vW|~K(=C0I4NPe0k60pX5W}b1>|J@Obt8|tdw5>eKKSxS z^4m|p|9$jT=j}g7f9*AX-f1*m{`1|x-~Rf;FVAYV+RHlbc+lw_bZ#hT;|P#-pe+`5 zm>hUcM^JvrL6YbmyVemsKA2y&_8)!p__L=E&YLgZY3w%ss5if_?|xIS!E>|O+->4Rty$Zx)f)Kt k)()78pXT2Cr?uK{<6}A6RD&@3#zP#v57QfaFj(F8fANcRvfva<-M8Mv7Kyavxy?hnasTR=J!74%@?Dun)`33?u3Q( zX6J=2rU}yrdMbG43can5eHM7BKDcMpoDp-6aR)fDsVg$d z?#^Sm(DixjQVdM;?8zy)_QiypJS8&9ST!!Bd}Y*mJ5>g@ix&~M;NEQLdl&AfpxSV?aEWf>TQp$WJM&aD#R>FUJr4r z2a|=>)P93%YW+_&T?x_NVmXzpRzZYA)d`uP*yt2NGH>YZQsY)sOkLSJgdlz0(fBZO z`81JjBZw!tcrps&QPqWM68OT2$K#ZVr9`kxyYk=D@tTJy)yG;i^+oUO?7){PY3zstIQ)-f-cVPC*4+ zMc{&t7ZvD~{ZyKwTB^L`G#l`)Y1*!aFAc4++i0}#^_?9s6+hbE dho_CkZtF8Ss;NO3ed`g9K7i@1Js7O-`#%JUNn!v1 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/dd192fbc-35b1-4090-b0d4-b0c858966378-m0.avro b/warehouse/test_ns.db/target/metadata/dd192fbc-35b1-4090-b0d4-b0c858966378-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..9adcae7bad963b6cb2ab38f2b50118cc483dff17 GIT binary patch literal 4405 zcmb`KPjBNy6u^^gRC+)a(jrcK82Owu{?j&pkdSu8R;&cwWw$+5ku|m_jkk_%#^Y9D z$zeYLh%280ByODH0$%`$3*v&bLi-UA@6E)H?PNonO_fIWWahm$zxQX}Ja(Sf_uft1 zF`Lj=cV1{>8Z&L6C4#4}&|2EaXMvY!gYy@f?`Z?0rG<2YGa~LWZo^nBTN6a#1-x{RKB1z0#drc!8|I!Hg#twGg7NeNdc~uC zrSO{%GmHdaxByCPksKrek_sUK%2cFD{;RZ<=rCD%foOgxv{{Q3R)jQ8#*vWV=R(yo zW3lX93)3J#vC<_&c<|VWrh(7~1b-@v1b?y6Wp9X91!$x;~9uih)Vao<1Viz8I6^XGBIBE60VDuZ&vKP>2l7Ynd&%hK+WUr^k}6 z8+!nQGD`z)=q7F_Bm5-GM}m$fB8>yqQro7)p$YQ{AQ5ARtX1X`%-k{(m3p=trI17* zJWG1;p`jPTS|!Os`-w~g5{-zGkPu%fL&jwll6vBQ$!tHgovC2eTsHJ#9H|1CZ}T(~ zG$1I0pbS)_WR%j=je>L%+BjobdJoK=*NQyp7m-gnr&HXzFW3ZX9n_Jmuq^6Q=7dYb z=-O9?(aTxkibAovWKvcp0ZUVbs?jZ3eno>+W@xq~+kep$MsGGm*9Xys@6zB@9zR5z z&{&%dVZ2?-dwam9fq>1;0h`7K zfX(dzMqWhnf*8gMRWc`};aZqhcbm~_^#G>T-yEjZD_MV|#JBp}go&LC)&q!3MK!P5 zszQ|U2GKS2t`2aA77$1l3zB)bO|<3_#%VWKa_d519<4{a^3*ZA+hZ$P5y`3yF^%Il zL)_}YWMVb7-lCeC|5Hs@LbSG6P9>{V5aCd@CrnUmbn+mXH}qDaamy>FrfeNTkiO|? zd>FcX8q2m3#FI=sae~MxyD*6ZU)a%TlrXWB2v(t&%hfMBh`hOA0h_=zC^H&6tE}Hp zt<~Cd{27`cr~^$eya7Xpk&qNSPv|o|CK#Xi zAtOAxCYgoUzva&!=oD~GfaWgQuRxDDFwbw#XeihkaZq^^fC0RF=q+haN(Fv zKm}Yy;DU}973h@xM4F;ns;uMV&~!`RWCIf#`XiPI8^rLbHhW)QYTd|V?k=8JwX^SD zUVZ)B*m>~L-FJR^{MGM`U+**;uU~%u*Xtku{p0U?tycS|j$0mdI{Te#%Go#qW*z8@ zg&ijQp3@POUog?ZaPR1bp?Bcl=;%6p!2`bN_@?V^z3q8M-yAt^+d6cN_JQ8l+m7xX zz?a)Q?Ddb1tZr|Ae%so6a{uY)XAe)CukJQ>8h_TCKh$@=t=HhW*=+7K@uAkN?bK=w le0&d0#lPn6&!5z4JB|Btw4nxJ^cOk$0H!x~VX(UI{{VXLN?8B^ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/dda9e15d-4031-4715-bf68-69610e86a620-m0.avro b/warehouse/test_ns.db/target/metadata/dda9e15d-4031-4715-bf68-69610e86a620-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..255afc955704c426fcb5de830f579f920ea6dfa7 GIT binary patch literal 4404 zcmb`K&2QsG6u^^g6!m~ABoL>S82Owu9=pvKr$ubVN^Dtny9ZQ7*2JD{O#OvDZWUJf z7Z5l80S+Ab8~BhoaNQFZj;KQLC%}6%v12>g&}I|0i8Gmb@6GRh%$rXqU(^rZO6(c; z+0DI|nwUpi8)=D%Q(I_lZR&E*Nwm?$OU-q(5p8P$^KnKPJ3O{vtevg#!r%pbi}{zS z8*`WpGWepc78;d>4ikK}bop)bQnRvDnwV<^OWjR+$8AmRs)KgxZ7`n)!iD|B9l0qO z$9;_#_ahbySGZx&Ng{4HFUDGV1ZFn$`_nM?ndn^cIDx4R1T0Esp^)I0Le(<5 zT6UoYspp|s>5?%#IDE=dPiP~8Kb1v-zj$DCD@gqbk1N)gyNaE<9=DRMvX6I_jl?Zf zP%+k63B0WfmQJh)qGrK1=>=pM+Q3gc1-(QC13^cQ2>QNF!q~<)0S8`jtePY8MUUN5E+=)GFx&DJMAVREP}LK1=S zEa}0AR4;_JN|KfKGnob?oDwA=A+Az}jLRw{^~C*(TW(-Y=7Lvqnd-$jQUx;K=6NWX zM^FYq8K_3dD5a+zdZ`~+IAdM<0L)(2iahC8kP&hHUy^ar4G~$d3X>OIOL3-mD%F4Vr>IV3x)2@0UHzn8@mHG=njC5 z{Q*W^MDl_d#tKz3Ct$%=m}Y;U(P|C=ra9alra35Cf2+hdhx>$yoeS0jh)YE^uiC0Y zl<|7uHT13%;0`SykSrD?<7A&`jUL8nKUZ?+LSXc^quqGw82$aRm8^(lRfd>G(d!}Z z^%$1NR|z~S!mqyim54E#}K5iI~pGb zc07+{+X&)GCZ0^Za8h<*5_zt$!s#^OVl5HOLNAxAUv&_9bHP3C!!;-~8au13-%zd9 z)^q$BnjqK&nxM>%QozFng29YATzJ+kyk)9ZEbQIQ!c)8fLx+)&6gyAoGaN2>?7IOc zad=HK3$cI8pB>OC;F%~tzde_$&+(>HQeHr|dHm5w(5pr|N=p6)Bsw}O5Y-hF6erQ}7a%CEp*keqn~5FU$%WlqqA0Q_Gw;3my^neG>EP+s z{+-ktu`&H~`|DtP7zqhSmK7W%2tJAY;bzR|N9MnuOrBj!HiE{rwuHDMfG zz#C^@WC3R|8Dy|&LoKvx3w15ieT6d(zZR0s)BrXov=f2F0wgvrVa#0Vl`OdF)MBBDt;iiHF} z6RMV3^JV8ol!YORl`iSSgU^OE3x&}m_*YdV_=`mzbE9lLV7z9Hv#!`-5HdGiDf@6; z*+|?)1vO*sxxkycVCKY{Aj>J)CcS_RV-NTl$Do&}U?Awo9zowXNX$L_ArLzNwB|QS zBcWncS7esmoyT&a>*Ls?7?|YAqZ4u+h!Ht{Ok|X?YFtS9%BTemrO3d%mf2EhSZg;$ zdMxO=u?H|H^EBX=Y2$Ws!VmL&B)eP2sVaV2X!PbEc3dQ zJK@r@+U}KQbqZFvqExIdnUs}Fz|vHsYPBntU(qm=8JaK2_h0se)tUCu^j1bz3kW331<8JYlW6TDjMH|Z8WG4H^)}8B9c`V zVwNPYhq%#$$;N8xyg@a!|EHQRh3IUsoJv;9Ai|;Qj+vm?=oCRRYv`R)<5pBmL)qGg zAbs7@_#pE5B#~_+h$p#tG6>^A)rDyi2EvVp!<31IL~u&IT%ms6K@`me3)vX1LAlY` zS>^qPYOPkDXL-xFCj4jOp9*QtQP&^Y-w( z(!T%v=}#~FuYURW_dkC9`{j#w_2=8V{^FmnzWw3V&p+PPH0`e~+;OkfI%r)}&PFjH zYe8Eq+$cTp2Q5MQ1rsfd_LgN@X3MnHj|H#rF5gV}G|i^Z4v$RF@tdY|=rs?AR=e5t z2X?b#G2a`QL&vuLgV|+k|KW#^K6~=uOn-h?-_?KH+WBs4_vBB$6u@nt6{SD{2}G4*v>lQi?}wAvraHt$oWzCWE)hkrR^#3AdC7h;JDbRy zT+v*GX!#!~preOtC@B#IC5mY2D0pwiyWU;Pw1Jigo;pHnX=9K1ZlVn?o@<_~4UCo+(g0^f+-2N`u~xRmkHTm0jk7OP zk29DIGT5x87MhiXE){ICbpCDiQme95nwV<^OTATkhb>L*s*QH*Eij*j!h`+rw%inq zuUNz9z)#ZW7cz|4leKaO}nMf-~J1g193JtqnUh};F^>AUobM+Zvb zH}7W{3BYgwl-43SNCG4kLIRYjNR#|mX(`cRvho7ayijPf7AdR$1ONQ{`vN274p$!QBR2B*TVxhzAFbzhGSFEu%6+8BPW+!W9cQ=)d#BEei zG1goNysZo7POJzrtb%RQ3&=2XfS+~(dWi}Kf{q*z^nHs&+`$Kd*a4swzeyS~6_ctW zz3A>NmUCSnM-IinBsrKc15X%N~tV_A9+%%0bZJn0vaPdTSk+`1=N0JRS4NLE-Dbt!YgrC}V~ zSBBBcS>cL8vASeZRwe;UQ-!K=T(bO%`l-y&Y)Q8Nq9=^rY>2M+qi3E&{WE#|5G|mw zHXFitxp3it%ECu9Mi(hM#B+&=;DbOVONbBGOD@aqk_M@OSVq|g*>gj;fU*xLO+5#6 zca;6Rqcrtxqm;SRg1~hA)P=es4-Y~^mz>hmGFv=W>~(;RLZN$oz@~wK&CLOu#s+}R z?Eyw!MDl_d#tKz3C#2z8nAY(&qt)sGOsl^+OsiM2{#J=^^|uKVI~S}65SNN-UbR() zDC6~`Yv^4^z#UpZAXzL(=HWKcnnxI?$GMU_7XtHWJ=&G0j(NO2wvrW*tjZA6IDR$6 ztsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4plo~f?}hS2g$slw+fA0UNJRg>kxwURY&84 z(Bacqwv8a3Wa7!lk49w|Cb91cI~tD@CYBPxD)e%>`b7tkHy6xj0bGMJqp`Ef`VG}u ztv$z|q6vbIpb5(CC8Kp9eJsBB9}S4cwW{1d6S*L z*njl(zn{H$@AL2enl^sD*J#}Q_S4HBfB*iEpX;?+?e98ndC=(`bgn69lL(k~pf477 zm>jsHj-dP*6CDiqj-l&DM>pUh-wb@}y550*U2p4crW?Jk+3U6s`-ghFdq`Qk=eqs2 z;f{>{xI5CRWgN_JTYHc1Kl$|h!CCX>?Z!^y&wBHR`p&oY8oW1~&7CH`)S9)OTCIVv jZ=tF9*WCT(qgrjJabJ!$)F6z$l%pTO^u{g>R`>lMruj=8 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/e560ac97-208b-4c5d-9196-e952352617b8-m0.avro b/warehouse/test_ns.db/target/metadata/e560ac97-208b-4c5d-9196-e952352617b8-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..0af55c062608ba3ace5234294a4a3dee8414e18d GIT binary patch literal 4405 zcmb`K&5zqe6u^@-TCEUTRRVD;(#Yq0_+vL;oG5ffC0I(k6^B)1P3+0WtYf?5@vcJ2 z9WKD3HzZE{0Z9A}NQjRs=N{lv@fUF7y_wjtoiyyGiK4`r%)IyJ_de#$$D_}x2d~G@ zgiYy-TTeAHi2mP;4E)-Sb6OQngKRD*_tDlTb+T3!!S6 zv0Qeh1&QyYSm}}>Jh*I36JKZpf`1i7g1=bcFgr-5BgRYCSlfyndp@({jj|87m5s!0 zR8TV3TnfCd3l>f+2{NplZPE+KFm!;Qb_{xn3I>9X91!$g>!6OLg=JZnQYTy( zM%TVHj9$hHSLBM-1(UK;30Rs+RE=)I@=NL`GDFiP>HhPcFnaSLy50}ZJ%{?I^7tXz zlt$Wo2;;@Vg##)JKcW%3NYNplOGF571S(lVe7IhGQFNCyNCm_y%09?m7`g+LeL!jI z8K9e^?B5)vsqY%4%$)`VrsF3r)D3xf5E{7Tgq{@H;;~|H0&L_8-KzsO4Fqg%57;!e z0Br6KF!Caj7sN1DsDe2G4K~8Gy1R^4s|PTx{`N4fUcvfnCBD_)B~0vGupU5MDymu4 zRu!U%*AK6tcO3zDXaRv_z95-LyF_btFiyLfk{cHSv$GlP+Ed5u?vAZwMI@^t#3YJd z4soXklZn;TdWC9g{!cYs3(?wPIhCx|L4-rqo-#qP(aC~j(a>AD#x1LunzD5WLHe?z z@m}EYStQ#=5KmI^WaNjVq6_25_k{ag0zf=&U~1ZeK!Rtb8@fq8a&E>@qzb*H4ffNb*k{r90)jW~<(h6~4Z z3@YF%0vB|=s6eOe#nKejQl%Xqho)QlCLNg4z#Fqz*dT__wE3IzQtN~+bN2DPs(k;& zr_aB;``1r{Ctu!v?ccZmuKjweR(tlxpI`m(?6+@zuU0CRf2z3ULA%{*Us28`Auwx0 zUo7k(Zn>kjp!}SPHimm!Hw?XPEItf)((z@qb+6(&^dCOeWTxL zvi^~29hn`YJL_wG@x9afi#KX}wdd9PkJY_zs}*>z*Xw(Ae5lkbdzDHJ kA8(_n_^R*!{6VF%SGy}mYibZif03i_!Svcb43_u(A3g?3>i_@% literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro b/warehouse/test_ns.db/target/metadata/e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..bb5d69cc21fa9baa07244398e6e7221e7370b073 GIT binary patch literal 4405 zcmb`KOK&4Z5P)sRigG{^2*ha*tvTEAJhFaq;;|7cL0ERP7b0uao@vKJ=0#6Wf?4@5 ztoRMwxFP-mLP8voI3OW`gy0bI2RI;6)$JM2jJ+oDI&wzic6U|vSC6j#X#8pY@Rh`w zvVh*~J=4T2X4+6o1Wz5IwX})Hd^gdC=g&0H)rLk(3u%BeBJMJ7!&oa@<455IeBsxn(3O^=v0fA&EeE zmh|95LobB2N|L4aQ<(-Nnh+%+A)Zo(jLRw{^~C#v*? ztj$L-UM^fXptA5o8l#I89pbq}MDRhNk|o54>m`?EcS(a(K&+x1fb4~#J3u)Al%}2o zx;x6j-BFtQu2IU|X+dB*e(FNqkcS7Mp-WEbX_+k^EA}S9MxoHXJYds6z~=UVO=And z=I#I^FCuwC3}b~VnG@1*BTTEe%V@Rw0Mi<557X+GtiM&_TZ3J~#Lfll0mP-EnpbUA zAr?#5J(mal6ilZXw5FhX)jlD=R#n1H=|v9>X^OVv6ZZdWL1Wk#_@|G z?(|?Xv6@;hQBBSNsitcoT01PKlGQqhaH!e=6BHYrJV+J|y;W%3@`|Y`TSpM2FFG0@ zgbts@vTX$MBoj}@el#w-Fo}In*wJK?FtL&dR-u>6)h|1Uyt!aL3*Z`*8I7G))^DiR zYU4Tn1Wgch3{6mGM=9Xp0zqNM3@$vY7Tz*dD;9R|X5k6mfT6=kNQ#{&^cgM_j0axG z2#>BwW+C=(`MV1`1zZ!Lxl4{J&?64a^V@T|`W&x2CFKQVlgA&v2fb>{S%NoQIHnU& z0ap>YpyNdaI%O}Brl^)G>-ab{-O@MNKtMxp!V+PF7(UbHZ^%on6S>Se!1JnB|M{oc zx3B$qGiv{`_et;buNpt@H5$+V`1iMee*Np~@9MQ$?e98ndD!V3b*?FA(+HS#pf477 zm>jv|j-dR4i4KN)N7oGl9=eVXcr)NTJmiqx*4ym=oBIBj^%}f4o6Y?uzSNqv{aUSoudkx1 g_}4u6{{32QzwwS7ZKy#Q{Xvet3)341Fj(F9e;(gWc>n+a literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/eb933998-38fb-415a-8c6f-65c20c4b60af-m0.avro b/warehouse/test_ns.db/target/metadata/eb933998-38fb-415a-8c6f-65c20c4b60af-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..48d3a1a84cf53b683c77f14462221447f0de9f8f GIT binary patch literal 4404 zcmb`K&2QsG6u^^gRP}%=BoL=P3_d4~KiV|Oo))ncD?wRyyQeC$#`dH!b!;;pw+gEq z7KsBFgv6h~g(H6fCyh2XmCl{@dv#E$J`Lz_($MfPOoy*I!2F>gM0KCSP) zk+@?vp)c<|)5J7p+CWPLPhFw4w2{vOFVO~P&otlD21ZK@=>%s)++*B^u~xPwh{AJt z6LYO#slQ6^u%)S8wb5?91?IC*_^=<| zmYafc+}Ch+H>O`V*OAV9IwB|~`d*odZq&;|tmDvJbvvCw69m`)tVE7n+>iXHg@vy-*54>pyJ z#BEeiG1goNyr~Q3POJzrtb%RQ3&=2XfuD8^dWi}Kf{q*z^nHs&+{GUPu>(LWev>p} zD#lesdePlkEa$pDj9iL=NuEA_NUnS_CdW^Rj51b^3n^b2wWOgC8JO2HTXGE>?Iur; zC0#f600w222Hen1+)hULQI?Mc9Zf_U2dt&GO^HJj<`F<5#td1j%q5t)Wh5%~Y&S|F zi9mRk^x#87FNC#9l7;pYnFb^p5hWoZzEXya%PJ)G#Q&VxerP*W!K%4z=*2iv1v1~} zX(VVsPzFI6s7A>srKcMO=_Isq#P&h76hgnq#o1_d3X>SdgO$jl-c63Vy^>i6bjwz12zo=Y;F$N zG&TTiZVxc>B9a%xFjlCNIUx<#!nBUI8Ld_iU|RjnVOqVC^*2gX@oT|w{a0C#8sfn>2DnTOj%Yj!bCk8&lqE(B(GJ=&G0j(M~_wvrW*tjZA6 zIDR$6tsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4pn=?1jR-t50ZI9ZxtH1ykcs~)*%Gx ztB%G8q06VSY#Tv5$;1;Uh@7$ulQ{5&9gRi_6HAF;6?(Z`{i1`&n+q1O30#9Rqp`Ef z`VG}utv$z|pb3IH&;(_6lmZ?u5EN!i;li_Q;SE!@Vqy1o79Qgb7&?rEq}X{vpW!jV z_{0wx;n5YzEX4jTfA&D9fNKIYcgcPQdc=WwetRxgpMzDWq`ZKv^Z3K}p;wJLOYnvZ z$8-WJ;3@(abiAlQr|c)v6xC8?9Uq6LTlyv&n9$H4u|(J)hEKKG+wxNDMjmr_@w}@2 z5&v`j{MRpEeE;piZ(scT)w_*f?lc-dUjOy{yWd~@c~z^`uIsqtL8r6dxuTqnBS6-H zwpiFuu)rEvw(}wXNRBX&)GewB2*N zqjvYuHFfvE>FRW}Kfi44J-Yw+lcx_(n=jvL>@@zaH-D(_d{eK%bFa%mpyS{WMuXbK&Vj3}Rpv8hGj?kLg*kisMYlHI_n&)Z*qp1aSf-^$yGH%0IGhO3{!3F%{ z?0MpG29rSsn>E!!v$W8qf-RQLf303>m6l2qGp%5$w@UA@si|GH&~Cj6=CeR}upi!% zn}TuN*KqbAqFi{w3xif1F{ge$)QTf8v!*{7hkQas>zeTxrq;|oCkzCL+y&$5hxD3< z`%2+=pQIQGz;FPR)+8B70wfhe0+gvp;_P2(DbZoF@&eJkKxnfj$*l-z6kmoyf}aaj z%Z$acb1g`GAH_AJHAFeuYB;D&DEc2dHR(|jc8Xd;rxXHB(jN=7thE&(Lsk|ArAxdbz}h(x8H?Su&= z5eQF{9(-u%xv*AAve14i(}09yq9nw`Q_7HWQH7))d*3kI3+&NUuyQUNdOnU+fy}mf z77FSUltEAis!=iu>FI=iG6`&)u`Im@X3uLymh_9rr<~I%Zru}X0<{k6NLpAHbt!ei zm0@)4Ys2VetZ+rHSY0tGE0utysYKQ27A(J}ej+n8U6SrU?+K$f8=~v|@WOMbeoLndw`J_k-Q*=u|gHh323kurq$hMv|2rYY4taUY4r-$-zo8}{x)G^=YsVB;!;t~ zsAutcuqg{FGnBDEMm8^(lRfL#C z(VHP|^xbQ4nc*j&NS$KFq3y<*z3>`*H66`#o&v2Pw zeBuR+@bHGD7GnRFJ-eV&z%>DyyLi6@J>nd(}&~ERyZzyM%Auwx0 zUo7k(-gifBLHPv}Z4CFeZWu<}Fm$7>>+k_j@C8HgrRy!d#hg*6cR*>YYr0OWV|ET& z^q^z4blr3<8(uL~2-+6?iM=-s%3xnl-{|CNOONjsg literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m0.avro b/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..d1d8862ab24864c185644fe0da9ade1c8c7ea07e GIT binary patch literal 4404 zcmb`K&2QsG6u@1#Dm|bI3B+j+BcGGTA8qror$ubVN>G;F?x~8bi9Oz!I<^^)TZNJ< zH@I*?h!dy%6F6{1+6#gc68{21Li`2r-c0P+PBygNM3Lo8X5M@Admr=W;`MocF-BjG;dE{wH`HBk~jhhLn1 zmWQ0dWRSsTEw#{YEcB^hi>32ltCu>BrP9PwD_9z?(mQM!YFBNv+iZdPEEXZ`hqvXX zU>x@~oZU+)7oiA~xSgfU+c_T^^%0nRy-QM?-Sb)eqFrL0kFL`pH z6n=fbz(@dw2cV1=DM1n-sSpyNOhulR|4K`V36qrtbE z7R%0!IFBL}D_t^#7oP<*kAyKG_*Y#d_>09JbK`t6V!UCEb62rJ7%?|nEBo-SvXQup z3L3`R3xPLv!Q6=rL6%doO?m+tCLZuJPCzeF!9dWF1A@M9k%W8rAP_qMwBa{NBc)>8 zRAg4&UBq&!>%+vO7?|YQlSkw#6k~Gol*lM!^|+Aol~GF?Dv^PCEwiQ6aHrjr>9M5i z#vZ_+EYg5mrj6Sv2tO|Jk)WfA$kT|m)V3)Z(Tw>7kccru)+%!eW^NscNXoc;MWt9>Fe$5$fTgKH)#}zPzobzvGqhMz?7!*>t2Y~>>!aj(=+Wp*9zVpG z(A1a>VZ2_ra6o0@M>ItjDLN$diAdm!KqX6v4?oN<>h6*Tseo8U*$3HkLpOl34=8Q3 z1ay0p{oA9o%}t|}xzmEc^rGB{x*-n_LSvtt($hLyJXYLwfUQcQdwsyRg@En51GcR@ z0Jb*=7SfkK|CqMlTnn6>MqREC=_lI1Q`=ciQrUvxl;Y2gD9H|7O@Fjg9@Xuvnu)x z)mp7R$Dg7Jf{vgGD(t8QJX|0s%$UN3XW7CVrfS2& zFlK}&SER5I`?vDl2b}`03DDeS2My>62j=DNxn6w^SDljb0<1k>Ea6t^88nbugrPfP)=I!BmrH%6+ z@BjYdpTDpDH@@55{_0!(<+iT>^uss5e*ee6zkH!-+Fx6^<3Xo$(7B?VjT1oDfwow< zadzO3I)d`&Omr~XJCJpN@&2w%KOv$h5nr-9GYJzkO&OcH8~HwAwa3 zc7o%+88|`jV1C)!fBfLdC(j<9=`Y{bclF=4c3y1lez~Q=yS@Vte9?BaT}_j(Z|Ptv aes=bL{y@`q_4jbXicwA1_h4Fc+y4PVvr4}J literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m1.avro b/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m1.avro new file mode 100644 index 0000000000000000000000000000000000000000..770d9d0b249bb7503c702992e818da515db172e9 GIT binary patch literal 4406 zcmb`KPjBNy6u=X2RP}%=BoL=Pj4W|W8vkk2B%Bs)D^@^RcDtu4vc~pgYwFl$JZ=?M zIqVled;o5I0lom7;Kl_ZA*}?6bG09W_hw?pcCw+(#)=|mGV|V>-}^IfzHq;4?!A+G z7i>ar?!C~(G-3KsPX*6Bp||yMz(POOhvzT!z}JUnTaV}jXT;oR+<~!nz9x*L=kSZO zud{$Nm<%%5tgRMWwS_(vY_W9yYxPpQwp5x}Xa!4yReDElUG1uab{lOlpG6{o{qT<5 z6pZ7(Mzi|~L$&}VH@S`pDCy@-VbKNqT& znTuuTdX$ABij^)I!HdtvGz*13B=}cVB>0O(9&@5>;xb;d#@9)f@ zQCDP?-JQpBq3g5QqZpXv*^@`)IuIA+G?XF(^IB$0p<$!l6zQ>~ z>((B?pv=>Nn}&tk$q7Hs^O2yViO7BV6-i5#4E++DF@rR=W={?ZM_S?S94jTP40d*d|QuT(BNMTq>$X z)m9aviZ_g}p?7tGJG6j6vRsg?!)>CqdKjlig_1iL0;{(k?aEWfI@%sv$%;r;Rft)V zycyzF4<-w%sr?q!)cT)lx)P$j#d0cHt%3-Lsxx7NVxv<8$-JSrOO0DmF?D6@2!ixY zN8@qi@o6I4Mi5VO@x%>dx9Y+)2?OE8<8jKwQX<%;UanBT=pc&bf`x1X*Pz^J?5y&B zL$y|G&+(^df}k!mLAf23fQJhNg&9-0@GM(+%T%pd*t?sBCwK#f4kINQcAn5@_)IW9 z2_i;#d`)r-v41Pxeb6c3ngGpRx?h7Hb6{TFo~za8VAUxpFCgnY{^%j}stIQ)-f-cV zPC*4+Mc{&t7ZvD~gH)QLTB^L`D;e)pPkb`b-#E;Po% ziPC-F?F!1DGttF(@0zAzb`8UXFMKl%cuf3-PsivmcVOFtLBC`7$8P7qJfxkz*Bf_w zhn{742X4=xWv(Q5288XCU7 h+ia+(wfoB_jmD1lK#pp~=&y40W0fGj5tSeU-}e z?wC#J^_>@*n8r*SXo=vdE3}q2@>$>|+TiSk=6l+}XlWsx;EITQjN35R%Ju|Ncn;q< z`#SYGgT)|&&01=sS=s1O!4_NR-&Sw6DqE$AxmK{$U!`~0($uNiXt&-1^I0f-I1g{j zL%}?rYdE_bQ!aerM`1gOncF-YYULSN+0gHfB0iy_eaUzNOB?2%8-)Ty?t=03V|vM> zeWmc_CmBWpFkAqowMY(<07-?A0A(uDB>z=fN_1GPyg)QR6xyss3Ohm?C*w#+@N=PR zo3Yq-riEz`pjhdWAq+e=qG=$s0l}ZjBEerQbeSEd6NmANHP)tLM}ENUWUcIjO=Tl- z8x>THH5USJ>VmlwD}oHGV4L&;GK^f{ryYY{qJn{-BL@V1-y#ur@gITM0iYGXNg6Q~ z6l&#GwiE2p|z-hOAZQ63pB(5|w(k8>Ns$ zAUsQY@S&j>!dfNCLi>qK0}_phl8_KzDMQ9(6_R@5f5U7)w4JG7)m%38VjQUgnIH2s z5;PzvgP;slqhyrQ(~W|3656<8S$Yr5p4W;z=@*etIj2)Rx-ZxSY8}*(tgtNVQs#sU z!|2+VhSAGe;f_MFx?oaPCIL%Rg{sjlS$;`_RAy+lB|Cr76Gm?~MArw=x$n~8R9-(s zo6uOB4Pm}qxNt&c;TJSU7b!Z#_lSt#4}nUS5FehOT$J4<4N?KIjIs~1=Z0i`>tLig@~O#=a&n*%nD z4FH?l1B|?grAMu~6rw+RzF7pw;mmx^j$ zwN-^E;|-!K=v^J)4lN*%EEXj5aGPk&BaG8-uH@E*z&u)ycIB;OcDKh?vLcdI8Dbj8 zZ-=HUFoYu7qf9v7Aa)t02OqYEPJ;*y!XzGH>XuLgSWKOikH3gdly} z)%Y-U`81YoBZw!Nc;W<+Q+8nz2fnbQ(I{bJDG{tfFPE!dbP#!S!2&jcXHaG|c2-%x zp<1i8_xLk3K~M*ppv;a^z{3NA!ip(8c$O`^VX9UvJi48Q$M^z<4kIBccAn5@cuX)p z@k2&acH`wZ?cIA4gC>IgbiZ&RGWPyAGL1eF?Sd5tJ>o? z?>Rr;b6&qZ`{kc+`#)Yce!tUb{Q3RAuU^0TFjr|C}-mcn025p z7Iv8Idrn7Ce$GS(!@Z*$hSAY=L&uTcfp0L@;TwM1dV6%}9(2t(+6U~&Y12cG zww<17?bK=w k9DabN;-|U$>u0svPUF6uZKz3@{Y}n(3dh($ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/f8a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro b/warehouse/test_ns.db/target/metadata/f8a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..ace15a534c80c9d3a3ee1345543ac73dc835a02b GIT binary patch literal 4404 zcmb`Ky^rHW6u=$dYPAJgA%PIZ6(dV@`S8c?=Hsf9xD_YCa@_4ztH_$zlZ#o$HskTG z!YLA>paY5j0VFyaN<>4mCDIl2(4F`T&=tHl6Fat(3%h%XqR5`iy!Yn!KIYA*qt6@r zZ>8RZP3g-!&kZq4m@zO?!81=7O=BFe&`*uQ*>fZCje*rPB09wxG4~mFVXT?23FGJ) zym9tL7H|fWK?a*Q)k3?r(5HeemoDDcFLi25rHO@Buryewci1%4u3Bif*#z@hBm&qE zZ^=!;IPPmWznf4l0ujVfD@~ZUb2c=pBQR4p?~Y?WrJ{AgcnVW>d*6#A0V4Onc={f_ z;Bi|i{O(?kkpK)2Kp9O^fFwXtAtXSViYzVum6j3{CMz!xBZ!1CZ<5lAh$iVI783kI zs9I(%mz^0=7KSKRx?~6sJ{!|46vlwyUsaLdFBW;sjk4*8@tQTxZN-j*kh$qb*$20k zjl^A4P&3wE3cRih7EY`QvYe7_(hJBi_JE&p40?$Q27-6@F(JoKh>S8;jSDGX8MUIJ6d9P;GFu7_x7tmS z9xJ-8?EwtRJPo*I+PIyZ@S{8*2|AjHED2dtZJUx2O_@&siI^~CtumKj=2nrY)N{Q! zgCqjsdD4RqEwdEXDoK{wPh=X9cubUplmto{GOntS)YITg<_3{Fnh93VWy>tbkt&eI zHcw+gLxM60%0M+rMkPJHILxMzi!)ZG_rUB$ttgUy8TpiRI>W68f=!{;K^@5p%d#%z zPB^!$u6towy@D04C>5)7CS~Okur$@ETHT7}7c|UdhUQE1{g*vq_2xr#eHcFrJQ|+L z|n`rGLjMHwR@-KH7|S?WtpTx5rkpB9c`V zVwNPYhq%>)$;N8xyg@a!|EHR+h3IUtoJv;fAi|;QPMM(C=oCS+Xy~0%<5pBmL)kin zAbs7@_#pE5ERk&^h$p#tG795S)rDyi2EvWU^qPYOOY&<4@28K}XO8<#tp89xf0RX3XHivufcrQ?+K{(akJ8#v3qn7%9oH^MpRb zXM*u*5HZ5zOOjiN{af+ugH8e01ZeKkb`5&Wfq8Lzu2!Feb*H4ffNb*k!w;cXO*l*O zh6~4Z3M$|#0vB|=s6eM2q|y}CQso^Vho)QlCLfs6C>XO;xFCkljQP9rQtQP&^Y-w( z(!PHGhwoptU;X~#-VGtLeroJ~)6n2q-+>=|&~~(4O_Psr cH^5Z< z$hGPLu80d9D}5L|jfhyzE?75oppHxoOylZM?i)+*~vX5M@Admr=W)6wVkgLe{l z!lv}~t!J8;#Y`J$iQuU#G+i6}EbtO-aQ;m5J#Ap>T1cljBjO(84vgv9nji`<;2URO zq&{ab8Dy}zt`=IAg&q}bxpeVu{ZhNKRGOG;1xx*PdWX8EcGW_=4IRv9q3~fpyd^gU zAc?(tw+Wh1<#DpPhmAM2nw~R!kp5sO-BoPSD zk{*0$8ilY{NwU;_D${^OW1=J^#8=9Yaao0=p7>uf#}A#+Ot5M$n?^B?RDsO5c@_y8 z5R^es2C7jqO6loFK{^c`oUtms2WBs7MV|D_$fums8E)MdYznmw>PS{tmUSs}!c)`i zI+v!|%UR)yLa}Pz|Dq?%-h7Cz526d-rNNmzeuy@u zu{IyVc)4)lfXc#8XpAmWbcpW}5y2k>8!a9UTJG4N?#4hCDn74Lx#7Ps?oaSaCK1HVcLB?EzaR0=BjXY?)gC zwsr>?c@fDAVi+q_$()de8)4erT}G?j1DJMydzf~wWc{@g-|p`cCU!1Z49 z;!Y1H3#+O97S+`HpK7`mqP@d%Dp{?A2#2aOWrAX(lLyJ7p|=Z-TV63WW$O@v^i4tF@p=ws)g4~)ry73H?!~rZ@|!DBqYVo6Z#B~3C5>> z$Owh%cJl9a$YuG-D)&``TCFVfB)(ES3lQlwc0;*-14B^K5So6&L$BsYeQcw zoG>}`Mr}d)1ru!y_qG8Ke3(Ytghzgb|2PCs%V>@J-Hv@^cUoR&G;Vb|p4aMiSijX9 zd924+*EU?^aB^1(bH-D_}y{OmVz1eK;HSwj^tnJlm4SanU hO~t3V|LaG!+Fs+H9BrsU82wF-egM-O`!HDD_kX9hO|<|3 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/f9f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro b/warehouse/test_ns.db/target/metadata/f9f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..e55f87259a212a92ccb6dd9f058d2c36be6bc402 GIT binary patch literal 4406 zcmb`KPjBNy6u^^gRP_KA5(sfvVB~Ys_)oU^!)Xy)?MhI}wtHGd*2Eq+rjBjK<5t;K zz5zmf2PDK1i3<`ZB#=08;3IJ2u;K%7LcBK=kj5U`6Z|Z`D6DxuYt6-b-0y2yo;HMpfUZR45pd*I_ecvJxckmy9*a4swzeyS~ z6_ctWz3A>NmUCSnM-IinBu^ecBGJ^0Yj3t_F2WU2i`rU8jOq9i25SIUraS%svY_|KT_hxT|TST&aoy%O$R+mj|JtOHSxXnJr!`_9nnaq0qfLVADXr=JtS1 zV++9M?f@e%B6&d!V}&Z26Vh-aOslucXtnwP(;93K)9RP3zfs~_gI&VJ&IRiM#HFH| zS8Y`x%6Nn58hY0;aEBHUNEQo{d2g3!%_EG{UasWUg}^-8jCSpUWI)Wg5 z+12%QozFlg2IX!Ja|?uykV+VEIhiMg~#{;h7KbkDR!RFXShr- zKJ`OJcyvuN3$cI8$1dm;@JxW_E;+0~k2o;TU(e<0(_ME<$_L0Mk3aeddexY-1Yfvt zO(&oNo+9u-$A=1Z%6=kEQ7u*0@o{LnrEju{DGhy(CBg_Wjr2dHCMxyFZX;cH{Ru&Bk}XefiDLKmPU4WdlC7zw3DBVW)H0xu%>=B7oL` z##q>4a_Ejbg7OO{IvDRAL)Z0=ZWu-f26_hu@*}_LZN2UEEYI@p9ktD_IcRqsx7!}* zPPgruU1m7U>~}5iaPizaIKBV)vnLPEn=jsM>^1(ZH@~m%eO<4?xY=y(HE~dD*7j<( k1`gk-*VL!E|I5Q#ZLe`(&NlMdU*+tFu)MJklhuR&2M|9BB$6u@nt6{SEC5{T-G(TdWJ_rpnSQyt5?J5xNJ;QUuXk@Kb1v-zgXxnJ4}NS;}vVHO~sBqpV`S;+1*WLBXJuQ zRE#wj0&nYrxf3gb469(9^a3)B9N?!NgI=P7fuJJ?1byEk5qI!GAa(#~#cz^EOvR+C zNH4lOi{)I`N0CD@Fv-)?N95WQ6LS27$S7mwxRCOdQA-*Mk%4(FvnAKC(QfkeSkiTC z4`5JcX}}HL#O-8+A7}YU(9uMsvCmp++mwuG!dwDK#DpPhmAM2nw~R!kp6x^_BoPSD zk{*0$=!LLWNwUy>BGZ6GW1=J^#8b+Uaao0=o_Jp{+Y9Z{RIq9;8+tL0RDsO5c@_!k z6O=(v2C7jqO6loDej0=}&RCY-1GDF~B2W57PQl$A-q(o~^p9F;7;qJAnfG+UDGzvv00Hyfhs{piATsDCDpAEE^` z)@DN(FBdKxP+9mfjnPGl4)I(fBKSj~k|o54>m`?EcS(a(KrEx|gY3DXTR_A z;#LnP6RWB98r9VNpK7`iqP4|xDp{?92#2a2FhQ}=$%ACx&|8JZEw7lGvULbS`l_Sx zVd(H_EZas9PcrdjYYh$eRo1vjDC^nbFu;W&MU~ zt=697PtXKGN6-Xic9a4hE)W!EOyR<_Y~d|awPNAn-7GxD8!&Vj2}!Z@gg(P%g7Lr$ z8R5}2$t=YFEq`}Gr+{k$Gt@S3p!p@pi}k|X^Lv8vW|~K(=C0I4Fojw#w-ywh~ZOh_O`s#I+4qqT|BR9KYsJu z^Y4CoUVqnl`St0){eK!S?=>4YzyJK=hd;jk^Ot%9KDEE=xamQsv){RL%tdK)OEcB|GM7R+e|llU9;D1AM_9OcK3j?cF%SD zZNnWI{c(4sQ_I+&-?#Q2KREsL>BF<;&0CF~#$Wa3_w}8x>NR+8Hk&(5e5o~SJGEK^ jU*D|P)Tg=o>xZ@4PUC?bZRDdb~y!BiY)0k-kEfG9*gx1nLp9OBB4bGlxzN-z4mKM?pu86qHxD9iyY)=q{ z=kSfQ&r_c>SPU}Qtfe-Zm5nYHY_WCzZS_{GvQ?UxYXwXFReFalO`WQZcIz!LpM}DQ z^YFGj6wKqfhO@gd<-!+!6tC4gIbc@d*{}OU4se+A#N=C=?)a7mTOx z&`TceD}`UZmtiCT!vRoQi{u~)kW>f>P^KbH@?WK;M2E%73qw(S3I1ZC!|X7fj2N$2V{Izd^8;olYh`yg zm5s!0R8TS2TnN0b3+7I&2r{gKZPE+KFmiyOb_{xn3I>9X91!$lYINa~6I1+)Fo9!&+S=CYv|<46_A z{FtYapaDS{1ZAKaC8Ly{P86h*(8d+Z()(ccyjJ8%zleOwIi2FseZeMB>!6Ngg=JBf zGACRZM$f)9jDF4vcNB`%1(UKe30RscRE=KA@=F?|GDEX1+4+l}F#5A0x;}``eTN38 z^7I&jH;W<1Ju(7irj(?G!H z=73FO1Hk6?03$CVc|i}`*&WJM&a zGQ>2FUk!1q7n6zA)Ow9-YW`0(T?x_JVmXzpRzZYI)t)dxvC+wcWZuwQg~lzfn3}S6 z2toR)tMNhT@M$dDMi5Uj@njT4qp}N=IPirXd0xWAQX*J|UM^R^=pgduf(2{>&!Eg` z?5whWL$y|G@A0Q-f}kU4f-*Zw0S^xd3M;1Y;90itnyFf`@bG399^(rbI*f#**m**q z;WEMa#19$a(G|%o#QrTGyP#9RGXa{rWWNGE;=nwAJ(sIbchxN^A0X>I{_sQSRb$Q) zeBr`1oq!5>iogRMA1cr(`-wC~wNzQh$D!$#zR4ygH1s`|2ph!ksW!VKAGJ>8GG`a> ztJh``DM*>9df${V{z2xzMQuy-2 z93uf39)L2MqyR~Pq(Vr5G8I``{3|UbCQMddAVv@gW8NgC6%kF+Nh~Dzg;2H3S}r>? zqAUzitaQl`UVJvDStyJF!M~~^!Cx%$m>Xr&5#u#$oV$u02O)FQjj|8#DjSKrsGw%7 zy%cy;7c87u6J$9h+oTteVeA1v;|TN;6$}I&IUwl!CW*O+4+60RKx=-JG!iN%bwy^` z-FYk*x;}|Lih)UKx9Ynd&DhCA)1NRJg=H}(Jq zWu6AyGHu*WPWVZlj|3e}M3#iCskTkYh^EXZfJ96fvR0W(FmtO&RO-22oIw(S@I2|k zhn86iYn3ER?I$t~NIWJ=LP`Rq3>jBdNa|_uEpvm&9nA!*=dxv%<46_AVw!6P0g=JZnawl9^R@c3> ztX{ziSCop?1(ULJ30RtHRIP5s@=F?KGDGtv`TonEuzK?$x;~801CNHM^7tXflqSY} z2;25PxogTn+`ge!v^eWchDDj>CHeq7tg7pC6Qc*3cwyF?S zykUF=z3T|LLkkEb%LU1PxJ|Tn2jjF`D7keZusfU4u03_^?)KP9Rz$L@Ld=rn)eyIO zFxgm5o!6+Q_WxAVwGf>xmQ%@U9Yi=(-6<0k8=WFZ77e{qYTSy7X((HV5Tvg<8Xrd< zpCz(w1o0#nPex%ps=6>u!a%t3c$_k^k_b+zmn+mSJBXsWU?H2rH7GY4JFC3kP_5O* zbNm^aAm|91pxlm1z{3TC!i*VQcvdaEVXD?F?A*@6BfJ4ahmn#DJ5T5{d?py51`#7X zz9PAW*uNF;KIjy1O@QVuJ*YvCIWRA7&(-R4xbBpc7m!UJKmG`M)r7MYZ@6$wr=S9^ zB5*;+iwbngK`KpAEmhv}acH`wZ}NdDje;>tg$rW%%$UC?FSTCmGj9*iEA9CGxBmU| zjf?E3FMj#p<@~FOetl2ZfBy0N-~Raf_kZ5hH0`ej?s(8{AGEJ1XOkF^wV^E*Zj>JQ zqqd;@oQXC@d)qQi3m%r)w&2q?;Q>G31wSpbHD(XZLyLA=-G`>rI_&t}7VRI>7IQjX zI`Vq9WseUQm#zILkDh-1{PC%N{jR>N|JvC3p|Sg2LxXpH2OjvM?P$B2CSTuafT{S| Y*}MK&({}YoIAP7Grt5n!t-kI502}2SS4e##E=|vIauIO-S z1oR>RwuKxEBG`g$1S}hxOI@6>SQ>?}C1jx{a7<*H$Zk1p3$`u@c0Xk?VMd%r9!qB7 zd7mc{mc}|uM8MA&Pok@_&RfSomsZcqOkVz1)Wg(Q4jQBbySSo4l_RVWrFOVJW>Md=k&-B5v zc8EsE;1zz4CMh7%r3<&2|1nJFt4D3py**ag-PFvgY9D$dT&*a z(=b#K`vZ%U1otzH@-WI)!+03m>L`#b$|iU}x_Z2`?#DqaR2vReMmr#9bP7%2aUL=p zmxpHrS2rqnxIxBfkmWO84wEYMoaT|GVXHZx=1>U}7 zLO+Hz?RJl3Ei9Q6ux3K}icBoCtq%srXy0RfH)0Y~EOE)Ig3{Uwf5!Bv*2=T=fl$H%}e&~%f0z`r*>zu*p)`3-sq`+ONXa|HI#eOjYXY$4T+OA zCL4LO4Ma_9Q_D1{`t2AHG?C$1h#D9+v5lzTW&jwGS2`$`y+7BJctundHn(88#RJZDOCe*XE+?mv^M|T)ZtmmO=HBB!FW!HhnTQ_r`!DYwe4+pV literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro b/warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro new file mode 100644 index 0000000000000000000000000000000000000000..c74dd2542bc2eaf22370db65a62fd682b41efef2 GIT binary patch literal 1788 zcmb7FF>ljA6iz}12G~#$QdL=2#Z<>W$4;EGA|xavBr2u~S!esDG1zzJ?%Xu0vH?E< zi9f-_gv1YEVPQdHWnk!r#LQh1r-7DegZ#k&`Ci{~gPj61Ai`P;^F0sAbARagGH&1w(Kd(IC6E{_Qsxn`j=MFYEXTq+ z0>)EHI_@SuVzkTSG35B;-4jzx3o!Q#lR->bV(uE|D1|KH^4r0QNpL+-%XW9T~Ff?0ORnS17dst6l)wle7`#4(f9hjudG8u6;u$VDC zRT$}Eu6Dz67z6n!6_Be5K8tQ1Z`J)cC0w@QTxGEXD#oGK1QDefU{W8R1zeuU;Q0nw zqLIpHxg1tim=(Wmmzj|1D)qIY&gcYK7|GVGjWg1gj>bC`z|AXI%c8iHRa-LG zU{ylZie$bMn6udx+OJ?5<{)r_1+H188U3H)tNpAd$(-GpFZq}z5Z_d$wtl{U`{wjs z`^LBJ{Vxx0f7t5$Zhva4*gf0s+7tP68Pk%3E!`6#;oT&%1!jjJ>?&Cs1qh9z{?LlO zXkdARo@)&Q+_U5#C=MWSQQ{#hce+aY^kJ*DvGL>GudjbU|M|YtYIWqhe9ouw58V_l A+W-In literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro b/warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro new file mode 100644 index 0000000000000000000000000000000000000000..8917a9717e5a0c55be1df5ca2dc3e7b535989718 GIT binary patch literal 1905 zcmb7FJ#W-N5WR#bNltgb6+l0p_U@o#fS#VDVg<_M<= zFdhsL@6UrovLehi41ub67^f-TDnnutmBbq)LR?5IcW&KKhAHnW*KR8leNe~i$`KkF z;H@K6Oi3jpLgN5h7{t?3Ctw4J0+Cr&N|mK0;Zw{H!XtvYF!(UY>^6Zaw}YwMHLxpz z>lx>%$aQvK$1!vo8BiQU98^7VRL%A&@JX5h3nEg~%QqYeU-JwerHqTq4w@Kb4{8iC zWWYrUO$4$9HG-)Flnjq4z?3h&eg*Ri8W@@_tSV?AkUgxYFz;J-xP1(%_cm2rWSNNA zA6P^w8kHE~VP5Wr*)V$ISIQwTCwM=)dA!T+M=55a4JRto9Z)g)QWJ!PWPosec&2c1 zB7!FyWQI1&d}hmGUWHoG+!cp0B&f)^NVil!Fw_|t0u4gZnzeB@rKKbBjyN#&1lD3O zIF?mfGN)iIg{l=vUBgqy;}f(Wz$nOpqZn~ivr01hjNOyHLjVbiJ()#pBW^1p{5U#{qp;u}C5}M1)yC1(ke!lzu$%lox=;7M` E1F4-_l>h($ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1445752429382423980-0-3737aece-7657-4840-905b-26cc0d4353e1.avro b/warehouse/test_ns.db/target/metadata/snap-1445752429382423980-0-3737aece-7657-4840-905b-26cc0d4353e1.avro new file mode 100644 index 0000000000000000000000000000000000000000..4e2cc73145eb493e084d51f3eb73d4c543d3cbd2 GIT binary patch literal 1904 zcmcIlF^kkd6y7_xu&|V~5eY%W;<8CL$tHWX2#O#mR)>U1@^&|x%*2_=t;?~cm5r5u zK+s04#NQzZ;!hC4ZLG9%CcD|2z1-!_LI^1`@B6;@zIpHEe)MGP(hkF@U=zZPG`V5B zuIGDww?A|O@pguRb-h3oFgMgNZ|GXK6?nFIx!z#tyTLUE&q}~C7`V(MpxgbcBSLe; zjRT-8C3w5PgAOR^v3LSG`f%k?=d%LzJx!+&6PoC|nm$S)OPKh!f2d=WSEo6`=?EAP z3&bbuAd##H^DIlCY97XEipMe}A+aRBM`FZR&r`<5WruAHss{~*1Tx^F zgf;@zf(F6T0ZOK)6kw~D-n@c!1uYEi7S!iL(F|~SlEP|*Ail-uBlDu@INoLK=c3sMXKR^)w zf=4NODI&Iqg5Xg+c<>Jh;=T5usFU4hJ8jyu3OUWZ@B7~S=DnBO-h-*L^E{^D zEK8_BtB~=CrPIbdUCmg7`yEK=tMhA`7<55fs%sheEDN;7x)w$d2V9;luW2bwMz;w~ zqY$`oyHs>0K{8nxW@0Q+1rHZll&<6<0rPX>o6M&|O4sk*xnA!_qEo+iw?5JbZMaxJ zLL-KB

pBQHhz%C^WN9e)C>00cK1+o(_%KMfsz8O??%3@T z*i^vfjFU*_y7ykkF|;cgXb?c)7CmuP&8<`5!zc#s`m9$j9}@*%@(dnFT*$|Es~A)d zN(=$SAY=(u1gZrkg0TY`>mO5qu0DGC2__X(FjQMuR8T>ndRR_j(zpC@`(UN_mbJ7O z$1-AnU}=`oL5`6gCi!mI8%A3mMFNt1g7>4V$2;$S8l_ye;Yek?0}4h*X#$V27-(7^ zo-thB$l%ci*+c7jK6}eyQiWE~+?SUDgtQk6nQpFrV5no(hs^b4YnH}YSC)>#I}pIN z6IgrQ?y;=Ok~sxyE>x_@%*3`f9G;;45C(1nf(BI3l2wY)|0q7$&-o;2!*io0@3R2> zx!ly6|MKF_t>@d(M)q{!#uxfzcI(W>R35w3Y&M#G`E%*89*3rMPq-;>1YT3nYz0KK zNVchacGxCu6IsNdh?v+zv}M{zH#}@pu*0xzpaeH^>2FtSwYj-pA3nW)^L6v>mFZe- z{QawD%K+k8L`M)38xdl8$i~n@Es8zI_ps@=yh8K4)SR9DvH5%b&(@3gAE*9XG-&yb sg)IjKL8v1FdWfil4P=6+J7MV9j!sn3nVI#^&)#kS+}+vT7d>qFU&uCoxc~qF literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro b/warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro new file mode 100644 index 0000000000000000000000000000000000000000..3076594a0dbe0de7a1e8629b306804ee9889672a GIT binary patch literal 1773 zcmb7FO=}cE5Zx>u1U*W;hzx^xkj&1C+iaS;4kp* zUl6?L!HYM4gnvL-JPKYE!S3CiO(&B~;tVi`yJAnu1hufz)^%q_fju{UFe& zibpCz*`Wy`92??2j*-&R&aS4cxcD^^9|>b6vgHMGS*R21E#u zxN3s)YVKYEpVACujColvKj>NbnrHBuN~Iq=Zep-Ks4)=8K#1WN}5pIlHt zXg_-W3Dy-fFf?0ORnS0Sdst6l-M8{=`vg|+9k^z^b;QZQA|cS!V6=z1Sq7_N9O)yf zAU6|y65TxBruz|PQn%qkWw`??#%-$!63#O~tUf$TxW3WBiw&|uhbEuZa#&a4Ry5D` zC4m%`nbPSR^;1Kg@d=1H(XCk<=g?X@7VlJnbT45oi{e67Ysp-J)d*E9QuKq7JDXji z{Su~e4hj*ZP|YgK=>HU7?`Jbf?(EiL$zx6cFaCwrjor`t{*SlwcfXRo-#`C;Z_hVA zZJ5{{-|zSn{hN$=DZ$t7shG(QNqmLGAt=8})=xq_>LP-@0S<>=uiuY61ZnD_-Y^Xy lN}^tuczMt<(({L{R=fS}>&HLu=U?7DXt!F|^g*kZ#y@W$G;06= literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro b/warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro new file mode 100644 index 0000000000000000000000000000000000000000..e4308d429182fdbd41c0654216dd92c66476b9e2 GIT binary patch literal 1773 zcmb7F&u`N(6mBaH2n|kXTo8&Pgb-Sqq*?mwjF6C!kcK!-D01!B)hw}t?W|N&Z~QY{ zIC0{}g(L6>a6sZRi9diN*lp8!OP7tS{l4#e@AG@l&quGDTicSMTu!+1D0vXZQ5;A8 zP8fx8H||8;IJlo90Ze&T*mYK<={*T=3SbyKR%9a(t?=%ciwr662!y1ZwL07ANbt7A z6UfkqJIAh?<=_q-R{-XMxI2zJrjQb;&-Ra9hO)(Nh8P`#R7sB1WF4fl(_wKCXjI7~ zm7wgvgbtk9v!XSE#GRk$V1D}6~| zjEYq0bdCC%p-%Y}L^9H?SsCZhS~?c*Oo4PSVJ-6fLRM?ZT!GaHl`B%jLEoLvFVQ}P zS(1T51SwRp$};*t#n=1UOp-gly;$;?6Tpjqq4D?2Fxq-}qj~uG*4LZAf9|zTnjf1c zcIf+Uf2x0z2`?o0+C7yp*(M`jA#ni8FO&7Vy$%T=B3_IKp|=~MzK3ww^9B$Tf=OpI ji27a@w2k!1<3^*^diUwaukU}}e|ywwG_L7`MkS4Z^dl{o literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro b/warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro new file mode 100644 index 0000000000000000000000000000000000000000..315d92551a38c9420128f58ab6419446698659d9 GIT binary patch literal 1773 zcmb7F!EVz)5KSTu95^A=UQlIOlmn_`ZyKjfC2j}_34sLSR3U5a9XAX1uGw8TL?wq_ z_yE2Gae^~{z^Q^iK)rC`3)oHKbX%uxx%jX<@4cC~Gvnv+oA#|W$#5Y@TzQn-M`6E@ z^d}q!;SLISdP8)tzyg@^tgxG`%(4v$?@C|^c&yB05FK}J`}tw zlM&?j%leV4CIz^Ajw>MHg1B3bn^MS#)MxugF2nikHph&nAXQXgHChJg>~vTd1R7QG zNF^vcFd>8|hWIH@u+q}bs~1n4F;yey@k?i>5AJl!S)q{uJ6NHDER~FFjdN)2h@wU( zk_9A@&a5h>%CcwSDO2a+31><>dJ%+nnn0D?(cJACIJCg^jB~1UUA)(241-1nObC#u zYJycYZ(jqS(hOvj@UmWh(6{h4&)_|kNG_28&_b)kjo8 zZYKCFx_P`!_hZVWZo`?%d2!_yxuMSZ7(^87)~t;)vX+j;J5eCrD_F~-xRljeGS^@=Le+{CVX*5?r&nmd zg-Miy!UQW^v&u61KgE~(*-Vl8S%5WbwEh=LM@1|iEr6cC?(&OV=0Q6MBFBqSoLh*)dyT+U$cn%#AdQ*@$* z7vKR96%wJL;}vKqc!xXyNR;f}oiCd>aYEx_cfRkN`F3XfGF9G7Y(Aw38TOX?v#iD5tbHpci{Ps6T1DtcRi=?MWO58=J2`#l7dC5A_3Oz-x^U? zAYmN<;~6DgZxbCb+T-aM3UqYy&=k`W%x%MDkWz-tEyEmTkYg^-b`MR0iurAUNHzj4 z;u4ARDoExk!ve>VsG5fhmXUoGf@!LVpU@NuDQ!G|_Sl$YVr)FxG3NSU&bEwmG;$#O z=cu@vN=~K5DYP_5WJ)LIC8V*;tS+U_($nx65vSoPB|;i}7UYI)pxW(t;dTQYXy9hX zMJ97yzSl(zgH{HFG2poFiSugiUjaYLa^P`Ft7iF*ui+b>!JCW=`PgwAgYH3t0YeT# zme59^ThJg_IKb%Sf&yIq(VI`Os-T6T-NL$p76RSFW(upmLQU{Vbo+R#?nfEnvJK}diycriMp_djl;(g)b9feTc_V}8 z8)S)gRX)q*u&TnWX@5A1^ zuRrd;|Md33&+j{XW%qdP+nS2qw(Xuhkw2F)tvJ}yJrNV$!-*{r+XrFS$=WywJ`NUXA&`(jR1vb)-f_-g?;7tq$0=Mx&2NB~ zii$`PB_)W8Kau}H!|vVrvWXKXG%j}My*KlAX8bI9y>V-c5md1W-7Qw$sj_3oj;XB8Mbx=}+)Yiw-mMwUZ?nK;`!GzcmewVs@@-$icRYi4IpgB7<30w}gAN0R0=Oulk3hAc zL$Gw9rqfFbaMVZdKEb+z9)^Ak+X{LJR1do;toxRoZy#Ify*-08MIjU8#O%s0%uUI!;7ucE;IJmX5+ZVBEOzwd*!ju- ze$PICygfMC__iTqcPwjYO~ub;LK_B_aF54?4RK;|RPO_~+GMS9kYx_Wp*eP))b#x{ uGb2EOiM#-NAp}X1+Gc4FrS!?JrfqKi_;vjI!>6M^=0MYKXqxz*Pvaj(kTWd+ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro b/warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro new file mode 100644 index 0000000000000000000000000000000000000000..f5efd4ad5d89e7cfd6e0b449b30fdb0c7bb6d625 GIT binary patch literal 2019 zcmbVNziSjh6uyKQQ&@>c5DCW;tg^ZNHTxrlHYx~$pjbs&W@p~!R`c<-9(P1A;Vkj;2ct}N@0tJi%i`%J>5W>feg*|78u;`LP|hQyGa1~ zv~@1b@&t2r9dZ_B>9jGA*Yj+dkv1gw<(UnI_dB4hG?g4kmQ!V^se}>4l!>#|4JF0N z@HW9|6awRZ2lMtMNaQNQkfsS#$-{UarE5h9%}7CfEhCr<>E^8)SDU?vx0_dPHi!D4 z43?VvXvC1N?W3YgDsd(>cAWGNT^?gi;i9jJ8M zAGuutBMDs1IEh5A7mw}N zF~}ZN7%0TRMG18TvIP}_kpp?wJD>nve)Q@SOe&~hsJF1JpoT#9u$sc8Z`t1V(WKs6 zRnl%8i-?_p#d(hV1x9$76suu8jIKC}I3&dc??l&+chUVgN||WGp~`3nl#HI#1VNU? zfYa*mjNsx%1P?dJ7_ArijF-ct3ZoRBw_qd<3Wg4_N z&ewpq%4A!H>lzvXq`JsLsznTGNbs1hd-Nnp>>T~F4WnR&7K>gm?6kDqQ&H22#57tP*z{{R30 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro b/warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro new file mode 100644 index 0000000000000000000000000000000000000000..807a6aca008430e81e467d58d6630c26d92c3a8f GIT binary patch literal 2021 zcmbVN&ui2`6yBCvdJsgAdJ$QIc;+O)_gT+jS{>^DJI^ z@F-2Fxpa;-H$XW8lLmhTIEyzgoV56@0}rcogMAKDJlK zpn6bYU=V|lCDak97E}l(4rF|ANCBq$=+!5fR#3xGZ(&(M4T0)mHHB&4=KI^nP=Ig;By`W zO{>E*fy)~iJl-HXXtT&?XE{u(&`O$n@{&PF`>~Me7V3M3I_3k&JYTkEWt>fA=_tHI z0l9VrYroe!lvPm_W9XWS{v+e7~=lS=i-pv%T%evmu2lD6A<^3FV>7MY?yv2N7&}iNKd~*rzt4m;@+vFvacA@)vf}E z9EY7=XAnklJh)#V0ZjQ;*iBYu*9BqnYE;D| zm7wgvgbsbpMhtf93diW;3n z7Jw6-Syf7vWyiu(rq9p4~pU@P~~>AaJvTXTi|-eIn}u?-|I4lK_deq1V~af z!9_K9uYn)Y3}k|NSua2AS@@b~a73ljkDW9z*dEjv2xOpi2~7mH1vP?&1A>x z2$h-A=^FL5q0aaOM3U;(tc`PIEgg$@sz7>Iu$Dz}DXX<)uEA=Asud~v;n17SuF!rB z(3nS8d${-M_useQ{+zT($u>y?g~S1^T+2eAG$5axuFl7S{nZV6T~pe literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro b/warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro new file mode 100644 index 0000000000000000000000000000000000000000..dd63f24beaccc839145ff8543418353e5ae0a5a0 GIT binary patch literal 1788 zcmb7Fy>8S%5Oz)wQKUqnL6PMkL=m5V&i2`<5fTy-QV>;ythGItGuXRkcb&^AI#E*5 z(C`W%Bnm{qBft~z1}K!g0lRnS%O*~o(74#0@B3!Hof$t(UaoCyGK?xVCfv-k`%dUZ zcHsC<7(`Cs`d&1=S0M_Rn`&6#`+i`DeiV6bUH){RFEDIvBbwY%1s=P(5s?uEhjP#0tZG)_cow#L~}mX5+Z<-m+9SnH~~lvPaYEt3-g)oMyqy_89=+JOwk0Sk#e_+R;JbmJ z4C6uEPoiKDdvO#7!JQIupwcnJqIj4LyvUEEz8{3iAoRUk0$x=>GjM2CjDUB8n`6cc zB%K4`f-u?*w$K4*J&{eIKu0$YZ8B8ROXAw(K#191Hbr@6e{GSezD!k}(LG zmPk(4K`L1l7I~gR)jUFSLicqDW|<~_#4;q6wDs)CLu*Rp#Cq`5TIhp4-?q-s$bs&k zq2e1VIa3-Z(8?f5v`#8Y$WoPAT}qv0VBiUrC*c{RQW<<2pX_Il>uQ4IIVl)teX3mz>i4|BF$LUEZ++ae8V$%O@vgJowhNU9yAy*nVuW$D{ovwOU&*?P&0Z!&I AIRF3v literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-224386441439912473-0-a1309d30-424c-4c10-bb6d-79711a6576a8.avro b/warehouse/test_ns.db/target/metadata/snap-224386441439912473-0-a1309d30-424c-4c10-bb6d-79711a6576a8.avro new file mode 100644 index 0000000000000000000000000000000000000000..374cbd4c73a02030fea7ab1493d8d95fb25a7ead GIT binary patch literal 1772 zcmb7F&x_MQ6mE+w9z5!L5eZ?BnviUR-}l}(@4a~zoz(B_3yLx^X3`<}pw$Z6{caHW zL3=RpTS2dVkRc9KI!4rOnkUIa0dI4lF*r0&Bj64H!I1G3N#_)}AdEIz`{eE^bpq$qv*0*6+A+6 zLPt6Tvse>9WigUU+Iso?i8Uc|Y(0KqE%d>j9a>v75}>0kD!!qTFr~49R*p!bbwZIr z9IDKUQi?2F2A)v436B|-%F(MJzgGn++zyv+m%tqZT+TQpD%aI}?PBOwG9ZirheZ=? ztGRsx{E#Fd!kFdd^1Z;ompp?rBBXlku!_O-pu~V70jWx;A}}o|5iA|xY_g*O-+c7) z6Raz!V5qjRsGx$t^st=5x^KnR_VJ9~JGS+BtBA{iMVzCl#wZU{y$n{v*jGnHLaHbD zGP-)ab@wAeg=)iv%5n!3j02+yBE}Lxv^+dZxVllniw&|u`#PW1a#&Yk7c{TcC59o& z6RFbG>Kj9yunF)mQmt7UXWv*l2JcjYu&-gwvur1;v1D$*s)dRb$va-(p3Sb&ego4m z1&J_{sAQF4^nZ%4_p_cPdviF1-QyR8B)>2kt-1&fpm*xUF5gD0d9Lv&ljA6i(7mbznqgK`63-sZMO?Y$rux0aZdmLIN>W$U6I;8-smkeCLL!$}d1- zU}A!ijfsJ!5)*=r5s8V7AHWXhBu+1N>$Z}oyZ3$Hd*8kH{Lp{ayu8UNPWgxlJtDU( z%QlUnW826w`X;h0gl?ob11j{DFuU&#Ov6R)5ILsfSXTc!hZi}}0CbusK4h)_wUA{A z7WzJ9JYuwEZQ}imb$Kv?1b@7GpovKe+IC0FAYd8MwmMoEK}@(j+da@IPG+|Wrcnr7 zcqta6Wspo(hS`Q8Q6&!-Sw#1W5W<3j_yG&BkkXwekM4KIkr;J$9(QK?piQ?rCuqb# z_fAkT6_uDtjTN*sNJNE>$5RMAnORv%nWd%RBPv$m0i!}1d>mxDb)eF1Z|-&lY%Abu z#z`b|UA)(63{EWrCIpCA_QXjw_s@Y3qZqgsu)JEnffRhjGk6(sAs^eTV^BS)Fc64A z$P(%ZR0}Eua|bduKBWLtee~)REGwvCsJF1JpoT#8u$scMZ~5`|F_hlh)o32aGU8}p zahBmpfsr02#co&(<3Juo0+M2akD}|xyXbx#Q7+qXrZV3FCF4+O0-v!MFs%;H94>EU z@N9!D&}Na(VmU0U&`O%8@{&M^^H|7q3-y(uj@cM8&zG%P8D~>jItuSZ0N2i7&C~Q$ zR%OYYgS8MUS7c@z18q7zL;E>QyaWU$Sm26PiqRJoU+(8(lCuS~Y*IxY!) z?CU5rK}RGcIu0DH8!iEVfDF5Dg?eIi3+X@i8jbb!Z@=Gs{rmRI;hk2aG5;>AX$5_P sd>82hd+6#2qd*^EaCHY8Hp0XrflE})cKhA?e;*Eiz5cwj)I47LfA?fik^lez literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro b/warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro new file mode 100644 index 0000000000000000000000000000000000000000..a130255e52d83f8e4fba882ff7055d706f42520d GIT binary patch literal 1904 zcmb7FJ#Q015Oo|E6qG0wAh1qAfpYfkec4V6LPA0yfv6&MTJMhIgS%aGyN|}*IvNTP6#N5Pc5R=t$t9PhIqPocy*KlAW_+*vcvtHJ`uQK+0p$Sh_XI)rkfiSKZNrIM~cynnksiep^|057uP0euzc_ zY~v6WWT+%uY3xHQgJi6AA~66Gsm$_H@+@5gA2YchPB@dw;DaF4Dg)(iM>Dqz;J^SE zGfrcb>-@fsVhBqaFr`4FyeAH;**gKg7bhSh!iUB39pAtgJcDPkkm|CdG6vIw0t1Bv zq$;6|z_g%1FmoW|qazAH=A{>}U{OH{L%D@{1tkQghs6{YeJc*Ok7M-Sy2XY`q9XPN z7H1hAYmD+R)w^LnjBWKPmXPWR-it0DZ{7VkWkC)1YOP(z^phtGq^fY z!P5;gMX1SY4-=`<)$03(I^iS8qONMq!Z;&i=@`6Y3Bo#tbvPIt z$!aW_6R>Kbd_`t~)3zp)W3->ZI7&fciX|>sWf*-*@x^}DlVnZKO_x036v!EEYUS$X zkKdQKU*Em(=WX!w&AXSi-Q}Gn9lO?SHku>#=hEjx0ZrwejF@Q9Zd2lH17tH#wn?29 zxF`(lw(AnxM;+J3e(2fAYx@Luy&ejwojMII{r6_2QmcL4dGUGs)vr%Cs_Ly$QP0zA xhAo#m;88mu9c23+ZrhlkmfeAXQbOHs$7`FK)#~#vKYs82d;jhFLi1qh{{aHTR$Bl7 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro b/warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro new file mode 100644 index 0000000000000000000000000000000000000000..64d5745ebd58eacc5910114deb145930f155e9ed GIT binary patch literal 1903 zcmb7F&ui2`6i#a?J$UdS^&%2O@gU7^er}Rp6;Tib#fwG4?Br!Pn#{z^Y}chMdhAj3 zKM>TLC(-{vJbG3{Pa+6<_2^`Gvz<0=+Fo*)dEfWF_sx4Rx4I7&POmb8a@MC@Pohhf z;~2JUSyo^=uH!hiXRhU_0K#=CY^`J1mT&pC=R1Kf5T1E~!J`2X3_2NPT__fv^D!+l z#PuyGSVGC7wTiY1+G4m58G3teTjQe~v<+1&0MjDU)>SP|AdQ$f+uYU&$|koNB1sI4 zhdJW?d639egt>+xP!$j3MM8RINJMc-e3N3tg|vG2_6>EI@Vz zJlP;Kv{~jeTMqLow2J1wxQrl1gOrPOOZ7cNozfu`VOO+fZJbSM=}5dI4oo|Ob&%(W zvPw(l7_6mGwIU1G@U`*y2g5C@U+kpZ<8Z^Y!nyD~pPrxV*k(=~P5Ll^=dcYJXoX)Z7S{Jr!1&&yZe&&)OVm;N7MC{}p@ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2492927377825459959-0-406b5ff2-453b-431e-9cde-884ceff64876.avro b/warehouse/test_ns.db/target/metadata/snap-2492927377825459959-0-406b5ff2-453b-431e-9cde-884ceff64876.avro new file mode 100644 index 0000000000000000000000000000000000000000..79926b92fe31cdb39b2580e0cd05b68a6bb03b45 GIT binary patch literal 2021 zcmbVN&ui2`6yBCvd+;drBC-VW)amB;kDgUf1VQPkNSI_^y3r)FW@fuCWkCcH1u35F zKj2lQcn}4D{14(yP*0-LgGW!!>~6Mc)23F)Y36<3_ue<}y<81$PMw%%8Sbz)1Fom4ph7U1(ttkEM>!IuQCIv!awDOTC1TGrk)h(u@m(_kuL14pg}9kKC?+ ztrEDJaT<$U$M1CzgI&vj2?634J+WWS#y{YrI05E|v|BA-HB0!4XK*KGTs*d4$58g5 z!ayJaE=s5)C|gh=7&(yB-T?(@hbp5TP%wI>CI~1^0B6bFxs&(F)R;LGK&Tkrkw+3`QKuaCW)lCevz)?%wCelBg=WzZ7taX({=BxrG*uL5rs z$+k?@4y-8Bk!cwLG7Sxo7ZO0OYlaX-w&^-HO4UUv{r!BSF*mpUX5-u2jgOlbrW=jX zcT`PV4={L!flLPoG9%DYps9es(gO`_>>1*CtocJ|&dxr%|L)%JC%-ngr~X^iF(Obc s%R!DFxuRM}L$0kwNCU$qLOu#{P>9MxXJ%e(-Tm;(&3 zt;9|cENle-0l{AX0E_zvtaK*3*_*xG<<3G#HS@mjd+(d~UhWN_tX7xWv%*5I5flg3X-DZd+ zBVatr5g#vuM6x2xvn+wCc^EGevL{0@jV1A28Y3>GwMP%`Xp@AGwVj7rr4RaSQ#(N; z1+sU7imj-mRA{WAg+V-#IuXkujzng4DRq{Pf=>uvg~ya|VeoN~9khXJx1+h+4X~$x zn;B<`$aV2vr!n}g3LzKEbkr7KU~U>k3*3R1cdeEc=!nZy!tPy;>-OkCrO`Ot(JUDF~paosh!)e zUjMwm{q6AUi|qHiD;Ga@zhC&YCS$iuvu94k&t*(Y2BvV2M}+n8(B!Dt18&yInoiuu z?l5qT&>IAXi`>`<5d?;hEYC&Q!Eu0%%<4($U)!BdxBKSppZ8yWy!^bg-s#N0|D$PF Pnun{Jm1I}Q9xwebkfT_A literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro b/warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro new file mode 100644 index 0000000000000000000000000000000000000000..cb83490a5ec52210a5dfe559628629efe5df3146 GIT binary patch literal 2021 zcmbVN&ui2`6yBCvdhjUqBC>?ysk52<+9W+oK`01{r=^71%u6?#WY)}Vw@cllM^7HS zR1bnT@#IOos30hacvBD&Jt$rT{{fxsZnkODrmZ2T%=^CYy>H%ox!k@!b9#{{q{}-@ zppahBEmOBmLz9ndIF4?+&Qh18kO))^b1=5BV>za7=(dhs2ixa4-0VT(14?>v8`4?x zT)@(p2($?)4_Pv+FOtoaHMrk_m^?YVt%yMvl$E-Yg3nT_EZ3DFgotwat+lNrBp#i{ zBnboH!s`;znFh&ZWtfGrMCCkOq+zm=g;3^a#B0naLQ2=KUAa{6hoVzoy;>jXgECyM zAD|IIvT=ZlR#1tU)YyZT28l4!@pu<}PiB^vl4q$G@L?kM!hMzqY4CoKW>qF|bWowqkSt~4^0`EWo zSB_xqb-RbM7M9F0STmt~MW%8YE5qRt+Baa}#UKbJf|RT(7=1$V>3+^8Ng19QEqR|& z@E0;uYkz*PKW=?n6D{KfUb>^+o_}`g=}Z>8qN)wGFMlo_*5jZ`_k@@525qZ?q#GdA zJXzIjnt?_zAfH+qGMjoEwM}0~js~t4=(b}TI*M^4lm2gAKd@?`qA6(_rA>hwlXjbUl-1CQb-|u|-`|j3MbHCsJ0L5v0zW@LL literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro b/warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro new file mode 100644 index 0000000000000000000000000000000000000000..33aae027c3e98b14abb94b35c2840763fd427d87 GIT binary patch literal 1785 zcmb7FF>ljA6m}z2F)*USfRJS&raC^yv7L0TkdTm&Kui@fXZxiw*mvgc+z?gSnVFbb z7?3itvoJHjiWvI`Dlv1H#ObAO-LiPNd*AoH_uYHXPvh5Hw{|$eB_C5^XQ|cmgCO*W zL*$_W@{#L5C@}*fY%S-wcF9s?FQJ_z|D+{Oy;_J zuge&MRtB7=kVbV+TvW4n4g4s}fkz3gn&qRuhHrQV?=mjrV@GWax(5x06mk%%9YuRCz8V&IT4UhNlW6 zJuK92SPkPq9%TXwHNj`m?c=SwA7_NiHe9GIcRwm1brn`k^HN@>Fv3+XWV%XyW2kdF0T#uwH5=pXYD-7soeJRA6|7ZRUdpO1nQO2r zp?XC!9}TS8>mzo_??X zmOp-dcy;opbF%eyOU3RvPS=^ppUaq5931JMhzRedu_G`$1mV=lI$^)>$0HQlNz(J| wzUN{ahhE=y-C;b8v7bN?*ahk;>63lK*xsJM|MvOx)5n93Vcakb`8}V-Kfj(fmH+?% literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro b/warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro new file mode 100644 index 0000000000000000000000000000000000000000..d45ee4020090f0dcecc781c9240fbd2c7325c00e GIT binary patch literal 1773 zcmb7FL2DC16i$N&1&>lMBFiFz(9Q0q$tLMpL_rXgo{BD$otI|n?#wzf+ZamzfaijD zPo4z9U!X_Ny?IpVN&kQc-z3>|+HJS>I`h8od+(d~-aH%bt=(K#oaAaOw8!ZEb`%7? zLAxLI!hWaM4f>nWy_`tk+Oxv0^CC^}DtJ=>Pr&0vHU!xW?~H`Zi1zkDDkgZdy-xO} zXsKij8ToYkz}3?n+%3nIkO)cL4aXfZNU6fJodcJXY<`;&&PJegoD)4>1z~m=)(rwg zl{`vI#&=B!6^S8!DiWem+Sz{o#F;QXb{@TO=KA2yHk@-bQsBGisDzeEDp2DT8XeKh z=)@|AB*x6jQpzmb7M^i^8lDKQ(b2P@uvZ5v-HsP-SHN8hT+KLRnCtSrE@Fsk83?67 zhN0fVvVs}{+rw%KtG-od+b6JkZ^t#`jS(jUOQa-IgFz27vkaEQ*vBKL zAu|(v5?w#uruzxw3fpk5ve*G7|M+_2*Sinf-w*#j_<8thuX()o zWzEEH`F_iv;BPV(g#sVl(=k^qI`lP>yP*9tS)WoefUrxwPOuqzonF}WhNGzOMS~~| mpdXQ_9e7#LGSbHn8;xf3_}kI%k4JyrKW;V}*YKcGN#h?O^D_4U literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro b/warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro new file mode 100644 index 0000000000000000000000000000000000000000..d6bf4ffa3c809a971057e9773ac8ffa0341445c8 GIT binary patch literal 1773 zcmb7FJ&)5s5KSTq3PgpDD-g0Qgg`pSb{yY1S5Y7&1QHS-)d^W^?<85Ucg^nlLUc+C z6%r-Cf{GHvpP-TTTnG_br=4$~d-nEPF^G!$O@M9N84*^V=LzG6W&x0?F|zNM)zOLeEpE zibqIJ=tzfPmTKb1EJadDTQ8nIv?fH3tq0Gnxjxvl9czO|26VJR#Wz$krZm>j$`MJl zPAm#YW0hG|N|j~Lz!NIh;VGk1IeHr8?=^ucx8sG|HE?Kv>lx=n<+^;Yvlw<884$*R z0v#ERo{x!?c*7}cVO%BRuLxyi#SJ9jZq%vdKoN-F;YiF zLarzHB)WOLb@wAeg=)jO%3=ppj02+y62>w>v_3owxVlln^9`~@`#PWHa#&SiS2Qox zC59m?GpW+m>T5%tu?g@vQLR}UXWv*l2JcjYu+L#Fi{eaHW64~ARSQ)slB>OJ&t~Un zzlLd?gG3lfRI|!3`ai{2`&mztJ-aqv@+rfR&i{qh)!+ktzJ2%4_UPT6dq2K??Hsqi zv~}#h>vr9V`c1~H6yPfNWK2aDC$2<%1k$aNbq6Twg+bDD`eBNkeiDTa8brwP6Tsjh lKL{gma<8kUkMFlyozAD9zrO!||MBmmPOEiE9kgm``~zydEgb*= literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro b/warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro new file mode 100644 index 0000000000000000000000000000000000000000..187513420b2319ae2ed0c9698e8ea77d31329720 GIT binary patch literal 1904 zcmb7F&ui2`6yB|+D0uK7m4e6;#8b07*(956&msu^07X0$36q(ZZZw&Rnc1#O*}uTQ z!JFVoPsOV@k0Sm!2r8b$ga3dxC%c>Nv}w~8atN9CecyZEy!Uc9eB3<0Dj3ehfJ-x` z*Sfyl^ZQocc2Unpj^+E^s~OILNmCEAT~~!6&+|R6+w(2U?p+b^bO?-q$%bhN`I3D( z;(3atxed99Ia}(k;_aNb1sOn!-(1=;5EV;PNx0J3hgJs3xX=ki1|(3Km8Fzfb~Sv=UcG`v1vL!y7M2y%5a=FOQ&{w^IM_Z&>%C2b4Ubp3c2-H&4?R2xoJW;>u{>}yRBa-INY)!~`J z)rkt8Zjd?JD)N~xheZ`eN%Ke@Qi$*{kt*Fnecwc2gUAx^3|2};6?n3k2%jJ(}cAG`)MyJ#6jMUF%z=r}l$~_q{(WYTX;(QBar%bj( zP|qih7nxzy1=EQvqTaA=`r!AWN0Dt?mYJe|_N7LMNRg0;s1jtYz2lsTy=%OCIZn~_2=OCm zX($js0SQEb2qiRh1R5#|I@WjR%O*~oL~`Yw_ukCgnb`;7lZETcjG&zLDc2IbV)~9{ zxK__F9o=+H-R-U9r~tw>De8`8*}Cmoj-y+yXE?sE>$e#^9RP_yBZDl2V$r%4(;`D$ z+k=87lq{OdXs@6h7WE-RZ*K0Ze3XN_rlnN7n_a;$gf<$W9r8X;cz#&f0jK0H&nI1#~< z4KhO;Wj?dzFt0+bXda703^5v{T%=p79~q z{@$>jzy5sx!=|#k-Trdr-9j0=*6nt>L-Dxu>3~63xW@y+IymfdRO|rnR>^i_aCF;1 zuI7mcN3&h*X{cu-4aDn%!pJubGuAS_Q%WD+ZMBw`KD~c&@Z-Al2AxlFzinYiKMG~mz8GcXJY`0&1eEag?-?#7EbIp^b{|C8XS)Bj? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro b/warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro new file mode 100644 index 0000000000000000000000000000000000000000..16ca41338da431ee874ce00ad8c7d5b0b36ee865 GIT binary patch literal 1773 zcmb7FO>fgc5KSTu95|wKLCCTYr#k*f9Xl1=5E2pssfber)_Ql+80=lMyKV?2zX2{> z_z!SGoDdQxZu|?RA|!qTyGfjG>((tt@6LN~=IzY*QTn`lWkXO@iV2fWMs5Y8D2Suc za5M-;zBh;mQFyaN9H?}Ru*Ne z6DZK9YX`QRm0)jMHV4c&u{SMyoIy^6I@>+4DJmAX1)|v)giJ~#C+i@UoeB#*PoZia zA$dmkbO>Qs6F*=WNhNJP*|~2`GdZ#DJ+>D5V9z(LQ#5j*d#9-QhDy$q#xb;VL}pqi z5hdV6WmcC`XBimyjLPG1%&1h3o&@<(8>n_WS-RZ-hX%NragnK9SMPNe!?2YB5dtKs zo8YvX2N%GPvm8W%S=B7x+cNMC&)`)iqP7`GHpmL?>wH$rVO@n?(>zs| z1jeY!rAk+;9~SiTipk9XO{)VndmWT z#pH6+?|2>ccz(0xG;ObmoJ$$zK&7RJwUN_yI(FMf2)VYSqWp^jHv2$BuxLN+0-tv; zM2x3cT3f(H%;5TU-UZ<`dSwL;~h#6<}s}O zEIX1_TQVnL&4r2;$y=ynjz-65KZIeBg2V(%T(U|t`jq0c{hUvdIXX99@*yJ-F6E}y zZa@F>?B$ay7Jv8p@rQdKuP%H)^L8$eU2Qb#je+`e>9M|mhH_5^RMbhgAu-)cHAVD0|_ D12tNj literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro b/warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro new file mode 100644 index 0000000000000000000000000000000000000000..05298e41a4fda99972a9924439ff2c4c152657d3 GIT binary patch literal 1788 zcmb7F&2G~`5OyO}ao~u`1%YKD#G#J=;xy?QA&`)esCufv+IT0;g1u{Y*9}pXLtlVr z;0ZW!;sLlLAtc_QhyxNroY_s{bQ8C3x%jX<-}lXYJ2QSZc(rk3OHfpZ5tA;#_ai^_ z<3N8paTx4`aU9$$5C}=c4kU)loIy*RaD9UHIIih3;LM8>0 zqh*jvR)xjBuTT|_ketv%9fDb^iJ!6*NhNLXKYwD6i5%IF_UxHHIMZ$W9E}X<;W;XS zp^`DBv4U0xNuqTUQ9zog%&JnVEJFiNs9c4oj7nwjIw;s_0#$A&bGK{Y*Z|iv&WXx( z@m?1(bQ>8E#(J$H3P-gSSLT_1H-hgXuwy0Ye5-mC!_B zT2LdHJHXlaf&v2b(d$pJte}CR*}|%V1_IN=dJ43Qi4YEK7 zI-kXISXSXwG%wU8h9N35snXTzD?^>JG4N!dTC+CJfw6Q9-iZX^T*6uw#f7ZKlDPt_ z7OGYxkNuuAonE5-8YW2&5@94!%__s_{}f;DXFW;I^yX~Irwl`SU7Kos-JhIBzrH;F z_VWFw2fy$BZJlm>+|aSRp4axq>gO_Ir2tR4Cle~#c;HFI4?%iWvR*gr_u@3hF7ngR z?I0h!{Z16Ps2`*|ad!}QqR7qtww6A9Xjz+^@BV!M{Nv>0=U&UQu347)uBY)25Hd8I literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro b/warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro new file mode 100644 index 0000000000000000000000000000000000000000..bfabd86bef326237cff7225577f6f2d8af6cd58a GIT binary patch literal 1904 zcmcIlJ&)5s5X~JaC@3gSM*%{Xg{aQ)N8-f38X+MeA@L!K16dn;oEYp~-|qTCbjly# zS3rZVqJjpAmYQDxlprC|LCdZa=Qihy?t<(p7wxgY*kpdo_ zqGBs5DG?egXkidfq)xzc2m_H>RZ5kmqu>+FSK%SSTo`;3WDlA^mD|DG?Hbrs!1au? zMC7`-uXPOlMg|l`5Cv6FoK|!99QZg%fdwHc>g8KK1z+Yc$mrEuoy;9d`dWEa)OVeo5x#rKT0qYZCI+zcR0 z<{Ye2s9KTKwLE<`J45?9OoI$KiV#ONs}!UEQGB_d&@njLc@elBBDFffICJix3I4NZ>d2)J1#Ya&bhhXBP! z?4zF16OS?Ue9P$iaSyowUg-6W%<4$#@3&g5cKg-Qm)9S@ef;xqv(=iv|3}j?t literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro b/warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro new file mode 100644 index 0000000000000000000000000000000000000000..a81b505861672286b95b64e9310d4b5a3894cc0c GIT binary patch literal 1903 zcmb7F&ui2`6yE-zhXV&6un? zsO#GZ`Ho|wP6ydmXD!1Vs5G^xJC^HuzGu63&*`eS)9a#J0$%4pBQR;6hQJq{n|;Pp zEX`fuB4%{aUd6kdwL~<46o0<4XUI_o#zxcN5HU`S^`_B}At6G2+uAcIPA8`+rg0yH z3^FVS^B|S03iA+BsFFuW9@Fh2gs`X}e#jy$m2~sjlLyUVECp-R3!PM;v*wet( zjMG@|6lfj}s6<#PVwS$kp%_&)`igq`K^&jzRaJ!ayJa zsY<9L&@HGCOda5Cct!!1e(BXKm{(B4P;X&bK@EZKVKs$$--?s%gS6h;GH9M8D&lBh zG3R(xV3dbxu^VQ?*j1lm328CGN741;U35Q=sZeb=QJL<5lCh^XLC9DFm{x~p3Rfp8 zc(OreXsgI)wjAbF7$wb1bx5F(^F*q23-x0|ov7 zJTS56gr?g=#0(+yOqaOC^TV(kb!;<5twQ?Oy+&hY<@cX|?+?EH{CZ`v(U?A$)pUHv u$Dn>^e#i4ox9cLahrH0VJ5hv)>v#@Wy5{ookMDo?KfFD7cXzINvh@E@g;TWv literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro b/warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro new file mode 100644 index 0000000000000000000000000000000000000000..5a3d9a966e339adda65f0d5244243443cdbc1ef2 GIT binary patch literal 1905 zcmb7F&ui2`6yB~qc<`pwi%1CKsoDHalb(wp2!d7+iiAn#r5jCVVrJ5HDSHr4{uTNc z=s^!2JPKX}!K=4k6ovi)3gTpUvz<0=+Fk<5yzl$o`{uouyV2vNODl|^f(9mh5-%Qgcq2u$-jgQpdc7&KDl5tM!FT0+Yl zacu`mmQvEUR?tpK2P_^!j^13|Rr$C8bzMY%t zqJ%C2*@70q%z=`QPAI^XFTH&QiwZgzx-D!f=pc|iY^Sj3TXwX445|0FR8nP`h&UKn zRF-I5V}yr!y&LAk=!;J&hrFKPgXr$@uDc(lgo!qss?2sk!x%_S5K)=|BJJUs!NrLP zo^Fsi+N|@LFNZ}HYD4o#9AZdNm2r`7t$t{zGdhAYj6`d;#@UpXj>J3Wz|>P%tD-oO zRa!DIHb zez!aD2E$YT!T>y>2p+yz}Z~HeB#xo?H1K@%%+75Qn0cRZ% z&mcn|Zyefkk%K+4Yz{Hw*xs}3gg}agI-4Ha6lLXYhA2ru$S_B8wh2<%sj$B1DOANH zBqwxVhhP?K;zuk-Qb}9So;vmk%i1ghK)S8mt9eFI$2I3p_8^?Pk&7&I~aoKn2GfHY1BMi&DxrzMw4g??a)7h>mI8e9 z(d$pJsi1+O*}|%V1_IN=dJ3Dq6=&PWGkR}o>+x0*Cj*N(M+=Qn9%gzOtcP)=j);Uz zPw+`}^LXp-M}!L1hNa4C2ULt>qX{C$Qb4pmJS(`mQNiT~S)+ZO&w4p*s<11X7wQs2 zf{IkCbhY}ap-$Nxco?bHtc|m8EFFV)Awk#|uoii~mDN}>mtfUG)r#bOZ)7i*7ihnN zMVNs^7)eyK$}svr#W(v|Pm;a7UM~5VVTj9rp;f#;zWe?7gFAlvdph}X?^pY1=hKdk zow#ntovYtu#tH$ha!-a-ba3QK#P>nERkCi>>kfM0kDM{;kDOkR1P&UF22SJ+$B7@u k35u|jc^xf%bidVVx8MEz_UG^CuV0?GTdgbVpjAubA8SK0<^TWy literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro b/warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro new file mode 100644 index 0000000000000000000000000000000000000000..c91923c07b385cec4327f04c94a59bdff0663849 GIT binary patch literal 1904 zcmb7Fzl+pB6y7_J!@^4B6cGtQtS*}$lVr13iy#PsVj+jbN%C?VO=eU`Hh`Eqf?%uwk3==+3uHR86`k;;BsAhBwe4M1f{E(K-@(o+UH#~zU3FG3i{Wb>Kg9bwc zDR5Cj8-Z*=gJ9}FL5GJFV9Jl)e1dreEe!1z))ll6$R0LRnD;H)-#&)ad+RDG(^N$4 z4lFJTJgP9l!>rm3vtjhaQNkgsCU`fxeY~sg#|dGg4JRto9Z)m&r6vd{O#zeU@J!+2 zMg&hb$P8^(`OKEXyb86Zxi2mwh;f;6k#42FXQ)#;gu)L*Yc|H&l$MUfJL169BUsBk zKa^EkGRI)8gz6PpIEJT=$46*Cf{~vA#}VeZVU=X`3B~98xtb((d~UMjLmEMNx-zx% z;=yb8*O#Y1-d}k3k(~W=ap~u&&kI%Tnyz>Cq4>EBXvshq?s1>6ZWQPo7aPF!I$7N{ z17x5c(y-UZnr&lK3qk-b@*EpOfDjG?Ei<~6^v<@J$Qud}-4_>`{ z6b13(-yr@GqV(X+i+FOfyV*{gHq}cGGw=Jp_r7`W<$m&H?eYdEsN`cRj0|tOPUL%T zWCgD4+e6Q?!_5*gAi_|hZu+6)1$GeFmK)f^$nk9F28U-AkQ5A36$!AOdwoP%frPOS zjAxYeoDH4k!!A(ccD!)A1@;wiJL4jg zxh~)9EQX+y0bvX{ZhGRhn%#fEkFp$ioYJaYzU3+SmS^xh<3c`m+{K`J&|<)lgODY3 z5vUfl2o?@7Iys{NTYdEQ6RaxeVCc56si1>E^{}17s&Dzp_OX=S+to>x=Q84GU=d?z zT4SV#MZFuA!x+k=Oh8dj@KJR4c-P&JGQwpW&Q%sWpka)ZCP*mF0g?9bEa37+2G2Lh z5^dM{ESJNo3caCuEH5#PP?ZarZmoW7sB=027ALYbTjOjiOGn|I3gG%VtW{Z_$*L@w ze_*YJnia`>E7WJRbF`nrG%i3Oj09>~r5OF6;;a2!Pm(^nGGFp3#gJaCP1W$u*SEhu z?7aH@`NysA*S`Gh9j<*`t7ErKb6`&7&t*(24yJTZ#DouUVhY6eK$uOkW@vdHI5;u< z$d3#!b%sU=k!^qvI0(WZ!bxZp)}WR?ysc^L>n}dNeE;Xox7U|?ns!0cljA6i!P921ZmCge(ieQpe{wcAU-?5)u*;2r(37oqf-Z!M+Q=b3;^xjg1+J zjbFfkI`In_7|IHNfQg-rJ10&rb?cS^$)+z=sstK?Maw*bVzYlUVMUIG zbpQoV8Qtt};e&$pcszz2f4XsKirECr9m6ajW(6^~4Kqn0BV3;C9hwy9)oqSxngAE! z1dH)1NG2=8JcJ~w=Ha49>AngfELOx1Sd4{~Hl94XZ%k7$Htsz(Dt$2L+r}9h8PNSR zR2)quV^U)cEe#T>(h2zl;!tK*mr`fh*YGJ7>+qOSAq_qaa)xc7+U;=Rb_48b;AX~o zDsx@F*Le(nD+4A3NLcs8Sv9+tz$a-2Jd9b{EFTRte8V$%opK=`J8WanJ!mix$Uw*v z+6Z(D8Uzam3N}5b07rlH<`b+cXklo#u&$tmK=-hj!m4li>GnZd@9mki%rY5qGO)NP z@JwN(hq>Af%V7-UQ7Rx;6MPcgKHjSPaZ0&t!%Ahb18T;R)&vn_8DQERo&{Xq$lz*& zEYXh2XSp0!RhTu+b9qT1!DS|7x=MX*s53T&B8+5fHpbb}mX5|d6Tr<2Sj)-eTvlz# zT!K{z)hn{_P+-pI7ihnPS(t;s1Pk1-N;CQ&#aH`TO_DjkUM=~U5s0rUQ#;2;cR%#s ze>0P(Z=Ag^M7}8yPZzA`|<1Nci;c~`1x$J(^-7~N7Jb^f3Is+ Kl3gi#y7a%%+*mvS literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro b/warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro new file mode 100644 index 0000000000000000000000000000000000000000..040300d4c59716e370b964ec59b17c4719abec06 GIT binary patch literal 1904 zcmb7F&ui2`6yDZSJQO@=>qR645rk$pzc=Yw1VIoKy_6DWCokR9WF}@N-7aOJh<|{8 zffqg7OOGP{34#YNdQdMSc=0cAvb)*NHf>rVmt@}eeeZqq-pj+@&cezXBPe5i%C$JW zZCS3Z`-X1YhHV;M&$8@W8OnihZ7$3+eM=W%u4(JKW7tmjCWGe%5DXeA(jMfC){Thf zDdO5LIN@<9STB%aD-blK26|hzn`u$)o$qAm)AL-eYB~59(-LIYlD@ zvVDq*A*m!(Xw0F7K|C&X0+s;|L}pbfRhFiNj|rcLV@kL%_$0{aHi0U)gNfTUup@!% z8K<$xb$VZCF}RHkC=4MCs-8HlX6pj@C{BO{m=^W&bz8#MJcGTMadFu}6NBtQjUj{t zxG15CK(?SpFmWKKgEI;+Vys;4|<|CYvXK4OGn}za$xE?tVNcc z$to?G3$T_#)r!m=-BU-SbF`nqFi3%;5OGwqN;3LC#b^7uoFsL0ZM@_$4FO*+O>Mo} zd%b$)>B`~v)jxOMTs`=<^y$*kLK(Z!>9jio@pI|ZfcP;LDGnA3h&$Ew);d=YKT~ w8~YY`u7-8f)NCKyS`WLCW;w2DV9(Z(?#P-;OD|r2{rmgl(c7Jw=E>6k0S?DiOaK4? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro b/warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro new file mode 100644 index 0000000000000000000000000000000000000000..fbe72777c1453a24e79aa11a55213252e041b2ce GIT binary patch literal 1904 zcmcIl&ui2`6yDZ7^x#qIL6H#DQ?vP<-R)TfK@h5*iiSz%r5jCV*36{qQuZSL0Uq_{ z#hWOIe@OoYZzAYX5D}coZnm>co7RJng^+pQ_r3ScdvEVWPu4DOGJ?izM7fdTo33XK zok0E^f8fhk`}!CaK)9iX1w+@h`@{ag_N~C{J3-)HWALm55`#g?Jc44~xth=-N8H$l zf~AzKJDX^~pgk6kAV(iAALx8K27O!83y5if^({?LQphk9-*yjlg7WG#MmniSN=FaUrce+_|GoQa;jd-`6UA&}UoP2^txYy%SVy zMJ1y`V+Ab?;;GaL*%;zbWLB3_XXz;Tl<-w}ObHhT9|zg}Hc;($ICr}N_7!k5<2)6) zF7E3zhM<)JVGKB|d*Y;;-E-iRGy@jKv}~4dc?!Pa89YxJ7ndEjF{mCi7%*hOMG0*L zss#;#xdR2AoKk?TUV8HimKC%xv|CtL&_bYk*i2#Bx9oWPSW55h>ZHsv5pguIs3_1> zVuXje+zpFi9EeXThg?qZQFQxw%kD=hVWJHymH7^+8HY*}M3iQLNOO4RaB(7ns|~V1 z+cKZUa#&WO*EEmBA%+B%85ikF^_8K{=md%|60O-7XIoi13h$Hy)6ZZn$Kz93l_hfy zRw-1k$ilY<`fPTF_EVUKIdFs#M-8hKqyJHSxu4}E>9b4Kl8-5dcte`nx$^qY`xiGh zetvuVAo=oc=U4ae!sj&^yKS01b0Yp+MzmyL3io(OSPw@gN5vj+vrg9Z5*G&%ij97N z1Hv^^XrLl+sj)sxa+Z*@A|?x*i>UjF|0>hSS;r!#;4kEUH|{#ezl LB)dZPcljA6m}wz7#LBz0J1E^RL6Flv`J@#goK0uF;!rleb32(edpet8=@*Rh>1Ue z#Do~w*!crYtW5m}Fmji~>7`EGB5!x^`@Z+Sd++&4{JM2>M^IFVF_SLA_rqS-?+^XJ z-ye4U;9wXA;k^QJpwczMZqPEz?g}_AfhOS6GLM0`gWDHlC^%>WRc=QMw`<_O0j_796P4@oy|yvzH!>iM0Y_C6 zY^piD0zM@fh$vxYy?noC;A@`2TOy=-?5K&s^q|IoAp@yOXd*Bzs1Yn2;B2y`fWUn8 z`V*`wXkcizu&SVe!1S=5!m4k@#rE-y-aB&ic&mu>fkm97sm3S|bG;0f!#Ge!L_)47 z_&mCKymj{@LWOF>xyoV(RE$HT31Y@FK(szQ3%I&b!SfBWL&Nk*PW!C&t)*iR zJ+I?U)Zb*xN&%j7PexR9aO_FMMa2>51>LwG>C={3Vr}chz8bo=gVH4I7#DTciww5Z)e7L!p932R~bP$>rt*Ic)e>m zdRO;!!}M&|(p}$O&rtz{t8$cKJDzL%rtkQ^h_Q8hjloVINCYbBXCV}e*43C68RF_L z6fB`+(OgBl1?{k?2N~MGyr=MC4$5X*DIlT+RyNv7oIr}1INRD&2+GE{86rsxj0ZX5 zy;+b*RfO5PE>IN@<3&QY%MeVXlK3`_5Es(z`*&})2MO=BZ`^B-^+6eJw2#n8fovb4 zVn`|}6&iDB;SWzroq**K1tPPmlqyS8!Y72!!y`(#@b@staGOAt+rh-`8rYV=^^CJb zIb;5k?%c zs^>Y8YPnvldLfvqC;n9qLY9erN6qw3DgE<$tF^N7_xsm>A3nbNbYZd8T57e#_pF-O vc1_cWJvG!_q3Qdk8k$z5VzZ0E>_(OgbDGP`FTU*m`TgtV>!q3I;nM#DPb5`i literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro b/warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro new file mode 100644 index 0000000000000000000000000000000000000000..7a79f5b88b4b817b69f8172235aa3d6bfa0bcd6c GIT binary patch literal 1773 zcmb7FF>ljA6ix#J0}B!=3frY&@zks_WPOo+9mi6v^-}l~k@4b7LyxF?BEhs9*m`R7E4+q21z>mVn z3!;%14#Ft#9+Zd!m5vd1gI0NdU%j^xD z0)4(Sv*ok|d(W~tV8&B>$Feg5c`DS|{>-MRSlkwfk_?25OC-nZAeEg83p`JuY91ju zp$9r7WmpqGWf(~%ZM}T{#F`K}wjRH*7W!b%cdQK>InaX*D!!qTGo^6`tsId=>%^i2 z9IMRgQtB-G2A)uP7LFN}%F**6f7Ax5-Hw-TH^6}bZf0B%mFw!gE@IeiWk6{PXxD$Sof_s-#(tvd;7K?ZxwMmu!wUs)fnYrp_jpG7(;bLBoumr zPovw%TX#PqRH!yws4RCt%@`R?kT8}5qRru1!qtrmUTlyR+SmE4mczOVyQX=iE>p-* zl}nYbRzEY;Ihz2F6V;lHarTX+WAIKT2>TM&sw^*LHI~d3ShY~SB6;A2_I!Sc_FI_7 z1xS=4i5gZJM*pYydOzz)vgfxKOCGZn@Zw+S{Bmczzpu@1egAO$=jiU=QTJr)>z0n) zbKRahQNPKURRUb)o{XvJrHLyMKLF|0$+}6<4*_T3cwUq_!$FWZ5%Q4}-~@-m-2g^7 iaSE@erB5DpI^FJ%Z$FPezW?;)b+^;Gt`0hlH2wic*)JRb literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro b/warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro new file mode 100644 index 0000000000000000000000000000000000000000..1195672483e3ce167452ece4e8beb58d491a6bc8 GIT binary patch literal 1904 zcmb7F&ui2`6yDZS_Mj)VUPP84o|@gs&&?E%A_#(@2ttuKN#1s&$xND=?Yfku|A3xF z@DES~5z&9ZqX+Tk#hVxP=0T6*WOuWjHf`Eoa+rDF_r3ScdoQ8%0RO!h-lF3yF}@t-H5xw1%D*b5IC71H4SAfsCcD&6*{ZdbsL z0;-H$XW8iyn0^ASTpjtk%6@0}rcpP&fAKR~EP(7$H zM38`xCDak97E}nP4&-cjNCAfW=+!5fS5U)HZ(&(M4T0)mHHCTK^8M|Dl-^s{=padC z#O}b7JSU?9BRx!u-7p(QPaeer(qe*lqwB}J=zbDYF57UTGTi|sBUYLqU@QSbtHU#e z%NrRy*&s8tQRFjQ4)ZFslIFg=jG#vbiIC|Q>U)MdVMECMK(=OOoDF5^D7+&9Tswkw zkY$ImDof@Vtc6gyB6A0M+IW0~_9GbiDF_k~K`K@$MxRi8zMqRp(#Gc|OFm=~gw4X# z#=XDap6`S^AFiJN-u!pw>Di?(r`|6Vv1^@9yEBwOmp&VC=t%d3PkB2EI)daIAUb8T z9TH%Z1SZx4$Lr~~WqG=1n4ylaYucEY9>z#dQM-`-ajns4Hb1_2^6BlLU!NZ=HX2Kf zhWwsX)Aa1XG`p5=yI!E%p^J3lhPIBe;~K>3p{R>h&E@5HFJFKC{qxx?Yp%J!^#4%X BRj~j7 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro b/warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro new file mode 100644 index 0000000000000000000000000000000000000000..b5c326f29acb36e5d88ef43a3650df32cc37d309 GIT binary patch literal 1773 zcmb7FO>fgc5KS!(95|vPA%rXoajN651SdUK2nh)Z3B;*F*4jHsmfE{!cij+G;SW^& z6;5zN`~glJkopsPg$p-eH;L12ox0_^JMX=jw==WP(>GhUwgp9{m@w%Q{4nZ=gDB`l zK^P69co_Jh|DZ%1sC136o3zUF`vTrpKr?V@RiwbJ;NFPw0!jA}xFC#L;Wj$ttShn! z6zJofBS+3kaCU8nL&i9Ec5G)vAjd+T?H@T56^q*fQ8EG{lM>0vI!I-w!ur0iP&JQ` zoY1ij!7S6n&sc_}lD1#Hcxq3HoY+rZ+6#Sf<~#NVjU4EBgGykix(h{|>KUY9XEYGpte15WBD z*i>_L4g84YAd-w#&GP-8fp2&Q?}(7g>?lj1g3}06xMw!F1C+v^xnRs$6H054J_gu%``@NSmxB~pk^EzO^`B{1ES60S;Ezg3SMlG6*|!Qtd_&N3a6%dtu8T) zP?bxSu2w%c)H$01Pg2#Ijd2c)rDO2UBnamU)~YNoWi^(}HCVM!y&`$vA2{>*71{?d zOA3$(BZ(ST8Aku7_;3vU7UIn@i9oRPSzXtdwm?H0~crU$n7CO?jVhQx0i)+7{@6Z irh!}dT`hh3xYMz$lRtk?j=vrMMpmbDLmhM)Y5W7|+%Yr& literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro b/warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro new file mode 100644 index 0000000000000000000000000000000000000000..ee4b2cd5f27029f1c2631e01f7ba57d839341a32 GIT binary patch literal 1773 zcmb7F&2G~`5KbZv95^9VE(lo`;#9{!i9^zJg@l9z0&%L4wf2sa1$)=*t{b8%Hx3lR z1JD=XfW!gy33w8Yy&yR70PH4lx~)^UTzBXDzL{@lW}n2b+BdcYMTM9!=@5Ls7xsFg z7lc7L7*-)VHUX`DeTM-M& z=A+l2U|m52L$ifd1q}qIhxHWJeJjqlk7xAWo~_4QMVt;S;vCI1MtPX)Ww08?p*kWG zay`MP(aqznyB`rMR2wc-mOG$g92rdzGnN6O_2F5<)r|^XY>*Y&*ZHiL!@3H)qIsz< zF{G%>q)Jz-pBd_mO@T+TYR%d>`^M5ScxMuXeF6c@4@OXdo!TBur)JoJY4e13`c zYnVkjNQ99@HLDDx|5JRupYoZRbb>66`7tJ69D{O;qgzdsJ+POEiI9kgm``~y{{G0Xq} literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro b/warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro new file mode 100644 index 0000000000000000000000000000000000000000..82935055d07c42c5255a26c21f6386463c6c6919 GIT binary patch literal 1905 zcmb7F&ui2`6yDZSJb09P5eY#(HJi!LO?ng&1VvE1v`CmFFWqP|v&~GpE@i>1|AA-m zB8n)82ao*|JnP9G#DfRLgEuF;o9(n|(-v}?dEfWF_sx4R_rk{u7giX-1J<;^P}dZ-fQS~cx~iy23R%p=*~X4aa6Y-sF-a3( zJQ!f!p9hI#MVNz-K-D~q7b)4SLSh+HRbV{ls;a2!J%)ID)j&DJUKNtyu*B3d@fN4A7-cm_{X#>Ha?Z49yp4Tcyp z;G%>!0@;EF!PJ3*4v#6okRQGI1oH}77}_nYD`+8*J#3~h?^|}beUQ|98!9QYOhoJt zEG`N>sxZRCyxI-3Vf4gN$|0{Nct5&*ysPfVDPf`wCo0n&P&4{c6NHpzfJt+Brf_j1 zf+rhfhBm5vX3Jq-g<8`*5|=R~xXidnw^Bba)EON@5rm>O8{=$9OGn}zabW5RtmR;E zEUUC+PQh9U)hn`akf)BvCul!`QIG@2G3K~om1Oi8#pnCEnk036akAti8bfrxGPSdQ zZT;`7U+=fycHHR3-res@U(S78sAAW2y{iw!&!taG2D)&M2ZVLwQ0KVV1g_V~>XvKT zfWXuoAG?~}GZW3Xl2G$}%fd!tA`~WCj=GifkDHy&^77}`ySp#mJbxK3b~@AVteS3Y zIi77en(afR*|v){Y`TUPCW#Rt+v}NDSZn?inoCPxpMCnh_wU<>KMQlw!?phh9X?l^ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro b/warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro new file mode 100644 index 0000000000000000000000000000000000000000..a7372ac88cfd5efb03776072dc72edb4b06d31d8 GIT binary patch literal 1773 zcmb7Fzl#$=6i$MLg{7Q@BFiFHx7i=rjmcFOav%tTA_%7}vokNr>h8=sGkY-}`5SD+ z?*0Wq@t+X15evc6<|Ffg+DWjcW3+;2( z6?g(U`f%;Qma_uv9n0o`87KC(Wsg$Gh)`#H2R23d;xf#hTzq_R_Ck>@E? z#Umt7=~#ylhBfg6hLKd#){{r~t!XMJ*6w3#p%3lx>%%60W#XEF2}84w{r z;;IQwtGRap{3y*p#F&-!^1aZ&*F1yQsgUZi<0b~vgBk;Y45TWdiNLg=MzC~%v*{TH z_~xV6pI}`<14FZgRRs+Mrib+u)_p5ZwvT7@-kz<;TSXiXEaDu^G)8%t>t(PS#(_FY zCFFX7kE5H%TX#Q7sZedWP+9JPig9Q(LBd!Dh}MT^30F5Nc(FlNXkX{ES`OY ze{Sp89oOx;Q}vrnSSi3&?#Y;nE=gR8_!y*HCF>3bxZm$bffMz-o)h8(IcP}w&VUTP n;V6o*-}ju{>uTwvd#zTd^Y!=7FF)SC|CDrEtxM{lRZHU^HT5x2 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro b/warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro new file mode 100644 index 0000000000000000000000000000000000000000..49273243cb31d0272024e42d0614382a6e22516e GIT binary patch literal 1904 zcmcIlF>ljA6i!P92E>HQf{6r@T>NFb&PS!dsKW3cbc-MML0Wo6;F zz{GE0L<~p>Q6x4P_z~PWaeAp!w+u+0?%wx(?|t{)^ONZ1#*HmbP{GGkSSh|g@crRv z#|eT_5cG#5*BuP+6^H>5mLBGgJa6E7LE!Yg{?KuQV0f3q>k>!|7Af-x*k=DuLRpT4 zbp(v3lx+65&=I3O9*-eM?{A-&Vp@Q?YnTjT%CNa@m`Ms5=JM>|#3U%MZgWJ^1h@zb zB*x1inXC-+9Y>;S9xhl)4pj)Iu_As_oMcua|q2A>DHK^v%cJDj`S0Q(xanQ@-V zTo>W|)hf@K9Q4DA-y6|@lO9yU{0_ANi(K91IV2PP@AOh%jyEMg2z z6-IiPtKF~|#*sWq1>|ai&!XGMTXjE5372hHsmymk&A6jAK}2Z=h%|?14wpAFxY{5K zw5#%2EQe(kW=-=#USdd4nF*P$QePSBj81@sk!;PzIJ?@?(Ril=1-qCu`|{~D+U#`Z-~Z8cE6qQvnw4Z% I%APO%FFRydSO5S3 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro b/warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro new file mode 100644 index 0000000000000000000000000000000000000000..61bdfbc0a0148b4663f9cabff325180d83cfe2c8 GIT binary patch literal 1773 zcmb7Fy>8S%5WYK6P*6~y&>&=4h=%z5cbD^p79k;!kU*&dSZnV%w_xu&yX#y|(LDeZ zCRX9 zVYn6g<8cs;{RbuDK&4}Z-K15X-xsi70ZqZ7RgnPi`S&u$3nZNb;DRvP3pUUJXMK@Q zpg`a59@%nMg1v3o98$)yy=mDQfgB5UwtHk#R4i@_L`eoh#wC)Ib&$$Vg$+GVp=ur> zIiY(x1hZ5VzhEhnO4{0a^~{@R+my|85np%`ktyTtvG2pmv zf{SVnuYu1<4kAuj)hyo|82E-~a7ctyj~%x$m>x73FytUr32g+X1r36w1Ds7SDZn=$ zz4-*|3R)Q2EvzeOAuv5`rm*f?alU;#qxW`gJ>DwfbYKzZXr?jB!$L2E)i6fth)5{( z1fNE?kGJlAM5s`0xKLT{fSPe^G(o~x4v02~X9-s~DtNI$R%l=6vsw=8D(sr(t-8dJ zp(>XuU9Em*sB<<29w(|b8{_O7OUK}yNf7oGtW{ZF%4#f`Yp`medPVY~7uoaq71|$Q z78f89MiMowGK~ID@%4VzlVs2DES7xAFr*7-S1r; zyY0GtcdCAq39AIS$~_rV(Z`7^5#Iyp*2%h2G78eI5IcT07&?O>@ti0P0>_I+Nic$N jFvOu#czrE>@}$%0_5K_m|N8m$?`P8MbZ)4FP9u$fMJ_C< literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro b/warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro new file mode 100644 index 0000000000000000000000000000000000000000..59d952527fa5021831814df3b45eaa79d92c3fa9 GIT binary patch literal 1788 zcmb7F&ui2`6y7dH6g*13h=d>>q}lx5q&?T#ih>&&F_NPF@$4Vq)vG7}06}nOce9-~ZCVe3P3C>y_ue<}y?va&*totWD4K{dlMcam!(?YC ziF_{#<0OpzDD?b06U2c^#|#@r>2MeXvG2!8kg8vie_Oz-8fXCyt*ab(Ke#nwyh74B z1TF}p{a_0nayAgf7%KGX=8-LD6R>wJn?u1kwzn;NM4-e%ecL;-DXJEy6{2JWLS_>r z$Lk=KtO|=gPoWwfAvvK3Is~&q6F*`Fl1kco{`8?WC30*%cxEm1!JcnhXK0i_56)2W z4V989jT2~PkR)0s6B8&hm043tlVxDw36&?|1*1|Kd>Z5@U7*J8Z0U9j92?+v#uZVy zuI}qRhG8cI!WeMY^u$>;hnK*QNC_ek2v;x-D!f=pZmXY^Sj9TXDL5JfrvaY+9G4iZ~uv#5tO2 zjPkJ3yJ0nqsrp1DRC>EqR;GIbj_64lr$zw0I=kp7+U&1V_Kq8DJYFT9%{h#9N{j4X+p5It3`GR36u4+?z*T%m4t-pWe z$=iF|KR$l=+yAxkWkbjAy6(W8sy~-8s|C2qJ(*E4z_}|CKLF`A$+~fn4AV3%oDueN xC(2{wq#+6&oaA2OgNKF?Ih8li(!cNbdYhYn-u(Rj{@v%Vq}S`KclDf3;~)BRE}j4Y literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro b/warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro new file mode 100644 index 0000000000000000000000000000000000000000..7ddfd5a42772cf14fafcf4141469541854cd6bfe GIT binary patch literal 1904 zcmcIlJ#W-N5WR#eQcy;rLCCTYRea~qJ3DoRgoFeFQANnwThHYj>|L|F&T)#aL3I2E zI;2ohCyLxKa_(_>T>`;ikuo0v+jQ@aDa(aT%H}Am;~k3ZH`Df1}@?P ziODKRCM&}N+m@)BhYOaHLlu%xtcV{|jD(anUOanbOj9v29zHiJeK6;{#w8jVki$z< z98D#oQezD*4HBu+iFpAymYLP1)LFV3J|$uujwun+;ENz<*aoWIju&n>z<~yCW}K%o z*X4U%#V}}PKuH2gT=&FfHG4O}kJAizjA_{{-}W_p!!vl3av>i(Ze!3rXfPy@fsiG% z5$F~)2o?@7I=!L*M}PF@6Rav|VQ9CouAqfL_pq75s&Dzl_OZ3zJ1|L^WisM?U=d?z zrZCdOT)rLx!oHDjbT!HCif5NQt20xoZ4aJ4~} zXh-F%1p>~mHOIHXLJfI9?8~hjI*OH9gTM;fScE_mPK(TtF~lr zz^a7m70CiSH0Secv|qt2&Ox9A3DmGkGx{IJSNmB_k~!b5mOQ2j;4Niphn{}=vA4Yq zAGV&Jem!_^b-&#@+fcE4{eG`Ml|PpWEjje1dm<*hmyG%Xu|p93I@!MCU}4*J zEkDA(HNu0jJFs%Qr=)-GcRJnf+jrmp{Q7eC@o2NtS$zLT)2TFnuWMG4 JT`7C9^uNs9Q~m$| literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro b/warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro new file mode 100644 index 0000000000000000000000000000000000000000..9ead079f0f82a83bb47abe7a47a23733740437b1 GIT binary patch literal 1773 zcmb7FL2DC16i$N&L61@|QkFpkp_|>!ZrY@$9z+xbLGe^%nasRx*6z-%Gqa7MBYN8XOe6>={DPXoq6B)z4y&~Z=Mg|Y~0?I3>R|5m7CHBVZT4{ z`(ZB{M3El^gD}{+Utj@DxmMUsR%Y3jgtsLy0xm1_A&7QxFX1A`$~^`lQ_kAmO?)hP zN0Jfb`19Qpq$UNRJqHOOTu`*_pd^KiN_}>4f*8(cw>f5M0#d~VR-7=yn6A}8K-LGJbvlS^Z`w`ol7(_V278e1eQw1wZ;lsJEBsf z6UzcftTU@hsj}=^_>`$tIN?lbM=yec-6l}wc06~x2JTtldd7LGb6vdGI)#1ak)jAFnAO zuphnt1j`B<7@94tDrg|EJ*=m&>|1%UeSE9;4v-md9dSOeSO`2Z80}$hmce2e`}!zV zkedlUk8U1s)BQMQQn%quWxfL{#(~uYL(Vh6tUf$*xW3WBvkkI92PU7za#&V@Dw@~& zl0t&ZOzCuu`pQsed<-HU>ej4{b6_nUi+7?xqAOU-qFBpnEtzYu8lh@Mik{y`)9Dr3 zM=*(VP?%zcYgSoC|EKtJKbuKH(>t>zPdEiK`xjb&oG%aew{QJKzrH;gemLD~pKW~I zFtK}{*YU>sHyQC#f~Vb6F_RrS^b{6{pu8$skL-p?nDlnsZqyyP5uuSg@JZw*-3S5# l-F_4%Zti!C^x30UtKI(eZwOg$l`k+-y;~$g~E*<~? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro b/warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro new file mode 100644 index 0000000000000000000000000000000000000000..25a697f1a5ce13dadeed676b188f8adb03cdd914 GIT binary patch literal 1901 zcmb7F&ui2`6i#cYd+;drQe+9@soDHaHa&O}K`00nPesBcdFe)znV6Y$UCLfX^dFGo zNd#|&f=9uV9z6>F1M0zxh*xp4yV*{gHf=9~WZw6E?|t*$%e~;y!j%<@QBDVhDM@tG z^lZn{yuR-AHPh%@wrkzUQ304KLYQpWj^o;%r8)c?I(dS{T|btSe|C5ItynQsG_qJqQrYVm& z99UEoXjEaihgr25X2aO$pArUHHNl6`?c-f_KT0s=Z8%Yx?tq%n6Ph3(Bn5<|fAVy`%c)FGPk)ck>5DGuwt=Sl7U06B-?}!1F&tNU{ z{8Uz9$()0=5~^2ZVQYPPJU&DFF^v2S7>W=>4XXsBFDO3W&($Q! zEnRmEOR*f6KcX;JkP+MbHGsf!4Z|`uCDVG9^v~Op)aiWq_UrSr-~WDOi;}b?N&II?7=#QnB*&{Dm7NOfc%DKP zJVJ6pM>+(vNE1I`5t2&Udh+PLH6e0r-FR(u=RMWh?9XuoTI76C=XM;43@*#S4Tub zswem)x_Z2I_aj1uYQwq8Vh0qA1EUFsj3t0*d3Y9Zb)$mk8)S+0bw11Gu&Tl?Xr8J| z3^B?RsnXTzYeSu|3Gi^JTC+6HzOi%+-l+s(pTU}E*;ZC#$((~#3l%Gpcf7tmo1LNk z9HwCk5@94!$tuI>{}f;CXFW;w?8)sNZDFasjS#Pli-9@z9lsk3hObvTgvw06GXevDb^70C&MbEx+x=s2%l# mcCR0!o|Ae_Eq%OSt2G*5zJ2=m_w$F>v{9>FPzSYA8vg(%u`jRy literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro b/warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro new file mode 100644 index 0000000000000000000000000000000000000000..a68736b6469f8c21b7a653bc1f76d0605150d22c GIT binary patch literal 1904 zcmb7FJ#W-N5WO5HL_rya2BDLMsN(b2`D~{KB&0}4L{t&7*50|C!QM6Ab&gYX4MG$I zAsQuZdloQ){g6MUy{ zdZuIfLE!uDz_9{97~IZL0fg&nnB&^MWAz=&c6`SREYmh`F?e1Ai9si27D3UrZw_gZ zA+GO2!4gW^_8QtPXphAs$k3-7dm5kQplx)u0%BTVZM~}v6G$-=-?sNOg0k6ZhDb65 z#={)((K1LRE5cmU6sU@a@ggBRG6d6D5^vHNaUtD({OCbS*?1o|VjIsE+jA+Tg5bp7iupW*Kj*1=NMwP6A957Ko z0(~&_O}!txNJpM)>fl<~bM0U-7zBD|_N4UByRBBI^ZDJuhqpft{^V`()@q68Wi+E}JOzpeWcWH>K4E+b# z`UkKvF~P>n#K3|O3ll;h*r;ITE{W4?-Ma1K;qHCk_uhB!JwJ$^EnHsZ6!&?L2{R$L zTol;tmTM#5N4|?}$MbLYaSl|NdYFT3_&$rVkka+XkM7lniRjhuuGc5}V2s!5CupQV zH&0NpG?kP|jU#AjkVuqH$omk7GP9zTB1>DtCsZ7T$BYVT@NtmUt^yTqhf}vpU{3>= zGtLs3>+HQwV`x<}U_yX|MNgbmvvUr7H%WnqF&mW2N3Mo1c?QoDF63i}RSdcZB?ba1 z2w6fEfo?&GVCq25hNl!@>5pE1f_ViM4AmAE6;u%D9+p#>_bor(K1l1m4TBESR7M;Q zEY5R0QW)uBrgp<@7=3w^2*}g~A4XS?x9WbJP%hhWqB7k91!JH!LBv=Jn3jiU3YRxB zc(OreXiMcYTMqLojDqH=yd==YgH*_LmHLsPPT3IhFp{lV8fQyeIvVdt05{HH9rXLB zvT94_9IQ&HSdqDhd}BO5LwgHGVFm&dEO5yx&FBk?&-b&MBx8JKvgBh%AYM_X)*kNv zdH3z$)Bc^W->-F^Y;~4CUV5{jVmr-dqdAm6mmV8%XiE1)NO^-qO@Z@G5X~alCTaO7 z@GUT78waM_^@$lpUEg$k*Lt literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro b/warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro new file mode 100644 index 0000000000000000000000000000000000000000..eaf34a2d53e3afae903c05799935f3d243f33875 GIT binary patch literal 1788 zcmb7F&ui2`6iyc@3gSuXMI;3A)NCf3?2q&;f*=SLPgTMsdFe)znK(1)b}4(&zrllN zL3+}Q7jNPpA^rnGkM`!#ncdBH+O%oCEy*41y6Fpq`J={Sq@E!q&q)88!4>3#cCDx{Cr5WT2muEW%7Qw~*w!kDyfs3%j zV!R5H$;z-kLK0Q;aKSRNt3nbQE8-_K#zIP)&$l0&lT3`wN6*Z;K3KC&^Bj#F$nH5R zuBMVxsc{M|4HB8s33&-|C^M@|sk7{9_>73t@R$-I4L%EUhi#zR?Qr3C1KiiZ&5Vmo z=DK{Zix>v23^++33G1FXuV(KG_%zFbhcT_1P zjX<}cL9lRu(a8k`xcZ|vpI}u%3q!kwbp!%jK}D!m4Rr%F6^&T;)QhtJF^obxtS1!brAeW1L-W>1e!D0o=NTwJOUCS+yl| z1y&_guSnKMBWpIhMEf;N!vX|Ou)qzgG^77he6^p|Bw4fD^CchC1mf$;RO8q2jZfRh zzuz6+I{fkC=eM+TwDxsP#cnxH*O|zl%a~Ri9O<423GXJ6BQVNKPGGI=@x@^8n%(t<=oE<# zQBY7(@DB(fJ^%`OK7bFPK;jqJb>iISeCLA#$<^+>_h#PCjPHd{H!f{+f(t&O!b;pMe)T;JI#FashiEo^7#AkQEBt~(t2qe0*Cz3UvFmp~%0NSTMgHv88S z%5p5MLts3mWV64G4;k(8XaYI@aP`O(vjWUL!(_osctnYi{+?gJ9tRqti1AK>DLMpI}u%3q!kwbpbC^z|C`5%c3}w zRa-KD!K#Gn70EouH|O(nw4cE&$U)#33*4|uGx{IJSNmB_k~!b1mV88Gh%PEqJKx?P z{=V_!(UUJ^_?B&5x!nDJ;q!)y-LvhUJ(d5K2`xF;(mfFn-it$9V0Hk)u9LM#g9IGU z8(E`%;#;maLY6;7iG^U`$02f(2!~eg^py0^Tb)j~`|;DuukT*Hej_$JoyGTmG*PAb OYhAOF>`K{_rT+n2*;5|? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro b/warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro new file mode 100644 index 0000000000000000000000000000000000000000..6ba6caa4ebd6dc0cb043c956fb2a1ec1dbd43bbf GIT binary patch literal 1904 zcmcIlJ&)5s5X~JaC@9e(B!n#MM0Jk8^Kn3jKp-R}&{YvK8+&{)*t=$TeIYufrH7wD zg#@Cymj6J>Pe20E(z5HsxlNq&9R-rB-FffLyqy_88NJ-PvcoXS*_d!6iEeq0?OHw8 z?>mlf4=mSqy1O}|fVrWD`F+bCxVG)so+n~GZ(!YI@VWpTf`N-{1a#ZE5fhprZX5w+ z3BlXW4mzTw!@@CS=*zWZolkSn_cfhDNNA+*X?mPM8ZmJ;Jk~MF%G(U#BnHNV9P#lo zNF*!5e9IE3iidHU;6oV_kx&vpCL!WNT0409P@5!ttlfX6mHMF1_OuNeDd58mDz>7M z5}~nz76$P|>I5u@Fc6tlrBqou3O>Pn6&@1Ig~96}yVnG&+z#e$*TB94u4kMjBG<)x zoyE{?WI#~_QBd{7rkdRg;Nv6(7KEgzmv4CrzUCRcNf;N89W*hh9@H2jNP&wIng~=2 zY6No!D4Cp5fUQ1y{Rx&8G%z$g%)FIohva8f3sxggB~Mr5OE>;>-OkCrO`OEth;qA_y-_Q(Gr@?q0wB(;2=v zc)$DZ!S_e)ZI{nb_ z#6QPCgV;5kUfg$Mzh`xkV`NrGO8>amYPH*+KYaZ3_3f`ee7n_}fB#3*E;WCzYL=31 IA-i7sUwYb7mH+?% literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro b/warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro new file mode 100644 index 0000000000000000000000000000000000000000..86742bcbdbcb13bf3e94c19ea7ca47fd9ac9a553 GIT binary patch literal 1788 zcmb7Fy>8S%5Oxj}QGjSrkPt$ag{b1QedoVRjgXL#kcg-vWUam9oP)h`)5Adf(UV10MKY~sWTjf>s+zHjE+nep@ZVB_W%C#d9OD$EQ&at8y? zb_b4Yk8Ibm1K$rHmWTlnrW)q?1KaaQPT&pwzzstQdcfgL1tbBJR7DJ|H@u%xRv=+c zfbooy-e3z&813_93 zx_YmR82nBKgfZZ#>521d9$o>TW;yUEp;fzl+g0!_&){vwg?#L&i$V3E#eg9PAxr2Y zP%UT?EFEBUdO-n>`snQ^SXa=&&~0H;K?i~AVLOF&-}1BVV=KM4XOJq-WyHzABF50H z#z+r~dN-_wF_cG{fTEt@lj!d8uDc&)gv&Nus4RCt!#Gl!Af_}2MB2l%gv%Qlyx1Ts zv{UD^S`O0<=z>P~-tFpY1Rar7u zV6BCk70En1H0JY5v|qz4DnKBN1Zr8O82z8(>-}6$k}(Qkld(E)xO@k_ip#k zr{6!E$+f>f4{rC4H@ljA6iy=shK{H#2pJ18)v=w#sofbNkdTl-Ochw?^K)}x-@?v9iOHfpbF_R8S?+gcie-!#* z5Jo}Y3!>3Zbh|_xsC105tF+4Vn*v@{KruM9DiYvb|3=1mfuwT)To6XP{VjCBSx?|G z6zJXcLt9Quuy-w+17af#%36{NCLVS(oDu{$(hnvLn}ul(K@jx z0mmw{x|BN0zJVuHuEQ~-QaO4W3OPtsLK}f;L4#o70B4hP3h>QG zZ$81Qf)<8$3+oD62uu%~DXjWdoNgb_=)FB#kGG0A8Cb+Qnre*lu+Yn3IgFt?A`%Kc z!6(t}jp#2i2 zaRCygNTP;ShSC2izS_@vlI+>F`I5&h1w8*3Iv>Ao-oJJ9<@_lNHB#`_H& zyX(3=ccOliF{=c)$~_rV(MuCoBEApOt&?>ji3Wox3Y|fiCC<QPUhM4V_a;57U=anyQ;{&4ymV8O%$k{WUF!Y?-aL8n z>`6iBp?`t5icm#_DxO6A4?O8)x7kjcHmyPqA@jcPd+(d~UheuEQx_LlihHa}If{a- zrs=q*W@?t{TDommmTO$;;S5ra%jMT`xicN($oJlwdBTn-A{YYW5@EZQi`!9O;8HTyCDA z5ktCuf{G@o#8hY;K?{R;ROooD2gDPZm8Fzf>JmOm`B6BbDHjGG2Wg!;Q0cZecDn+$ zByct3BoetE+}CLgb}a)A0tmdaCr+x_I0rtAVqhMjd9{4il<*bL;7P=|xNNVELH3}+ z5I_uElu$3($>>T=;8Pj{POHN+ zhKmysJlY@!XsyWSU^z^xP)eGI;xK>^=P?)Q7V1ZaI;MTdJYTeCWt=r>=}5c-4oo?N zHShIKWtEo9Iamv!az$pA>L|nE8QPCv;3dFufH|&MB^mvX;*$H#^H;0a=HGrMOG~pm7q+L0*p+s>)$WU*OPA&h+QL2VrK}bBZH}{b;O#Qm zwk`fIcE`cU4nr52u5KdNatP9O-_>o+GZH#Y(lt^L^t~V zq3=4bV>><1wq0-FdDnA90dr$5tYp%n+H!qw;9q0#tNfs1SewC!At3C$2U z_JOj5;I^}k_9^MIZ~__nbmc(jvmEqYO{WkN8tFTl9w(4SOq}f<=on??ZH90X1LHxC z_+%9%k`-aDWeHTp!#GXwScXI-l*D&Qh`5l}9^SvBO%p!RZa>gUebDDS+9?_-;PELc zwxW^}p|OS*2JuAd1T2Rz5Sdk_R9QL-KEZq)9umxj!6!lXpb1pD9W30gfn5b$&p1m& zuFLn@#NahDpeTYUsCweGntSKK$4Lq-2uV>d-|8#)nrHAlVO%_R(8Qp6P-BQ71ujZx zB2X=;5iA^_WV)dMTYdEU6Rav|U}(0ms-S^D^{}48s&CoJ_OX=S+tYE8rXu2aU=gKg zCNaXpOzwu|Fb>60!Xc9rd>q|8-m?2qf|+Q;Qf09NDn?&vf)ODpAY31w1zg;S;Btd3 z(YDNIxg1ti=oQUlaT!63ij<3VrTW@Xr(_B=7>U-bjkB#R9ffzsf$3+k7J0srRar9U zV3k7EilnYJ)aUavw4cH($bh2=aa6NPG5R0HSNmB`l0Ls&F8Po|5MGp~who<-k8XbH zy*zT?zJB%Y{qN5A3!k@S?5=5c&8hggOi01N6z=f=vu-ppIih3WW|gc7;9AbWatt>D z-{{-@f#JuNZ8*s5#h!1)y?AJ3R#!^@ywz%TI!7Pgd^`N{=j)4htF`$4kEUH}{#w^8 LB|Ad)Wa)na1<6-R literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro b/warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro new file mode 100644 index 0000000000000000000000000000000000000000..f741b115000156919b45e35491e0bfa033803a0c GIT binary patch literal 1774 zcmb7Fzi-n(6iy-r21XPXge(hns^cGto1`*jBG62C2@MG6Su5)@B6;@zI*T8CI2{4W+X?bmQ!f1y_ zW603gJEx|Y=3wp{CWDBw*xWVD1Vb8gd3Jni5|qtvGemF#Tm(51<5iH%PKNo8BT*#} z7Yvh;3W;f?h!1Imgp@X(J$YzMuoxQ$PmQ@gn6q7DgGLHuv_ZwyR8lH6*3i-sft60c zbBF?&Sy@V%rKjOB5$o`X5+NPE408K*pwjJN;dTY=Yv5|e8J4*&-)kGgUM&NPV~B&Y z2{zT-y#_wPDexeoMYVjVr{OD}!E4NgeC(i(LHD4-5JL(=mQY8aTTmfbIKb#+O98I_ z=+!4!RZzoFZ(&(M4T0`qHHB5*^2_bxXuWrAs_~W)7XynJLsNy39%gD8EQfI*kFbDD zP4Go@{dlYHN0@NghI5t04k#IiS`&nnrhrIwcouMZBZKD~WQlfFKFj5>s=_R3p3BP^ z5>%u@rmNJ~hB~DaU_mHbvog-EwsbV!sQ_+X!CK_`R#t7vT!U2!l`E3@&cK|_uF!r7 z(;x$ZVkA(-D$VHs6kqLUHA&{|_I$}lG=^yYFErZkc8-3%`TptX@aLl+;pgA2^X6Go z#qQg7$DYXFWK0VVwscPfgm>c57Kn{N*k!VI*GXJI>3bG9!^rBPVc!}KT+ealjA6i%WJ42-BO2w4_ls$=^S$95&Q3JD1b1Y)X?b+(@ygMAn7&J9r&W(Eet zuV7+AD*O#*RI$Rq1cH&fBu=k&>z2XG-TS`pz3<+8eh@$FUftvbPxzP$D^G6^L)RNQ zUVsK@5V~%F9CT}f84zLVVICR`QHcD&N4`4>f}tPWbl7L03G6vQ|H!{jfEUbNC zJg20GHt{~AeV&Y=#2>C7m|`{obK5W(B$TD*mSJW&6e*Wyy9Xx0<>I!)B+r10XoAIf z9VC;LVV>hiRL#Q$%gLS!Nok^p@6!YeDQ!G?bkCUPVr<-fY%KJ_oNpOtXcR#9&QNhR zm4Zr*6KH9W$dyjSCy+!kv$~WzOQhj*B2K~+N`y4{G|2VaK(*V^((MM=)4PFUKYH^C))llcv|CtL&_bYl*i2#FxBPVbI9l)RnxrZU8F4(Ym@zz4 z80lfDcEf5I19_ASDAfcXN4Jl+>VBLPF57USvfKeRW2iMjOlbj_G>2yimp3wau|Za7 zSLL%>4(lq+n&zpzOd-QnA!NEr{lrigbP6nrWotIZ+0~Yg#ybdyCZOL4M zRSDHAl6g*G&gU0sKZjXVg1{*jxM7uM^nZ%4_p_QLbAD~HB$56ozCMQ!i+XV literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro b/warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro new file mode 100644 index 0000000000000000000000000000000000000000..7fff3fc509262aa85454970a93745199d20175a8 GIT binary patch literal 1774 zcmb7F&5G1O5S|%4D0r0hA`*gl+Dww!`ODq}5d=X{#KR(?ldjCPCf%{Sv*WOg2M@wt zd<7ps^yJBd;4An9i^qKfZ+2%Uvpt*H?0W64@B6C0uBv_-y>8#!5ftTO%A`Z^{eI9N z`{RBPjQpTC*z*TN|6YzbQ0W+9*J+WacLlsHfX3j^B8z}`{5uKb8IsN+a6uUD^mfo8 zXI&9bAw%D8AK7xAgS~Ir9Ad_?y=&PCffNgMc5q}OE(8>`> zv`#2;h(ncGRZ5j*&%hHZH{mg(QaO4a~PG^X=mqy?0>i@m3LM1B*CEbB$3RW_lT{hH8cCYAl&6uxg=dMe>0+wik;_ zwBNuy%s?WHB&u0u82z8(>;0@J$zI$lmwe1H#O1%x`Z{>vTchmL$*&vl|D1e$**R^0 zZ|m57*X_D9^_xstA;4Ac$&iXJj$DcO1f*Lf>yC$B6riN%jDq3N=?5d^ME)>wf;fpV n#-qfGk&}5{Eq(g1)#`M9|NVUYg9eU=_Q>J2nh)RVye)|XTLNqclKfX8loy2{{UiR zLSkoP1BrhDCdLkI9bsX_PI9T+Yp-Rs-}im*eSYuxak|&OwjmiRqHx9U+}KP z6Ufo0n+L9%72s|=t^mvhaW@@zOd%supY0sD4CRa495FfusgeSz$vQ}9r^5z8pivc% zRD!Zy6GAvP#E&>eN=rM>pFVV^R85@w&zyxmxbsct42=xf?inhfrIK;2aRRL!QPk)p zvH+au%&JnVEF%j~nK}u_oGI<-X;2t9fhxC?rQ0>|zyjAZ&Z*9I^bE}@CQwxC9^bU^UwIR%9F zqt~BcT|omwvxQX!4FtA_^%T~9D^IsiVD;XPYsOng91koK0?iCYdzhPLuo}jpKB5Y8 zGr`Bv&EsvlA5kWC8!l9qJD_45Sxt~~o&jR@;aS4ovu+oG1M8Kf=E)`nzeBbt)*k}&J;-Z0@ku9&SkZh%q3WjP_-h(AQ-yy`32f9 zVV2~e5J3vntg?*$Px1ABHk0JeuP>H7<^=HKUuZo^et+K^{CV)<-HjiIhwoYEsQtNZ zVz+(2>reG>GU25JU%RIgCc7l{6%xCk{3=-=lQ4}5ioJe_u-A{GzL)k!BM(M{uosYC libLe(LDxth-D|Zvov&}cefjz8@5i_8POEiApR{Uu`~!G2GU@;T literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-5376886020839292182-0-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro b/warehouse/test_ns.db/target/metadata/snap-5376886020839292182-0-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro new file mode 100644 index 0000000000000000000000000000000000000000..ba4ad33fedf91e936d0cd785849b06e00bdaf8ef GIT binary patch literal 1789 zcmb7F!EVz)5KW>UK;npsL=mzq#Ho(gPU6@-B7}s5gaqPLA!}`q8-u-TcGpRxlF#74 z0S-MQPJ9C205?7Waje9Z-6T%8b?cUcFT3;Jn|V7kejdH)-rD8_mwZBnl_d{HgR$rP z9&(XC2;9JReD^_#84zLVVFTX}WW;C~42Q^Zf`Q}R=kTrq5`#smA_CTP@1>L#SXfhF zJfo!NZsRGVeI8Gsz+dkinPOgoxo4ORV#*S8*D%uz@`TH?{Uej$VtHF&lBK{!SYk2R z1j%G&*a#tss(H9z897iP35^x;Ga6$drHxlFo*J`EOpGTljio-Ai(TUajU33q1uBlF zl2fU11}zN|nbHY)32`Vht4pb~bTxcN#94SuiI4`L2RY+5Q0;cOa=QT@Y2aqYMJ97y zzt?39UMmAm5=g?jCoZaaa1DH#<-o(3R?YI!P{TJogTssq`Pg9_gYH3tA%Pr(ETN4+ zx1d3=a)8mQGG_U1l0x7O?A=6drXNEebGhksPTeC6Fj<$3(-njs7Ucp+G<)y6JlDP(} z5~^1u8zJ9ZEUwUg3-ho5ffFon!z#__{}kWsXEjOY;`VaM$25WXhBCDi?cMyj^WOWr zb9Z{YIQjUf_q+S8t77+TyKm3r&t*a@4z_epgoO8#$QGC#fUxUi?KDVH5~0XKK6b6) x7>_ONqS#8o^X0zWyxc~UnRRAz>vC=*qFk?y z%~e){m4zr+SzCzzfMBCsX=CSPce6Klxy#)(fn?tIeeZqq-pifn;nIZ_PSB7KsL)e< z&9wv9w_L||J<~RQ$F_s3L&SgxT@7;rr*HP1An?t=a&1#aU*Yh$01|^viaY|=wk{`> zNQw5^Hp5VW<9#vrB)YpWeCNg=~re%sjA2+F6YIU;ES zT!cd;28$q>tPFDvL!v4kE?7!7%MeWClK3`_k&x1z`*&}3MyVKd*6($u`k+l#J4a|_ zKsJw1F%^}JN{s_(X^==uosbV94rOLlDOHx1f=`J!2#+Zd(%{1&({BP*Zih3sYhYIa z*E7yjnd|(%j$`l|84$*R!>T8as@XmTK1nm+VN8p9`G%w5Yo5WAlnZ&;VH1PuL5%@J z211t5M4(zwBbYhB=;)XNO!d<1SFos{fuY&Ls)7ar)x&xUi@xQD+s9CPZ$l$RmdS|y zfklj=afy*0=H+gf4`W|`N(JQQ1n);Tk9XPqC?#CB;Z$X|11iQqX@ZE-3=pXg&kQb4 zWbkx@%+Y3<&wM#7s?aK$2l5a@f{IMYbW8OEL!HqPurQLXSsQ0lSvm^uSOC{fU@eBj zV_B6Ya|+f{s9KTCHTv3Qa)S0F7>79sgpoiss}!TpD8AUw($v=a z$5%IAUJv$mpLgH>`u3D9|2X$ysf=Cg^}4;0{J9Kh!J#MJ6CvSU9Q6cZn;?2svOPQY z`~WA34gt1wNB)-dejFsaW15DMcz~_GqvuAql>T$G)mmPD@%zo+uX~?=zFum}*H%kD z&nnvYj3_{frTc;B=}zDyJu_S2j5%1)nfsrO6%7 zcaY}?c<2rMp*tEm9=cVK5~#5BumJn+(D6|a1U`2BAs#t5IJ~NW#$eGZkD%;1*T<~P ziLmydjDl6-NS6Pk{J zi?ASKvJR5T$}kThiK=!@KGpkFfvvf3kO2u(_%&3qCp9JAy8>n_WT)N!=dm6Zz zah}RtSMPNegWt+Pk_3{l?upZC9$WxFPBY+P%&KPj$kp%-&){{+g?#L=jY0RI!H_@( zLYB}*pj*%&SUOO$=@|uJ{n49Gu&$tmq20o|f))bZ!)6NWzU3#|2Wh>xW6~?H zlCmT-g^?cSYB#KgaU_pY0lAvsqv-bWR^3lh%4HiaRF*rSW(>3@h#1R&(B|+g;qpcX zFE+>uja5FY<*=^8tZAOh%LK-x%7jc;sUI8aj7^~oBiWjbamL!x(RgP9xOon1RTO8k zYD?w zxE8{$XSvA$SrK5cA}7F!8@Lz^v6Z8~lKye8)7jYg_2ui~x8LvHyzO>6J$WF%lX?6D Do6R(f literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro b/warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro new file mode 100644 index 0000000000000000000000000000000000000000..06248d3a6d19436792c0c0e3ee1938737fd2f4a6 GIT binary patch literal 2022 zcmbVNJ!lj`6uyKQQdmlCM2|(RGIz7PvwyKP2!bFeRza58owvEw{W*8$avtHp*3L$- z5DPmIg@8m63khOxW25OTM6l7y&e^-{Ws^-diLlko`@ZkJZ{B-*&AUBya-Ju&%R8w+ zA-iChgxCa|j!9I*z=my-^Ie)jB2YO@HwY%GW;s~Ls%B%`RL^p_+k?ahl=NZ`vT1TA zNVAvj}o;(iBW`s(zWA_iSh7Mn^2ews05p{WERM2yR`%>@L?i$!~HZ7(%`)y)v5y(Zo6Z* zD`2Apu4WvEGS}_*I*7rnWuS}!bBmtXuV(!S_#ljcyMEfMmXApZU-1m?gc>bof7Xr z09OuS?RC2cvX++25mKww2-V5bZlKaAOdZQ9&zKm5e^7_+&rllcWq!jh4Kh zGVteeQyaf71sk7NKV3XGw6{KfU0<4gf8zC29=q6Xx7vOAbLpf#4sGe4a1-8QUR%&? z1w^|@wrv72E#G2@29AvgBN%yxuOrK*#K4w~EvBIuw{q#9OO3|d+`~6d-#&Wz;meb$ z=|*Gx9amI0H3AqkWH{7B#L@!f=z)i9N7tzuXc&7zA^Jm#&d$DjzPb7M#e-+we`}gd wH*ERmMZ^Ig5n@tAHB&`i5U4&Twx#J_p_vytGxP2K#_#Wcx7Ppc6uQ^&e~L1Fp8x;= literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro b/warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro new file mode 100644 index 0000000000000000000000000000000000000000..7764e2e3cec2ee1348e681273907bde4e830548d GIT binary patch literal 1774 zcmb7F-D(p-6i$K{f?i5{BeE>wRX4kv=C{{H6a-Q6s>m{#Ih#z~omppQ8$$`=D~Q*E zFCc=xfzMD7#0wD-`V`J2*>uuPxAk`BeBXD@H|LyrJUp!5+>#7sa?F)S$-Pc@(CY`C zu-n-UTkT%I9R_zZB!DT;3cJqoB)KEuRSpb;$MSRtq7mMXxk!=njzCDtS);Xujs$N? zJcbl~+CFyGGy`|faRp#5h`ZysF@=OkeRgo{GL+75Q^aTtQbie3<5iH(PKR}ZK%)vC zsRU&s6GAvP#E&>eN=rM>pFVUZRE?ec&z!kFxU(H+gGK^uv_U1bR1&T=*3jA!MU74* zGr*C~tSF_(vSr~ZQ|oZdnbMA)2Zg;VP~mp8aJvNVSm1KTDb=|y-|HfVZY2XE1V~gg z!KRvbuYiwf0y4rpFP9&*Equu{cul3!j~!Jp*dCM^2qd6%2~`BP1to%o1AS zz5E2L3Mv??Ei5XiAh10wr?Bc2_RM;o&{Xr=-~MVS)xOe&vH4es&EUM7y6Pw zjPgY3bdCDjP$zr>A{y$}ERAz$Egg$@szADzu;y8IA*;1yuE1)9iWMn3LEoLtF42Ao z(xR=ft$(eX z*gfBG`V;+|jCn4>*Y2r^$tD^43W*UYzev_^1L~py3cNNV*lUwM_J)Ig&x_3=#68l( jv6lu-BYnDGt2G+$zkL4r_V3BN5A{Z^c1@quN_qSP2Szfm literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro b/warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro new file mode 100644 index 0000000000000000000000000000000000000000..ca184a1694e514e8ee895a013c39ed255dfb705e GIT binary patch literal 1774 zcmb7FJ&zMH5KRI|6qIl@2(4C#>NdNZWb<(~LPA190$p`NE61KBhFyEHy_btl`33aU zwCE%n_ybT-@(XBauce_t0z1j(oZH;q(c1Ign|YoYKO4TP-`bH3WpcumN6EveHyCt- zsND?*oldvckHX+Vh6FI>Sz$L>o+S4ryvc!K@K~M>K{Ud9BQ8>;yh9L@a@J_=phLl% z5>FsSAMYN!YL@t)tZd1hQ2&9TLq$cYiot+Mgf^Q>rG;;}_0CAKdw_vqd8THr}EVS}Fwm1bro(w^HN_D z7@<5-I$fi_G1Lj4f{2H@HA~|hT1&^`ohgv+C9HXtUC3%JnJcgwp<+dfDCoQM`6b$~ zVHT&L5J3u+tg?*$Px1ABHk0JeZ!eZS<^=HKU#RVW`g^DS>!%~HMQ=ac`2DSMTK`-( zv3tJX^r!kanebeKuiaBIlT9-86%u1mevzyn5z=XQd)RCBN#u1fv^)d@-6lOFBqSvM#Hm!)+B;4b>|L|FZiuSf`T)EE z;>e{Z&O8AZ5E8rrQeS{0>?U!#sS~$ccjx=QnQv!ipTw`*H?{;tg%~mE5PU!Ed;Va@ z_j`U2g#BI+47_^<;y|Tigk7g)mfaEXwgj4hL(4n{-tljzjOR!?N5BPPwA0%{N1Sy< zGJ+hP-a5ABqyT&0vNg?dyrYN7?=7^FMgp3L#N6R3UoeB#*PoXLv zAvvK#9fDb+i665BNhNK)eE!H96FIUTzOZKcU{ANLH5wVv;Tjd+P|29mSV1dCB+)vN zC?JVcW>qOwmOTScs9c37j7sI`MUcPO1ghMQ=5E)(p#iREoD-Gn;=ML8>^3qWi~&bg z6RfLw=L-0gWFVr1mG$zyz`)l$gLgzo_1IApgXuwy0Ye5-mC!_BT2LdHJHXj^Ljk_| z==CR9R?xuEY++SF1A*ybJ%wf8ii_>z8NGL4>+x0*=L3s4M-z=v9_D%(EQYbKj);U@ zPw;tk^LXp-M}!L1hBKA<4yYIhMia!0Wq@dXc;;|*qk?A}WP$c|K8xkBtirBn4%H=w z6qT7&>1y?rq0ZPCcoeJFtc|m8EFFV)B0<=fu$D!!k=0l-S76mb)r#by*SDwBOSIp> zB+5Y|j3laAWf=XR;>-Q4C&`}PoGtl;VMu2GLhIzy&%1o|l{aPKY)LL zX!sB{6$SqRC{a2pDhhr91-p0W%O*~oP`KHh_ukCgnel`4X?Jsr6ExvtDy$se3L?)B z-7s{WLFf)+&v(6>6U2ZBOAi}5o)<-N6c5~J5V^h^1~)i7uYhD=k*Z9A^}OpN%1R`x z17JL-q~~p+14jEi8$*dcT{|?zYy#$O!(@kjw4Yu4;L&a`zi#}OcC$U3<)W1Jbrl3nC4<^+?gJ9_ZqtkN=aP>!TKEb+z7KU~U>k3*3bPt;;toxRqZXZYMy*-muMIj@O2Np4g zW(p%cEY)sU4Pzvaasj29;N$4_@mAfBa>8XBE>xB~pk|DVi&zC8=!9#yGp$($RQl0=RhrYc-ji%c?Dz zORy@TdPTCpiOl)@0_|roOG*$3BY_%LX-5C2_%iVXq-`&q$6?@yZ`}S1+T*kEGU`zKzLUljA6i!12hK{H#2w4_ls+05Cj$>woR0#S8b3;@`EQk># zHdcnhfauZ%G4cagfE9_6g@p+g&PkkJ>(*_TNV$98_r3Ssd(U@*M@uWKoRT3QFkvLo zb*Jx|*g=+wEektd&+NI^h9n0n3^mN|+t{%j%Xaz*BM)QTyUO8l0W<`I7Fhs!8()c8 zo)KYeL(UUM+jy01=d8oS0c7OEltT>%ys@=Co%LI8AudCz*HZ-{sfB(8W@@_tSV?AP(7@tu;^QUw0)4$dmB0}(o{wq z3@piWGA=RF!>rs5^I`1EqeMVfPVhl=^LUrtPZG*y8%|YbJD_6plqLumOM%e(@XX-y zMg~te$Q*5!`OKHYq6)pDc_=ReYu3iuRF;myI~Kt8Q&@}P z@I+Q+$((_;6slHa?x4OtnVh1%1!F%0K_VhZ%__y{bBZtab2&-+hb)5dVrgn? z_vzlp_1D?%cYW)@rDD>4Q2>XNGAi7;34pcfu*kxK~*)0JtN}wq?w9FIW9slN#@f=C#5V#*N<#DEx_KhYz`^o*xt76A%P4Fb#`!MQiFbGAfm$r$PR16R2`KUbtNYhX%NwaZXgO%lF#E&~Icw z7z2*0COE6+oeSWHBm)trtgM&s1qQz68N4Jys>hC-7)%dp3>Y$ys)Qy2(}Eho!U4`E z8w&8vN3TD@s)7cFW(%td8VF1e>nW`IR-A4h&*;4aTaUMjI2l;PIhtyW@-WxSU^$GD zIwBHsJ;5i@&Eu`R9}y~48_rc0JD_457)_8cmI0#m;aR}djS8M`kR{sJ`7D>istUWJ zd8#fk3{ja$m9AD_8|sWrfX9hy&DuEo#?mo(rxJvH4r^Hy8(EDda{*Q@RINxJdXYVw zoumC6rg07uVI)z_D#Pgi6kqLUJxTWL+I-2U3`08qFSP!af8M?M#=fUNub}-KuYY%r z+n?JycF%RY?nM1f#;g?JD)(eeMHeToM0^C&t&(*IXb=WFIB-H7L{1PTJtv7Ub};Ir oet>Z@Oj0NJx?1}9ZmZSle0=-$!>b=(e!XvZTCGd!q*cq~9~n9_$p8QV literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro b/warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro new file mode 100644 index 0000000000000000000000000000000000000000..57fb715d612c6ad6a094a96478a6f572bdb01160 GIT binary patch literal 1772 zcmb7FO>fjN5Zx{uIB)<7l?y^q)MK;x*lai3GeSZ_AVE1*D01RS*O1t$?R2}UR^rSB zapQo*fip-5{sRA@{DX>LfxWxgx=ovwt3B_%ndh1D^W@Fi?R7y>DaK4X1aEA4{vaAf zVYoGlhW)^c1{)>fK&4|u-J(^VKNPTE0ZqZ7RgnPi`VTV33nZNb;DRvP4c5^CXFZXQ zp+Mj7AK7wRg1v3o98$)yy=mDQfgB5UwtHk#RLpM+L`eoh#wC*DRgg+fg$+DUp=ur> zIiY(x1hZ5VKV>PBO4@q$;)yjOa%??*Y0dS)o^4teXyicmE>Q6em7FP!Gic?ABw8mH zC8V*+tS+U_GBEIj%Cqp4QK=j~5Aug?pxW(t;dTQ&Fu=`>3!-vezSm_8TdfQTW599U z1Q*rZzXm=dIfyuARkM6AH1G}2;E)KZ9y@MhFg<86V8}tL650q%3mOCq2RNHtQh;wh zdh-cZ6|^w4TUb}nLSTB>Okvfx;(YsfM(^#~dc0M{>A)h+(NtrUhlO4S%VCVv5s^^n z2|kT(A8+0Lh)|*0aIUi00X5^uXo7^X91v{|&jPM)RPcO*EYZHsXSp0!RoFGnYjues zLsc$Sx?26rQ0Hs{JWf<=HpbaEmX5(Yl_2aZSgW$Ul+{==*I?B`^@`*JFS2K|E41Ij zG%i3Qj3jDUWf=XR;;a3vC&`}On=kp4VMyoyLg(kR8#^Bl;}7pYecRvpefLZEWbN0Q zj@@?Mo;y*$$(U6FT;-mOsp#Rvm5A?wbn9f@AQ^-{_CqHM{KN^v{>Vv!Vde}+{UFL9 l3DRWf6kbnDpFHYxy4}CW?>-;@`1@4au{dwDc^v37lf6IAgr6;_^Zg^usV zUhGHla3>x*e&lXdhyf9n7Inw3JLIfYAZRV<^$5TZg8YR$%V-O$L~<)ZFfySq??Y<=Nh$Nl-bzEfL8x;3BDz z7_Wk4t}-le9EoapxL`TiS0O3IiufVLNJ#1a)5j0`lU$7Z_n-9V`e4qs`)6nrK=#j2 zaW$2KN{tg}X^_a3PQoj|iOj4irODFM@Hr7D;g}L34L%KWqb^Y6cCv801r9WDJL58! zxh~)9Jch870i`LVNz)T&)$CsapXCMc1k<`*zBAPDEzjU}&V_vJq>DlKpv90v0YaA0 zMW9>IB3L-U=;WLNT>a78Pq3<>gQ45Prh*Ov-NSYYtG?x@+sDy*Z_gxkQOJnnfklj= zslrGPOSK!8!x+n>TtKNN_&B~(v1F3@zs7-lVr|r&X+uF_!UyTd7KrVGu$yFUn^1tH5qy->$?;@D}=2&obh5~y4XvNqmvvtaL<-E~7$?$Op=CY--tq6GjOR!?hrk74wA0%_hn#gq zGKL&|xqW2IX#w_*WphXv$M%+Grvx%A)Y<-#O;J9-%@HLj2pJbhj#oh{I~6wYJcX)w zgye)C=n%{jP5g)@NGfS-@5!z;A#!Xzd}_`0!JchdYcw*T2WwP(LnUKM;|y9kB8k?C zMFB~yGOJ3dvg{dnLgiU_!l+b^o(K6+6R2`KUbtNY4-9ZUQZfq}1i25*Rv>apV{2GfHY1BMKwDxrzMw4g??aDcPP1qJx# zqt~BcRY3zovxQX!4Fsl#^%PcpE6%r%XY}5_t;btMoDMAF98EPwd6?^EupGvrIwBHs zJ;A5Z&Eu`R9}y~48_rc0JD_6RHkx3>SO$pJhi3s-H!66(L6&G==d)Z6t19e@=7qY% zkfJh^DqXF9W~ehZ0UnQ3Yu3iuHLLe+}o18->0W|wHc zf@z$CL>Ng_v&t~~KgC!3Sx=HZyER|(3B!=g|Akh$yZ7z!YHFeUecXqRzT@Sg;yzl$o`{uouN6Cxs)$L910pOvEQm&<&pVD1_wgOoCC?il7IgB){tHa;*3DwekeBH0AEh)X1< zn;@C23=14bqG}#4SVs0#2&Snben?X!q_pw$@dIO)iK%h_iLulNbFpKbppgUFJ3+`(oD33A$g__{Q==Ske-H$TDWg9M4Ry&|(9BECEP?`fG&EZ+W<&6wpZjd$F zRr#!!!=?(ergO!K#o`R@moSeD5C|iI8dhmW|EKt7KdVVH7gv@`KBXAai^|l_mv^_nU-kD+yg} z`SO=zp<&`#UJ^yA10x&_6RU9gO8WP`PG@WD$Iri?KL2_1_IB$569na$*{9ua%cClpN`@ZkJ@7{ZU*n75gX@ygq^8ph^LT-4D z-$k|)*dcO)!1cP8eLcqoP+_QHwug`(+JWa=f#bU<=z7;UychzF!Jxye2SwYy+Gj0+FNzNYB~#H=9ts;2i7NC}tU*0*$uv*~GuY0?KS zq8y9CB1k4H!(4Dk+m1htSd>k(4?S&moRvW>qOwmbQXVs5lId85Pptqae#~0#$BDGq-DCR{_^E z&JvmH{Ju_N@ERE~AwZ(4CyuMRdj@ByYEkD{mNa?+GoetAfMjQ+* zE($y@G19}V+zs<#4CJRoKvquhL3HzYm)(yO%4Hi)Rc1S&Vhoig=rNW8ruE^O!R3hz zo^Fsi+A8yzFNZ}HdPVb89unx|VJc+0rTU?vPT2^Gs3%*qHqMr^bQIpP0Ir|HI?VGE zS(PPo2G&xjT9Jj^!1`oziuQ9DM;QoAu)sB|6r;~6zSz&@B0`bMt)Yi@L z&Ffd6?CsrKU&f#BvYqAK3m=!t*frDam?Qaf8L%M-Q@ST2$~&ZI3S4Y}Fso!uhmzf#HRog&^>-XD>werD(gozq9vid++z#dkf8@wf_g&U0Blq literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro b/warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro new file mode 100644 index 0000000000000000000000000000000000000000..127d49ec61e990ab4755ba88ab30edd5234c3176 GIT binary patch literal 1774 zcmb7FF>ljA6iy-rhHjv+AY@sHsgCW$N!-o|2?+@SVycjJ_B}V(+IQye+z?e6S&@+V z3#UTGAz{D-my(lzPQa1B`F9Q6-Z9jK`J{HHuOA&s(6It zgzoDQ%o0ufj3r1aY3udNr`D9niS^`_wa^E9zHMEikpbPmM8!8$GNv>((8>`>v`!=n zNFtS4RZ5j*-@p?pH{l7RQaO4Nfkm97nZ_s&bG-~!!x*X~A|clk zd>-9A-n#n{p+dFcLS?xFD#jh731Y@FK(szQOSrmG!HW&DLi;+O)pA%@VOKP7)Fp-# zm6=rOYW0nw&e#-q6sy*(jk9ko9fNl!LD<)@mPK(TtFdHmz^a9+70HKQXwT=@Xdl8X z%0VKGB&u0u82z8(>;0@J$)4X`Ect|CNEZKv*1^xOTX(w2ukRlZ|GfCyJMEmcPue^D+CF`a;<6tlx1P%`3)CmHNoiKnMCyX(K0ONs| jcuwy1wDj5IR;$zb@#**H({CT%pR_xz)-83?s^#$yFM}{x literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro b/warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro new file mode 100644 index 0000000000000000000000000000000000000000..54b69ce7ebc592ba5a641575f4d5555ae350ffa7 GIT binary patch literal 1789 zcmb7Fzi-n(6i%WH42-BO2w4_ls^cGtUAr@?gg`=~VycjJ@jW*N`_9~*n?_Y8{tB27 ze*hB*iGhEBjS0lYg2ceYfS9;T;`Ca#ZW*FTcklbY_r81Y`N8-}_v!{GsN@qWtPI}{ zeBTe8(2t^#7dSyM3fx;IVnBqYhi&O1Vcyu4?RD+$>CWABms+5#TZ!6yOB~> zAYmN<;~6DAZv!1LI^f9!3iRgsktt>+nA?WQAfXJKn}(TYkYg^-_Kr+~ip6b#NR|Q@ zaf!ra9VC;LVZP%?RL#Q$%gDY8!8B3C_i2KJlr|ncylYG|F)?;_jfFm#^G)LnjU34S z87i)(l2fU10xb;^nbL`Q2}vw7t4pb~^fY`%#7THUiI4`L2Dw{ppxW(t>2?F`Yv5+a zMJ97yz1MjRK`R5o7;s$o#91{DFM&_99C)12s#(4>((nz>;4tGtK6c#3pnK3@z>tHG zCA1Of7BmQ!4lp`BrvO)f^yU++D`;V8x3I3Dg+TYPnZmkn`RVp?wBFk@NtNd^;&@;Y zV`!!@(!)aShSe~J@+cEfs0lufZXa*e{U{?`w&6l$xdUp(NNa*Ir8ywd9G)dy-pJs^ z23et9mCtH9tgA3-w;vyOdq2BxyDE0uwg>i9eq1KB;$TbnL`?Vqk8Oe2J_x%`)=r!d1sI3c zFi2BtmnzwUH8{r-nnpMJmp{NnGsZl}|e2l971kAK^H BHWUB= literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro b/warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro new file mode 100644 index 0000000000000000000000000000000000000000..fbc2eaf7e7bafbb3e35e0e71924b505b9628c347 GIT binary patch literal 1906 zcmb7Fzi-n(6i!Q3bznqgK`65LvDArw+o{BckdP`N@oTA&b-sH}Tx?Mt#sWn_3Q-n#~k?75XWU?~MH4KR=dAP_E+ATr|!v*mc!$?T!=97o_o5Mu(n)e-la zxSDa6$XsXdbsB?L%YX<05|%x2QqA@`@Ntp?4>225%QqYaU-1lHCS1tJ4(k|H4=M}< zQV_C)Is(;#3c=KYoDEMYz*HZ-`ULX|Y8dJ*EGwuXP(7@sFz;J_ynPI%_qH`UNK+Yc zG_WYo(Wt;k53^!7%!V1n%r6P8--EOsq^5@cH0}gHJo(L&#k*F574|< A2mk;8 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro b/warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro new file mode 100644 index 0000000000000000000000000000000000000000..292bb103c4a05fbb37a527f2c2f8dd7f35010116 GIT binary patch literal 1789 zcmb7F&2G~`5Kf{VIB-Pm1tH5qNJw@3?>IeINJvOXAWj8YYwx5n*t=nO-4Io|BOZYR zkAM*3P!5O(K-_o+4u}IUfW&SRr`tMp%fXl3`Mz)F+nMph^m+ICHYaGp$5dE3z7s{U z@5Vtm@LXpwjDx@rZ%+^dA}l@34}Cv$ywD4yp)+(M&+%??cv%6-z#>(d0_%ARtAJI;H2(}O*Q*hz>o3*c#_eoS-ul!_=acjD(6BzcGAY6d(dFOP=Jsn zv=QhQGzgXsFgm@U09SwX<`b+dXklo#u&$tmK=-hj!n$wy`Sx+N-a9Z!RTMJfbYKx< zXr?gI!&2>r)iB2LC>Kzw2|kT(A8*zDC?{OD;X-A(18T;h)&wb~1t8KKo+Vt~$l%2W zS)pB(&uTfWt1xStXYvxm2vvoU=_>UzLtW4*uq2hO*%)V6TRIx=OaM18VXY>U3t6=# za|Kov!ukNR=irusAzCD#cmocq4*wQ_b5Z=eBEf6~dVb{spsWU{rAE#Cn zVQd9n>{;<(7+6`Hf*%9}-;uwa(&;Pd-}{};*4EFHKi@xoIr;jz+v)V=f&9+r@eghs BGMNAX literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro b/warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro new file mode 100644 index 0000000000000000000000000000000000000000..d393ed09e90306243f4b0a70dd257515f5ebfd3a GIT binary patch literal 1789 zcmb7F&ui2`6y9B=c<`pwi%1B?Q?vQ8`PH695ClOHgd$;*dFe)znK(1)x|H?Mqj$lB z{tKSG3SI;co}~x>g8l`97bm-$?R3+o^^(KP`@ZkJZ{B-(9KY<}*yIG2d`yLr;d_2) z2Z0+pwmouv*LFshwN)YpL>OwAV+T8a=#K)=34P1=T*tY~;dKQh0fSUU3~VsElTub7 zVH^PC86^W}6CE%*f`+byuCfZG`t znap+hUKcU=oeT(Lz){l^=hZyA0zS=h;88-WcKMd8;9H)-n~V$j*ijdQ>OqSELk>cg z&_$qH&>~nk!06+NGHy|<^6D$ixa>A)h! z(6q)#4~u#?EQc|aN11@4p5W8y?(wd>A7zBgHk_+0c0j|pqclNGX%2|Ahi3toH!^s> zL6&H{&S$wCR#oT?%?o*nAw^X#WV*HbnW4_<1XvWy)@+Tltt=gdcPfDEm#|i4c_FK^ zWUjzk3pFc}c~+>;W|wHcf@xHMKo|+svPv=fKgC!3xt=6_c5A-m6N(|ZUYpwc@$2aM z@!Ri?sek-?^XPbMaMJ(MuVZ&jb7)TF&t*(24yJTZM1&7pONWY`l|KR|HU>s!?vgmY)~#CxFL&?zzW2U+@A+x+s(*c(6FlV;Dy$;A>qp25 zgCO#K7X>~VM`3VhiWv}L>0yC~ya+{Z;Dmk@xE>n$w>iA2fuvxOx=Mfz+*>(i6&BV3 zFkVnHaJTURqeGrfpu$Ht4^1(jg1Kv$3{uK6bH_0A0?Lfbv%N!;;A(kWVN&G4MLfk~ zvI&yO$}kThiE4PbUPokymGq*_B3!iU{gT{L$`%Z1sw#shwT(Leap|b57K&X&m?tO%7~MJ#f;&( z!blG*wHwyM7|NqUK&2-5B)WUNRrlk9aM^}SmDLVt7$dC-5=u+Jq&++`a@bU1HZ(8gWd=E}OCi%$>ZgXfq%&Y~B3rXH&W^TpG~T%YZeGG#Pp22MYD?w{ ztV*a^k<3G(xmaAH{Tk+R1p;SS;FeXI(f=vF+0SZ{%*Bo6l22&{={03)@8jp6-n~x; zJFfX|@5B2C_XofGU;8R{*S3fDO#WOZwB}$-_e4ziFiUKK***xnN!A{XP?Ebiw1Tl8 zSYw`R=(f*muEqZiuRk`~j>m zAR!PSRfU0x0Wl#K7B(anHUxhG5(DQXPOo+Awu^_m_kG`c-@W&IGrYHOW`$EU;C&|a zm|SvumSg#z?Yn;0>$;BZS{DZ>11fYi%(g7Yur1RzdWLNpp6mJ-I6TOKV$f-xhLA1V z=OdP-Na&l8@tDy?YXxm)tj%#BQnYh!OB163XlpGk1I#j_t+uo%hJ=Rq=A8Ri&TWHH?+LI}eJ@ePKNkkYL?x30H_vFNw1-fm6wK^w2O z4$w$|ZXBRuDk=$+8hg;vAQ2Zj0UrPkWM*Y4WtNtLkEz%T$BYVT@P3f#)qzU4gQ?pU zu%m#h8K<$#b@pC|F}Sr1h!7w_*%JrV+&u<9iWA@gW_h)I!&dMW&){Lqg?#LwjzRUH z!ayJaAxo$uP%WqsOdZJB@Q?yb_0g+OFt4D7q29u>f*JzV!)glizUBMd$5482U88xD z$cWv6MOlVM1x9+97Q10KjJ`aI1*F9U??%^;chUVQrd+n+L}j`IO2(ej1R-MyAX*)s zDO}#j;K>G=q0J(n*>adyp_Mdu5?*Wt>fA=_tG-0bDzR zH6IKPWmT5UF<1+saz$p2;cMgZ5!&}*6r>;!K>}5*Qj9*K_~m0ishT z+wnciwCt{_o7h3R?fQn^vuvW{(6i)?7x|&3r$)Pw{(Ys5Soi<{ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro b/warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro new file mode 100644 index 0000000000000000000000000000000000000000..0757a29186efb1aef7922d61e32ab0d45e7d5b79 GIT binary patch literal 1789 zcmb7F&ui2`6y9BW@ZeGEMI;2#OSAd8$!-rli69gN#Z!?m$-H!<$;>)4>AIA?sv!OY zo&@h6q~1mFU+`ZLiXiwGIJ3LiPMbEZhg@df_kHhu^WMv&{kEcC&gZyD!k6hQXR zQE@euf=Z23Xlanhl}^kjkj65zx|BLgPs8U#oQ9{A2x;(HkQ=puYPaL1+YRtQ12;1+ zbD8Vvy)I%1TNx0>faAI+&a2tK0zS(N;BiW;X8BH_;TxX8tDFn@*l`eALjgjT z&_&bk!07aX0$lykn@_N=poO8`!n%SM0^P%A3hTb*XWPfodT-ApRZ+-@lYvEy zp_#%+4@L@yN4bDfP4G!{`*^GFM>*lL4HqiQ9Z)llv?fR>EdY_`@GRl-Mg}i7 z$O`SMd{)b0U4>cGJd>9gGE@~prmNIX4Rt}Mz~V%27k5JmzutkR7BPx1ABR+D7TZ!DI4N-?C@l&PI;_ulu9 z@vogXKfk0d?0as2yeLbp(&;Pd-}gJ6jg8}@zkj~|c=zdBx6|p#1NoiJ;~%Yx15KSTu95|wK0KsZiAr9T_N1ANX8xlgQgoFg@sX~imPa4Cnz1ZG{sLBl? z!HxgWb5BTI`2p}NxS(?72Vf`J)aka{a<%8ZH}gC*em;EDytN@2%H^0VkCKPIL8lYO zgSa1dgWh%=^?IGn90_2`v%+q&B2Dj0cvk?!;ISebf@p>JMqFe_d50h*<*XHLphLmi z5|1H6CwGoqHO;}@aa;kI3*v4$?ubH4q(0j}av93zw;5t|1X3kAQsY&S&Q6DQgFvH7 z9;pOn2PTAYY>1z6jFgsk_Fn8d6RO6})0fU%AKclNbAd(*?BD{G&{9dc)>uPpM-(+W ziOc~fIND8m@}mvJr4@wI#B6$vT(Zs?pok##u?SQF5l}ihF&cLA_PcM zHo-+TcdmgS(G+BYc~LDt*tYN$&)_|kN77hqLxuk&5 ze)Q@StSYEssJF1JpoYNqu$scEZ{_*+39R1Rcg=X~h_iu3LZGR^Xb&^943@*#*GE)A zW+wP7x_-P(_an-rZo|3CVh5Cr1FH#!oTq?Tb$AwVeWQct8)S(NO+L%zu&Tl>XUf6A;Nzw`OIWLu=_+yi*0zy@IvK^GjK+C36i{BUG+P(GB|UY<7kA zTbL#pC`6D#6{{?x|5JRmpUot>v)l6}k2wK6{}&qK!S2Vuk3Juh*B|zdAK(4aI&FS! zn%EuRZ~GJdn~ZrO!PoAogvmA;`U;5yP=1-LkD~|=dWd+WGsNCDg4pX1MguR5AVv_y mow(oivY>6GPoFdzt=7q(-=BVc`T6a8v(;$a&?k*b9{&IynlAYO literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro b/warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro new file mode 100644 index 0000000000000000000000000000000000000000..a6a7a6421f78421cade6831befbf666d3d9b8217 GIT binary patch literal 2021 zcmbVNziSjh6uyKQQdmmTh#ZSpW$$+PW`A4?D+vgSpjZW2W@p~!R(E&Kow=MxxPQPx zP%Nyph+t=BA%Q?d5QDXah=MkXg_V7ry}P|kvdJY1Tg|-h``-KJy|>qb+f%3Kd5YV- z#e^Qw3r^E(A{#Ya+cRtnnYL%2Z{rM7p{rq*Wt&FRv2A1-4HH=wLgzT#?LbOEPdiBf z*)%#EvMj+uUxSQCESspGF z!EJ)mCl#!hH3L{uZ>FUkvm#f`Kw5rQDssnw{ z`is>=G-60s4^c4{m6%D5eQ0Trh;kjDw}JRFv!awDOH08=sn`!EEEUq=gCNtL1S;J2 zhi;d^wgN6^oJ2C$(R&@m;7nw|lmhjOo;a-L#tHCY6a)7O>y*nkkb*CH2KOQ^0DzvV=(lss$y2p#vG~9#Md)K6?2H#uZFpm~3HD!2|-;!*UAazU2qo$5482 zMN2zzEF<;?7H1jmGCz>5SsG_kSvm@D zPXO1BVePcrN3tqQ<^-&{P_ZI2+wio0{}}B%(DM@zm|}rTRw+jRqxg6~=aZ!M&kUA4 zVHC(*ZffQ6{KqdlS0CR0@chTZ_NN^-yLsx>R35ujuh;5b`EzNp4u`sQPxvXX(V#AH zwhE$NBwHt7J5FeMdO$r#M-4O31Kf1=kh%u(47U+t&=aGUOaHo5sm#rN-}t(@@%!!W zo2ltaW%&K8sOz{i3~->M&;%XPkm{H?ST|e>frkvcVTFb0PboS(`~KUbcYmI2Z(aOv wO^Y-r3S6Xnwk!`}M05{>t2@}R5vCR;E>$&WW}ZIVeX;fV!RzI*=0U&z0_M_!c>n+a literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro b/warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro new file mode 100644 index 0000000000000000000000000000000000000000..fdb07a39045741dd7aa41a07d0a76c0277cfef7e GIT binary patch literal 2019 zcmbVN&ui2`6yBCvd+?^zi^vj+dT4g@`$zGpf*>f0r&7XX=B1mOWY)}V*QG3!;@{w1 z@T?#`D2VibQ1IeOFXGWdPl`@!P6dO7}TtnhLBHNS0b9H zh^y<6vzTVn#yncjX^Y_wr0DhK4TTT7pe!|&95Bs^ve;Cj7!tz7x8)5bL+R)=MOhpH z<3Shk&Ll|WD#C0{6R47h@jT8}ix5I_L41#5#D#S8@x!~#e#|?~JCB+peNcvr%_B4t z$X1U~(Iu6H3XKD3VGxfCoq%-#2O_hwlrl?0!p9ju2*)(z!r;Ro-K_(aZUnGFsVW*X;#D`fe7^yF48U34-9oe`;Z5rXwAwv>(bJZcn2Jqasq3w z+dY<5S~90#EriMyncJGD42LIZKY>Az0!IXKRIy4j`i$a}{aj3vGQ2ce@|Y69bA_pm zg~8^HUGq=>uYLaJ?duO-&b~XhJypamwcD+BU;JD;w8x+=+~YyUS|n_9l&=DBm&vvX zSdNBGqH3mvRV&h6)hD5$dO8psYLRIeL`}6;A^qc4qcJ!4d3Wo@+uu9yFHScav$L;2irC=WX;*x51U`UegF9B&B}jk>K67*@EjFuhM`(M kw$ux8Gc#MyzyA8Uv;AsqqIuZvf7~8=0ssI2 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro b/warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro new file mode 100644 index 0000000000000000000000000000000000000000..45d173d13ab4faf31761350ba03109bc196fb9a2 GIT binary patch literal 1774 zcmb7FJ#W-N5WPE5P*5QhC=jwNL=~Uy`-+`{3XqUMNFb^RSz~)Hw_xv@-F1#rbiadw z9-$OeNOTm428o)6KY$`?YIg6=mra~Fq1~PL-pt#X*(dSK_LU7mp%4=$9g^PJ@_M}> z2!pWi2mQbw_@m+N0yt9X7-5%bnPs;GzAlj_=+H8ck$3!?W5#ok&K`0>813{nV2`t| zNG6!W$LssHoE2zqTQ@mSC73yqf-=>f+ZgZeyj6y~Q$jLfLWv9Z1o~KY1 zkC2?uT^*9LL=!(^2}mVvJ%9Spni4s&9z3%a`e@HLty45Iq`Rl6_=ZZxl*Tc%azqlX z6Nv(oNM%-)Qf1jQ@Px|a@PtvR96bs0x0*ne+tJeP8hB`c>lx=n<+^&WvlvE=43MUn zMpYA>R&)OX_%X>)L$+sSof_s**>1pdpousZxwMgu)sOYG)8%t>t(PS#y}kr ziMgKOqv+=G*4+<;3e|=SmE{ho7(=58V#YEAS|6SzT-~VP#RgfSeVxy0IjpO&E1DPT zGQ}~JnN;a&^R;^hZXWv*l2JcLwu+L#Fi{eaHW64~ARSQ)sk`KMWp3l$G zeuc9rM+qrNs99wg{h#9N{j4X+o?lxm`GlpIEdGVo&-eF#9sGEAqkZ+y-EH>xZRfE4 zsjXwTUAOB_)o(Ikr9fA?CnGAlY3xeiyC~f%S=WQO?}zBD=iR;P3D`}3D?-#`5Q+U~Skm()qCmd8I)!7r)+ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro b/warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro new file mode 100644 index 0000000000000000000000000000000000000000..fb205c3bffbbbe560f209dd3630b2d637fef431a GIT binary patch literal 1789 zcmb7Fzl+pB6y9C*u&}U@vk{3wtuC9%uiflb79t3OpjaIeW-~9h(PSoOCburf))s>Q zgQbm?|AF>`r3hCD7WW@02+r(o_U0~kIW3YR^S+3qE1OO39re z@`hgM3`Ynd-|<}JjcygV1S%{&EcB5xbX_lSf`RM!11Ah_aClh(jlrT-K8CXAT~An< zV`1$<$x}vq?k3(VS)a!f$nl43`=*!`U~U^`2{9{)xn-D13K`+@+s?j8alSasF-;TT zA}X+$tb=5-GAuwyqG}#4%9QS^5W-?b{E)?1NNMBg;|Inx6%*tB6Jwzd=6uUIMI!^c zdy0yqsboxQ979WkM5=TmUO*hl%<59=EL{zsQgIv}Gb*IPCqd4z4OF`wE!}Q_0}b5F zI8SA+tNS{OVbIEe2>}w-J#kvi-ap`zGy@*RtZJ5zd=2053|^&N$jgq}7<3OB3k3*J+AXXrXd%!&Y^Jd8TYj>Akk)%UCatneMjQ<+ zE=xR980lfIcEf5IL-{EckgEwkif$io)%`f7T(;ptWw`@t#*x+pW5zPTv^hLWxIB@; ziw&|uJ1U>ma#&Yk)-=!LA%O%}nULu!^fHXuLB4+&qW1DvC2% zwI%ZptV*a}k!65Fb3Q*u`vuIR90Vp<;D%M2(f=vF-p^{1%=y*Dl8+gI_>wZUbLH#1 z&v(Cld2{>q&4Y`--LQAq{n%Bp+qT`er}F1AVHF2kx+fya`($hjT<(If>tt;RMlr@A zwosT5%f|z3jW9~A!GQQN$j67Vm7~6rKD^iIY;3&!@#o;z_n+@Sb$gx8g-%DlPv-F# DN8U6r literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro b/warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro new file mode 100644 index 0000000000000000000000000000000000000000..79febe8700385cf5efaee81303319c645b3302e3 GIT binary patch literal 1774 zcmb7F!EVz)5KSTu9JnB%azV(l5T`n}6FW_Mu8@$ZkU$(z1=iX-Nfzu~v%7AHLcWI! zs)W=7XAnQY5mkIZ&wK#8Nt|x$#4R^#ciww5Z)e8O<9E$FJA$HIjG1%@e!S;}e$N{O zonGMgy82`AC`TNqbd0duv`Ev30zMQ#6L4se#lTzsgCXM?lFl)3K^SdycF-|rZIO&2 zLnrrVww&f*?^`y9gmG-|TK14YiiJ8mn%NX(i`xuQG6W%`9Le!INM)zOLeEpEl1E5R z=tzfPmT2N*zAzgGt;-Hw)SSHPhGu4bGOmFw!gwlVZ-84$*Rqp}G$ z)!e-Sen?UfQNoI9`Cee)E1tneBBXlksE)z(pu&J51*uA?BQPzf5G)Q-+c7y z6Raz!VW_vTte}R#^st)3x^KnR_VJ9~JF@k7tB8w%MVzCl#wZUny$n{v*jGnHLZ&D9 zBD#LOb@wAeg=)iv%5n#kj02+yV#ZQHv^qRXxVllniw&|u`#PW1a#&Ykmo#tGC59m? zQmN9_>X(K(WfS00tXi`&&c3m94Bn{(VPC^qBqSsxP^Su6=ey^|VBZDbxoK2o05P+m zf|xrYBv_b%0SO5)F(O6=!~!ED=Oj+Ab?df^hr9QE-+SM^_k26NKX+k8Fx(eCF3p%; z>mtAFBj2}O-$jno@sM}5k27G>)WaOq^?k41_B+03ckH%f+gAiU%z+UwS)PWF%{!MP zo~2lt+mMNvv-$Q4-p+VSkRGJ?&81yK4*OuNH;oJkB5G@=+1D%9ELuEB6RzD+TU zBM>s^W7(Spsbp1{YugG{@(7v5Y^w;NoD{^jIKfg$H#hFwYz|`CYu>oq9P5KIT5TSq zkpSB|Mg?gq30E42(8?eg7dnCH0|``SWhrHrZ4DnYc^FPOlgi+uAk?h`m2L+Uw<};* z16MOnW0mXly-s52)G}a7fd*wy99Q$&8Sqh@fCvcBtL58{hOc-AJF$@Jv4c7W-Gd4P zg#@H3p^iYeph7TlAmf7*3PAd!SD#>3K@CH_g=Gab1iFXS6lQ%Zj<%1j_1>nz@+46a z2Lp?<3=a#8@-QuS!*m!ubrefTiwQo6t{?BB`*F;KYQwS0WCxUtzSaaG=Luj|9i9nX z-KgO42AQH!kJ^T52Zobi2Y&6vO zyrRVReZX#L`ZRP+$40~qk-cUDCY|;gju47ErRXmuy0rB1-^;gqfA=5DndZ^j{{#6p BS;GJT literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro b/warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro new file mode 100644 index 0000000000000000000000000000000000000000..1c5f8e873f3a383c2bd79117393eb67018322bac GIT binary patch literal 1774 zcmb7Fzi-n(6iy-r21Znts57KV=ONZciHdZ}BttatDGzW2U+@7?40W&6gKpr{ZNCLNO883g@d z-wVP)&kw?W*b4&hc7Zrh=@?&PSh;ua480BHEm%(Znhw6w( z$n^xDMmLYQ?tVn5P;IzSS?+*}ao=cyn6V5Htq;!UaYzjPzRcqG9**BJs!8?;6>`Pe7qPURNSTa{&)k4*Z*y$-S(cO5LJBsIDbY+G$;}h5>kLFLe|=z%Ngulv%Ai5itYzc z(WIq7qNd_s5LzVuLOKLLfZex|q76{3K-p@#X9Wrsl!`MzTXzU4+?aG$}u8gL2*uFC{ye{^q5XoE4N&V!Sx4@nPZf9KP zBG=V>UBuvbGN3GjEN*(@yqZT>z>o6+Se%l&UB2Zi_?BnzK4)A!cHG6FdeCCXpa3pP z=ps-pXb~(Opk#VM0k-<+?I&1Q(817cVN*c|f$Cv9g>~Puv+ZLky|=65x+p}%$-p8? z(M)25ho#&Nt6>bqQO=>16MPcgJ>IhWQI45t!-dLn2Q-Y4(gX=11t8oWo+Vt|h~UKr zS)py2&uTfWtI!*o*WxmRF{%qL(v|9`hPohApm8Evvo+4PvUC*Q83(3c!dh3=g{;bw zxdN*cYE~rmtWclNFVTJrv$zC~GQ?5KD#hsk6kqRWIZ68b&SJ@@B!l#(G*$cjdz;m_ zumAn@Yv<_kpGPnI$GvYo8M|egLvt#AE)!BSFokFEb)L@(qYQXXJ_hRgi>6X$__H@e@tEapUmE&ktV?zkfXH^)>C9rit&_JpKU$ C(=pTl literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro b/warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro new file mode 100644 index 0000000000000000000000000000000000000000..f8097742825161bc61a64588a7553d8efdef31d7 GIT binary patch literal 1906 zcmb7Fzi-n(6i!Q2F)*UCAQV}sVyKhzuf*;G142SVAc2@FWSxD_jlsT4edmU#%HP1m zKfp@G!~_gTtcU@1L+T&Ug$X(!0p}!6uXXFTlBc`(ecyZEz4!bmc)oCDnNvLAeJ1pn ztn_Rfx!ta7+Q>9q$MHPp<^X3vg|3FVo@H9dGi}2`hHXn!_XdZ}9B2qS&C>v~MeBOR zvJ?w_3o;%vx@a!rt&FvK*oPFqySA-~(EzlymX<-tGNP@vv?zvzaCx@Atx=p#Zc|L- z2)OVESoG&XGFchsAS6*G4;NWXH;NF#!h-k#3$c*Wt*4Lgw}!Fkx9&Y@P4qzL4{!IK*olr6kw>2UVVaj1vL!y7M2y%5U3tjQ<(QHKi)n_>AiK0=1C$W z4hI%z86FiF>0w&zhS@N>@+cON7886JT|eGM_v4sy*@hF9=?*9vJ*5c(#uC7^Iy_Uj zyph3^4KhO;MLx6TFt0)@X`abT0ujy=A=53?j|_FfhLHJzY|Y9z8_LpAct--bb_Q!c z7@W$gESYn#7DDBU%pBxuodmkU!H zD{pW8eBCs^-r4`Y_v7~7!{+X#_X|brTBp7MW@Zfgc5KSTu9N>n^1wmv1;!wwS66d2_5fTy-5{Oe(S?k?#vtaL<-E~7$g#-Kr z{s320kdXKx9DC!$rDuKsyGfjG>(njR-FffLyq%eS5x;5P*pdw8a>A8M$-`mjhhu-- z9R{Ppc-Rg7-r#2hJ9RZjN;%v8_ghEQBKHEKX7|Is68Dca6siGXI$vQ}9r^7DBL{Xy? z$sBN`Gb>9ev+P=U%G6mn=1gfv&x3+t9jJ6WTDn~UhZeY+aYl8ntM|HyVNlC}2mun6 zO|Yrv-WBi(O+iMO7uE9pzJ;%N2Jfj<`mv)r2HS%Q1A!EjE}@RVwxB|=bU^Uw1qB55 zqgS6`T|o^)y@h23H3YVY)fCo!E6=x&Z}r};W5!!YoDM7!0?iCYdzhJJuo}jZKB5XT zGr_0P_2X^2A5kWC8!l9qJD_A7TTKvio&sXk;aS4%v0r)$*D40XzJQgtf@?3t6ota|Ko-RIW%7`XgsPzeM{j z%%ThwB1oZ%RhH5JDZbv%W|Exwt;LeZoB&?@3yq^6dk-Fc{(JA_=Hrj~C;Fjv()`&p zu{)mE@uvDWneak_r`=N#lN}O!3Wnio+lo`h9nVlcC!uy@5Ll33kUZ>h-(v l01ra!W`4&=pFC+aTCL+h$6tPbJNo*o*=jVd>61n!kAE9>FFODL literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro b/warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro new file mode 100644 index 0000000000000000000000000000000000000000..16dd95244e3eb22b38a49c871c4d2775dc606e78 GIT binary patch literal 1774 zcmb7FJ#W-N5WPE5P^3hmLCCWBXyUW?KAqGN5)u*;h$=$X+B?oI*t=$Toy#dYiH?83 zUr0w0Q6WJ`&o6*JRFrh=-kmR-IB`N}t>?Wr^LA$TdHklmu_+lYJLUJ z47c^i2=&L|@IiqEFy&ccw^^BG_a(e5fhFLvGLJ!Y(7lw494qetgruBxdYkw_@UBcI zkmFBxk6bk?z}<0N0SOnx-E!QNLPn%M+dFa@&KG}k%xDTyMFm!qb&$?ZhYf>3qbeS$ z1ZDdsgz&@=KjR5jTH1N_;;A#GYT`V3=`8fYoo_jpXk@_lFHu33O2)OuIka{}QKJ*d z0+L8)R+Um^*|YGJsq^rJGo>B92twl~P~~>Cbh`!~THt!dIn}wY?&~UsQ6mE;1V~gh z!DTh~Z-7r}1~N)`SuZ~rSooS}a7d-nmmM`R*dEjv2xOpi2~7mH1vP@D1A1&_ zg3qFx$J=y2rcCNKT&OH}K*hLiH9^dI2AI`{X9?GTbns$>tkB5hvsw=8D%^_Zwf;#U z#bu^+x<>unP-lD!B8qiu*2WoGOUL4!DUj|ptYuML$!aZ`8?YLoYDJ1+5W4gEHQH}s z7UiHY!3x)`vW)&u@%4T-ljP3tES7x22_%bmp>^{0+u_E;^6~G~`|@l2;eF?{{kd&o zcYMF=PxWgu;iUv$yQd;1yCn7%7W<(5Dp@~(9v%!*;z8K!dxL(AJd7arMx$^$AV@z@ j2zzd!_xvt3>GQ!A+Qbi z@`$n=3u_-3Pbt}Ox9~orT^^4i$L}s3m|`{obH^|l#FQoGwqcG^$PzBkb`MN~^YS*w zBpm@4(FBX}Do7?P!(<8)Rq=4aQnIH)5*jPwJ2b{ZN*fRE-8QDF7#p|l8>K#&^KIi8 zjSR@%F)Bz?$*9ygf|dq}ROv)~0&yfWt4gV|bTxcR#8G%miI4`bgHX@}s@#qiZr8xR z2CiqEr!v>&d!5A4Z)Ctp0!dW$#BnwE&VV1K8Sp5kMZJ8-)9^LV;91IreC()+LHD4> zkU$1Pme53?TTmldIKb%igaVNM==CR9RnWlDY++SF1A*>gJ%v@@^7Zy{wBFk_Ns(nT z;&5OwV|b=8(!*TshUG90&f`P-}uAr5RvSAD#tV z-pJr`gDlZV<+EH4t18Tj=8?QiV1$cI$aIzZk)h7$6j(Hrtyvpqq%9qdcP4Q<>Vj z{`SV_uldU_X!8?%d~@Mp=f}AZZ56v?+g*Dqe=cKMaImF&A|kw-3~hng9tgWi){Y(M zA;&`&M*X4XIcQ*o0UlT*-$O1+T;xDtg|GL>~bvl2Zzk2=s=Zp8>+8eFb;`=|M Rs1*IZCR%ECr0#n0e*xr%RZIW? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro b/warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro new file mode 100644 index 0000000000000000000000000000000000000000..40afc7db9293faf7d256e5fc34a186bbae48933f GIT binary patch literal 1904 zcmb7FF>ljA6i!Q3F)%_IK*+Kx22>|^i5L1;LKsoW$w1ZrxV$boajRd+)pVp6>>a<}NG=MtY*lr4@(E zuH!bbhg^i*cFXHHc5AsuGGNluqOQ9h@;a!6Tx@%7)Wo*yUK6m{2S&kS{WO4VzI8R? zSxTg}1(}FBn{O_Wt&G zU>irMU`-|AO5*@p86@Le#}_@IzRIj9rO2|W;bSHb!YOA`8GIOo-6~Mwwm)&Z1a>rV zIpZ`|xlZ5fIEHp50|`S2{h}w1s=0Lvd=w`je9HUf@{z6KOP;}#SV;BQeiei6L5U%R z1f(jVia@uZL@;q6FTw-3^KZ{1}5BvBFj z152`u40DX~FwJ+vbQnA8D3*}s6TBZ?J>Gfulb8wBhGUh<4k#EstqB6o6CkWSJQKLO zQNiO4GDYJ&pXqX#Rbdu157lJ|5$PvVrJJiC80v%%AoBy&nx%2Z+S1W@hZ2N&0&Bn5 zJC;>jGN)k8g^CrKIjCcfMki=LhM}K=Bq5QcWR+(08O3M&IiDnRbaA}oDG!03&rPlU zdGPHD!{0wVfA#d^+UpxT3t!H?pUY!c8;yEnpnfi0-WSkN?n$4CdKfe$$u>YXiewwM z7dnVSU`3IGESt8l)p4+6xo*>Th}(1n4_hg!=h8oJ)@qB3Z{GcW`D<_Y*`@hfZStK} zvmH^=vax4Hm=eoYKRPRj9BQ>g8zG7)rfs{>{HZh-7C!Ip{C)B7?WeDEGttAf{|Am! BS7iVI literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro b/warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro new file mode 100644 index 0000000000000000000000000000000000000000..ae0b176f8102662fb5cb143512ea8f6abe070c75 GIT binary patch literal 1774 zcmb7Fzi-n(6iy-r21ZmCR2d5)hC2R{q)j?kNJvOXAf^ggXWw&Uuxgn~uBH&+O z;}6Kh1QRP`H~xi6jKIpfBu=k&>y|0e-TS`pz3<+8ej2@M-`bFj6mra!lhOw}gJCf8 zgQ2(G^YFJ93`X}0B7iB!2)oJ3EZdaurUVv)!^%7Y(edvlT;xPKhahCiStr;ahk|!y zJcgXi?;P1`T7bQ4*#crNsJ&&`NeUU2c(#9JGmTvC8< zK6?EL))h1`G+S6z&_G~%SWjWyxAJ`Zct-E-+j_h);&fn%5M-(`=wYsx!D<+Xc$6y0 z^#q?rH;=dOev&eYZMaZb?tqGMWHdpjRg)79!{hC1UD5MhL^SsQ2HSULvpRDrawU@eQ{QdVQhT!U2$RVz{qyrDgtU7`IN zreO|>P@+i9D#Pgi6kqRWJxTWL_F~D$oII^bPRm6cQs-> z#nL(eE@DPEdmVhhSyzw=r1;~NLsQN&Ft-hp17SQgw+u6iAqj;#+dVWXPRrXA(>MYl zgAB{bDo7=(!UhN_RK+7CkLg|!5;9T{-(>_#C2c%>aL1U&a$?-xF-m8aJvQ`XyAIr zX{>TxzSn6CULykzLkNSaCr+xle-3;UCm;gC@_PBm)$ldX;At$RdhDQyLHD4>5JCb{ zmC!_>TTmldIKbKTlmZ<6(d$pJs-S_P*}|%V1_Ir~dJ3z)73=MTwBFk_X`Uo1;%Hzo z=Xh3Nl!s}t8s5UHB7CWF~^tC1!GnN3R_2F5-)r|@+ zH^>t06!|Qd!>S6iqIsk)Lx^ymNR@7(er%`{HU%DxRcqG9+0mAc#ygWB%rjW?EIXA| zTQcWhErhBS$p>g;&gW-n@53xeLE;cgT(e3u`X9wt`?;7TbAGv8@`QyzE*7S?cHZ9q z@cZ@i{aY_TKa=lKr~U21r;Q?Z+qS#*RQ+5gEEixa_hdjtHyqm%^F5Gum8|VW1ovIX zw<3pN%T@m-Ya9)T<%KRn1QCaLu9c#0A^qcKtJQ9Qee>eit3U6)eBan?wHDw15p_z@ OpKGF}W?Sj57ylQXbXXw( literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro b/warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro new file mode 100644 index 0000000000000000000000000000000000000000..0fd6cc6e0238a81fd033b1d3eba281bfd9829c1b GIT binary patch literal 2021 zcmbVN&ui2`6yBCvdhjUqpy(3BQ?vOo`PqXf5iEkB^dLpTBzfsZlgyf#?Yfk`i3h=J z@t~I;R8aJwCqeKg=)cgj)aqUEqLbatcG|S56>obr(67>mXaTb(O!N3mu$8#$+)J>AGcEDsnAdMW$vtrgo0Py)I+{$XPe_A)hwR zMkG%$lh+`pG0CR&dAydB77f~v;y0()CD!kNwAhq#2uL1E3r#7CAqgq}wz4i|I31p* zIEy2o%K1hRw z<^dWBWUB|LXo5;YxW*ndH;BcBjz>EXcs#SRlrl?Qz{eTe3lB)fxWW5Dnq3Df-S$Rq zSHPwKu4bIZJlFAk9mZhQGT<II}*EnhVRe8n@kA5+FJ+pA*` zJ*Y5*kO1Q))DeglR0u{69f#_j1g-PGi{q3U)y|*G| z-6Y`=y90~!9QO+h_b@GX!+01S{wZdV78AT1T|eGM_v1LDybXscqa9E(xhO%<{DcP&H^>;R75R*p!=wtSq`A!xLx^xUVLaVJea}!QqzAd@^VY14vnDJZfw#|q zN=LAEJDo#Wg(dS3tc6gyB6Cx9q`}|_?Yq$TQeZg53|FiYj6SCLWIq>^Bn?gtmwZ4% z2<8e?8_SozKU;dRvGnEq@BH!eGf!qeoOnM~#4ajIOX=~SOPh2lDBL~fWwaIg3d8v- zFr`dZ!McrfOATdY*rseCH0Gc&I@U%vYI@aHc!(cJI%Uw7JlF8}}l literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro b/warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro new file mode 100644 index 0000000000000000000000000000000000000000..bc981b01621ffc2c9f7007e2a6610132f0b5de40 GIT binary patch literal 2020 zcmbVNJ!lj`6uyKQu1F~nLF8D1q{!aQ{_mw0K@b9pRnTR2=WTAy?#{V0oAU@)SgT+m z7B-ePK^rT3L9wzCD+^H&D?tdNjk9;Rmq|9cL}9C$_kG`c-@NyB&A&CXu*g!}WgW`Z zh+J^mZPzhPLqocY^tOczYpIJfNVzJ7Eg8slbc7tk(2;E;U9-TI2qn1 zIE_MJ-0NcAnFNVkMVN(Bb={nxqm_p|KAw{NYidXZhIrQ zD_~0kS2Io`k?Z)qj$*KF;RynyD_@{uXwE1tofh;i}Q-ZTc; zg9-zI7`P~58i8y*eLZ(wnj;eLS;9wxjv@|8F~NJ$)5p8$ejKGtwBb-?v;#`Uw$ubZr7_^N zIy@t|xDmm_4KhY+MLy%@FsVW*X>N#10wK<0F48U3_YHMSdysj)XwAwvYtqt@c>5ff zatv$U?Hav;qPOcU~5Cp~QkT9FP>_(HBn3=tGJ-4*5wh+M| zAZVu`SXx^MB3OBi2sYwBp_ARs-rVIbcS5R}_kG`c-@Ny7t#^Cr)EXnWU<1mvG`{E~ z$M4Q;t9)F5x}m5gM6`_6bwy25$YLhWHn&xR^XYAlNtyuT zVS)Kz5hRioVGcq9Rr4@jrlenm#5AgiuhIx}A+6lJenlCje4t#up-lBbovbSdXkO1Ln1KgjUfK(*W9%JmY(axy=0HhDhZJDQkKTNOMFlMk?H1M*v=GQ1Hd9#iE!*EdNb0>!l?<~?MC=YM zE=xSFFv7#U+70tz^uGX_!<^eD{$ljiWu;NnIE zPdCUMZB+Tpm&2k8wWhfxE@MdWFykWKN`22zXLJN**b}YU7-vITIuh@g15=M+9Tvr* ztkRM>25Ti$ugFsDY;`g@Li-Mk!yGt{F~<$7B%}XRe6gRaNm3`Lr%OJfF+?XTQ#)Jz zr#t5R@5-B(`0U$<_aCi%JMm$uirvulu09e!mjN9z(1m+EB&-|vbdJkDaJ^1ecb&wu zFg7%>d|$J@#M5wWMH&L+*q&uOPT*)c>Q>T!E_FJqt1q7a{PgljA6iy;kF)*UCAY?4WRL5sKPVCMI2?+@a#8e^ce12&R_MP#a8=@*3GxQfA zK|3??7uXPcS77SMFW@eT(`((jW$|$LzVCbQyZ4@-#jm@!HaW!wpDiw;Nzz12;3yQ<>}P zy)I)Iwld%(fh4MX;-Z?pYv9Le20S9HYL<@%8ouEfyi2)|j~%r!=pHl}639Tv650rK z3mODV2TC@*qyR^M^yU++D`;V8x3I3Dg+TYPnZmkn`T6!iTJPWNbolZ3;LH8L z2juhKufyY=-bwdcSH*7IcHf@LpUZ?*9Bk>Hh$!zTu`O`93&O6GwF$U^?~%kB57EdP z#Ia`u7!eDN1|bO@-wUy4<*2WuPabtT8yi30e>nQ{uf(a2K&zVE)7wY0Vc%Q z8KE*DRSYa3AtCq+7!ZE|s0#=&uy$bKoW!Y9w{F4mG~8~Pmaf|dHuQ@LNr4J96^8ZfSZlX!-NG6+YgDy}H5bee;q_f7k zfTb}JXdO}>GCHd-lJ%4|xYvQ0yk6Q+L_Yy#rLLslvD8q-zpNlBtK{8nxW~!=0V4J=7h($6r`!#LXw<6*Srr%*tgP4HfH^>}C9PeRIN8xB=QJ0NGog(h$ri-6Gb z@QmQ{L)GTlslYN#XDgVb?lYnH}YD=eJ?Z(jgc zj$rL3$)T);C36hcOekNGsj1q^U~q)?eds$e2;vh#N>&w&{zvi2e$FOI8Jrm|d5`(v zEo7$FPF&c$G5G%H^ya6IvE5rbJOAP2+nFqOrP*vWd-CVfVO7H;XZ}@IgkaP`1 zGf%eZwm~&@OGSnrxX5rV6WKwaqrg=?)c~Snm7rK{WYWJb*J=w3&wfAM`ugVilOHp) zwc6T&ap$I53C_V0*Tei~f|A&dqIYe|zzM=i~0}Num1<{|hdHdcFVv literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro b/warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro new file mode 100644 index 0000000000000000000000000000000000000000..9103de25dd953f73b36c83070a921e9a4f84ac37 GIT binary patch literal 1774 zcmb7FF>ljA6iy^irp8S?}KWeeZqu-n%E!%kIrhPEf(eR9HBYokERYy4gJgCx%y%4# zs(H9zm>j8)gvN^aF^!Rs(#HO?N5%w;vGMS^QR#y@+cMT@WI&GAsJNO+My19IS~?=I z(g}G1aVRsZOR2LQXn0J-DmsFQ zBw^hI>uMfe1E1myco@^NS-#_G_=acj26G`FJ8WanJ!mi_kb#gTv=QhQGzjJnFgm%U z09SwX<`XO{Xklo#u&$tmK=-hj!m@Aq#rAQu-a9bWc*}_Mfklj=slrGPbF~Z>!?+`l zuz*}m@OgCmc&qM5m~h#KmCAev)Qo}F1QDefAkrM3Ib7bz;A(>`(5}j7u^g6Fm^ICz zyi6cPWhP|0N_}OhGdcklMzS><zpsx6souqvT?MKa&nF=w+Y zv|qtA%t4?83DmGkGx|Tpm-|^wk~zCoE%}%x5Lf>~=f{Ju8{eMp)4yNd{hYpdf7ml0)~4%K1VIoKFD@D;nV0Rj$xNJ?Y%NRw1TW%Q zMDgm$KV=a_yvpLu|G=5H=}tGh+4Y#2_kG`c-@NzoIDXZ>z9A?o#F$Bk;H|LN3%x-Q z1pUw-jz)p+Z54xyIy zIr_SJXv=8<_Ksz9NEpZVwq>UTGAz{D?x9UlKEKToB`F9Q6-bU(K`J>FHt;-!s(6It zgzo7O%o0ufh$ToWY3tdOht`D1vGw4oHP;7wwr!oEkpbO1L&Y~#GNv@v(8>`>v`!=n zNFtS4RZ5j*VBiUr>+pn8sT@5G@`p{J%I#?3b`3l*!1auCqHrb$%pn;*;!m5G>0@K5K3ah>qr`yLfdT-a(%=I!@4r8c}h=g2E z@JV#@cjGuE0Pbq(4NgM(B6k> zl!HVVNmR4SF#12mSNmB{l0CaIU-AjVkj(!Jt$V+(-u`vx@AJ=Z_rJgV@#lT#xc#lI zV|QG)>rT|)WXwtdu5wRCRCICdO2qd-x>d5SAL7vn^Nx}OgJ75@ j7^#ok>uTxa`>j@|bM*1chohgL-febTtt;xFRZHU^+M+P< literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro b/warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro new file mode 100644 index 0000000000000000000000000000000000000000..3fa0f92a0ed369cebfe1f376449741435103b069 GIT binary patch literal 1774 zcmb7FJ&)5s5KSTq5EK;XC_u=v5Y;)h^L6&MAS5ItBoGqP30Z6JBw5bh_3f@NM5h!~ zH2eg90|>!CfPXOb!$BDO{{0+rpwcnIuF@h+?+G|4fF|J3B8!2y{JTTOGbEiu;DRvP>TIDy z&e|dwLxw)xKCvSZ*0mFw_?QK=j~3-WjBK&9K!!tDyUZ-A>AXGG7Y#o6}pjNaR`^?0j@(}6{tqp8Ly4>P?CmctmR zBO)Qw6MPz7Ki<0g5url0;ap|014_owXo8rr6cDWr&jPM)RPcO*EYZHsXSp0!RoErX zYjufXh>BFIbhY~0P^WAHJc?CoR>s*kmX5(Yl_2a3Sc^R0$Z9N^OR#F8az*mK7ud7e z1={;CjWUo3BZ(?j8Aku7_-a4vNwR0R=1V?d7?Syap>gxt;rEXZzx?>K|LVj0>vu-2 z~2?2w4_ls^i~ITy;c9NJvN^rmC_ozL&;e-;tzlUF|Z<58%CZRMD8%WS0V;PSbEsN3Ejwv11}2P$X7q&yBuCsKvJ+sRg8f3ygOsc3M8y! zU_7Iw=k1_lM*BRSK!HBqJ~73t1ar?Y8Kjh9bJsA(8RVGDvx5_ppki@bAd-!Ni=;$i zvJR5T%COLJB&z1&f@S1LgR>aLP{IYpFT3CnV1+4pBW2%Fz36*1sXY!qYG4A zO(myN;~ZKVBr>Iw@DkEQW>%L{XX$D9jEM8_loBBg-UPXWHc;($vUIxv4mEHy<06x} zuHNf1hNzVRVGKB_d*Y&+{cGUISq?l&Y1J&>2{e4eGkBeGAs;(wW6(WlFkr|*$P(HJ zbPE~;O9vR8UQ&RoKYH^C))llcv|CtL&_bYl*i2#Fw|ujG9If{bOj6~!j5r%u#2A_> zjP$TjyJ0nqLwS@5DAWX>MYoT)>VA|FF57USvfKeRW2`m7h|(MoX%5d4E^lP;VuP&E zuF7Y%9M)BsHO-;C#4tuxE@Zk&{oGLJbP6mP$<}O)v#Tu~jdv!1n^&+_WqB#9wq&ls zs)Xtl$wFsn&gWNXzl2#*fIt`t)UZl3`ai|j`&mtrIlsAB@+rlT-cY7?CSTtj2A==z z^N0Og-tX-%y`SArT@|}$+kJZ~|6C@t;$TbnL_&BUk8FY15eU0Z)*g@I$c;na3c>NM x0O7zw@?!--8b@C22LT#dh0|BkzaDftTU)1ZPTzn3`{(VCZl}|e2lBg_$3Mt@F&h8? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro b/warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro new file mode 100644 index 0000000000000000000000000000000000000000..85e8e5e18a757cb7b90f91793181b95d1c5e7dfb GIT binary patch literal 1905 zcmb7F&ui2`6yDZSJb09P5eY#&HJcxsWV1c!MTCMPD0(RxCYhIRG?`g5v%6i&-uwf+ zc<8++5ewoUBI3b=e}F&Gg9k;tIJ3LiPMbDuAqye%zVCbQoA=({jh-xASYZV9SeJ4m z#n%GYvHZZd9ItI#o*Q^A?`jVfK)9iXwOp&?`10p?fhS+>D-53Xfy7{tejY)w*t(q1 zB1ha9K*3T<7M&F|C}@+#UC7a!OWQgh^*~?K^a5g9V0~57lN2({#J7!YouGVjnj?}X zz5A$6IzkN(mEfI8mAIfReGJG(kjZ28dLLX9^c5 zB6zYvW@uaHGg}VxD)f@(kvPPVpnk?hx>EhXP-k=qMHq?Jtc-#1SiD#y%w}G?smV;tOu8;*!HYL9 z;-BDMJb3cr-(V3>deV!%3L@gc$?j%5ZQ8VjoMztleeZqq-pl>|_QJ(gPI1NuOz1JW z(Q{nKw0+C+ySD55mgjrdGn@kzx*F!Wj_o>@>HEItbY0|kyVp28Er5og(<1FdzGz>K zSe{~`??BFDMi;GBypyvI4+oIqw^w#GG0H$&Z)-V(EGODpTZ>{y2$yG@yBfvm_Cz1F@ml*B zjRfe{F)Bz=Nto0)gq8-0xYP-F24NsGt4gV|v=n?y#bJ2JsE`I91tG5qRJk2Y-L8RM z1zgWKjb*O0_d1E8+sJ?k0TNU_aa_&z8Sqh@01rY|)XO&=1z+*immHEt;!@LTuqIoPY2}HO^giNP87WIg;T;L!+9|9> zmYv9|ESWQ~mO|Bv%w4mmjmM{GKY>w@g1`g|T(e3s`kdnP{aj9xHoiPr@*yJ-u9T*> z9^HJk@+SD`{{C`Fzq|cyW9jpS_X}n0x?yyTq5QcFSi!-N?umf%4(S^L=UX6*Dp|t= zKk_gj9rq#B9fCa_haS?A?M5!L2y|UbPt8s#y??9KT3-I}>+9d2f4=YSFD$lN)9<{Z wp$RrJ9Vv>secdrpPxn3C(<9eG79tih!Ba(-mi|3|`Fiiii+7(6M2{B#AFM}LPXGV_ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro b/warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro new file mode 100644 index 0000000000000000000000000000000000000000..f3b3308deebb8eca64d9a38f2105e81d55b48de8 GIT binary patch literal 1905 zcmb7FU2D`p6y4TZM17R{A`*i5)NC^O*kt=$1VIoKpNfP@a?_0_Gchyix|9VGL@M|o z2nziHzKMwM;$IMdgoq#LFL1KE*-o1_Z6QxH_ndR@nR{<;2M-o5t}udgHlSQfqU)aH zAUIO{NZ@A1 zSt4?sz1L9;y;cSsMG*OQPaIaWbpm{xq`>@;md)}FTf#RygU1Qu;<5cU2HArKLj);s zQ9>JmY(axy>OetoumK|&#L+ZT^m6T~JBK8Ir z7X=8t!eIy%Lrmzrd*_3sqY)=ln$Zr1JRm|aYoY8k$6WOn0gFrnde8c zN=xPhtd&r`A`8dx)baQj?T0Y(GvGMF95<|zj6S9Kd_Px{q>e95mV8Jf2+vifc6N51 z^MAg*UjKW6oE`1{dbjlT%%_Dac1_p2`cV8_2DD_L3-`EBST_oEj*Cs;dY!D^GXo5L z%hGHYBF&D$)BaW*e=jU{I@9m8qOKK# v;W)15nz5(Zj*B#}hhhzZW-qO8RQA&XZwdLMn!#FAe^N@SvWy# zyb9vU@-WvhII7{HtjzF8gd`*u#P>*y7?)Na?%h?U85=8i9w@awsPi4=1dSZ<=mZs0 zQppL|IELm1u}tWMbOLe6Giyp|va}?8hS_m=OfcgHuY=5C7pQSNT)5o=yArsaagp&{ zm+y5NgV)J`k_3{l>4}qSw*La3W;xI>CRMw9!;$bU&)```8Gr1si$V6F#gIS_jF-?w zAY0HPSU6CU=_v)6@}sw(U{yf}L$`%Z1sw#khwT(reM{Hd$B=q&U&U3P^N6E?MP-R* z0>eEl#BNv)qtA~r28Ed5qv-DO7Tu3BOnDpDDvKS^Fa}Z+M1+baDKys>kYC* znmmY>c@sUCsQcHh__~IoK0!zNW3!!R6T>WnoLe*m6pt3 zunM7OMV7ANtMmC8+D~8>7Qj$~7;0H18U2sqtNkn{Nu6J=mwZeTh%X3JdxxW|FE0Lg zdF}kWy^puvZ-3~2I`?Kn#O~_)K%erT%a~LYbnYGtF&!k4&QLi5rZ>szUShkxW4f9X zK&&~Ahcsk)rWU2C85@p2wCqSLjDe8;cDvW>_dh>>`}6DXFRy=XZ1#GK@BfIJwdnUX M(OR?5b=Qmk13SW3TmS$7 literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro b/warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro new file mode 100644 index 0000000000000000000000000000000000000000..afd5b56a300724a957c345baaeb747263c1faa87 GIT binary patch literal 1774 zcmb7FF>ljA6iy-r2E>HQf{AVBfiS=Z2^X0|NsS zBLfo)TVX)(3)uK2VP;_CE{W4i-MVGHd*AoH_uYH%o(x_zZ)^#QaxrGoA^3h21%9s= zcpY!2=k*9dXtc z$rv(pa{Jhp(;Vzw%jS?Uj_qyB9ui2gP-h3nHbvRuHbayQLC82qa=Z>w*{QJ5^AxJ& z5t0)+(jk~7n)oqGkW|vvv!@TO36W##!M?T72Ya?{ouiQg9i5}%8!9PN8XIWkh$LDk z7C9ub%B(D<%(7$P36-1hgi)y+Jqz;tb)eGicl*lqXYh&$sUAD7V=z6aFknbQsuJo5ObaRmO9wccTu^{- zK6>>D))mw+)LU3qP(xsPSWRKwx8iL3ct-CX*m}HG#Oc5y&e2q3l!uvK2CHF=)De-8 z=?OlKt{-pR{fJPZ+Hj$=+yN!yj?n}I#!^7EIy_6bx>3Q44YES}I-k{YSXW_}G|$x~ zh9N3asnXTz8$+G43GjHJTC+0FzOi%+-l+s(U&31C`Gu^;lDPt_7AjXH5535q%`VY? z3DY&bvwz>!$A-_;Z8qvx}gWoAoK&r??ONE m`+*-t$jQ96mY(l58m-oc`MaOrPrkhW(`+>w*VIX)lE*)xt1))~ literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro b/warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro new file mode 100644 index 0000000000000000000000000000000000000000..87fbf67f4c7a56eae7d0f08b53c6540796b33605 GIT binary patch literal 1905 zcmb7F&ui2`6yDZS6ubypFCrm`r)KkOlTCUSK@bFgoQi}=^3okmW@2X2buD|)zeEp$ zc<4zGguVC=h~B(NkK)Z!PlA)(&34+fX&Z9Nyzl$o`{uou2jR1&%WI6FoDC?~aD3bI zE!VOx!CSNMk0xZSJT9Wz*9P5u5g|zbI;XP%D`9Qh*NSW$`I$l?f(MW-8 z9iw7ODk&8jhtR?xjw_vjQ!di2)DI1HN{3Jcp=iyisnmwZHHh%Q#9cFLdb zwM&yLeDZ4W_21uJyz=A1r===(L)W|dQ2bm5v}B+Q_jo{9Hx6}cbLPA190(Gj8b@4qn2Kz3(J2ymC2L1y6 z4kW~Yn3(tvSUNE97a+ujD#XH_6Q|d>b<2R{>F#~s_uhB!JwF+~Si82t2^#Ye6;_Jx z1!2$YIicsfeaH3vf$wi^ju8VQEG=v^==B1p?|GgdxPvhCT;~pl{Q^h~7Af)}uyyZt zLRpT4bpVW~l&pIj=z!5Kk4KQB_csqsF&%@sZI}#V%COln%p`>jb9uIVXcCl{w>ctd z0$fC6Bu2|1nX3%zJB~zEJY2Ap?5Pk;V@3R!#z;tMW9R83W0H!I@$i{Z>VrA!7-wi? zK=#g1aW$2UN{v%!>5oX2PQ=F$M>4ajlqyS4!>2@?hR2i$>F+AY9W;R|x1+h+HE>@8 z*E7yjnd{=c&SThWWIz}Lj;fY8tLEM%@JX5hk78QX%XfSYU-JxJrCi9zj+z*B4{8h; zG7z$aCIa1p8o}HFMknVK;OdWFe}ZKN4Ghf|Ruwc5=pNQnSoSSnZ68PLy~$mMZfdP%(yD6AUTM0FnCe%;EAz z2A3OTfp%3si{-Ga!mMbX%S#LiDl#F{RqCgPI-?U{(NMN#ZJb?g>1e!D0o=TRwHS}j zW!09#f%O`#+*? QDf(kYwA5@%-PPj%0%{vs+W-In literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro b/warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro new file mode 100644 index 0000000000000000000000000000000000000000..3ee1de0436bcde48ddac089e924aeb1ad5516241 GIT binary patch literal 1774 zcmb7Fzi-n(6iy-r1{Ne#7KAJdG1c*pCaK-ILPA2S1Y)X?b@n|s2lk!0J10a{1RD|q z8#5at6Mq7K0TL^Sg`o>0Oo+QAPOo+Ami6v^-}l~k@4eego_4Qo2#QKEX3`<}ZWxXH z?V;yI!|fm#47MUKx>F(!R60i3Ra)iwZ2`|KpeZ=CDiYv5|5nC$fuu75E(oK&U;|A! z>x*;@1^RgN(3Z0j>>bPIkTQ<#P0P**zN;B0zM z0lxX@%_mq_(8ADeVO>EBf$3p0g>~PG)9vFKy|-`c@m3MX1B*CEGmTLm7J3=1hA~t} zL_(n__&Bh01aV)QpkQ1PNm~Ale+BC0yO8;Kc@6p?#gtYB{W{uxpwp z>JmeSs$8mcwfc#n&e;@roT%1pjI(bn9fNl!LD(0tR%LlEtFdG*!K#Jo70HKQXwT;t zXg`BlT!2IvNz|~)F#12m*ZWydl0Cn%Sn?^ukS_j(&dcKGuj_m7Uxkwo@BY62z0o`B ze(LJj9oOx3A8$W@`_t`pI#<+5r;*1$16nek literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro b/warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro new file mode 100644 index 0000000000000000000000000000000000000000..15c21cd274e4e18d3d09fc9d4b857123fbef038a GIT binary patch literal 2021 zcmbVN&ui2`6yBCvDtMHNAhLwwsk58O=4a0$2!deoR3uE2mu@u4teM%aOIh%shk^$| z{{{~p#DgdC52$#uB6#p1Dxy7zAcBYoC%esd+O%ma5<7k#+on>&d3#kt%?Is>% zllqyEW(nbF1u_=VbW)ooD;aGtzYPg_a%xrK{SGJ#btMCzW`QzaSHcM5fQhrERV5|K z@HQc76awRJhw%0|NaQNQ3{@4Vf`{=eN|*DHfciP{CF&C{r0Z9&T&(vZ-mYI*tPk}; z8O+!B(1;;j-a`dTDlrurJJ7-)9_2bN>wxcy%!*QqEHw!qrFY-sxIM6p24k%aq-x0 z6@%>E`M?hB~G_$XrjfW@((Uv~(oi zJ_n{8z}oF}_GOip%pq8Fp<+d5hH5K=!2#MgpzkKYNkBL$StS{LMDg){&L>G3oE$EB zp9bL1SebpNIDW%1p|ACF%hpMG)d*+d?@&}=rEJ@IpC(=LOiaF4qwYXn}C zlWZAyvq-k-gK6oyZJ^Ndbfg*S~eD~?=ZPDF^{{vmHQf>2~tOm%Wj>^RpMfshbLAf^hL^WAe}u-+4sKhd+)pVo^OW_SI(_TP6o0slpV7x z*lByd@3m1EVb}F>2jTSr$$%@{4C}al$H6^}JnW-hr-wasS;FHXa0)gbrXghY_N7Q< zDN*(aG8qeAZ?BP2CYqA=AtmoF?pSIv0Bf^hWk5y7tc`{h#gH(mzisVUoTRhUl<+tL zse%Df{bi6&R)={AX;i@@RTlH@JcJ3F6WLV5qjRsGx$t^st=5vTx@-`DH6*3SPK(I55IuV+52JBh)=rhF2kXnqGm4r>uRmGy1M)C#mDc@U%vjkQrEAwntq;E zH1yg%pb^*z;mCG7UT9xgo0Z53sQE zPXG%;H~s(?)R~Q~%&dsJBu+1N>z4KIec$)qckjJ>mcH)Z-Vzj*V#1`Gk?lB$c86i) z$8j75VKfXz;lmPfpwczMZqh2x9|(9`0mb0bsz`xb!TmAg1(NO|aFH=;gmZe#3LE&oLe)G% z@{Atn5W=t~e#$VCO4@$;{E0oy6cVk^%zr z(VI`OuAqgX-NL$p76Q}5W(w=R73bT>H+pa1(c`Tm&IT57j%FI8JS_AwSPkPy9c2;< zJ;7(u?c=SxA7xaiHe9GIcRZhmII>A;aS4fjS60DkQF-6`K*@1x(cVJd8IB1 zj8TS1#4B7m$Dj5<{GS8s9uqL;E$a7{0i+i zFiQ%Mh#-j?RvAYBr}%n5>q&CvcNa?@GXi+=FLdr~f3i+)egAzN{3?!rbbafz`?afM z_dKuXP1SEQVU+++xhE4UdL;EE;s+qTI$1CD`{O}?BX^WWp}UK5=*BS`x&0KPXh`~l kG)~>Z?`i4NN1cvk{rvF$+s8jAU;cKjPUnU?=``~A2QeWpLI3~& literal 0 HcmV?d00001 From af6c8688c47511b82167f2f523e9a3a0eeb62309 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 14 Jan 2025 16:15:33 -0500 Subject: [PATCH 04/51] adding unit tests --- tests/table/test_merge_rows.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index 2e771cd3ac..6c2fe310f2 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -1,5 +1,13 @@ ## unit test for merging rows +## todo +""" + simplify this unit testing to reusable functions + check with how the other unit tests are flagged and add accordlingly + fix the warehouse path; its not creating it in this test module + wonder if the pyiceberg team already has a warehouse folder to stash all these tests in? +""" + from datafusion import SessionContext from pyiceberg.catalog.sql import SqlCatalog From 94be80717aaf2d4453e44791f4ec790506fadba6 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 14 Jan 2025 16:17:09 -0500 Subject: [PATCH 05/51] adding unit tests --- pyiceberg/table/__init__.py | 2 +- tests/table/test_merge_rows.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index bb82a3e9fb..d7bb409519 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1075,7 +1075,7 @@ def merge_rows(self, df: pa.Table, join_cols: list Args: df: The input dataframe to merge with the table's data. join_cols: The columns to join on. - merge_options: A dictionary of merge actions to perform. Currently supports these predicates: + merge_options: A dictionary of merge actions to perform. Currently supports these predicates > when_matched_update_all: default is True when_not_matched_insert_all: default is True diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index 6c2fe310f2..2bf164a541 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -6,6 +6,8 @@ check with how the other unit tests are flagged and add accordlingly fix the warehouse path; its not creating it in this test module wonder if the pyiceberg team already has a warehouse folder to stash all these tests in? + add a show_table function to visually see the new table + add a function to nuke the warehouse folder to cleanup """ from datafusion import SessionContext From 269d9f52a93bc1975813740827e5019d3a2365fe Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 15 Jan 2025 16:19:15 -0500 Subject: [PATCH 06/51] adding unit tests --- pyiceberg/table/__init__.py | 12 +- tests/table/test_merge_rows.py | 315 +++++++++--------- ...de6c7-ea3a-45a7-b343-5dc750ff4e17.parquet} | Bin ...c97079-ddf1-4e1f-a902-5eb19ff98914.parquet | Bin 1252 -> 0 bytes ...d7c58-6338-41bd-8d9a-c43afbffe46f.parquet} | Bin ...37347-116d-42ba-911e-8d2f1dd3b21d.parquet} | Bin ...81aa39-f25a-47e3-8909-bbb955d63a1b.parquet | Bin 1252 -> 0 bytes ...50de00-debc-4b44-ac41-3f10af7e59a7.parquet | Bin 1252 -> 0 bytes ...4f1a0e-cd51-462b-b4c2-81e91f278432.parquet | Bin 1252 -> 0 bytes ...e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet} | Bin ...a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet | Bin 1252 -> 0 bytes ...363a35-c28c-4445-a9f3-27f83f5706a2.parquet | Bin 1252 -> 0 bytes ...3f51c6-8b62-4cc2-99a8-3be667d35b9b.parquet | Bin 1269 -> 0 bytes ...51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet | Bin 1269 -> 0 bytes ...82678a-6ff9-4924-958c-22b926e25638.parquet | Bin 1252 -> 0 bytes ...c518c7-6c73-426a-855b-2db6ca782f5b.parquet | Bin 1269 -> 0 bytes ...ec306-70b3-4d04-a4b6-87de01187693.parquet} | Bin ...b30373-a89a-44a1-bcee-d854aeb33acb.parquet | Bin 1252 -> 0 bytes ...24e0e2-59a6-472f-93fb-8933a1f200bf.parquet | Bin 1252 -> 0 bytes ...80981e-c2a9-4f8d-bbf8-38033b7735a6.parquet | Bin 1269 -> 0 bytes ...dc647f-b4a4-4e63-9a86-56ee7d6f5e07.parquet | Bin 1252 -> 0 bytes ...9f7ae1-abec-4da7-ac71-135f512de652.parquet | Bin 1252 -> 0 bytes ...09199-948d-4bc3-b7cb-be211900e2b4.parquet} | Bin ...820ce5-8545-4c2c-ad01-d2d70ca569fc.parquet | Bin 1252 -> 0 bytes ...9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet | Bin 1269 -> 0 bytes ...68c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet | Bin 1252 -> 0 bytes ...d50ceb-ff50-4c31-8515-77245a727b91.parquet | Bin 1252 -> 0 bytes ...37aece-7657-4840-905b-26cc0d4353e1.parquet | Bin 1252 -> 0 bytes ...f73aa1-e388-47f7-ad3c-0e0547345595.parquet | Bin 1252 -> 0 bytes ...4c63ea-a734-4f86-b728-d35d56b3180c.parquet | Bin 1269 -> 0 bytes ...bbb6ea-f9ba-4642-9b62-57e55f553440.parquet | Bin 1269 -> 0 bytes ...c66652-5303-4cba-a9d6-8d909f55c160.parquet | Bin 1269 -> 0 bytes ...e31041-a16b-4018-97a8-f54121d210e7.parquet | Bin 1252 -> 0 bytes ...bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet | Bin 1252 -> 0 bytes ...2c96ad-d3bc-4ae7-89f9-12e7ae273785.parquet | Bin 1269 -> 0 bytes ...45bf07-cc23-431a-a734-119b9ba5ce66.parquet | Bin 1269 -> 0 bytes ...2853cd-f607-4bb3-8a0c-0749c91539a3.parquet | Bin 1269 -> 0 bytes ...192fbc-35b1-4090-b0d4-b0c858966378.parquet | Bin 1269 -> 0 bytes ...5bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet | Bin 1252 -> 0 bytes ...60ac97-208b-4c5d-9196-e952352617b8.parquet | Bin 1269 -> 0 bytes ...c4729e-faab-4e6b-a5da-b8c0de8541b7.parquet | Bin 1269 -> 0 bytes ...467c7d-af98-4d40-b5c3-78a4507807d2.parquet | Bin 1252 -> 0 bytes ...309d30-424c-4c10-bb6d-79711a6576a8.parquet | Bin 1269 -> 0 bytes ...f30a09-e7c5-42f4-a43f-81cb10b83af1.parquet | Bin 1269 -> 0 bytes ...679dff-e9d2-4743-8c9f-41100f6ed284.parquet | Bin 1269 -> 0 bytes ...09f507-047c-4d3b-b967-af45b8ced15c.parquet | Bin 1269 -> 0 bytes ...fe3f4d-7ddb-4ca3-adcf-c7b503a97189.parquet | Bin 1252 -> 0 bytes ...6b5ff2-453b-431e-9cde-884ceff64876.parquet | Bin 1252 -> 0 bytes ...b8964-afa9-459f-9bc1-bd03f0c6e5dd.parquet} | Bin ...3f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet | Bin 1269 -> 0 bytes ...1b7da7-41ac-4224-b399-e95130d3bc1a.parquet | Bin 1269 -> 0 bytes ...a9a07-76bf-43a1-8790-6c20032bb450.parquet} | Bin ...411624-4674-4dcf-a2f5-46beb4722430.parquet | Bin 1269 -> 0 bytes ...a6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.parquet | Bin 1269 -> 0 bytes ...568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet | Bin 1252 -> 0 bytes ...73260d-3475-439f-a9fa-a76fa4e0e177.parquet | Bin 1252 -> 0 bytes ...92ab29-b58f-4338-812c-096249a28990.parquet | Bin 1269 -> 0 bytes ...b31934-05a6-4e09-a869-bc4036a9aa7e.parquet | Bin 1269 -> 0 bytes ...184284-5950-45ae-8dd9-1db19f4b0a31.parquet | Bin 1269 -> 0 bytes ...7e543-b7e7-47f2-8da9-86d195e03115.parquet} | Bin ...8f6465-742a-450b-a358-12b08ae8ff62.parquet | Bin 1252 -> 0 bytes ...17da15-e1e6-484c-87fd-d5c594ce88c8.parquet | Bin 1269 -> 0 bytes ...5041a6-7503-46d7-a94a-e367abc8212f.parquet | Bin 1252 -> 0 bytes ...674485-f7b4-45a2-b7b6-1a4c56568f70.parquet | Bin 1252 -> 0 bytes ...fe0557-72f8-4571-861f-1e38db10fcab.parquet | Bin 1252 -> 0 bytes ...e0a4be-6f80-4c5a-a750-e51d75296669.parquet | Bin 1269 -> 0 bytes ...e770c-75c4-4839-acb5-7047ed32907a.parquet} | Bin ...28ecfe-009f-435b-9a1a-5cbc8465e7cb.parquet | Bin 1269 -> 0 bytes ...dec90-a037-46e9-97ea-09a3dbf4fe08.parquet} | Bin ...212431-1c5a-4680-924d-cb722127f8b2.parquet | Bin 1269 -> 0 bytes ...db173b-1d0e-457c-acd7-bd379e96c1a2.parquet | Bin 1269 -> 0 bytes ...4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet | Bin 1252 -> 0 bytes ...3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet | Bin 1252 -> 0 bytes ...d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet | Bin 1269 -> 0 bytes ...460c3d-034c-4f17-9db2-81edcb0f322d.parquet | Bin 1252 -> 0 bytes ...c0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet | Bin 1269 -> 0 bytes ...238f24-b593-4f0e-8ea8-4ede49211ff9.parquet | Bin 1269 -> 0 bytes ...f0d335-5975-450e-b513-14e7c173188a.parquet | Bin 1269 -> 0 bytes ...c93e86-c022-49c4-bc6f-35621c840a05.parquet | Bin 1252 -> 0 bytes ...f2539-0ddf-4eb2-8c94-58a8ea60e1c6.parquet} | Bin ...44e2db-5959-4c27-8e91-e5ed66869db8.parquet | Bin 1269 -> 0 bytes ...f74252-bdf3-4d1e-b45f-4cf875682ac1.parquet | Bin 1269 -> 0 bytes ...3d6bac-76d6-44d7-84d8-25b914dcf93a.parquet | Bin 1252 -> 0 bytes ...caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet | Bin 1252 -> 0 bytes ...3b4af9-a9de-4e9c-addc-401a7a626d9b.parquet | Bin 1269 -> 0 bytes ...8253b2-45ca-4b85-a98a-1bede0a1358e.parquet | Bin 1269 -> 0 bytes ...72c63d-1f45-42b0-8c22-087b27e345d3.parquet | Bin 1269 -> 0 bytes ...2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet} | Bin ...502702-5de9-4147-9f01-2a63f690f3f8.parquet | Bin 1252 -> 0 bytes ...0d6d50-d572-4127-b57d-a42a67df8e11.parquet | Bin 1252 -> 0 bytes ...011efa-994c-4030-8da7-53357c467c6f.parquet | Bin 1269 -> 0 bytes ...364e18-9a58-42f2-a886-b079f1ccfabd.parquet | Bin 1269 -> 0 bytes ...ca3419-f1ca-4149-bf5c-6d400c0c1c64.parquet | Bin 1252 -> 0 bytes ...7dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet | Bin 1252 -> 0 bytes ...933998-38fb-415a-8c6f-65c20c4b60af.parquet | Bin 1269 -> 0 bytes ...4315f-9dab-46b7-92ed-19078458b5a9.parquet} | Bin ...1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet | Bin 1269 -> 0 bytes ...a9e15d-4031-4715-bf68-69610e86a620.parquet | Bin 1269 -> 0 bytes ...4b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet | Bin 1269 -> 0 bytes ...d10516-886c-478f-8be2-84606aa42d96.parquet | Bin 1269 -> 0 bytes ...7221f8-b07c-4992-b24c-d23de23c47e6.parquet | Bin 1269 -> 0 bytes ...541d14-821b-4439-b27f-79328feb2cb7.parquet | Bin 1269 -> 0 bytes ...358415-49ec-446a-a261-bff1c048723b.parquet | Bin 1252 -> 0 bytes ...f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet | Bin 1269 -> 0 bytes ...b4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet | Bin 1269 -> 0 bytes ...985c5d-a0c2-4a0d-9431-a91c756b2433.parquet | Bin 1269 -> 0 bytes ...e05260-42fb-4b65-8ff2-fb0c04ea290a.parquet | Bin 1252 -> 0 bytes ...2d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet | Bin 1269 -> 0 bytes ...7e2165-822c-4192-a463-1384cab3f16d.parquet | Bin 1269 -> 0 bytes ...47ab0-23b1-4e63-9170-dcd2e30019ed.parquet} | Bin ...4b2273-468b-4c60-a6c4-99561a3f0d79.parquet | Bin 1269 -> 0 bytes ...c83adc-6c17-4552-aeff-a47f0e2b243d.parquet | Bin 1269 -> 0 bytes ...e4b741-ef48-447b-80e3-3a0b9cb05c3b.parquet | Bin 1252 -> 0 bytes ...9cdda-e5cb-479f-8367-161be6ed8913.parquet} | Bin ...566f28-bd86-431b-ba97-fd70c8073fae.parquet | Bin 1252 -> 0 bytes ...a3b4-4086-bd87-3394284fe2f8.metadata.json} | 2 +- ...-5494-4305-99eb-39ce9c88bdcb.metadata.json | 1 - ...-ecc1-43de-b6e6-1e0e2c007809.metadata.json | 1 - ...-a247-4213-917e-496db9b4cf29.metadata.json | 1 - ...6a7c-45b8-a958-004c093ca006.metadata.json} | 2 +- ...-7516-4af1-9eea-0a11d9c8b2d6.metadata.json | 1 - ...0884-4aa4-b995-147f022b718c.metadata.json} | 2 +- ...4932-4639-9468-2d56f45506c1.metadata.json} | 2 +- ...-65c1-4aec-b293-92246e394a34.metadata.json | 1 - ...-266f-4a68-aed1-95eeb7f8b8aa.metadata.json | 1 - ...-b41b-43a4-aaf8-0e7b99f8129b.metadata.json | 1 - ...-59b1-44d2-b16a-855d7e8ef117.metadata.json | 1 - ...-ec92-4bb1-8f60-b06249855d02.metadata.json | 1 - ...-60ec-4db0-9577-717d002710be.metadata.json | 1 - ...-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json | 1 - ...-f46a-415e-a45a-6bd31a3f1a08.metadata.json | 1 - ...-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json | 1 - ...-9933-48d4-80c2-39ca6488f707.metadata.json | 1 - ...-41aa-4dcb-b08a-f961ee37eaec.metadata.json | 1 - ...-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json | 1 - ...-0b81-486d-9982-03cd1e0e7b04.metadata.json | 1 - ...-cc65-44cb-9499-f68551ef1364.metadata.json | 1 - ...-a782-49c2-9831-de02dc131b8b.metadata.json | 1 - ...-a254-4458-8072-e3c66bf4a1bd.metadata.json | 1 - ...-f2ee-4c97-9889-91a6469faae9.metadata.json | 1 - ...-2f25-4fa6-bdca-e6b3a129710f.metadata.json | 1 - ...-e606-4c37-82ac-3e0455c4cc61.metadata.json | 1 - ...-9c00-4246-b055-30710b86fbb3.metadata.json | 1 + ...-8a86-4224-968b-7c93ad27b09f.metadata.json | 1 - ...-b25f-4a55-a78f-c2f308f98a66.metadata.json | 1 - ...-105d-482e-8b6d-3259e9f9569b.metadata.json | 1 + ...-16b8-4dcd-b92f-664162426cac.metadata.json | 1 - ...-e083-489c-b38a-61765fa10e3e.metadata.json | 1 + ...-e8be-4b20-952a-e98d8e756480.metadata.json | 1 - ...-a84e-4f4b-97fe-d2ccf275f241.metadata.json | 1 - ...-7749-4f19-9479-06b9f5c8a36c.metadata.json | 1 - ...-c2b3-4d87-9723-ef174b6fe9c9.metadata.json | 1 - ...-233b-4533-827a-89369113dfab.metadata.json | 1 - ...-6be3-45f1-9f60-8e015def371a.metadata.json | 1 - ...-4d17-42b0-9c71-4416706c6175.metadata.json | 1 - ...-b9d6-4da8-a875-cd47ada9f8db.metadata.json | 1 - ...-66f2-465b-93ca-7c2e1d6f7602.metadata.json | 1 - ...-4aea-478f-aa34-60953100b1b2.metadata.json | 1 - ...-22dc-4a41-934f-74ae2c8a0b12.metadata.json | 1 + ...-652e-4a75-a925-7a46acea29c5.metadata.json | 1 - ...-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json | 1 - ...-bc58-472c-8598-6be139182129.metadata.json | 1 - ...-053b-4d8b-abe6-d451db408ffa.metadata.json | 1 - ...-dd83-4473-9a1e-8cdbec52548b.metadata.json | 1 - ...-f0cc-4685-93c4-b45aa6bc7a85.metadata.json | 1 + ...-8be3-451a-bd45-df558dcc14c5.metadata.json | 1 - ...-21ac-43e4-ace2-b416cfca1b2d.metadata.json | 1 - ...-e238-4911-a1c2-d24519a083e6.metadata.json | 1 - ...-1732-491c-acf9-056ca0adce82.metadata.json | 1 - ...-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json | 1 - ...-fc19-4bc7-9f51-8f48f5467838.metadata.json | 1 - ...-df90-4100-ab64-1f1e8fdf359d.metadata.json | 1 - ...-4ec3-4bd7-9e38-bc51d78f83df.metadata.json | 1 + ...-e757-4f13-9825-4fb0b61e1a9d.metadata.json | 1 - ...-4069-4ef7-973b-46385ef554e2.metadata.json | 1 - ...-f583-4d59-9ecb-8224e59353f5.metadata.json | 1 - ...-2cb7-4df2-9a89-b1efb016a0b0.metadata.json | 1 - ...-6b17-436f-987c-873233512551.metadata.json | 1 - ...-922d-4b7a-943f-844473415464.metadata.json | 1 + ...-94ed-4beb-941e-6d61f20fa3d0.metadata.json | 1 - ...-432f-48a0-b450-1ccb6e7084b8.metadata.json | 1 - ...-c1f2-4e2d-820a-a223cb1b5b92.metadata.json | 1 - ...-13c5-4691-a67d-886c6f03db70.metadata.json | 1 - ...-ffb1-4cae-bcda-c157287d11e5.metadata.json | 1 - ...9648-4361-bdd3-85edc009f95c.metadata.json} | 2 +- ...-e0d5-499d-bc3a-278d2bced975.metadata.json | 1 - ...-750e-419b-af01-d1fee743ba5b.metadata.json | 1 - ...-f835-42a2-9778-3a25d1c3f0fb.metadata.json | 1 - ...-486e-49b5-a1ea-30abc4b7710e.metadata.json | 1 - ...-c78a-485b-9525-445891ecbbbc.metadata.json | 1 + ...-9c5a-4a6d-a3c9-ce81024e7743.metadata.json | 1 - ...-e790-4385-8717-181579fedcf6.metadata.json | 1 + ...-d7cb-4582-a531-53d1cde9d1a2.metadata.json | 1 - ...-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json | 1 - ...-1c28-489f-8764-6205816f8e07.metadata.json | 1 - ...-f9ac-4b5a-9cad-765e9d17141a.metadata.json | 1 - ...-cf75-4f08-88d3-3b2944a04174.metadata.json | 1 + ...-5850-4e23-87e3-867f77726f18.metadata.json | 1 - ...-7a33-4467-9f22-ccebd7535d85.metadata.json | 1 - ...-847a-46e2-b36e-711774a46b9a.metadata.json | 1 - ...-fa4d-4cd8-a310-5c3207336309.metadata.json | 1 - ...-fc0b-4a7e-8254-8a66c8678488.metadata.json | 1 - ...-a1c1-437e-8070-0bd4c9505623.metadata.json | 1 - ...-7527-4941-8bfb-ac88b170c630.metadata.json | 1 - ...-eca7-4b2c-b083-d426f2a2aed6.metadata.json | 1 - ...-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json | 1 - ...-884b-4a2d-816d-a18db542d8e2.metadata.json | 1 - ...-f998-4cac-bb05-f454524df99d.metadata.json | 1 + ...-792e-4bc5-b696-2aa1ef282617.metadata.json | 1 - ...-5b1d-4b08-8b3a-b1635dfda75f.metadata.json | 1 - ...-1260-4527-aecb-2ecc6545966a.metadata.json | 1 - ...-4854-492f-8ddf-4e554da6fb3a.metadata.json | 1 - ...-fe0b-4b91-a6a6-625fe4837b0c.metadata.json | 1 - ...-f2c2-4693-a9da-24e5ae089331.metadata.json | 1 - ...-bd03-4313-b556-80ed3a8b562a.metadata.json | 1 - ...-a7c4-4287-b59a-a38d31b661ee.metadata.json | 1 - ...-37ac-472b-ad53-d28cf71f6cba.metadata.json | 1 - ...-4590-4be2-b12d-92a865e24604.metadata.json | 1 - ...-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json | 1 - ...-477d-420b-bce2-8a990caf9aa1.metadata.json | 1 + ...-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json | 1 - ...-0cf5-4e7a-b286-c9baf510f7ff.metadata.json | 1 + ...-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json | 1 - ...-4512-4a44-9633-e3757055c9a7.metadata.json | 1 - ...-cf0c-4212-bc3e-aa89e8078cc2.metadata.json | 1 - ...-0e01-4907-8715-7f28a49089fa.metadata.json | 1 - ...-f6e6-4d8e-89c7-232ffdbabc11.metadata.json | 1 - ...-2cd0-4ac3-8a3d-717001ed3747.metadata.json | 1 - ...-d4cb-401e-8961-9a3e80abbd9b.metadata.json | 1 - ...-d10f-468c-88d4-d6335d6be5c7.metadata.json | 1 - ...-777e-4364-b90d-b90076f80330.metadata.json | 1 - ...-13af-4ba2-9961-3413e5c491a4.metadata.json | 1 - ...-afe6-47cc-bb7e-f3b8dafbd843.metadata.json | 1 - ...-3410-476d-863d-61096474e534.metadata.json | 1 - ...-c642-40a8-89a1-ac408a302b63.metadata.json | 1 - ...-30a0-46a2-bc66-751cd8c116ac.metadata.json | 1 - ...-a54d-4b15-92c9-9711ca18ff4c.metadata.json | 1 - ...-4744-4909-a9c4-6d18c4ede8ea.metadata.json | 1 - ...-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json | 1 - ...-cf13-4d22-a115-eeac5a729131.metadata.json | 1 - ...-8c06-43ff-806e-0baca5479a72.metadata.json | 1 + ...-cc54-479c-8608-02dffa3337b5.metadata.json | 1 - ...-a62b-4855-8678-92790b46bbd6.metadata.json | 1 + ...-98b2-4338-86ea-49db24ed0719.metadata.json | 1 - ...-05a6-49c2-8d21-e293a95b4837.metadata.json | 1 - ...-e42e-404c-9714-b097ab448c70.metadata.json | 1 + ...-b19f-4cc8-b94d-98dea35e112f.metadata.json | 1 + ...-6612-404b-8058-56409fb03fde.metadata.json | 1 - ...-8430-434f-bf9d-c076a6044b06.metadata.json | 1 - ...e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro} | Bin 4404 -> 4404 bytes ...81aa39-f25a-47e3-8909-bbb955d63a1b-m0.avro | Bin 4405 -> 0 bytes ...ec306-70b3-4d04-a4b6-87de01187693-m0.avro} | Bin 4404 -> 4404 bytes ...c93e86-c022-49c4-bc6f-35621c840a05-m1.avro | Bin 4406 -> 0 bytes ...11fb69-c4b7-4732-98a3-154c8e821d41-m0.avro | Bin 4406 -> 0 bytes ...8f6465-742a-450b-a358-12b08ae8ff62-m0.avro | Bin 4404 -> 0 bytes ...820ce5-8545-4c2c-ad01-d2d70ca569fc-m0.avro | Bin 4404 -> 0 bytes ...17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro | Bin 4405 -> 0 bytes ...3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro | Bin 4404 -> 0 bytes ...3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro | Bin 4406 -> 0 bytes ...4c63ea-a734-4f86-b728-d35d56b3180c-m0.avro | Bin 4405 -> 0 bytes ...f15f72-e09c-4a97-9812-0ee2b5b7b597-m0.avro | Bin 4405 -> 0 bytes ...e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro | Bin 4405 -> 0 bytes ...0bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro | Bin 4407 -> 0 bytes ...5d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro | Bin 4407 -> 0 bytes ...24e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro | Bin 4404 -> 0 bytes ...37aece-7657-4840-905b-26cc0d4353e1-m0.avro | Bin 4404 -> 0 bytes ...37aece-7657-4840-905b-26cc0d4353e1-m1.avro | Bin 4407 -> 0 bytes ...679dff-e9d2-4743-8c9f-41100f6ed284-m0.avro | Bin 4405 -> 0 bytes ...50de00-debc-4b44-ac41-3f10af7e59a7-m0.avro | Bin 4404 -> 0 bytes ...50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro | Bin 4406 -> 0 bytes ...6b5ff2-453b-431e-9cde-884ceff64876-m0.avro | Bin 4404 -> 0 bytes ...2a34b-2762-4d3a-888a-0a38aa0d6b27-m0.avro} | Bin 4405 -> 4405 bytes ...363a35-c28c-4445-a9f3-27f83f5706a2-m0.avro | Bin 4404 -> 0 bytes ...363a35-c28c-4445-a9f3-27f83f5706a2-m1.avro | Bin 4407 -> 0 bytes ...4f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro | Bin 4404 -> 0 bytes ...d50ceb-ff50-4c31-8515-77245a727b91-m0.avro | Bin 4404 -> 0 bytes ...4315f-9dab-46b7-92ed-19078458b5a9-m0.avro} | Bin 4404 -> 4404 bytes ...a6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro | Bin 4405 -> 0 bytes ...b4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro | Bin 4404 -> 0 bytes ...3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro | Bin 4404 -> 0 bytes ...3d6bac-76d6-44d7-84d8-25b914dcf93a-m1.avro | Bin 4407 -> 0 bytes ...fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m0.avro | Bin 4404 -> 0 bytes ...fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro | Bin 4407 -> 0 bytes ...76888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro | Bin 4407 -> 0 bytes ...dc647f-b4a4-4e63-9a86-56ee7d6f5e07-m0.avro | Bin 4405 -> 0 bytes ...dec90-a037-46e9-97ea-09a3dbf4fe08-m0.avro} | Bin 4404 -> 4404 bytes ...bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro | Bin 4405 -> 0 bytes ...d4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro | Bin 4405 -> 0 bytes ...92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro | Bin 4404 -> 0 bytes ...238f24-b593-4f0e-8ea8-4ede49211ff9-m0.avro | Bin 4404 -> 0 bytes ...956563-1580-4c8a-859a-c232e2de30a2-m0.avro | Bin 0 -> 4406 bytes ...b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro | Bin 4404 -> 0 bytes ...bae933-47ed-4fe2-b10e-e52b1e6a93ed-m0.avro | Bin 4405 -> 0 bytes ...f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro | Bin 4405 -> 0 bytes ...f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro} | Bin 4404 -> 4404 bytes ...fa771f-7647-43e2-8f86-fe095e1dc073-m0.avro | Bin 4405 -> 0 bytes ...2d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro | Bin 4404 -> 0 bytes ...82678a-6ff9-4924-958c-22b926e25638-m0.avro | Bin 4404 -> 0 bytes ...c0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro | Bin 4405 -> 0 bytes ...358415-49ec-446a-a261-bff1c048723b-m0.avro | Bin 4405 -> 0 bytes ...358415-49ec-446a-a261-bff1c048723b-m1.avro | Bin 4406 -> 0 bytes ...467c7d-af98-4d40-b5c3-78a4507807d2-m0.avro | Bin 4405 -> 0 bytes ...ca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro | Bin 4405 -> 0 bytes ...ca3419-f1ca-4149-bf5c-6d400c0c1c64-m1.avro | Bin 4407 -> 0 bytes ...5bfd51-ebd0-4ba7-a45c-f84a42f3bd50-m0.avro | Bin 4405 -> 0 bytes ...fe0557-72f8-4571-861f-1e38db10fcab-m0.avro | Bin 4404 -> 0 bytes ...fe0557-72f8-4571-861f-1e38db10fcab-m1.avro | Bin 4406 -> 0 bytes ...45bf07-cc23-431a-a734-119b9ba5ce66-m0.avro | Bin 4403 -> 0 bytes ...7dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro | Bin 4404 -> 0 bytes ...6b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro | Bin 4407 -> 0 bytes ...d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro | Bin 4404 -> 0 bytes ...21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro | Bin 4406 -> 0 bytes ...5224f2-319a-4b68-9db6-5469d6ed3879-m0.avro | Bin 4407 -> 0 bytes ...0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro | Bin 4404 -> 0 bytes ...4a211e-5120-4462-9cef-76ab53d2a056-m0.avro | Bin 4407 -> 0 bytes ...9cdda-e5cb-479f-8367-161be6ed8913-m0.avro} | Bin 4405 -> 4405 bytes ...9f7ae1-abec-4da7-ac71-135f512de652-m0.avro | Bin 4405 -> 0 bytes ...79b62-f304-4c23-99f3-41b474624827-m0.avro} | Bin 4407 -> 4407 bytes ...09f507-047c-4d3b-b967-af45b8ced15c-m0.avro | Bin 4404 -> 0 bytes ...0b9af2-7966-497a-b16f-9cfbddd7f0ca-m0.avro | Bin 4405 -> 0 bytes ...212431-1c5a-4680-924d-cb722127f8b2-m0.avro | Bin 4405 -> 0 bytes ...c66652-5303-4cba-a9d6-8d909f55c160-m0.avro | Bin 4404 -> 0 bytes ...4d9444-0e3a-4ad0-93f5-3e3eb577a853-m0.avro | Bin 4404 -> 0 bytes ...51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro | Bin 4405 -> 0 bytes ...72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro | Bin 4404 -> 0 bytes ...7e543-b7e7-47f2-8da9-86d195e03115-m0.avro} | Bin 4404 -> 4404 bytes ...443125-45ae-493f-b226-5729c263a793-m0.avro | Bin 4404 -> 0 bytes ...45d2b8-dc7f-4aea-8b70-4c27277ba9b1-m0.avro | Bin 4404 -> 0 bytes ...ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro | Bin 4404 -> 0 bytes ...8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro | Bin 4404 -> 0 bytes ...9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro | Bin 4405 -> 0 bytes ...c4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro | Bin 4405 -> 0 bytes ...de4c7b-f563-4f30-a379-e5bba52de832-m0.avro | Bin 0 -> 4407 bytes ...09199-948d-4bc3-b7cb-be211900e2b4-m0.avro} | Bin 4404 -> 4404 bytes ...568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro | Bin 4404 -> 0 bytes ...568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro | Bin 4406 -> 0 bytes ...309d30-424c-4c10-bb6d-79711a6576a8-m0.avro | Bin 4404 -> 0 bytes ...75c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro | Bin 4404 -> 0 bytes ...884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro | Bin 4405 -> 0 bytes ...73260d-3475-439f-a9fa-a76fa4e0e177-m0.avro | Bin 4405 -> 0 bytes ...e0a4be-6f80-4c5a-a750-e51d75296669-m0.avro | Bin 4404 -> 0 bytes ...92ab29-b58f-4338-812c-096249a28990-m0.avro | Bin 4404 -> 0 bytes ...9a338b-66dd-4282-8794-c8be344730ce-m0.avro | Bin 4406 -> 0 bytes ...c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro | Bin 4404 -> 0 bytes ...4b3bb3-5428-4a86-80ef-58fb739d9d9b-m0.avro | Bin 4404 -> 0 bytes ...364e18-9a58-42f2-a886-b079f1ccfabd-m0.avro | Bin 4404 -> 0 bytes ...d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro} | Bin 4405 -> 4405 bytes ...28ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro | Bin 4404 -> 0 bytes ...caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro | Bin 4404 -> 0 bytes ...e05260-42fb-4b65-8ff2-fb0c04ea290a-m0.avro | Bin 4405 -> 0 bytes ...68c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro | Bin 4404 -> 0 bytes ...8a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro | Bin 4407 -> 0 bytes ...99ea5b-9db5-401c-b103-eac623af11f6-m0.avro | Bin 4404 -> 0 bytes ...e31041-a16b-4018-97a8-f54121d210e7-m0.avro | Bin 4405 -> 0 bytes ...e31041-a16b-4018-97a8-f54121d210e7-m1.avro | Bin 4407 -> 0 bytes ...2c96ad-d3bc-4ae7-89f9-12e7ae273785-m0.avro | Bin 4405 -> 0 bytes ...3f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro | Bin 4404 -> 0 bytes ...1b7da7-41ac-4224-b399-e95130d3bc1a-m0.avro | Bin 4405 -> 0 bytes ...2853cd-f607-4bb3-8a0c-0749c91539a3-m0.avro | Bin 4405 -> 0 bytes ...566f28-bd86-431b-ba97-fd70c8073fae-m0.avro | Bin 4405 -> 0 bytes ...674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro | Bin 4404 -> 0 bytes ...7e2165-822c-4192-a463-1384cab3f16d-m0.avro | Bin 4404 -> 0 bytes ...8c75c7-08bc-40c1-8d2e-247132bef819-m0.avro | Bin 0 -> 4407 bytes ...c97079-ddf1-4e1f-a902-5eb19ff98914-m0.avro | Bin 4405 -> 0 bytes ...c97079-ddf1-4e1f-a902-5eb19ff98914-m1.avro | Bin 4406 -> 0 bytes ...7221f8-b07c-4992-b24c-d23de23c47e6-m0.avro | Bin 4404 -> 0 bytes ...c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro | Bin 4404 -> 0 bytes ...80981e-c2a9-4f8d-bbf8-38033b7735a6-m0.avro | Bin 4404 -> 0 bytes ...3b4af9-a9de-4e9c-addc-401a7a626d9b-m0.avro | Bin 4405 -> 0 bytes ...47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro} | Bin 4405 -> 4405 bytes ...192fbc-35b1-4090-b0d4-b0c858966378-m0.avro | Bin 4405 -> 0 bytes ...a9e15d-4031-4715-bf68-69610e86a620-m0.avro | Bin 4404 -> 0 bytes ...460c3d-034c-4f17-9db2-81edcb0f322d-m0.avro | Bin 4404 -> 0 bytes ...e770c-75c4-4839-acb5-7047ed32907a-m0.avro} | Bin 4404 -> 4405 bytes ...184284-5950-45ae-8dd9-1db19f4b0a31-m0.avro | Bin 4405 -> 0 bytes ...de6c7-ea3a-45a7-b343-5dc750ff4e17-m0.avro} | Bin 4404 -> 4404 bytes ...60ac97-208b-4c5d-9196-e952352617b8-m0.avro | Bin 4405 -> 0 bytes ...9caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro | Bin 4405 -> 0 bytes ...933998-38fb-415a-8c6f-65c20c4b60af-m0.avro | Bin 4404 -> 0 bytes ...b485aa-72dc-4245-a543-002d315794c0-m0.avro | Bin 4405 -> 0 bytes ...502702-5de9-4147-9f01-2a63f690f3f8-m0.avro | Bin 4404 -> 0 bytes ...502702-5de9-4147-9f01-2a63f690f3f8-m1.avro | Bin 4406 -> 0 bytes ...a9a07-76bf-43a1-8790-6c20032bb450-m0.avro} | Bin 4404 -> 4404 bytes ...c4729e-faab-4e6b-a5da-b8c0de8541b7-m0.avro | Bin 4405 -> 0 bytes ...b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro} | Bin 4405 -> 4405 bytes ...a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro | Bin 4404 -> 0 bytes ...743534-d4bf-44dd-84e9-8bde8ee730c0-m0.avro | Bin 4405 -> 0 bytes ...f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro | Bin 4406 -> 0 bytes ...961953-5e03-4ad4-aaaa-44c9629344a8-m0.avro | Bin 4407 -> 0 bytes ...f74252-bdf3-4d1e-b45f-4cf875682ac1-m0.avro | Bin 4405 -> 0 bytes ...5041a6-7503-46d7-a94a-e367abc8212f-m0.avro | Bin 4404 -> 0 bytes ...37347-116d-42ba-911e-8d2f1dd3b21d-m0.avro} | Bin 4404 -> 4404 bytes ...-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro | Bin 2020 -> 0 bytes ...d28c75c7-08bc-40c1-8d2e-247132bef819.avro} | Bin 1788 -> 1788 bytes ...-1b8f6465-742a-450b-a358-12b08ae8ff62.avro | Bin 2022 -> 0 bytes ...-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro | Bin 2019 -> 0 bytes ...-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro | Bin 2021 -> 0 bytes ...-767dfbab-4f1e-4dfd-ac6a-07deb840532f.avro | Bin 1904 -> 0 bytes ...-d07e2165-822c-4192-a463-1384cab3f16d.avro | Bin 1904 -> 0 bytes ...-93443125-45ae-493f-b226-5729c263a793.avro | Bin 1903 -> 0 bytes ...577dec90-a037-46e9-97ea-09a3dbf4fe08.avro} | Bin 1905 -> 1905 bytes ...-406b5ff2-453b-431e-9cde-884ceff64876.avro | Bin 2021 -> 0 bytes ...-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.avro | Bin 1904 -> 0 bytes ...-464f1a0e-cd51-462b-b4c2-81e91f278432.avro | Bin 2021 -> 0 bytes ...-7445bf07-cc23-431a-a734-119b9ba5ce66.avro | Bin 1785 -> 0 bytes ...-dda9e15d-4031-4715-bf68-69610e86a620.avro | Bin 1773 -> 0 bytes ...fe837347-116d-42ba-911e-8d2f1dd3b21d.avro} | Bin 1773 -> 1773 bytes ...e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro} | Bin 1787 -> 1787 bytes ...-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro | Bin 1773 -> 0 bytes ...-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro | Bin 1904 -> 0 bytes ...9ec09199-948d-4bc3-b7cb-be211900e2b4.avro} | Bin 1904 -> 1905 bytes ...-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro | Bin 1773 -> 0 bytes ...-79d7103a-e46f-43fa-ae30-c19fd45e0406.avro | Bin 1905 -> 0 bytes ...-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro | Bin 1788 -> 0 bytes ...-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro | Bin 1904 -> 0 bytes ...9127e543-b7e7-47f2-8da9-86d195e03115.avro} | Bin 1788 -> 1788 bytes ...-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro | Bin 1903 -> 0 bytes ...-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro | Bin 1905 -> 0 bytes ...-b4364e18-9a58-42f2-a886-b079f1ccfabd.avro | Bin 1773 -> 0 bytes ...-61b30373-a89a-44a1-bcee-d854aeb33acb.avro | Bin 1904 -> 0 bytes ...-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.avro | Bin 1904 -> 0 bytes ...4a74315f-9dab-46b7-92ed-19078458b5a9.avro} | Bin 1903 -> 1903 bytes ...-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro | Bin 1904 -> 0 bytes ...-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro | Bin 1904 -> 0 bytes ...-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro | Bin 1773 -> 0 bytes ...-44d10516-886c-478f-8be2-84606aa42d96.avro | Bin 1902 -> 0 bytes ...-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro | Bin 1773 -> 0 bytes ...-ab92ab29-b58f-4338-812c-096249a28990.avro | Bin 1904 -> 0 bytes ...-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro | Bin 1773 -> 0 bytes ...-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro | Bin 1773 -> 0 bytes ...-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro | Bin 1905 -> 0 bytes ...-88c66652-5303-4cba-a9d6-8d909f55c160.avro | Bin 1773 -> 0 bytes ...-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro | Bin 1904 -> 0 bytes ...-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro | Bin 1773 -> 0 bytes ...-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro | Bin 1788 -> 0 bytes ...-14c93e86-c022-49c4-bc6f-35621c840a05.avro | Bin 1904 -> 0 bytes ...-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro | Bin 1773 -> 0 bytes ...-15411624-4674-4dcf-a2f5-46beb4722430.avro | Bin 1901 -> 0 bytes ...-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro | Bin 1773 -> 0 bytes ...-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro | Bin 1904 -> 0 bytes ...-d680981e-c2a9-4f8d-bbf8-38033b7735a6.avro | Bin 1904 -> 0 bytes ...-c099ea5b-9db5-401c-b103-eac623af11f6.avro | Bin 1788 -> 0 bytes ...-73fe0557-72f8-4571-861f-1e38db10fcab.avro | Bin 1903 -> 0 bytes ...-46363a35-c28c-4445-a9f3-27f83f5706a2.avro | Bin 1904 -> 0 bytes ...-8509f507-047c-4d3b-b967-af45b8ced15c.avro | Bin 1788 -> 0 bytes ...-eb933998-38fb-415a-8c6f-65c20c4b60af.avro | Bin 1773 -> 0 bytes ...-6882678a-6ff9-4924-958c-22b926e25638.avro | Bin 2020 -> 0 bytes ...-ee502702-5de9-4147-9f01-2a63f690f3f8.avro | Bin 1904 -> 0 bytes ...139ec306-70b3-4d04-a4b6-87de01187693.avro} | Bin 1773 -> 1773 bytes ...-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro | Bin 1774 -> 0 bytes ...-796b30f2-b5b9-4d82-9b7f-39a0a8276bfa.avro | Bin 1789 -> 0 bytes ...-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro | Bin 1774 -> 0 bytes ...668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.avro} | Bin 1772 -> 1772 bytes ...-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro | Bin 1774 -> 0 bytes ...b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro} | Bin 1773 -> 1774 bytes ...-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro | Bin 1789 -> 0 bytes ...-3c679dff-e9d2-4743-8c9f-41100f6ed284.avro | Bin 1906 -> 0 bytes ...-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro | Bin 0 -> 1785 bytes ...-01e6f094-0145-4d30-be1e-b291d4941071.avro | Bin 1789 -> 0 bytes ...-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro | Bin 2022 -> 0 bytes ...-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro | Bin 1774 -> 0 bytes ...-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro | Bin 1774 -> 0 bytes ...-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro | Bin 1774 -> 0 bytes ...-7c5224f2-319a-4b68-9db6-5469d6ed3879.avro | Bin 1789 -> 0 bytes ...-24011efa-994c-4030-8da7-53357c467c6f.avro | Bin 1906 -> 0 bytes ...-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro | Bin 1774 -> 0 bytes ...-66fa771f-7647-43e2-8f86-fe095e1dc073.avro | Bin 1774 -> 0 bytes ...-335d413f-b61d-4446-a8b3-3b77c0e9d78b.avro | Bin 1789 -> 0 bytes ...-ecb485aa-72dc-4245-a543-002d315794c0.avro | Bin 1905 -> 0 bytes ...-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro | Bin 1774 -> 0 bytes ...-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro | Bin 1789 -> 0 bytes ...-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro | Bin 1906 -> 0 bytes ...-b09a338b-66dd-4282-8794-c8be344730ce.avro | Bin 1789 -> 0 bytes ...-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro | Bin 1789 -> 0 bytes ...-330bf2a8-7467-4ab1-879b-56ef0a34a4ca.avro | Bin 1789 -> 0 bytes ...-87212431-1c5a-4680-924d-cb722127f8b2.avro | Bin 1905 -> 0 bytes ...-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro | Bin 1789 -> 0 bytes ...-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro | Bin 1774 -> 0 bytes ...-ce566f28-bd86-431b-ba97-fd70c8073fae.avro | Bin 2021 -> 0 bytes ...-de460c3d-034c-4f17-9db2-81edcb0f322d.avro | Bin 2019 -> 0 bytes ...-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro | Bin 1774 -> 0 bytes ...-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro | Bin 1789 -> 0 bytes ...-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro | Bin 1774 -> 0 bytes ...f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro} | Bin 1773 -> 1774 bytes ...9dde4c7b-f563-4f30-a379-e5bba52de832.avro} | Bin 1787 -> 1787 bytes ...dffe770c-75c4-4839-acb5-7047ed32907a.avro} | Bin 1788 -> 1789 bytes ...-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro | Bin 1905 -> 0 bytes ...-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro | Bin 1774 -> 0 bytes ...-e560ac97-208b-4c5d-9196-e952352617b8.avro | Bin 1789 -> 0 bytes ...-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro | Bin 1906 -> 0 bytes ...84079b62-f304-4c23-99f3-41b474624827.avro} | Bin 1787 -> 1787 bytes ...-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro | Bin 1774 -> 0 bytes ...-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro | Bin 1774 -> 0 bytes ...-c0e31041-a16b-4018-97a8-f54121d210e7.avro | Bin 1906 -> 0 bytes ...-49d50ceb-ff50-4c31-8515-77245a727b91.avro | Bin 1904 -> 0 bytes ...-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro | Bin 1774 -> 0 bytes ...-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.avro | Bin 0 -> 1905 bytes ...-7d69cdda-e5cb-479f-8367-161be6ed8913.avro | Bin 0 -> 1774 bytes ...-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro | Bin 1906 -> 0 bytes ...-a273260d-3475-439f-a9fa-a76fa4e0e177.avro | Bin 2021 -> 0 bytes ...-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro | Bin 2020 -> 0 bytes ...-65f73aa1-e388-47f7-ad3c-0e0547345595.avro | Bin 1905 -> 0 bytes ...-ce2853cd-f607-4bb3-8a0c-0749c91539a3.avro | Bin 1789 -> 0 bytes ...-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.avro | Bin 2022 -> 0 bytes ...-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro | Bin 1774 -> 0 bytes ...-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro | Bin 1772 -> 0 bytes ...-dd192fbc-35b1-4090-b0d4-b0c858966378.avro | Bin 1774 -> 0 bytes ...60956563-1580-4c8a-859a-c232e2de30a2.avro} | Bin 1788 -> 1789 bytes ...-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro | Bin 1789 -> 0 bytes ...-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro | Bin 1905 -> 0 bytes ...-7e9f7ae1-abec-4da7-ac71-135f512de652.avro | Bin 1906 -> 0 bytes ...-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro | Bin 1905 -> 0 bytes ...-6d358415-49ec-446a-a261-bff1c048723b.avro | Bin 1906 -> 0 bytes ...-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro | Bin 0 -> 1774 bytes ...-2cf0d335-5975-450e-b513-14e7c173188a.avro | Bin 1774 -> 0 bytes ...-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro | Bin 1905 -> 0 bytes ...-d3c97079-ddf1-4e1f-a902-5eb19ff98914.avro | Bin 1905 -> 0 bytes ...-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro | Bin 1774 -> 0 bytes ...-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro | Bin 2021 -> 0 bytes ...-d93b4af9-a9de-4e9c-addc-401a7a626d9b.avro | Bin 1905 -> 0 bytes ...-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro | Bin 1774 -> 0 bytes ...f15a9a07-76bf-43a1-8790-6c20032bb450.avro} | Bin 1772 -> 1772 bytes 522 files changed, 181 insertions(+), 285 deletions(-) rename warehouse/test_ns.db/target/data/{1001/1010/1001/00111011/00000-0-c099ea5b-9db5-401c-b103-eac623af11f6.parquet => 0000/0100/0001/01010010/00000-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/0000/0100/0100/10101000/00000-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.parquet rename warehouse/test_ns.db/target/data/{0000/0001/1000/11111010/00000-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet => 0001/0001/1111/00110000/00000-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.parquet} (100%) rename warehouse/test_ns.db/target/data/{0000/0010/1111/00001110/00000-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.parquet => 0001/0010/1010/01001100/00000-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/0001/0110/0001/10111110/00000-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.parquet delete mode 100644 warehouse/test_ns.db/target/data/0010/0011/0101/11100001/00000-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.parquet delete mode 100644 warehouse/test_ns.db/target/data/0010/0011/1100/10011010/00000-0-464f1a0e-cd51-462b-b4c2-81e91f278432.parquet rename warehouse/test_ns.db/target/data/0010/{1000/1011/10100000/00000-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.parquet => 0011/1101/11000011/00000-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/0010/0110/1111/00001001/00000-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet delete mode 100644 warehouse/test_ns.db/target/data/0010/1110/1100/11101000/00000-0-46363a35-c28c-4445-a9f3-27f83f5706a2.parquet delete mode 100644 warehouse/test_ns.db/target/data/0011/0001/0001/00110000/00000-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.parquet delete mode 100644 warehouse/test_ns.db/target/data/0011/0110/0100/00100101/00000-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet delete mode 100644 warehouse/test_ns.db/target/data/0011/1000/0000/11000101/00000-0-6882678a-6ff9-4924-958c-22b926e25638.parquet delete mode 100644 warehouse/test_ns.db/target/data/0011/1001/0001/10100110/00000-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.parquet rename warehouse/test_ns.db/target/data/{0001/0101/0000/11011100/00000-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.parquet => 0011/1101/0001/01110011/00000-0-139ec306-70b3-4d04-a4b6-87de01187693.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/0011/1101/0101/00000010/00000-0-61b30373-a89a-44a1-bcee-d854aeb33acb.parquet delete mode 100644 warehouse/test_ns.db/target/data/0011/1110/1001/00001001/00000-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/0000/0001/10101111/00000-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/0000/1010/00000101/00000-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/0000/1011/01111111/00000-0-7e9f7ae1-abec-4da7-ac71-135f512de652.parquet rename warehouse/test_ns.db/target/data/{0000/1111/1010/01010011/00000-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet => 0100/0011/0000/11000010/00000-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/0100/0101/0100/01000101/00000-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/0111/0001/10111011/00000-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/1111/0111/00001001/00000-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/1111/1101/10111110/00000-0-49d50ceb-ff50-4c31-8515-77245a727b91.parquet delete mode 100644 warehouse/test_ns.db/target/data/0101/0000/0001/11001110/00000-0-3737aece-7657-4840-905b-26cc0d4353e1.parquet delete mode 100644 warehouse/test_ns.db/target/data/0101/0000/1111/11111000/00000-0-65f73aa1-e388-47f7-ad3c-0e0547345595.parquet delete mode 100644 warehouse/test_ns.db/target/data/0101/0010/1010/10100101/00000-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.parquet delete mode 100644 warehouse/test_ns.db/target/data/0101/0011/1001/00101111/00000-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.parquet delete mode 100644 warehouse/test_ns.db/target/data/0101/0101/0001/10010110/00000-0-88c66652-5303-4cba-a9d6-8d909f55c160.parquet delete mode 100644 warehouse/test_ns.db/target/data/0101/1110/1100/10001001/00000-0-c0e31041-a16b-4018-97a8-f54121d210e7.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/0001/0100/10001011/00000-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/0110/0010/10011000/00000-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/1001/0110/11001011/00000-0-7445bf07-cc23-431a-a734-119b9ba5ce66.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/1011/1101/11011100/00000-0-ce2853cd-f607-4bb3-8a0c-0749c91539a3.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/1101/0001/10111010/00000-0-dd192fbc-35b1-4090-b0d4-b0c858966378.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/1101/1000/01110111/00000-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet delete mode 100644 warehouse/test_ns.db/target/data/0110/1110/1111/11000001/00000-0-e560ac97-208b-4c5d-9196-e952352617b8.parquet delete mode 100644 warehouse/test_ns.db/target/data/0111/0010/0110/11101000/00000-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.parquet delete mode 100644 warehouse/test_ns.db/target/data/0111/0110/1011/00110110/00000-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.parquet delete mode 100644 warehouse/test_ns.db/target/data/0111/1010/1100/01001110/00000-0-a1309d30-424c-4c10-bb6d-79711a6576a8.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/0011/0110/11000100/00000-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/0011/1010/00110111/00000-0-3c679dff-e9d2-4743-8c9f-41100f6ed284.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/0100/1111/11101000/00000-0-8509f507-047c-4d3b-b967-af45b8ced15c.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/0110/0010/10001111/00000-0-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/0110/0110/10001101/00000-0-406b5ff2-453b-431e-9cde-884ceff64876.parquet rename warehouse/test_ns.db/target/data/{0001/0101/1111/01010001/00000-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.parquet => 1000/0110/1100/11111010/00000-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1000/0111/0000/11111111/00000-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/1000/0111/01001000/00000-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.parquet rename warehouse/test_ns.db/target/data/{0001/0111/0110/01100000/00000-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet => 1000/1010/0011/01101110/00000-0-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1000/1100/0011/11010010/00000-0-15411624-4674-4dcf-a2f5-46beb4722430.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/1101/1011/11000000/00000-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/1110/1001/00011111/00000-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/0010/0100/11010001/00000-0-a273260d-3475-439f-a9fa-a76fa4e0e177.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/0101/0000/11110011/00000-0-ab92ab29-b58f-4338-812c-096249a28990.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/0101/0111/10011011/00000-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/0101/1001/11001000/00000-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.parquet rename warehouse/test_ns.db/target/data/{1100/0101/0001/00011111/00000-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet => 1001/0111/1111/10110011/00000-0-9127e543-b7e7-47f2-8da9-86d195e03115.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1001/1010/0100/00110101/00000-0-1b8f6465-742a-450b-a358-12b08ae8ff62.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/1010/1110/11100000/00000-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/1010/1111/01110101/00000-0-fe5041a6-7503-46d7-a94a-e367abc8212f.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/1100/0110/00010010/00000-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/1101/0001/10100000/00000-0-73fe0557-72f8-4571-861f-1e38db10fcab.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/1101/1011/11110110/00000-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.parquet rename warehouse/test_ns.db/target/data/{0011/0000/0001/01011010/00000-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.parquet => 1001/1110/0010/01101110/00000-0-dffe770c-75c4-4839-acb5-7047ed32907a.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1010/0001/0001/01110001/00000-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.parquet rename warehouse/test_ns.db/target/data/{0100/0010/1010/01011000/00000-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.parquet => 1010/0001/0101/01010111/00000-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1010/0011/0001/11110010/00000-0-87212431-1c5a-4680-924d-cb722127f8b2.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/0011/1011/01000110/00000-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/0011/1110/00101000/00000-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/0101/0101/01101110/00000-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/0110/0110/01001111/00000-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/0110/0111/10010110/00000-0-de460c3d-034c-4f17-9db2-81edcb0f322d.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/1000/1111/11011101/00000-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/1100/0111/10111011/00000-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/1110/1110/10100001/00000-0-2cf0d335-5975-450e-b513-14e7c173188a.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/0010/1011/01100100/00000-0-14c93e86-c022-49c4-bc6f-35621c840a05.parquet rename warehouse/test_ns.db/target/data/{0001/1111/1101/00111001/00000-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet => 1011/0100/0000/11101100/00000-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1011/0100/0010/00010100/00000-0-8044e2db-5959-4c27-8e91-e5ed66869db8.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/0101/1010/01101111/00000-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/0110/1101/00010011/00000-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/1001/0011/00000111/00000-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/1001/1001/11001101/00000-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/1010/0100/01100100/00000-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/1011/0110/01000110/00000-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.parquet rename warehouse/test_ns.db/target/data/{0110/0011/1110/11010110/00000-0-93443125-45ae-493f-b226-5729c263a793.parquet => 1011/1101/0110/10001010/00000-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1011/1101/1010/10101111/00000-0-ee502702-5de9-4147-9f01-2a63f690f3f8.parquet delete mode 100644 warehouse/test_ns.db/target/data/1100/0101/0001/11111111/00000-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.parquet delete mode 100644 warehouse/test_ns.db/target/data/1100/1110/1110/00011110/00000-0-24011efa-994c-4030-8da7-53357c467c6f.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/0001/0100/01101000/00000-0-b4364e18-9a58-42f2-a886-b079f1ccfabd.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/0001/1000/10011010/00000-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/0001/1001/11111010/00000-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/0011/0101/10000111/00000-0-eb933998-38fb-415a-8c6f-65c20c4b60af.parquet rename warehouse/test_ns.db/target/data/{0111/1101/0001/11000111/00000-0-ecb485aa-72dc-4245-a543-002d315794c0.parquet => 1101/0100/1000/00000001/00000-0-4a74315f-9dab-46b7-92ed-19078458b5a9.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1101/0111/0001/00111011/00000-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/1010/1100/10110011/00000-0-dda9e15d-4031-4715-bf68-69610e86a620.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/1011/1011/11011001/00000-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/1100/0000/00100111/00000-0-44d10516-886c-478f-8be2-84606aa42d96.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/1100/1001/11101001/00000-0-d57221f8-b07c-4992-b24c-d23de23c47e6.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/1110/0011/10001010/00000-0-2b541d14-821b-4439-b27f-79328feb2cb7.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/1110/1010/11001100/00000-0-6d358415-49ec-446a-a261-bff1c048723b.parquet delete mode 100644 warehouse/test_ns.db/target/data/1110/0011/0000/10110011/00000-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet delete mode 100644 warehouse/test_ns.db/target/data/1110/1000/1001/01111100/00000-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet delete mode 100644 warehouse/test_ns.db/target/data/1110/1000/1100/10011011/00000-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.parquet delete mode 100644 warehouse/test_ns.db/target/data/1110/1001/0111/10111110/00000-0-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.parquet delete mode 100644 warehouse/test_ns.db/target/data/1110/1110/1110/01110010/00000-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet delete mode 100644 warehouse/test_ns.db/target/data/1111/0011/0101/01111111/00000-0-d07e2165-822c-4192-a463-1384cab3f16d.parquet rename warehouse/test_ns.db/target/data/{0010/1010/0000/11001011/00000-0-66fa771f-7647-43e2-8f86-fe095e1dc073.parquet => 1111/0100/0010/10111110/00000-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1111/0100/1111/01001110/00000-0-284b2273-468b-4c60-a6c4-99561a3f0d79.parquet delete mode 100644 warehouse/test_ns.db/target/data/1111/0110/1001/01100011/00000-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.parquet delete mode 100644 warehouse/test_ns.db/target/data/1111/1100/0001/01101011/00000-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.parquet rename warehouse/test_ns.db/target/data/{0010/1111/0100/01111100/00000-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.parquet => 1111/1101/0100/00001110/00000-0-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet} (100%) delete mode 100644 warehouse/test_ns.db/target/data/1111/1101/0111/00101010/00000-0-ce566f28-bd86-431b-ba97-fd70c8073fae.parquet rename warehouse/test_ns.db/target/metadata/{00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json => 00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json rename warehouse/test_ns.db/target/metadata/{00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json => 00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json rename warehouse/test_ns.db/target/metadata/{00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json => 00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json} (82%) rename warehouse/test_ns.db/target/metadata/{00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json => 00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json rename warehouse/test_ns.db/target/metadata/{00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json => 00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json} (53%) delete mode 100644 warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json create mode 100644 warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json rename warehouse/test_ns.db/target/metadata/{284b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro => 072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/1181aa39-f25a-47e3-8909-bbb955d63a1b-m0.avro rename warehouse/test_ns.db/target/metadata/{18d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro => 139ec306-70b3-4d04-a4b6-87de01187693-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/1811fb69-c4b7-4732-98a3-154c8e821d41-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/1b8f6465-742a-450b-a358-12b08ae8ff62-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/28820ce5-8545-4c2c-ad01-d2d70ca569fc-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/2c17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/2c4c63ea-a734-4f86-b728-d35d56b3180c-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/30f15f72-e09c-4a97-9812-0ee2b5b7b597-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/32e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/330bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/335d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/3624e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/3737aece-7657-4840-905b-26cc0d4353e1-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/3737aece-7657-4840-905b-26cc0d4353e1-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/3c679dff-e9d2-4743-8c9f-41100f6ed284-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/406b5ff2-453b-431e-9cde-884ceff64876-m0.avro rename warehouse/test_ns.db/target/metadata/{24011efa-994c-4030-8da7-53357c467c6f-m0.avro => 42c2a34b-2762-4d3a-888a-0a38aa0d6b27-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/46363a35-c28c-4445-a9f3-27f83f5706a2-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/46363a35-c28c-4445-a9f3-27f83f5706a2-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/464f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/49d50ceb-ff50-4c31-8515-77245a727b91-m0.avro rename warehouse/test_ns.db/target/metadata/{44d10516-886c-478f-8be2-84606aa42d96-m0.avro => 4a74315f-9dab-46b7-92ed-19078458b5a9-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/5276888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/54dc647f-b4a4-4e63-9a86-56ee7d6f5e07-m0.avro rename warehouse/test_ns.db/target/metadata/{08f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro => 577dec90-a037-46e9-97ea-09a3dbf4fe08-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/59bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/5dd4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/5e92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/60238f24-b593-4f0e-8ea8-4ede49211ff9-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/60956563-1580-4c8a-859a-c232e2de30a2-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/61b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/62bae933-47ed-4fe2-b10e-e52b1e6a93ed-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/65f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro rename warehouse/test_ns.db/target/metadata/{14c93e86-c022-49c4-bc6f-35621c840a05-m0.avro => 668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro} (93%) delete mode 100644 warehouse/test_ns.db/target/metadata/66fa771f-7647-43e2-8f86-fe095e1dc073-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/672d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6882678a-6ff9-4924-958c-22b926e25638-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6e467c7d-af98-4d40-b5c3-78a4507807d2-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/725bfd51-ebd0-4ba7-a45c-f84a42f3bd50-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/7445bf07-cc23-431a-a734-119b9ba5ce66-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/767dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/796b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/79d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/7b21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/7c5224f2-319a-4b68-9db6-5469d6ed3879-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/7d0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/7d4a211e-5120-4462-9cef-76ab53d2a056-m0.avro rename warehouse/test_ns.db/target/metadata/{0e2a44fd-e823-43b1-a1eb-66890d16181a-m0.avro => 7d69cdda-e5cb-479f-8367-161be6ed8913-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/7e9f7ae1-abec-4da7-ac71-135f512de652-m0.avro rename warehouse/test_ns.db/target/metadata/{01e6f094-0145-4d30-be1e-b291d4941071-m0.avro => 84079b62-f304-4c23-99f3-41b474624827-m0.avro} (92%) delete mode 100644 warehouse/test_ns.db/target/metadata/8509f507-047c-4d3b-b967-af45b8ced15c-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/860b9af2-7966-497a-b16f-9cfbddd7f0ca-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/87212431-1c5a-4680-924d-cb722127f8b2-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/88c66652-5303-4cba-a9d6-8d909f55c160-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/8b4d9444-0e3a-4ad0-93f5-3e3eb577a853-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/8b51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/8b72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro rename warehouse/test_ns.db/target/metadata/{62985c5d-a0c2-4a0d-9431-a91c756b2433-m0.avro => 9127e543-b7e7-47f2-8da9-86d195e03115-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/93443125-45ae-493f-b226-5729c263a793-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9545d2b8-dc7f-4aea-8b70-4c27277ba9b1-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9a8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9cc4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro rename warehouse/test_ns.db/target/metadata/{15411624-4674-4dcf-a2f5-46beb4722430-m0.avro => 9ec09199-948d-4bc3-b7cb-be211900e2b4-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/a1309d30-424c-4c10-bb6d-79711a6576a8-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/a175c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/a1884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/a273260d-3475-439f-a9fa-a76fa4e0e177-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/a3e0a4be-6f80-4c5a-a750-e51d75296669-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ab92ab29-b58f-4338-812c-096249a28990-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b09a338b-66dd-4282-8794-c8be344730ce-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b1c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b34b3bb3-5428-4a86-80ef-58fb739d9d9b-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b4364e18-9a58-42f2-a886-b079f1ccfabd-m0.avro rename warehouse/test_ns.db/target/metadata/{203f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro => b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/b528ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b7caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b7e05260-42fb-4b65-8ff2-fb0c04ea290a-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c068c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c099ea5b-9db5-401c-b103-eac623af11f6-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c22c96ad-d3bc-4ae7-89f9-12e7ae273785-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/c73f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/cd1b7da7-41ac-4224-b399-e95130d3bc1a-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ce2853cd-f607-4bb3-8a0c-0749c91539a3-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ce566f28-bd86-431b-ba97-fd70c8073fae-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ce674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d07e2165-822c-4192-a463-1384cab3f16d-m0.avro create mode 100644 warehouse/test_ns.db/target/metadata/d28c75c7-08bc-40c1-8d2e-247132bef819-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d3c97079-ddf1-4e1f-a902-5eb19ff98914-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d3c97079-ddf1-4e1f-a902-5eb19ff98914-m1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d57221f8-b07c-4992-b24c-d23de23c47e6-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d5c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d680981e-c2a9-4f8d-bbf8-38033b7735a6-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d93b4af9-a9de-4e9c-addc-401a7a626d9b-m0.avro rename warehouse/test_ns.db/target/metadata/{2cf0d335-5975-450e-b513-14e7c173188a-m0.avro => dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/dd192fbc-35b1-4090-b0d4-b0c858966378-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/dda9e15d-4031-4715-bf68-69610e86a620-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/de460c3d-034c-4f17-9db2-81edcb0f322d-m0.avro rename warehouse/test_ns.db/target/metadata/{0bdb173b-1d0e-457c-acd7-bd379e96c1a2-m0.avro => dffe770c-75c4-4839-acb5-7047ed32907a-m0.avro} (92%) delete mode 100644 warehouse/test_ns.db/target/metadata/e0184284-5950-45ae-8dd9-1db19f4b0a31-m0.avro rename warehouse/test_ns.db/target/metadata/{8044e2db-5959-4c27-8e91-e5ed66869db8-m0.avro => e1bde6c7-ea3a-45a7-b343-5dc750ff4e17-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/e560ac97-208b-4c5d-9196-e952352617b8-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/eb933998-38fb-415a-8c6f-65c20c4b60af-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ecb485aa-72dc-4245-a543-002d315794c0-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m1.avro rename warehouse/test_ns.db/target/metadata/{1d1fbc5e-5056-49f0-b44b-3c695b3b6812-m0.avro => f15a9a07-76bf-43a1-8790-6c20032bb450-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/f5c4729e-faab-4e6b-a5da-b8c0de8541b7-m0.avro rename warehouse/test_ns.db/target/metadata/{0ab31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro => f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/f8a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/f9743534-d4bf-44dd-84e9-8bde8ee730c0-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/f9f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/fb961953-5e03-4ad4-aaaa-44c9629344a8-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/fdf74252-bdf3-4d1e-b45f-4cf875682ac1-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/fe5041a6-7503-46d7-a94a-e367abc8212f-m0.avro rename warehouse/test_ns.db/target/metadata/{2b541d14-821b-4439-b27f-79328feb2cb7-m0.avro => fe837347-116d-42ba-911e-8d2f1dd3b21d-m0.avro} (94%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-1165795474348715640-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro rename warehouse/test_ns.db/target/metadata/{snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro => snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-1457045964290920894-0-1b8f6465-742a-450b-a358-12b08ae8ff62.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2251096554203142244-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro rename warehouse/test_ns.db/target/metadata/{snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro => snap-2460630470132577521-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro} (77%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2492927377825459959-0-406b5ff2-453b-431e-9cde-884ceff64876.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2537810747946166223-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro rename warehouse/test_ns.db/target/metadata/{snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro => snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro} (86%) rename warehouse/test_ns.db/target/metadata/{snap-329543906335174018-0-8044e2db-5959-4c27-8e91-e5ed66869db8.avro => snap-2707482049963695882-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro} (85%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro rename warehouse/test_ns.db/target/metadata/{snap-1445752429382423980-0-3737aece-7657-4840-905b-26cc0d4353e1.avro => snap-2947476326165869587-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.avro} (77%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2986888869253216203-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro rename warehouse/test_ns.db/target/metadata/{snap-1644775352898622177-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro => snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3224723533606729102-0-b4364e18-9a58-42f2-a886-b079f1ccfabd.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3340463550367158800-0-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.avro rename warehouse/test_ns.db/target/metadata/{snap-285316391250252069-0-fe5041a6-7503-46d7-a94a-e367abc8212f.avro => snap-336213885750966359-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro} (77%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3420590106920179313-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-346030801285740797-0-44d10516-886c-478f-8be2-84606aa42d96.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3964058929230744404-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4092764208808402358-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4183019543520611480-0-73fe0557-72f8-4571-861f-1e38db10fcab.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4312681858952059679-0-eb933998-38fb-415a-8c6f-65c20c4b60af.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4489414154952635593-0-6882678a-6ff9-4924-958c-22b926e25638.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4489525212361156766-0-ee502702-5de9-4147-9f01-2a63f690f3f8.avro rename warehouse/test_ns.db/target/metadata/{snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro => snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro} (86%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4915605823239118202-0-796b30f2-b5b9-4d82-9b7f-39a0a8276bfa.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro rename warehouse/test_ns.db/target/metadata/{snap-224386441439912473-0-a1309d30-424c-4c10-bb6d-79711a6576a8.avro => snap-519587681788242446-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.avro} (86%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro rename warehouse/test_ns.db/target/metadata/{snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro => snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro} (86%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5376886020839292182-0-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5395725435613174339-0-3c679dff-e9d2-4743-8c9f-41100f6ed284.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-54046115295283986-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5620569175367488250-0-01e6f094-0145-4d30-be1e-b291d4941071.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5801931121445824490-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5824616610361792412-0-7c5224f2-319a-4b68-9db6-5469d6ed3879.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5871250312332596167-0-24011efa-994c-4030-8da7-53357c467c6f.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5940108511084569748-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6234413701284196546-0-66fa771f-7647-43e2-8f86-fe095e1dc073.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6240071354120329714-0-335d413f-b61d-4446-a8b3-3b77c0e9d78b.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6473024829048856312-0-ecb485aa-72dc-4245-a543-002d315794c0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6901877966207604987-0-330bf2a8-7467-4ab1-879b-56ef0a34a4ca.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6925287486837365462-0-87212431-1c5a-4680-924d-cb722127f8b2.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6933179781506472663-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro rename warehouse/test_ns.db/target/metadata/{snap-1844314770242601776-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro => snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro} (86%) rename warehouse/test_ns.db/target/metadata/{snap-156875929699079505-0-d57221f8-b07c-4992-b24c-d23de23c47e6.avro => snap-710899873101048239-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro} (82%) rename warehouse/test_ns.db/target/metadata/{snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro => snap-7144360376649993479-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7197919905951446818-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7354261991702844234-0-e560ac97-208b-4c5d-9196-e952352617b8.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro rename warehouse/test_ns.db/target/metadata/{snap-603282837849840371-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.avro => snap-749163274667189918-0-84079b62-f304-4c23-99f3-41b474624827.avro} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7543542099974651966-0-c0e31041-a16b-4018-97a8-f54121d210e7.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7592335843825832251-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-7775845885571657371-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7909803071496021477-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8005085842327209807-0-65f73aa1-e388-47f7-ad3c-0e0547345595.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8198039180664750375-0-ce2853cd-f607-4bb3-8a0c-0749c91539a3.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8288941973562284942-0-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-833805222481799210-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro rename warehouse/test_ns.db/target/metadata/{snap-2179686375286065422-0-7d4a211e-5120-4462-9cef-76ab53d2a056.avro => snap-8352403435774761309-0-60956563-1580-4c8a-859a-c232e2de30a2.avro} (82%) delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8401722351562146185-0-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8454039229635992797-0-7e9f7ae1-abec-4da7-ac71-135f512de652.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8768996550935756846-0-6d358415-49ec-446a-a261-bff1c048723b.avro create mode 100644 warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8932309241501447446-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-9125775206094479309-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-9164726099961267182-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro rename warehouse/test_ns.db/target/metadata/{snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro => snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro} (86%) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index d7bb409519..ca2a62516d 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1127,11 +1127,17 @@ def merge_rows(self, df: pa.Table, join_cols: list missing_columns = merge_rows_util.do_join_columns_exist(source_col_names, target_col_names, join_cols) if missing_columns['source'] or missing_columns['target']: - raise Exception(f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}") + + return {'error_msgs': f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}"} + + #raise Exception(f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}") #check for dups on source if merge_rows_util.dups_check_in_source(source_table_name, join_cols, ctx): - raise Exception(f"Duplicate rows found in source table based on the key columns [{', '.join(join_cols)}]") + + return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No Merge executed'} + + #raise Exception(f"Duplicate rows found in source table based on the key columns [{', '.join(join_cols)}]") update_row_cnt = 0 insert_row_cnt = 0 @@ -1158,7 +1164,7 @@ def merge_rows(self, df: pa.Table, join_cols: list overwrite_filter = f"{join_col} IN ({', '.join(formatted_values)})" else: overwrite_filter = " OR ".join( - f"({' AND '.join([f'{col} = {repr(row[col])}' if source_col_types[col] != 'string' else f'{col} = {repr(row[col])}' for col in self.join_cols])})" + f"({' AND '.join([f'{col} = {repr(row[col])}' if source_col_types[col] != 'string' else f'{col} = {repr(row[col])}' for col in join_cols])})" for row in update_recs.to_pylist() ) diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index 2bf164a541..dfee441b25 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -8,18 +8,34 @@ wonder if the pyiceberg team already has a warehouse folder to stash all these tests in? add a show_table function to visually see the new table add a function to nuke the warehouse folder to cleanup + + update these functions to all start with "test_" + + test_1: single update/insert + test_2: scale to 1k updates/inserts on single key + test_3: test update only + test_4: test insert only + test_5: test no update or insert + test_6: composite key update/insert 100 rows + test_7: composite key update/insert 1000 rows + """ from datafusion import SessionContext from pyiceberg.catalog.sql import SqlCatalog - +import os +import shutil ctx = SessionContext() +test_namespace = "test_ns" -def merge_rows_test_1(): +def get_test_warehouse_path(): + curr_dir = os.path.dirname(os.path.abspath(__file__)) + return f"{curr_dir}/warehouse" - warehouse_path = "./warehouse" +def get_sql_catalog(namespace: str) -> SqlCatalog: + warehouse_path = get_test_warehouse_path() catalog = SqlCatalog( "default", **{ @@ -27,206 +43,175 @@ def merge_rows_test_1(): "warehouse": f"file://{warehouse_path}", }, ) - - namespace = "test_ns" + catalog.create_namespace(namespace=namespace) + return catalog - df = ctx.sql(""" - select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type - """).to_arrow_table() - - table = catalog.create_table(f"{namespace}.target", df.schema) +def purge_warehouse(): + warehouse_path = get_test_warehouse_path() - table.append(df) + if os.path.exists(warehouse_path): + shutil.rmtree(warehouse_path) - ## generate new dataset to upsert - df_new = ctx.sql(""" - select 1 as order_id, date '2021-01-05' as order_date, 'A' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type - union all - select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type - """).to_arrow_table() - +def show_iceberg_table(table): + import pyarrow.dataset as ds + table_name = "target" + if ctx.table_exist(table_name): + ctx.deregister_table(table_name) + ctx.register_dataset(table_name, ds.dataset(table.scan().to_arrow())) + ctx.sql(f"SELECT * FROM {table_name} limit 5").show() - res = table.merge_rows(df_new, ["order_id"]) +def show_df(df): + import pyarrow.dataset as ds + ctx.register_dataset("df", ds.dataset(df)) + ctx.sql("select * from df limit 10").show() - assert res['rows_updated'] == 1, "rows updated should be 1" - assert res['rows_inserted'] == 1, "rows inserted should be 1" +def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_dup: bool): - #print(res) + additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" -def merge_rows_test_2(): + dup_row = f""" + UNION ALL + ( + SELECT t.order_id {additional_columns} + , date '2021-01-01' as order_date, 'B' as order_type + from t + limit 1 + ) + """ if add_dup else "" - warehouse_path = "./warehouse" - catalog = SqlCatalog( - "default", - **{ - "uri": f"sqlite:///:memory:", - "warehouse": f"file://{warehouse_path}", - }, - ) - - namespace = "test_ns" - catalog.create_namespace(namespace=namespace) - df = ctx.sql(""" - select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type - """).to_arrow_table() - - table = catalog.create_table(f"{namespace}.target", df.schema) + sql = f""" + with t as (SELECT unnest(range({start_row},{end_row+1})) as order_id) + SELECT t.order_id {additional_columns} + , date '2021-01-01' as order_date, 'B' as order_type + from t + {dup_row} + """ - table.append(df) + #print(sql) + + df = ctx.sql(sql).to_arrow_table() + + + return df + +def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool): + + additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" - ## generate new dataset to upsert - df_new = ctx.sql(""" - select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type - union all - select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type - union all - select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type + df = ctx.sql(f""" + with t as (SELECT unnest(range({start_row},{end_row+1})) as order_id) + SELECT t.order_id {additional_columns} + , date '2021-01-01' as order_date, 'A' as order_type + from t """).to_arrow_table() + + catalog = get_sql_catalog(test_namespace) + table = catalog.create_table(f"{test_namespace}.target", df.schema) + + table.append(df) + + return table + +def test_merge_scenario_1(): + + """ + tests a single insert and update + """ + + table = gen_target_iceberg_table(1, 2, False) + source_df = gen_source_dataset(2, 3, False, False) - res = table.merge_rows(df_new, ["order_id"]) + res = table.merge_rows(source_df, ["order_id"]) - assert res['rows_updated'] == 2, "rows updated should be 2" - assert res['rows_inserted'] == 2, "rows inserted should be 2" + assert res['rows_updated'] == 1, f"rows updated should be 1, but got {res['rows_updated']}" + assert res['rows_inserted'] == 1, f"rows inserted should be 1, but got {res['rows_inserted']}" #print(res) -def merge_rows_test_3(): + #show_iceberg_table(table) - warehouse_path = "./warehouse" - catalog = SqlCatalog( - "default", - **{ - "uri": f"sqlite:///:memory:", - "warehouse": f"file://{warehouse_path}", - }, - ) - - namespace = "test_ns" - catalog.create_namespace(namespace=namespace) + purge_warehouse() - df = ctx.sql(""" - select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type - """).to_arrow_table() - - table = catalog.create_table(f"{namespace}.target", df.schema) +def test_merge_scenario_2(): - table.append(df) + """ + tests merging 1000 rows on a single key + """ - ## generate new dataset to upsert - df_new = ctx.sql(""" - select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type - union all - select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type - union all - select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type - """).to_arrow_table() + table = gen_target_iceberg_table(1, 1000, False) + source_df = gen_source_dataset(501, 1500, False, False) - res = table.merge_rows(df_new, ["order_id"], merge_options={'when_not_matched_insert_all': True}) - print(res) - assert res['rows_updated'] == 0, "rows updated should be 0" - assert res['rows_inserted'] == 2, "rows inserted should be 2" + res = table.merge_rows(source_df, ["order_id"]) + rows_updated_should_be = 500 + rows_inserted_should_be = 500 -def merge_rows_test_4(): + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - warehouse_path = "./warehouse" - catalog = SqlCatalog( - "default", - **{ - "uri": f"sqlite:///:memory:", - "warehouse": f"file://{warehouse_path}", - }, - ) - - namespace = "test_ns" - catalog.create_namespace(namespace=namespace) + #show_iceberg_table(table) - df = ctx.sql(""" - select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type - """).to_arrow_table() - - table = catalog.create_table(f"{namespace}.target", df.schema) + purge_warehouse() - table.append(df) +def test_merge_scenario_3(): - ## generate new dataset to upsert - df_new = ctx.sql(""" - select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type - union all - select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type - union all - select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type - """).to_arrow_table() + """ + tests merging 200 rows with a composite key + """ + + table = gen_target_iceberg_table(1, 200, True) + source_df = gen_source_dataset(101, 300, True, False) - res = table.merge_rows(df_new, ["order_id"], merge_options={'when_matched_update_all': True}) - print(res) - assert res['rows_updated'] == 2, "rows updated should be 2" - assert res['rows_inserted'] == 0, "rows inserted should be 0" + res = table.merge_rows(source_df, ["order_id", "order_line_id"]) -def merge_rows_test_5(): - warehouse_path = "./warehouse" - catalog = SqlCatalog( - "default", - **{ - "uri": f"sqlite:///:memory:", - "warehouse": f"file://{warehouse_path}", - }, - ) - - namespace = "test_ns" - catalog.create_namespace(namespace=namespace) + #print(res) - df = ctx.sql(""" - select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'B' as order_type - """).to_arrow_table() - - table = catalog.create_table(f"{namespace}.target", df.schema) + rows_updated_should_be = 100 + rows_inserted_should_be = 100 - table.append(df) + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - ## generate new dataset to upsert - df_new = ctx.sql(""" - select 1 as order_id, date '2021-01-05' as order_date, 'B' as order_type - union all - select 2 as order_id, date '2021-01-02' as order_date, 'C' as order_type - union all - select 3 as order_id, date '2021-04-01' as order_date, 'C' as order_type - union all - select 4 as order_id, date '2024-01-01' as order_date, 'D' as order_type - """).to_arrow_table() + #show_iceberg_table(table) + + purge_warehouse() + +def test_merge_source_dups(): + + """ + tests duplicate rows in source + """ + + table = gen_target_iceberg_table(1, 10, False) + source_df = gen_source_dataset(5, 15, False, True) + res = table.merge_rows(source_df, ["order_id"]) + + error_msgs = res['error_msgs'] + + #print(error_msgs) + + assert 'Duplicate rows found in source dataset' in error_msgs, f"error message should contain 'Duplicate rows found in source dataset', but got {error_msgs}" + + purge_warehouse() + + +def test_merge_update_only(): + print('blah') + +def test_merge_insert_only(): + print('blah') - res = table.merge_rows(df_new, ["order_id"], merge_options={'no_options': True}) - print(res) - #assert res['rows_updated'] == 2, "rows updated should be 2" - #assert res['rows_inserted'] == 0, "rows inserted should be 0" +def test_key_cols_misaligned(): + print('blah') if __name__ == "__main__": - merge_rows_test_1() - merge_rows_test_2() - merge_rows_test_3() - merge_rows_test_4() - merge_rows_test_5() + test_merge_scenario_1() + test_merge_scenario_2() + test_merge_scenario_3() + test_merge_source_dups() diff --git a/warehouse/test_ns.db/target/data/1001/1010/1001/00111011/00000-0-c099ea5b-9db5-401c-b103-eac623af11f6.parquet b/warehouse/test_ns.db/target/data/0000/0100/0001/01010010/00000-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/1001/1010/1001/00111011/00000-0-c099ea5b-9db5-401c-b103-eac623af11f6.parquet rename to warehouse/test_ns.db/target/data/0000/0100/0001/01010010/00000-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet diff --git a/warehouse/test_ns.db/target/data/0000/0100/0100/10101000/00000-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.parquet b/warehouse/test_ns.db/target/data/0000/0100/0100/10101000/00000-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/0000/0001/1000/11111010/00000-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet b/warehouse/test_ns.db/target/data/0001/0001/1111/00110000/00000-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0000/0001/1000/11111010/00000-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.parquet rename to warehouse/test_ns.db/target/data/0001/0001/1111/00110000/00000-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.parquet diff --git a/warehouse/test_ns.db/target/data/0000/0010/1111/00001110/00000-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.parquet b/warehouse/test_ns.db/target/data/0001/0010/1010/01001100/00000-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0000/0010/1111/00001110/00000-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.parquet rename to warehouse/test_ns.db/target/data/0001/0010/1010/01001100/00000-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet diff --git a/warehouse/test_ns.db/target/data/0001/0110/0001/10111110/00000-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.parquet b/warehouse/test_ns.db/target/data/0001/0110/0001/10111110/00000-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0010/0011/0101/11100001/00000-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.parquet b/warehouse/test_ns.db/target/data/0010/0011/0101/11100001/00000-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/0010/0011/1100/10011010/00000-0-464f1a0e-cd51-462b-b4c2-81e91f278432.parquet b/warehouse/test_ns.db/target/data/0010/0011/1100/10011010/00000-0-464f1a0e-cd51-462b-b4c2-81e91f278432.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/0010/1000/1011/10100000/00000-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.parquet b/warehouse/test_ns.db/target/data/0010/0011/1101/11000011/00000-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0010/1000/1011/10100000/00000-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.parquet rename to warehouse/test_ns.db/target/data/0010/0011/1101/11000011/00000-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet diff --git a/warehouse/test_ns.db/target/data/0010/0110/1111/00001001/00000-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet b/warehouse/test_ns.db/target/data/0010/0110/1111/00001001/00000-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0010/1110/1100/11101000/00000-0-46363a35-c28c-4445-a9f3-27f83f5706a2.parquet b/warehouse/test_ns.db/target/data/0010/1110/1100/11101000/00000-0-46363a35-c28c-4445-a9f3-27f83f5706a2.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/0011/0001/0001/00110000/00000-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.parquet b/warehouse/test_ns.db/target/data/0011/0001/0001/00110000/00000-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0011/0110/0100/00100101/00000-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet b/warehouse/test_ns.db/target/data/0011/0110/0100/00100101/00000-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0011/1000/0000/11000101/00000-0-6882678a-6ff9-4924-958c-22b926e25638.parquet b/warehouse/test_ns.db/target/data/0011/1000/0000/11000101/00000-0-6882678a-6ff9-4924-958c-22b926e25638.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/0011/1001/0001/10100110/00000-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.parquet b/warehouse/test_ns.db/target/data/0011/1001/0001/10100110/00000-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0001/0101/0000/11011100/00000-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.parquet b/warehouse/test_ns.db/target/data/0011/1101/0001/01110011/00000-0-139ec306-70b3-4d04-a4b6-87de01187693.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0001/0101/0000/11011100/00000-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.parquet rename to warehouse/test_ns.db/target/data/0011/1101/0001/01110011/00000-0-139ec306-70b3-4d04-a4b6-87de01187693.parquet diff --git a/warehouse/test_ns.db/target/data/0011/1101/0101/00000010/00000-0-61b30373-a89a-44a1-bcee-d854aeb33acb.parquet b/warehouse/test_ns.db/target/data/0011/1101/0101/00000010/00000-0-61b30373-a89a-44a1-bcee-d854aeb33acb.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0011/1110/1001/00001001/00000-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.parquet b/warehouse/test_ns.db/target/data/0011/1110/1001/00001001/00000-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0100/0000/0001/10101111/00000-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.parquet b/warehouse/test_ns.db/target/data/0100/0000/0001/10101111/00000-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.parquet deleted file mode 100644 index 613e73a9075cba3d3016346e7652acee2e8ec88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbYuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/0100/0000/1011/01111111/00000-0-7e9f7ae1-abec-4da7-ac71-135f512de652.parquet b/warehouse/test_ns.db/target/data/0100/0000/1011/01111111/00000-0-7e9f7ae1-abec-4da7-ac71-135f512de652.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0000/1111/1010/01010011/00000-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet b/warehouse/test_ns.db/target/data/0100/0011/0000/11000010/00000-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0000/1111/1010/01010011/00000-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.parquet rename to warehouse/test_ns.db/target/data/0100/0011/0000/11000010/00000-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet diff --git a/warehouse/test_ns.db/target/data/0100/0101/0100/01000101/00000-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.parquet b/warehouse/test_ns.db/target/data/0100/0101/0100/01000101/00000-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/0100/0111/0001/10111011/00000-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet b/warehouse/test_ns.db/target/data/0100/0111/0001/10111011/00000-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0100/1111/0111/00001001/00000-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet b/warehouse/test_ns.db/target/data/0100/1111/0111/00001001/00000-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0100/1111/1101/10111110/00000-0-49d50ceb-ff50-4c31-8515-77245a727b91.parquet b/warehouse/test_ns.db/target/data/0100/1111/1101/10111110/00000-0-49d50ceb-ff50-4c31-8515-77245a727b91.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0101/0000/0001/11001110/00000-0-3737aece-7657-4840-905b-26cc0d4353e1.parquet b/warehouse/test_ns.db/target/data/0101/0000/0001/11001110/00000-0-3737aece-7657-4840-905b-26cc0d4353e1.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/0101/0000/1111/11111000/00000-0-65f73aa1-e388-47f7-ad3c-0e0547345595.parquet b/warehouse/test_ns.db/target/data/0101/0000/1111/11111000/00000-0-65f73aa1-e388-47f7-ad3c-0e0547345595.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0101/0010/1010/10100101/00000-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.parquet b/warehouse/test_ns.db/target/data/0101/0010/1010/10100101/00000-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.parquet deleted file mode 100644 index 613e73a9075cba3d3016346e7652acee2e8ec88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0101/0101/0001/10010110/00000-0-88c66652-5303-4cba-a9d6-8d909f55c160.parquet b/warehouse/test_ns.db/target/data/0101/0101/0001/10010110/00000-0-88c66652-5303-4cba-a9d6-8d909f55c160.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0101/1110/1100/10001001/00000-0-c0e31041-a16b-4018-97a8-f54121d210e7.parquet b/warehouse/test_ns.db/target/data/0101/1110/1100/10001001/00000-0-c0e31041-a16b-4018-97a8-f54121d210e7.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/0110/0001/0100/10001011/00000-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet b/warehouse/test_ns.db/target/data/0110/0001/0100/10001011/00000-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0110/0110/0010/10011000/00000-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.parquet b/warehouse/test_ns.db/target/data/0110/0110/0010/10011000/00000-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0110/1001/0110/11001011/00000-0-7445bf07-cc23-431a-a734-119b9ba5ce66.parquet b/warehouse/test_ns.db/target/data/0110/1001/0110/11001011/00000-0-7445bf07-cc23-431a-a734-119b9ba5ce66.parquet deleted file mode 100644 index 7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0110/1101/1000/01110111/00000-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet b/warehouse/test_ns.db/target/data/0110/1101/1000/01110111/00000-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0110/1110/1111/11000001/00000-0-e560ac97-208b-4c5d-9196-e952352617b8.parquet b/warehouse/test_ns.db/target/data/0110/1110/1111/11000001/00000-0-e560ac97-208b-4c5d-9196-e952352617b8.parquet deleted file mode 100644 index 7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0111/0110/1011/00110110/00000-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.parquet b/warehouse/test_ns.db/target/data/0111/0110/1011/00110110/00000-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/0111/1010/1100/01001110/00000-0-a1309d30-424c-4c10-bb6d-79711a6576a8.parquet b/warehouse/test_ns.db/target/data/0111/1010/1100/01001110/00000-0-a1309d30-424c-4c10-bb6d-79711a6576a8.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1000/0011/0110/11000100/00000-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.parquet b/warehouse/test_ns.db/target/data/1000/0011/0110/11000100/00000-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.parquet deleted file mode 100644 index 613e73a9075cba3d3016346e7652acee2e8ec88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=c|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1000/0110/0110/10001101/00000-0-406b5ff2-453b-431e-9cde-884ceff64876.parquet b/warehouse/test_ns.db/target/data/1000/0110/0110/10001101/00000-0-406b5ff2-453b-431e-9cde-884ceff64876.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/0001/0101/1111/01010001/00000-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.parquet b/warehouse/test_ns.db/target/data/1000/0110/1100/11111010/00000-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0001/0101/1111/01010001/00000-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.parquet rename to warehouse/test_ns.db/target/data/1000/0110/1100/11111010/00000-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.parquet diff --git a/warehouse/test_ns.db/target/data/1000/0111/0000/11111111/00000-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet b/warehouse/test_ns.db/target/data/1000/0111/0000/11111111/00000-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1000/1000/0111/01001000/00000-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.parquet b/warehouse/test_ns.db/target/data/1000/1000/0111/01001000/00000-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0001/0111/0110/01100000/00000-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet b/warehouse/test_ns.db/target/data/1000/1010/0011/01101110/00000-0-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0001/0111/0110/01100000/00000-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.parquet rename to warehouse/test_ns.db/target/data/1000/1010/0011/01101110/00000-0-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet diff --git a/warehouse/test_ns.db/target/data/1000/1100/0011/11010010/00000-0-15411624-4674-4dcf-a2f5-46beb4722430.parquet b/warehouse/test_ns.db/target/data/1000/1100/0011/11010010/00000-0-15411624-4674-4dcf-a2f5-46beb4722430.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1000/1110/1001/00011111/00000-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet b/warehouse/test_ns.db/target/data/1000/1110/1001/00011111/00000-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1001/0010/0100/11010001/00000-0-a273260d-3475-439f-a9fa-a76fa4e0e177.parquet b/warehouse/test_ns.db/target/data/1001/0010/0100/11010001/00000-0-a273260d-3475-439f-a9fa-a76fa4e0e177.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1001/0101/0000/11110011/00000-0-ab92ab29-b58f-4338-812c-096249a28990.parquet b/warehouse/test_ns.db/target/data/1001/0101/0000/11110011/00000-0-ab92ab29-b58f-4338-812c-096249a28990.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1001/0101/1001/11001000/00000-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.parquet b/warehouse/test_ns.db/target/data/1001/0101/1001/11001000/00000-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1100/0101/0001/00011111/00000-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet b/warehouse/test_ns.db/target/data/1001/0111/1111/10110011/00000-0-9127e543-b7e7-47f2-8da9-86d195e03115.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/1100/0101/0001/00011111/00000-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.parquet rename to warehouse/test_ns.db/target/data/1001/0111/1111/10110011/00000-0-9127e543-b7e7-47f2-8da9-86d195e03115.parquet diff --git a/warehouse/test_ns.db/target/data/1001/1010/0100/00110101/00000-0-1b8f6465-742a-450b-a358-12b08ae8ff62.parquet b/warehouse/test_ns.db/target/data/1001/1010/0100/00110101/00000-0-1b8f6465-742a-450b-a358-12b08ae8ff62.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1001/1010/1110/11100000/00000-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.parquet b/warehouse/test_ns.db/target/data/1001/1010/1110/11100000/00000-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=cYuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/1001/1100/0110/00010010/00000-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.parquet b/warehouse/test_ns.db/target/data/1001/1100/0110/00010010/00000-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1001/1101/0001/10100000/00000-0-73fe0557-72f8-4571-861f-1e38db10fcab.parquet b/warehouse/test_ns.db/target/data/1001/1101/0001/10100000/00000-0-73fe0557-72f8-4571-861f-1e38db10fcab.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1001/1101/1011/11110110/00000-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.parquet b/warehouse/test_ns.db/target/data/1001/1101/1011/11110110/00000-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0100/0010/1010/01011000/00000-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.parquet b/warehouse/test_ns.db/target/data/1010/0001/0101/01010111/00000-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0100/0010/1010/01011000/00000-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.parquet rename to warehouse/test_ns.db/target/data/1010/0001/0101/01010111/00000-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.parquet diff --git a/warehouse/test_ns.db/target/data/1010/0011/0001/11110010/00000-0-87212431-1c5a-4680-924d-cb722127f8b2.parquet b/warehouse/test_ns.db/target/data/1010/0011/0001/11110010/00000-0-87212431-1c5a-4680-924d-cb722127f8b2.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1010/0011/1110/00101000/00000-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet b/warehouse/test_ns.db/target/data/1010/0011/1110/00101000/00000-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1010/0101/0101/01101110/00000-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet b/warehouse/test_ns.db/target/data/1010/0101/0101/01101110/00000-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1010/0110/0110/01001111/00000-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet b/warehouse/test_ns.db/target/data/1010/0110/0110/01001111/00000-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1010/0110/0111/10010110/00000-0-de460c3d-034c-4f17-9db2-81edcb0f322d.parquet b/warehouse/test_ns.db/target/data/1010/0110/0111/10010110/00000-0-de460c3d-034c-4f17-9db2-81edcb0f322d.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1010/1000/1111/11011101/00000-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet b/warehouse/test_ns.db/target/data/1010/1000/1111/11011101/00000-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1010/1100/0111/10111011/00000-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.parquet b/warehouse/test_ns.db/target/data/1010/1100/0111/10111011/00000-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1010/1110/1110/10100001/00000-0-2cf0d335-5975-450e-b513-14e7c173188a.parquet b/warehouse/test_ns.db/target/data/1010/1110/1110/10100001/00000-0-2cf0d335-5975-450e-b513-14e7c173188a.parquet deleted file mode 100644 index 1cd3359562b1a3cf9c4c286cd53e37186f3d53b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h82xN4WJL_9%C&6C1FD3@&^$;)lvK%Z%`2ga!b2G1r6S;v2q-R)62|Tw zI(F>TxkD>;=-B>=oQ@iy?oBO$ATg+Cz--xZ0i^gcm$C6yzwU% zeGMQ(u%zk9fQ6a<1jnKngiT$YP3Y=uMuWryRRj>IAp<}P$pYc=9G}Voz8?a7!|xK0 zLLFV99^&82mT^~^HHW)WLPi|3Y2%B?JCKlUT|({!ea3ML^zg8G>Gc{c3`~iGuJ#8l zZ}9x8Rh5CsSXc=Pt;WcUM^cK}MHm*jYm6qo7l%~XG_j#6hH30uU^2x>K{#sM;jxIO zXkR7mmt;AX`aiZB^fFKkSr)|ufC%I%!99I~;*F$zl&lZ3^;o@9+d7T zK)c#o$@&?x-i6FtHwwWoo>`WIz`)(*Eh=Oz5oddB&f z+ijlXyv@^XQL}O2grYR(M|5I7J29hHW=!=aZ2{CZK~rXz3EDoR7@x;502Mif`Mrso zcP91ia;llHVj)W{u^ko>fo7?kUF;4R(aWP&v zN042r9^s`p&k25^KTmnE@ZOxCZx=dly>Q{?bDJ(P2o~DXS-Ou96%@%cenLZiMlEjigihRHa)xS7ZqoI1^8GH zs%Gy8&(iICTGA_^3FM!8vDYSD=udO1ljenU6yQ2I06pe61~0F@(OT2@*BXOCe;j+| d4Te|!7qR5-dUAc!*vFq=@PQv8fFl0k{RNpK1#KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/0001/1111/1101/00111001/00000-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet b/warehouse/test_ns.db/target/data/1011/0100/0000/11101100/00000-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0001/1111/1101/00111001/00000-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.parquet rename to warehouse/test_ns.db/target/data/1011/0100/0000/11101100/00000-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.parquet diff --git a/warehouse/test_ns.db/target/data/1011/0100/0010/00010100/00000-0-8044e2db-5959-4c27-8e91-e5ed66869db8.parquet b/warehouse/test_ns.db/target/data/1011/0100/0010/00010100/00000-0-8044e2db-5959-4c27-8e91-e5ed66869db8.parquet deleted file mode 100644 index 7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1011/1001/0011/00000111/00000-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet b/warehouse/test_ns.db/target/data/1011/1001/0011/00000111/00000-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/1011/1001/1001/11001101/00000-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.parquet b/warehouse/test_ns.db/target/data/1011/1001/1001/11001101/00000-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1011/1011/0110/01000110/00000-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.parquet b/warehouse/test_ns.db/target/data/1011/1011/0110/01000110/00000-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0110/0011/1110/11010110/00000-0-93443125-45ae-493f-b226-5729c263a793.parquet b/warehouse/test_ns.db/target/data/1011/1101/0110/10001010/00000-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0110/0011/1110/11010110/00000-0-93443125-45ae-493f-b226-5729c263a793.parquet rename to warehouse/test_ns.db/target/data/1011/1101/0110/10001010/00000-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet diff --git a/warehouse/test_ns.db/target/data/1011/1101/1010/10101111/00000-0-ee502702-5de9-4147-9f01-2a63f690f3f8.parquet b/warehouse/test_ns.db/target/data/1011/1101/1010/10101111/00000-0-ee502702-5de9-4147-9f01-2a63f690f3f8.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1100/0101/0001/11111111/00000-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.parquet b/warehouse/test_ns.db/target/data/1100/0101/0001/11111111/00000-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1100/1110/1110/00011110/00000-0-24011efa-994c-4030-8da7-53357c467c6f.parquet b/warehouse/test_ns.db/target/data/1100/1110/1110/00011110/00000-0-24011efa-994c-4030-8da7-53357c467c6f.parquet deleted file mode 100644 index 613e73a9075cba3d3016346e7652acee2e8ec88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbTxkD>;=-B>=oQ@iy?oBO$ATg+Cz--xZ0i^gcm$C6yzwU% zeGMQ(u%zk9fQ6a<1jnKngiT$YP3Y=uMuWryRRj>IAp<}P$pYc=9G}Voz8?a7!|xK0 zLLFV99^&82mT^~^HHW)WLPi|3Y2%B?JCKlUT|({!ea3ML^zg8G>Gc{c3`~iGuJ#8l zZ}9x8Rh5CsSXc=Pt;WcUM^cK}MHm*jYm6qo7l%~XG_j#6hH30uU^2x>K{#sM;jxIO zXkR7mmt;AX`aiZB^fFKkSr)|ufC%I%!99I~;*F$zl&lZ3^;o@9+d7T zK)c#o$@&?x-i6FtHwwWoo>`WIz`)(*Eh=Oz5oddB&f z+ijlXyv@^XQL}O2grYR(M|5I7J29hHW=!=aZ2{CZK~rXz3EDoR7@x;502Mif`Mrso zcP91ia;llHVj)W{u^ko>fo7?kUF;4R(aWP&v zN042r9^s`p&k25^KTmnE@ZOxCZx=dly>Q{?bDJ(P2o~DXS-Ou96%@%cenLZiMlEjigihRHa)xS7ZqoI1^8GH zs%Gy8&(iICTGA_^3FM!8vDYSD=udO1ljenU6yQ2I06pe61~0F@(OT2@*BXOCe;j+| d4Te|!7qR5-dUAc!*vFq=@PQv8fFl0k{RNpK1#KVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1101/0001/1001/11111010/00000-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet b/warehouse/test_ns.db/target/data/1101/0001/1001/11111010/00000-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.parquet deleted file mode 100644 index 15c3780fc6a3276a2462bd13121be37bbf480a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/1101/0011/0101/10000111/00000-0-eb933998-38fb-415a-8c6f-65c20c4b60af.parquet b/warehouse/test_ns.db/target/data/1101/0011/0101/10000111/00000-0-eb933998-38fb-415a-8c6f-65c20c4b60af.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0111/1101/0001/11000111/00000-0-ecb485aa-72dc-4245-a543-002d315794c0.parquet b/warehouse/test_ns.db/target/data/1101/0100/1000/00000001/00000-0-4a74315f-9dab-46b7-92ed-19078458b5a9.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0111/1101/0001/11000111/00000-0-ecb485aa-72dc-4245-a543-002d315794c0.parquet rename to warehouse/test_ns.db/target/data/1101/0100/1000/00000001/00000-0-4a74315f-9dab-46b7-92ed-19078458b5a9.parquet diff --git a/warehouse/test_ns.db/target/data/1101/0111/0001/00111011/00000-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet b/warehouse/test_ns.db/target/data/1101/0111/0001/00111011/00000-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1101/1010/1100/10110011/00000-0-dda9e15d-4031-4715-bf68-69610e86a620.parquet b/warehouse/test_ns.db/target/data/1101/1010/1100/10110011/00000-0-dda9e15d-4031-4715-bf68-69610e86a620.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1101/1011/1011/11011001/00000-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet b/warehouse/test_ns.db/target/data/1101/1011/1011/11011001/00000-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1101/1100/0000/00100111/00000-0-44d10516-886c-478f-8be2-84606aa42d96.parquet b/warehouse/test_ns.db/target/data/1101/1100/0000/00100111/00000-0-44d10516-886c-478f-8be2-84606aa42d96.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=c|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)akd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1101/1110/1010/11001100/00000-0-6d358415-49ec-446a-a261-bff1c048723b.parquet b/warehouse/test_ns.db/target/data/1101/1110/1010/11001100/00000-0-6d358415-49ec-446a-a261-bff1c048723b.parquet deleted file mode 100644 index 171f1b4f7c9e14c45c7b29c99bf27550f9e7e21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EOK%cU82#oUAq@*+yptI-3p8PZNnhB|w5DC$0frXalt&ooY#LtDh9VKVqp#- zL$DaI5Ytz&9mODI>fvc;7HN=JQpM*5nqmM*G9XWwJ)YxHp8$M209fEqsj7<|vF~Mz zm@CYj!+h`z*>KGM8+02IlC4Yj0)%mt0zEWrp0|5-7DAnI(8K*ft35coXjM?SjD?k; z(5jEx@kmNFFA;`CW{uIrZ^t1OGEHn~vSAu~7MM&mQV@z7Gdvd2WbKQjeU~i93jdFr z#wt39V#uv19sooj-xA!@Cn(-a+Gol7C|f@yGca=oQce z@=v|k>yR$=r+KTB=7n<<;M(5@J?7U3Z?4*-wWjZ{)dz$AIQF(Z7+&;W$C5ki$@NWR Q4}X5a2YxC51^j>e12-fBs{jB1 diff --git a/warehouse/test_ns.db/target/data/1110/0011/0000/10110011/00000-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet b/warehouse/test_ns.db/target/data/1110/0011/0000/10110011/00000-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1110/1000/1001/01111100/00000-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet b/warehouse/test_ns.db/target/data/1110/1000/1001/01111100/00000-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1110/1000/1100/10011011/00000-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.parquet b/warehouse/test_ns.db/target/data/1110/1000/1100/10011011/00000-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.parquet deleted file mode 100644 index f12431457bbc3e298663feeacbeb8bbb717a612f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6o8M7Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)aYuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/data/1110/1110/1110/01110010/00000-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet b/warehouse/test_ns.db/target/data/1110/1110/1110/01110010/00000-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1111/0011/0101/01111111/00000-0-d07e2165-822c-4192-a463-1384cab3f16d.parquet b/warehouse/test_ns.db/target/data/1111/0011/0101/01111111/00000-0-d07e2165-822c-4192-a463-1384cab3f16d.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=c|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-TxkD>;=-B>=oQ@iy?oBO$ATg+Cz--xZ0i^gcm$C6yzwU% zeGMQ(u%zk9fQ6a<1jnKngiT$YP3Y=uMuWryRRj>IAp<}P$pYc=9G}Voz8?a7!|xK0 zLLFV99^&82mT^~^HHW)WLPi|3Y2%B?JCKlUT|({!ea3ML^zg8G>Gc{c3`~iGuJ#8l zZ}9x8Rh5CsSXc=Pt;WcUM^cK}MHm*jYm6qo7l%~XG_j#6hH30uU^2x>K{#sM;jxIO zXkR7mmt;AX`aiZB^fFKkSr)|ufC%I%!99I~;*F$zl&lZ3^;o@9+d7T zK)c#o$@&?x-i6FtHwwWoo>`WIz`)(*Eh=Oz5oddB&f z+ijlXyv@^XQL}O2grYR(M|5I7J29hHW=!=aZ2{CZK~rXz3EDoR7@x;502Mif`Mrso zcP91ia;llHVj)W{u^ko>fo7?kUF;4R(aWP&v zN042r9^s`p&k25^KTmnE@ZOxCZx=dly>Q{?bDJ(P2o~DXS-Ou96%@%cenLZiMlEjigihRHa)xS7ZqoI1^8GH zs%Gy8&(iICTGA_^3FM!8vDYSD=udO1ljenU6yQ2I06pe61~0F@(OT2@*BXOCe;j+| d4Te|!7qR5-dUAc!*vFq=@PQv8fFl0k{RNpK1#YuW6umPbAq@*+e3Kb73p8PZNx!h6X-&I$0}L&;DGXttvoU;08;Xnrm9leT zT)OaAxNvLIpWxD^{uqt-zA2>?T=)X--H$itoO>ov;&z&aS)4sRVlsn=0I6>qzY|do zAVIJgun1FEu^q=CqN~wqXBH`tT2jU51zJc$G#QX5${x@0gr5L>KLA+Z2vb!RJ7V9- z7BN?tK8N|>S)iTY2i=C0#8nALyC+LK%77Xfw$3{J28*E1B&gAW-|qOY&f8TKE@NRO zD6|`+PBNAW>lX;aVzb6*;&qaciRd~u6j{@?Jp*(W)-n)@Yco6+Q)K0ZsA3^c zEwLSx5af!|AQ#X%Aw}q|=B-NAaV#h2^&2&3=vup;E3VW1vKWjPn+UQ))k7SLb4&0G z{RPT{g>!S>+$#3mdhxYeur^&{5G=H1^E8hT6%@%ceoRmzGRtMBXggJ>deV12w|3R5 zKfmZ<7b#BZ%9N@?^9vu)tsH@16LnQ66zh!mOnP?FFDg#`3h=QYR88Lxp5@#3w4hf& z6UaaHVy{cO(4W?gPP#9gqX5_bKBx(=;lI7?jMiG7x7P6e!8q}*;}6dVZxZR9_4N9t Rwue8z-~+!x044l?`wM+v0>l6S diff --git a/warehouse/test_ns.db/target/data/0010/1111/0100/01111100/00000-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.parquet b/warehouse/test_ns.db/target/data/1111/1101/0100/00001110/00000-0-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet similarity index 100% rename from warehouse/test_ns.db/target/data/0010/1111/0100/01111100/00000-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.parquet rename to warehouse/test_ns.db/target/data/1111/1101/0100/00001110/00000-0-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet diff --git a/warehouse/test_ns.db/target/data/1111/1101/0111/00101010/00000-0-ce566f28-bd86-431b-ba97-fd70c8073fae.parquet b/warehouse/test_ns.db/target/data/1111/1101/0111/00101010/00000-0-ce566f28-bd86-431b-ba97-fd70c8073fae.parquet deleted file mode 100644 index c5293e0acc7d628a80de3cded6143c991e0ca429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmb7EO>YuG7=CwI$)@2zjI-G_8-pfnFzFXIG_7e5v%n(QrhJ5j?#1vWZ78w=m2&f7 zJbLg~c<^e{pW#t|jK=q!Eu{z^oWRWcG4njnJe%DjFDIG8qU^~LlNsCxNPOG+6;nAt z2!g?Yg_*vN?I;FeQ&(r5d89#NMHSBrw2%QH$$&g6d$_=(JO+4_2Uy}zsH%$@vF~Kd zm}|^jz`XYq*>GF>Z_r&xNNHV4FF_bbDbT~C)>)_DU}4l52VETu+nwR7^L7=5%UD*87lo z>*g|o_Bo`@JpeFFJ;KZ7liKsZVEtOzqOr?u&Up#{G+uH(;dYlhoOgM;D{3}w zIHoAgd7f6xXDepZ%1o%exv4&JZInc#CFsS-Ou96%@%ceoRmzvP&hmPfJ*mKjxr?k{{mw=x8RP1IGPP>eI;v+3-zUsRm=72sn*sG2<=TuZmlX-Thu zCXj#X#a@?mp+Bt~owQ##M*)t*L(pS>WBB&6Gu~+V{zhXs986;GI>XWV;7u&Kx0&4B SHV*Lh3x4nuzf(p0zWo6J=KSCQ diff --git a/warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json similarity index 82% rename from warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json rename to warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json index 59a4fd3f0e..709d22a110 100644 --- a/warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json +++ b/warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json @@ -1 +1 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"0c845ee1-7262-44f8-aa11-1485668976f0","last-updated-ms":1736888846525,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1a29d0a6-a906-48bf-9822-120d142425f3","last-updated-ms":1736962802593,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json b/warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json deleted file mode 100644 index a4427077cc..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"db091c68-0bd0-43f9-826b-06e2baa38467","last-updated-ms":1736886690238,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json b/warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json deleted file mode 100644 index f417cb625e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"61916a0b-1b5d-4cb6-a5d4-a7fd16311169","last-updated-ms":1736888951940,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json b/warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json deleted file mode 100644 index 411fd5daed..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"43779038-fc40-451c-a2c6-d9f6a663bce7","last-updated-ms":1736889013289,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json b/warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json similarity index 82% rename from warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json rename to warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json index 3153807021..0f92ea623f 100644 --- a/warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json +++ b/warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json @@ -1 +1 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dffb4662-926c-4392-8af0-084cc190a9c4","last-updated-ms":1736888952091,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"7ecdd093-f2d4-48e9-bbe2-56a2206aac2a","last-updated-ms":1736963298259,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json b/warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json deleted file mode 100644 index 4379598535..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-3c00499e-7516-4af1-9eea-0a11d9c8b2d6.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5a04e9c0-5973-4e3d-936f-1fa9936f2893","last-updated-ms":1736886564886,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json b/warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json similarity index 82% rename from warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json rename to warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json index 49b534bbe7..af3f08fe43 100644 --- a/warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json +++ b/warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json @@ -1 +1 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c25fd744-4e53-4544-99ba-65c20e364bf2","last-updated-ms":1736887154291,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"fe9e12d2-bc04-4de4-8cfe-29187e34de8c","last-updated-ms":1736963298407,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json b/warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json similarity index 82% rename from warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json rename to warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json index 5482f159e8..ccd3ad5e13 100644 --- a/warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json +++ b/warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json @@ -1 +1 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5808dc91-19d4-4f6a-bbd1-02b3919fdc83","last-updated-ms":1736888675009,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"301fdef7-6bc5-4ddf-abfe-51c95b066a11","last-updated-ms":1736963298306,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json b/warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json deleted file mode 100644 index c4a5ff93ca..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5ab184e-846f-4a28-8711-7c32665184b4","last-updated-ms":1736888675075,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json b/warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json deleted file mode 100644 index 9eb03f8631..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3c5bd186-45f9-4454-bc14-2e8940dfb9f9","last-updated-ms":1736888817849,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json deleted file mode 100644 index 92a045481e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"2980b2ad-b335-4be1-a029-2471edb4e419","last-updated-ms":1736889068575,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json b/warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json deleted file mode 100644 index fc8ff9f9ce..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"792ce7dc-3961-4630-902b-f63d4bd06683","last-updated-ms":1736889068686,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json b/warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json deleted file mode 100644 index e8815fc13d..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"6275b69e-8ddc-4f15-ab8b-b17b4e0dd926","last-updated-ms":1736889144101,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json b/warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json deleted file mode 100644 index 7182130491..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"8e4e692f-a95c-4ec4-8e73-ebdc39e4c053","last-updated-ms":1736889144251,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json b/warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json deleted file mode 100644 index 59a543f5ff..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d60bea05-258e-4e68-984e-42e94f73ae10","last-updated-ms":1736886580019,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json b/warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json deleted file mode 100644 index 329f8db827..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"002574bf-b593-4b03-8f9b-87b4cca69a06","last-updated-ms":1736888738749,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json b/warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json deleted file mode 100644 index b5580d10e4..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"87eace76-7d50-4c06-b523-21c48781584c","last-updated-ms":1736888738672,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json b/warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json deleted file mode 100644 index ccb1fd4ddc..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dfa9fe5a-06c5-49f2-90e3-18acaad12269","last-updated-ms":1736889194882,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json b/warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json deleted file mode 100644 index 994115ff24..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e111ca6-3c5f-4e88-8982-b43cdf84897b","last-updated-ms":1736886719503,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json b/warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json deleted file mode 100644 index 50afb8c4de..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5fa2107-c0dc-43f0-87c3-d3732e5c9401","last-updated-ms":1736889068740,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json b/warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json deleted file mode 100644 index 0d2fab5d57..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c0673838-0d93-4abb-83c4-df20d75220fc","last-updated-ms":1736888817650,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json b/warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json deleted file mode 100644 index 83c4c52bd0..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3e9b1062-89d8-4912-b51d-6c08088de39e","last-updated-ms":1736886651716,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json deleted file mode 100644 index 85c389e45c..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e47b10c-7d80-4c06-aa3f-422d05714b0b","last-updated-ms":1736888716030,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json b/warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json deleted file mode 100644 index 3224c4e03b..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c47efb7a-caed-4568-a936-6a6978830a2f","last-updated-ms":1736888952005,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json b/warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json deleted file mode 100644 index 3b02dcf8dc..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e35ba13b-9f12-444f-b0a2-51e6ca9f0c03","last-updated-ms":1736889068646,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json b/warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json deleted file mode 100644 index e40f3d20dc..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"84ff20ba-e69a-4deb-b97a-09fe32ab3ea2","last-updated-ms":1736888715966,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json b/warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json deleted file mode 100644 index ffd5d73d76..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"86e7778e-99e0-4e54-8700-6f60739a4dab","last-updated-ms":1736886777609,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json b/warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json new file mode 100644 index 0000000000..8da7cd2b5e --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"60f7d59c-143c-44cc-baf8-34a58c4fd747","last-updated-ms":1736962802394,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json b/warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json deleted file mode 100644 index 41156fcbfd..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1229ec8c-3d55-4a61-84d2-522378efdac3","last-updated-ms":1736889144280,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json b/warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json deleted file mode 100644 index 9bab32b234..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"739bd7de-f8da-4aaa-ad33-f213251fa940","last-updated-ms":1736888846490,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json new file mode 100644 index 0000000000..3dd40df86d --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3513d8a8-fd19-4c33-9295-321c7b85e21e","last-updated-ms":1736963298176,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json deleted file mode 100644 index bea3550fb0..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3d51896f-f5dc-46fb-a5bf-843d5994276b","last-updated-ms":1736889194975,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json new file mode 100644 index 0000000000..3047bc9283 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"873a52fe-5b2a-4e1a-a1b6-6724f77edb6e","last-updated-ms":1736962802550,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json deleted file mode 100644 index 98fe7d4364..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"a694e23d-3ef3-4e36-92f7-90853dd8aea9","last-updated-ms":1736889013355,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json deleted file mode 100644 index 7b790401b1..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c8873f38-a2e4-4437-8bea-ae7d127f54c7","last-updated-ms":1736888420861,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json deleted file mode 100644 index 2e85fc41c0..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"175b9a2d-98e1-419e-a6ec-8f2c4238a3a2","last-updated-ms":1736887173183,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json deleted file mode 100644 index ca5e65999e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3beb9de1-ef29-47c5-8149-6a4fab9313ee","last-updated-ms":1736889194944,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json b/warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json deleted file mode 100644 index 4ee75532ee..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"396c1ed6-f942-4308-9308-daa59fe3e6c6","last-updated-ms":1736889144050,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json b/warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json deleted file mode 100644 index 0ae62aa67e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d66217e2-fb36-493c-9823-bf35e52530a4","last-updated-ms":1736889195019,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json b/warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json deleted file mode 100644 index 5f8172b58f..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"48ea5b8d-c940-4edd-ac1b-f158f9e95e8e","last-updated-ms":1736889143984,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json b/warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json deleted file mode 100644 index e684aa3dc9..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"80a49832-dc87-47d9-a406-c249705a6039","last-updated-ms":1736888846420,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json b/warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json deleted file mode 100644 index b937158532..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"bf8bc38e-dbd9-4002-a42c-642a7e50b1d1","last-updated-ms":1736888817716,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json b/warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json deleted file mode 100644 index 4f7ef6d31e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"9afb44a8-ed3c-4970-9ff7-48e02f20bf87","last-updated-ms":1736889013426,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json b/warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json new file mode 100644 index 0000000000..36ca061d4d --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"003a8b10-519d-44a0-87c5-e6b5a2584aed","last-updated-ms":1736962802498,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json b/warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json deleted file mode 100644 index 2c240be5c3..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d331040b-7228-4ee1-9e4b-0da3a4f65b6b","last-updated-ms":1736886756203,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json b/warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json deleted file mode 100644 index f86f69c8e3..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"df2fb31a-b9ee-4741-83e6-28b62a0ed8a1","last-updated-ms":1736889194820,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json b/warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json deleted file mode 100644 index 72dcf63ef8..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"80a49832-dc87-47d9-a406-c249705a6039","last-updated-ms":1736888846449,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8313902679403056549,"snapshots":[{"snapshot-id":8313902679403056549,"sequence-number":1,"timestamp-ms":1736888846449,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8313902679403056549,"timestamp-ms":1736888846449}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json","timestamp-ms":1736888846420}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8313902679403056549,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json b/warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json deleted file mode 100644 index d11bca1ccf..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"a694e23d-3ef3-4e36-92f7-90853dd8aea9","last-updated-ms":1736889013360,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7051609426416309429,"snapshots":[{"snapshot-id":7051609426416309429,"sequence-number":1,"timestamp-ms":1736889013360,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7051609426416309429,"timestamp-ms":1736889013360}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json","timestamp-ms":1736889013355}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7051609426416309429,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json b/warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json deleted file mode 100644 index 55d869516e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-051e82bc-dd83-4473-9a1e-8cdbec52548b.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d60bea05-258e-4e68-984e-42e94f73ae10","last-updated-ms":1736886580051,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7268602573125653220,"snapshots":[{"snapshot-id":7268602573125653220,"sequence-number":1,"timestamp-ms":1736886580051,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7268602573125653220,"timestamp-ms":1736886580051}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6af450fa-d0aa-46b3-9282-d6b39fa7f0ff.metadata.json","timestamp-ms":1736886580019}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7268602573125653220,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json b/warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json new file mode 100644 index 0000000000..8dbddb9433 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1a29d0a6-a906-48bf-9822-120d142425f3","last-updated-ms":1736962802606,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":519587681788242446,"snapshots":[{"snapshot-id":519587681788242446,"sequence-number":1,"timestamp-ms":1736962802606,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-519587681788242446-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":519587681788242446,"timestamp-ms":1736962802606}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json","timestamp-ms":1736962802593}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":519587681788242446,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json b/warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json deleted file mode 100644 index a9d7c08fd6..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c25fd744-4e53-4544-99ba-65c20e364bf2","last-updated-ms":1736887154345,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5940108511084569748,"snapshots":[{"snapshot-id":5940108511084569748,"sequence-number":1,"timestamp-ms":1736887154345,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5940108511084569748-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5940108511084569748,"timestamp-ms":1736887154345}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json","timestamp-ms":1736887154291}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5940108511084569748,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json deleted file mode 100644 index 1a586192f6..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e35ba13b-9f12-444f-b0a2-51e6ca9f0c03","last-updated-ms":1736889068651,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5234292787271688478,"snapshots":[{"snapshot-id":5234292787271688478,"sequence-number":1,"timestamp-ms":1736889068651,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5234292787271688478,"timestamp-ms":1736889068651}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json","timestamp-ms":1736889068646}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5234292787271688478,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json deleted file mode 100644 index 9d5fbbdfa3..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"df2fb31a-b9ee-4741-83e6-28b62a0ed8a1","last-updated-ms":1736889194846,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3420590106920179313,"snapshots":[{"snapshot-id":3420590106920179313,"sequence-number":1,"timestamp-ms":1736889194846,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3420590106920179313-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3420590106920179313,"timestamp-ms":1736889194846}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json","timestamp-ms":1736889194820}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3420590106920179313,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json b/warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json deleted file mode 100644 index ba1803397e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"002574bf-b593-4b03-8f9b-87b4cca69a06","last-updated-ms":1736888738760,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5799605361944678510,"snapshots":[{"snapshot-id":5799605361944678510,"sequence-number":1,"timestamp-ms":1736888738760,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5799605361944678510,"timestamp-ms":1736888738760}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json","timestamp-ms":1736888738749}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5799605361944678510,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json b/warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json deleted file mode 100644 index f2dbcab079..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"9afb44a8-ed3c-4970-9ff7-48e02f20bf87","last-updated-ms":1736889013433,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2600792867184750836,"snapshots":[{"snapshot-id":2600792867184750836,"sequence-number":1,"timestamp-ms":1736889013433,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2600792867184750836,"timestamp-ms":1736889013433}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json","timestamp-ms":1736889013426}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2600792867184750836,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json b/warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json deleted file mode 100644 index 7e0cf6dd69..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"6275b69e-8ddc-4f15-ab8b-b17b4e0dd926","last-updated-ms":1736889144123,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3473198905970838950,"snapshots":[{"snapshot-id":3473198905970838950,"sequence-number":1,"timestamp-ms":1736889144123,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3473198905970838950,"timestamp-ms":1736889144123}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json","timestamp-ms":1736889144101}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3473198905970838950,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json deleted file mode 100644 index 07791e6d49..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"0c845ee1-7262-44f8-aa11-1485668976f0","last-updated-ms":1736888846530,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1535538213156523650,"snapshots":[{"snapshot-id":1535538213156523650,"sequence-number":1,"timestamp-ms":1736888846530,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1535538213156523650,"timestamp-ms":1736888846530}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json","timestamp-ms":1736888846525}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1535538213156523650,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json b/warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json new file mode 100644 index 0000000000..122dd4fd17 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"003a8b10-519d-44a0-87c5-e6b5a2584aed","last-updated-ms":1736962802525,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5356098321547065394,"snapshots":[{"snapshot-id":5356098321547065394,"sequence-number":1,"timestamp-ms":1736962802525,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5356098321547065394,"timestamp-ms":1736962802525}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json","timestamp-ms":1736962802498}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5356098321547065394,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json deleted file mode 100644 index 91095aed0d..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"87eace76-7d50-4c06-b523-21c48781584c","last-updated-ms":1736888738706,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8961750095722443909,"snapshots":[{"snapshot-id":8961750095722443909,"sequence-number":1,"timestamp-ms":1736888738706,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8961750095722443909,"timestamp-ms":1736888738706}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json","timestamp-ms":1736888738672}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8961750095722443909,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json deleted file mode 100644 index f0bfb40476..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"2980b2ad-b335-4be1-a029-2471edb4e419","last-updated-ms":1736889068603,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":601589844698732085,"snapshots":[{"snapshot-id":601589844698732085,"sequence-number":1,"timestamp-ms":1736889068603,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":601589844698732085,"timestamp-ms":1736889068603}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json","timestamp-ms":1736889068575}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":601589844698732085,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json b/warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json deleted file mode 100644 index 8a684f5f66..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-3e542528-f583-4d59-9ecb-8224e59353f5.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"db091c68-0bd0-43f9-826b-06e2baa38467","last-updated-ms":1736886690267,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7513461889513613785,"snapshots":[{"snapshot-id":7513461889513613785,"sequence-number":1,"timestamp-ms":1736886690267,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7513461889513613785,"timestamp-ms":1736886690267}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-1ba3f2f1-5494-4305-99eb-39ce9c88bdcb.metadata.json","timestamp-ms":1736886690238}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7513461889513613785,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json b/warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json deleted file mode 100644 index 2d07957ef9..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"84ff20ba-e69a-4deb-b97a-09fe32ab3ea2","last-updated-ms":1736888715992,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3787244053631992891,"snapshots":[{"snapshot-id":3787244053631992891,"sequence-number":1,"timestamp-ms":1736888715992,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3787244053631992891,"timestamp-ms":1736888715992}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json","timestamp-ms":1736888715966}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3787244053631992891,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json b/warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json deleted file mode 100644 index c22391ee72..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3d51896f-f5dc-46fb-a5bf-843d5994276b","last-updated-ms":1736889194987,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7022889893183814165,"snapshots":[{"snapshot-id":7022889893183814165,"sequence-number":1,"timestamp-ms":1736889194987,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7022889893183814165,"timestamp-ms":1736889194987}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json","timestamp-ms":1736889194975}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7022889893183814165,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json b/warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json new file mode 100644 index 0000000000..8f67070ea0 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"fe9e12d2-bc04-4de4-8cfe-29187e34de8c","last-updated-ms":1736963298414,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":926787372640640286,"snapshots":[{"snapshot-id":926787372640640286,"sequence-number":1,"timestamp-ms":1736963298414,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":926787372640640286,"timestamp-ms":1736963298414}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json","timestamp-ms":1736963298407}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":926787372640640286,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json b/warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json deleted file mode 100644 index 11c645ccae..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-5602702d-94ed-4beb-941e-6d61f20fa3d0.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d331040b-7228-4ee1-9e4b-0da3a4f65b6b","last-updated-ms":1736886756231,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":224386441439912473,"snapshots":[{"snapshot-id":224386441439912473,"sequence-number":1,"timestamp-ms":1736886756231,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-224386441439912473-0-a1309d30-424c-4c10-bb6d-79711a6576a8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":224386441439912473,"timestamp-ms":1736886756231}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-f9f139e8-652e-4a75-a925-7a46acea29c5.metadata.json","timestamp-ms":1736886756203}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":224386441439912473,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json b/warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json deleted file mode 100644 index e5cd982eb2..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-63344c09-432f-48a0-b450-1ccb6e7084b8.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e111ca6-3c5f-4e88-8982-b43cdf84897b","last-updated-ms":1736886719533,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6234413701284196546,"snapshots":[{"snapshot-id":6234413701284196546,"sequence-number":1,"timestamp-ms":1736886719533,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6234413701284196546-0-66fa771f-7647-43e2-8f86-fe095e1dc073.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6234413701284196546,"timestamp-ms":1736886719533}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-7a1c1daf-41aa-4dcb-b08a-f961ee37eaec.metadata.json","timestamp-ms":1736886719503}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6234413701284196546,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json b/warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json deleted file mode 100644 index 3e950e5231..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c47efb7a-caed-4568-a936-6a6978830a2f","last-updated-ms":1736888952017,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5697805165312478410,"snapshots":[{"snapshot-id":5697805165312478410,"sequence-number":1,"timestamp-ms":1736888952017,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5697805165312478410,"timestamp-ms":1736888952017}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json","timestamp-ms":1736888952005}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5697805165312478410,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json b/warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json deleted file mode 100644 index 1da9c58889..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5fa2107-c0dc-43f0-87c3-d3732e5c9401","last-updated-ms":1736889068802,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3533502525690906202,"snapshots":[{"snapshot-id":3533502525690906202,"sequence-number":1,"timestamp-ms":1736889068802,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3533502525690906202,"timestamp-ms":1736889068802}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json","timestamp-ms":1736889068740}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3533502525690906202,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json b/warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json deleted file mode 100644 index cce07ff207..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"739bd7de-f8da-4aaa-ad33-f213251fa940","last-updated-ms":1736888846495,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6486622511572862241,"snapshots":[{"snapshot-id":6486622511572862241,"sequence-number":1,"timestamp-ms":1736888846495,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6486622511572862241,"timestamp-ms":1736888846495}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json","timestamp-ms":1736888846490}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6486622511572862241,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json b/warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json similarity index 53% rename from warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json rename to warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json index 89146ae00b..0a048371ba 100644 --- a/warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json +++ b/warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json @@ -1 +1 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dfa9fe5a-06c5-49f2-90e3-18acaad12269","last-updated-ms":1736889194889,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3964058929230744404,"snapshots":[{"snapshot-id":3964058929230744404,"sequence-number":1,"timestamp-ms":1736889194889,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3964058929230744404-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3964058929230744404,"timestamp-ms":1736889194889}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json","timestamp-ms":1736889194882}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3964058929230744404,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"60f7d59c-143c-44cc-baf8-34a58c4fd747","last-updated-ms":1736962802415,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8777927210488106010,"snapshots":[{"snapshot-id":8777927210488106010,"sequence-number":1,"timestamp-ms":1736962802415,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8777927210488106010,"timestamp-ms":1736962802415}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json","timestamp-ms":1736962802394}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8777927210488106010,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json b/warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json deleted file mode 100644 index 453b4eace9..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"86e7778e-99e0-4e54-8700-6f60739a4dab","last-updated-ms":1736886777635,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1513626882798940460,"snapshots":[{"snapshot-id":1513626882798940460,"sequence-number":1,"timestamp-ms":1736886777635,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1513626882798940460,"timestamp-ms":1736886777635}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json","timestamp-ms":1736886777609}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1513626882798940460,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json b/warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json deleted file mode 100644 index 6c9d32179a..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c0673838-0d93-4abb-83c4-df20d75220fc","last-updated-ms":1736888817677,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4312681858952059679,"snapshots":[{"snapshot-id":4312681858952059679,"sequence-number":1,"timestamp-ms":1736888817677,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4312681858952059679-0-eb933998-38fb-415a-8c6f-65c20c4b60af.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4312681858952059679,"timestamp-ms":1736888817677}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json","timestamp-ms":1736888817650}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4312681858952059679,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json b/warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json deleted file mode 100644 index c0f1285809..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c8873f38-a2e4-4437-8bea-ae7d127f54c7","last-updated-ms":1736888420917,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8831663020960733836,"snapshots":[{"snapshot-id":8831663020960733836,"sequence-number":1,"timestamp-ms":1736888420917,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8831663020960733836,"timestamp-ms":1736888420917}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json","timestamp-ms":1736888420861}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8831663020960733836,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json b/warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json deleted file mode 100644 index 4e94290de6..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e47b10c-7d80-4c06-aa3f-422d05714b0b","last-updated-ms":1736888716035,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1544115459057157291,"snapshots":[{"snapshot-id":1544115459057157291,"sequence-number":1,"timestamp-ms":1736888716035,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1544115459057157291,"timestamp-ms":1736888716035}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json","timestamp-ms":1736888716030}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1544115459057157291,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json b/warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json new file mode 100644 index 0000000000..0b8a5d5be8 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"301fdef7-6bc5-4ddf-abfe-51c95b066a11","last-updated-ms":1736963298339,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2703304898161014810,"snapshots":[{"snapshot-id":2703304898161014810,"sequence-number":1,"timestamp-ms":1736963298339,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2703304898161014810,"timestamp-ms":1736963298339}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json","timestamp-ms":1736963298306}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2703304898161014810,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json b/warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json deleted file mode 100644 index 44c2974e0e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"792ce7dc-3961-4630-902b-f63d4bd06683","last-updated-ms":1736889068709,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3528314312383791020,"snapshots":[{"snapshot-id":3528314312383791020,"sequence-number":1,"timestamp-ms":1736889068709,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3528314312383791020,"timestamp-ms":1736889068709}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json","timestamp-ms":1736889068686}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3528314312383791020,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json new file mode 100644 index 0000000000..79ac5dbd77 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3513d8a8-fd19-4c33-9295-321c7b85e21e","last-updated-ms":1736963298190,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7775845885571657371,"snapshots":[{"snapshot-id":7775845885571657371,"sequence-number":1,"timestamp-ms":1736963298190,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7775845885571657371-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7775845885571657371,"timestamp-ms":1736963298190}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json","timestamp-ms":1736963298176}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7775845885571657371,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json b/warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json deleted file mode 100644 index a3e21d027d..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-aa046f6a-d7cb-4582-a531-53d1cde9d1a2.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"d66217e2-fb36-493c-9823-bf35e52530a4","last-updated-ms":1736889195025,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3544944504255224038,"snapshots":[{"snapshot-id":3544944504255224038,"sequence-number":1,"timestamp-ms":1736889195025,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3544944504255224038,"timestamp-ms":1736889195025}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-cbfc67ef-6be3-45f1-9f60-8e015def371a.metadata.json","timestamp-ms":1736889195019}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3544944504255224038,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json deleted file mode 100644 index 70fd545a89..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-ac73e5fb-9a0d-4e2d-a7a4-6cd4bb879821.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1229ec8c-3d55-4a61-84d2-522378efdac3","last-updated-ms":1736889144284,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2733438816956970508,"snapshots":[{"snapshot-id":2733438816956970508,"sequence-number":1,"timestamp-ms":1736889144284,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2733438816956970508,"timestamp-ms":1736889144284}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-b05bb6f8-8a86-4224-968b-7c93ad27b09f.metadata.json","timestamp-ms":1736889144280}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2733438816956970508,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json b/warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json deleted file mode 100644 index 98d3f22d19..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3c5bd186-45f9-4454-bc14-2e8940dfb9f9","last-updated-ms":1736888817854,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8348544302231969911,"snapshots":[{"snapshot-id":8348544302231969911,"sequence-number":1,"timestamp-ms":1736888817854,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8348544302231969911,"timestamp-ms":1736888817854}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json","timestamp-ms":1736888817849}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8348544302231969911,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json deleted file mode 100644 index 409137bfc5..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3beb9de1-ef29-47c5-8149-6a4fab9313ee","last-updated-ms":1736889194951,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4842535345802092226,"snapshots":[{"snapshot-id":4842535345802092226,"sequence-number":1,"timestamp-ms":1736889194951,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4842535345802092226,"timestamp-ms":1736889194951}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json","timestamp-ms":1736889194944}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4842535345802092226,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json new file mode 100644 index 0000000000..fb7939eda5 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"873a52fe-5b2a-4e1a-a1b6-6724f77edb6e","last-updated-ms":1736962802562,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7056510587748164127,"snapshots":[{"snapshot-id":7056510587748164127,"sequence-number":1,"timestamp-ms":1736962802562,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7056510587748164127,"timestamp-ms":1736962802562}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json","timestamp-ms":1736962802550}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7056510587748164127,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json deleted file mode 100644 index 5545aefcdc..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"48ea5b8d-c940-4edd-ac1b-f158f9e95e8e","last-updated-ms":1736889144013,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6933179781506472663,"snapshots":[{"snapshot-id":6933179781506472663,"sequence-number":1,"timestamp-ms":1736889144013,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6933179781506472663-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6933179781506472663,"timestamp-ms":1736889144013}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json","timestamp-ms":1736889143984}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6933179781506472663,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json deleted file mode 100644 index 158dcb0f37..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5ab184e-846f-4a28-8711-7c32665184b4","last-updated-ms":1736888675080,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":9164726099961267182,"snapshots":[{"snapshot-id":9164726099961267182,"sequence-number":1,"timestamp-ms":1736888675080,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-9164726099961267182-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":9164726099961267182,"timestamp-ms":1736888675080}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json","timestamp-ms":1736888675075}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":9164726099961267182,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json b/warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json deleted file mode 100644 index 19905d0556..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"61916a0b-1b5d-4cb6-a5d4-a7fd16311169","last-updated-ms":1736888951968,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1844314770242601776,"snapshots":[{"snapshot-id":1844314770242601776,"sequence-number":1,"timestamp-ms":1736888951968,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1844314770242601776-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1844314770242601776,"timestamp-ms":1736888951968}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json","timestamp-ms":1736888951940}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1844314770242601776,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json b/warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json deleted file mode 100644 index 5cd6cf5330..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"8e4e692f-a95c-4ec4-8e73-ebdc39e4c053","last-updated-ms":1736889144256,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3889083549440119316,"snapshots":[{"snapshot-id":3889083549440119316,"sequence-number":1,"timestamp-ms":1736889144256,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3889083549440119316,"timestamp-ms":1736889144256}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json","timestamp-ms":1736889144251}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3889083549440119316,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json b/warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json deleted file mode 100644 index 6a55051814..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5808dc91-19d4-4f6a-bbd1-02b3919fdc83","last-updated-ms":1736888675038,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":833805222481799210,"snapshots":[{"snapshot-id":833805222481799210,"sequence-number":1,"timestamp-ms":1736888675038,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-833805222481799210-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":833805222481799210,"timestamp-ms":1736888675038}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json","timestamp-ms":1736888675009}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":833805222481799210,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json b/warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json deleted file mode 100644 index 716a08d0b2..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dffb4662-926c-4392-8af0-084cc190a9c4","last-updated-ms":1736888952100,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4948184997192531561,"snapshots":[{"snapshot-id":4948184997192531561,"sequence-number":1,"timestamp-ms":1736888952100,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4948184997192531561,"timestamp-ms":1736888952100}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json","timestamp-ms":1736888952091}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4948184997192531561,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json deleted file mode 100644 index 3d27bc644e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"bf8bc38e-dbd9-4002-a42c-642a7e50b1d1","last-updated-ms":1736888817728,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7505909271869725036,"snapshots":[{"snapshot-id":7505909271869725036,"sequence-number":1,"timestamp-ms":1736888817728,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7505909271869725036,"timestamp-ms":1736888817728}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json","timestamp-ms":1736888817716}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7505909271869725036,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json deleted file mode 100644 index ea815a530a..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-ee6b99a4-eca7-4b2c-b083-d426f2a2aed6.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3e9b1062-89d8-4912-b51d-6c08088de39e","last-updated-ms":1736886651745,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3224723533606729102,"snapshots":[{"snapshot-id":3224723533606729102,"sequence-number":1,"timestamp-ms":1736886651745,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3224723533606729102-0-b4364e18-9a58-42f2-a886-b079f1ccfabd.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3224723533606729102,"timestamp-ms":1736886651745}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-92798398-cc65-44cb-9499-f68551ef1364.metadata.json","timestamp-ms":1736886651716}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3224723533606729102,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json deleted file mode 100644 index 6b4ca40e98..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"175b9a2d-98e1-419e-a6ec-8f2c4238a3a2","last-updated-ms":1736887173219,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2972879693291038375,"snapshots":[{"snapshot-id":2972879693291038375,"sequence-number":1,"timestamp-ms":1736887173219,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2972879693291038375,"timestamp-ms":1736887173219}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json","timestamp-ms":1736887173183}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2972879693291038375,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json b/warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json deleted file mode 100644 index b0cdb99d01..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"43779038-fc40-451c-a2c6-d9f6a663bce7","last-updated-ms":1736889013318,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5801931121445824490,"snapshots":[{"snapshot-id":5801931121445824490,"sequence-number":1,"timestamp-ms":1736889013318,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5801931121445824490-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5801931121445824490,"timestamp-ms":1736889013318}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json","timestamp-ms":1736889013289}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5801931121445824490,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json new file mode 100644 index 0000000000..52de32d0cc --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"7ecdd093-f2d4-48e9-bbe2-56a2206aac2a","last-updated-ms":1736963298273,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4517289051336819292,"snapshots":[{"snapshot-id":4517289051336819292,"sequence-number":1,"timestamp-ms":1736963298273,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4517289051336819292,"timestamp-ms":1736963298273}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json","timestamp-ms":1736963298259}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4517289051336819292,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json b/warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json deleted file mode 100644 index 67c9287925..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"396c1ed6-f942-4308-9308-daa59fe3e6c6","last-updated-ms":1736889144056,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7582912806309123259,"snapshots":[{"snapshot-id":7582912806309123259,"sequence-number":1,"timestamp-ms":1736889144056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7582912806309123259,"timestamp-ms":1736889144056}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json","timestamp-ms":1736889144050}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7582912806309123259,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json b/warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json deleted file mode 100644 index 436471c401..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-08de375c-5b1d-4b08-8b3a-b1635dfda75f.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"a694e23d-3ef3-4e36-92f7-90853dd8aea9","last-updated-ms":1736889013420,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2986888869253216203,"snapshots":[{"snapshot-id":7051609426416309429,"sequence-number":1,"timestamp-ms":1736889013360,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8401722351562146185,"parent-snapshot-id":7051609426416309429,"sequence-number":2,"timestamp-ms":1736889013382,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8401722351562146185-0-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-records":"0","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"0","total-files-size":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":7037381790004132039,"parent-snapshot-id":8401722351562146185,"sequence-number":3,"timestamp-ms":1736889013400,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2986888869253216203,"parent-snapshot-id":7037381790004132039,"sequence-number":4,"timestamp-ms":1736889013420,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2986888869253216203-0-79d7103a-e46f-43fa-ae30-c19fd45e0406.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7051609426416309429,"timestamp-ms":1736889013360},{"snapshot-id":8401722351562146185,"timestamp-ms":1736889013382},{"snapshot-id":7037381790004132039,"timestamp-ms":1736889013400},{"snapshot-id":2986888869253216203,"timestamp-ms":1736889013420}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c29e0986-e8be-4b20-952a-e98d8e756480.metadata.json","timestamp-ms":1736889013355},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-047681d8-053b-4d8b-abe6-d451db408ffa.metadata.json","timestamp-ms":1736889013360}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2986888869253216203,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json b/warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json deleted file mode 100644 index 28d1d401a6..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-094d9fd4-1260-4527-aecb-2ecc6545966a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"2980b2ad-b335-4be1-a029-2471edb4e419","last-updated-ms":1736889068633,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2492927377825459959,"snapshots":[{"snapshot-id":601589844698732085,"sequence-number":1,"timestamp-ms":1736889068603,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4183019543520611480,"parent-snapshot-id":601589844698732085,"sequence-number":2,"timestamp-ms":1736889068624,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4183019543520611480-0-73fe0557-72f8-4571-861f-1e38db10fcab.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-files-size":"1252","total-data-files":"1","total-equality-deletes":"0","total-records":"1","total-position-deletes":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":8581846891827290437,"parent-snapshot-id":4183019543520611480,"sequence-number":3,"timestamp-ms":1736889068627,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2492927377825459959,"parent-snapshot-id":8581846891827290437,"sequence-number":4,"timestamp-ms":1736889068633,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2492927377825459959-0-406b5ff2-453b-431e-9cde-884ceff64876.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":601589844698732085,"timestamp-ms":1736889068603},{"snapshot-id":4183019543520611480,"timestamp-ms":1736889068624},{"snapshot-id":8581846891827290437,"timestamp-ms":1736889068627},{"snapshot-id":2492927377825459959,"timestamp-ms":1736889068633}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5dc625e7-b41b-43a4-aaf8-0e7b99f8129b.metadata.json","timestamp-ms":1736889068575},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-3db988c3-4069-4ef7-973b-46385ef554e2.metadata.json","timestamp-ms":1736889068603}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2492927377825459959,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json b/warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json deleted file mode 100644 index f7b0f87091..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-099f6ae2-4854-492f-8ddf-4e554da6fb3a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"6275b69e-8ddc-4f15-ab8b-b17b4e0dd926","last-updated-ms":1736889144205,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":9125775206094479309,"snapshots":[{"snapshot-id":3473198905970838950,"sequence-number":1,"timestamp-ms":1736889144123,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":9125775206094479309,"parent-snapshot-id":3473198905970838950,"sequence-number":2,"timestamp-ms":1736889144205,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-9125775206094479309-0-d93b4af9-a9de-4e9c-addc-401a7a626d9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3473198905970838950,"timestamp-ms":1736889144123},{"snapshot-id":9125775206094479309,"timestamp-ms":1736889144205}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-663b9f45-ec92-4bb1-8f60-b06249855d02.metadata.json","timestamp-ms":1736889144101},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-291e1015-fc19-4bc7-9f51-8f48f5467838.metadata.json","timestamp-ms":1736889144123}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":9125775206094479309,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json b/warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json deleted file mode 100644 index 9ddf77227e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-14ca07cf-fe0b-4b91-a6a6-625fe4837b0c.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5ab184e-846f-4a28-8711-7c32665184b4","last-updated-ms":1736888675127,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6925287486837365462,"snapshots":[{"snapshot-id":9164726099961267182,"sequence-number":1,"timestamp-ms":1736888675080,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-9164726099961267182-0-203f51c6-8b62-4cc2-99a8-3be667d35b9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5620569175367488250,"parent-snapshot-id":9164726099961267182,"sequence-number":2,"timestamp-ms":1736888675105,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5620569175367488250-0-01e6f094-0145-4d30-be1e-b291d4941071.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-delete-files":"0","total-data-files":"0","total-position-deletes":"0","total-files-size":"0","total-records":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4225042140904107668,"parent-snapshot-id":5620569175367488250,"sequence-number":3,"timestamp-ms":1736888675114,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6925287486837365462,"parent-snapshot-id":4225042140904107668,"sequence-number":4,"timestamp-ms":1736888675127,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6925287486837365462-0-87212431-1c5a-4680-924d-cb722127f8b2.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":9164726099961267182,"timestamp-ms":1736888675080},{"snapshot-id":5620569175367488250,"timestamp-ms":1736888675105},{"snapshot-id":4225042140904107668,"timestamp-ms":1736888675114},{"snapshot-id":6925287486837365462,"timestamp-ms":1736888675127}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-53dbfbd3-65c1-4aec-b293-92246e394a34.metadata.json","timestamp-ms":1736888675075},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b53fb375-7a33-4467-9f22-ccebd7535d85.metadata.json","timestamp-ms":1736888675080}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6925287486837365462,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json b/warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json deleted file mode 100644 index db1b1f3aa5..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-193da7c3-f2c2-4693-a9da-24e5ae089331.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3c5bd186-45f9-4454-bc14-2e8940dfb9f9","last-updated-ms":1736888817868,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3204946293128688606,"snapshots":[{"snapshot-id":8348544302231969911,"sequence-number":1,"timestamp-ms":1736888817854,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3204946293128688606,"parent-snapshot-id":8348544302231969911,"sequence-number":2,"timestamp-ms":1736888817868,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8348544302231969911,"timestamp-ms":1736888817854},{"snapshot-id":3204946293128688606,"timestamp-ms":1736888817868}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-5d0c50d1-266f-4a68-aed1-95eeb7f8b8aa.metadata.json","timestamp-ms":1736888817849},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-afd2dd15-1c28-489f-8764-6205816f8e07.metadata.json","timestamp-ms":1736888817854}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3204946293128688606,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json b/warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json deleted file mode 100644 index a4a3d4e9b7..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-27411fea-bd03-4313-b556-80ed3a8b562a.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"0c845ee1-7262-44f8-aa11-1485668976f0","last-updated-ms":1736888846544,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2429342651217145121,"snapshots":[{"snapshot-id":1535538213156523650,"sequence-number":1,"timestamp-ms":1736888846530,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2429342651217145121,"parent-snapshot-id":1535538213156523650,"sequence-number":2,"timestamp-ms":1736888846544,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1535538213156523650,"timestamp-ms":1736888846530},{"snapshot-id":2429342651217145121,"timestamp-ms":1736888846544}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ccb443-83c4-4a49-9c56-a44b0aeca37b.metadata.json","timestamp-ms":1736888846525},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-2e7962bf-df90-4100-ab64-1f1e8fdf359d.metadata.json","timestamp-ms":1736888846530}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2429342651217145121,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json b/warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json deleted file mode 100644 index 45dcf045b5..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-302e056b-a7c4-4287-b59a-a38d31b661ee.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"5808dc91-19d4-4f6a-bbd1-02b3919fdc83","last-updated-ms":1736888675069,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1457045964290920894,"snapshots":[{"snapshot-id":833805222481799210,"sequence-number":1,"timestamp-ms":1736888675038,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-833805222481799210-0-18d99a4b-881d-4f00-b7a3-5e1227fcdaa3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8932309241501447446,"parent-snapshot-id":833805222481799210,"sequence-number":2,"timestamp-ms":1736888675062,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8932309241501447446-0-d3c97079-ddf1-4e1f-a902-5eb19ff98914.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-delete-files":"0","total-data-files":"1","total-position-deletes":"0","total-files-size":"1252","total-records":"1","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7440866824021855995,"parent-snapshot-id":8932309241501447446,"sequence-number":3,"timestamp-ms":1736888675066,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1457045964290920894,"parent-snapshot-id":7440866824021855995,"sequence-number":4,"timestamp-ms":1736888675069,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1457045964290920894-0-1b8f6465-742a-450b-a358-12b08ae8ff62.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":833805222481799210,"timestamp-ms":1736888675038},{"snapshot-id":8932309241501447446,"timestamp-ms":1736888675062},{"snapshot-id":7440866824021855995,"timestamp-ms":1736888675066},{"snapshot-id":1457045964290920894,"timestamp-ms":1736888675069}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-0ca8b809-0f92-46b7-a7c8-28c64da33723.metadata.json","timestamp-ms":1736888675009},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-d39789a4-fc0b-4a7e-8254-8a66c8678488.metadata.json","timestamp-ms":1736888675038}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1457045964290920894,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json b/warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json deleted file mode 100644 index 11ec99082c..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-33089da7-37ac-472b-ad53-d28cf71f6cba.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"4e47b10c-7d80-4c06-aa3f-422d05714b0b","last-updated-ms":1736888716060,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2440352229145444371,"snapshots":[{"snapshot-id":1544115459057157291,"sequence-number":1,"timestamp-ms":1736888716035,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1320653015771546028,"parent-snapshot-id":1544115459057157291,"sequence-number":2,"timestamp-ms":1736888716052,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-position-deletes":"0","total-records":"0","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":603282837849840371,"parent-snapshot-id":1320653015771546028,"sequence-number":3,"timestamp-ms":1736888716056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-603282837849840371-0-a175c05a-c6cf-46f3-b251-37ace98c68f3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2440352229145444371,"parent-snapshot-id":603282837849840371,"sequence-number":4,"timestamp-ms":1736888716060,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1544115459057157291,"timestamp-ms":1736888716035},{"snapshot-id":1320653015771546028,"timestamp-ms":1736888716052},{"snapshot-id":603282837849840371,"timestamp-ms":1736888716056},{"snapshot-id":2440352229145444371,"timestamp-ms":1736888716060}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9a5d158a-a782-49c2-9831-de02dc131b8b.metadata.json","timestamp-ms":1736888716030},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-81b1ddc4-486e-49b5-a1ea-30abc4b7710e.metadata.json","timestamp-ms":1736888716035}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2440352229145444371,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json b/warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json deleted file mode 100644 index 94e0af83d5..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-3df3de00-4590-4be2-b12d-92a865e24604.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"48ea5b8d-c940-4edd-ac1b-f158f9e95e8e","last-updated-ms":1736889144044,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1837055597910465939,"snapshots":[{"snapshot-id":6933179781506472663,"sequence-number":1,"timestamp-ms":1736889144013,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6933179781506472663-0-c22c96ad-d3bc-4ae7-89f9-12e7ae273785.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3409260926258592601,"parent-snapshot-id":6933179781506472663,"sequence-number":2,"timestamp-ms":1736889144036,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-delete-files":"0","total-position-deletes":"0","total-files-size":"1252","total-equality-deletes":"0","total-records":"1","total-data-files":"1"},"schema-id":0},{"snapshot-id":8420686025710548535,"parent-snapshot-id":3409260926258592601,"sequence-number":3,"timestamp-ms":1736889144039,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1837055597910465939,"parent-snapshot-id":8420686025710548535,"sequence-number":4,"timestamp-ms":1736889144044,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6933179781506472663,"timestamp-ms":1736889144013},{"snapshot-id":3409260926258592601,"timestamp-ms":1736889144036},{"snapshot-id":8420686025710548535,"timestamp-ms":1736889144039},{"snapshot-id":1837055597910465939,"timestamp-ms":1736889144044}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-d130d57e-4d17-42b0-9c71-4416706c6175.metadata.json","timestamp-ms":1736889143984},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b32e4f42-5850-4e23-87e3-867f77726f18.metadata.json","timestamp-ms":1736889144013}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1837055597910465939,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json b/warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json deleted file mode 100644 index 7b59e688ff..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-46b4e16d-9eb5-470d-8d88-7b3b5b9fa4eb.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"bf8bc38e-dbd9-4002-a42c-642a7e50b1d1","last-updated-ms":1736888817842,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1391988045888484974,"snapshots":[{"snapshot-id":7505909271869725036,"sequence-number":1,"timestamp-ms":1736888817728,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6901877966207604987,"parent-snapshot-id":7505909271869725036,"sequence-number":2,"timestamp-ms":1736888817768,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6901877966207604987-0-330bf2a8-7467-4ab1-879b-56ef0a34a4ca.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-position-deletes":"0","total-data-files":"0","total-files-size":"0","total-delete-files":"0","total-equality-deletes":"0","total-records":"0"},"schema-id":0},{"snapshot-id":7354261991702844234,"parent-snapshot-id":6901877966207604987,"sequence-number":3,"timestamp-ms":1736888817783,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7354261991702844234-0-e560ac97-208b-4c5d-9196-e952352617b8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1391988045888484974,"parent-snapshot-id":7354261991702844234,"sequence-number":4,"timestamp-ms":1736888817842,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7505909271869725036,"timestamp-ms":1736888817728},{"snapshot-id":6901877966207604987,"timestamp-ms":1736888817768},{"snapshot-id":7354261991702844234,"timestamp-ms":1736888817783},{"snapshot-id":1391988045888484974,"timestamp-ms":1736888817842}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e11eeba0-66f2-465b-93ca-7c2e1d6f7602.metadata.json","timestamp-ms":1736888817716},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-ed1b90cb-7527-4941-8bfb-ac88b170c630.metadata.json","timestamp-ms":1736888817728}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1391988045888484974,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json b/warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json new file mode 100644 index 0000000000..cdaa23df82 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"873a52fe-5b2a-4e1a-a1b6-6724f77edb6e","last-updated-ms":1736962802585,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":54046115295283986,"snapshots":[{"snapshot-id":7056510587748164127,"sequence-number":1,"timestamp-ms":1736962802562,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":749163274667189918,"parent-snapshot-id":7056510587748164127,"sequence-number":2,"timestamp-ms":1736962802580,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-749163274667189918-0-84079b62-f304-4c23-99f3-41b474624827.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-equality-deletes":"0","total-files-size":"0","total-position-deletes":"0","total-delete-files":"0","total-records":"0"},"schema-id":0},{"snapshot-id":54046115295283986,"parent-snapshot-id":749163274667189918,"sequence-number":3,"timestamp-ms":1736962802585,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-54046115295283986-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7056510587748164127,"timestamp-ms":1736962802562},{"snapshot-id":749163274667189918,"timestamp-ms":1736962802580},{"snapshot-id":54046115295283986,"timestamp-ms":1736962802585}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json","timestamp-ms":1736962802550},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json","timestamp-ms":1736962802562}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":54046115295283986,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json b/warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json deleted file mode 100644 index ce9211000d..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-4f67e27e-97b1-44ec-a9ec-2e3a063cb9d7.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"61916a0b-1b5d-4cb6-a5d4-a7fd16311169","last-updated-ms":1736888951999,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4489414154952635593,"snapshots":[{"snapshot-id":1844314770242601776,"sequence-number":1,"timestamp-ms":1736888951968,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1844314770242601776-0-0bdb173b-1d0e-457c-acd7-bd379e96c1a2.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3556890778772681136,"parent-snapshot-id":1844314770242601776,"sequence-number":2,"timestamp-ms":1736888951991,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-delete-files":"0","total-files-size":"1252","total-equality-deletes":"0","total-data-files":"1","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":2836891935063041882,"parent-snapshot-id":3556890778772681136,"sequence-number":3,"timestamp-ms":1736888951994,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4489414154952635593,"parent-snapshot-id":2836891935063041882,"sequence-number":4,"timestamp-ms":1736888951999,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4489414154952635593-0-6882678a-6ff9-4924-958c-22b926e25638.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1844314770242601776,"timestamp-ms":1736888951968},{"snapshot-id":3556890778772681136,"timestamp-ms":1736888951991},{"snapshot-id":2836891935063041882,"timestamp-ms":1736888951994},{"snapshot-id":4489414154952635593,"timestamp-ms":1736888951999}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-1bf1d2e8-ecc1-43de-b6e6-1e0e2c007809.metadata.json","timestamp-ms":1736888951940},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-c55cec7d-847a-46e2-b36e-711774a46b9a.metadata.json","timestamp-ms":1736888951968}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4489414154952635593,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json b/warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json new file mode 100644 index 0000000000..a522e8e5fb --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"003a8b10-519d-44a0-87c5-e6b5a2584aed","last-updated-ms":1736962802545,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2947476326165869587,"snapshots":[{"snapshot-id":5356098321547065394,"sequence-number":1,"timestamp-ms":1736962802525,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2947476326165869587,"parent-snapshot-id":5356098321547065394,"sequence-number":2,"timestamp-ms":1736962802545,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2947476326165869587-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5356098321547065394,"timestamp-ms":1736962802525},{"snapshot-id":2947476326165869587,"timestamp-ms":1736962802545}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json","timestamp-ms":1736962802498},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json","timestamp-ms":1736962802525}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2947476326165869587,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json b/warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json deleted file mode 100644 index 59a5637cf2..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-530a7de7-ddeb-4adc-bd39-e7b6cb18c5da.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e35ba13b-9f12-444f-b0a2-51e6ca9f0c03","last-updated-ms":1736889068681,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4092764208808402358,"snapshots":[{"snapshot-id":5234292787271688478,"sequence-number":1,"timestamp-ms":1736889068651,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4915605823239118202,"parent-snapshot-id":5234292787271688478,"sequence-number":2,"timestamp-ms":1736889068670,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4915605823239118202-0-796b30f2-b5b9-4d82-9b7f-39a0a8276bfa.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-equality-deletes":"0","total-records":"0","total-position-deletes":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":3020510205452172551,"parent-snapshot-id":4915605823239118202,"sequence-number":3,"timestamp-ms":1736889068675,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4092764208808402358,"parent-snapshot-id":3020510205452172551,"sequence-number":4,"timestamp-ms":1736889068681,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4092764208808402358-0-d680981e-c2a9-4f8d-bbf8-38033b7735a6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5234292787271688478,"timestamp-ms":1736889068651},{"snapshot-id":4915605823239118202,"timestamp-ms":1736889068670},{"snapshot-id":3020510205452172551,"timestamp-ms":1736889068675},{"snapshot-id":4092764208808402358,"timestamp-ms":1736889068681}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a73fff1f-f2ee-4c97-9889-91a6469faae9.metadata.json","timestamp-ms":1736889068646},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-14fe8c77-21ac-43e4-ace2-b416cfca1b2d.metadata.json","timestamp-ms":1736889068651}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4092764208808402358,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json b/warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json deleted file mode 100644 index 7647c2e8d9..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-55c144fa-4512-4a44-9633-e3757055c9a7.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"df2fb31a-b9ee-4741-83e6-28b62a0ed8a1","last-updated-ms":1736889194876,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5644840696415505864,"snapshots":[{"snapshot-id":3420590106920179313,"sequence-number":1,"timestamp-ms":1736889194846,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3420590106920179313-0-b34b3bb3-5428-4a86-80ef-58fb739d9d9b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8768996550935756846,"parent-snapshot-id":3420590106920179313,"sequence-number":2,"timestamp-ms":1736889194868,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8768996550935756846-0-6d358415-49ec-446a-a261-bff1c048723b.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-data-files":"1","total-records":"1","total-delete-files":"0","total-files-size":"1252","total-equality-deletes":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":3540412790301280861,"parent-snapshot-id":8768996550935756846,"sequence-number":3,"timestamp-ms":1736889194871,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5644840696415505864,"parent-snapshot-id":3540412790301280861,"sequence-number":4,"timestamp-ms":1736889194876,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3420590106920179313,"timestamp-ms":1736889194846},{"snapshot-id":8768996550935756846,"timestamp-ms":1736889194868},{"snapshot-id":3540412790301280861,"timestamp-ms":1736889194871},{"snapshot-id":5644840696415505864,"timestamp-ms":1736889194876}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-fa36dd1d-5bf5-4e8c-b64f-46ecb8dae71a.metadata.json","timestamp-ms":1736889194820},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-16256b68-e238-4911-a1c2-d24519a083e6.metadata.json","timestamp-ms":1736889194846}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5644840696415505864,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json b/warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json deleted file mode 100644 index 9f5b8e3cdb..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-56b6fdf4-cf0c-4212-bc3e-aa89e8078cc2.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c47efb7a-caed-4568-a936-6a6978830a2f","last-updated-ms":1736888952072,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6672072926019974762,"snapshots":[{"snapshot-id":5697805165312478410,"sequence-number":1,"timestamp-ms":1736888952017,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2179686375286065422,"parent-snapshot-id":5697805165312478410,"sequence-number":2,"timestamp-ms":1736888952041,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2179686375286065422-0-7d4a211e-5120-4462-9cef-76ab53d2a056.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-data-files":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":6817748211346412300,"parent-snapshot-id":2179686375286065422,"sequence-number":3,"timestamp-ms":1736888952056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6672072926019974762,"parent-snapshot-id":6817748211346412300,"sequence-number":4,"timestamp-ms":1736888952072,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5697805165312478410,"timestamp-ms":1736888952017},{"snapshot-id":2179686375286065422,"timestamp-ms":1736888952041},{"snapshot-id":6817748211346412300,"timestamp-ms":1736888952056},{"snapshot-id":6672072926019974762,"timestamp-ms":1736888952072}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-9dfd328d-a254-4458-8072-e3c66bf4a1bd.metadata.json","timestamp-ms":1736888952005},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-6797fd5b-c1f2-4e2d-820a-a223cb1b5b92.metadata.json","timestamp-ms":1736888952017}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6672072926019974762,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json b/warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json deleted file mode 100644 index b92b6b53a5..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-725c1fc5-0e01-4907-8715-7f28a49089fa.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3beb9de1-ef29-47c5-8149-6a4fab9313ee","last-updated-ms":1736889194969,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5871250312332596167,"snapshots":[{"snapshot-id":4842535345802092226,"sequence-number":1,"timestamp-ms":1736889194951,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4842535345802092226-0-30f15f72-e09c-4a97-9812-0ee2b5b7b597.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5871250312332596167,"parent-snapshot-id":4842535345802092226,"sequence-number":2,"timestamp-ms":1736889194969,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5871250312332596167-0-24011efa-994c-4030-8da7-53357c467c6f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4842535345802092226,"timestamp-ms":1736889194951},{"snapshot-id":5871250312332596167,"timestamp-ms":1736889194969}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c578c9-c2b3-4d87-9723-ef174b6fe9c9.metadata.json","timestamp-ms":1736889194944},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b04249a4-f9ac-4b5a-9cad-765e9d17141a.metadata.json","timestamp-ms":1736889194951}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5871250312332596167,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json deleted file mode 100644 index 68a851947c..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-7343c6cc-f6e6-4d8e-89c7-232ffdbabc11.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"80a49832-dc87-47d9-a406-c249705a6039","last-updated-ms":1736888846484,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1165795474348715640,"snapshots":[{"snapshot-id":8313902679403056549,"sequence-number":1,"timestamp-ms":1736888846449,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7909803071496021477,"parent-snapshot-id":8313902679403056549,"sequence-number":2,"timestamp-ms":1736888846474,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7909803071496021477-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-position-deletes":"0","total-files-size":"1252","total-records":"1","total-equality-deletes":"0","total-delete-files":"0","total-data-files":"1"},"schema-id":0},{"snapshot-id":757219070076398543,"parent-snapshot-id":7909803071496021477,"sequence-number":3,"timestamp-ms":1736888846478,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1165795474348715640,"parent-snapshot-id":757219070076398543,"sequence-number":4,"timestamp-ms":1736888846484,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1165795474348715640-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8313902679403056549,"timestamp-ms":1736888846449},{"snapshot-id":7909803071496021477,"timestamp-ms":1736888846474},{"snapshot-id":757219070076398543,"timestamp-ms":1736888846478},{"snapshot-id":1165795474348715640,"timestamp-ms":1736888846484}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-dd6ac176-b9d6-4da8-a875-cd47ada9f8db.metadata.json","timestamp-ms":1736888846420},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-03b900ea-bc58-472c-8598-6be139182129.metadata.json","timestamp-ms":1736888846449}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1165795474348715640,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json deleted file mode 100644 index 527ef9c9dd..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-7b5a97c3-2cd0-4ac3-8a3d-717001ed3747.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"87eace76-7d50-4c06-b523-21c48781584c","last-updated-ms":1736888738743,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":903412967392675108,"snapshots":[{"snapshot-id":8961750095722443909,"sequence-number":1,"timestamp-ms":1736888738706,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7543542099974651966,"parent-snapshot-id":8961750095722443909,"sequence-number":2,"timestamp-ms":1736888738735,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7543542099974651966-0-c0e31041-a16b-4018-97a8-f54121d210e7.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-delete-files":"0","total-files-size":"1252","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"1"},"schema-id":0},{"snapshot-id":8454039229635992797,"parent-snapshot-id":7543542099974651966,"sequence-number":3,"timestamp-ms":1736888738739,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8454039229635992797-0-7e9f7ae1-abec-4da7-ac71-135f512de652.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":903412967392675108,"parent-snapshot-id":8454039229635992797,"sequence-number":4,"timestamp-ms":1736888738743,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8961750095722443909,"timestamp-ms":1736888738706},{"snapshot-id":7543542099974651966,"timestamp-ms":1736888738735},{"snapshot-id":8454039229635992797,"timestamp-ms":1736888738739},{"snapshot-id":903412967392675108,"timestamp-ms":1736888738743}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-73b7c8f3-58ef-42c6-ab3a-c7cc49ced4ef.metadata.json","timestamp-ms":1736888738672},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-3a89f688-e757-4f13-9825-4fb0b61e1a9d.metadata.json","timestamp-ms":1736888738706}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":903412967392675108,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json deleted file mode 100644 index 3b78ed9f6f..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-7bfed133-d4cb-401e-8961-9a3e80abbd9b.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"43779038-fc40-451c-a2c6-d9f6a663bce7","last-updated-ms":1736889013349,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7929386983707208693,"snapshots":[{"snapshot-id":5801931121445824490,"sequence-number":1,"timestamp-ms":1736889013318,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5801931121445824490-0-f5c4729e-faab-4e6b-a5da-b8c0de8541b7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4213073582251903126,"parent-snapshot-id":5801931121445824490,"sequence-number":2,"timestamp-ms":1736889013340,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"1","total-files-size":"1252","total-delete-files":"0"},"schema-id":0},{"snapshot-id":3226660396203515851,"parent-snapshot-id":4213073582251903126,"sequence-number":3,"timestamp-ms":1736889013344,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7929386983707208693,"parent-snapshot-id":3226660396203515851,"sequence-number":4,"timestamp-ms":1736889013349,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5801931121445824490,"timestamp-ms":1736889013318},{"snapshot-id":4213073582251903126,"timestamp-ms":1736889013340},{"snapshot-id":3226660396203515851,"timestamp-ms":1736889013344},{"snapshot-id":7929386983707208693,"timestamp-ms":1736889013349}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-2f0347d2-a247-4213-917e-496db9b4cf29.metadata.json","timestamp-ms":1736889013289},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-fa07cfc1-884b-4a2d-816d-a18db542d8e2.metadata.json","timestamp-ms":1736889013318}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7929386983707208693,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json b/warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json deleted file mode 100644 index 6540538869..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-7cb610b4-d10f-468c-88d4-d6335d6be5c7.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"792ce7dc-3961-4630-902b-f63d4bd06683","last-updated-ms":1736889068734,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4070318998856319896,"snapshots":[{"snapshot-id":3528314312383791020,"sequence-number":1,"timestamp-ms":1736889068709,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4070318998856319896,"parent-snapshot-id":3528314312383791020,"sequence-number":2,"timestamp-ms":1736889068734,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3528314312383791020,"timestamp-ms":1736889068709},{"snapshot-id":4070318998856319896,"timestamp-ms":1736889068734}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-645a7b0b-59b1-44d2-b16a-855d7e8ef117.metadata.json","timestamp-ms":1736889068686},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-a2ca9082-9c5a-4a6d-a3c9-ce81024e7743.metadata.json","timestamp-ms":1736889068709}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4070318998856319896,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json b/warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json deleted file mode 100644 index c867d2c423..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-8b3e1a61-777e-4364-b90d-b90076f80330.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"396c1ed6-f942-4308-9308-daa59fe3e6c6","last-updated-ms":1736889144090,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3480954675033900833,"snapshots":[{"snapshot-id":7582912806309123259,"sequence-number":1,"timestamp-ms":1736889144056,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6555608599426066461,"parent-snapshot-id":7582912806309123259,"sequence-number":2,"timestamp-ms":1736889144077,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-delete-files":"0","total-position-deletes":"0","total-files-size":"0","total-equality-deletes":"0","total-records":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":1849061518691625497,"parent-snapshot-id":6555608599426066461,"sequence-number":3,"timestamp-ms":1736889144083,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3480954675033900833,"parent-snapshot-id":1849061518691625497,"sequence-number":4,"timestamp-ms":1736889144090,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7582912806309123259,"timestamp-ms":1736889144056},{"snapshot-id":6555608599426066461,"timestamp-ms":1736889144077},{"snapshot-id":1849061518691625497,"timestamp-ms":1736889144083},{"snapshot-id":3480954675033900833,"timestamp-ms":1736889144090}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-cae72419-233b-4533-827a-89369113dfab.metadata.json","timestamp-ms":1736889144050},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-ffacce09-792e-4bc5-b696-2aa1ef282617.metadata.json","timestamp-ms":1736889144056}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3480954675033900833,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json b/warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json deleted file mode 100644 index c6dc93388c..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-8f4f446e-13af-4ba2-9961-3413e5c491a4.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c8873f38-a2e4-4437-8bea-ae7d127f54c7","last-updated-ms":1736888420981,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1656754234135740529,"snapshots":[{"snapshot-id":8831663020960733836,"sequence-number":1,"timestamp-ms":1736888420917,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3340463550367158800,"parent-snapshot-id":8831663020960733836,"sequence-number":2,"timestamp-ms":1736888420967,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3340463550367158800-0-50fe3f4d-7ddb-4ca3-adcf-c7b503a97189.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-equality-deletes":"0","total-delete-files":"0","total-files-size":"1252","total-records":"1","total-position-deletes":"0","total-data-files":"1"},"schema-id":0},{"snapshot-id":285316391250252069,"parent-snapshot-id":3340463550367158800,"sequence-number":3,"timestamp-ms":1736888420972,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-285316391250252069-0-fe5041a6-7503-46d7-a94a-e367abc8212f.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1656754234135740529,"parent-snapshot-id":285316391250252069,"sequence-number":4,"timestamp-ms":1736888420981,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8831663020960733836,"timestamp-ms":1736888420917},{"snapshot-id":3340463550367158800,"timestamp-ms":1736888420967},{"snapshot-id":285316391250252069,"timestamp-ms":1736888420972},{"snapshot-id":1656754234135740529,"timestamp-ms":1736888420981}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c558b757-a84e-4f4b-97fe-d2ccf275f241.metadata.json","timestamp-ms":1736888420861},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-7ff6cb51-f835-42a2-9778-3a25d1c3f0fb.metadata.json","timestamp-ms":1736888420917}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1656754234135740529,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json b/warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json deleted file mode 100644 index cb3107dbc2..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-91e08e62-afe6-47cc-bb7e-f3b8dafbd843.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c0673838-0d93-4abb-83c4-df20d75220fc","last-updated-ms":1736888817710,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2542743111193882798,"snapshots":[{"snapshot-id":4312681858952059679,"sequence-number":1,"timestamp-ms":1736888817677,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4312681858952059679-0-eb933998-38fb-415a-8c6f-65c20c4b60af.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4489525212361156766,"parent-snapshot-id":4312681858952059679,"sequence-number":2,"timestamp-ms":1736888817702,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4489525212361156766-0-ee502702-5de9-4147-9f01-2a63f690f3f8.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-position-deletes":"0","total-data-files":"1","total-files-size":"1252","total-delete-files":"0","total-equality-deletes":"0","total-records":"1"},"schema-id":0},{"snapshot-id":8005085842327209807,"parent-snapshot-id":4489525212361156766,"sequence-number":3,"timestamp-ms":1736888817705,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8005085842327209807-0-65f73aa1-e388-47f7-ad3c-0e0547345595.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2542743111193882798,"parent-snapshot-id":8005085842327209807,"sequence-number":4,"timestamp-ms":1736888817710,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4312681858952059679,"timestamp-ms":1736888817677},{"snapshot-id":4489525212361156766,"timestamp-ms":1736888817702},{"snapshot-id":8005085842327209807,"timestamp-ms":1736888817705},{"snapshot-id":2542743111193882798,"timestamp-ms":1736888817710}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-91affad6-0b81-486d-9982-03cd1e0e7b04.metadata.json","timestamp-ms":1736888817650},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-7a509bdf-750e-419b-af01-d1fee743ba5b.metadata.json","timestamp-ms":1736888817677}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2542743111193882798,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json b/warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json deleted file mode 100644 index 0a015eaead..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-9d1d121a-3410-476d-863d-61096474e534.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"002574bf-b593-4b03-8f9b-87b4cca69a06","last-updated-ms":1736888738787,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":346030801285740797,"snapshots":[{"snapshot-id":5799605361944678510,"sequence-number":1,"timestamp-ms":1736888738760,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6240071354120329714,"parent-snapshot-id":5799605361944678510,"sequence-number":2,"timestamp-ms":1736888738780,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6240071354120329714-0-335d413f-b61d-4446-a8b3-3b77c0e9d78b.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-position-deletes":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":156875929699079505,"parent-snapshot-id":6240071354120329714,"sequence-number":3,"timestamp-ms":1736888738784,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-156875929699079505-0-d57221f8-b07c-4992-b24c-d23de23c47e6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":346030801285740797,"parent-snapshot-id":156875929699079505,"sequence-number":4,"timestamp-ms":1736888738787,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-346030801285740797-0-44d10516-886c-478f-8be2-84606aa42d96.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5799605361944678510,"timestamp-ms":1736888738760},{"snapshot-id":6240071354120329714,"timestamp-ms":1736888738780},{"snapshot-id":156875929699079505,"timestamp-ms":1736888738784},{"snapshot-id":346030801285740797,"timestamp-ms":1736888738787}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6e0c510a-f46a-415e-a45a-6bd31a3f1a08.metadata.json","timestamp-ms":1736888738749},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-16f98f63-1732-491c-acf9-056ca0adce82.metadata.json","timestamp-ms":1736888738760}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":346030801285740797,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json b/warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json deleted file mode 100644 index 0e524c5a50..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-a239f268-c642-40a8-89a1-ac408a302b63.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3d51896f-f5dc-46fb-a5bf-843d5994276b","last-updated-ms":1736889195013,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":329543906335174018,"snapshots":[{"snapshot-id":7022889893183814165,"sequence-number":1,"timestamp-ms":1736889194987,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5824616610361792412,"parent-snapshot-id":7022889893183814165,"sequence-number":2,"timestamp-ms":1736889195009,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5824616610361792412-0-7c5224f2-319a-4b68-9db6-5469d6ed3879.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":329543906335174018,"parent-snapshot-id":5824616610361792412,"sequence-number":3,"timestamp-ms":1736889195013,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-329543906335174018-0-8044e2db-5959-4c27-8e91-e5ed66869db8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7022889893183814165,"timestamp-ms":1736889194987},{"snapshot-id":5824616610361792412,"timestamp-ms":1736889195009},{"snapshot-id":329543906335174018,"timestamp-ms":1736889195013}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c0b54165-16b8-4dcd-b92f-664162426cac.metadata.json","timestamp-ms":1736889194975},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-50d66b80-6b17-436f-987c-873233512551.metadata.json","timestamp-ms":1736889194987}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":329543906335174018,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json b/warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json deleted file mode 100644 index af20705cb7..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-a2865c21-30a0-46a2-bc66-751cd8c116ac.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"84ff20ba-e69a-4deb-b97a-09fe32ab3ea2","last-updated-ms":1736888716024,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":700734091558935978,"snapshots":[{"snapshot-id":3787244053631992891,"sequence-number":1,"timestamp-ms":1736888715992,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3829301046240051457,"parent-snapshot-id":3787244053631992891,"sequence-number":2,"timestamp-ms":1736888716014,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-files-size":"1252","total-data-files":"1","total-position-deletes":"0","total-records":"1","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3364091044142178334,"parent-snapshot-id":3829301046240051457,"sequence-number":3,"timestamp-ms":1736888716018,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":700734091558935978,"parent-snapshot-id":3364091044142178334,"sequence-number":4,"timestamp-ms":1736888716024,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3787244053631992891,"timestamp-ms":1736888715992},{"snapshot-id":3829301046240051457,"timestamp-ms":1736888716014},{"snapshot-id":3364091044142178334,"timestamp-ms":1736888716018},{"snapshot-id":700734091558935978,"timestamp-ms":1736888716024}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a811440d-2f25-4fa6-bdca-e6b3a129710f.metadata.json","timestamp-ms":1736888715966},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-41d91f78-2cb7-4df2-9a89-b1efb016a0b0.metadata.json","timestamp-ms":1736888715992}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":700734091558935978,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json b/warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json deleted file mode 100644 index c1eb07ef02..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-a7169d82-a54d-4b15-92c9-9711ca18ff4c.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"175b9a2d-98e1-419e-a6ec-8f2c4238a3a2","last-updated-ms":1736887173251,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8288941973562284942,"snapshots":[{"snapshot-id":2972879693291038375,"sequence-number":1,"timestamp-ms":1736887173219,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2972879693291038375-0-d5c518c7-6c73-426a-855b-2db6ca782f5b.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3060050269327575568,"parent-snapshot-id":2972879693291038375,"sequence-number":2,"timestamp-ms":1736887173244,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-equality-deletes":"0","total-data-files":"1","total-position-deletes":"0","total-records":"1","total-files-size":"1252","total-delete-files":"0"},"schema-id":0},{"snapshot-id":8926228177826919489,"parent-snapshot-id":3060050269327575568,"sequence-number":3,"timestamp-ms":1736887173248,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8288941973562284942,"parent-snapshot-id":8926228177826919489,"sequence-number":4,"timestamp-ms":1736887173251,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8288941973562284942-0-b7e05260-42fb-4b65-8ff2-fb0c04ea290a.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2972879693291038375,"timestamp-ms":1736887173219},{"snapshot-id":3060050269327575568,"timestamp-ms":1736887173244},{"snapshot-id":8926228177826919489,"timestamp-ms":1736887173248},{"snapshot-id":8288941973562284942,"timestamp-ms":1736887173251}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c9c44c02-7749-4f19-9479-06b9f5c8a36c.metadata.json","timestamp-ms":1736887173183},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-f3c84653-7a1f-4204-9d0b-ef8e18e0cee6.metadata.json","timestamp-ms":1736887173219}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8288941973562284942,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json b/warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json deleted file mode 100644 index bb26968b75..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-aac2aa86-4744-4909-a9c4-6d18c4ede8ea.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"c25fd744-4e53-4544-99ba-65c20e364bf2","last-updated-ms":1736887154419,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7998744310280295035,"snapshots":[{"snapshot-id":5940108511084569748,"sequence-number":1,"timestamp-ms":1736887154345,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5940108511084569748-0-9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1445752429382423980,"parent-snapshot-id":5940108511084569748,"sequence-number":2,"timestamp-ms":1736887154410,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1445752429382423980-0-3737aece-7657-4840-905b-26cc0d4353e1.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-equality-deletes":"0","total-files-size":"1252","total-delete-files":"0","total-position-deletes":"0","total-data-files":"1","total-records":"1"},"schema-id":0},{"snapshot-id":308720073320660216,"parent-snapshot-id":1445752429382423980,"sequence-number":3,"timestamp-ms":1736887154415,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7998744310280295035,"parent-snapshot-id":308720073320660216,"sequence-number":4,"timestamp-ms":1736887154419,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5940108511084569748,"timestamp-ms":1736887154345},{"snapshot-id":1445752429382423980,"timestamp-ms":1736887154410},{"snapshot-id":308720073320660216,"timestamp-ms":1736887154415},{"snapshot-id":7998744310280295035,"timestamp-ms":1736887154419}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-051f02cc-8e75-43dc-823b-9341542bc340.metadata.json","timestamp-ms":1736887154291},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-0adadefd-8be3-451a-bd45-df558dcc14c5.metadata.json","timestamp-ms":1736887154345}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7998744310280295035,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json b/warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json deleted file mode 100644 index 486e9eef5f..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-ab52d69b-95a3-4bf2-b2cb-f785b5ffdca3.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"86e7778e-99e0-4e54-8700-6f60739a4dab","last-updated-ms":1736886777665,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6989454375805241585,"snapshots":[{"snapshot-id":1513626882798940460,"sequence-number":1,"timestamp-ms":1736886777635,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2537810747946166223,"parent-snapshot-id":1513626882798940460,"sequence-number":2,"timestamp-ms":1736886777658,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2537810747946166223-0-2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d.avro","summary":{"operation":"overwrite","added-files-size":"1252","removed-files-size":"1269","added-data-files":"1","deleted-data-files":"1","added-records":"1","deleted-records":"2","total-records":"1","total-equality-deletes":"0","total-delete-files":"0","total-data-files":"1","total-position-deletes":"0","total-files-size":"1252"},"schema-id":0},{"snapshot-id":2251096554203142244,"parent-snapshot-id":2537810747946166223,"sequence-number":3,"timestamp-ms":1736886777661,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2251096554203142244-0-767dfbab-4f1e-4dfd-ac6a-07deb840532f.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"2","total-files-size":"2504","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6989454375805241585,"parent-snapshot-id":2251096554203142244,"sequence-number":4,"timestamp-ms":1736886777665,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro","summary":{"operation":"append","added-files-size":"1252","added-data-files":"1","added-records":"1","total-data-files":"3","total-delete-files":"0","total-records":"3","total-files-size":"3756","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1513626882798940460,"timestamp-ms":1736886777635},{"snapshot-id":2537810747946166223,"timestamp-ms":1736886777658},{"snapshot-id":2251096554203142244,"timestamp-ms":1736886777661},{"snapshot-id":6989454375805241585,"timestamp-ms":1736886777665}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-a8e4a1e2-e606-4c37-82ac-3e0455c4cc61.metadata.json","timestamp-ms":1736886777609},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-721f7a92-e0d5-499d-bc3a-278d2bced975.metadata.json","timestamp-ms":1736886777635}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6989454375805241585,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json b/warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json deleted file mode 100644 index dc4fb90b51..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-b528d68c-cf13-4d22-a115-eeac5a729131.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dfa9fe5a-06c5-49f2-90e3-18acaad12269","last-updated-ms":1736889194938,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3956409816803284574,"snapshots":[{"snapshot-id":3964058929230744404,"sequence-number":1,"timestamp-ms":1736889194889,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3964058929230744404-0-4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6927406033723608373,"parent-snapshot-id":3964058929230744404,"sequence-number":2,"timestamp-ms":1736889194911,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-records":"0","total-delete-files":"0","total-files-size":"0","total-equality-deletes":"0","total-position-deletes":"0"},"schema-id":0},{"snapshot-id":25667599030805015,"parent-snapshot-id":6927406033723608373,"sequence-number":3,"timestamp-ms":1736889194926,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3956409816803284574,"parent-snapshot-id":25667599030805015,"sequence-number":4,"timestamp-ms":1736889194938,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3964058929230744404,"timestamp-ms":1736889194889},{"snapshot-id":6927406033723608373,"timestamp-ms":1736889194911},{"snapshot-id":25667599030805015,"timestamp-ms":1736889194926},{"snapshot-id":3956409816803284574,"timestamp-ms":1736889194938}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-7589bb23-9933-48d4-80c2-39ca6488f707.metadata.json","timestamp-ms":1736889194882},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-3c50a5b3-b92e-435a-8d8b-68eb818c32ef.metadata.json","timestamp-ms":1736889194889}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3956409816803284574,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json b/warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json new file mode 100644 index 0000000000..3b9bc364ef --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3513d8a8-fd19-4c33-9295-321c7b85e21e","last-updated-ms":1736963298248,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7592335843825832251,"snapshots":[{"snapshot-id":7775845885571657371,"sequence-number":1,"timestamp-ms":1736963298190,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7775845885571657371-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":710899873101048239,"parent-snapshot-id":7775845885571657371,"sequence-number":2,"timestamp-ms":1736963298219,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-710899873101048239-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-position-deletes":"0","total-records":"0","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2707482049963695882,"parent-snapshot-id":710899873101048239,"sequence-number":3,"timestamp-ms":1736963298232,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2707482049963695882-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7592335843825832251,"parent-snapshot-id":2707482049963695882,"sequence-number":4,"timestamp-ms":1736963298248,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7592335843825832251-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7775845885571657371,"timestamp-ms":1736963298190},{"snapshot-id":710899873101048239,"timestamp-ms":1736963298219},{"snapshot-id":2707482049963695882,"timestamp-ms":1736963298232},{"snapshot-id":7592335843825832251,"timestamp-ms":1736963298248}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json","timestamp-ms":1736963298176},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json","timestamp-ms":1736963298190}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7592335843825832251,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json b/warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json deleted file mode 100644 index 762e9fb5e3..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-bdee5c0b-cc54-479c-8608-02dffa3337b5.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"8e4e692f-a95c-4ec4-8e73-ebdc39e4c053","last-updated-ms":1736889144275,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8198039180664750375,"snapshots":[{"snapshot-id":3889083549440119316,"sequence-number":1,"timestamp-ms":1736889144256,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5376886020839292182,"parent-snapshot-id":3889083549440119316,"sequence-number":2,"timestamp-ms":1736889144272,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5376886020839292182-0-f9f0db0b-08a2-47a7-a20c-fe26cee6a077.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-delete-files":"0","total-position-deletes":"0","total-files-size":"0","total-equality-deletes":"0","total-records":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":8198039180664750375,"parent-snapshot-id":5376886020839292182,"sequence-number":3,"timestamp-ms":1736889144275,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8198039180664750375-0-ce2853cd-f607-4bb3-8a0c-0749c91539a3.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3889083549440119316,"timestamp-ms":1736889144256},{"snapshot-id":5376886020839292182,"timestamp-ms":1736889144272},{"snapshot-id":8198039180664750375,"timestamp-ms":1736889144275}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-6a4ce6ed-60ec-4db0-9577-717d002710be.metadata.json","timestamp-ms":1736889144251},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-cca5c85a-fa4d-4cd8-a310-5c3207336309.metadata.json","timestamp-ms":1736889144256}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8198039180664750375,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json b/warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json new file mode 100644 index 0000000000..33d052502b --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"60f7d59c-143c-44cc-baf8-34a58c4fd747","last-updated-ms":1736962802490,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2460630470132577521,"snapshots":[{"snapshot-id":8777927210488106010,"sequence-number":1,"timestamp-ms":1736962802415,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1333515437760368488,"parent-snapshot-id":8777927210488106010,"sequence-number":2,"timestamp-ms":1736962802437,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-equality-deletes":"0","total-files-size":"0","total-position-deletes":"0","total-delete-files":"0","total-records":"0"},"schema-id":0},{"snapshot-id":7144360376649993479,"parent-snapshot-id":1333515437760368488,"sequence-number":3,"timestamp-ms":1736962802464,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7144360376649993479-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2460630470132577521,"parent-snapshot-id":7144360376649993479,"sequence-number":4,"timestamp-ms":1736962802490,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2460630470132577521-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8777927210488106010,"timestamp-ms":1736962802415},{"snapshot-id":1333515437760368488,"timestamp-ms":1736962802437},{"snapshot-id":7144360376649993479,"timestamp-ms":1736962802464},{"snapshot-id":2460630470132577521,"timestamp-ms":1736962802490}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json","timestamp-ms":1736962802394},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json","timestamp-ms":1736962802415}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2460630470132577521,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json b/warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json deleted file mode 100644 index 307893aba7..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-e0db0d00-98b2-4338-86ea-49db24ed0719.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"739bd7de-f8da-4aaa-ad33-f213251fa940","last-updated-ms":1736888846520,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7197919905951446818,"snapshots":[{"snapshot-id":6486622511572862241,"sequence-number":1,"timestamp-ms":1736888846495,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3799741043573514301,"parent-snapshot-id":6486622511572862241,"sequence-number":2,"timestamp-ms":1736888846513,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-position-deletes":"0","total-files-size":"0","total-records":"0","total-equality-deletes":"0","total-delete-files":"0","total-data-files":"0"},"schema-id":0},{"snapshot-id":4179982296980602400,"parent-snapshot-id":3799741043573514301,"sequence-number":3,"timestamp-ms":1736888846516,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7197919905951446818,"parent-snapshot-id":4179982296980602400,"sequence-number":4,"timestamp-ms":1736888846520,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7197919905951446818-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6486622511572862241,"timestamp-ms":1736888846495},{"snapshot-id":3799741043573514301,"timestamp-ms":1736888846513},{"snapshot-id":4179982296980602400,"timestamp-ms":1736888846516},{"snapshot-id":7197919905951446818,"timestamp-ms":1736888846520}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-b6b5389c-b25f-4a55-a78f-c2f308f98a66.metadata.json","timestamp-ms":1736888846490},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-6b03ca65-ffb1-4cae-bcda-c157287d11e5.metadata.json","timestamp-ms":1736888846495}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7197919905951446818,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json b/warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json deleted file mode 100644 index b930df6b14..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-e375ca26-05a6-49c2-8d21-e293a95b4837.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"e5fa2107-c0dc-43f0-87c3-d3732e5c9401","last-updated-ms":1736889068823,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1644775352898622177,"snapshots":[{"snapshot-id":3533502525690906202,"sequence-number":1,"timestamp-ms":1736889068802,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6683184572107984435,"parent-snapshot-id":3533502525690906202,"sequence-number":2,"timestamp-ms":1736889068820,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-equality-deletes":"0","total-records":"0","total-position-deletes":"0","total-delete-files":"0"},"schema-id":0},{"snapshot-id":1644775352898622177,"parent-snapshot-id":6683184572107984435,"sequence-number":3,"timestamp-ms":1736889068823,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1644775352898622177-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":3533502525690906202,"timestamp-ms":1736889068802},{"snapshot-id":6683184572107984435,"timestamp-ms":1736889068820},{"snapshot-id":1644775352898622177,"timestamp-ms":1736889068823}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-90293fc8-1bb4-4a92-8a4f-9d7bce9b079f.metadata.json","timestamp-ms":1736889068740},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-69fcf368-13c5-4691-a67d-886c6f03db70.metadata.json","timestamp-ms":1736889068802}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1644775352898622177,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json b/warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json new file mode 100644 index 0000000000..465cea5cd4 --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"301fdef7-6bc5-4ddf-abfe-51c95b066a11","last-updated-ms":1736963298400,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3079425052372487255,"snapshots":[{"snapshot-id":2703304898161014810,"sequence-number":1,"timestamp-ms":1736963298339,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8352403435774761309,"parent-snapshot-id":2703304898161014810,"sequence-number":2,"timestamp-ms":1736963298393,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8352403435774761309-0-60956563-1580-4c8a-859a-c232e2de30a2.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-position-deletes":"0","total-records":"0","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3079425052372487255,"parent-snapshot-id":8352403435774761309,"sequence-number":3,"timestamp-ms":1736963298400,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2703304898161014810,"timestamp-ms":1736963298339},{"snapshot-id":8352403435774761309,"timestamp-ms":1736963298393},{"snapshot-id":3079425052372487255,"timestamp-ms":1736963298400}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json","timestamp-ms":1736963298306},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json","timestamp-ms":1736963298339}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3079425052372487255,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json b/warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json new file mode 100644 index 0000000000..a55ee096cd --- /dev/null +++ b/warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json @@ -0,0 +1 @@ +{"location":"file://./warehouse/test_ns.db/target","table-uuid":"7ecdd093-f2d4-48e9-bbe2-56a2206aac2a","last-updated-ms":1736963298297,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":336213885750966359,"snapshots":[{"snapshot-id":4517289051336819292,"sequence-number":1,"timestamp-ms":1736963298273,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":336213885750966359,"parent-snapshot-id":4517289051336819292,"sequence-number":2,"timestamp-ms":1736963298297,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-336213885750966359-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4517289051336819292,"timestamp-ms":1736963298273},{"snapshot-id":336213885750966359,"timestamp-ms":1736963298297}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json","timestamp-ms":1736963298259},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json","timestamp-ms":1736963298273}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":336213885750966359,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json b/warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json deleted file mode 100644 index b05a333a8a..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-fe36fcdc-6612-404b-8058-56409fb03fde.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"9afb44a8-ed3c-4970-9ff7-48e02f20bf87","last-updated-ms":1736889013449,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6473024829048856312,"snapshots":[{"snapshot-id":2600792867184750836,"sequence-number":1,"timestamp-ms":1736889013433,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":6473024829048856312,"parent-snapshot-id":2600792867184750836,"sequence-number":2,"timestamp-ms":1736889013449,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-6473024829048856312-0-ecb485aa-72dc-4245-a543-002d315794c0.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2600792867184750836,"timestamp-ms":1736889013433},{"snapshot-id":6473024829048856312,"timestamp-ms":1736889013449}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e461f509-4aea-478f-aa34-60953100b1b2.metadata.json","timestamp-ms":1736889013426},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-203138d4-f7f0-4aa6-8d9b-0f1ed603f368.metadata.json","timestamp-ms":1736889013433}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6473024829048856312,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json b/warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json deleted file mode 100644 index 3ee745ae7a..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-feccb614-8430-434f-bf9d-c076a6044b06.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"dffb4662-926c-4392-8af0-084cc190a9c4","last-updated-ms":1736888952111,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5395725435613174339,"snapshots":[{"snapshot-id":4948184997192531561,"sequence-number":1,"timestamp-ms":1736888952100,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":5395725435613174339,"parent-snapshot-id":4948184997192531561,"sequence-number":2,"timestamp-ms":1736888952111,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5395725435613174339-0-3c679dff-e9d2-4743-8c9f-41100f6ed284.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4948184997192531561,"timestamp-ms":1736888952100},{"snapshot-id":5395725435613174339,"timestamp-ms":1736888952111}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-00ef0d47-a457-48a3-bf17-1ad69a8c5851.metadata.json","timestamp-ms":1736888952091},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-e10b1016-a1c1-437e-8070-0bd4c9505623.metadata.json","timestamp-ms":1736888952100}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5395725435613174339,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/284b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro b/warehouse/test_ns.db/target/metadata/072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/284b2273-468b-4c60-a6c4-99561a3f0d79-m0.avro rename to warehouse/test_ns.db/target/metadata/072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro index 5f213b8227d2019635f2c0d52d7f8e89862e508a..0b9a1ca9e7755c717b41472066483c2ec76537ea 100644 GIT binary patch delta 132 zcmdm@v_)xyu7KRM&Py7O>tlO-zurlF6`_#Cbb^_QX~~*PzkaT4Jis{FTR`8%z`)Qz zA4nML8yXsb2?H<>NE#UE0-?E4s%es?p>CqNk%g{FqDi8zrA11juDOXpqFJhOa;jl+ N(&T*tX#(hW0RZ9;EXV)= delta 132 zcmdm@v_)xyu7KQT)$TTV$8W#d4s(b}{M+Znbb^_QY14|;*FV0TzS4NIw}8HjArR;r z7#bMp!&yLvfxZC<=o;u6S(qdl8JQdFnwVK6>6#>)8R#aOC7bA4TAG>}CK{(1q?lVy L-Y1YIfNmE6mG~BoL=PjC|peH2!Ft4^Atw6_ubYyWLY2Sz~+Bm^!u@k6Xej z2RLv-ocI@zR{R4T_8(Yr0Zwq_j1X6Di1%hyvF|J5>z_<%@&0@V6>PqB_HFf6r?yp^SZW1J!&Q0*O+%fkg?5`wFrURDg!Ay0 zJQU31xdzkwDdi#*VG_5pl=(Xs1EV?vD|Pe!FyUh=TGxzcuvEAA{UjD3au1BB@6c2~egY&&pq=rNo5A$_vB@V_{62WMM~4(`=Lo34SJ2 zZL{XvE{r&jA`~lKGJrwAhBS|a(I@y*RV4U}#XfW6eC#n^v&Pv}>@bX&o2`|7xT$O; z?xKR4vG!cxZCx;PVoi|cEZ8Q!fD98K_!%dlm#APM=*T`n-#1CZef&otb^vJ2Z<0nz z#i*{xTy%F4%cZUl6Q5#WlBbVP$xSFm}KhmNYCx2IjTQmQuq;rzz88 zN!P7CfI(TL0k=#Wk5dqSROBN;M-!2!5o@YrQ{vH#1q6_Y5kuB0a|vc{6^Tkc*H3at zA`o6AJ^0Wv7s6U4$z1!HOaqb(iIR|!P$@&kRTYwY7Jk9pFm}C(VD((K%*8lT1+qNm zc_L^;PzFI6s7A@Cq^F-m`8alQ#j^A+m_4f%Wzx?hpK?woc=S-PG1NM!BSm4E*QLS< zSC-XruPv)vvceq;#p;SlS%m~FO*N`kr(*dvjdGcx#g^jyi=ME$(*e3ZN-jg6M(6VS zA;y@d#&iJl)xw1nDhofNDY{6}Az?s70)GfpvV`~u!tAQ*E@_Yoh-H*LkUcYW3n+Vl z(l$##cSqT~J4)N!HcFX0O$bas$^)ny^70@w4#*ijtFpyw#a##3S}1g{57@R4u)R58 z+u8uIy*!*se8>u;6#PH&qqv2($C0CB0P zmQ`C-h$`MFxq;r*1MbiQ0?EaKWFKu4t$mDf+9{RXxe(aL>(Q>fb?nae*h*GJvZ_MN z)AZF4w|X(zSWTVRsHXP+RMV9Zoh_DA$!ZluxK!OS6BHYrGDv0(y|d7`l@-%awhkaj zUv)J;jD0>yW!nhiNg{#XQ7uX)z3SKvbkUp8^bfGFd93n zqTf)h)!KXf37R0N2Tf36Mhxe8C z{G0DS|NZY5znz_qLjB!;U+6#G)Ag@@{r<-#)O|R<~#N zTAt_ij*fz3hg#mj?6tN3=)vPpo<2O+U%sX9>c2F0o;P;CZfG#pcik0%)8z0? bG!;KPdoMrGv|arHE?6G~cltDpNnk@8I> diff --git a/warehouse/test_ns.db/target/metadata/18d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro b/warehouse/test_ns.db/target/metadata/139ec306-70b3-4d04-a4b6-87de01187693-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/18d99a4b-881d-4f00-b7a3-5e1227fcdaa3-m0.avro rename to warehouse/test_ns.db/target/metadata/139ec306-70b3-4d04-a4b6-87de01187693-m0.avro index 8b89ecd57d7cfb6b5b4c63a271bfd5936782c502..3f09c10d9a25abea574adf0f76ff4396eab9b0f3 100644 GIT binary patch delta 131 zcmdm@v_)xyu7KRKsx^!HzQ#t~-6u0)8OwKBrW4FeOglQePOq7JaYOB7ZvlO00|P@t zeM3V7Lwy4vQy<7P1PcLq1_rtYx`xJBB$6u@nt6{SEC5{T-G(b7=Z@qQ$+W2!@3#7Pj2yBtkqt!8(}mnG|+Wp*}^ zIr(2WrKLhb(9_aGM@vIRhjgN*h4*H>>)o}_BtA!xGoH-6_vZIL=FR8cSIxb*QvZTY z=&O4#3^`4hF*H&sGG7`UV;r(5NR8q73nL7Sq17>BI>8lO1WdRv*U9%pJbn(}1p7J* z1%t&PgUvd6qg~q=P{|fs=igRub!uCciG^0MG+d>3)G_p_x@foA0rOcbLpYD|QaE!qS$#=kr*C$Xzg=zDKVF-`5IX zewbq<0K*4RMu!w236RtX2~egoON;+1ONj}KwHJsH#?qK|NNGn*lk|d11%576Z?hKL z&W$*WA{47!GJ-+C#x#qhF(mk}sz~q`i+$$C*~DX_W{tC{*l`#!H(e|HU{l#h+(iX7 zW9@~&+qz)x#F`+>DcPpHfDE}0{EQROOLQ<0bmWkr?>mGGA3q4h4gjtBP0>iGyr?TO z%kIu&xzP0~_bCP@dG_QHxenz8IeAJ{l(A}DDEZo`B@Ly>z`R!3QfS!dG(~zW>AJNC zFevjh5SD4KN<5mffB+JC!H~7iT!NWfMWR#B^?3$K1j6&A z2OnByDXevpEVQ4hG$4FTw1kv|S{X8~s!-I^@EhiavFlAGtLL(1mg7hl$l{o1T+)c3 z41zLHjh0bKPoGEGBzAGdvh)F%J+Bo-(k~*P3PGoM^iZ-1)HhTmqJ+8da-bvHXfgnaa?7OMd>cC#=D2gszYH^U$Z!nYw<6F`GZc5t(#CbOsgcZwzV*gf*1JEhqnE=gQx?h9N1u!pO&(-R4uq#n}GugvxcDudP#zCXq*l9FcIDEU=&_C_n bUp{Fxc3KbAY^#|4Rn2|`%UioJSwHxHksL>8 diff --git a/warehouse/test_ns.db/target/metadata/1811fb69-c4b7-4732-98a3-154c8e821d41-m0.avro b/warehouse/test_ns.db/target/metadata/1811fb69-c4b7-4732-98a3-154c8e821d41-m0.avro deleted file mode 100644 index 5cebd61fdefb869832a5c00825f338c4d6fa68d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`K&2QsG6u^^gR843(d+xj|#R}I)7We)T%6%CgxhfQh$}+VM|lHYNOqH3(RMs@L@l^ zEjI<@xUb>tc1*eOg&&3OBxY{&@lY#|z|4kzdlc~r741vL6PVgC_uMEHAaWOsr*G0r z9_=fIU);$s5`f_XD6K_ukOW97gajy4ktX@C(o&+sWaR~-`JvEeEmBw!(l{AMLV}+Q zRm+UUvd3DO1_6qdE*Zju$3`>_gf<}fQ&}YVi-j(;!*t>>Ua`j7RP4wPn4PSZeXyx) zByOXEim~QG;B{RvcVb15VHIqXUO5Om~#pzm8G;x2v>h#df0@tdR( zQ!%b8(u?lSVma6KLF7^lO!DZ#eRAcCF*$xnWR$UTTuAxKs3i@B$iTdo*^+D6Xg7I! zEa|$o2QVnJG~kAA;&w8^r&&G{bTkoZ9I%$!HYE;Cm`4DK7&Bz8GM8ZHmXWB`v)w3# zBm&`C(t{5Ty%5$aNfz2qWEzlYM3jVt_(~ZvE~}8#6aO=2`=RYj1*_(=p%>#w707&> zXOW-*K^X*Ppc*Bkl%8%Bq?6Fb8OzdpVD`LLk4P-5h2A<|s{l+bCu3v>-6uAoZYb$isus&?6`Gq|6qN6?+|EqfqEx9UmhOt7G%n50@7N&Ky&1kiH0MqJk4%6zDtiM*`Tm5aq#Lfll0mP-E znpbUAA(Q<}b}WJfm{>{#tI*5k>K7eE-dwPNP2d`o8I7G) z)^DiRYVA4x5KR!&fhH)kqZIIPfuJyB3KyPb3$K}~6$`sJv+x*iz|dhNB*o4X`V5Z= z#wUKr2#>BvW+C=(`LhQ)1zZ!Lxl8sd&?64a^V@T|`W&n}CFKQVoyYIL2fb>{S%NoQ zIHnU&0ap>YpyNdaI%PkRrl^)G>-ab{-O@MNz=VeWh$X@XF?_1c-jJ7CH}aUfi|1AC zo6*02z4G1HKmPIUFK^vB{p6j-ueX|w-@bbG?DHS~{O9ckd}@E!anFNJXTNhrIU7d+ ztpkm*u)}2Eb2@_Zb0#_%?;XR?jgD>@@TKDuKEgk~>3Uml8=f(8+(Xtr)DOGugZ@Zw zI|m0&+j6`8L&tKuJ;U6eU$^#7?>_kW(Y>?g^Vb_Yjo<6d@9R5X)@$(GY&LhA_)u%s nc51Z-KE773sZVqFr}t~MoyJ``+Q>(LmZR^&^u{g>RyY11A6QHt diff --git a/warehouse/test_ns.db/target/metadata/1b8f6465-742a-450b-a358-12b08ae8ff62-m0.avro b/warehouse/test_ns.db/target/metadata/1b8f6465-742a-450b-a358-12b08ae8ff62-m0.avro deleted file mode 100644 index 4068be06a9e49a7f2553b3f51168237239e7515d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@1#sw#mhBvzbOXyg-zr13|ars0HOD^-HBAKgX6Fb?^W)roRGnsks&F_88n@_#Zw)Wr5 z{Sk}lU)#?OG0vFLH*&!XUl=W87_unHjsE3xBMgkb)iM$qV$WvE@X(QdN^=CeeEupi!* zn}TuN*I;r#qg;d{Op|t=F@NWBVAMxorf%LJraY#iea(0dQ+0daPZI$m_rQ4i4!!2- zfl~PO`z1yKFnj=Iv`7V#07-?A0A(tQy!usIN=%rnyg-aF5yqrN=2j#$%SWk@;HN^> zGHbT%(nyLZLb1{%19%D8kQR|J`UHQfiv)kM#Aj|(`fYn*k(4#SAK`AXS`>&iyr zE-GjkYtIDU)&)~1HUwGDoNdwz$T0PRpK%I$i3$dSj_eckeT$^r#|MGf0iX@PNg5dy zqoyKr-rZ#^SGqn?m zUAOiC24$HB+%j$4PD%J-nU4e=O+=AJtfjV1iAQr55I`bE3|XtpC78K&Br5e>KP@1M zKzNz-;6uxt3u~1mGwtUx4M;j9NZ2_yu#r#P!C4HFMcA=i^8f$ZDGx zsh|--83bjZ8YQEao_-n?apK~PMd>{-ds-{1q@P7T<(!Uj>!DyV)H-yFrAb2VLH8<^|wlV=VX&Gv2($C0CB0P zR#jV7h&tXVy@B4<1MbiQ0?GM;WFKu3t=+{qJ+748xe(ah)o7QVI`;AA*h*GJvZ_NY zvh39mH+nGHSWTVRsHXP+RMVvpoeh>#$!ZxyI8@!335tzQ6(rM!-kEFMs)}hSTL%!N zuR0nZBt9Q!vTX$Mq!drQDD~SrB9)m*TM#c&NOjmFNZ z>^D?vwelQ)f+h&+K@(KkQ44suKv0-5h6~T4g||%AhK1d`S$K*!VCXP%Qefu^eMZ0p z<8hcU!qXd4T8RBy^&Wsu0oMd*?(%~M^ppeh>h@f(K8MRrNqGTTCh zzj^fAxBtYywDWsk{;~JQ_xg)%UH|vjmp}aY=g&XAr)k>XTe#zXr*qJ`p`49UK-Ph_ zShz`k5O^Iy`7$BhTX&NQTzDNrtQNc(`!@b zsMoe^&+Jjw8xFhn!Su4V|L}vykDflb&|kc*@9HnNcD~!%{c1~tcYOyQ_@eD-yP76n e-`WOK@w2n{?wO|T>L22SC8L_I@4>X@w*Lcf14=Fc diff --git a/warehouse/test_ns.db/target/metadata/28820ce5-8545-4c2c-ad01-d2d70ca569fc-m0.avro b/warehouse/test_ns.db/target/metadata/28820ce5-8545-4c2c-ad01-d2d70ca569fc-m0.avro deleted file mode 100644 index 269cf205ceb0b851ac51c14079c64ad52b42ebf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@1#s(L^b5{Ls@p^?u?JNO?saw&oXTsU#!h!7XV4G{0m#E$J`Lz_($MfPOoy*I!2F>gK|JlooTCG|#Z zOn=*cZiq?3jGmDSo_WG(7{h>terohCo*RL0^sI&v(J{`5xzD%@V~u=G7)O`z#@T0C zz!^*i8Eo263+>uMp9(f#I(u8b)Tu3%CKg)3(qNh1e#20^YNFj{1I%ZU2w*?FDK`b< zxUc^7K|;9*L=Z>KG-2M(Mc=57z)anIFpT+_ism)rDNNPveJ_p#h};9?=^ON##|KK` zS8wMS3Bd3Gl+hpsNCG4kLIRYj$kO6pX(=&bvho5kf=C$C1}UwGXp)X%A;Hgts%6%E z*@Y2hVTfX-OZxEOvmwnwVe|<8RTT;TVv)z(C>swLuUX@)D|Q%!%uQFyK3rEe5_eHS z%~*Rb@UAYHIk6_la!R&IFCfF%1AfK{=p`x`2s*My(Dw}za}R$A#0~(h`AyPDs2J51 znPqq9v0Ui-F!m@0CVBe!l-vYjL{6R%8D*>*7gD}5YC%IOGBB@YwiFuH+D(xj3%c&? z0SwAK4Y+06xSgEvqdXr8I+}1WFk)uBwpK)8KRF29Z0M2v*N!%Phx{Dv-rC&tpMD zf-(roKs8E6B|W`3%*K(6GZv+H!0cJAD3X32`IK`y!L0{^jiJ^-9mxyJye{QVxU#Ia zdu>^rf)%bP6{{;IW#tmEG}WkD?TY2sG|Xg%=1cPZmpx&1rhRmM7+(e+4bSEALyR#^ zjAHEE@_Yoh((lLkUcYW11P(I(l!e~ z_ea^iKT6x&G)kE}4G2sx%zUUD^6(%u^2r%JtFpyo#a#v1Diyky2W(pi*j^v7ZLI;= z-W*`$MI<2qr@Kj**tuXmfVfmti>j?E zL=|rs-$3s=0PfHN0?BegvX3^2);`8KZ5K-JT?p*s)o7QVI(B<=Y$YoqSydrsN%CTd z8$Fn8tftOOR8#wZs_9aQ&IZe=WVH+;9IEb^35tzQ5hSyQ-YGS1Ma49ft$hg67affc zBacrK**1cBl8YyUFdkH0m?mK$+;})lnOH~!r_{?8>gOFq(Oj^Qjo})U8;zY+-fyVZ zYUMfp1Wgch08LPCMT|g4l#~~cRUSWmA9~e&@+nc|# zH$VO9yKnw{=lehY{oq2s-PZMAzqtM7=O6z5r>SY$?_0RzUaNJ`x}ltnVnEh{wph4P zdf*RQg7QlyS{Usu(=tu`v5F^Cy_xW7noYaYu}zO1H9JR#N6kae_L|f;t)_4LZPTMi z$K9cKFuQE+KYI7^Cr=-q>$k7zyZVn?J6~_@ez~Q=v%UjA_@M1*yP75+U)=^%@w2n{ W)~TlL>hIx%C8L_I@4>YCw*LdVA5Mw@ diff --git a/warehouse/test_ns.db/target/metadata/2c17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro b/warehouse/test_ns.db/target/metadata/2c17da15-e1e6-484c-87fd-d5c594ce88c8-m0.avro deleted file mode 100644 index af051536c2b53dfa7c9769d2179937ecfa9e9849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&5I*N6u^^A7zUIgpNd zlEaEOK?M=dUOkBaffqsWZ}8y3)8fVd!1t=so$gLH&SVop)2URw_v-gP>eZ*CXZ8Iz z6KBE#`f}&FCZ;jd23jI`>Iki+jXmbOi8i=+u6eFDFj`tj1Dp|YmvI}$TG<*u3ZKF+ z&OS>$&R{agV6&E5XjT@wRItU;`LESWt;$kqVy+b|^;YQ}wluY?HrlPXzpfS68v1K zT4pSkU1(wI`zThrWC$-V8`IPm+JN9+Ws%@77COuh(_qAS#Tsii4{SHRj^HZ0U1UP@Y7B}FHylj(2)azzHgC;JNO_FI{>ueH%TL= zVp3J47u}u3a<1!>$e|dRAJB8FetM$;D&DEb~3^bvV0`yXd=?sXDzjDN=7tcE&(KB!jQGfT!NWfMxs*BcA^xL z2!v-z4?Z;XLRhOLS!h3#X+WYeQ4$j3DP_pGtU^*xyw92Kh4yGFST&aoy%Yh$qLJ&E@e)* zG>oo&Wf;Aj6|N{0t4k(jWfHJ7Rj3->lI2&_Pi2N?OS1hJJz?}_Lv+0#J@p*wpUdNi zXaSA2*$~Fdg$oB%7T%{Zx=7I>o=ZdoUj!;yLVUPha#?nlG)M)+GRi*4o*TLalzl*H z>N%j>qwL=vrKxWlrOcfc1g7JsF4PTqcn})80l~k{84%0 z)m9avjMtB@p?4htcW42DWU(NbN83be9%Gz#b0xPf1m^L2v@1^?v%5XEk`$-JSr3XNM{F*RlD5Q6ko zN8`QF;nP^QjUb+6;>pO5Mr9W!vF`~x8jlkumJ-1#^m4iSMF){L7tCh?T!S*Bv9rqh z4b@t$J;xuT34)HG3Cip!1w33JD9o6`g=g8q8>VW-!sFXnc!D=z=r9tJV&@5chRX!w zffq8uqid2`i2Yms?t)GM*92(pl7kBLhy(Nd_FS$$hpSFWc>!7H@zcA|tHzuqc*BKb zIsp}M6@d#nUR0n{_7Z7|YN@i0k3-WfeUl9YH1x(S5jKe7Q*HK+ywp08%bYztuWIl8 z^zR2hhhOvuFTVQm%ZJ)GjX!o8jo<$K;n(k9eE0Y7^;)g=PaU^B=yVP`*OaqK1k5_n z7YjQ~4%|^kQ2vyO4u*Tj&~*bIhTbuZ`9p_K2OoM{Z<~(Mb*XXGW(GTMANCHNcCR~j z+wPHb)IW4sujlj*=C`f=2Om9p_~hPs^X1!(-Ns+_<}dZ#Z|gO9Z#J8|O?;^}YrC~t n17F|T0aNkQ+BuN_F! diff --git a/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro b/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m0.avro deleted file mode 100644 index 4f2f30176b7c9b4dfc8f517b3ffa097caf7e1a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@0?RrP=>BoL<+8u`E}Y5b8kADlqD6)QnmcDoW%623+>uMp9;2EI{&tMsZ(1jO)Rv6rNJt_gNC7Y)kM3^2AIzx5x{0YBpe^b!>e1RdEY==%nVxrYw|u>(MBev>p3 zD#mq1X4&0&EEl>yjXjEiNuE4qP05g^%qM_Ej2W_4nM*Kpt4LJpxn7(> z5`pkM>A{DVSqf{FBn$1QG7U&PB1%F^0;LQYS5-*rY4A03gUB6D1*_+>WtQVe706^CkKI%bu{hvjMt3j4uL@hG+8l zA;yFz#%uuN)xw1XDhofO3A#wpA%Ras41WkzvV{2XgY>fME@_Yoh-H*LkUcka3n+Vl z(l!e~w@2B#Jxbf$HcFX04G2sx%zUUD^6(%u^2sSZt+K^q#a##3Diyjn2W(pi*xnql zZEXP9-X37&MI0cVLIK4^*2gj?EL=|rsUqkOY1n$rR0?BegvX8cj);`8K?G#FGT?p*s^=Ma~I(BD!Y$YoqSydrs zN%DG#TRoU;tftNzR8#wZs_9CI&KAq5WVH$+9IEbw35tzQ5hU}5-YGS1Ma49ftpfK7eE(Oj^QP2d`o8;zY+ z-fyVZYVA4x7)=m#2u)CKMeF6zO3Dk!I*&iN2fb>-S&BDY zIHprj0ap>YpyNdaI^`ghrl^)G@Ax=0-O@Mtz=TG@h^4{>F??#w-j$bHFZP+YkLQ*4 zkNf+pKjWuAeDLjyFYmqo)8G2bJG%be_y4~5<&Wn-pJjZ2M<4b^u?3=XZp)`^gaEzo!uXI_P*KC;9cK^2fk>#+McG#*SB>r b6+gTCzkZ@=d-}&XVa2GX>-#XRzU}`2nbS?T diff --git a/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro b/warehouse/test_ns.db/target/metadata/2c3d4b74-8597-4a4c-8ae7-6a054ad2dc7d-m1.avro deleted file mode 100644 index eedaf2aaab787e2a0272b90ae239c96618ea7138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`K&2Jk;6u|AR73F{;q#`7w9!7gacDx@>>=1|SgBtTLjBtV&pEG>SOmJ$OdD=!e;kAyyNlhTTaCh0U568u7_ zT4pYnUFcC31SnRzWCSlBo6sx}`jFsHRgvH?7P-ucvT)3J%^G`Ku@gUFPP$QcZ(G?& z+(893W38pYo4R1(#F`+}F4-o%fDB_7`01yhm#APM=*S^K-?vH3UHnHNb^vJ2Z<0nr z#k8)-D7!n4}KhRy33%1M^yDOQB(_-4yAu zqU**Uz@W_2fSZPe+sO$(%JY$+qlw6pfVI`ODH+q0c?6J%DMQvOa|vc{6^Tkc$Bi>c zA`qS@J^0WxN@1;%WU2j3rU8j3L`g`AuaqIx|BQN z(lq6tS*_9l}o_VRHJJ4E0$l;Ad?xIFUj{`_Jlc@kI?l&{LFW0a4wG@ zqK7om=OY-e7A_o6S@;D_&_#+4@jW79_(PzQCB%p4rlwzdas znOgw1b_W=F5y=Z;7%No8oQOsnVcPv&MyovlnD)u`FzrFb`Wq#_eX>iK*tuXmfVfmt zi>j?EL=|rkUqkOY2JX-T0?BegvW|9%);h*G?H5XJT?nk>&1l!2I#z#oY$YoqSydrs zN%CfhJ3W{ztfux`R8#AJs_9yY_72ObWVH?=9I8&p1jRuv9o8hR^i*d-782#vXI`@w{sM zZka#mKWlft|Da*L`ndN}dwHj&y?XK6zrXzb$9ErU@HGBu;+}`y?qTa6~J_Kfs0eW@5*7vZ2kUs-nqc=Djz+_c3oi8Gc^fe=Byz zY(ih|Jk!K9Vp?B|1y3BIHMEh(d^gtmm(MiM)%r$53+Mz_gxqD^hPg(%#}9)m_{P~6 ziN_f%1{rMDP#ewCMwbe<*gF5VdaG61DoxC^f~DRny@Q6PPSr%a^#+*F0^z}VcvBt< z=J8yE*@K93;R!DcnsLOO`sF|?&cMo={$LdH2^Gy7#$#AoGxwb^5Fm07jHmC>8y+4g zh2MOTVk7{=0Z>|lWFQHUR0s)BrXq>6U!|o)hsDYZMDqfn%^D=PBcM?{4uu3i7pk@y zi*1)$koZ1|l`a{;z-1$v_(JOw{HZ7s{KW!?*+DWHGG4OA+Enbw^O+s5m3_FWY$R@@ zf|9Z3Lf~CpFn3}}kYVL)lU_iEp#%K16VOXkFc5TPpP=s>B;*c$5QrTBTJoEu5m7NN zE7J4sPGdRK^>OG>3`}zI;VkQG!3|+n|Pd*@Z&Te2|AjHB=T899h;INjhRaTi5N3vtumKj<`$8t)U%y1fg}Rq zY0`ra4LujuDoGaF&tw{qa72`Zn0QJVGA^o+)MM{UW_y7>oC;RXWkb)$kt&ecG0#Im zeS$Iw%0M+rMj<_&&`&0TjVqR=cfss=t;mvo5&4vJI>n=Vf=!^-K^;j8%c3r&PPjIV zj(uYo-Ha9P$Q7$=CS|1(ur!sZ8l8gWH`GsLhNfH6^XENbbY}x}y&qnA4)xFF^+U7? zjkMVS=8J_3CsYlAKpUmIt1>}0s_f=K{AiFiPmgmoOUuL_bvoxdp+8fw~pD_9$U$ZNLEFNNff;r z;#Myv6RWB98r9VNpK7`iqP4|xDp{?92$!loVS-|#lLg7Vp|^64TUIeOW$OTf^i@~m zap3T2B-=(1Pg3z@=!e6i3**T5gdL7XF%wIPVC8zbO#PyR$eIi0vk5$dQlqi6O8X7f zTCKgupP~tZ4xtH3?I;91JRm5nn8Jf+*}^-fYRSU({VY7e7cg`fF-frVgg(P%g7JwL zFv7!Il3IxUTQ+tlPR-eOFx1@Z4tn>KkL+Di_&SHGw!ZjU( z3V4dZ105eK&?$SdG)1*kX~)N*>6X4pCnhxTMl2RKh~ZOh_O5)?I-$#)J-n|fUrm4g z>xZwOfB)i*i_end=6AJUc51cXe*fd2pI`j@{HJQAQu(`zNA9;;2d!Jm**FAdE$EAd z9mEIjuq7zJVxooN-qH=-XzB3Tf`R&&PwBee)SISr=(H_Ho3vvcHV;SLc5~Pd6luk2PTH5|UZ j1E%6%eeeC#N@ch9k({loNtk`}5zan@<+VMSET8*7Ni9nQ diff --git a/warehouse/test_ns.db/target/metadata/30f15f72-e09c-4a97-9812-0ee2b5b7b597-m0.avro b/warehouse/test_ns.db/target/metadata/30f15f72-e09c-4a97-9812-0ee2b5b7b597-m0.avro deleted file mode 100644 index 2318470eee2e279b3c0a29fc1d921b00a723b26d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u^@-sw#vkq(z(-Y2^!OOzn-{b zHlZ(eo@!zmGi{(Hf~T&~TH45GftP55^QW5cX#=CBg>-@|BJMG6!(1!d6GY)-_{Q01 zsm~cK1{rMDQX9?6Mvn@%*gF5VdaG60DoxC_f~Ec{y~CEKPSr-c^%j`VLgB-Ccv~I{ z=J8y^+3lEe;R``S1}1s*;2yd1#h9EtBr?iaIWDApWz>>}LS$fG%WTOtY;>ADJ(hG` z+XEPsSsHLdH}N`iSehzSjc&>EOB$pyL$fW}`HP+~db1(AK8POsE)CA)^+U7? zjkVbj=F5c(CsY=GL}PT3qCsALK8;rYo$*_J$cso`5W`rZO6G(#Tnp3cZZle~9>BEvo5QqvCF`%1_*Q?LFtKyNdH`{$sOD8$ zRfsa)Ai9Fy)dB9%0s_fmK{AiFiPk*EIPK<2Zd?e=c#?@HP7pa|7bbDw3p*N(5+;@s!7B7}x%x#1kvA7CU=w%-WkzFXmGv8{ zwOV_RKSUD*b)X5#>?j31JRm5nn8Jf+*}`k4YQ@6in^|~*FJR~}5|U!)34Mmg1mhDw zWQ0doB(o6vw|wk@P65vZXzr4O3iOBr^ZfN(u0DsWZb|t7S?BS4??JB`bC%!>7q009 zRKQaN9_aW`flk>^q$#SU$~ry{O}F$-HZh^0KVpfnK@6X2vp40V){Q*o?%{n^`|0`H zzdifl)7O6Zcjr(4)^}et{@7_WzWnF!AAkPl`(MAR*J`!D>UiWqr*qJ`qMVH*VAg@Y zSlD55;5i*Z`C}$J815azF!YYD8wPynddGlK{!MS|ZA%{+N29LUW_sUkAJTre-R~J@ zTW8F4j-0M@)bAe5Ut9b4?>zYA(cQD=i(8G|#`Ajfm-_Cv^%{(u&E{?s2eoExw^nQ5 k@C`H-|C)Qx-mlem8+YVvLruc$?{fBCSl-x!$?CcP15Thz0RR91 diff --git a/warehouse/test_ns.db/target/metadata/32e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro b/warehouse/test_ns.db/target/metadata/32e4b741-ef48-447b-80e3-3a0b9cb05c3b-m0.avro deleted file mode 100644 index 23abcc87a41fb10c46ba8e8136da3c982737cf9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u=#CRrP=>BoGo(K_j1&#vj?{gVRd1VkIccZueA0*4Uo3-a57!k6VQ$ zSB~&MaN@v!05=Y-I3Om8HzzIUgF;H!xE-4@LiY+9V4rVwz@`iICuDLe(;B zzU=q%_`uIN0lh>813^a)2>QNB67J)JK6f$hfLPQqRIKm>b5fHxaC!%a*wqN2)-U+dNAI zjR?vhC)eP3O0sX2X&+W(1S(lVd<0>3Rdts%NCm_)%09@R8M+0OeL!iO zC7`>b?B5-wZEhQ-%$+6#rXS@2)D3xf5E=*Ml%7`E;<4hc18gl6y4MG6TL{?R9I$O| z0NCChVB|$4FNk5RP!)4x8n1=vbhjC;P7h!@{mo%Iy^8g>N_?lkO_pXT?BB|906GO+6QH@v4r|a84$RBjbG7<(R-Kaa0v>HtO_Role(l^-Sip z9BO)f-!t#~j(0e_ZS6mL@c6T*$7lMBxAa~8x5mzQjoq&r8jSTFc;Gl|N--BuOeg6l)#7hbQ diff --git a/warehouse/test_ns.db/target/metadata/330bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro b/warehouse/test_ns.db/target/metadata/330bf2a8-7467-4ab1-879b-56ef0a34a4ca-m0.avro deleted file mode 100644 index c634e2e572831ef129e9b8f4c209fb86e489fc77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&2QsG6u^^gRP}%=BoN}TD~)_k8h^C;;{WfE3}q2_F3R1+VJeT=6l-EXlWsx;*5xUjN35Q%GLx?cn;q< zdzSi~!DNuZ<}J0*tSt1XV9TY8Z|j#@m8H_eTq{`WuhTnfX=+z(v|De1`79JZ?1#7I zreGZRHJaazDHp!*qp+RC%x#{HwDJhdZ0L8#5uZ}gzGOUssSR__jY0t;cfol24!z{j zzEb$*dl^OoFkAqowMY(<07-?A0A(uDB>z=fN_3d4yg)QR6xzH+3M)byCzD7>@C%`8 znXz1UriEz`pjhdW5xjV8Ow&MULxMk*MS{Or=rTJ@rw-#4YpmOf9s2>ZlZ~2+-kYVHkKkW$g5)}*t9XTZE`xc3~iw^>^13)W&lQd!~ zCRIgx(cM`r=ejpOahjs3RR<5viy<;sm#!9Nw)u@Cyf4lgsu;wbKj-GsXTs& zHl?vPAHjIJaN&T;!jEZ;E>d)e?-3Ef9|DyuAwE1mxhT6!8l(bZ73BbAFAUuR$^oD> z^&HU6Q4Vg7($u$&Qszzz0@Dpr59)?IJO~Xva!ilQZ1GsJHvu*Zh3@qMn+5_lZx7fs zZUNZb9$@4}Brk|ztWYI$LK<#_Y4x@ltyUjkT7%oewE89Mua)@LV4E|&huawRt|1ZH$)cgR3XNM{F*RlD2!ixg zN8^Lg<+E6}jUb+6;)xSPPT7S?9QeYH#^Z#El|--#y^z~*@R(qH z>W7T*=!#?(V*i%Ed!SRmH36EtWWNGE;=nw=J(sJ`!MamYUO+Z^{NV@CtHzuqc*BKb zIsp}M6@d#nUR0n{_7iD}YN@i0k3-WfeUlALY3PqxB5V-DXWIO2d8u_HkGZ>eUe)gX zeedLpXTz^Q|M%UW#c%)A8^7FXHeUSs;+x;U|L)sg>katS{;K1qhn>!T=ZbPRiGW%M zI%8pn$-d`w1m)*UbTHsMx^5U9_}Af~!vmj&4nz29>+QaCXpDRMLA&pcd+h_y>bCob zp4%Qc)H*PouG>9y_ZRoAy_5ToK7I1wwE6O_#!lmpdh>_+&R6vsyf>T8ohH82nzfx; lt%0v^)@$n1-2L&xT5YFsUye5N(Vyh#`!Kz+3xn02{|8!1OeX*U diff --git a/warehouse/test_ns.db/target/metadata/335d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro b/warehouse/test_ns.db/target/metadata/335d413f-b61d-4446-a8b3-3b77c0e9d78b-m0.avro deleted file mode 100644 index cf7ea9f63dc81eb0130ffa136d83899c7107e73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`Ky>Ht_6u>1}Fgz4SffgN#3|FEfW%0wdJ_-a#&=?KSx@qD}hCrOilf{}Mnd8xh z8t7jrI(2TlX35k&LA&NJ=+HUnpU|Q2-H8-QDXOiA5CrOU_ujkT`?z=C4!^JOe~`Fi zHlc5Ko@-(nGp(;Bf~T&~bZz9bz)Q6L`E$+pw7#ipA)VlihJq$Y3*FEwm~NJu28@>HOE~rFLbhG%?o-minvo4s=cJs)cqNI+)Kw;lqA-OKu9r zabJVkotSdr3qJ~5NzB~l`9Ld=z|4kmXB6=X6|F1A6PVht_T4BHAaW0kr=QR(9vvu! zKYo#6Bmlz&P?}D1kOW97gajy4ktX@S(o$l;WaR~-`JvEeIw`COX`GBBA;Hgus%7S4 z*|`>`L4abVO9t@bu@OxJq4f#=RTc^UVxh~NFr5q;uUKPmDt6=t%t_YDKHO9`5_eER z#aL@0@TM-9JFz0jvN zjH0`OirE<8D*>-7gD}5YDq&OGBB@Yw&WT%+D)DwOS*3C z0SwA44Y+AoxSfpfqbwf@I+}A{DlQ3z|5Bn$1QG7U&HB1%F+e5DK-msLpWiT?w0{LmRr1*_(=X%yo~707&>XOW-* zK^X*Ppc*Bkl%8%Bq?6FW8OzeUVD`LLP%09Rkx0QV;5eJUj>uJ#tD<%WUyjan=Dg3x)3e0b3>lwl)WBnHvDM zwg(t_5y=Z;7%NoCoREfVVcMN-MyuTgn09Y-n0B{h{f!de?rjq$b}m>CATAZvylSfo zQN|lY*U-BTfjhK-K(bhntfOtBwT>}PJGqiu7Xs^eJ=&G0j@8*7Tgi$@R%M839KRdl zRu3i%tEv4S)ztc*YPu4ly~T1WS*?NyhpIDSf?}hS2g$slw+oG1UNJRg>i~lET}R`C z(B;!uwv8a3Wa7y%h=yesCUM{kCmM|sCYBPxF7$G_`b7tkHy12m6SxLtMq_7{^&6_S zT6>N^K@$WWLKBqPQ3`mtKv0-5g$vKJg*QyqiiO9wv+x9Oz|dhNB*o4X`V5Z=#wUKr z2#>BwW+C=(`MU=?1zZ!Lxl0Zz&?64a^V@T|`W&u0CFKQVoyQ-33B78}S%NoQIHnU& z0ap>YpyNdaI%PkRrl^)G>-ab{-O@MNz=VeWh$X@SF?_1cK9-kSH}aUfhv!x8vz_1Q zr=S1+vh(WM#jpC^*Nrzj&BkA^-n@SC^NW9fsW;%M{Zq$H_uK7*_BG{f909d9bjHF7 zlLK$q7L;Ew(Z+yp8-`)F4HLdhc;uTJf^VZ`w2nOQ&_3?CEvxGtwGLfowJ7V+*3hLk zWnRzfnB9ZGy~p1@eQ?%%`%z=J@prxXvcCIMy$0{iW^=cRFSTZEw^nQ5>xcE4 edYXHGd{wLMHtxyMMn3wd9K8?I8+$NV-T8mwX-R(o diff --git a/warehouse/test_ns.db/target/metadata/3624e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro b/warehouse/test_ns.db/target/metadata/3624e0e2-59a6-472f-93fb-8933a1f200bf-m0.avro deleted file mode 100644 index a0a2b2da5e2688d986e3b07075d341b4cad6ed8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u=#CRrP=>BoL=X8u^?w{^&LzoK|8hR$@!p?VhU08r$Q>)Uk~{ZWUHJ zAt7<$%8DDDK>P!U6WUXc`~zH(K%DpscyA_lY$qGqY^o}nOlIDD^Lroj<`d_$*8W?W zJ7yF5_q`VypC(KjY8g*+muqd!4_N4B+VK2^7I@mwXloIj;EFi)SZc#uyVw)P(FJ@< z+2?tXGFS{U*sLu#nvIPfSZW1JgH?J*ZB3r4gLdm}FrP&{fb*ms zaVVI_bB$*A6PogX2XWNN66WrlkF@#>tW@>;ew3k^o7GkN{=M^Q`<;SW0wQEWJRqAmZArO)5Jgnq=dc3-EKH za+|T(cCJNv7@}C=k`W9%=F>dn+K}K+b&=pN7P-uh@`=OJhBelvV*MawcD7db;ij^Y zxQz-L#+nO(w{^kXi48%9Rk2NY0U5?F@Y9Y#FOk7O(2+xezHgH_b@78h>;TY)-vo_> z@^MpXny&6ZdK$gcm zi#ZJm${;8M)kqn&^mOAepF}pUSeD)gv*)#Qdo^ zOT*~dSBB9qS>cXKvASeJRv`gPQ-i9}t66?U!(3!&v86bF)e}a4HbU2j@kQX$@Jw7k zM4Qk=n~h+;Ubt{VX5kZ>po=6O5_p8i@Q*+RONb9I$S&*d5(deDSVlPj*>gj;fN}sR zO}zwkca(#>qcrtxqZGN*hQM^g+=IFyE)PN@kDSnxI$OL}>~(;RN}+pmz@~wK&CLOu z#s+}R?Eyw!MDT(b#tKz4C!*0>m{xC_(Q5SprZw0crq!=mf2+i|2HS**oeS0jh)YSe ztlF|d)bWP#HT13yaEBHUNLCAy`Cyx9%_EG{Ua92Hg}^*ok9Os)WA?VkR;eDn2 za{BLIfBgB|llQgnzWjdg+n4IiJyrenr&q6D{`~b1j-n|4wD82kZug*jO;a|G0a+K? zVs1y-f#-BNO)nVlVzhU4-7va_Vdz~0hVT_Wi-F$JJJykT$aH3Q9t`MF=dfq`oq^>$ zo&LbGsNtKs?)V4u$JYMo!>6AHt_6u@c5Fgz4S(H5Cf;J~SaWbwncJ~}06j0R}jG;tk9)c5X0ilh|PRwM`nb-H`+-S2(eyRQe&w)Q?q zy%8JJzi&M^#3W%x&qxK&JYh79VZcH^HF{^yjleg0R>O$s7-z)XXWWIcM!qJDqjUJh z*|%B18B7KlY}!x@?b<@03N~Ll`?Y+jQ(G!cEVP29!7{!5hM{)VM7zxfn9m{+zvoLb{K@rO;^f3SXVX@ zcTqvjSbHw;x-OVGu_nlJO14QaAj8-Le#SBAB`O#QI5ki|An zV?jfLG6>2*HA+S$J-s;0#*vFN7NvK<>{+cSl71fflyf@4tp|dQq1Hhi$qUQ8F6BwSishFy%w&eop9dZdPv!AL zj4@4&X&=U`g$oB%7Cxj2x=7I>flovXUj!;yLVWl^dQo+kG)M)+BFZkvo*B9UlwCk+ zn+2eoqwL-srEP8+rOcfM1f~~eKGY3)cn})-$X z)m9aviZ_g}pm!YrcW42DWVs;OhnqxeA7Pxf3ne!$1oqKtv`bGNyS+KKk`t;#YU$Hl37FVlp439Vj9ZUJ_PBz zj>h|u$0vzw8$mqD#gjo852`LqlQ0l&JRGJ>EF^+c>g5Xc^A4hDE?CIMa1F|h#?C75 zH&ko2@*IDHCI~u!CMdU~67X<=pfF@#l{&nxZw zmw!zze|`1h^+&fqef#pyhx(gay8g%S|GxV9hu1%SrfJ$gTe#z1tF_;{qMVIlK-Pk` zSh!KT?+;pn@^dCy80{_7GOd;gAADFX%Yr97k?ZueA0*4Umj-a57!k6VRR zB=`adapD6Y!ErwV5^&vbfW&!)gv5;-@6E)H?PNonP1HvAWahm$zxQX}eC|B2@4b__ zV>Y3$@4V2&G-ldBO9W3{p|!M;&jK&e2Ins{-_r(0OAF})XGGj%+=j7MwkC+e3wYz~ z%hcx#CW8z%YpI21WuZp}TP&TwtzK$XmP!+ItzfCYO7F0xsa>_vZoLKOvrzc3AKsRm zf^po}aCSeYT=>F|!gdlfw|PF)$|Eqdq2C`xd_qP0itz-dHq1RY3I&MV1>@-l^omFO zO5wL3Wf%#-Z~>IoA~{F`Bo#sel&MIQ{8woy(P6Uk0@3_XXtNe6tO#kGj3Xhz&xNXG z#$wsI7N$XfVx>!l@Zhl#O#`6~2>w(S3I1ZC%j__nIE+`Uu{ISu@&jfkYh`ygm5s!0 zR8TS2TnN0W3+7I&2r{gKZPE+KFmi#Pb_{xn3I>9X91!$x*kU^#lR%bo;)Jgz8I6^r$j~>E60VDuZ&vKP>2l7Ynd&%hK+WUr^k}6 z8+!nQGD`z)=q7F_BYc|WBSA+Kk;VaQsclo@(1dvekccru)+%!eW^NgYN*quVzwXJ&Q!2!E*p9=j#Ponw|N!` z8W5C0PzI_|GD_*`MnO6WZJeV`Z#2n{`QLQl$U@mR6f0X7PS?(G4a1_CxW2W%P} z05-P=7hHGJ3N85~6s|PTx{^l^PUdj3!CBD_)CQR&HupU5MDyn(a zRu!U*H;AsGcXfa}w17aeSdh$vZK5>~F;0(iCATgF=HYs@D^DHsXnSlWD~9l^M9)8N{H4L%c*3w3L+e;_Jj$FjZPjU^M>9kG;Vpt)Re752+}tl zjSoYYPh;6Of_RdNCr%JKWfvxK;0rq%jS?o762U6;a=H3N2az`yEMOD324zNLXO;CE zsLI0a@qqN1s5i8grK54Hu5- z1XRFP1TN@!QGrg`PoycTrOG-!4o$c8O*Sy0p+91Yut5x;YO{OtQtL(@b9eE)s{Ql+ z)xDSh{_x@5cTZ0rfAfdicy*`Q`1$)^fBO2>FMt17Z@{PaR~s4PA#X!|3R`ZgdQMgnxX~^|s#b)BZu%^1AHWf;lf|R1qq2O;=q|d05~AA+9Q7e@6E)H?PNonO;lBr$;^9ie(z)6d@}yLe)xLg zOxTn@-+QKsSC4gH=M@hKJUYsM2;+At5DC=?*_0F0+^(`z0b zDTUvBkYOYM!vRoQi{u~)kW>f>P^KbH@?WK;M2E%73q#T9^g_ij^)I!N6r6O#`6~3I0?T3I1ZC!|X7fjv235V{I$e^8;ol8)bL5m5s!0 zR8TS2TnfCc3l>hS2r{gKZPE+KFmiyOb_#ll3I>9X91`?>i$vVPe*|I&fL8n_X~a}a zs*3cYyR%r%b$uK;6a$kyd2~i@d@&)XkBN*jR*nlPUm3Ncp%59E*D_mj4O^WiPmdK{ zxAp)AWtIlq&`mr}M)+Ztj|3e}L>dRIrH)O>m?q36fJ96fvR0W(FmuaDRO;DIltL1L z@GR-UhlXAVYn3ER?dLKLNaPVEAtAm}hK$Q9B=yAqlG%P}k7t5abJ@^~aij`le$0zV z(14%}f-+Ezl2J-eCkoPOXyb}i>3uMJQ7iJKUq(LVoX+s*zF!I zqi0_mMn7kTI|{|>ib+|S1T0Mzsz$G5`85qvnW5R1?EFPf82$MOT^~eGeTN1Y^7g%c_ZAJ7dEPnW_~FkMCyTDZYTA!$?SqohS4eE)$GT z{g4qJ-H^;e?BDXS3pxcn6QH?Ejw;Y24$Sk{bGiC-*WHrx0kX;CXD86B#+)Vi!i8%( z0Tu8Rfd@K1RG?G#6KRTSsj`lbL(?sNlTA!%=zA;?Hi+RfZT^;g)H;#NoCCbCYJZJ? z`tkSo{&s%->Yc0e&kj!-zwI>|U;p#{zrVcr`Ooj_wOZ{(9gjThbdEYVl(R_$%sS8) z3p-4X+;K-x{*;LhhI_}*b-knOh5;i(jo^y`Q}Ai)ZOb|C4P4J_vw>^2yS=W}?mGjo z-8EpRcg$R~-#uEqwhkYD_~_Fo_b-~y-)!tR{-`&9sPBJUufe$4Z0emA9Dgd$AhPL?u%=WJxuXJDmn-W?}=N=4_A@eG#g_P(FQ0z~eC@$_|i$&&-6 z@awk;VkQA`Q4@+IXCT@WUb>2|AjHJdIde9h(x5W-K6pL`)d6R+&pMbL&V{>bZWBLlS}T zBI&`0mRSjFl_X2;Co&C4GA2qwMna_w8P`=v>RI?XbHmv6W`Z?y*)pqfqzYtt%+o~B zh@cFDGEj|@QAxURq zni}&F%-0JSPN*#WfTrjoMTdj|5efVuP{|VFBM7sLy1S%7Dj-%-4nX$8&@G@G07}~| z0o@+u;PxnObK59o?zAB={U{HhZph1n&^RC`^rX%fuNC(?z*eQuy*OaoLcsRsfNg67 z!1ne4BQGL(K@4Mss+kkh_*$4wf1ApSPvjB71gq8 zs|r!a8zooJyL!MKT0kIKElBp^HqqMmFi!iWl3N!7``-0v*WNmIe|u~tDk_ikt5F}{GI!^lXEohS4e0TYZ* z!>;?BB|906GOc6QH@v4jRxC4$RBfbG`cX*4>iw0dk$kAG`~_YRXxLFI>2$ zGf)9f5qO~ELj^kJFq5XJma6FZI5geTH^s!1#^IP{!UZvWX3Srck6J$on7@bjmDc*| z&F|dbcR&8|?AveN_~Mh7^k;W;{qLXu`s0V+e)-eWH0|FOo_N^p9(1oLXOjewb)hX5 zZk!ziURO|l&O{fZy=$75iC- ZcJ_XHPt$hwcW}X)SxwjXU|I9n{{dd;NVEU| diff --git a/warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro b/warehouse/test_ns.db/target/metadata/3f50de00-debc-4b44-ac41-3f10af7e59a7-m1.avro deleted file mode 100644 index aa9d3d6312824a5f2f2040cfe6475e1d11d952e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`Ky>BB$6u@nt6;hxG350}n#b|4P>_;w+O?8NiI0?dWm#ZRcHM={G_p)Ei&L)_X zdx{gHq@<;z;XiK(GX|E++*B^u};1wh@%U5~y2-!);|FaT^uX zj5U`6Z|Z`D6KjGDt7Mz>0y2zU;HRB{UZR45pd&{FecvH5ckzor>;TZ3-z1HMifLVu zUUqjL%Z08_W0zuJlBbU!l51Z~$;lHUql{JKLdsW0t!OAk2IjTQmO{f;yD8FRMc0iz zfI*q30XK9Lx04fol; zltEAis!=j3>FLHn7DhJCSe1SZW-n?*k@U;Rr<~InZrv9wgjxr6Brhz>x|BQN(l7@0 zm0=tgtZ+rCSY0wHE0=(!sYcZpR4l)uK_)XaUy|>?>`j1;QlWcuz@~wK&Ful3#uk9h z-2p~kMDl_d#tKz2C!*0tnATvI(P|w7Ol!D3OzXH}{f!de8txJ%b}m>CATAZvqH3!O zQNbF74Hz#~hd!x94j0Ib3&2$_vOQk3akvdewxp6mPh2OsAj% zt|D+j$BPPd%6=+MQ7u*8@o{LnrEl_qkVgK5rNRa=e5TFclb2dI_L#em=T)QeqW9L% z_P_H#e*Y_tKKQEJ`t44;_436xfB*TzkKbD@_%!}$;+{wSey@K`Ih)1+tq+Z{u%oo+ zIekI-1rvRY_r9SUdSBNK1D}jOyx|KD!KVvIFP=U)YrlH8wby#tZ2#2U`>xr5=XSfj*T#oNyRp}3wD9qrW@W{{RkpN~Hh* diff --git a/warehouse/test_ns.db/target/metadata/406b5ff2-453b-431e-9cde-884ceff64876-m0.avro b/warehouse/test_ns.db/target/metadata/406b5ff2-453b-431e-9cde-884ceff64876-m0.avro deleted file mode 100644 index 37cc5d60d02ee532e1ff7a4b5f43b178c28bc2be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u=#~sw#vkBtFDpg+@l4NE&~n`Qn72l`275cDtu4vL^PpF?DQXk6VRR zt{mAb{{RyI1JZJ2j~qB~=7mvXjTx_Dc^)T%8NCKg)3Qh%M^QB#wWW6_yemCQC06%@4UYZ<5lAkjCjG;sX3as9a_& zmtAOK76d3(xMTzmF7s#>aBWENr>aQs7YiL`huL(@lA1NveZ_iy!0dFR?9P2?Ti$BM37 zdjNwnPlLqJP25gS_+g%p1RYIy76+^;w@t~IrpzUPgijce)_|K@x%R zJn6xQhF%J5nIuc?XCe(qW8|oK2zDK^@5p%d#%zPPj6R zo_%c?{el&)C>5(KCS>Ijur$@E8oi3;*EGmPhUQE1{g*vq^yedVeGpyx4h_!5@k6vJ zjkWm*#;b)32V@q0PGfYDq(gj{@Cg19s9*{4;ri)S)m_3M84#-|2OxW4=oU~80HvuH zfbNcRaCelZzHO8ucbX8GPLR1!H^kvVXy}qNdRAqN$BMlPuu&>>uMXHW5U_cFz@~8z zz~=SHAzE83r-Icwh;XRdQ^qMaIz^By8hWeLxD^#sleUf^NMCj| z9*0gci$&WA;z=%^jDu)gbzvF@KDQ&!OBr8D1gq4`73!BAMA2NZfKA~VlpBqmRo-vN z)@tK9{uoW*bPP>UZbv2H;Q~Qn#tbezs}|leRcjV@?`Gi%-hiRQNJ)mBC-fOE<1Cr_ zAtOn2LvjnTe=D9{(8=MN0L@)`Sc4uVz`VFUSF2BF-6<(9Ae%gX`YH6Pal%r(;leSU zf(p2bzy%#ID$ptWsW3&hRC&jjK+`RJlMhU3=zA>XHi$`P+WakXsdXZkIs15CDX(3> z{mZ-mzJK%lgWv!8q4D9*>Wdv!{rjh9e>{Ko+xN$cqWsms9S_^>!}bkL*dzjEZD@F%Y;-U5cs28M?E zhK2@)`ap((zM+AE0gz*$52OtYbPaS(jFOEKjZKntjm*uAbWKu>6Ll>tEE07M5{)eq T6Ae<#l8nqJ?-xiDK(`72P@*nY delta 131 zcmdn0v{h+?u7I4=N73hw{;QAg3(s=MRet%M=@c^)Q{VYV_g5T#|7+1?ZvjJRLjwbS zLqkI-VPIeYG;F?x~8bi9Kmd9ovk@t->ne zfV9W`BRH)DN5lHoi5=U?hBlk3ji!^C_ul;8$GrJ+`1Q`gyQw#3 z6Z+S^XNH(2%;+1b;F%|khA|3Q=%+^i;+YZnM&D`}5uMCyeSU_ z^LVbo?0!PI2t*J^%`{=&?!~~U&cI6Dyg!Qhgo@@h<0&lF?E^241c=-RN>5>5qd^Vz4D2zVAuc{)!Uo7&N8)cIr<27rXO~sCakh$qv+3ihbBXJiM z)Qq(k0&nYrxf5%GET?3f^a3)BJ>X}YfL@}4fuJM%1byEiG57F;KAc?(|}v1jmOCeKg#owpreV%l8`mju_+nSl=%dZh%rOfDsu^DZWW12J=cpfNForP zCq4MkGD~5tl4PO%Or`;eM?^_TNuZP=Jhw)|L(ePYeKg5{O z#F!0WzFN3&LS^9>G(i_BIwbIkh~XE3N|q2Gevn>O-6aiD0kMqo7-Y{4-2%#EKxvx= zpu3|yzB@|W+%`&?I}Hd-FU)+X8}jlXH1f$AJ*%?CYsFm$*eVsew+C!n2-w~nux)Js z*xnvs}mQt%d1yw;8QY4`4dSo5OT^73*)6_|EY*VPfZk^#I~hQ7x*r zst{GYVSEF<>kzm@3kW331<5|zCR)3LaoR1E+_@0go%Lu}-a2-7du$~uB3V@-W=Zm9 zh+DmwY^|eAl!H~N|{(n1gF%?73voqMA2NZkWJtjlpBqmRo-u? z)@toN{sc`BbO=pQZbv2H;Q>Km#S|Vq%NE`;RcjV@?q=Z$zJQ^_NJ)mBC-fOU6O2!S zh!Gy&klaG---@vhIt4rvpt(yAYtUm3%!}7^wfeMI-IDSFvd-hDpF*#iaF*f=7q00P zRKQaN9_aW`flfI{r75bV$~!&|O}F$-J~5$DFk-22K@6W7vk&B>){A}S?c;r=z4PZM zzx;Og;`;~R{nOG;fBsv4bx+rS`r+k|zdnEcuh2B@^$wo6-)bGUZYXEt7?8D~Ef#K+ z9{R(Up!|}F7Dju^G%d4bS@OeFBg=#V{F!FcY_>a2$Dz(q)3bYCv)yhVHR=Z~#}M;|@@>gmIC{nh*Wp8m(q?#rFM=Q|pV^^9QXhnkPy{=2Y7ELc5Ejb+H9<Dw8~ZHq67Bfnh30$OvC+~(I>i|g_ZYWftd*?^qVN*F zIQu;HIfKa{gUwrNp;=kzQNfl=7hmg_T9u{J#9S*_>aWu~YH4a$ZM0i&f%z;HKJ16L z<)&a9_cfZ|k0}?v@T0Ju#LR78jI{Cy%xviQ#}S`W(Y|6lfvFAiz>PuyBKN^~`X0UF zQAa8K=KTyK0T?cT(pn@3Nr0q6NPsdGX_EgcEhRckR$d^Q9|~>WB83$pjgv_vB>06; zwai#9yU@Zk2vDqa$p~INHl}GHv}1xll|_QTSm-i4Os5Xx6>F?*#g6@e*~v!Py=`S9 zaT^s>j5U`6Z|j1E6DxuYt6-b-0y2zT;HRB{UZR45pd*h7`o2XX?&3cJu>(LWev>p} zDkfD$dePlkEa$pDid>3;NuHfOCfB~0kdvoGMj0!|g_N(1TG3F549shpExCrRc9W;a zimqFG0E04118(RhZYLxBB+EyFjwT|F1J+X8ro^EM^9Udj6Nao+<`T@@G7^<~wi~68 zL?Ap%dhns47s6U4$x{2NOal^)iIR{IUnxVzWfhWo;(x(xKeU~hVAWhU^kN*T0-0~~ zJQ6e@D1)F3RHI~+($kHCbQ;r&=~ z=Z4X@uMA_5v%(dHV)dL!S(yYZO%0-5+#O)#MIX@oT|@8c0C#8sfn>2DnTNYXYaU^o_H!k7E(GS$X0&Th9kahXwvrW*tjZA6 zIDS3EogPdkR#WQ@s;T)u)pRXHYlr1jvRVfb4pn=~1jR-t50XVgZxtH1ykcs~))55h z>yE}pq048nY#Tv5$;1;Uh@7$ulQ{5&9gW8c6Dx^e6?(Z`{j!6|n+q1ODO`gxqp`Ef z`VG}uZ9K=Hq6vaJ&;(_6lmZ?u5EN$2;KH+N;Vo0OV&T!UKEq>z z@u?p&!lP@FS&02x{_cTJ0oMd*?vhRgdc=WwetRxgpWeDtQeHqddHnH1=v8CR61?HU zF`a-4xQf699WN@-Df@{uMYU8}$H$@RmcGdbrZn`&ED<({;WKUiuDsN`k;mM9Jg;i@ z*AIWc`KR-$H~jLa@a)^a8o%9ZHvahT-={nKv$$^^Jb7^T>9a@Y&6{@`dyPNq%^&M~FY7gUZ#J8IO?;^}YkRd? k17F{+*VNP8|M|mOZLje_jyCeqU*zZqFuk!4gVmk?2X|&pbpQYW diff --git a/warehouse/test_ns.db/target/metadata/464f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro b/warehouse/test_ns.db/target/metadata/464f1a0e-cd51-462b-b4c2-81e91f278432-m0.avro deleted file mode 100644 index 7fdcfcd2372b0d6a487474df2986785534056b3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPjBNy6u@1#sw#vkBv=k;wHo=HH2#xq{%}I$q&%klHEO3Dv2kuCS8()C;W@5*7vZ2kUYF%eC^WK}^`!jF87=E>L_-^Wr z*@XVR`_d58gc*G!6+H8V(J)2<3;opSU%WH|-{@NnBcc15ieT6d(zZR0s)BrXov=Z>6QggvrVa#0Vl`%o?P$BBDt;j)eq27pj(7 zi)9x^l!YORl`a{;i_bB<3DI2*eHmt@%yTNT?Xs z6`5ss=doPq`YiS+1}1s_^pxBLVoXk+5gBEy8W&Q&GHOXfDKapxWwsO=Hrh>*9!t7z z?EwtRJPo*I+PIyZ@RK|r2|AjHED2ddZJUxIO_@&si5N3vtumKj=2nrY)N{Q!gCqjs zdD4RqEwdEXDoGaF&tw{qctn(hlmto{GOntS)YIT=<_3{FoC;RYWy>tbkt&eIHqT>0 zLxM60%0M+rMkPJHILs!Ii!+v`cfss=ttgUy5&4vJI>oIAf=!^-K^@5p%c3sjPPnqH zj(crc-GUXaC>5(KCS~Okur$@ETAhmJ*EGyzhUQE1{g*vqb!P)~eHdQ`9u3ds@k5LW zO^n$9#;b)32UHe*P7`#IqC*0oh!}nmsALK8;Roqe)m_pc6%flPdmwvm=oV1+0Htjf zfbNd6cXyPwxowm(cN!3wUYPk%H{{_#XylVKdRAqN$BMfSuvIE_Zx7hE5U{;DVB6XN zu)RIN$cso`5W`rZD&|BqS_{+ZY%^M&F2Hnpo5OUv73*)6_)c$|FtKyNdH`{$s1{XQ zRfsCyFusA_bqL&{1q71if@DA3CR+O#bzz!>fpFu|C}m=KIxgC{&hYJLS8B@6MEL(WXRIOQfd^ZbE@CFPWMoKd5JfY9Ro?M&Xu73u@_`ABf)PuF3u5@xn0+8GwO;Hq?*Pv$?Unw{ zy?^~j_q1O=`th4zUp&xX@9O%WuYUUeuRnhO`9#ySe|B)k{Z{L!bwfED$AGK_ZLx5p z^vEB!1m%}Zv@qIRrfHe@uv(U7nl1Q)|8mGQ&8FFGAGb#qHCfa1A6oFq9yW(<&u(@t z*0V--r`vYyqxog)@X04nzkL4qTz~z(zOVnbv-iW!{ aia&b?4^B00U;h**tQggF{Q#!bxBVYZBt{Vc diff --git a/warehouse/test_ns.db/target/metadata/49d50ceb-ff50-4c31-8515-77245a727b91-m0.avro b/warehouse/test_ns.db/target/metadata/49d50ceb-ff50-4c31-8515-77245a727b91-m0.avro deleted file mode 100644 index 1e6be0e1e2ae5b1fa75aff0aae830c3e3f858c04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u=#CRTXJfA@OnA!^m8d#ve`d!D%J7VkNdLyIpCeDzYZ_WNYf!W;|{c zR=IHC2;AVr6;AMH&;tkl4GKrrSo5_mpZkj(!@e5SQ@O-J8T+iS1q*LY=ZeL5&`Uox8$Z^ z9QQSx-AgDJfe7NLl_t#FIU5?)5tyl)_r@`wP|><%JcX&cz3;`50FirOJbjm5^7ue0 z{ObK2BLNs5fHIn-07-zPLP&rz6O)+D7B5lzzbSV-`5p=z16 zSaxPaSs0>N>5?J5_-stGP#6P(e^o_-zgXlkH_9d>#%tC%n~EI=A#>BUvJW?vjl^A4 zP&3wE2)wBa=1!~$vYe7_(hJBi_JE&p40?$Q27-*9!t7z z>;VkQJPo*I+PIyZ@Z&rm2|AjHED2dtZJUx2O_@&si8yD-T4gT5%&j6(spooe21x|M z^P~qKT4pJ%Rgx^UpU5;I@t7zHDG8J^WL#Atsi(o`%nc%UG!?9#%a&P=BUK=aZJx%0 zh6H60l!0oLj7oZXahOda7iTO>?}6F#T2UnZBJwHcbc$OK1e-vugF2EImPK94op51U zUH8(mdIc+7Q7Tp!Ov=h7U}>sRwYn9{FKL*`49%D1`!9RK>dl7e`Y?VGcr-kf#}6?k zG%;pF7_SyC98g*Kh$iSFMTZ1F5ixubsALK8;RoqO)m_pc6%flP`yhL6=oV1+0i|sg zfNqbne|wa+xowm(cbX8GUYPk%H{{_#XylU8?^o5OT^73*)5_)dSDFtKyNdH`{$s1{XQ zRfsCyFusD`bp+g@1q71if@F8LiPk>CIPDfnZe0lMqxEQ4o;r4Sdu$~uB3V@-W=ZmD zh+93FY^|eAl!I7PMKIr1gF%?73voqMA2NZkWJtklpBqmRo-u? z)@toJ{uE6RbOcRMZbv2H;Q~Qn#uP3*%NE`+RcjU=-Oj>eya7Xpk&+BMPv|pzCK#Ut z5hFalBDsawzZLI3=oD~GfaWees6mf8FfVS;)#`J&>XeihkaZq^_yP2)31=zZaN(Fv zK?Phz;DU}973h?MRGOk%s=VXl&~!`R)BbGWjtA}bLHmkwb{+$=HnhdU zjnV^u)E1P#V4{uD-Zm}MY+LYwhY1f8-z~Fk;-_V{4*Pz`^w_919(UlE=UA;?$Lh4Y zUHh;@yLNZfw+`l)t^LRMpM3J{!Kr@zmcFb1*4X*6vHN91gLi!g9{8f|XuFywU*Bwi bsrcF1yZ%tqcJ=!>Va2GX>w7S*zU}`2o(@Vk diff --git a/warehouse/test_ns.db/target/metadata/44d10516-886c-478f-8be2-84606aa42d96-m0.avro b/warehouse/test_ns.db/target/metadata/4a74315f-9dab-46b7-92ed-19078458b5a9-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/44d10516-886c-478f-8be2-84606aa42d96-m0.avro rename to warehouse/test_ns.db/target/metadata/4a74315f-9dab-46b7-92ed-19078458b5a9-m0.avro index 4e2ab60308b9b29e5bd170a48faac9eb7c23d57d..8d7b8f04e3cd734bd03ce9ad4820864caf56f90e 100644 GIT binary patch delta 126 zcmdm@v_)xyu7K?P_^2Dlj?J;3t=%JHW0+#hbb^_QY2Cxur{AvMvud)JfT_KKp@D%u z5F6+NF$fq!7`g_!CW+=I#)hV8x|S)4NxCLxN#?qiMyV;fhL#5A7AB?^Nv4UGllKXv I3832o0I=mLH~;_u delta 126 zcmdm@v_)xyu7K>i!#!shkLUT-^wlsLH=dcnbb^_Q>DS}y|Bs$tb9S{sHPAINNij4qH8j(;urN#3H8HnH)3r!SHPW>(F*7hrOf)e{u{4{! KPasVI-4*~S&?_VW diff --git a/warehouse/test_ns.db/target/metadata/4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro b/warehouse/test_ns.db/target/metadata/4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf-m0.avro deleted file mode 100644 index 7ca106f0b84d28445793a5c53e4a34ca17217e22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2Jk;6u@oAL^+@c3B;)q!=CMUKSKP`QxT1*1fjI)DY91M-Ep(cdS{uPO=KcV z@DCt_IK#hCi6a*da6w!VCnRo2RsRUyoAIu9*RDxiN0Bui&%F2M_de#$XQOBJ{WlZu zoK5J9ooho*V`dDDM2ggtM#~rnEc6p&aCU73zA>;`MnosLf(xGs7v@^oo{&dR;hSJz zq=8_t7-Xa9*?t1>ay3YG?|^bT8wK2;m-Hd|mmi(~-j5p8uS zn8$MsXLn*MWFP|`wUd~6&9k9Vo`IDO^Uj!y36_-stmP#Ob*Kb1v-zgXlkH%ccXCMwoAn~EI=A#;QN7xbX0UKbV|IA&EeE zmh|95%PfSoPLhT86O{&pkBOF$kU%R##$^?XdJ=re+#qsCQ^~5iY?;M4(giX<<|&sn zBq)QR3{<0Kl+x4VVLFLiT(K;@2WHP}MV|DF$frWkDIPtLYy!0o>PS{t7Ii6e!i8mZ z-Al{r<*aZ=p;%ooB`cGFrKv*I>Xt0Oq+zNuG~1G$zvv08HyfhsL;f`IXn3lwA7V^s zY|Mr*UoKoYp|kK)8l#Ie9TNCNa`;D}iY3H{A0!uLcPWE(KrEx|gY3DXTR_JN<3K#Lfll0mP-InpbUI zAGJV7VR9)EoI)>`t6y{wd2_)+Hi2hQW;AwIS-+uM ztF`y|V>Ch15i~)W9i@PW2Ly!`Q+V(!TX@4%typ+;I}4BT1q>ZVLQ?EJq0jJ{WMUFT zj0k>3G7GVP%f~+Gl<-V|<}Nv?K<5IO=db5-^*LO1OR5LRI*&j22zu36umoSYa7`zm z0-hr9K*xs)bjm@ZOwlb>*6|5wx|MITi3yE@F-xQiV#L&#y`vtr9`~8Ihxb+Oy`4Ay zcscv)t6%P3|H$9}x!d@Cr_uQSr{{lv{qLXO{ZOyfYA@?}^o`l)o)a-|_ys-z9)pP#`dVNb+ diff --git a/warehouse/test_ns.db/target/metadata/4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro b/warehouse/test_ns.db/target/metadata/4eb4e5ad-f07c-4d6e-a213-fa3c84378fa7-m0.avro deleted file mode 100644 index f32177b99be086a0f674415a4d1874732bad9b27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPmkL~6u^@-TI~U?kU*Sz82OxR{3qRH!-XQcPzjdOZpC30SrdEGxa)Y#c)Y7n z<-`>b9FRElio^wp4*?RNffM3b_zb{%GqGbkY1mB@MUg$3dGF2d{h2o(kDk^KUQ4_Q zo6;Azo*8l$Gh<*RQly?VTE;kFp`RFo^Jhlj8w0ClM0AQXxbT^9VXT#{33>Dc-URzB z4FrS9AcM_YdZAre=u^p-OBZkJmpYZD%EVkNSQ@O;J8T(xS8cT0Y=QYKk^$^TwAH3y z9QQSx-;Sw}fed)mPGaUY&xb~N1ZFnO+hZ=KRJJdfNMLHiKJa)XLF7IdPv4@Kf*)#y zU%#DUBmlz$P)3X7APJDv2nkT8GEMS-m8Hal$=VCV2qJ0BTcofeqH!|eQh{Fx)yu5q zvU4L!!w|(Pmki;-XJeX%(ijl@t1J@y#UhWnQ92zlQL)C^R_r(knVW2s-Q89;5_eHS z#aMeO@VYKoII$wgatgL7FCati0YBpe^b#Em1RXgb==&Do!owc|u>(LWep57JDkoJ% zX3^bQEa$pDFMz>oklLsSe4!fvlq1@Px@u#Qz7UKw;o6~g<1!7Br7b-x|BKL!m@hq zrDgSVR=A>2tS*?6l}W(TRH171N|s;JFjX0vEy?y@^n}%)57G4@e-d~!JX6OHF{U&& z=0g}S7cLyoS@;o+(M6gL349_sd=aQ(3Gv|v$wk>+${-yOt0<2__QKE|pgabYwwVLE zIm+XkqqNOkqg1)mg242`)Q7sE4i7>jpPbUuGFv=W+)aS3LZN$gz_x{e?d<{E))s*6 z-2p~kMDcCATBl4ylU$T zQN|ncE9hNEz#UpZAXzL(_MKg#wU01Pd%2Pu7XtfeGupMMj@{cGTg8efR%M839KRgm zP7fvkxwUWk=(^ z$P=?zwT&R2Wa7yv@hD6s|#;(b!pK{f2I> zHlE{;&;&_G&;(_6lmZ?u5EN$2;KH+N;WbmWV&T!vEIh#*FmxCRNwM>UKEr2{iD?iq zBKQ@_EX4jTfA&GAglhsccgbM|Iv2n^zde_$Pj}rZsV*R!JbwQ@=v8CE61?HUF`a-4 zxQf699WN@-DF=x%MYmL0$0wlaR=&vwrZfu1ERimV5i?`{rn=O6+-KfCo>#T64Eg-q zccS0_`Ro1JmxE9LZ2Wes(fIMF=imSP!*^dqwOZ}(I_`MT=^S>hs9+Ng$U4v#OE*dm z{ZU6!@r20^MtjGyEVE;oruwluCcMLl*?|$$Y@6*a8+F+o>bJ*c&ue%6Bi5$2<+R7t z@%mk-*B{f~;o`D&@Zj#lPafYpYrc4+vDf&c-u$_~_f5S9&&_6YuZa(}W^J!lYvAMS jbubk_&HZ0KsMYowchzV^55nlLYV=*0-q?r1>bCy_)VEBV diff --git a/warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro b/warehouse/test_ns.db/target/metadata/4f3d6bac-76d6-44d7-84d8-25b914dcf93a-m0.avro deleted file mode 100644 index c2bf566becc4eba941f294797c55a8cd16470568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@0?RrP=>BoGI*hmmhcN#l=fzBqx{ij|-&+xCE}U`^~v+x@wio3 zMO@Gx(H`MH;D*HifV9W`JNWnumILq2#E$J`L)%T1L=$J`y*I!2F>k&aJ>5BYC-o+5 zO8>m~%n-AL83Q8~JoALnFvbB3{nQwoKQjW~7+4J>qEnm^bDwb+o;C6{VH{n+FV4Qp z0?uGE$YAq^T4>i6`c$yx(#5a!OP$(MX=0%jEDhG_9X1TLt0vlQHo$xqi2(M)n{rd| z9QQSx-%ltPfe7NLnI_EJJs%p?Cooet?~h|XrJ{MocnVW>`@oAM0V4Ooc=`do;_;zU z_|wNZMglNA0A(~t0g?bog^&PcDzdcrS6WI;n5?`&j35%myg^DUBATR=SV-^-p=z16 zTy}0mSs0>N>5?G~d^V<8D2xHYzp5g^Uo7&N8)efG<27rXyNVqLA#>A>vfFo+jl^A4 zP&3wE3cRTc7EY`QvYe7_(hJBi_JE&p1bT@I27-;{5a1?f{rF4OG4IA+oohhQ|1#uA|?!3tIQ>sxm6@8^;|E`Ac;VD zp7h{D%PfVpN|L4aW0?jd9up-YC4o|gjH@an^)&dNxk2QPW`fmo*)q#Q z>t0z_uV95MO2z7uNm;oBEKN14R<~mL6%8|)q4|=0|7A~Dz4;JbAI2AfN5fNj{19VG z6JtJv=hec64^$R@NfUIDqC*0oh#1}oRI-Hl@PqWS>Mm)J3W!ydeUQB{bPFi^fYLS# zK(|NPzdcIZ+%`&?I}Hd-FU)+X8}jfVH1f$YJ+89FW5wMB*eVsew+C!n2-vjA{2qFPjK zRUxW)!}uC{*AZ}s77$353zGd{n`rG0#%Z@ua_d51cQ&J4d+ONT?Xi`th-6iTm?g=Z zA#U|xvay;vZ&6L{|EZ>HAv#+ur;^n=h;XR7Qzj@jIz^By8hWSHxD^%CP__;sNZ)ic zK8!p*OJv&!;z=%^jKX+Sbzz!>fpFvTIAvlb5u8#lSEyfh5JhvrLNT1X!v%uEj2T>bRxP|?s@5#*+|I%yya7Xpk&+BMPv|pzCK#Uv z5hFalCb@;!zZGL2bPBj8Ky#NK)}Y56m>0L_YV~QaJ0;}>WRu4qeFnX1!dZ$pTsWpv zPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`GYBqf-y^l3u5@pn7=PCwO;HqZy(PqZT#=g zXMa6^eR9(N@WnSD1wZI7@9FyQ|NQdf>)&3y`c~7lzjtuQgI4RXbxk>&#DJ^?ZLx5p z^w1x*1mzb@v@qIRmT6fn_?RvDz{oT$c*}ulHqB;x?D(A#^_ty|-)Xknez)0c`@N?9 zVAQwTzBleW^l)+6I(YoaldsPnp6V~()A#gOJG;N`>^ zVN?42)}uT)Oym^-`y@RGFA-1xtgg^bT8w-c=jzHd|mmi(~-%5pA_8 z7{`4L=eJ`jWFP|`wUd~6&6A-~9)Xz+^Y)mFDV6PWCK8z1u=hM3Nf5aU#?!axx#0U+ z;g|O^j09kK0Lo~Q93%mf8X*D7RHjM(udq2zrSQ27-f!G0{6~8GOF_n|5 zBD3i3ES7U!A99akV3MbgACikePRQXCqN0qI<3h>TMy+TlL$di5<`BVrx!>tFBO`+C79mxvIvMyy#IJ2y- zdv001oE5Gp6st3)WMvYtG*zft-IC?!G)z^7W=pdD7d>J1=0kLS$WH^0hR5poA;y%( z#(W6l<-&ynItxFdF}g_8A%RaMhYtc(EFnJpAUP|$OBtjCVijc{WG@We0?Iz1w9OpQ z%~AGmj?y-_jZ)=K3j)&%Qy=PvIy?xCd~!sO%53pian}L13We_F0oxV=wl@cCTN?nj zw+9$`5ycB)7%NoCoQOtiVLIJyMyt~Um`;Clm`<-`{k0O`>2DJzb}m>CATBl4ylU$T zQN|nc3+P=(z#UpZAXzL(_T6owwGS{(ySb7Z7XtfWJ=!Zz9lN_dwu%)|tjZA6IDRq2 ztsYD^R#WFCs;T`y)$~e;&KAq5Vs#ZnI8@y!lN1}BJV+J|y;Er1@``C_TZa&&FFG0@ zM4p(%s%-@EBoj|YAs>}pn8aZqT|OQsOs*t?Q|RS#^~(+-Z!TEKrf?0)jKo;_3 zwe}o;f+k2hf+i@lqZIIPfuJyB1{a=H3$K}~6$=k;X5k^;fT6=kNQ#{&^cg;rOiY7_ z5y3A=W+C=(`MVD~C0rArxl8sd(76ES`R%z}eePU!N~#OUI*&hm4|>&Dumo?oa7-tl z0*6|5wx|MITfhmoGF-xQiV#Lgtzo{;@9`~8Ii|1ACgCF1d z{@>UC`1JDaXZP$^zDXOu-D)P$RS_e8~ z=|;)EKk7&-PMPdrz;{f`G8bPayjdm=m@tG-+iZKb?e!0+-}ar6*SH}16u=!{6s3R&0iwEMz!3f^b}NRajZG_BipyYn$;n(Q?|B z21JcSLrKm5fRqwi_zw^?P+iA+Gi$Hy-CL5qT}75XnR)Nc?|sah&qmL;_TI?6OE#u| zK6qh>Ny?0YkqMrA!e|*m$Ra;82Int~&^HEF%ZTY1XC&Nb+=a1Lu_j953;5#f%RJ-^ zCW8z%ZK;KJW1&w4n=hSxEnn(1mP!*#tzc=mOz*H|s9m+uZnFjEvsi?%AKsRmf^po} zaQZN%T!bP_;&zrYZ~J^`)JI^ZZaxeWKBl65&3Fb=b$icCVgVv|!Fc)}z2?cjQuy8b z1x5leJOE|1NC}bvNrjLAWh(Nl{I9f>m@rv+ff!*djA@HhR>U;TE)yZa&xERF)_mEy z5$92aVx>!l@Zz(8=8-T41pieR3I1ZS$J{s{j~H)Q2=4+60RKpTFOG*T)qn~Kb; zyNg&Zb$ya}6a$kyd-|B%gyNDMpAs2mtR5FqzA|b-LnSgWuVuEB8rIrPnH~$e?(6{! z$|4Q8W!ku%g7A|f9|<~|h&+v0OKqEy5zUxS0ExI{$XaDC!OX2AQK{#8Ne)Q_!i%H_ zA6jN5tW}cCwV%i|AW1-!gp7nr88WV`kkqsAE9Qo=JDLdA%w@~0#*r$JS*<9OejfRhb2`DThk}iv) z5XS3;3kOsdeo9kxk)lIFpNIth5U6Ac@!^NrRoz|EAQcdcDElCLX6Ob`_5r1BmVoY$ zvVVV+wz+APGIv@Km|m3oP&ee^L1^rg6M9l-i^qz)3b0ivbgvKCwh*wrK49Bg1F*e0 zz{rb8UJ%1rp=##DG+qhQ>25MwogTn+`s>4VdNu3sl=x16lQ6M!!Fm93si>A!TUCfU z-YB_&-gN}rp#=nz)q-RnZW671gmKy}mE5}!*hj0;E5M)d&B!W}vSj5I~4JwSr&Z_7)RBN^J z96v=91RX&WRM=4qc(_1Nm@$D1&!UBQOx1>kNB6Vv7;nJPVPqu7&J+3!p9#jtVay0m zZb)Gv_HX684>|>06QH@v_8ZU>4$RBjbG`Z;EITFT1!R@SAAbbBYRXxLH(WTTGf)9n z5xAh^MFl$LFq5XJma6FZI5geTH^so1#$muR;er@GF{bazORbmq%-hBDN;?hSp1f)Q zkbVEnKjLry<-hvv16}{|_UCVZd-?kxUuc^4*B0)0(CO@VZYXD$2_Wl0TP)l-+xJHu zLHPv}9gOylWtwKkv@Cd-@W4+Ce((jqw%I;31Lgz=e!J`YqxOMEoi_EopzU=>ho(dO zU8~pMpIx^0o_z51^JkCF^xJpz9sSp>?Vq-GzTVQ{UEhWWzG&Opj;6`iw{$QSf7`pi We5`3Z`iD4S$*895yD+V}?f(Ey0!;k? diff --git a/warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro b/warehouse/test_ns.db/target/metadata/50fe3f4d-7ddb-4ca3-adcf-c7b503a97189-m1.avro deleted file mode 100644 index c92ee0d26be88c008a6d7348cce8027c59c46287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`KPjBNy6u^^gRP}%=B+#B#XykL!cs1 zX4iL~8*&nJqh};iq^>j?#?a@1ml(bC=Z5bYJ=!orHpUr|@VIbbtdXq=qVOra3I18? z3l5V(2A?+cLTh26$0VOGoxQDIYA-BRCgxhfQh$}+e#6kaYNFj{1I*{4^kF}usWt`U zxUc^7Ud)8_r5}aOB<61Yyl<38U}nv{H;lxX$>t>&2~4e7du|j;5V;G+v%Bn4MEhFd zSMO#R3BYgxl+hqLNCG4^LIRYTOq2XyWhpUXvi1To{7@Rx1}UrvS)7a_sld;K>Sc7k z?A!>`AV9IoC4G4C_>iT6GS9f&Rl|-TSlT&&vBy^k_d!n zNe@1xW+AL~lFYTAsx%6xp3it&ccsaj4sl2i0=^@!54ulmJlDFpInsPr3}&mv5fKvWX}xU0?H#mX_+~o z+oL?XJxa^mHcFK{4G2s(NIj?<>hK^e^vEeYEwjaA#aRcK77E?#1GXpvwl)WB(G37w z+XIZeh~fn?j1{V6PRPQwFzwDZqt)&LO#5han0B{h{f!deKH4Ts>|C%OKwN67dDYex zqKr3)uAp}v0C#8sfn>2DS?z72wGJ^(JGqiu7Xs^WJ=&G0j@8*7Tg8efR%M839KRak zRu3i%tEv4O)ztc*YPu4ly~T2>SgnExhpIE?l3}Bh2g$6Vw+oG1UNH@AYafF2RY&84 z&=r$dwT&R2Wa7ynhz4aBCUM|PCmIeDE|(I)F7$G_`gsSDHy1qMW4H!oMq_7{^&7gi zT6>N^MiV3(KogYNQ3`mtKromwfeX*Fg*Qyq1q%;vXW=p4fT6=kNQ#{&^cfzPT#WsY z6A@jJ%tGwn@@EfpO1LIKbC>KdK#v44&u`D=>T|H_lvEdxbsj%?A9~eT@C0wTa7-tl z0*6|5wx|MITfiVmHAy1?OV#LIlzO62`Zsc)y7tgE8pFjU~ z^4z#V-o9i!M{`CD1FaE98;8Xd#ikt4WTKlalCio}F!c*-G9h9Um(7%1)(H!^bzP g75%C2{_;VkvQxXSMr--#OEvl)Ot0<2;Ns5z1G!F3B>(^b diff --git a/warehouse/test_ns.db/target/metadata/5276888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro b/warehouse/test_ns.db/target/metadata/5276888c-fd0b-4b5a-83a3-d7b071e0a6e4-m0.avro deleted file mode 100644 index 3a5bc3213049a1042caed8a071de46f0bff7c93f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&2QsG6u^^gRP}%=BoL=PjC@0K8h>P)4^E5Nij|-&+wQ4~tcg8oOdZ>d$F0ID z7bLD#k+^f>j`~`5~y_wjtoor~kv8vRW%)IyJ_de#$XQMCbdv7J~ zgiYzId(Sm7iPqw;PkoXd)mO%wUAD6M#MeF9T?NIH9-`f!8gvn zOnuH^GRRa_QpR`lWVdsWdUy3YPlo^bU1R?W%=#8#3m)w& zg;yVB7zw~|0hFeb93%mf3Lyc?RHRA%tF)9DFj;wlXnrWPxlRfzLK-KNNJ#Jtp=z1A zTz0C3X%L`T>5?J5cx+75KxhMkKb1v-zgXxpCrqa!#w*s?cNIJK1Lh8;Lup zpkl1G6nIk?ESy*oWZDJWq!*B30>A|?!3tIQ>sxn(3O^&B@!A&EeE zmh|95(*IezGjW`b37*))oAqzYud&67yb zfS?S5GEj|@QA$rY3esul;EYx2JurJwEApgYMn2`7&T#9#U{k1dP)D-DvaCy)6V6Su z>s**-FK2}-3dQQ2Nm-c$EKL=vX18Sd1r1V}q1lpb|3y!jz4;JbA4F%qOM?@6{19zQ zV{JZ!@p9q90hNWH(imN&=n&r{B7#2zDp^8&cz$wTc9%3r1;i@KKFD4ex&@SdKxr8{ zpxdMD-yWr9Y#XJ_9UTJG4N?#4hCDn74Lx#1kIHQESaCK1HVcLB%>i2`0=DiB*fQ?` z*xDXoHA=+Ckr;^n=h;XPnQzj@jI(d*R8hX3XxaAd7Q??EvNMCm} zJ_=nvi)Gsg;z=f+jDl!Xc3~0+zHp-PIALNX5$r-Qm#bfP5P5UK0yc$fP-ZlCR$0HH zTC0uc_%WIw=m?si%#KpP!v%uEj2T>bRxP|?s#YvKxSfTEcmswGBOxhvp3rA_OfWw6 zLq>RXNiqwuf6L!J&?(@W0L@*pUx6NRV4mNe%hji|?v#`lkWC(c{1No3F=q+haN(Fv zKm}Yy;DU}973h@xM4F;ns;uMV&~!`RWCK$g`eT*|2gLB1Hh))MYTd|V?k=8Jwd3%` z)z80tumAi0*WX_M^YXg!`@Lr4*YE!P;g1(r-~3c>z*GCXj+-8|+xzWH%Go3WYHjF@ zg%c+G-l#1oKVzbe0pB*@fe+JYoAAi5@E?cZX&J3?zuU1N*qxTw8I4<=j_0*{9oBF4 zMjq=i*0l}S*k9bY_MSX^`uVd*C(T#yGG;FuC!7WSrdEGdh6I`JZ=?M zIlzG<{{jaj#NV+J5+4^%96519oL3xqZzgu^Bpcdnsw$mKXWo1Bdmr=Wv*GjF!CR?! z$;R~Wofn3fB+Td=sojJh!jSm>ul|NMm!_(tEV8xbAjikSP1yD(SJ_k?kD0pB?L zA`3W!#UO)C>uRIDu+gW2&9~0Jt={S^Y?US!TEWs_mEJ+!P^W63-DVxkXORftJiH+f z1@m~W!SsGYxd=oMM~yUL-tPIpsLsGj-Ml}F`Iw5vHRCBP)$Ic>js%F@2jl6x^qR+q zO5wK;a*PCEcmT?%lL90Gk_sUK%2Z@&@n2~vF=4Ut0x^O}7}Gi_?TBcSUdBR#p9xjl ztogQcBg(=M#Y&e9VBoV6%|c=H3I3}p68yy?kGWAc9x}dQjkBrPQ4lgWT`Rk_scaB#nfM z%SAg<{Dd%*8M-K!WL#=~4k{6bFUCNzs zWmz5f+OoO@E8I~kR#!~Q$|YcFTA*rmDwbcsd=YpwJd@WC zF~&48rURI-7A~AnS@()9Gyv)9F^Mzg6Npy=}t8&IRiM#HFHI zRBcrus(8cr271>aaEBHUNR|tdeY8!qb{pfgQz*G}A+X!)(XPC8?9TSsN>)U&szS_? z03$cGI#y;p2@JxW_EGor?u*qln;<~9zXdQdewxp6koV- zO{bs&o+9u-$A=1Z%0VhkQ7u*8@o{LnrEl_yF^z%|ON9$!_{5mLBOkS1>@#m4?$|W1tZAC|PYsXUZ#EB`H7??Go zFBWc;9{R(kp!|Y~CWd>{v`n*U!cWtJp&Y?qOAQ)kh7`AAu(PC|<(WBjV zefaqErw`BcpWoK^^xtc{Ki2lXscA6Qci{sE+OD>zX>xdP c2TaAE-Tn7ZG;L4+2p6oF)pUIymMxz9KSl~k7ytkO diff --git a/warehouse/test_ns.db/target/metadata/08f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro b/warehouse/test_ns.db/target/metadata/577dec90-a037-46e9-97ea-09a3dbf4fe08-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/08f30a09-e7c5-42f4-a43f-81cb10b83af1-m0.avro rename to warehouse/test_ns.db/target/metadata/577dec90-a037-46e9-97ea-09a3dbf4fe08-m0.avro index c107d0a56a275e03c032d0e63ccf6dbdcbefc374..fc477e7a695def4964da62af8478994993a78196 100644 GIT binary patch delta 130 zcmdm@v_)xyu7I3a!L5s@q%*x17Q9(3U+_|a=>#(q)1%9se_CdIUFtH~TforC&_Lh7 zz`#)7zz|9p7#ae3AfRiYYie$ulA3I3pqpr5Y_4l!mTIYMX`Y&>YhamZoRXAgl9p;< MF?pXrngF^@0GS{xO8@`> delta 130 zcmdm@v_)xyu7KR-X3ynyoxMGaC)HTLdANa-=>#(q)18~^-%S0m>Z00YZvjIm0|R{n z14Bc7AU4nkVju@B1Z3y}p+%apL85`BZmM~*sji7pnu%_riE)~)g<*1%p+S;`ablX` MPx# diff --git a/warehouse/test_ns.db/target/metadata/59bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro b/warehouse/test_ns.db/target/metadata/59bbb6ea-f9ba-4642-9b62-57e55f553440-m0.avro deleted file mode 100644 index ad5596d6b6dfb27b30170a2244dac3ef063de818..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2HO95P&5`FpQ!w0<`EUhXv1)#UK4x>ZJ)9qXAMkO`MY<5KD4pF{VgnxwN4M zI`!P550E$LrKj`-+Do1yryPO+1q!t1&g_a5DJiP0NHC1mYIkP#o1dNi&Uscn_%w0H zY(n4NdZCGF%(Q`)2%fq^YiJ{%1zw^J&R%G~rwxpT7Sai>h`7hN4ReibPY{LY@Qt(Q zsm~cK1{rMDP#evqjUE+jv334!{Z?yft28m!3YPlo^bQ-EI#mt>t{o)JOe9h`khh4CsZ^q8Bbto%{*|UP=LsNFrI!vFL`vR z6#o2WhLHda7eHwZl7l2bQXwQjnTj;Yf0dRJ9TqDu5X}#THfxZ=j*!O5I1&>4T&UV+ zEVi9#VHyM|R=Q*e1CNbp8VGGb@Tam!@D~eRW{2s-VSLFNYg@4+KVWvUQFeP<*+|?* z1xv=73xU^l!Q6>Uf()x*oAd%Qj9lQS9fMw?f`OnT2LyfJAQ5-*AA#5bpi6#}G-4{o z%Zl`(yR%r%bv=w+ih)UdRIp^i<7Llfo^KqAHrS*y$?n7L&nD)nqPN+F3r zc$W0wLqjiwwMvqO_7j-~BpMMVAtAm}hK$Q9B=yAqf!Tg&J5#}ybJ@^~aij`le$3NI z(14%}f-+Ezl2J-eHww~8Xyb}i=|^DpyjJ8%zleOwIi2FseZeMB>!6Ngg=JBfGACRZ zM$f)9jH8?t?kE(i3npb{60kHaQ8juc%P(n=$_&l6Walq>!Z?}@(e*)e?z=QNmDdl^ zCN$P&LzpiYE}T$V_$`gmMT!pbJt89bL!go+#E0i67iD)zgH%AQqU?k0xuH8i*$0%S zo&&l$%Kpt!n)-E4gtYFuR-4uDx~4-tO2+Rz$KYLrmlN z!w`3RF_~CRt&gat=KoaFwGgcxmQ%@U9YnZP?FkbU8=X8z<_*17Xx#FOsVQ5B5TqZv z8t;cLpT@Fn1o0#jPn;lf$}UXez!!Ej8YN7uB!X4w<#P3l4kB+ZSimOm49bkg&MNCS zRBN^I9)E%+2wEIkS1%7J*OooKWCza;oi~>-Dv5$VYCeRk0ThvHyuAsz1itIj?-ndIqEyK+3vQ@X5Zn`D^Ro(cQ=2KfQlifA?8!ulA-||E;?BOSJ;ydcD3^$3dlD*{f7) kIJ}Lf;-|j<$2XPAUhS@&t*J?v{Zr1~gXOh-m|Q;he-OY+oB#j- diff --git a/warehouse/test_ns.db/target/metadata/5dd4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro b/warehouse/test_ns.db/target/metadata/5dd4367c-28d5-4ce2-ae9a-bca3aed92718-m0.avro deleted file mode 100644 index 875a83a432576bd62e87e71e0938f4862a2f4e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky^kA36u@oAoUTA8BoI}K(U!y+Kf_1>h6A9q7Rf;pAgK@%piD)YFPQCx_Gl_tHJ1&&7)Po==G#1t z1oa8ZASeUXC>f>nbRs_uLK|l+OYec%^IDN7{UY)y=X8o&_XG=|)bot|%0%3npb{60kH?s2bgp<(Je?Wrk);vi%o5Vf1E0biE&)dk*zayFIp&6_KpU5Ysq* zHN>qROeR)S>ouyW`9IZkB}8kBLI0a@qq`*)#NjX6v3h6~4Z z0xIAt0vB|=s6eOeCDIhtQe_<(^iYxx4q?Z(n}&?2YeUG=93(X#D>D&p$l>=J~(R>a|+!?>cUI(CO@Vt|(`d2$*%C zFBW!~?7O3mp!}SP4u*S2*L9<#8}KmTBj3~zJoUETK6Kp!>!|Cr&7OPMK5&@XrmRof zBZpd)xqY*1^!Dest-S|#9)9-t-f8pY+l`&ZANA(9^_{QlHF$3}n>$T>sWodmwORvT j-$GOI)7*XWVXd~)xFbg!Y7j<$l%pTO^u{g>R`>lMgH%q% diff --git a/warehouse/test_ns.db/target/metadata/5e92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro b/warehouse/test_ns.db/target/metadata/5e92b4a8-5944-440d-a97e-eb9566b6a8fb-m0.avro deleted file mode 100644 index 9f570cc052220cc2c9461ef5aa0e38a5b3ed97ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u{Fosw#oXN+3=vH29n}{z#h-PKez~mDsZEb|s`Lvc~pgW9r!6@wio3 z-bYT)1%Iz=`)}V#ju}q0J_0BYQIQ-kab1m^Ys|pYI&J znYd#%p)YrzYhoHRZJ;HBr>@YN+Q?^tmuQ2F=bGP??lEq|STkD_MB!6- z_Q9EAV9IwB|~`d*odZq&;|s5DvJbvvCw69m`)tVE7n+>iXHg@vy-*5JDbWz z;x;O%7;7#B-qZziCsqU*R>3yu1!Nexz)w2?y+j2AK}QY<`o2jb?&24L*a4swzeyS~ z72~QRz3A>NmUCSnM=r&{Bu^fll51a#$;o3Pql}f~LdsW0Eomr32IjTQmR!R|yUEjI zN!N`%fI*q10XK9Lx04ZmnB^luM-!380c)ylQ{vEsc?6J%F+J^0Yj3t_F2WTE{`rU8jYL`g`9uaqIFGv6Itgu@u`Im@X3uLyp7e{zr<~I%ZrvAb0<{k6NLE-Dbt!Yg zrD1gKE5qpJtZ+r4SY0wHE0chwsY2E0mMp)bK`JveTaxX+=n11Y8=~uj=&A40;9MR* zM4Ql9n+;*ST)1#RW#I!Fql*+B;(J6y@P|MpONbB8PcF;uk_M@OSVq|g*>gj;fU*xL zO+5#6dzAg#qcrtxqm;SRgurxz)PuSq4-Y~^kDSr7GFv=W>~(;RLZN$oz@~wK&CLOu z#s+}R?Eyw!MDl_d#tKz3C#2z8m{xb2(Q5Sorq$mZrqwH1f1|{=`rCwwoeS0jh)YE^ zuiC0Yl<@}9HT13yaEBHUNEQo{d9+Qm<}t=;H&=4&LSP=RN4xUWF}vGiD_IfAsthrW z<5xr6>cM1UHML%&nwtMpO;S(+lx_lbTwh_dWOgwRd$SJ!pi34BQ(P)$~v6Ki_p_j|mFFJ_4xnKdCz%?i{8au13 z-%zd9+H?FdnjokHO;Bb>Dd6D(L1D%eECh1kF4&mQO$a7}>bE;+0~k2o;TZ_nlG(^+*&$_vOkkDuOyUNz<{!5c0d z(+Q}6s|Z}s@uC8qvY$v(R7;h0d>oo?>6>g|LPLMV5@CZFKGkOL$V;sodCc9%^Q!ji zZ^`h*vmgHc`mKMyd;h1aJN2J;>-8Uh`R0!oe}4P#XSG`GuN~a+pxr)fUsKM;5g=-?U57Uu*IRn)i1kgULwl{Gey7vwbabyp z`(4&zPXFlm*g2-Xk#jh|Y#luO@X@DF?w>bazFps||Gv}serNBiofT(3TOg3C@Ux$Atr9t$a-wM`!RR z_$OH)I7|i^eAdznt;#}=NxoP*f4h3AU0JG3EVP29!Bu*PEkp0Bjdq(YFrP;2*HCjd~J>59WCXs_PR;BmA?0Kyyl712SOb9l`tp}1%pw>Yh$qUP(F6B-* zr}WUdptM)8!WB!!>YOWCxdbdt6{_^GWcdXPGnJwFl6?Qmo}j(i5M3X}XMxMY6LtI$ zW5N<+HiYqV;lcr(g&(p6U8L!dz#}q-F9KC8AwIkyJukaU8KeVZ6=fe}&kfxI%08g9 z%mUEOQTA_+(lWP=Qsqty0@DpM59)?GJP3TND9Xn*+A! z27s;Y0Y+X#@q!q}3RN;EV$oWd_Te_8)$RdIyT3V1yH~RQT8VG>w+RzF7pw;mmzru( zwRMFk;|=3W=v_y^9a=yjxm=K}JKIES9blXu7D{eh2&{wkXs@tn1g=53(b!q# z{f2I>)}G^!(FDmx&;;dnlmZ?u5DaEa;li_O;WbmWV&TEfEIh&+FmxCx$*}W;KEvaZ zi%Af1BH~MuTZsKz@$7+43D*Q@?$Z4V^jHA%;`UswKHaNMNp%5P=kW*cL$8_$p5hG` zj_DLsz*Ph;=y*|qPB}=GDY~V~J3awTxAILsFkw;P^He$@Mof*_o9a^Q#vXTf@w}?N z_56>|zW?)g_Qn10vLBLnes27BtI_!B+t0uH=igtx9Mx*Izw5Z;L8r6dxnzQmV?fq{ zwpcn*y6=rTl8G}eI~eU9YErX9scCjhN-4g=3p|+kX`Af>)3STM)oqXN^zC-nH+j3q zS+CvY9`E)oN`1e-Kfi44J-qwq<0tn{nlIjH>@@zWH-D_}d{eK%bFvjs7!$X diff --git a/warehouse/test_ns.db/target/metadata/60956563-1580-4c8a-859a-c232e2de30a2-m0.avro b/warehouse/test_ns.db/target/metadata/60956563-1580-4c8a-859a-c232e2de30a2-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..44709116e6c42a99aab3b0c0aaa974ed22763588 GIT binary patch literal 4406 zcmb`K&5zqe6u^@-TCEUTA%QscFj#O)HXeJs`QTJUS5$?iwA)h^SrdD*G3(f7Jl<8P za^t`W!CwLg?p)vo{{rd_sRFKu8}H4;j_ssjH%*j8&Sd7jH^28WZ$2G;UO#v}aVLDr zUfgGknh&(3TOhDb9$5$Atr9t!zyYh3D`~@Gnwd zaF`4-_`IbTT9t(!lYF^!@oW83yRuZ7m}><~{dIbWEkp0Bjdq(YFrSCghy94Q+7yiA zzJ~MLF%#04eiXKon7hrVL!&$bGaKgZaU`ZpwlBFzU~0oUaHCLy$bB%Lz0EE~bf^`6 z^L~br01OvE87-27BtTLlBtV(TG|B%}mJ$;tYcCMP52Z10k;00Q#mOX+3j9K-UPhP8 zo*H2q1SnRyWC#x)AG0)&#(>~oWs%@79=hBK)9HwdiZ%AOV#j{Kon)izqitm)aR(Jt zjJ1{muj_(^6DxwKU9e4g0U1Uv@H0+8FVVq3(2)azzHgC8xcEgNb^vI_Z;D3DX8B0a(L|qJpxGNgd=O6xdbz}j6|oN<3=eY5eUzc z9(+j6LRjl0S!zF3X+WYe(Gn8kYh}o|tU^&w{4crVht6mwc{P`*S&SoHAoFdWMUn*s zWe}8sYP5_}db&}NPD2N0tV-{J*^63{C;c+=nGkG-TlXcOLal>3k`@Urj8$COj&Hq zhcI3)TsWY!@DmoJi!>eLdqhU?Mxcr%#E0i67iD)TgLFWwqU?k0g`qn@*$0%CnFG2x z%Kpt!TIQ}%s@!QoV7fu-LETV?2VtQ{PT6UhEgmb*Ccv~%=w2PLMG>&IJz$G&0od9d zVB|#YkR&;kO=LbYjB(n{mE5=xSjU^uu03_E?(WzsRz$HXLrmlN!JieKQCwK#f4kIBccAn5@cwBNZ^+QfX zbVV`?v46{-JL31FVzp3BweXx%BPE+Csce*Z)0Rb#;uyy3zzoq!6s ziogXOFDlR}`-w6|w^UijC!pz8zR3orEcC}bkq(FvGh_aiy41Rn$K8EAuWEzW{{H8; z_wKy=;JbHz`j?+wG=9C+Z2b8A`#=8r{p+tDG~iYHvyOWnbUKHfD<=3P0%#p*jHMGM zhu)|onK(;@;yN^D5a__A9;?2fh<9WULLw)btdJUeN&E{ScA8O6oUai)^$2aOV f{c7(2{86p8*SM=j8~NxjYV-q`-q?r1>c;;A3HeGu literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/61b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro b/warehouse/test_ns.db/target/metadata/61b30373-a89a-44a1-bcee-d854aeb33acb-m0.avro deleted file mode 100644 index a77b3907508c4f1a75caf4334462dd8969f15466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`Ky^rHW6u=!{wAuo#5Flu-7`aY1{@B}mP@TlBI0=^HZVw5qf;F}$yS{a7Gam0M zoYGQKQc)oadj0^ADAZQ)YQfXqT6)X)`=^eHVwW~JTZMMLC7K;$}!`pIG zFpm2gPVc6ai%^6~+|E+wH&2H~eFSFe=G{@k$5ga08P8yY%#HK0$M}LZ&Zc5VVZ_{Qt?YwMWg~GH z6)YHQ&jsGp1v4iu2(p}tZPE+KF!6z(aRhpa3I>9X91!$2c`dW0)UeTR%Jf*$ zbz=`;P!?&xEz`#B6oelY`AE>wMC572T58*rcr;@H0VLv_A#0Vn1T(jeM5UhVCpjb$ z2rrTzd}x`KuvSSj*M2P1fFvWLBxEF1%8+qgg`}Q^pD{O#U2h`TVlG=|HI7t)EVp@* z2pSQTK~M&&Q8H@j=_gS>j$NFwEWHP2&uT@P^z+E4oYM(zJrryVwGQe?QCQ}6sc^!D zWp&+4%j%V^a7Cq9T`(!DkbtFWfvVN5S$;{QTxMvoq}YGe6IO3JMAt{jS?JT~L>@oH z7}M044q?1rxNtya;rld27b!X<42VeJgFq!qh>sx5F6!=*2C0BpM%f41Geft4vJWV2 zvjlW|l>OVIw9Rd!l)2M_!1SX$fVv?M4?^RB9Mj`ETRc|Wb%3o(p?i72wuON0%>moi z27vAD0Y+X#@`4z~3RN>Frtw;sPIsHp>hu7n)88DX)2ms3qr`Xm+k}ao3)TaOOGUM; z+Nwg-@kYrN^sXLohZYb>Rtu7SZ<}cCLyXgIspQs$z&>1$cIByKcelq@vLcdI9b%rQ zFNV0)gUQBf>byiXwg0D@u7v1pv7Aa)t02Om>W-P9*yxl&GHd9aO5;{mOhef^gdly< z(fAYfxb{c2-5d zp<1i8=lByeK~N8xpu&z?z{3TC!i))Ac$O`^VX7`zcz8PtkMITz9Y#iS>^z~*2$*1e z9L9|BNTlOt>J1PmJjs@>1(30rPk9ywawx z{rbyC#y{Wu^~sNKec$~1cm4W~u7COO55Il&^>;sgtZCYx4czgd)7kG_QO?d2K-Ph_ zSh#VvA9x)>`56-(jP{OcT2{xhOsiwcFB2cjgmHMU;aM%hukb`;R|-`rt&reqGIZhHt_6u>FQFgz4Sffk)I95_oBKOD<)rT~r60I8EE&SVJ0kvv(fDUv-NZK#2k z0`1TO1-kW5Xs0ge+%;&I{tI0TqeFoX-TL00NRgDH+KL2QqE2`3z5Bh7d-ufqw6*(A z=8xEz{(0x6Atos^j*Lw3+!sdM7=|ngGUMp%r4a_kk<~V0I>s3Z4;Xi0tX-^$lK33H zarRjrat4z@2Aj6kLc6grpn}bp&b}>Q>NJ*06HBdNX}C=9plzsKbmp zk(+{X+}B`wH>F&JB23~=mNI|qY+%$!V5V-~9VUECMdy<745sS#uAjsLMDBp`^aFay zlRc&I+xrDZ0x*04Wwc2Nk^o7CkN{;W@~r$-T1rfqth_*sFc!wNO)4v5nr5R!NbobE zYMC`(c4owR6rot@k^wvfY)JD+7)Jzus*41FvDjyBoR2-m8`e1MiXDa#bF-DQ_t%w; z#9dU-FxH+6yr~OjPHYIWoQiGI3&=3>fuC^nbGmEc~3gVeEPn!J4^jnbkN_1+v`c zX(DJuPzFI6s7A@CrKg`n`8alQ#-j8?Fnd-j%A}u1KINQFaO^vI+@Uni^ECUd{4L8s#!WizUVWtDdk9rvr3-l$?h?jZWq9 zLyR#^jp+c!>xBykR2F_rQ*@D{L&AWF1pW}HWC`&RgxN*iUD6;G5Q`}LAbV!$22l0^ zrEQjgZjZ8mdz7}hX_PW|+7Ot2lm}2ZJN-?<#Lfll0mP-E zT2^gUA?kReq1~3tVX-^)UkV;V=Gw^$*K-9 zPt!L;+~~n%V>NZ&qMF+OQ%#pbbT(K{C97o+;ZSwQOi*le${?9F^iHL5D=Vga)M>l#~~cRUUuzA@r pmb z;h4@q1zbhof{qsz=#;}unxa~&qT}PxbW7h917jM8LzW2_#PEqReP3Q`{Ul)i4xU%q zZ~ugU{A>RB(>G6EJ-)nt^|Su#9bNzW%U{0u`@8G!|7vNPcHP1)A9cHX-7Cu3C;?_& z=!=CLXM2Iy6_lSd(Zz7@nwDjDP1CgC$uzt051$r%!&k@b9M~RZeaGqS_gK)`A2Pe+ zStjeSd$wn>1KM|3us6GH?LK|*?2{J{PxaUD>D&76t*swg+h4Ubc-FVz4Ii{EZClgi dWK`4j9hlbK_kR|IP(c6y diff --git a/warehouse/test_ns.db/target/metadata/65f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro b/warehouse/test_ns.db/target/metadata/65f73aa1-e388-47f7-ad3c-0e0547345595-m0.avro deleted file mode 100644 index f0fd4e0160303f9052a21b96a216eeac9a94e577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky^rHW6u=$dYPAJgA%Uo_7+IoAHvZUbK7isRZpBKl9QPrLRb)-<$;PZ>oAG#8 z;gl9SBq}QCkPuX~G<4{66@LLjqC*t$AMoBx?AT5&?CvFsB6~9P-kab1m^UAeK56W~ zl6n(1rGMRdYKU3FjDe8~o_WG(8smV4ergQPo*IE~46LRR(J9V|xzD%@W6gX`7)R&u z#@VM?z!^*i8EoEE3+>uMp9;2Ix_Dc^)Tu3%CKg)3(qNt5Vbf5%YN6d`6U=9k2w*?F zB{v1*xUb>-ZbG>TL=Z=eLEkq?%su=e5IX?0<~KXB6LJ-Z2|0d5WR$ULTuAxKs1*&R$iTdo*-~h@)ozOP zSkZND4`5K{X}~Sh#_i;UALRK+(9uL>NywUN+mwuG%6tMy#DpPhmAM2nw~9oip6kUK zBoPSDlOB9%nWeB+NwU;_D${_(W1=LaBv8tbaaDz+o(7*WH;CNPOt5+`TV^?qRDmqE z`8XCdBq)QR3{<0JRMOLn!)zM4IAc|M56oWFiX!Qkkxx0NGu(P0*c56V)RDZfEbCJ4 zgbT~+x|f#KD_G%*Qn9*VQdTYjOH+-i)vZ{5NyAKLXuc%hf7ugOZ$3oVhw*vf(eSZ6 zeuy!pi7_9-c(rihfXc!TXo4N-6aiD0kMj*53(1AZUJQ< zP}*hz=;kQmoOTN(H!cMB(Pp%3PaV6vJ+_h+k*ul^ zvm|*j#H}7oHda&TC90|YKh<5GoW`;o_IiEJA|JjunAQ5cV^E=-d!5NY|{3iZnlqG&Ey$fj@&%8ka( zD(^Q`Yqjwle}pCoI)WxBx1$p9aDkvOV+I$VRSU0~sx=FbZf4;z-hiRQNJ)mBC-fOU z6O2!Th!GxNk=#P;-->4+bPBj8Ky#NK)S$;4m>0L_YV|o>cS_0&$R>}UybHZ*!dZ$p zTsWpvPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`M{J$!I-7O1u=YP%wLz6S}*pQw}zz;rXJKCw7S*zVH74*W^o- diff --git a/warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m0.avro b/warehouse/test_ns.db/target/metadata/668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro similarity index 93% rename from warehouse/test_ns.db/target/metadata/14c93e86-c022-49c4-bc6f-35621c840a05-m0.avro rename to warehouse/test_ns.db/target/metadata/668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro index b4ee631a7affd62a5aa60fde58ff0a1825334245..92e49bf712de673d6be0543e7c6481c057a2f1d3 100644 GIT binary patch delta 203 zcmdm@v_)xyu7I3!7uWT;dp8cGnKIuf$F4uG-t)ZRcHEtZsnWoEnr%2Xkegk z00jDmhK2?}1mPLz8t9stS)>`68e8fbq@<+jnxrNf=~^UPn&_HZBwC~8Lr)7I>F4u)YNk4)2jnpmSj!#7BHWLd$;*2c&HWHYe<2@r#Ug@KKM0n8L&Vt@b^ V4)&uS3=C{cPLtUL9I<~RLyUJF% z!3n8?D_71){11ST$_cJqI9L1!2#NP*V#jvUu$v}|B6~9P-kab1m^Yt}pVbfEO6&=r zvR8MWYho60ZKx$8PHmyJG}q(4lW4>9=bGneL)y{;HpLlX?C{uvu~xRm4}+)h7V|Gs zFXk{AWbk=QEi@_%9VYm4>EdnuQnRvDnwV<^OTBe^M=ee5s*QH*Eij)4!h`+9ZMi8J z$9;|FcOw=HPk3R_P9knM&qrE$1ZFn$yKWdynP^|~IDx4RCB0V4Ooc=jH1y6 zkzRCn7R$M=k3*YbV3H?~PRNxfCgk`rkx|CWaUta^qgFH&A_MbUW=pPNtKH=3v7+n7 z9>Ac?(jca~f!oOlKg{xxpreUMBcHd_wiy|-ggXR~hzUp5Dsu^DZW)P6JV>dYNwU;_D${_3E>RK^;wfdwxU51_PrPexd4V;a30}=*su$x(707&>XQ5y| zK^X*Ppc*Bkl%96zr_;c~8LQI!VD_R`z9v%(dHVs*i#tV{xyrV3TsD_MTY{8VOWwj|qs(G#>kAEE30@Tq4r|4be~M4Pfm zn~z|;T)1#RW#K0*LKi7I#B+!U;fp{eONbB0OD@Xpk_M@OSVcJi*$YE=fN}sR4Lt{R zdz6FQqcrqgqm;SRg21%>)PcGo4-diuhn%w0GFv=WtWAJvq0qfKV1puHV|%~`-2$+& zJHW_`NL~=bSfNVh1T5GH)9mdsTFpMdGzZ(mH2Wp%ZolEs2#+}kBuqlRp zJ(vuvrsf+|Q{#WC=~{^94$G-zwGJX2s@9YXhK)`hB#VaLEHrL;#nhCoBM8#h9gPnH zJDx?dZ3OWo6Hmr|I4-*|iF{93q3b4GtR#Y2=;dbE;+0~4`X1S-=53W=V;w2DK8+KJbv;a^r}(J6TIQVF`a-4 zxQf699WN@-DSL@DMYU8}#}`A>Eq#*>Oj+Q$JP{U%iD%mUU3sasLxp!0=ZeLA5(2Xh^u@vo zl0#?Q5iEYnMF+#Zqw7@fQ2f#1)1edxD3xz|TW@!}F6;HE+wOIbdhH{V8|}W^@3vj8 z5AJd5*m}=AT->$}9^QZS*^>un%~$U<_8NcHn?Kg~zNy#Xx!G*)HSwX=tnJlm4SakX iO~p@h|L2ctwY|oDIoeQzF#3xe{Q#yn_F=HP@BaW_^i0wK diff --git a/warehouse/test_ns.db/target/metadata/672d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro b/warehouse/test_ns.db/target/metadata/672d0e3d-5c91-43a8-ac17-9e5ddcd2b938-m0.avro deleted file mode 100644 index 65df2497c5b61802e755c255b82c74f0bcdea415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`Ky^rHW6u^^Qv|1!sA%Uo_7`a5r#vi+z4Pe$zi~|<>i7_~PVg$Z1uv$h$r#OQPp9vSnTG^VAM~~r6 zuusxJFqjN7*u13|+LeVqm2A0m@wR%YQ(3A^%(a50!79DOmZ5jmM!U@xn9m{^zz`gN=%rny+Dj0lE%D63M(QSClf9e_=Qlt z%vvrxGomyMQLJ*w5FUIsrfDdR0l~k@BEerQ@|YW?(-9LDYn)BRj)Rc7$y(V5o61Jw zE-I)PYcB;}*98kFRs>m2!8YXuWXL_>XB>lGqJx2;BL@V1-y&Ri_(LFe0BFT;ibhQ3 zq^ig)x;u;IT-W>DqZpXv(Sv*BGLRE;{E(<9W97I|^0iS{G!!BO^IBy~u3@9yL7An2uuL1blM%k3U zB@GG6ASeUXXc?vS^mv#~BNt~}mEHrh7quc!`eo!(A?OUZ9!NHYS_gF`D=f>plsVzt zvbyetW%Y7axS~+3&Y6;xNx;%np=xzYmS4~?RT-Ks$@X9Lgw>l5(e)vJ9C$Q5RmTr8 zrZhI@Ll`d?E*#KV_yLX4MVbx?d?Gn~5vXDb@!;p>M z%mLjTW&h?VZFAcwRqnJPFugGKp>C+dgV4w)C-kJu7LOHo9bl_a=w2MKZ6RQLbHKK> z0bqN3fRPtbydZ|LLY2&kXtWll)7@sYIz52t^f!m;^h(xWEAgHFHeq7tg7pC6Qd7;V zwyqFmydl4Y-gN}rp#=nz#e!rXZWFD2gmK!!Ji3{M$9MyV4kIBccAn5@_)Ib} z4I)Maza*K3*uUk^KIoKiO@QVu*{?w70+{Ew=W_KqSanLO3&=W;-+LE&)mX3uZ@6$w zC!hkZB5*;+iwbngL8462EmhX>323^NZ?b_Yje;>tqzhui%$UEfF0~%_nYWAQRn7nA zrO*EP@#`Owr@P<2^7mJ7H-5R*Xng+t?|=UG?{~kxS*z9ls^g9aoz8yek_tBAfUE;; zv2>$k-yd}(6_1(hV6=BE%Q6c;Ccc|6Wa6i7wvW2DZ!*VkA9{VOec;eun|fBa-Diis z@A>wq@AUQ;m#w|~cOHE7=qd%+BcVK#B7Y3`_{tpH9Ol|-G diff --git a/warehouse/test_ns.db/target/metadata/6882678a-6ff9-4924-958c-22b926e25638-m0.avro b/warehouse/test_ns.db/target/metadata/6882678a-6ff9-4924-958c-22b926e25638-m0.avro deleted file mode 100644 index 5930533c15997c3e4caf9abc3cb6339bed5b34b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPjBNy6u@1#sw#mhBoGI*LL;A(#(&!U;{t-MR0+zm+dWmmn%I+#w~lSb<5pqG zl_Li@z(?RC@DcX15)y(BfH5z!tbkt&eIF)w04 zLxM60%0M+rMkPJHILs!Iiz}9;cfss=ttgUy5&4vJI>n<0f=!^-K^@5p%c3sjPPnqH zj(crc-GUYFC>5(KCS~Okur$@ETAhmJ*EGyzhUQ!H^Orqgb!P)~eHcFpJQ`le>xUQ< zni#VI%vTE+PN*#Wj3($JMTZ1F5i$HDP{|VF!w=G{s=K5?Dj=3o_CWUB&@G_s0ZQ8} z0NovB@9rpVbK59o?ld4Uy)g5kZph1n(8wp}^t{RzuN8M4V5?Nkzm@3kW331<5|yCR)3VaoQ=A+_@0g?e%C^-a2+?du$~uB3V@-W=ZmD zh+DmwY^|eAl!H~N|{(n1gF%?73voqMA2NZkWJtjlpBqmRo-u? z)@toN{s>JFbO=pQZbv2H;Q>Km#S|Vq%NE`;RcjWu?`GjCzJQ^_NJ)mBC-fOU6O2!S zh!Gy&klaG---@vhIt4rvpt(zrYS3d2%!}7^wfY>dx+UcUWSz&)K7n2};Vi`$E?m0-bV@N>fxzm3Mp`nr`Wvd}2bQV8l}4f*3wEX79*Htrz>uJHY!&`|-U$ z|N7^{H;zw!{~^2j()mMwzN_os|Mu@MFMoRR;u}rV{@%e8_gk%_)(z!s90Rfzw8g@W z(j$M^5|lq-qJ`1kGEK{BS*B^i2tF(vTBaqxnN73V?sn~Vr%Rjd(Wuuv?%Bu9-bvSM z+V-$#x0!v?cDhIN$JXJ4j~;&U`2L0d{B3<-|8-~Y=bim;cQhF5d+>n+ZBN_RG&y{0 c7fi*!y@U79G;Lr17#FOV)pY#;mer5_AM=DsDF6Tf diff --git a/warehouse/test_ns.db/target/metadata/6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro b/warehouse/test_ns.db/target/metadata/6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf-m0.avro deleted file mode 100644 index b0ffe0f20030087deb4e836677a9ef0aed2d1df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KOK&4Z5P)s373F{;BoL=PG;_s{=aIw@PK(%xl^`tH>?yKF?U{Bwn|aaGlgO-m zKte(S3324gjpP0Zka+w7Zoq}Z3UPoxKvlPAJTvy1#A_>>jN9E+)n7fj`oqza`ra#v zGhqRJe&?wsrZLk7S|WJr2(6`!J?6WKHaLH(d9F4vT3Sd0oDp%CaT~^3*&06zFW?(z zAEzE?Fd1a9SxYT6D+^sJ*kbAY+v=rOWvMhV*9w+;tMm?An%Y$x?bcghJ`05h`{8Z5 zDHz9n4QF>_%7rJqC~PM&bDHNvtvmuV8~WXG!~-hYSBxhxwPEf#Q7Ayy+JHto-h6A9q7Rf;pAgK@%piD)Y9SUE1Fd}Y*j3ZSb^KG6* zg8Bqy5R`#xl#Eh(I+33Sp^Y<^rT4(>d9BEkei8YUb2`PXdx8Z}>!6Ngg=JBfGACRb zM%TVFj9$(PR}_lXC6lr;30RscRE=)Q@+<16GDEW^+5U^3FnY5gy55g2Jcs&c^7tWI zKx1t-gz<9W!U2_qAJ7yFIp&6_KpU5Ysq* zF~qGNOeR)S>m{nG`9IZkB}8kBLI0a@qq2k%0!8grK54Hu5- z1XRFP1TN@!QGrg`OQb2PrOG-!4o$c8O*RnF&>OQv*dT^awb|?PQtL!6b9V8(s=f8i zn}2Kem%o1Y`KQmq(|`YL{Cua;`0lZ-4u#UaQsqs^gXioz8yensPRYfLRCn zVqu5LzB}p&$}gDcV7PY--O%Bo!vj9>(BYqMbYMi++j{%Rar8s$khU#KY5TzG>FvJ7 z^tN+2(z_#h+D_x19BrsU82v$xz5~-6yD(VY_kSY8PBH)h diff --git a/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m0.avro b/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m0.avro deleted file mode 100644 index 2bebb8f8a2eab0eb9677ec191e3fe9330444e0c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u=#~s(L^bViBi33_d4~KhiYGo)2*IZWUIM zIB^920M3Xj7w#Z|(4P1M;Km7Yf)h91n~5De$%ZzYsI{EQ%zJNs?_=IP96YNXyq0<+ zHl}~>JU7H7VMfnL115iet6d(zZR0s)BrXov=U!|qQgvrVa#0Vl`OzWhyBBDt;iiHF}6RMV3 z^JV8ol!YORl`iSSi_eBM3x&}m_)}FR_=`mzbE9lLV0^(EXH&7mAY^X3R(5Ms*+|?) z1q;U7bAdN?!OV#Zf-I+GoAd%Qj6L9IoPb`Uf`OnTdjx%7Co%W%K_GSj=z`xQjf9HP zq9U{G?mU(YT_46C#lR#_A3q@1ff$jKCqzaWtHyKx9Ynd&DhK+Vpq{ou3 z8+!nQGEW0;nKo`GC;TYSM}m$fB1=M6SKFp!KvU)uKq5vAS*y$?n7LIXD)n41&LD|E zc%Jm&L(43MwMvq?_EVV#BpwnaAtixQhK#E!B=t1-l(|9V4km&v=CWm$<46_AVw-2N zpdmpS1ZAKaC8Ls_UL0oQ$i*4U(mP=GtX33BKaYIMIi29v1Hr~n>!6P0g=Josawl9` z*0FnKS)GCvt|%3&OD1LI60kHaP_>RLmS52@lNp*X$@gFOgw>h$(e+_`5qLB_lgAG+ z#xyaeeHgD6E*wx<_z_LeMT!myd?I4_L!go+#D^cGmsNL3gH%8)qwIq0nW0-i*#(rg zSpd2{%I@t^+UB-V%G{|#V0vNZL*0;v2ceNqPU&ftEgmcGI>1(`(7iff+d{zh=74Q$ z1Hkt703$CVc|iU036)7>1V)2Ud0qr`W*+k}ao3)TaOOGUM) z+NwfS@rLm=^sWQo4lN*%EEgpEXq#y5Hpc03q2$(uz;3TcyYkerkGIEGvLcdI6=Ieo zFNe6*gUQBf>bycVwg0D@u7v1pv7Aa)t02Om>W-P9*yt2NGHd9aQsY)sOheh)hai2~ z(Re@d_#}~SBZw!tcrpm%LDhw65(dJJhr^VKr9^N_y!7H@dxigubOa{;tdy$ z=@eAJRRk{Rcu|2)IY^}`s-?<1J`PQ{^i4i6rcp3tsc=CIpBU3O<)zk(edg`sd8Ix3 z;m12yZ-4n>=j%6q{_2|#9_lZ4bp5x_zW@7=e}Dh(pPHs=f7Niyy=L>Uc}+PR#lWly zeX($(^w1wP1?3k^G%?(pmStM-u*@dBz{4_4{BN50X_$?+?;Len)={I?WnQDzYSRX_ z+g4*R99o{)>Kxn7;Ba=^I(YQX#+McG# f*VlD06+gTCKfSMMd-}ULVa2GX>-#Wmao_&|j+aV+ diff --git a/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m1.avro b/warehouse/test_ns.db/target/metadata/6d358415-49ec-446a-a261-bff1c048723b-m1.avro deleted file mode 100644 index 73258991fe5db78717b286e3b6f666aec284690b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`K&2QsG6u^^gRP}%=BoL<_Mm{HvKicMFPm6XdR$9uk+dWmm8rze`)UnNY+$y`u zb%i(}{sE3iAP(#w0XJ@3;D$J^khpT>y_wjtoor~cNt?)-%)IyJ_de#$C(h^fy>}9K z%qH~pofn#z#!MS%iQuU#w3asVS>Pqw;QWQ=d)mNgX(659jEH-T+c4J3)&x;_0pB?L zBK0|g$smKxT56$LS?E#07E9;fRxhijc<1I1&>4T&P-R zES8;XVHyM|R=Q*e4;~xQG!WW=;7?_d;4c=s%ns9u!+6CSYg4f!KVWvUR`%hhvXQur z3M$5$3xPLv!Q6=zL55YZO?m+tMlSHvPCzeF!9dWF1A@M9k%+taK_GSjXvJ@mMoh)H zsz@)oJB#I9*Q3a#7?|YQlZWKm7h`hrl*lM!<+zaYl~GF?3Xy?%Ewd%pu+eVv^jOk$ zV-H|ZW@*3;-Nfx=gdb=5NYK$lq;bGnYTJ}JG+`bABx1~vwaQ$AnOjDpQqOjy6p{#p zXGsq}H1tAPt0Y-yKb2`fq7hLN65=am$hfRRQcwKn%=SaunF?0TWkWB|_rUCVt;myp5&4vJI>oK~f=!^-K^@5o%c3r2PPjCT zu6<<~y_^-UC={zpCS_$3uryVu8r_oRS2RdvhGt8${TDr9^kzeJeGpyvE)CA)@k6u; zjkVbj#><5Z2UHe*Ok;GBqCsALK8;rYpB*_J$cso`5W`rZO6G(#Tnp3cZZle~9>BEvo5QqvCF^gL_*Q?LFtKyNdH`{$sOD8$ zRfsa)Ai9R$)dB9%0s_fmK{AiFiPk*EIPK<2Ze0k>quW7#%>c#?@HP7pa|7bbDw3p*N(5+;@s!7B7}x%x#1kvA7CU=z3oWkzFXmGv8{ zwOV_QKSdJ+b)X5#>?j31Tp%dSn8Jl;*}@y9YQ@6i+gW&mH(=;65|U!)34Mmg1mhDw zWQ0f8B(o6vxBS@yodT{2(A*^l73dKM=K1ZpTzw8#os#kbvd-fV??bN|bC%!@7mn!! zRKQgPF6eksflk>^q$#SU$~ry{O}F$-HZY-~KVpfnK@6X2v-jnt){Q*o?&5h>`}XKK z{oZ-`!%zP_r}uyVali5Foo3^&Kfe0y%kN(O`&k2CwZH4Q=Rv1)(7C3ZjU#~8fyP+a zVRGO(9YOg86CI5Aj$!CV2j1BSKI$-}MbU;;4}(%-g-_8`Tk*shjtQF&|UWxMnZAZkfTTi5fHDQ(ULZyg31eC(r4Kq=BEerQ@|YWC;{oFf);ODr9R?wD)3vf&o61Jw zE-F|s)}9NztqW#OTo7bACEKJIkYVfrKjQ@S5)}*t9oZx3`#OoahYtd=13(x2CTS#8 zj20D{Wq0SXT%UYtP^ zf$%)(!H1Sv3Tu@lbM0p`4M;pBNY-@CkE+$Q?`sTg+w4EXR>5ki|C7 zV?jfLG6>2*HA+S$J-s;0#*vFNmZf*V>{+cSl71fflyf@4tp|dQq1Hhi$qUQ8F6BGz6?AXp3CEh z7-O0k(>{z>3l|QkEPS6P=psdj1U?Zld=aQ*3Gv|v=~dNT(jXNO%P6}bduHesP<8>O zZ5Dv;jl zRa;evD&8=@f!=ih+@S>olI4PAA8iw@eT;G1E|lE45ZK4-(XKpo?DqE9N>)U&szS_? z`*FGVDB|&+wUG zd>llK@c4%07GnQay!)V2z%>DyyYz4Yddz`&aeJ;-pVq2VQeHsTdHnP}=v5QWQoP~9 zF`a@6xQf699WN@-DF>-EMYU9U$H$@RmcGdc#xx3sEEO(@;S*zePhM)h*k|58o>$sW z-A|vt_4ObB{QT#=AOC&$=0yK>N7tW!_tp1beEY-iU)D5D`@4o)?lqf-%^S+uCs@YeNX?bw);(O@3Wc)@A@u0@I~9z_B2ht ezPbaZ;%9gNjZ;nA)8EAjD@HY4--l_7`~D9H`AdfY diff --git a/warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro b/warehouse/test_ns.db/target/metadata/6fca3419-f1ca-4149-bf5c-6d400c0c1c64-m0.avro deleted file mode 100644 index 301de8de5f3e6b0ed4630252c094132eba43d088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&5zqe6u=#KS#2e>LIQE>VdQhN@kg57gcGP;wNhD1yFIOfHL)ifcOBb|$GZwu zPDn^xxN_#kf52Z*3H8LC14kr;5GO7O!Fw~YV>@ZsO%p|yGnsks&F_88n@@(%8~bmk z-k443Z?|3;Vwy0cZ=`}}o-mrmC}5$V8vU~uM&KKLt7$}Zf-_?7Gw#AzGhY+N(K-C$ z?DH((3?_pNHfySdc5R_g1zRkg|60A&sV$Wz7Fxm5V3poM(@?u=q1|Q^%x94ZU_ZPi zHwELkufgn2Lb(V;5J#;vVcyQ!z^IPEOx?UQiur_!)+OU9Ox5juFOCF=+ymq3`}C5> z2TI{LALJMb!0-T+(If>(0wfhe0+gx9(&ArfDKTNP@&Yk}NEovwDXoZTl8$2`!Ow-N zW!7TZnGt1Sh+?Hn2Jqsu5zRtj^a=h|6$$=gk;mL9n+zGRS>tRfb`*rnP1nlqY$_Xx zyQrXMti2F;T^G!qSQBJ9CEKJIkYVfrKjRqm5)}*t9oZ-7`zDFGhYtd=13+tjlQa@4 z#&tzz+1+_87rGwB9>u^U&z?LaSAiIl4d| zu4{V$gECJ8ZkaZ2Cnx+k&qsoeCL&8h)>PZ3WJpuy6F?%y3|XtpC78KYBr5e>FU}x| zKzN??;6uwSg|$kOh4vGf1|%L4B_Sn&QihDHDkSwZ_=34X;W$8y?_PkaUNxz7E$~m3l)&s#NQ0t(MK@I|1KCB%mxq!(3pNrO~CETim!?75*^K-mM7 zwpjqWIm+J6QQGFVQOewDLSTAf=0n|(hX1`7xb}m>CATAZv zqH3!OQNyF0zk;kWrY#Tv5$;Fdl7!Rv1Op`DWZaf;LOe`gWQ|jdk^@|RoXf9aDCU6bPjmFL@ z?>AIywe}o;iY5p;geEArqZ06NfuJyB3KyPb3$K}~H4D2pv+x*iz|di&B*V@V`V5~5 z#wS6<2#>EwZXxz>#k&tW1zZ!Lxl0df&|?nFi`#Rx`gB&ElJWww&f^d7L9d!{mf{T; zj_DLsz*Ph;=y*|qPB}=WDXOK)J3bCgxAaXuFriT}VySRJ44)da_vEG4i+$$p;d!O~ z`TXLo=`RmH`}K$0fBg0L$s_&MEnR>0?U(<2{qJ`#e{N`+_Im@j+;6uJ+Et4sZCR$(Hcfa~@Wcm>m^fsbEwj}fdDQ7xz1GO`Xscs&dadE; zuGi}N9ngpNd z5-;AxKfpgi5X3*gy?EHW;9(Kn!yrtx)qGDI7!56?6I>B-k8vC38rhy83LnEa z&b~~2&R{XfV6%qWXqGm5RItU?`M333tM*hgxw4R@U^}qlizaXkId&z|xv|;6|YUk^5jgeV<

OAWJ(!8YkmONbqx^ zYMZgxcCLkK5TID;k|7K{Hlk@Dv;o1NiXy>ZEOeP2rW1$pk~P-0Vn=?!>|~?t_O`N- zxQz-*#+nO(*LA_%i6udXwPc(00y2zT;HMpfUZR45pd$waecvDvckv&A*a4s=zeyS~ z72~oZec9bvEa$pDi(HCKeQ6j+IV;?;RIDzTl$A-q(o~{q^a_?=(jb)?nr+F>zw8O)Xf{OG2hn5SrNNoJ zeuy@qu{ImRe6euhgv!FtX^bvXbcpW}5y2kE;!ZCn6RWB92G!L3pK7`mqP4?vDp{?A2$!loVS-|#lLyJXp|_SAx4dF%%GMzS z>Fch>yP?acv1}VbJjuipCy1P)3zInTg&mDX2@@-cU@i4>x%x#1kvA7CU=w%-WkzFX zmGv8{wc2=(KSUD*b)X5#>?j00JRm5nn8Jf+)xvA0YRSUx%`7~|7cg`f2}!Z@gg(P# zg7JwTGQy)Pl39rTTR!$cr+{YyG^=FYbt8|t`*>ef zzW(dy=fD4P`rDsxojkk$Ht_6u>FPFgz4SfPPFF4xA;6AF?H@Q-H>(f!0kOXEFrhNS-X#6v-ZsHq=0C z$8P-(GIa0S?m?G!=+L2S3pD*ervlyj-knI1w4&OI3|SygckjLXy^nkMk^4zw_l?vW zvk859@0l*93DXC9DtP7zy`_%=7W%0^IDe)GzCJKpdPFBUBj!Hi4ve+(HDMfGz#C_u zW&vj~8Dy|oOD(i&3wg}~doVD7}4Ak!|{CcS_RV-NW0N1&IeU?Awo0YTrlNX$L_A`m+OwB|QSBcWnk zS7emkoyT&a>x0;%7?|Yg=`pzu#F!jCAu`HXH7=xlWz-D~rO3d%mf2EhSZg;$dfd=; zYY$*h=4rr9!@}+4gdgYmNYK$lWJ$uYNt0Y-yKapub;t^32QW7X-$hfLPQcr`=m=i>fI~A;+%cfC|BUK=aZJxz~ zh6H60l!0oLj7oZXahOda2WQ-r-UqYiwW3J+MdVY?=@hpf2sVLQ2X!PbEQ`97JK@qa zd(M?<_6t_HqExIdnUs}Fz|vHsYW6CYU(qm=8JaK2_h0se*`E#3^V`Z#2#tJlLQkq}@mO(I0X9p8?)3p%CIYtB2W**Z z0Jb&<7ADOHUoEw>h?w6_Ko}5VItC zHN=e`OcqvC`!%Ym^*_~gDMWjNci>dMw31nH}e z#z&FIr-^JEK|IOD6E}?AsteO341^PpMky0F62UI@a)tUu2T?Q^EMyb72IWR$XO;IG zs|>06QH?E_iE5%4$O<&bG7<(mz|RG0a(}xrPhmm=I!8lrTugN z^y_cizx?|5^Kbq<{{HQk&F}6tn}7ZE<-foG`26SJ8k(m4(ZDSaI-R}FHRWs^1G5hF z#lnfwJ>TsJ$}gDcV7PY-(=Fz^+gO|t_phS4_KJ!{_``TJ&@xxUfvy0q7( z-F>e;>UU|^8riPDZ|u!)Tf2`Ro__rF(OL7wo6YU!4~?y_8rz>YGD*kQlym(*Jwwn)e!je&~+1!C?^?m;b79mkP diff --git a/warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m0.avro b/warehouse/test_ns.db/target/metadata/73fe0557-72f8-4571-861f-1e38db10fcab-m0.avro deleted file mode 100644 index 524f6fcd29b0ed6abf0c0a239f4c25d62a08c76e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@0?RaFR8NT5CKVdNu98h^CS2Pe>O#Y#|?-R`N1tcg9|m^!u@k6VRR zBu*d>Aa48%ATBHZ0}e=ggEJ@2EB*-Hn~5FU$%ZzYD2nXK%zJNs?_=J4Hu_@c;O)#C zvk855=eZ%KDKiE}CV1`%qh$mki~P(OTs${I-xydeBc>Cak#L`J7sgt}nkb2%!5e2^ z<{@V=8Dy|oOD(h;3wiYJFk z;SV1a7zx1e0F==pB}f7!6+!}(smQbPUuh{ZVY2c9F~V3FvlgkWh-sRQ6CuIRg{o!N zV%dce=TU@WrAvnJ;In|{kuU}X|Eh}wf3etOZk$g>j5n-tHWeF$5p%P(vX3^Ejl^A4 z&@k3s2)wBa=1yz~vYd)-(hJBi@qnLk3VMkO27-S8;j|(YZ8MUOL5*e7+GFwUw8||h{k0o6< z_5cQDkp|o{ZQM>l_)(FM1RYI8o<^*twoS>1X3QsmM2s1-R+&pMbL&V{>bYK$LlS}T zBI&`0mRSjFl_U%8XEF^)5)dUJBcW1;jO!{S^(_2~xnb;%rh+wd*)pqfqzYuY&GSUi zh@cFDGEj|@QAQ z>t0z_uVjTQD#hxONm+#iEKLonR<~yP6^(M4p~aG7|5Z;|z1a|5A0^L1k4ES6_#wuG zrp9atFbWh z2eHSescaiTJSoJJQIw48F3i#>6mAj(852v1;8c3KQvITXD4Powu?bv*3Zt>JD*6r8 zTCF|DpP&hXj-UxD?5G7iTp%dSn8Jl;*}@y9YQw^l+gW&uH(=;6GLmEG34Mmo1mlx1 zW`rl#q_7bCxANHsodT{2(A;H*4d@96=H>0VUVV;Mos#kbvd-fV??bPea+cu@7mn!+ zRKQgPF6eksflfKhq$#SUDmp$6O}F$-F)*QV7_dyZAcjwk*?aO*>m@$(_VK*ZUi>)g z|9bkq`RCuiyt;e;pSSdvcXa*5Z(slZ)3@J!FEma2cL#So=yVP{*Oaqy0?0bh77I7d z4*gL_Q2vaG4n}*&GEJ*vS@2`ZCldzXgKwtUHrrh%VCM00x81daUi;{{YqfhPR?xPX z)AL7`8F+MbIKONiJo@nQ=T9G;>o4Ec_w>JZc7NX4`({UjXMGob@Il+v_B2gCzN3Sw a_}Sh6<6}+R(?7xqD@HY4--l_X~WBvzZq?J&DZ9 z62AcP1Gw=A;KmPt0}|rAhy$D>{s9-Nx;^6=+iMc9oyZ=yyQ`|ddUW+?&WrlNTd6x? zA-%cxQWMjJX+td)JadKC(#Aduyi^;WztntB8yYPwq9M+RxyQH-W37Bm5JwmAjk7N^ zpEH;YGT5x87Me>7Ju28@>HORJrPk6?X=0%jEcMsv9kn#It2WxLx4?WB2_N>u+j3Jd zj{6$T9wd|tU-)sF(D_S8;jSDGX8MUIJ6d9P;GFu7_TkWPuj}=|F z_5cQDo(9~|P25gS_(`6R1RYI8mISP&woQpcQ|1vsA|?!3tIQ>sxm6@8^=voJAc;VD zp7h{DLobE3N|J^4Q<(-N9up-YCB9OIjH@an_0<20*?wd@Q^A&V+0e^zqzYuQ&9hk0 zfS?S5GEj|@QAtlX4ze(^amK3jKA1hP6-Cl7BA;?jr?_=run=k;)RDZfEb3D3giFKd z*;j_qFIeGh&gh~XcBN|q2Go}XS;-6aiD0kMj50J7(X?f~TgP?~xH z=K?`=73ED0h`+cHjOO+ zo4W&yyolrlF^mEN%Q^)M>j;&-xB&#aKEJZ&(b{1-m8{l5ghSO1nV{I{6hSg?=&e%YR#Z$)**bzCecjP` z9Jzd&$hHy0lUzJ;g4n6LFiiqq*ztIrGO>~fR;iaO)Gs=SqPbuJ3*j1+8;zY+-fyVZ zYU4Tn3{4Q!fhH)oqZ06NfuJyB3KyPL3vZdKOBNp8&B7DB0Yit8k_eF3!O3Dk!CXYY<2zu3ovlMT*a7?G5 z0T2^>?p+{Qi&o4S3c5spFo9oz7wBnsPRY0a^zdV_`?> zq33i2_+-naD{JU5%oy(T`?nzg-Jt$~mC h>oxUi?*II8t+v;ABu5*?=r3~gLzv#!hr#8I{|7ZnO49%U diff --git a/warehouse/test_ns.db/target/metadata/7445bf07-cc23-431a-a734-119b9ba5ce66-m0.avro b/warehouse/test_ns.db/target/metadata/7445bf07-cc23-431a-a734-119b9ba5ce66-m0.avro deleted file mode 100644 index 62c9915dd9ac3ea62d233cd8f391ce73122f7b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4403 zcmb`Ky^rHW6u^^QwAunzNFb^!MyAb&KeC%msQ9=QC&6;u?NzJD8rzeNS;scx@vg#M z3L1nc(3R9Qbcp|e3PedsgG5DfqCxxvyf+g&wv!9HxkRhgWHR&Ko8SAGHy=Bn)(>7u z+zFe~=XaiHViq%Ps3n4@uFzWA*k^&4Xv6a-n(t{tqosv(iYp@SF>b?LE87!9;RSr- z?6cJ83>Je7HgBnoW@V#C1zT=id|SWOs%(`e=32p0f1Tb@OH-$6quqK7%x9tS;XJ%8 z4+ZmhuF?E%Ou6udABF8CW^VI*q?Ko2WkbI^j`);{_7&p^ENz$vZWIa-xevzEH|Z6R zI!fU;Z)X?@z;FSS)*?Ab0wfhe0+gvpll)g{DbZoE@&eKPP-ycODeMSooJ=Ai!7qfW zZN_rjxfZ5DfMTUfMlkT$n5Kcyh6H~qiv)kM&}DX*P94T8)>zw$9s2>ZlZ~=_+sa1b zHY%tXYc2)e)CCJCRsR$q+dop<($s&=)Pc6sC7_Bvcj^gOPLcc z4Wn;g8OCwW3U?HW)g_a%G6`6kDpZYr$?_{2q%uRZE!p{to-mH*BXoTbUHC2y&gAt& zv?-0X`3UCAg$pNC7JfuybdjP%e2<6-{t&2S3Gw0i$z|DH(jXNOt0)H`dtvAfP!0g4 zspo)hk8*H(l%~FGlrnc(5SVU|dQdmy1 zbT!@!T|SFt+X&)GCZ0G!ZL4<30WeO%T+9CMdI`6!7qXps->F51v&EZik&C)86Fdi zPyLV)9$k~nLhRr2u?IQ@JQJX~OF9+k5eMe^>$zNgdh2dU`2gAE@%!&XuNrff;0qV7 z=>$~3Qv@F9_)vjP*-xY?s-?<0J`PQ{^i4J~rJ+A&iLgNopK0?qeO0sg zmw)~C>K_MRJbm`o@Be)LwDHTGM&pOCe)|63@4h{+)oOp&@xa4wx6{3*oJ}Gi)`hNE z*kRJ~oUWk!f{88$dsjCMy=&;Yu^8bH=DIq5+IqX+>m52{z2A0S(`xrDgSKhk>a`7H z;0zpk=(3}u&f=|g@ZgE(?^(SD<7TtD*Tg}sS=+1C8aRBd j4yNL#x&QMAwc1|eT{+uOlQ8?MoP7_LH}+w&dg}iGn%zqG diff --git a/warehouse/test_ns.db/target/metadata/767dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro b/warehouse/test_ns.db/target/metadata/767dfbab-4f1e-4dfd-ac6a-07deb840532f-m0.avro deleted file mode 100644 index 13a0f5c2d954bfbe3cd1b10b85631ff6aff10890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`Ky^rHW6u_O_YPAJgA%Uo_7~CMCWaE#$O*SB;leiTp!E)T~RjbGv+vAN{$M%iK zy9%eYloW^p(b3WHCm>OwE$OLf5hVpB@6E)H?c~C4E>UDTlbQG4{NBgB`P}`owf{!u zjoF0$b?>DvrYX~hdM0@83B98SA&dM>AD+L|Lth`79X+NKoRM&!aRgn+s6GM;S(ylSBz&cwQcQtNi0C*9vDyGp;tUP zPzt~Kpuk7~h6kYZ4k?QnB=}cdB>0QP9&_S+;xgW_#@ewAtRwuhK%bfB=s!(iaBBIxKqKJxojHMI8p_&+~!## zXhcv3K^dq<$*85Lmqhs_c5ueB^Z}SXuN7s|FCw3EPN%r_P_PNqI;bN>VOi9r!U>nA z*>|o?b5OFv6_sLj$)v180+yx*RkL5S{E9}o%+O*bJia?h%h)zbnL8Z_OfSlPs2lR|AT;*LDLt*T#bd=;2iU9>y4MG6nF!e09I$0> z0NC0dVB|$4FNk5RP&IR68n1U(zulsQ&+Z*AV^a1a+YaD(t8QJX|0s%$UN3XW7DArfS2&qq|vnf;V93Ffx*3=Lvm=&jjO> zFlK}&*QBrz`?vDl2b}`03DDeS2My>62j=DNxn6w^SDljb0<1k>Ea6k;7>a(}yrPfP)=I!BmrTzHb zi+890zW3qJf3VRH?_av@n|tl{&7a@?_Rsgf{_>HgX@9qH$HQLlpm$9<8z+FQ2W_!% z;_Se8dxG){CVCj{J<~MIo?*blln)a=hH2oCVRVgd|ETW=E_J(yfyugue&BbhcSO5J z-)HXN(0E{5!NL5pwg2Sd(=VPsI&0s&)!uFY-rD)8wfl8TgZK6hJn%)^(RMXWzP{N4 bQ}MI2ck_v+?Y1A{gcYM&yS)d~n%n*laC}QM diff --git a/warehouse/test_ns.db/target/metadata/796b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro b/warehouse/test_ns.db/target/metadata/796b30f2-b5b9-4d82-9b7f-39a0a8276bfa-m0.avro deleted file mode 100644 index 61da0df2357ecb4a2554f7bcd8ea408fa521646f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&2QsG6u^^gRP}%=BoL=%HS#%W{LyWia9YGxtORA*?Ov!NYiv&%Q-3iYw+gG= zI3xHQ_y-UYCy5@0HY@ zu#jHgd9I0R!nC253ZA(_>u6)21zxHR&z@_(rwxsc7SRxA#N1=thOth*CWxbRc;oDo z%;yXygA6w7sD);2p+^NV*c z@bkBFj09k~07~nS0we*F3Lyc?RAg!Kue6ltFj;wlXnrKLS%;KXL^Me!v5?^BLe(;3 zvFuEXvLHaQ(j_B!@YtAUfzXBo|Eh`vf3e7Ac9ew<<27rnO~sD=fZ6F<*$11-M&dRq zs2OW61m4sIb0^jW8CJ=pMyTDI72E9ZD13^a)3HrW6V(#J(f!G0{HNQz32^EvN zBE9VHJeCVx@5L^~z$DL}JR(=Vn2_VAL`E5_#)Xuxj9SuAiVVzanJtBejdoL{$C9oa zdjNwnPXlh~CT=Gu{5a1?f{rF4O9IwW+or^!Df0**5fg^2Rpt`R+$s{4dbS&9kVGIn zPkQj7p_js1CCNhjiA)0$kBO3y5??7p##I%Pdg_15Y(KJ{sbKY7HuQ2FsRCJS^E4JT zASi>N3{<0JRMOLpgDi|}oUttZ2+W?>iX!P3kxx0NQ{1{QSO~Qa>PTK#7Ii6i!i8b< z?MuTrDp=u)Qn9*VQdTYjOH+-i(XUv3NrOygXuc%hf7uhp(QJgS58`v*rNOB@eux&* zM4OFZyjr+$KxN_kG(i_BI>h&gh~bMsB}<48&rdI^?ve(nfLKO30NHaxw}5g0C{4Wp zbbFM8+oLq~ZKIUA(}BQrgUo}vArB8iBafWWlPX(0R_t|vjZ&d|dBCQDfX&STo5lu! z&Fuk3UPSVO7{&@!F(;zYT9{UUo6%|=0ZePKIZW%QV*QO0-x_QaCU!1Z4)+{`{orTAE1BMPGB^h>}&}Vo|Fdq65 zBRsw$xrNxj70({%6mU&|<}Tf@L612wFK*A(>T|H_l#~~cbsm584)m%CXDQxr;h0WA z1zbhof{qsz=#>3bnxa~&yyN50bW7jl10jw4F-wIFV)#^>y)G}cZtO947tgDP^Xuf> zdw>1-$D8-Q`KABSHEsQNr``Jgvmd_u{qKLj`m))APvf5^ZhF}3?f0%IXOkGH^`J8r zc9iaWPESyN&O{FbzGvvVu6}gGFnT(?%OM!n^{(D^J;UjHwBJ22sM|d-&4aFE4F+8{ zxDWNfvmDo;`}6zO-s1;PK797@w0-?rYp3;Rv;B2*=Zj_op4;vAP8%N@?Z!@{(Za`9 hn+^48@BZ{|qp{O^AV*up=+AQWZJ6HLg~9sH{{zk*O&kCK diff --git a/warehouse/test_ns.db/target/metadata/79d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro b/warehouse/test_ns.db/target/metadata/79d7103a-e46f-43fa-ae30-c19fd45e0406-m0.avro deleted file mode 100644 index f86bf262a23bf04d5a647c27d3a2f7f9fa17142c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u{Fosw#mB5{T0Zjm$M^{E=;%a6;@>s>GJ1+dWm0HL)kHw~oh*$F0ID z;?4na;=o_Ar#-@P`7hwaVYN5JfgA75#E$J`Lz_+1TFzwVy*I!2F>k&eKHJ)RKk+Wv zn7-bAZpcZ@jJ}abk$Tc-8l!-Peq!{`pBsU1^sS~5(J{{8!e_#Tv1Ya=>DGMXd@Nr0qANPsexX_Eh{EF~sP)?Oe+5J_X&B!v|bjgw0*75JG@z08^~ zJ2#><3{k9d$pBt_Hlk@LjXuGj$|AvEEb^EerQ;zJ6>FSz#g2lIxyee|opog+aTgU- zjJ4+iZ|j1Y6Dxu&r(m1%0y5+t@H37;FVVq3(2;$DzHbsPJbVy{9ROPKo1zg@d0ACt z7Tul2a<1zu?okX(^7QnW+ywHH96cc_%2+urlzeT}f`&q5U|y?i$u+FCn>;-hblutm z7?fEW2+Oo_I~n1}Sw0eUG?8f>vZmfPB}1App8yhh$&j_qT!NWfMxs;C^>_+N1j4hV z2OnByA*^+h%(b7WG$4FLw1k8NS{X7ft5DRF;5+69kvp77R?TJ0EXI*8koh*xxTGOL z83bjZ8ZD!go*oa=apdBRMd^oN_N-RqNk5N#Dg>S2)&t4LQ0t(MWQAp3mog_@SytD* zwyeXP6|N{0t1G5tWfHJ7Rj69slI7PlOjU+vOS1hJJz*VA2k82cUj!Zv&(!flj4_Rk z=>W#dg$oCC7Cxdex=7O@flnldKLn~+LVWl^a#ePhGDru+BFY}fo*B9Uls!Ocn>nDn zqwL)srEP8+rOKTq1g00JKGY3$cn})-wbHRE5ajB{1Ra;kx zGTxBiK<_#P?$81P$znmW?{5;VeSmS=&6V7_5ZDK+(Jno8?C$2+Dpo|XDnm@;`0Wrk zdNA2oO`UhBruP3-)1?rd4VF{IY8ga0RNXO?6dRp9NM;SaQ)t}sifL$D2N0xhI~pHG zo|wd{Z3OWo6HkUAAC_I1#9<&^J{l!VE+m3e=;dik&C)89tLtjDv^~ z!EZ=rA@*3tHy#Qc*BKbIsp}M z6@d#nUR0n{4iaUGZmF`4Pe9YHe3K1~X%viDB3%$8CdTw*b*c5Z&%9kcuWCQM`Io%< z{^j;(gWf;Uiw}OO|Gr(X|NO^qFMs{()!(PJTJ6mi?zrD>@3(KLV3!<_wV^GRZj|i% z!?vX2g2^^Ud)u^3vu(n&ZQ%p{Ef~Qe__WMcx94}EQKv1|IT*D%&WN@sbIg`!^+tZ@ zJ~KP!!T#*BwfFdo({G+WJZrrEsJ>JGbF1-UYv-q}8oW0ejhzO*)Ec#&TCI++A8v!G h_-X8ZdR(jR)W1}t4Lt~>?>)lN2Qa<93xm~d{|BurN}K=y diff --git a/warehouse/test_ns.db/target/metadata/7b21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro b/warehouse/test_ns.db/target/metadata/7b21d6a8-f503-47ff-9a6b-24d3214a27fc-m0.avro deleted file mode 100644 index 5751159862fd73cd2d770ab23e8573cbc9a6699d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`KPjBNy6u^^gR8<01NFYvo82Owu{*!Iea9Xrmu@aQB+r3al*2Eq+rjBjK<5ppn z6Bon*aaqKnS0p5a#AiV4jqd;_4lBf0fcIu%$9A%z%_fQ>douIho8S90Z$2Jrd;^KkHU5mGpBhr)XF0;v!UPhB0iy_eaUzNQyb=<6NLgq?t=03U3$r* zeWmc5_cDwGU^oCuYmpoz0g?(K0m@XQN&c_2l;|*7d4XttD70CN6jp>ZPR5at;O9cs zGGnpqObgQ>K(W##LwInRN7F!P1A>2*MS{Or=rB7>CnLry)>xa0_56U@$y(XnO=Tl- z8x>THH5USJ>VmlwD}oHGV4L&;GK?JHryYS_qJn{-BL@V1-y#ur@P|O`0MLrxB#oGg zaaECCbaxiZxvmc*hhkuor;i_zD_@Ms(Gw!0jFsa;%2!4$X(&Vn=C#b0T*F4Y$EwGQe?R#+BwDRaVw zVf5@v!|3O%a7Ce5T`(ytlYphELe=P%EWe~dDl;@&lI_3f38Oz7qU(d`+;?bjDvuwc zO=zsmhA>_(TsWYz@FNLGL;O?$81P$znk=?`;#Ud4O@+%az=^5SRz+(XKpo%-;6cN>)U&Dnm@; z_|*`%dN7$-O|93crsn@t)0GgdEtXTsY86B{RP6~96dRp9NahW_RcPGuim54EhY+N% zIvO8_4xh%dZ3OWo6Hi7#G%C9=i34BQk>@2$EG2?f=;dik&C)87>oy zPyCP(9$k^lLhRr2XBTt|xF$ezm+V)dM;w^vx94*8>8?5@oo?>6>g|LPOtUiLgNopK7yr^`BLHRio9gO#mVHkSH&~^D^baZ%!5xoN=y582?T{h~nd(>@vde3Qh-2>L9 zreU=`YB~L`)$4n-w?Dsb?Va3z{K?aYr_GmdH+C9-)|eDhPZI3%7F_94xBlniZc>7-kXUX+eyQ2n(QjFCo}K8`Mr;M^U3J5`oUX? zJ7H7$>eh2z%wnbw^hEH~6?#)2`z-JheQ@?%_dR`JHuaEBaYn>F#vK@IW@~~dJcl>V zK2LqlU^2*H^QKy8RTg?wu;tRl+xn$;WvMhV*9w;U>+}wry4qC>?KYZVJ`05p`{6CQ zDHz9n4d=IG%7ridC~PG$a~o$vy*vUlHRJX;;!`SGmy9PcRkIG7bgU9fOsMUZJ1Y?EFW^kdLVR4@>9n1l$LkDN9O7DT$i&~K<{W9_?=X8c!_XV3mt%Ev}6_#aP%A9av znqBA8G;p>6 z$N}9PW&h?VEo0XxW$rW~Fx?>apl-;+gV4|;C-kJu7LOHY6JWDY=-wQ#Wg=i}d%%{t z1z>A;fRPuGydZ|LLY2%3X}A%l-Q8uh+C6}2_qT^>_e$1ZEAj3AE@5Klg7pC6Qc=yT zwyF?iyg_sYz3T|LLkkEbiv`KLvrDvA2jjGxE4gtYusWO3u03_E?(W!1Rz$KYLrmlN z^$>S@Fj-hl?Kh~V*8fz~wGizcmQ%@U9Yi=(ohcI(8=X8z77e{!Xx#FOsViHD5Tvg= z8t;cLpT)9m1o0#jPewsBD!VX=17A4Nc$_e?k_dL8m&?^JJBYlwU;&%LH7GM0JFBeU zP_5O*bNmUKAm|91pv;a^z{3TC!i*VQcvdaEW~x>!?A*-4W4r-FhmnvJJ5T5{JSG^Q z`XM7cx+0l{*uUk^9_SQsO@QVuIjlgBI55v|&*kcKwCkE4;uEep>KHN4D9wk6OkZ+G!mzqu-*vPQNvB zj|{s*`;>Os;o`n^@aW#-PoLgDZM=F%+tdE6H-4z^eN(T&bEDDNYv4nzQQNE4G<ulo+Mae#j%xYnFLLw)n6B-^V0GvJ0cfR6G5`Po diff --git a/warehouse/test_ns.db/target/metadata/7d0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro b/warehouse/test_ns.db/target/metadata/7d0d6d50-d572-4127-b57d-a42a67df8e11-m0.avro deleted file mode 100644 index cfd1d204df2c4cdd5b7b5a709c706cd4d6f33ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPjBNy6u@1#Dn&vS5{T0ZjVy6X8vkjVG@KA@rAkni-R`N1tcg9@c-^O zeVRvt!DNuZCJnvNom&`E$!1HZZ_Af@b4!(prB<*sTBf(xu=K8)Xt&(}^I0Mz*pFzc zO~E+st2eoqQXwN5@uZohEZDj1S@jW^Y1;P&T#Tq}UNe!wRMXuLcp^dM9vDyGqSt~S zXoX+DTVNyrBLGlVgOnf%kkkkXP^L1^%72xm#D>Y*3&e^NX-yiWvLc~rHsn%)p9 zoY}HVE6L*+#VVKd;2~rKn#a=W68x(!68y!IfcZ&2>N7ECjkm7YK@>ATTPgc+UD-(7 zM+I}nx-)^db-~n$bAlYNVw>^;GUNg9vra)T(ZN8_kzInmZxAj5{2>rK0Cdi8ibhK1 za9)vJb$1cVrLGToKrt}M2d9AXg)UeiW%Jf*! zb!!h`P!?$*9NWe16oelX`AE>wMCNJC8hYE5^l8RI0!ZYLA#0tv1T(jeM5mq~@Eno| zgcnH60kJQQFYoi%dcsis|+oc6#K7w!s$$U==zvHi2@p5sN;uN zBbr*19*oxu7Y^tw{D`LLB29-xA(0%u2vo6z_z0uys_rgjkPe7NlqVp2YUl<~o&ZYM zE&<&g<;mSqy7s0~s@!QnULfue@2cbzw&gprbEgmcWD!@*q(7ilh*FnJU`hZ<$ z4Z!Z^03$D=ctH$fg{qm8&}1b{uf54=^*R94J6Rv5*Qr^5tHk$CHVG3u7pw;mmzru> zwRMH4wspQUuz&&1#cIm0(wl~LCu_B699b%rQ zFNV0$gUQ8e>b*oYb^oWDE`{iAu$(GZ%OJv`>W`SD*yxl&GHvL+O5;{mOiSC^gCKp; z(Re=z#5h%LBZw!3c+!t~zwW{;jU(yv!60LDArZVvFITFcbr5B9!D2RoYfxb{c2-5d zpPp5hG{I*g3u*m**q5i-fd zC`uR+{Du@3V*ge?hoDo!H36Et>|hQ$7r?x{J=d$x;j&XwT|icO{OkkhRa3z-yy3zz zoq-CtiogXOFDlR}N0~B3w^T*PC!pz8z9|MqG>HZ*lRk(MV{7uJy3__dWWgSuSH`Q? zU;h2mzkj^*)hoa7-QT@$%;(#t`OlA^fBWkXzkN>(!}x0pcie5Y4q7)=-zwnIBS4v*|+c+_^AhfqbE{iAl+ zq=zm&Zij;obDV?eWo!Szdk;T(eE-6H{)V}0{=BvG-PZ0GTLwIvJMe=K#*VRT80zu$ cZ7>x-J9}@R8OE;pK2BINYMAC8Oq<{Ke+z<1>;M1& diff --git a/warehouse/test_ns.db/target/metadata/7d4a211e-5120-4462-9cef-76ab53d2a056-m0.avro b/warehouse/test_ns.db/target/metadata/7d4a211e-5120-4462-9cef-76ab53d2a056-m0.avro deleted file mode 100644 index 7efc2a6f0bf4282b8643e929576071037394380d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&5I*N6u^^g7)FpmSn;%nqK}e~{un18g0SKa4(Pb<&Yp(QRJtpZ-svx^t7nKy z4*mm+h!-#7pRln1f?fp$kAgR0@#J6NdsXR9cPATXvI#?|)KtCq>i0hC)feNZ^@Fz) zXUYQl>drGw%wnbuwM6jL5n4-|c+7VbZFv4n^IUCcw6u^0xFX^%<2KB-vORtjUcfKT zzDhmLU@^#G^Oo9ZRyMj+u;tdpuk~B4%2sJ&t`#ix*6AI!Gf>P^KbH^8ZRpi4KdE7l`JCLYucpVMj>gWEu$xej!wC zGnU)VwJ`O46f0daf`Q8>H1&lxB>1ngNbna69cG7VFlM}BjkT@ViRUvr*(m#PTiHn5 zMg4#x!9r0VHC|khRKOf|*-JqEgRxq7;${ zgl9<)J~Z?~SgRyiYCn}}K%xmz5)$GmWyrX!LQ+q>ubJ(I_IM^(HJ1&&7)Po==EppX z1oa8ZASeUXC>f>nbRs_uLK|1CO7DZ&i&~K<{W9_?=X8cg_XG=|) zjGldE82y|T?kE(iOD1Jy60kH?s2aVJg%c_ZKc_LeNYNplOGE^J2vo9!_;9`Cvg|HtkP3)Zlmn2xFmwkf2Y}Ml zb3nI8Ik-JaQ{Od8nL8~AOvg`Ms2lR~AT)HzDLpN-#cRdh1lTAPx;F=G8VK0j9!JpRv%zmgY98j{gU-JN_=auOPJWXU_F4iR8;e- zttvzruOD4Q?>YwV&;kOmly+VluIsT5nKI&Ht&UYav=YET@vyI*4$o+5r<38=X8z77e{sXx#FOsVQ4W5TviW z8XtrXpT)9m1o0#jPsV;UF1s*^eNWiYWRftkk_c9zm&?^JJBYlwU_J}r8I&1~omJLv zsMc!ZJ^mO?5OfSpP-aId;Nby5VZ{s{JgXMoFjXrS9^KBuV|)QahmnvJJ5T5{TqYO~ zypRzdU6ag0?BDXS3pxcn6QH?EIu+;<2j=Uij3x7+DnQ_iLlQ0qcx zEbK7pxZ|#%{DO%t27K4hb-imCx&b2tzVJ6r$?vw_K4kQW4k!$$>$DHuzSABL`n~o9 zC)uRu_MAy)@!mRkc>mFtPad2#U)^o&HU6qMU)1-$t=C}OY&Q3rIH)yid$n2vhws#D f>eJl+`O{i$uW?__HuBkDqrfs`E-#Wiy?aS+vy#)+h41qx3 z(9pn8-@wqoK;HlefFclvfv$nBd5W23a!N{~ZmMZ=lCFulWty&qv6;E9p_yS)s#$7^ Qg{7hKHt_6u>FQFgz4Sffk)I960NPAGT#FQ-H>3fYwc72Pj|&#ECpvtSOQ`9&M=3rAEe%x zP3W6@FAOnFn9(;<(JcX&cz3;`50FirOJpF`T^SG@P ze*YlHNC1Whpo}IdKoTIS5E7tFMV1!-N=u0ela&{U5k$h6HA!hjM3ZzJ3kiNMR4ua> z%Px#43ququT{3_NpN(i13ZqZ(uc}D!7mGaRM%iS@c+DDTQ?a8UWNx}v_Q9sIk+_Qr zYR1|Nfwy(R+=(?omQ%7#dI1^69`G|xKrd0jK+utWg1&E(n0xp`Aa(#~&2N%MLdCeQ z$Sk`%kL5zw=dnjIFv;_0kI79S#^mIT$S7mgxRCOdQA-+1k%4(Fv!&3m(QbNywUN+msAx%6tMy#F!y#mAM2nw~9oip6kUKBoPSD zlOB9%nWeB+NwUy>D${_(BcddvBv8tbaaDz+o(A7CH;CNfRIqw3TV^?qRDmqEc^(TI z5|lwu2C7jqD(UIPVK#|eoUttZ7|fp6iX!P3kxx0NQ`~wW*aT`F)RDZfEb3D3ge%MH zy4RL}0s_f$L9!3GiPk>CIPDfn?pz4$qxEQ4o;r4Sdu$~uB3V@-W=ZmH zh+93FY^|eAl!H~N|{(n1gF%?73voqMA2NZkWJtklpBqmRo-u? z)@toJeugFpI)o-Dx1$p9aDkvOV+t3ZWeabasx=Fb?q=Z$-hiRQNJ)mBC-fOU6O2!S zh!Gy&klaG--->4+bPBj8Ky#P2YtUm3%!}J|wfY>aIwj==WSz$!e+s>7!dZ$pTsWpv zPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`M`um!HA{81u=YT%s!TvS}*pQw}_pJOBd!vj!ylN2BckW>f>P^KbFi+`o1#DK}l3q%hhp--D+VMRofbQB8-ekN2c zGv~|B^e78M6f0dafCrxqX%-5-Pw=m@NbnbnJmy5%*k!z8jlHSZVGuGWT`T)wQ`tz| zK?N0Kt+~MKx?twSiXhWouuXaa8O9#)(~m(fQNcjak$r-`Z<3gM_(LFe0BFT;l14(s zsH(_Vbax)hg|1Ixk78hwM-T3it3Zs%@k1h`jFsa;%2!4$X;_F1%xjq~g@%oGQ>4d| zu4{V$gECJ8ZWPZ3#HA_o2_O+8hOAZQ63pB(5|w(67iW+} zAUscc@S$legtbbNx%Ly81|%L5B_Sn&QihDnDkSwZ_=-6}Ts<~_$i*ck1WUw#cnsC7_B^1?E&OSuy+ zOta%$nr63Pg)0_{)diEXatT$bCHejrJz;jI19W{Dp9dZdPv!AL z^f68J=>W#dg$oB%7Jf<-bdjP%0-uN&z6eyZg!u4-^rGx8X^;wtWt2UTJu`F*D0_g? zG73O9N7=hMO3Tl zRa;evGTt!0g5K2y?$81P$;EN>)U&DnrbY zbF5Ry{k2x?eZqMcFbFk`^loyb79>4c7^r{JGDc*45 zm`*_jTt(o5ju#c^l!H{7qFSoFN@QFTsTV86t*k|4@o>$sk z?aN>P{O!eyXYal9?CXENd0Kydt6u-{_n*G|;jf>+&ooW@w}w0Jx7+*eE6Uj@24rn$ zi-i-V`@Y*2l%F%v#%OPwhGDb~_-&i;!5@5qA^fzAR`<~84G)b@%Q)zGtpne7TW;^D z)1t$JL$~WO-#qm8XP2$L`yV{`{L!7$#>=X7j`wD~Ywy}IcaE*oX*`~J@6GRh%$v`h$Mu7^ zQ+LcJ^wo_gnwTa`8)~WGnJcuG<_9eFQf+wlL<>A^XtcD5PH;ucJ;rUAYvp^wIC=!% zIQudSID^F?gUwoMqgmPLQNb2l=ikOmTBKN^~`aZqj z@u5=q&8-|G0T?cT(psbdNr0q6NPsdGSz7!mEhRcER$d@l5D9J8B1=0Wnxx}cNbqx^ zYMZgxcBVyH7@}C|k`W9%=F=<`+K}K+Ws%@77P-uhvWdfZ#Tsi{v3?LTJKZSzXj|Dx z+(rczW6g!YtGZzB#EKxpTCz=g0U5?F@Y9Y#FHylj(2+xezHgD3yZDbl>;TY;-z1HM zig8tuzU=NimJ3~<#xBLcBoFW3C6|F1lj8?OMj0!|g_N(1TG6l+8JO2HTM7+Zou){S z6qsNN>4Wqvq@y*idE@-FneArilkpeKINQF@#ukI6R34iNAkk5s7tvM z&JCkyUl>NeV1+xDiq$!jvT_MnnkrO{Udi$c8fG#>^DX)Lmpx(hXCrid7(WVJ8lKAQ zhiDU;XtNQ_mkSq8s4V=9Cg>tXhXfuGG5jG=$r9qj3)1tlyQD!XAXZThK=$0w9iSWl zN>eWYT_5G(`Y26(*C=J~v>-6uF!P{p$jgJ!$Rj88q|6qt6?+q4W2w-+IbhR3z~=UV zO=And=I#I^FCuwC3}b~VnG?}yBTTEe%V@Rw0Mi<557X+GtiMv?TZ3J~#Lfll0mP-E zT2yUSAT0C%Jgygt1e0VVZ=2uw&m(nOI2#YpItj)Gs=SqPbupo4_+DHyS&u zyx&l*)y8}L0h%DF15HqFM=9Xp0YPEK6dpXQ7G5z`D;9RIXW=ovfT6=kNrs&#^cfx# zj8B4y5guQX+(PW%im?Ye1w0d=xl0c#&|?nFi`R3x`W&shCFKKTlgICV483Z?S&A=Q zxTaH30Z$QlpyNXYI^`ghrl^)G@Ax=0-O@Mt#DqqH&r)H77(Ufz@5x848+**%$NQ@G z!HbuF-unKu2`-yWbnnZ!{V&|NY_VFJJ%q-Mhn-8x**FGf z9q5aN9i@k!(-D+EVxoiL-qCg4=;($a|LHh_865`rY3uENS9b=~H`~2Ix7$7%^k~~L zx_*1$`i|#$Jzsa};rz9AaPRj0FCN}GZN7T9vDf&c-u$V)_ieof<7TtD*Tg}sS=+1C l8aR9hO~p@h|F=(SwY|n|IonW^F#Al-egw-K`!HEO_kRk2P=5db diff --git a/warehouse/test_ns.db/target/metadata/87212431-1c5a-4680-924d-cb722127f8b2-m0.avro b/warehouse/test_ns.db/target/metadata/87212431-1c5a-4680-924d-cb722127f8b2-m0.avro deleted file mode 100644 index 315da5d93fdc8d65c39edf78bb1c023c25af6622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KPjBNy6u^@-sw#mB2*hcHM!s-K8jsy={%}HcD^+64vfG}j$eP%b##_fW<8iC7 z%2z-jj@&qN*pILh5<*+mAsge2NO)X0FxJS{1W|YazXbm( z^#zB?AcIdEdZATX=rPIXOJ~1sUTT+?Did?9V5xtT-hRW-yK17{W&_OUq4Z%tqNz3o z^j^$_^rat#%_Qb-{k(4!M_^{nyf=)*n91f97YR(QS-Wl&N)WjN#zRGnpp&TV*LRVY2oDG5k;((*{{s5wbWLMN)yE3DwK! zeA&4Xra^#Wl}q~Y;PD|#18MXKzAB0YfAP@ePMD4dT$HS_*A+YT1MVa%W$&*m8;Lup zpk%By7kFD2%$!&fMC}FJloya;9{^j0+`S8?~fiAu=$pRkq|B*4j;;9!t7z z?EwtREDZ!TE!<8<_)(UR1RYIe8V9_gx6R0aCEO!`M2N#$dLK1=S zEa}0A)LaN_og{PZCn^m{G$dL=LVT?Z85dP3>WTj~cl^*9Oe8PoGBp?DNEgU_o2QXv z0YMoAWuO`@qmZ6%6r|(O!5PcaJ7D&#R^&-Pk9;Nso8Z=c$;VLZppImPWnPyuCtOn6 zcCIMx(NTOH+v|Z5J%RVnM1hG+UDGf6)`PGwq}6gXqF{S#YY3A7YGI zY)tzwUMyTVptJBHi_t}z4)HxABltt0iY3H{=O>p%cPWE(KrEx|g6x^08$j6wl$MzT zx;x75-BDWRrctWgX+U7QLFz%>P=^O$p+`>GNs%ocE6yswbfM6_Ibe$-U~7HA7F`3d zwK>4Zizr?Y!&spT=7cO<3Da(GGFt5pz_h#T!?ZgE>u;6#c6XC7v2($C0CB0Q=2cr) zh$7w~x`y6$0NkMk1d@vd$-2KuwAKN}X**YP=R#l|tVVm|sbjS_$5yc-id7L}8pp4P zxY2{j!fI;2K{d7hr<&df(cWM=Rjh7;2#2aO=8|EflLyJHp|=+rx4dE++SWb<>FbWh z2cat_v1%JZJjuk9K@bg!E==OUmrgVsCR{Ehg1yko%9TsWo^ zPytsFxS-=j1v+IvQKsmYD(ml}H zoW0on`Qz_L@BQ)4;lDrDe%q?me){YAFModb>klugl}hFBDsH*gYVEbInc$-cn6;oU zmQI-Ld4rZ@;)2T-hI@;e)NGk1rSN6a7KIP|$07JM&1R=mlE&3utGU<<*OcGBk?zoFOuDi2%7(!F&u1wnLFRQC( zh)Yi1)sugRc=f8F;8D<%2;LTt9u<7AD&6VsWaCUWAvB#z)qAgg@1tIQIQpc%_fq0a zSU{iMda8+O%(Q`)2%b7ZYiVPT`EH^O&Yo(Xs|}2n7SaG`MBHWEhOt(*#*e~t_{G_$ zsmB>i1{rMDQVY$>LYE4*SUUf;dZ|@eDoxC_f~DRny~CEKcGX6^^%j`VLgB%Fcw24? z#&KW6+3lEe;R!Da+eyrv=GjmykHE}^etR78fQt4d;|WY{n0rnX3J|#q#?#m6C6D%% z!Y|&+FcN^_04S|Ra*zZ_Due_mQ;{b5ztU2o!(`VnU7|6B%W!92Zi)GHOXfAu=$pWwzuRHrh>|9!t8e z?EwtREDgA!o4B2f@WU)02|AjHH1=6bZJUx2O_)mniI^~CtumKj=9ZDD)U%x^g(L#u zS<-_K4ZRT7DoGaFPh=X9XiSuZgm_9BGA^r-)D!PBW_zJMnhI9UWkWB}fdtmmwR^&;)h`iSehzSjiZv~m()*XhGt8${TDr9^kzeJy&s)>4)ssv@k6wL z#@cKMZyTk|ofZV9 zDnuEtA6-H3Is)#{0s_fmK{5}wiPr35oF3&$Zd?e=?s~KGO`p zd!fUpv1}VbJjuk9kspo9E=*$I6LvHnCrm6Qf>r3{a`lT2B5y93&jPpxWkzFXmGv8{ zwOV_QKSmP-9YGV6*-;93xIj>tF@+1yvW3@7)ry7Pn^|~_H(=;65|U!)34Mmk1ml4h zGQy)Pl39rTTmJ5XP65{hXzr5z3iOBr^ZfQ)u098=PDyzIS?BQw??A5_bC%!@7mn!! zRKQgPF6eksflk>=q$#SU$~ry{O}F$-HW1Lz8?!{%Acjx1*{kwW>qIVdcJaKbeLjBo z{u|%@{ocR-y#D6LcYgo1@#C#VG+=_f$pJ#GW*!j%~){R$-MZ zM{XQAazXG9@E0s-Pkj6dToGpu91!o##E$J`Lz_)hRg=lgdvAX4W8Qo+{A}m&jno^n z3H@{Txgn+rGx|msd~O83(YG2#L?^f+=04*t%r){oVH{n-H_krK z0?uGD$Y8UE+Gy7{`c$yR*7>*9Tb8rOcUnqT@H-u46M}62cwuzsA%3Wp2AYyKJ?;9fXD+dp1wnGczmQ3 ze)V3CkpK)2Kp72EfFwXtAtXSViYzUDm6j3{7Ar3hBZ!1CYmm~8h$iVc783kisM=;N zwp|)g7KSKRx?}(YpN(i13ZqZ(r>aQs7mGaRM%iS@c+DDTQ?a8UWNx}vc6(FVNZdsQ zHDm3Cz`MF&?!=lP%PH9=y?_j35BM1;pqHp%An3?GLEkq>%su=^Aa(#~&2N%MLdCeQ z$Sk`%kL5zwN3lmSFv+v?Q*s-KF*$ikWR$ULTuAxKs3i@h$iTdo*-~iO=rl!oEa|$l z2QVn}G~kwL<8gArPx5>u=x8FcBxDVBY)XbSWj+BUV$6`W%3Ok(TScN$&-LOAk_d$7 zNe@1>%u-mZBw1)blW9QW5m6FS5-4TJxT-=@PlGR*8$|AKDp)<2Ewda)sz4UUyod!2 z3CbWS1Jx)QmGt!DFq=d!u2`1d1+(Y1qDcBh2Y* zF=hjpuNE$xP+9mfP0&S(4heiBV)#R#k|o54AEeh+cS(a(KrEx|f$X`VTR_xrsTgUEfkF8`yB&#aKEJZ$(b-}-m8@1lgiF<(FhQ}=DS~9)&^x8Zt*DrWvULDK`l_q( zapdu7BHKm~Pjc~O7{U%=2|q$I=66Z#CF3C1Tu z#0ZaXNp2zbZ^hULodTW-(A=d*HRv%1=Edu|T7BB9Zb|t7S?BT752060I7{(`3)gfC zD&Q#s4|IH}K&Kp}(iGKF%~6v4)DIxe);Dc zw;TNQ`;R|g{qb)9{8#Zko)Y%{KMTX3rTNHy!4% z;c=%!yT{Ja{IPZT%Z;neZRB+<&FkpeGmTOK-<&yHBAoR+yztd Zvv=_DRMYnL4{*VXSxwguU|Idx{{dO7Ofvug diff --git a/warehouse/test_ns.db/target/metadata/8b51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro b/warehouse/test_ns.db/target/metadata/8b51f704-8cf7-4d36-85dc-9ba342b6c65c-m0.avro deleted file mode 100644 index f7a722e917545344dc644560bad337b74562e20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KPjBNy6u^^gRP}%=BoL=PjC@WS|7r85oQifURzO*Hy9ZQ7*4UnGymf3d9=8gs zdv-;i} zi92Q!dVS})CZ;jdjDw8~H5o67A^xx#oM?k8wc_ZYWftd*?^qVOqv ztZcMrGg&&3OBxY{&e5jR2U}i(VJBs*(iuNVr2~2I6du|j85V;G+(|714 zkM@V>Ua`j7RP4wPn4PSZeXyx) zByOXEim~QG;7wgHcVb15VHIqXUO5Om}bLEpDX#9e$4h#df0@tdR( zQ!%b8(u?lSVma6KVdPQ_O!DN>19IhyF*$imWR$UTTuAxKs3i@B$iTdo*^+D6Xg7I! zEa|$j2QVnJG~kAA;&w8^53_tE=x8F+IAATcZAu)PFpmHdF=ohGWiG+YEhAB>XS-1f zNd&^Pqz4}wdLgV;k}R~J$}}L+h$smO@s%=UTvj2eC;sQm_Cwp53RcZ!LoddWDvKeQ6l|oE5Gp6srp+Wn~huG*ze?y^`gZG)QHJW=pdD7d>J0XG3&-5Iyx>8l1`F zhiDTTYqKGYmkSpTs4V=5#^@qNhxi^55&R)g$r9qj^OK9RyQD!XAeK=MK=$0wEub6# zN>k4P-5%xO_9#t#+bCu3v>-6uAoZYb$isus&?Bexw9FQd6?+|EqfqExAFyd4U~_Z8 zrm+EFb9;c17m>UmhOt7G%n50@7N*tPX0%#;fN2djhiUao*54@ct-&^7V&{VO0OC?n z&8xPm5M{hUbOpVu1Kgnn1d_#qWFBr4t=Yvm?d3{tT?owXdbBG~9kaJRwvrW*tjZA6 zIDR$6tsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4pn=?1jR-t50ZI9ZxtH1ykcs~)*%Gx ztB%I|q06VSY#Tv5$;1;Uh@7$ulQ{5&9gRi_6HAF;6?(Z`{i1`&n+q1O30#9Rqp`Ef z`VG}utv$ydqX~jK&;(_6lmZ?u5EN!i;li_Q;SE!@Vqy1o7M|b@7&?rEq}X{vpW!jV z_{0wx;n5YzEX4jTfA>JAfNKIYcgcPQdc=WwetRxgpMzDWq`ZKv^Z0{%(5uFrC3wSy zV>$s9a20_II$l(uQ}z>SifXB{j*mmrEq#*>OlatjSR!l?!>8KpZF#A6BagYecwW`M zJO29Hzh8Xy`@PY>pI*PHf6(~#PNVViub1Ea@#7EQ|5mTnYX8)6%SWBge&>pEHjaQ< z2l`@RhsnO@bOhy3ndo4+cXZt_I`FT$kF#;dSe#`tNZ>Bc5_aX diff --git a/warehouse/test_ns.db/target/metadata/8b72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro b/warehouse/test_ns.db/target/metadata/8b72c63d-1f45-42b0-8c22-087b27e345d3-m0.avro deleted file mode 100644 index f7f4df03dd07d7fabb4a7e447cd52f709323c45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^g6!m~ABoL=PjC{_AKiVeEo))ncD?wSd-BT4=V|&t=b!_i=+$yZ{ zFRXe%NSrxv<;)qR{RfaZazk1nae^znHxoOylMQV)Rn<-=Gw;3my^neGh4WQ?|GmVW zuql0W@1-VYG1G=xB6#Wwt*woH7I=v^ym+bko;EbvT1cn3BH|w7Hq5oNJwX&+!Y9sN zq&{b`7-X<{TWvHe8$Bx6a_i#L`mI)Ft28m!3YPlo^p4t^I#mbl*4tn{3xyBo;T?G> zn8$OC=J#XDg)jUl>?ARBn-?RkJOe8m`u%alr&M&V7*Akn!`yeHP=LriFrI!yuXxl| z3ST|QFcN^_0w}Fba*zZ_Due_mQ;{b5x6)Fg!(!zHqWPiF=512g5z;uBL_&gJ2vysR z<+ckgOoIT$N|%ga;IT1H1ECEGepMC;{$ioa>@b}=j909&wiP?}17;^1Wgl!S8;RSf zpkl1K6nI+~ESy*oWLO2;q!*B39h(w|Cd?y%L`)d6R+&pMbIV9n>e+6TLK1=S zEa}0AhF%D3l_X2;r!oylG$u+yLVTqR8JAT^>WTj~v;EL^W`b37+0ct|qzYty%=1Xl zfS?S5GEj|@QA$rY3est4bpiMbEge~=?19>bwgergoYkDrKe@Kc&*r*02_ru_wImA0|A@c12&B< z0Gqo5jJ$~C1u={js$@<`!;LVl{w|}{8URe|czc-Epk)2665l%BB~0vGupU5MDyn(a zRu!U*H;AsGcXfa}w17aeSdh%aU7|IQFi!iqk~RIONebTw`eT*|8^rLLHvdpQYTd|V?jGJ(wFhS` z{jID0{cY=;pI-m){a=mO_Zp3VZf^eg^}Byx`L$Z@&pMuX*z0wB*OaqK1ju^O77IH} zx}MV$lwUH@!)Wgrx?!k4FwlFtq3db@|MiaE8905@J+i!xF+Mo#9GDJFxu)6C2Ytuv zGwa~cv$~7N*8Y=+PrrQj=)C#ngGQ_Id%gK%y>(Ns!MNFMwwgGoHEXR}t%1Y$>tHJW fH1~e~v{q|19?IEK6Jy;Z^Hg(P6Z149U5k`NOI-`I6hlkXR0Cr} OL(|Fo1kwc1tpWhpF(`@v delta 131 zcmdm@v_)xyu7I4Eo2l`fU(=ZmWkt9JuQyuDbb^_Qsqf3pV=o&UUk6Y27BFx&G&ImR zG%x@XKoZ0P(uRimKoJ82T?1V+BTEa@WYZMgM1y1_U6VwE6kSUbV?*6UOT%PyQ?n!^ P6Jz7a`vlSi(5(Uh5=tps diff --git a/warehouse/test_ns.db/target/metadata/93443125-45ae-493f-b226-5729c263a793-m0.avro b/warehouse/test_ns.db/target/metadata/93443125-45ae-493f-b226-5729c263a793-m0.avro deleted file mode 100644 index 5618ee28e366877d9a56e1ba6ebe4e832d2be6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&1>UE6u=$Fm_SP?wDh!;L8mR)u|Aymqo=aFfj~Fi?q*NHh_N(|)yR@M8YQ@k zOX+2MDtqdmQ0T3HM*oMUu=E%TJ@wqaH)F|?>~#~b9mmMynfKoO-p9Q8a`^Sm{`;{r zW)pg|`$7}bh-rN-7Cdo;*3d>C^W9kMpTE#NSL+)MEua&e5ptJt8^#*x8b1s!;2US( zBpzol8Dy|oLoGB*3tcMMV(I+b>ZMj`sWdUu3YL1S^bQ)D+Eo+n)*E0x3xo&z;Z3g(ti)XvPt9YUcy3I07@P`n^%eCsZ`A7>{9U)!cW&K!C_SFrI!)uXuQ% z6#n#Cije>e2S8~Jl7S>ZQXwQjnTjONewCII9VRO;5X}pOHfxaFihxG(I2026T&P-R zES8;XLE`%;R=Q*W4=x+g#1~qh;7>)7;4c<9%np*tknxf=)}~@dp3m%ft?c%uvXQur z3QESB3xT(F!Q6=@L57vHO?m+th7R!4jzKR`!9dWFeS*GkkdQn0K_GSjXvuGqMnuK9 ztVqwhJB{T`*B7BfF)+#Vrzhmv6Jv7xjL0Zs#ki32l~GF?a*=^~Ewd%lu+eU^^jOk$ zYY$*hrfI+p-NfyrgrB7ONYK$lB$3Y=YTJ|yY0O*#NW_>SYn8bKGq;FDrJn7C2_z8+ zPm>;eXz01HR!OqZek#*|gd?IP#Kcp|ka1Ckq#k?UGTRI6;Z(44E*pA2j#Ponws{r` z>JyYfPzI_|G79PGgnlv!Y@D$yy$fc~Yekmyi^!*((;3S;bEtnNj~}8< zXr#>sFkUQNIH0odF^$kgiVpEyB0_j0P{|VF!}a3JqPwI)Dj=3o_CWUB&@G_s0ZLQP z0NovB@9ro~ecLEy?ld4U9Y1lQZpg!f(7+|9^t8wpj}?0zU?W%P-W{-MAYgNIz^1VQ zU~_wbkr$D?AcnC*70d}}uokA(*=Dp_U4UuzHiv0-3)bH%@vYuAVPfZk^#I~hQO&Bh zst`rIes~SN>kzm@3kW3h1<5?zCR+0d=KIsU3xYhYJLS8B@6MEL(WXR4rL}bT7pqTu)hQ`2AnQDS@(_B}h_e`PxNuCz zpaQNUa6!k53Uta|EKN}@Rod}!Xu73u(t!yLyb+6q4Py9In|&lNwNB_VXAjS-%8mBx z{ZIe=`Q;D))bGE3`R{kt-*>CkU%r3y>c`iA|M8$wsrhZKwWfrvlHlTCHBghf1wduT-k| l_`xoiim%$4iV>{Wr#9_Q*jkT%RksmNSSu6WsQ`tz| zMgElP_+81MT{DjCTW97Jz@|96b8VZqtc`dUg*RauU^7L5J zb!!h`P-bbs4c)};WQ0$%d?e^-BGNcuEwyb*9GWnX01`1~$XaDC!OSfqQK@IUQ3^=} z!n33Y9~ycgtW}aMw4cZ{Akl~@2?_C)GGtsd9BEkei8YUb2`PX`+`lN) zjIMoU7`>bot|%0%OD1Jy60kH?s2bgpTWYytscO%`kTYFdL`>`mH1YFn=r9+!Fm93si@{v zTUCfM-XOY$-qiu_&;kO9kG;Vpt)Re752-4Rb zjSoYYPh;6Of_RdNCr%JKWfvxK;0rq%jS?o762U6;a=H3N2az`yEMOD324zNLXO;CE zs z4wHS)=?Ka%nCM`%cXVAhItF~;3!dN?{Fe{#rmeU8hX;qA>Gay3+a0wJD5LG3)79Gt zuGuxaU5EA^V}E|x+B<#l_{*mc&zdjaY3wxqtT%tG?|fgc!E>|O+-c%Nty$Zt)f)Kt kb{$N`PjmODPiwWE#sfLpP=he~vmE^xrZ;wBu)6L40EG!m`Tzg` diff --git a/warehouse/test_ns.db/target/metadata/95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro b/warehouse/test_ns.db/target/metadata/95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0-m0.avro deleted file mode 100644 index c8ff1862f6533b6df363c1d915423f9d2dae71d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&5I*N6u^^g80N4Hg5qfpWgk2xlm3{QdK4&l)WUyIFEi@|&T`JgO>HKZ=Qme95nwV<^OZ`=Phb>L*s*QH*Eij*j!iW9v zw%inqfSQGRjyvE~I>A)RKlmWME#)Y{@ljw3|FV zmUP|N0~nN98gN55aXT5|hgm)nbTkoZ9I%$!HYFpPFqZ%lF=ohGWiG+YEhAB>XFE{} zNd&^Pqz4}wdLgV;k}R~J$TT34N0fww_(~ZvE~}8#6aNcl`=LFW3RcZ!LoddWDvaeQ6lIoE5Gp6srp+Wn~huG*ze?-IC>(G)QHJW=pdD7d>J0WBH%Y_RER2F_hV|0{p6zTE@_Yoh-H+0kUcka3n=@5 z($sT6w@2B(JxWvGHcFX0EeK2}NL{EK^6(%ubjb-lDYM06#a;*4C=|L^2W%P$*xVej zX>0)4+#X=$MIX@oT|w_U0`AZP0?A@QG7q`b7tkHy12m6SxLtMq_7{ z^&6_ST6>N^MiT@bK@*hOQ3`mtKv0-5g$vKJg*QyqiiJnFv+x*iz|dhNB*o4X`V5x| z#wUKr2#>BvW+C=(`Lhc;1zZ!Lxl8sd&?64a^V@T|`W&n}CFKQVoyQ-12)$~|S%NoQ zIHnU&0ap>YpyNdaI%PkRrl^)G>-ab{-O@MNz=Vdr#}Z+K7(UfzZ^%on6S>UU#q+A> zef8G6gX^=Ozx(l@->!dn`^(1jJB`NgfByQ{*Wds0ce_@r{aeQ!4?3Ow&K2cs909Tp zw8g>>lYMv85tN@Z(ZOi%7>2HQbVD~fx<3Cg;Dc|v-qzdwL(el@x7+TUhSNScaJ+Vp z(Ze>i4qdCu4o4$L-=AN$_8z|X=(8vHPn$1ZZ|pR#>&>6)JKxr8@Z4-RcbfQ6Yu0vZ nwFW-ERtHn@)7<^zqgrjJ@xB~ws6iNgE=NCr>5W|&tZw^1=)Fv~ diff --git a/warehouse/test_ns.db/target/metadata/9a8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro b/warehouse/test_ns.db/target/metadata/9a8253b2-45ca-4b85-a98a-1bede0a1358e-m0.avro deleted file mode 100644 index d7f44382ce9b6da6280998a285f79d67d44a4538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^gRP}%=BoL<+8krkP8h^CgB%Btp6)T`DyWLZXtg$_5O#Q`p+$yYc z=7v_BkoX%A{0DFVi4!*@4oGl799BsD3%oZIJGPSzZ8lMBIg^?9-u&Ljy!p`iq`CJ} z>P}clpWS+*iD|;Lp_U4sxkBq`W1j_HstwPcXuhWnjgA)45NE{PW88+ZPQE6HqjUJi z*{7M$8B7KlY}Qc=&Duhb3bt4}|F(LmRa+`eEVP29{wlqrj;40iMZ5J5n9m~N!+v;I zZVJY6U!&RWgmU2vKaRR-!rb=RNUM&(%$9z89P^Nh?j_?XOl_HaZX5{^xeLbA*XSjW z_m#pg-pVl&fZ+lttwRcs1V}1`1SnIHrNyt(Qli6T^13+tjlQa@4 zCUr%6+1+_87rNe$U5bH89zVQKu6!{e$B&4NGFFWXDPI}2q@ffUnAb8}3Jn|Wrbv$^ zUDx&i24$WG+|W(jPEPnio{t0_O+=OitfRI~i9=K75kMj)3|XtpC78KYBr5f6H_jl5 zKzN??;6p<%g|$kOh4vGf1|%L6B_SogQihDHDkSyP|BTswWII#A>bY#_uS$ZGLp4W;Z=@*etIj2+Hx-VD=wGQe?URV}&DR;t! zVI0|)hS4ur;fhkRx?oaPE&)qZjjC}}vHX$-nat39NxuKGCyf4VgsuCi`?2Ligf;O#=a&n*%nD z4FH?l1B|?gOfXjh&(=F#@pN>)U&szS_? zT&!MF&wd7c5{QT!V6>v9rqi z4b@t$J;xuR34%J%1m$*A0v;|96lP4}!n17QHB+@_;hmdVc#Jn-=rB@}Vdn{bhQ|cs zp&v2A<13O|i2Ymf?txAL*92(p()}9rm;>|T_FSz#2dhp=c>!7H@%!&UubOa{;tdy$ z=@eAJRRk{Rcu|2)*-xb@s-?<1J`PQ{^i4hx(#RjPRM;SfPqo>r@>1)@9&>l`ylV7L zzW(8tkH7r(@A2!ue)GofZ?=BE)oOk9+aKTm_4(6(-)l4)|1@#O!(MN{cSSjy#DJ^^ zZLzSUbl-D&g7R}FdKm3JLpKb3=sozy2R!AA4xg^x9nijcXgOy0;LxSr1E+u3rGq~0 z8V>WAP7Uj@&-Uk+t-S|#AAa=s-f8>UE3KW@pUw7n&7G&s2E4c1?VUEhG}?`wMx%wV kFE_zd{Iqv}e7DiqY2B5hEj0+EKgrRzVR~y92J74Y5B32}a{vGU diff --git a/warehouse/test_ns.db/target/metadata/9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro b/warehouse/test_ns.db/target/metadata/9a9543d4-5d48-48b2-b8dd-da6a64ddbfbc-m0.avro deleted file mode 100644 index 98de676fb0d114c19508c134a9346117e866a380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u^^gsCqyZ0>o(#Ba36w_#U16)@t@h|Y+OzhZBHniPTX=G1k-h1!~|s zA$@-5sU~I#(?(hCj z>1B84v0Ui-ICd!pCVBGc0lD(UlpH@MGRjyrE~I>A)QW~uWME#)Y$-I{YBxoCtmwM7 z2QVn}G~kAA;&yVv5A%E^=x8FcBw!u2ZAu)PGLHZfF=fbFWiG+Yts+sWXS;C*Nd&_4 zqz4}wdMT_`k}S2K$TT4FgeVCq@s%=UTvZ{dr~X&W_9NSw30BW#LodgXDv-rCPh&v? zf-(roKs8E6B|Y6Z$im3R8LQF^vT_Mnnrc*yql)F1G{|Iz=1cPZmpx$&=3{hy5TE-l4Nm3pL$r`4 z+I$S-)xw1XDhofM3A#wpA-+dM3?Bq4SwehxetJ=Lmo!KP#45@m$X*z_1(ZWTY3c=_ zo1+}w9Hpsm8>P&h4g{tfWFFKFd3X>SdE|tiRN3OOVs8R$lnULe12zo=Y~CKQY1{&^ zxjn$hi%4D&!&spz=0r5w2-7;+X0%!ZfN2eH57Qb{tiM*`Tf=R_#Lfll0mP-ET2yUS zA*y(T_zHSg2e?BE2qen|$voI5TJsR&^r%pB<3eB_ZbrNI)G?2?$5yf;l2sLAmLxBS zxYdKn#A<52LNzu2r<$&XXl=2aN>=M2!l7!1Oi*leiXd4u^j4{HD=Ma@Y#l?8zU*kc zAGv&%$hHy0lUzJ;g4n6LFiiqq*zshNGO>~fR;iaO)Gs@TqPbuJ3*j1+8;zY+-fyVZ zYU4Tn7)=n=fhH)oqZ06NfuJyB1{a=H3$K}~H46`KX5lg3fT6=kNrs&#^cfx#jE8>2 z2#>EwZXxz>#j^)G1zZ!Lxl8wJ&|?nFi`#Rx`t;YGlJWww$>R?`gkCk_EX5lx9MdVN zfU5{x(D9-IowA=wQ&dZpcYGY0Zt0tRAf%B$VX3e|44-N9x8;(68h{DU`N z{6K&C=3Vma#0y{hr}gKZR_mwle|z@zU%&qQW3$m{ylCQ6 z>AvUm1m)*U^f26ex}odvWf(nO*NvWmkMNIgy57~hLpnU@TVB6=;PnUH{=hN2&cO4! z9zCRoea~|yj=R6OZS6h0_vo`H_fOl;-)il&{%*E^Zti^7Y`}B7-QH>AL!;f;X*62+ k_y(Gaf9>7hKWa2~TKD8=OAW&4A9D14nBLlj!TP@c1I7SK3IG5A diff --git a/warehouse/test_ns.db/target/metadata/9cc4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro b/warehouse/test_ns.db/target/metadata/9cc4d2ab-ff45-4223-b14a-bb7122648bb7-m0.avro deleted file mode 100644 index 9e41d361274d8dae95f54df706073ecbcb78a437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky>BB$6u@ntu~MK233Q^kVzjj#?}rnAP#xkTPJ(dUB?XGC)$Hy#*~@-0JDbRy z+)^U`3pzwaLxltlfQ@YOcSP!v{dlS6UuHgM zFd1a9Sz9eMmlk?du*K5(+xn%}(o$(+p%pCk*XbR%HMOe_+O4<2d=?2G_QN}JQ!tME z8qXdilnY<@anwl@<~GmAT6F|wHuMLRn1@t!t{G2ZYQx-j<4AzWJusf$r`J3_Pzt~K zAje1mh6|vyHYq?7AgK@%piD)U7QaeMi4K#M7l`IZLYuWoX+=bn^fDF_{9LG7W-OMS zYf%;iC|0^;3=bZg&@2$zh~Q6Ek>D>Dxy+8T&|!SZ8f#mz6F*>fx>0s-TiHn5Mg>d8 znhSxqb-~<;OM(omWSjH?GK^i|ryYY{qJn{-BS!>%-zG74@ryw00MI4BNg4?im&=Ou zvb*zGE_8hoyA%VHoIQO^ZhUb`j-L@3Wvm((Qob^3MMEhvFt25{6dJbLO_3fex^C?O z49YwWxS^Z4ot*HKJRb=2*HA+S$J>59S!pO!MtI`Kx_PkaUNxz7E$~m3l)_uW3sC7_B^1`yHOSu!S45M#f z8^)kug)2(M>WWEOxdbdtOH_@1#qw(!WHLkZCHel#o-hWpF}gm8FMO8II;? zqa5BHrK#^4rOcf+1g0Bg9@Gtacn}(SN}CtwF{5TP40V+$BuxT(BNMTq>$X)m9av ziZ_UFpm%kEJG6j6vRshN!(E~^k1$UAg_1iL0`q7y+O?;S+20*o$%;r;Rft)VydL6C z4<-|^z~*@R(pc^dm-i zd_!^zv41O`J8ZVwN!b>$D!$#zR3qd8u=5J3LC`msWy90UTWRgW9}ZFSGD`%trlzk z@#A-29G>lmzrWx3?Ovnt@5`_M{{H8GetKE2)oOp$am%A__n>=2IlGL3Sr__ZVMpnK z=X3?-7ff_9+`GE28(rPNFZgr~c!GajzUdvkGj!daXHus#ne+}jJ=3&0j?tqX$LYh- zf7Bbm!@>Nvwg2Sd)6dTyoi<;++h{fZtT%tCx4x~{;JMjswwm}*Yt~w|S_2>7K~wS5 e-23I@TCLT1C`TJ=5JrEMqaVWb#vTkV@B2UTmPeof diff --git a/warehouse/test_ns.db/target/metadata/9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro b/warehouse/test_ns.db/target/metadata/9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro new file mode 100644 index 0000000000000000000000000000000000000000..c7463537893afbe346e2a07c15e8384c78e6d45d GIT binary patch literal 4407 zcmb`K&5I*N6u^^g80H{@qU>o8MW2&Nf6V4<@v!0!F6g-K&cebF+Ddn2(@uX`T|Glw z@-K*2!9PF*K|FX6yy;ah!h$Dn;^NJJ!1t=so$gLH&ScYs(5Y0t_v-gP>eYwiPwEG+ zCC-!u^u>*5nwZ5*8)}K*sUx(OHu0G6Cfe}qndZ6L&}eBP4RA)pUB+z~Yh`QvD0~XP zIQum9ID^R`gUwrNp;=kzQo)u>7r)jowJJ-ciMdv=)LW-_)Y8q4i68u7_ zT4pSlooQj}`zThrWCSlRo6yu3+K}L1Ws%@77COuh(_qYa#Tsi{u@lc{cCu0S(YCUY zxQz-b#+plkS9QU{i4{SHRj^HZ0U1UP@Y9Y#FHylj(2+xezHgC;JNQK)b^vI_Z<0n# z#k8tOFSWFj$)zWz}KhRx}hM1M^yDORiz7-Q?-9 zqU*{Yz@W_1fE&7r+sOz&$nue(qlrjkpS9GsDH+p*xdf1iDMQvOa|vc{8Hq|g+lf+0 zA`qS>J^0Yj3t_F2WU2i`rU8j2L`g`9r<5V%vI2tj?K~l}W(TRH170N|s+xKb0ApEy?y@^n}r$kI?mg^we{xe=3h3 zq6IY8<|7y{7cLx7S@;2s(M5_5@mwMz_#jZp65_-4lJl~=q(LemR#6T>_QKE|pd0{7 zQ_lfiALZcsC{2CWC}r-nATS+2b)jy^!-LS!B`5Tx%odLodlO)zQ0QJAuxTJ*b9=z1 zu?1jrcYu)>k-Q*=u|k#132C?yrq$bJv|4?DX$`iAY4uCiUn%je!7gE9=YsVB;!;t~ ztG22TWxRfL3BBtWxI+sFB#Q;fyuC}bW*6hMmn*q;Auzj}(XKsp%--(UN>)U&Dnm@; z_~j6HdN7$-O|4g`rsn@t)3p$-9hOtcY8^y4RPBHXij7VlB#VaLDl~3+#nhCoBM8!$ z9gX)whtFc!HiCGPi6>(}8kb#|#J(r&XfjEdSV;t{(97lOmmNgjTri&na1F|g#?C71 zH&ko2@f?4ICI~u)CMdI`6!36?pfFoo?>6>gIprJQmiLgNopK0^Axi^ZdzAA2)uz(QN$ioTQtSYGi0=X<(3Q Olw>k_pFo-bx?KRuPAA>~ delta 132 zcmdm@v_)xyu7Dg<_uW%!wIvn?)pLc}mt9`Rbb^_QY0u3!$J##rd!9SlTR`8%(7?bz z-w;UZ8yFZGf>=PdA&3VAx(2$2rY44lW=1BuCT8Y9A|*LZH_<4~6v$0VO)@bzGBPnX Mn7mIQO#t040FBKmkpKVy diff --git a/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro b/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m0.avro deleted file mode 100644 index b0646f896d04682106e476c7e79a826b80b04195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`Ky>BB$6u>uoAxeQFBoNgVqpj_DKk{K48W0x|3Bqxgt0HSP-W|t#*)L{i6Pc3> z8cO~ED(J4EL`X=KNLL~L0(3P;Ps@8V-u3R3z&Z)e_^ zMfC4`&kQk1nb9{g!E;X-En^h0(9ewi#WN%DjlR_~VjAI$g!_!UFxD#8gh_k}Z=8LV z2b{rVkin)cwa{)X^r>L;rL(u?OP$72X=14rEDe_F9kdL!t2Wwgw!nNAivae++j3Jd zj{6!+@28ZDKm#B!W$Q*slCF*$imWR$UbTuAxKs09s`$iTdo*-~m)Yd2+jEa%t~0RB$;bJlW9Pb5m6E{5-4TJxUND{&w{U+8^rE#B3Lt*EwdU&sz8?8JWm7- z3CbWS1Jx)Qwe<9oFppvvXDmwZg4wfLQ6~L7@+s$Zf?E#+i=fs)9VrUSye<_^xU#Hc z_u8_$B`aJ}DOOiZ$|@vaX=+flj%$`*(=eAAS}ZB{U-g95oet3TVR9LGG(4Bb4>2N| z8q)!c*9#X8s4V=PrsyI?hXg(m349T#WC`)%2iaBKUD6;G5Q`{#AbV!$22l0@rEQjg z?vAo|ca*ldX_PW|S`e6CnEOyS=xnf@N>7G*IF(+mR6p+^%I1QFEP`uLVKjDDMZck1 ztCi>YV>Cg~Av8gS9kqam3j~E36S(j!T6oJ;ZCH48Hw#bj1`HiWMsn;tq0jJ{U_1(9 zMtE{V3JbA+E1!MPDd3s_&0V(NfSzz*Uf!PT)#qT@DJd@?t2}=C3G}KdXBpmb;h4@q z1zbhof{qsz=#+y@nxa~&qT}PxbW7h90}+jb5zB-NV)(?Ez9%oWUg9%v7tbs0`zAKj{qfkX!Lz;%Klq?+Yde}IAK%fz bRQzo3{{E?^?dTulge9YzuJ6LM=C=O>vuR7i diff --git a/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro b/warehouse/test_ns.db/target/metadata/a0568eaf-f9a4-4444-b890-39f4a5ee8c86-m1.avro deleted file mode 100644 index 3f54f76e0d735acff7bd6c6221fdc5c4fc1c16fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`K&2QsG6u^^gRP_KA5{T0tMwYlGjX#=?hEow+u@aP}+n%b(8rze`)UnNY+$yZ{ zFR&bd!-{_ai7Q7C+z@{Q7eK5KoVoGdOzgx?HniD9RWzB-y!Yn!KIYAb&d1fgR}y!` z#`O8UCz_bVOzUfj;HfLLhBowB;3ZoB;)&*aTHk1BAsyq2hB;qc95r`cCTJoEu5mPZL zE7BL;oyBsl>;1^37?|Yz^dY(N#fTg~CNj!cF)pNhWz>>}g~-6Xmf4bP*yuEQdMxR> zwFfXLvozp_ZsKt=!jH0iB(7N3pR#Y2X!PXEc3dQIpNAM zy7skU^m10XW1(1GF)1sPfTgKK)#w&1zotPdGc?TWYytscO%4mXEs^$OPCD)FtuZNkLP1?vICrJ|Zw zZB-$Pc!TH$dRGUyLkkEb7YmZv-X>bJgK^r;mE5@yn4R@#SKc~icYAClD8I&1~omJLv zsMc!jJ^mO?5Y&MtD6^vw@bG}3uwnuao@EPfnW`lVJ9o427+=89VI(BQ&J+3!j|s-d ze#i)qZb)V!_HX&v1Dyh%3DDdn`z7cR2j=xR)X;2TEpW#~9Ibo{03O}**0-L}zlyUmWMC@6pleN9PaD>d#-V?bLp)*1xUpd|s`eZv+^XkEy zi96;K_VU&XLr!CE^o>M{)RjiV82LQ#5~F|i!tgz#Pa8(aCb%LJ9v2SGHL^WH6rRI3 z!9PoV!C^7T;IoF_Xq7g4O!CFn`M333?b23dVy+b|_1EbgGz@*JCfaQ_zA1 z>QFF`=NioJ#7szE`cc?SV(!+@21aoPR@Tfrqex7cY+iDaz|xv^;6|YYk^5jgdzW2` z=uj*C>irBO0T?cTG8!ZYNr0qANPsevX_Eh{EF~r^)?OfnA4+4^AWJ(!7ANCKD)4im zdK+DAJ2S#G2vDqY$p8i(AF(u$MxWqMMUmhy9=hBK)5(yFk~Q|WVn=?!on)izqitm) zaR(KYjI|a5uj_)j6H9`qy=0s60y2zT;Ab3zUZR76pdA{E8TncNQBn#~)Dh)_9B3eR1e60)_7gZ?giT^ow{LmRrB`@bPHJ9T^7s&jW zr;%gItvAW<&Rwe;UQ;90=6fD1FL8>w|+mfAs*%P!o8=&ih=-hW%aH_5! zVoX?U%my%DEL=FDv+!dUql+{h;(J6!@P|MZONbB8PcDk?QU>XOSVh?b*>gj8fU*ZD zEi(snbCkWCqqNLjqg1)mfWUNv)PuUAE)T*&kDRcRB3ryxoK1k~QlWc&z!pWo*7krc zx&>fscYu)>QM@3Au|gHh30b%irrp_PwAx*OY4^5=X?F|OUn}wL-Y#Kc=YsVB;!;!1 ztG2EXMZ7_D1-T0|nx?&ouwh_dWOgtF|(Xi;kBo2J(M59r{@tm1fD^e(b!pK z{f2I>Hs0e;(FDnc&;(_66apR|5DZpK;lZOif*a0j!!_-t$dSBOjziTcp@DTBc{ge9rdVnBagfLcwbe1 zp8o#*AH4_vKKk^H_iq1i`>gicty=A;FTeQfpKreXZm&|Q{9VNp_gk&Q))fJ_lC mhQqh2U@Cs<`@cM>RQ783)ND;p!tAeV_5)a6+lR^WvHt^c*+>-t diff --git a/warehouse/test_ns.db/target/metadata/a175c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro b/warehouse/test_ns.db/target/metadata/a175c05a-c6cf-46f3-b251-37ace98c68f3-m0.avro deleted file mode 100644 index 2773d3de0bf7c12a2a5cf65fd69770f55877a7db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^gRP}(Wl|WqB!{Bq$_@m7i7Z%uxm7pxU-BT4=6MMYz*0Ifa+$y`u z9WDs*Cm?Z0Li`Cx{V(9eVL@CuaN)g~*s+~#XtSv*%bv`<_vZIL=FJ!5=kHrlPXzpfS68u7_T4pSl zooitl1SnRzWCSlR^Jp3fZAkE^vPke33ms;M>2%C^#Tsi{v7R3=JJ~4vXj|Dx+(rcz zW6h<&o4R1(#EKxpD%d8yfD9uC_-QAgm#APM=*S^K-?vD_9efao9ROPKo1_s_F{vuj zi|)>1IoI`BRz`T~(l55y%H+g!j=(@27 zFetM$;D&DEb~3_`vV0`yXd==$U@f(6O2#x{E&(KB!jQGfT!NWfMxs*BcA^xL2!v-z z4?Z;XLRhOLS!zF(X+R>6C>pRw1b;{tIUNp*@}nR?THYFUFB7koh*xB0&R! zG6>2*HA+S)J)I~>r=g8AR;BmB>_x4}lYSZblyf@6t^0yaq1Hhi$qLJ|E@e)*FpQpk zX&C*S6|N{0s|zM&WfHJ7Rj3-hlI52)NM(j*OS1hJJz@0cBXoTbJ@XwJoXO*dXj2+% z^AU`f3l|QkEc~3t=psdj_%0C<{3B4w65_-4lZ&#uq(LemR#6T>_QKE|pd0{7Q_lh2 z9_8TnC{2CWC}r-nATXUEb)jy^!-LS!C8zYX%odLodlO)zQ0U$quxTJ*b9=z1u?1jr zcYu)>k-Q*=u|k#132C?yrq$bJv|4?DX$`iAY4uCi-zf2|!7gE9=YsVB;!;t~tG22T zWxPRj1-+S1 zc#c0o69gSY6O`Fe3V66cP?#};3(u;BH%!%vh27g(c!D=z=r9tJV&@5chRX!wQ$J*c zM^_}X5c{|M-36Tjt_jfGC5IL05eMe^?YUfij@F%$@&dBS;}1W9UNz<{!5c0d(+Q}6 zs|Z}s@uC8qvY$v(R7;h0d>oo?>6>g|N<-gciLgNopK0@V>QRRc z`cAj+S%-_u*1@CukH38S;H>%T?Z#f?_j>cE`rdc-8oW1~&AleR)S9)uTCIVvck5s( g{x$c1{j^rwYkVX}8)^_nujS~+Fuk!4gVk;S2PZK|`Tzg` diff --git a/warehouse/test_ns.db/target/metadata/a1884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro b/warehouse/test_ns.db/target/metadata/a1884ba5-06f9-4e24-9c98-d2fca2b9d66e-m0.avro deleted file mode 100644 index fa06126f3fb05c4b5257f1798f3278ca540bafed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KPmkL~6u^@-TJ``dBv4Nk8d)5ZjsI+SlW;1~6_sEq?e?@p*2JD{%sL)39`7nt z`2rj&J_;X!L%ASvK|M&D`~5uM-+E_^0j7;9x~LLQyNFTuV| z1HoW2$Y8UUUT9Yq`c$&T()q8|OP$J6Wn!)sEDcua9kdL+t2Wwgw!nNA$pH2v+GukD%+P#BrvsM?|D3uAaWOsr?=^);QLzP zvyU>21Ymdo%4m@sBmt5dApy!%rb+&pyJ#9dTS zG1guPysiu8POJ#BoPur23&@arz|S}ay+j8CK}Yrp`o2ZD@bHU3>;TY;-xQ6Q%5hbZ zS#)<6%ek)4xkoWD$&*J9$W*2F+Yh$qLJ&E@e)*u&g8Z z(z3caD_l`1Ru@dk$|PWEs!+9#N|s;JFjX0vEy?y@^n}%&4bb%=KMy<_o~q-A7!w*B zvjL2k3l|RPEc}AT=ps#r1U``*J_uB?g!u4-tZ<{c&bHRE5ajB{1Ra;kx zGTxA1LGL;Q?$81P$znmW?`{*VeTZ>-lqcM1VHFe&gn%e(UO;%QozFng2Id`TzHl(yk@FaEIhoKg~xaUh7KbkDR!RFXZTDqF$p3@ z1ivDgh1kF4?>^|1a7}>bF4?a@=K`4Lx94*8IaqZ{std?Ek3aYndevC41aG)-OedfM zt|D+j$BPPd%0Z$`(JfWh@d;?Um2a|v35|jgOQZ{8#MGF*uP(J7_nEhg=T+^UtABp| z>Ei1TUesT`^~Wc-KWzMRtI_!Wx4(Y>``Pn9|EhD@_dF1n=F9gQJB=6h=8yHAAL=!DZ#J7dO?;^}Ydf`C17F`o hQ}Jo;KL4y%+iBcWqYXU>qd%+Bk70Ua7Y3{Q{tt|>O1S_4 diff --git a/warehouse/test_ns.db/target/metadata/a273260d-3475-439f-a9fa-a76fa4e0e177-m0.avro b/warehouse/test_ns.db/target/metadata/a273260d-3475-439f-a9fa-a76fa4e0e177-m0.avro deleted file mode 100644 index 8ee9c75a8fbf69ef5c44e2d3a01ada7eb2a22d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u=#~sw#mhBoGqP3XObD8h><~4^9ZSQW2D8w|lB0Yhq6tQ^z*raZ6a` z$^i-f2rh6z`~&;}d>mNrd*-n4NATWE?AT5=wAoZm;!I}Vd-HoA^XAjx=Z%BcQ*X>B z^u^9oLrfE9^o>;T%o9e_7zHf!Q=@>DGMc0SNr0q6NPsdGSz7!mEhQ#QR$d@R5D8<}B&8J*P112JB>1^dwai*9 zyD*|G3{k9f$p9XFHlkT5j6T7isv^N(Eb^EeWs@P}HEWzr#g2lIx#?QjN1Mt<;w~zv z8EY>D-qr?Oal^+h?0y#0oxV=wl@cCTN?nj zw+9$`5y=Z;7%No8oQOtiVLF{{Myt~Wm`-nVm`=B1{jCz;>1`7xb}m>CATAZvqH3!O zQNAIy zwe}o;j3x*=geEArqZ06NfuJyB3KyPb3vZdKH4BgLX5k6mfT6=kNrs&#^cg-Aj8B4y z5gy-=+(PW%if12m3b-afbC(|0pvN4T7q{nX^*LH~O3Dk!I**@z2)$~;S&BDYIHprj z0ap>YpyNdaI^`ghrl^)G@Ax=0-O@Mtz=TG@h^4{>F??#w-jbJEFZP+YkLQ*4+n-;4 zYroU)e8hkG>!;Vgf2RMwqw6nz{^N(gpa1jC^M<%MEwe@Kj$d$F0ID zp8&Li17{@o0{byIaNa8%I4ztwbKt$1*s+~#XtRl`YBHI5@6GT1nKxeyzuGx?KlR3J zLf`DZ(8V-idS6ck&pe?U`Y2$bpX&X~7kc39eap}zI>8k&_ZfF#&dB$Kar7L%arSi< za0ZJ(2Adgbqg~tRQ^6Kn=igRub!uCsiG^0MG+3o~VCd>pEwtM-z0K)@Nx!+!)~2Y}Z6CTS#8jO&Wb zvb*zGE_6MNJ&J)zo;^7uH-Q+F)2Bp68LP&Hl&_3h(ol*F%xjq~g@%nzQ>4d|u3LKm zgECJ8ZkaY7Cnx+k&qsoeCL&8hW~gIRGNdW<2_O+;hOAZQ63pBx5|w(c7iW+}AUscc z@S$av!dfNCLi@Q)0}_vjl8}->DMQ9p6_R=ye8b!za)(pF>bY#0Xz3U`!>)fJPnatT$bE&2J&p0G}419W{DKMy<_UdZc*=o6ag zvjNOk3l~nPEPO;0bdjP%0-uN&{t&2S3Gv|v=~dNT(jXNO%P4ywdv53!Q1$?&Z5Dv; zj2$Xlt7ac^=T(FQ$;2D$~jh$8AZ>ZL4 z?LGb!O%QYlO;Bz}CE(!!L1D!d9z4qy-ZE8d7IyAt;VHg=p~FZ?hMgz$89oz?PlAXM z9^a7MLhRp)u@5>0JQJX~OAl+%V-C!V*K@V{9Id(~}58F4CvvCZ_+RzpYH%brv zVOvoCoQXC@d)qQit8H2M&$MuaW6Nxt_-UCf>M)ZY4Oy!*Ix$;E-Z5>_?y=co$Clqc zwtJmUr*}AiY#luQ?8%qU9$Ylve5mbdf9y10?d*NO(|~ca+1zX5pwVpXH5wWYKiCCR h@zdP@|B8O*IL#?>)lV`>9w5gd7MCU$Hm8`^B5D6%Ir@4flGk9qTv^L%UX&D0&U zkX~=U(8MHR+CWPM&s?FkwUN&PFVzO;FEroN21Z+pXoxdn?lEq|SUX=6#L+W&-Tev1Yo!TN^6q>Bmt5NApy!%WNGoQw3O&DS$TnIek8PMo0L{WG)c#?kl<%R)iPtg z>|BeoAV9IwB|~`d*obC<&;|tms)_`EvB+h1l!XrCHEXPO#g6=d+38Bz2kXj4;x;O% z8Eei3-qZy%C)NZRR>?N$1!Nezz)w2{y+j2AK}QY<`o2wK?&1%D*a4t5zeySi72~=h zz3lEhmJ3}EVwYlIlBbVP$dxa~}Kh7BrM11M^yDOQB({-4yAupzFpS zz@W_2fE&7r+sO$(%JY$+qlw6pfVI`ODRF4ZJOW6>m?3MGxdbz}ibSQJ?Zz1-5eUzd z9(-u%rLa~>GS_}8(}2Vyq9mlmSIUraRfVLU`kyn~k8EcmSUr~wy&OlXKo;9Pivg<{Dd%*8TlWPEq1Hhi$qUQ8F6BmH@v|2rYY4z8KY4s}B-zf2|{w85!=YsVB;!;s9solI4PA-rXcx^AO|os8Dk2LSP=QM!WRXF^@LKRS(+l zxqOnywh_dWTs(1t*r~cOO#)xo@o1DXv5*K>sh2C%&pU{sxnKbc;Tn`1jh$8AZ>ZL4 zA@*;@vj;i_Toa(VOZRKgV-C!V+jF)094tE}1)@9&>l`ylPCo`02|Z zKl}He!ymr+kC|ICp!a&Vgn1Iz7X5J9_`n zJm^!i*YE55v&+`rqYoZ`{Pg}=>-z2HPV@Jz*2}G(Z?_uo+-kLUTKLdtHFg?}CO*Ek j4W{C!wfo*lqp{QcP>#0LAdJ585J&I9^yV%M*0=p1--JyW diff --git a/warehouse/test_ns.db/target/metadata/b09a338b-66dd-4282-8794-c8be344730ce-m0.avro b/warehouse/test_ns.db/target/metadata/b09a338b-66dd-4282-8794-c8be344730ce-m0.avro deleted file mode 100644 index 3d04b09de4fa1ddfe58757e0869ab615ca44f489..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`KPmkL~6u^@-TK0feNFYu66ph7}I;=*U(z$ZX(zk^5jgdz)Q~ z_)sf+_HK@m01OvE87)$PBtTLlBtV(TEG>RjmJ$;tYcCKZh@>%Vk_ z?x2DtW37e2>$+g>#3e!0F4?BMfDB_7_!%dlm*`+1=*R&<-?vCCT>M8Mb^z#--xQ66 z$?>uxv+V9XmJ3}U#V*6ZB#$57Cs%^5tBnW;u>@fh@Lp z7E2ZqltEAis?jnk>FLH{Hi;aZu`0a>X3uLyk@SnmXF{+kZat8E0<{k6NM2YLbt!kk z1*ON%C8fQB6|N{1s|&7VC{^yXATZr9^Pq01!-KHMBd6@N$`+3mXA@vrDs-<7*rEv7+8(e) zw*YMI4lwc}iWkH%R;Y?O5sNm$w2yZgt#%J!+WqZe+P#YP*Ghc5ze||dxnMnjxYSgO zs;w(T6>k_{LGL;O?$81P$#Oxm?(7n+b%b$xTqwD5A+U}%qg{LISjW3#t5^}mstPen zl9xl=>A_@SHML)%np*!;P1i!ScUVppt920JP<19;GHi5;AelGxcByeIDyE@r9YT=4 z>}b3fxni2Awh_dWTs#?t@u=#;GzkOg#J-<$xsnKWsh2C%FFJ^#x!@t6z%?j08au1J z-_Whq#&i4;njqN-nxNc{O2ESfg29X_TzFP3yk@E{S$K3a3s3L{3>`*FGVDB|&+xe9 zViH80i1>=+7GnQaynCQi!ZiV!yYz4gdMto>aeJ;-pYFO-Qe8kcdHntd(5ohbr+CAK zV>$&Da20_II$l(uQw~yPif*a$j!!_-t$dRYOjs27Je3ZJ5mRIKmb%osvB%wgJg;is zzw^Vl?>+0h_LF$==V#W7VdIZm&BiZ3e)Y{i|Ni>*r~yyy?>g>z(CHj@u9)EC7@&2a zF_uo09(tpWWa0^z9gO!5HL2O5)HFLLr4&Em171vg+GhL6wCtX5b=#vmeY@TDP2TQt z)@ygU$Gd%tQs3_%&aYbs5AHtv^zps3=JPijdyT*9&7bRg-_>jI-fTAan)p&{*7j<( k2EM*guj!|`|J#SP+Fs+X8f_G#zpK&rVR~a92A4PfAKzw5Q2+n{ diff --git a/warehouse/test_ns.db/target/metadata/b1c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro b/warehouse/test_ns.db/target/metadata/b1c83adc-6c17-4552-aeff-a47f0e2b243d-m0.avro deleted file mode 100644 index 395379a012fa202e521db28cb2d01d6c3b3ea6a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPj4GV6u@oQigKtTBoL<_MtcN1-akp~m{Sprs01Oj=_#^SQFF`=NioJ#Z<^Z20UsfG4q-i1EV|xD;ws$5f>9G+gD5^u(VsX1~Bm1h^C=5`UJl!iv)kM$YXAlPKHcWtZ_CKI|@SPCTnFMY$_Xx zyQrXIti2F;Qy0vgSP^771>2MtkRkVgpK$_ui4F#Wj_eckeT#76;V%NQ13)W&Q#4{K z$5lmU(cM`r=ej=O9>u^UPaZua*MS_9lgC6w87s$ylCO!s^Wi==zX94Llm2tLujt z6B-+{0nC>R7f$Fb{FKJ%B29+`K9L-L5U64a@!b%3oxp?h<{wuON0%>moi z27vAD0Y+X#@q!q}3RN;EqS0EIPIsHp>hu7nbG$iBr&qH6Mv3nnZxbeVE?5sBE;ZG> zYU>J7#vAf$=v{}v9a=yjSu9BQ;Wp9QM;NEwT*<8qfqk?d?aEun?rx8*Vnr0IGQ>2F zUk`Ds7n6073e? ztMNhPiD|6bMi5Uj@njhCVcCUA90tf>eEr+e&v#$^_{X!T@#~#N@{{8;1pT2spR;&G8#}oHEo&C-=6>Q7_SqIu; z=|;)EKkP^6n&fb}ZA>Blrsg{It#X(DHf?^}Y6yXLZ{Lhlh5XveBqb z54t0h*+cul@%QJCt-Z7Rk3N6$;Jo?j?Z!^y&wBHR`p&oY8jPFG=1vm_wPtOnR%_t! ktvZ;BpXTn%k88D^#(g#0(33Fxi<z zU*3DJiD}HVftCoKx&B{WL3bt4}|F(LmRaq)c%(a50{wlr0mZo;qM!WSEn9oAt!+v;MZVJY6 zU&GmcOu6udABF8CW^VIhsFg=xW<%c}MSMa<`2+-kYVHkKkWqc5)}*t9XTNA`xc3~iys7H2Y^=mCTYY}jH`d)e?-3EfKLV93AwE1mxhlI$8l(bZ8D$@2&kfxI%08ep^&HUM zQTFeS($u$&Qszzz0@Dpr59)?IJO~Xva!OCjZ1GsJ*8w&Ph3@qMn+5_lHwSDQ8vr)9 z2N-z~$qQl_D^$sxkcMkvTHS3%tJMRTR)2GtR~4>(WJM&aGQ>2FUk!1q z2a}1_)Ow9-YW`0(T?x_JVmXzpRzZYA)t)dxvC+wcWZuwQg~lzfn3}S62toR)qw!(r z@@XvFMi5Uj@x%!tr|iNc4t!xpqfx@dQX*J|UM^R^=pgduf(2{>*PzU3?5whWL$y|G z&+(^df}jpGL75$;fQJhNg&9-0@GM(+%T%pcczibtPw)l|9Y#V@>^z~*@R(qH;)jgz z=!Rq#V*i#ud!SRmH36EtRtHzuqc*BKbIsp}M z6@d#nUR0n{_7iD}YN@i0k3-WfeUlALXy}hvB5V-Dr`qf-d8u_HkGZ>eUe&%o`{k2= z-M_y)uMa-^dH*ZF@$0=tUE6u@n-2|1Kd+S1b&1|5qX>mwU~6bid^Ll@d~o6R0dFk&Q)V{K$fI~pZ; z7yk?Wpx6Ep{RaxAbfNtRdg-O-rR}w+Lf@OQWJ&hAiPs?rX*~1Zo8SAGH=j9A>U(b_ z?wC#J%UjPiF^!ov&=SE@S7s_w87bP&G)o{(b7UX!5ImuhmPf%2H`!t`#ixSLq$LG_|WX+O4<1d=?5H_QTt9 zQ!tME8qRLVlnY<@QP@sm<~GlUT6qL!HuT%0h)<|!UoxJ+)P}j|Mxg+ayI?$hmtOK{ zUn%_ZgA5}97%qU)S|kTafTTi5fHDTHH5US}>w>uxD}oHGV4L&;GK^f{ryYS_qJn{-BL@V1-y#ur@j)PV0BFT;l15C$ zxT;7mx;u;IT-PU&OEECXwM5J-RT58*rI5c4%0VHC~khRKOf|*-JqEgRxqZE<| zgl9<)J~Z?~SgRyiXg`)|K%x;*5)$GoWyrX!LQ+rsXUz6P+nEYh&1FL`#*r$J`8H1@ zK?8y^2+BY;N=7L?-6%*Wp^Y<^rT4(>d9BEkei8YUb2`PX`+`lN)bot|%0%3npb{60kH?s2bgp<(D)_Wrk);vi%o5Vf1E0bbSz=`z{Smk)lIi^qz+4zN)ubgvKCG!U@4IbhS+ z0I<0|z{rb8UJ%1rp-Se2G+YbQ>TWYytscO%`kTYFdL`?xmH1YFn=r9+!Fm93si@{v zTUCfM-XOYy-qiu_&;kO~p!Ui#Xs?FY!ms&USn7fPTRqe08 zzj`Zt|MzF#Jo)zI!}q*j8^7FYG`{=o#XtZ4@Y9c9)M~Xq>$u}Vr?cO=qMVH*K-Ph_ zSlD5*?>QYo`8g9EjP{OU=tf7^@nPsXJm4EXaY)zOdfPd$4iA{oYxn7$Ui-itnQhwZ z9kw04+aDROJED%aKfi44J-mDJ`Q!Vi&6jUCb{c=wo8Q-WzOL8cz1eK;H1Va@tnJil m4SapG4yNK?bNAv&6-)8} diff --git a/warehouse/test_ns.db/target/metadata/203f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro b/warehouse/test_ns.db/target/metadata/b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/203f51c6-8b62-4cc2-99a8-3be667d35b9b-m0.avro rename to warehouse/test_ns.db/target/metadata/b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro index 16c482ca1b5fb48d832e71fa7826e546d53818fc..a4df047e5b07294fc6c2eff00d2959ceaac2ece1 100644 GIT binary patch delta 130 zcmdn0v{h+?u7F&`vh&X#p4hjux*}cfd`*))(qrY8^D?|nUV{mPWd-U3EW28Q|u z20+3P2!Jd@LmqraS#z`)7Q;wEo{@Zvi7GLqmN7 z0|Pi=Xb9vPfP@STbPaTk42;uE4U^4uEt1TPbWM_zjdU$76D@R&lTyvh%u|d_lPr@a L?-xiDK(`41(g-Y+ diff --git a/warehouse/test_ns.db/target/metadata/b528ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro b/warehouse/test_ns.db/target/metadata/b528ecfe-009f-435b-9a1a-5cbc8465e7cb-m0.avro deleted file mode 100644 index cb14674e777d0de2976d33f8b09b7564c339ba17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&5zqe6u^@-TI~TXNFYui|g_ZYWftd*?^qVNLVIQu;H zIfKa{gUwrNp;=kzQNfl=7jNsAT9u{J#9S*_>aWu~YH4a$ZM0i&f%z;HKJ16L<)&a9 z_cfZ|jVTwt@T0Ju#LR6z8)@YcnAy-RH^1Yo!TN^6lEBmt5NApy!%q)Gm-w3O&DS$TnIekingixgIbG)^Xwkl+_W)iPtb z?3os(L4abVOGfbEu`x{pp$!TCRTc^UVxi0IFr7M#SFEwN6+89=W+xkEA8jieiQA~4 zVyw9ocvBZFoLCWLSOwdp7m#7(0zd5p^b!>e1RXgf==&ClxQjmoVh4a${3dC{R7|Rh z^rE}7Sk85Q6uA@wlRQ0pNUnV`Atz6Wj51b^3n^b2wW6UA8JO2HTXGFs?Iur;6 z00w222Hen1+)hULah8t+9Zf_U2dt&GO^HJj<`F<5CJb4t%q5t)Wh5%~Y&S|Fi9mRk z^x#87FNC#9lBM=jnFb^p6D1)bzEXya%PJ)G#Q%cXerP*0!K%4z=*2iv1v1~}c_e5+ zPzFI6s7A>srKcMO=`^%)#;Wu_n7ybKdD1TQ<}t=;FIRHwLSPA_@THML%&nwtMpP1i!Sc34g&t920JP_?H_P;7MaAXzl@R-tjrE2gGw9YK)3>S%lr zx_lPPwh_dWOgwRd$SJ!pi34BQ(RiFNv62W@p_j|mFFT05xnKdC!Zj!}8au13-%zd9 z#&i4$njokHO;Bb>Dd6D(L1D%WECh1kF4&mQO$a7}>bE;+0~k2o;TZ_nlGbF}W1loyaq9)EZrdexY-1aG)-OedfM zt|D+j$BPPd%6=kEQ7u*0@o{LnrEjuBQLdX!D#Oox}kS;T{jj#hGArHy582?PS@-+cg)(lJ{Y%;tgh1@P=mI+uH*KP zj=QYqI){tP*1_X@XP-QMaNd0Rc4M#ccfI*Teeauk4W66L=3WyYYR%eSt=7QDx9VUj gewzEgd|0dPHSWpLh8l#?U*+frFuk!4gVk;S2f~X=ivR!s diff --git a/warehouse/test_ns.db/target/metadata/b7caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro b/warehouse/test_ns.db/target/metadata/b7caa35e-a53b-490d-beb5-4d4d57bb8c62-m0.avro deleted file mode 100644 index 5036783b41f4359e86b34834e1efa648378ca6b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u_NqRrP=>BvzdEF!DKR{LwZaoEEW#m6o#Xwh~emSz~*$F?DP+9=8gs zT=#@Hap#H<{0002Juc#J;DR_HafAc!&BTuFWJ8-x)LPDD=Djz+_c3oibH8ltzms}n zHlcsqd#Q_Q!t{Zj3Z8jFZ|S3eg?_3JE?(+^uMfZNvVsWh?B3YG?|^bT9P+Ep9vHd93uf39)QwYqyR~Pq(Vr5G8I``{3 zwFfXL^EBY5Vc~Xi!cX&jBoIAf=!^-K^@5p%c3sjPPjD9 zu5)FYy@D04C>5(qCS~Okur$@En%#=!S2WCIhUQE1{g*vq_GUwLeHgz8JQ|+K-I zn&`73j8_X64yY{rlqTpRMTZ1F5i$HBP{|VF!w=HSs=K5?Dj=3o_CfaC&@G_s14_#% z0NovB|L!O)W7{ZY?zA8PfV6#-{-X5@JB4BHCz?QiI zU~7ATkr$D?AcnC*Rm_QKv=*k_-Db4fJ%DNVH-~BWD%RgB@$LRLVPfZk^#I~hQ7x*r zst{GYVSEj}s|(zr1q71if@B?S6RmZOaoR1E+_?}~$LrCqJaw$@_Si~RM6#+v%#!5I z5Vv|TSy)Z&x2UGp|5VeJ5bZ6NQ^{%-L^xEP2@@0>ogzr)4ZU4z+=_~+D_e&Uq;EPJ zA4MLYCbDe=@gx^d+%R^lE=-d!5KcTArA#a(f?ew63iXQ)qG&Ey$R=OvEg+ffO4xIj>tF@+1yvW2%y)tZIJceC&WZ@|!Dq$I=66Z#CF3C1Tu z#0ZbCNp2zbZ^gS0It5%4pt(yAYS3d2%!}J|wfY>cIwj==WSz$!e+0d1!dZ$pTsWpv zPytsFxS-=j1v=#*m8PhcD)0C>G~LoS`M`um!HA{80Wo~4&+f}htrz>u+r#rp`~Ksf zU;SvjzW>{k^M8N&@S881H}{&&zyAK`yPtmj{bo5*()gooJ~$!RN|m52yWLY2Sz~+Lm^!u@k6VRR zI3mP>zW@+N?nwL%z+Mn{t{ectzrcIr*s+~#X|su{XfmC7@6GRh%$pCLk6U{$rS6zb z=$~6pG%-z>Hq=tVGgoMB%@0`UrP}cPi57U;&}eHBo#2X?dyLyK*Dm&iadZK{IQt|E zID^F?gU#CcMzgWeqk=8A&VQ}mYBjb>6HBdNX|PJ~sIBFv>Y&|v8_Z{s2;e-tBM$}h zc&^dxUP8GDL=Z=vG-2-c`ADnJz)DrW=f`|PMdym~6qc&yo*PF3MDBv|^mTg0>3BYgxl-4FCNCG5tgajy4k)`E-rKLoN#km)V7DPguwMk`1M3ZzJ3kiNMG~Z?{ zww-HH7KSKRx?}_ckNGqUg*GJkuewO^7mHkGN7=+-ykU*Cu2??^nVsG!`(Rz!NZdvR z4P(uPz}vcD?!<;5!>ZUOy?_j37x-z%pqJ#qK+usxg1&E)n7jBzAa(#~!*7yCLdCeL zNUyrPh~-k(`>{(gFv;VGC*(R1V{-h6$S7m=xRCO5qn0#OA_MbUW=pAIt<#k0v83zP z9>Ab1(tsPfiN`4jKPd8%preV%l909YV^iYLlz9Y@h%rOfdFB$#+&Ypx^=voJAc;VD zk@Vn0L$8E&o+JzHr!oyl?2}wVN`hP&GOnwT)YIToW(Se&Oa*J^vY}VwC@+xZG0$Q_ zLxM60%0M-_j9PlSahOda8&@n#?}OR%T2UtbBJwHcbc#n01e-vugE~?amPK7EoN#Fv zJ^RWq`XwveQ7KlJOv)-GU}xXC) znrO2T%-0JSPUKnm0Zq_FIUN#sM8xoiKqX6v4=+eB>+X^UYGL>bEge~>4upHbwgerghn1YrKfeac&*qs0X8ay?)d?m1_CzM2W%Q^ z05&%V7>tw=KoaFl@P5BmQ%@U6-2mH?FkbU8=W#p<_*17Y23<+spYngAV{Be zHQtY0K22oX2;xa0o;YFb)Lob+VIb_-_fsa862YqUa;5r32T?W`EMyaS1{FqQXI1nY zd24m!J^lzy5Y&MtsIa3J@bG}3uwn`io@EPfnW_y7kM3sSF}{GI!$?VnohS4e9utgD zf`}0wUz5T@?BB|<2Ra2j6QH?E_Z!e-4$RBfbG`Z;thy!T1LP);pS%aXYQkBHFI>2$ zQ&0g<5qO~ELj^kJAeE-%EmhI+acH`wZ;FWtjRK#g!Ui#Xs?A=Nk6JhOn7fPjm9q2Z zTkeZLKK<+8-+un=wHLm5s{XR2s$c)}<#)gT@a-3Wv=l}8yM;#{cDwuCYs%R;24-F8 zi-jGf`<~MklwUB>#c=N$hM{*2T{pTq3}FP{IHlvKqj#Jh(+|xfy>nptPUpZmI_&g) z-|YB~?&=4OnggBg&tF@658iqB(c}AP>QAqzJL<2k?eAMVpSKhktK0B}17%y;Q4~3R dc?(R%&-U&cCyKJ8zKaW1%qpt73(K14{tp%oNwoj~ diff --git a/warehouse/test_ns.db/target/metadata/c068c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro b/warehouse/test_ns.db/target/metadata/c068c47f-bf2e-4f1c-bfa3-8e89e6d03311-m0.avro deleted file mode 100644 index 5527289414f0132ed06b18e0e6a27a874cd2e744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u=#CRrLS`3B&>RF!DKR{85?@PAlyeRzO*HyQeC$CibN9*0H_gajWbq zS1w50ICAF?;L5!>kPs&%BrZrG{sC^hHxoOylMQV)Q58+5Gw;3my^neG#qe2U|Bcie zvkCqC&Pzi~6K3>{RPf9bM$;GtEc8>OfA-P{e4}qQjfhTgMa+H1U6^a;d%`$6hhLmM z&jQY1G00%ErrK!NHu_Ys#n$<+)mxp~R%v3P6)X)_=^Zo;b*dKHZ8pJt7Ks4P!&~xD zFpuXN%I|&Z&AX$RPpD{JGM>Ux-QM@&NPx&aFrL0gFL`{R z6n^tjj*$Qi4?r1BQh+2tQXwQjnTjke{wpmdCM;H7AVv@gW7Z_49T82^aV#YGxlpyu zT5LNrqAUzitaQl$20k0nEEGnc;J>OO!Cx%$m>Xr2A>%b`oK3}!f{?lCTG@x2%0}WY zDySK2F9hDy1#>6X1X)hWHt7Xq7<<6aI0n5$1p`4x_6hpFNn-Bd7lGITpf$fq8VMES zx+1ge?mU(YU7y7s#lR#_A3r2lff$qHCqzaWtHyKx9Ynd&DhK){Bq{ou3 z8+!nQGEW0;nKm9LC;TYSM}m$fB1=NnRL7=dNK@t$KqAHrS*y$?n7LIXD)n41&LD|E zc%Jm&L(43MwMvqO_7j-~BpwkZAtixQhK#E!B=t0S!Q3Enhf~4oxonx`I8p_&IOb_A zXh={7K^dq<$*82K7l+v-a&g77^e&h^uN6hoFCw3EPN#VEK(GnaI;bOgVOi9r+zA(! z)p0K^t6Q+b9i?J*!KAEQ0+yy4RjX66{E~*5%+P#Ge*Us2tnO@pt`Fn$z@y=*yncu= zp@}gYzV~{L2#tJlLQkq}@mg`$0k%qo?)3rN76P_62W(p# z0JgUW7ALZ*!PVw_^Q`65r`<6DD>pSPvjB71g3@ zs|r!Y8^%}AyAFXnw17aeT#)P!w~5w1!Z_^|N^V^U?4$K)SKc~yXM1cVD9jHEu=4G?c9a2+~(w zjSnJ^PZQZTf_RdPC&MrvR$Z7TVIbUiG)kFRN(86W%N6Pu9YoPwu#ipQ8I&81omJj% zsMc!jJ^lnu5OfGlP;N&h;Nby5VZ{_4Jj)i|FjZ?79^KBuV|)Qahmn#DJ5T5{d?py5 z1Q8=Vz9PAW*uNEHA9M2$ zQ&0g<5qO~ELj^kJAeE-5mMZV~I5geTH~GYbM!|@s!UZvWYRul1k6JJGnYV}cmG;M9 zZ@vHHryqy?-+tPC@$Cn1>eqL4{fF;<`S;JSfBpSL)3kpYc;bG$ebBz5oQ-2Z)`qrN zxKVoG58HzBb0*pt?QPRC&9(&}7~vOuU`7qhmf7;mqpo+@8MTHZo3#!{mIov1w7RU@ zV@JN}IF@xVe{AhPy7&0Yrw>l`>v!~B{pZHc_l@1J8XAoC9r(h5wxjK8njF5}08{a^ Yvv>W8rtRwYaKVaMP1pBeS^e1m0mAu7p8x;= diff --git a/warehouse/test_ns.db/target/metadata/c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro b/warehouse/test_ns.db/target/metadata/c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1-m0.avro deleted file mode 100644 index 1d898f1a7c2936caf4310e62e3b8bcf44f118789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&2Jk;6u@oQigG{^5{OfUMtip7{cz(CPDM1L0zzrhQ?OREyW@JB{bF`Dk*R#; zf`s@>5aL=12??$o`WJAnD4gH`7v7ukuDxs5B(AN*+8xil_vZIL=FO+hlls9MsXJjI zeR1olCZ-9~hFU6k<_fK)jeQn)sWv=+s`;KaG+J6jL!1$Fk8vBuTKSqFjvm7sXJ2GK zXD}ILuvtqjG%E`|D%fJ_{B8YGtFly@SZD=H{dIarElusJjdtrTFrP)jhyC!j+!T!C zzDBd#3FX2UejK&agt^W0kyajonGOB+IOZW0?Muc}nA$K8+&B^-avzMR@6bygA1a04 zyq9An0K)}PT8k7Q36N9>2~egYON(Enr9_9x$_qsEBcaV&WNAf2lXMab34ShAEi)F& z&b25D0u(DjcFDLZAkE^vPke3i(F<$S?DlcvBug~?AQ;Oood|Zi@6+(RFPP zU{L01zzyBR?c{_Xve14a(}2Wdq9mlmSIUraS%svY`d>2Jk8EcuST&aoeL0R)fh@Lp77H2> zltEAis!=jZ>FLHn7DhJCSe4!fv*)#3k{6amUCNzsVHiF8 z(lGi3D_pTutS*?8l}o_VRH170N|s;JAd?xIFUj}6>oi__6QO;7lGrLuk_M@OSVcJi*>gj8fN}sRO}zkg zbCiRdqcrthqm;SRg1~fx%!9fi4-Y~kkDSnxGFv=W>`j1;r9$`mfK3Ado7)36jV%D1 zy9128h~xz^j1{V6PDG=PFsj;AMRY&8! z$mP>Swv8a31F#7^0TX%hItj>qGaiIqgKmU_8D{i1^?nhO@N5UxSF(b!q#{f26- zHlE|BXo8>)G(ou?rGSSE1cez>xbUo6c+FI;Sa@_Z3y<*z3>`*FGVDB|&+wRFJoF<* zczi{23$cGIo;}bh;F4zq^r{JGDc*45m`*_j zTt(o5ju#c^l>JniqFSoF@jyA&#T&xU%wmv z@$AnhpTGR)qkm7u4~<`MH5-3F|LWy;KmGOWdA$Lj+V6GT^sv)8>|9aKCNWU!KxZuM zC_VI?j-dQ86CDirj;`xQM>p^bJ{<#|;9r+-dRuP~T(|3))M<~$-8=2BXh|H`aDLx9cyRaOXOHfkHDA2d*lYY&Z+>6j`?g+#=Vr6H*Tjcfv$j{OHSqDx hdQE+r`#*nJtL-)J%F#wK`imTWAEr0Z^9z_ z^3IhmrYX~hdM0@83B9Y20~Y$3K0Le9179DST|K4|&Pce=xC3L|VojLDPvMQTFY|yi zm<%%5tg9AUjfFlHY_W9ywtA`ESSn2{wSuL=D!rqwu6ET!yNxcG&teh4et1uA3dV6? zquJe*auJ9iiF;Yfyw2H3uaCe?&A2;Gctl0-g7FNdYSxaI!~#TagYon|dcl)jrSRK( z1x5leJOHJ4NePkwNrjLAWh(Nl{8w5^44ACEK=dFM`m9STD`J{vlSD}HbD?UPxmb3l z$9Wi{Sm}}xJos!(^HAtRf`8RTg1=boF(=L=m+^)*_PS!nLCBo!TG@N+%0}W2DrgvM zEd<`w1#>4h1etclHt7Xqn0UZXKL))-1p`4x4hj0cOA_wk4}sVLpbfuC8YvZ%rXr*2 z?jn{;U7sc%#lR#_9z7tJftZlv$3#XMtH*_uuZ&vKP>Br8Ynd&jhP8H6rpJ=58+!nQ zvPc7N8WwJ+ApEe%M}m$fB2PosRokY-r5W=HAQ2OWtX1X`%-lK>m3oesg##)JKcgwSNYNpIPecM=1S(lVeE30jUU!!?NCm_)$^pop8@d6M13+mRC7|1* z9NZqIWo#Oy%$+U-rWfWu)D3xf5E}dBgr3yd;<4gf2iU9>y4MG6nF!cgAFySv0od9c zVB|$4FNk5RP&IR68ea?3KHOxq+D8D>9;^@3KB`%Nqr|rdn}ms-3)TaOOGUM;+Nwg- z@rKDI^sX*&hZYb>Rtu7~ze%*#0mkWJspQs$z&f}d?aEWfI@}yv$%;r;b%=SIz8d02 z4<-w%sr?$&)cT)lx)P$j!E!2Dt%3-LsuM9mvC%1mWZux*mBy{Cn7Xoc1VQ?$qw#+1 z@o6gCMi5U5@x%=ix9-9$4FlmM<8j8sQX<%uUanNX=pf4Gf`u%CYfxb{c2-5dp<1hJ z&+*4-f}k!mL4_T)fQJhNg&9-0@GM(+!&GfpcyK!lkMRZ!9Y#iS>^z~*@R?vd3Svfh za!Cpcv41O{eb6c3ngGpRw%dT7aA02Ep6k_TZ`CO&FCf=>{K3c2tEQY~c*BKbIs+AO z6@d#nUR0n{4l-$qYN?8jk3-WfeNzlXG!Dir6Ap;sQ+@WXywrM$&%A9suUhZ_@%A&# z{_UIR-qlahuW$ULy||-kzyJHg&)@(3y59S{5c-To!zY?1)7KD5QciL+hb z?F-7EGSSCq@0*5U!jEaFCwMdA&FmZa=@~uG7z`NQcY6ch-S6!grq^?!aqlte9auIU zo96gncYfL0dHBJjFP_{#?Yw+P+tU7QcYbMaeb;WmbEnhU>fl4G)7omaG<yP95Jq3f(T`xdwhe>LZT|=HRZ6G; diff --git a/warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m0.avro b/warehouse/test_ns.db/target/metadata/c0e31041-a16b-4018-97a8-f54121d210e7-m0.avro deleted file mode 100644 index 8089a69b7f0352aeaf4e1c86923338509ae6424c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u=X2RrP=>5D0PD!^r2P@z~ww191Sc6)QnmcDo0(3f9D)G^UPi#^Y9D z6^RR+5EsteIDo`~3;zK~h!Y?G0pf)C6FBhROzhZBwzSz)mE%li-h1U}>;U@33X+UA56}s|DusNCvPU z(N>#+aopE%emh}81~Q1FcA9W+=kd_2j=)UAx;>7?l*#r57b#3N?0qkeB#7JtDx1xNxUH9`WEnatASS7j-&V6yfCF@s2&^A;(sh**+NVyVC{ zgz9B3;`1@fLTL^N{!|qS{^F6x-6)%mxTsm1Y!q(*8HYu zBuq}~imbA`^H?r)y&ZcD1Cu;@aF1LDazc(D5*1~<8W&2wHflvfDKapxRkjowHrh>* z9xJ-8?EwtRJPic3Y}`&x_bYK= zK@x%RJn6xQ)GCFwPLiee6O{%e9uqAgC4p9kjH@aX^)&dHyFuiRW|G%)nOfyI(gm{E z=4mWhNKghr8K_3fsHCSChuJi8amK3j9+-WE@hAoh*gw*ki9T;3n=@5 z(zXgfH%HmOIZE5wHcFK{EeK36%zUUD>hK^e^2rH1sj|gm#k~qJEfu-yFrEJ9Fr8k-`fDY=)88gc>|C%OKwN67 zMb*|7qKY?+FQIoG0e5Htfn>QL*>|>y);_{G?G{RITnOx=tI@7Kb?ol;*eX^;v8qDM zlH}%~6z_VB!F z{PFc`;>Qnuu)g~C{XbuMVf>x(%PqtB_mj`R{Qa*_zyGb-Xf*z5;+6-U&Ozsr2|kH| zSqJ)J=|<^+Kk7&(&baJgxOXgS(GI25f`dG2*G}^@t z?z!|33ZZ{T^GBq&(n6uveq2NUfFAqaj3rC5nHD_ul;8$GrJ`^kx0voy424 zDSdtGnIUH}GX_Q?Me0eTWsCzB`iU_(e`W-}F|b-jM5j1|3!e!W##-5$kVjA9mtbF| zfnYEhWUzTlFSIKQeJa^<>EhS=rA}q3GBMW*mImwe4qJxaRU7R#TVOtmWB~gSZM7*F z$9)aww__?~AOjw?lbCtU^Py25ftd~S_Lz$)mF-I=5}4Ys4?G@85V;S=(+}vS;D=h_ z^Sc>F0x&!PWwb~Rk^o7KkN{;W(tAd<$sMG7k-8YdGj75Ifvz06uJ zJ2#><3{k9d$q-(AHl}GPjRC>G$|AvEEb^EerPC1;6>FSr#g2oJxyeS^N88Fq;w~zv z7;7&DUe^T+CsqVmPQfX8B0a(L|+uwl2!v-z z4?eWaLRjl0S!zF3X+ZdxXbA}kv@&E|R-vdT!Pm?UB6l>CteVS~S&SoHAoFdWaY;jh zG6>2*HCjd~Jv|<#)5ygctI~U5_M%qgNxzJIDg>S3)&t3=Q0t(MWQAo}mog_@Sk|$7 zX<5CT6|N{0s|%)NWfHJ7Rj69WCCe{qn5qoTmSp=cdcx|>hv@o{KMgz@o~h%97*iS> z^C66v3l|RPEc}ed=ps#r1U``*J_uB?g!u4-tf0r<^bHRE5ajB{1Ra;kx zGTxA1LGL;O?$81P$znmW@9Yw--NiUP&XwG_5ZK+#XxE-P_VMo6Dpo|XDnm@;_{|V^ zdNA2oO`W%>ruP3-)3p$t9hOtYY8^y4RNX0)6dRp9NEQvfQ)t}sifL$DhY+N1IvVds zo|wg|Z3OWo6Hi7VAC+C0#9<&^J{~7bt|Wp}=;da1F|g#?C71H*{;Y z@f?4QCP+GhCMdI`6!36?pfF$~3 zRRk{Rcu|2)IY^W#x~0lGJ^@X)@=Z1{rBN_uiF84Xm>Ki;)uqH{$HF%YAJbAprr9>z)avz)M)XeG?2h~GBW549`(D4-_U*Ap z?NQ(FcG=OA- zOa1^oh~l3heq0o9UOnhV5WIL7yvXVw;d@o-PIo7poyjH)L#0yn-mBmHs8{ceKdc|T zkT_Eo&?h$@Yho5NZKx%Jr;gBC+QehNn`pzc$C~GAL!+gIG{6-RcNw=~u9fZaqwo=Y z$|O9fkQU3^==)v9cjCgxhfQg5B!QA<;&YNOqH3(RMs@ZdbW zEe{3rc&^d>W=y&8gcpVFBxX+YY^0TEU}ZzUIf-~cMf-yB1eP|;11Aavh};L`=_~Yt zM;)c`vo|t~1YkG-N^6lEBmt5NApy!%q)Gm(w3O(uSb2eHUMRGAixhT*G)|_Gkl+_W z)iz_f?Mw?(-$$|1B_kNPY(i6CXhVWOl|_QTSm-c2OoK7w6>F?*#ZEk**~v!Phug|V z;x;O%7;7#CUeyH)CsqU*R>3yu1!NdGz)w2{y+j2AK}QY=`o2XX?%+QHu>(LWev>p} zDyCIMdePlkEa$r3i5!Z7Ngm$6OD;VzCC3klj51b^3n^b2wW6UA8JO2HTXGFsohDC@ z6dsoP05%h%q4(COc}CPnM*Kp%Scq}*-n%~ z5`pk6>A{DFUI=TIBunilG7U&HAxc6*Jf#d7msLpWiT5$Hz0e-d1gqw#w70CRU zr;(sOK^X*Ppc*Bkl%7uHr$K1ridE@-Fndue@}yrzKINRw@aUdk0n|FEBUxct)}_n| z=Z4XtV{xyrV3S~SF-$q`l-y&Y)f|jq9=_0e1xv|qeq@Y{Zo1U z5G|mwHXp%!xp3ix%EEVPj4o1ii02X!!5;#ZEFnHzFF7x}OB$pCVin~8WG@We0m=cO zH1!m{z}J{go2m8tf7#b}m>CATAZv zylSfoQO4^>m(aV8fjhK-K(bhn%v-xeYaU^o_HrfHE(GS$X0&T>9kaJPwvrW*tjZA6 zIDR_BonA~PR#WRas;T*mYPuGpwZn2MS*?Qzm#Q5wL9x-vgJjXrTZP6gub7&$bp%2B zw5#z>=!li2r!9Ze<)6Dx^e6?(Z`{j!6|n+xW%0G>ga(b!pK z{f26-Hs0e8&;&up&;(_6lmZ?e5ENF-;K8$M;T2Q0V&T#CEIh^+FmxCRNwM>UKEq{# z@xTii;n5|@EX4jTAG@Gaz%v1wyQEWr9&uovzn;t0=WyLEDIXx4Jbw2r=v8CR5`5vp zHJyM8c#6OS9Um&tDSL@DMYU8}$H$@RmcGd*0vdV~mIxcf@R>G$Sw3o=$Ystx-dDA+ zzWMgF^XJ!Je(>6NufG2Mr++klyU}R;@b5pL{Qbr6KmA;<)oTCM@yNq&x6{3(oJ}KO z)`h-U*kRIf$6Z1BBPO~S?p@t5^u<3NMuv_PI!xiGt+yT1bOuM%ZM)XkX&+M7Yxf6} zLEA7{k214o_4>Cui`Uk{z1#QSe|YD#`Q)X>UgNKN^T+z$=k*$lo6Y8469=_sZLd~q l;P6E>6+g}WU*4|O_8Pb4Y(q`L?5}e6O<3O8hso->{|7{4OjiH^ diff --git a/warehouse/test_ns.db/target/metadata/c73f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro b/warehouse/test_ns.db/target/metadata/c73f3f56-2429-4cd4-90c4-f24e1ce2843f-m0.avro deleted file mode 100644 index 4840a94d7b7293cdbc914da98b15d7af6690715c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&5zqe6u^@-TI~TXNFYu1DC zfHNTe2DorRaOA)R38elRhy#a;KLCjf@6E)H?WAEhO|)7~CNuB7`Mr;M^Wpg8`oU|7 zGhtKu;?^@w%wnbuwM6jL5n4<0d=|KgHavT#`K~rJT3Se_xFX^%<2KB-vOPf*p2IiJ zK1qGfU@^#G^Oo9ZRyMj+u;tdpxAj}C%2sJ&t`#ix*XbR#GH30Pk4zt5_I%d3LjkT><&kvZLY?R&IRyGp1 zQ9;F6b1Cq;E?79RBFL}`wn;A_!^i=C+A-)QDi{bla!AnkEfR4D{}G5C09x^zq!Cjw zsVdTo?#^O4*Y$qnPz+4+4#x!9r0VHC=khRKOf|*-JqEgRxq7;${ zgl9<)J~Z?~SgRyiYCn-_Kq8MQ2?_C)GGtsj3ZSb^JAVy zf(8U-5R`#xl#Eh(I#G~LLmOADO7DZ&i&~K<{W9_?=X8cg_XV3mt%Ev}6_#aP%A9av z7(M&aF#0(w+)*f27fi~^Bw%T(P&Ilb%P(n=$_&l6Walq>!syRO==vZ!_Z=FX%Ik+{ zQyOdY5zLnh7fz@w{D8*jB1MPzE)fy@AyCN@;=}cmi?X|2NhO?}rWW$v^fFr6TEp>D{_gV4|=C-kJu7Oxe16JVoI=w2PLX&_*8d%&i# z1z>Y`fRPuGydZ|LLY2%3X}A%l)!SvXT77_N4Yr4A^-I=YEAg$tE@5Klg7pC6Qc=yT zwyF?iyg_sYz3UjbLkkEbiv`KNvrDw*5yojRS90S*U>fMArlxEiL6E-e zYP=shd=|^L5yX>BJQ)Ykxa`6t4t!xpo|iDOk_c9zm&?^JJBYlwU;&%LGbl3}JFBeU zP_5O*d;Bq)Am|vHpv;a^z{3NA!ipI@cvdaEW~x>!Ji3{M$M^z<4kIBccAn5@xJ)oU z^+QH@bVV`?v46|QF6b2SOn~MtIjlgBI55v&&*kdVU3W{$2goLmKez|IYRp-JFI>2$ z6Hoz95qO~ELj^izKar-WmMZJ`I5geTH`&CLhQ7xVVS^Yx)8=oPOT0?Dc=O&wu!~@%&b!@%{5Jzx(y)zy7(X)oOp&@x;SU=dg1{Ih#a)tOISa zu*2lg9d`uf=S*}k+B=4>>mA)Nj1CO+4h-Z+e$(4}+v!=J<=r`In_Y9z?mBL_JmAKlg8As&3N1@ zta9UwfPaBM0PY}hfeR964qOo2R-6$>-kXUX+sT$Tn<$Fx$;^9ie(z)6eB^%8+Wj-c}2(+CrZSwp_Y+Tffw?A{(fnRQxd=oMN1ZfbUh8b6S4Uu`X51Ucd`d;9dg7NfqddcH` zrSOZla*PCEcmPUolL90Gk_sUK%2Z@&@vpR$7%*9Rf#^Xb^m&_hS2{P@HZPE+KF!q3-egt}n3I>9X91`?>o5bA19|ExhKx=-JG!iN% zbwx(m-FYk*x;}_Kih)U{*|5|4?Jkdi+?inYTsDnz9H|0XZ1Xf0 zG$bg4pbS)_WK`1Ai^FUhIXGig`XQLTs1-%hFC(9FPG`9FK(Hy)I;bOgVOiFt+zA(^ z*>^5Y^RQrrD@w)cf=OAq1T0N8s%F1p`6UfAnW6cTeE(%nn1}Nbx;~801CNHM^7tY8 zlqULo1mo4hg##)JKcoq|NYNpIPecq~1S(lVeE30nQFWIzNCm_y$^pn;7`g?N13+mR z1)$rb9NZqIWo#Rz%$+s_rWa;D)D3xf5E}X9m>yTz;<4gf2iPnXx|auRnF!e09I$0> z0NC0dVB|$4FNk5RP!)3`8eI$1?r$?%?L&ZR4>pHsA6BftQR3T!ZNkLP1?vICrJ`C? zZB-$vc*FP#dRG^?LkkEb%LU20zfH8(0mf;+P;%=+U>#hKcI~NS^|!}XvLcdI6=Ieo zFNV0)gUP~bYQID^wf?7?u7zlCv7Aa)>mb6R>P(rS*yt2NvS{e-QsY)sOkLSJf*^g- z(fBa(_$-laBZw!tc;be!TXkWYgn@A4@i=8-B@ygWFIT8vb`V8#!9q5LYfx@9c2;@6 zp<1hJ&+#W{f}k!mLAf23fQJhNg&8xr@T^*R!&I$VcyK!lkMITz9Y#tr>^z~*@R?wI z8bpln_=@BfV*ge=`=C?6H36EtbiW2Y=D@tTJy)wwZ`~;=FCf=>{L#D6t0tVKc*BKb zIt3MQ6@d#nUR0n{4pM1~YN_&$k3-WfeUlGNX%viEDjX2QXZrj#d8zecpLx4@UNzqM z^V^g6-~Ls5^XuQ~UGYy(`{j zv2dbv-*>x$@^dD-817xuFbwr$n5Nk^;9U;EuwitJj^~?h->3af&!k?bXIZ_DYYzq; zHn1#7$1Tuw3Hrl81~YOWbKD-ee~3imegck{UZW}p85y$RsyAz-g@e#&_E&dkLY_d+STq#QEf%Sh|zfFy*I!2F>gK_J+ANF zPMiq~=*wGAG%<~tHqa8mQ%7hmZR|1MO|-$;6U}qAfzi@J8sLhEyNuf~*UI+zQFso& zIQug7ID^F?gUwoMqgmPLQo$Bm=f75OwJKYsiMdv=)LW%@*wWOg+Gw}l0`plYJU9<; z%R|9Do@+R}6H_ic;YDFPiJ8+p8*1elSlQ6;j3XXU(Y|Cnfu#*|&xt|-B6q=f`Zm4f z(Y{jn^t}ut0T>Q|(pn@3Nr0q6NPsdGX_Eg}T1s?Sth_)pFBICWMG8AY8Yh!TNbqx^ zYMZgxcBX}?@1t1hk|7LSHm0dBv;o0?l|_QTSm-c2OoI{Q6>F?b#g09n*~wbj2b;=9 z;x;O%7;7#BUe^V4CsqU*R>3yu1!NdGz)w2{y+j2AK}QY<`o2XX?%)@J*a4swzeyS~ z6_ctWz3A>NmUCU7L=MHkB#$24BUhf7kmH9$Mj0!|g_N(1TGCL649shpExCq`PLrp{ zlCEoe0E04118(Rh9w#GwKg&mgjwT|Feb!RPres7D<`O_6CJb4t%q5t)Wh5%~Y$r+~ zi9mRk^x#87FNC#9l7;pYnFb^p6D1)bo>GR4%PJ)G#QTcbUTBY|f>m?b(2H@T3S@rF z(@0RCpbUaCP>qsNN>3;9(;&2Q#j^Asm_4r*dD1T;pK?y8cyv#&0BRl7k*u&R>Qd%} z3&ZHzmxj^HS>cXCvASSVRwe;UQ-!M0Em?j^{ZwXXwk11%(Gx~*HbmF^(YfbP|5RQ- zLgj;fU*xL zO+5#6bCms?qcrtxqm;SRg1~hA)P=esFAqXPmz>a(GF!Y>>~(;RLZN$oz@~wK&CLOu z#s+}R?Eyw!MDl_d#tKz3C#2z8m{xb2(Q5Sorq$mZrqwH1f33u~`rCwwoeS0jh)YE^ zuiC0Yl=1q}74)tn;0`SykSrD?^KhGJ%_EG{Zm#6Ug}^*ok9Os)V|KU4RT0|jI(!<-wh_dWOgtI+(WvagB=$XFN8@qA#8M(yg`*7QtUjT&v2Pw zJn%wBcyvWF3$cI8$1dm;@JxW_F4?a@k2o;TU(e<0bFk``ln;<~9>4by^r|su3BGXQ znod9kJVoGvjt>>+l)XfnqFSn~>`6yX}L~$ZGef z?zHvpLEq^chgP3j`}5b<-u?FgHB26;@ diff --git a/warehouse/test_ns.db/target/metadata/ce566f28-bd86-431b-ba97-fd70c8073fae-m0.avro b/warehouse/test_ns.db/target/metadata/ce566f28-bd86-431b-ba97-fd70c8073fae-m0.avro deleted file mode 100644 index 3d45a50934dd9d8e0c11f906caa7235423e933c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u=#~s(L^b5{T0ZjeJ2!N#l=hzBnP+N)=F+-7c3ZvL^PV@z$};c-$(i za^=XCKVUEX4crhCLYz1uP8>KQ#2)}i@ZL=9*iJUI-K3Q@ac16o^Lroj=Ht=R#=$G8 zH(^uy`_3~%%o1h{j8yQ<6Gqb*2Q2hcV{rb=2z+B;HI0Z)aYoF2#$9;V%-4i*bOGNu z`z#AMgUKL+&6{eWU0di=!In!G-_|d6YD=Ywg;uaMSf_W`G}NwIXt&t}^I0SU*bi^X zO~HHI*KmF>p@8lQ>!0-T+(If>(0wfhe0+gx9(&ATXDKTNP@&Yk}NEq`bDXoZTl1^eF!7qfW zW!7@pxe;Yyh+?HnhA{Bim}a3c1_XbqiUfbL$YXAlO-GE^ta0utb{vGvO*hIux~ps? z?xKR4vG!8nOdGhFlTnA!8jvo^lWvm((Qob^3MMEhvFt25{6dLZdn<70{ zblunk7?gP$aLcrDJ2~Npc|Hgh-Dd%*CTMq=ALal>3k{6a`UCNzs zX<1$O%CdR|D_l`3R+mi5$|YcFs!_GN70a(^n8^&ym*o2|d&26?hv@n+z6d-Tp2_2f z7*m=U^C7&i7A}0DvhX9CpoK@Q*+xONb9YNH44Ik_M@OSVh?f*$YFrfU*xL zZL|C%OKwK)S zMb%anqKY?+uc3Dx0e5Htfn>QL+4r}J*6v`Ob_*r9E(CUGGupMMj@{iJTgi$@R#k{u zlDrt=Ru3i{tEux6)ztokxwU zMMvX<$m6p_wv8a3$VCXPXl40iweTL5j zp`z>L9s{Q=W+xm|?y8heqU%z?&=Xd{p+t4)aj|Oge&~6{LuPJAf7?`!8 zFBWc;9{QuUp!|Y~HimoKf)6}Qt8L=QG+_vTFn~|XY9>=rq?sO&X}^p#ck{0;k%DMdGg>)|KT-#Pyea0`*maQi-rbceHR`$&~~*wO_Re{ dcfeHq?C!sLqG@~jdpKduTTR#ZVOo9P{{e7hOHcp+ diff --git a/warehouse/test_ns.db/target/metadata/ce674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro b/warehouse/test_ns.db/target/metadata/ce674485-f7b4-45a2-b7b6-1a4c56568f70-m0.avro deleted file mode 100644 index b46309bb38028a71d9ee330b56b69db0bd5b4fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@1#s(L^b5(tD?p^?QgY5b9|h7*FVRB0*8ZkJ0HSz~+Bc z(7$$HXnYzoZJ?z*$y}~Aw2{vOFVzMYFEroN21Y{*=>%s)iN_Kf#v1vWAPO(xSHix? z{Di?|kiljRxzMaF^eAVGrSo5_ms+)@!o)%=Sn99RJ8WojS535AZ-DtM1yEXp6d(zZln4n>raViFe}$z)hsn|lMDs(g%^IY%BBXITj<^6n7b=$- zi)9yDm<0if6)qXVi^oPZ3%E8Q_*YdV_=|-uv%_rSu%u>{ zE7HsE&SSaI^(b;F1}1s-*9!t9J z>;VkQJPi^}f`(XCGRuoCUhsRHF_1xuW68p49%D1`!9RK=+B1e`XIXWT^gK=1;0h`7K zfX(dzMqWhlf*8gMRWT=|;aZqhZ=2C-^#P`Jyg5v(U$Op9iEkZm6DD>pSPvjBCDo#8 z%L-A&8$>tIyE?!fT0kIKE=Xo)n`q50#%Zrma_>T5cGsg_dFq(G?XeZCh+tKPn8oqS zA#U|xGO?OkuTV|R|EZ=cAzE83r-Icgh;XRd6UHevIz^Do8+xnMxD^#sleP{aNMCj| zJ`CMt8jH3O#FJb+ae~OHx-g9cpWD%Blrp}Q2v(_=E7UJKh@!b*0h_=zC^s5AtGwTk zt<~Cd{3)8isRK<=Zbv2H;Q~Qn#uP3*%NE`-RcjV@?`Po&-hiRQNJ)mBC-fN}<1Cr@ zAtOn2LvjnTe=FWS(8=MN0L@)`RD&KRz`VFUSF2BZ)hQ`1AnQDS`Z4sXal%r(;leSU zf(p2bzy%#ID$ptWsW3&hRC&jjK+`RJlMhU2=#N;+Z4i@8wb`5EQtL(@a}V&mQvUqB z6@B${=ezgcef#epe|hwSdb_Ktx8MKq@9)3ee)Eo^DF5u>jt8yQQR{{#Y#afy7PQ6O z4$~vgX>podGTy>yZyCC7vDk{dH&Wr=9(;cNBP6_uzpq%AT^XDB|_? cT`(0tdk62GD$2h45l&b!s;KG#OsjAEKUSqkSpWb4 diff --git a/warehouse/test_ns.db/target/metadata/d07e2165-822c-4192-a463-1384cab3f16d-m0.avro b/warehouse/test_ns.db/target/metadata/d07e2165-822c-4192-a463-1384cab3f16d-m0.avro deleted file mode 100644 index d09c64caef292b60c653468c5e60aa9cbaa6c1df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPmkL~6u`6DXtfe(g#_YM(8y&sd5PSzdKo1C2969kZ;98YCN8X!>9otF6ZW=3!oXO04Z+`F3y!mSQeCOc(#2vE< zeZBia6VsS!eJv3@b%myDBcBCcqV>;TXuhZQOi* z3?_pNHq+HYtFq9ef-RQLf303>SC&c>bFE;hze?{w*VL|>Xt$w*`79JZ?1wkyreGZR zHJIIrDHp!*qp+F8%x#o^p;Gwc zXBkEUFkAqo=_Ch9fTTi5fHDv7!itc_$v6@c{9LG7W-gYU zYhfA$C|0^;052XJ(KHZRpWt6*k>D>Dy37gF$&m4iHTI@rM}EMZWUcJ>rm~T^g9<9f zS_^?Ub-~<;6+xz5uuXaa8AdMf(~dzeQNcjak$r-`*Ga@({2~xL0JP#aNh79WTvcQg z-JQj9uItOlr5Kpx*^?7;?TaxveoADNv2t8U`O2sz4TZ?Syq4LLYuIQvd3r4Ay0Hf^ zD6=%+reWcBGQy9ud?e^-BGNcuy4p4+Lz*y;01`1~$XaDC!OSfqQK{#+Q3^=}!n33Y zADTuXtW}aMw4cf}Akl~@2?_C)GGts1l$LI-CoOYef&^IDN7{UY)y=X8o&_XV3kt%Ev}6_!O^%A9a%nn%u+ zX?Al~xS~+3E}4{-Nx;%np=utLEWe^bDl;@&lI_3f39~yJpzDL^!gpzKCXXMYO=zsm z1~6VOTsWYz@DYvCMT!pbJt89bAW+E?;=}Wk%d)$qK`J1YQT9Og+|Vtc>;X#4$N}9R zW$*SVEo0j#W$x$@m~N1IP&ee^L1^faQ+irvi^qzy4zO7$bngz>G7+$~Ibh4&0I;<^ zz{rb8UJ%1rp-Se2G+YbQKH6rq+FgKY_cn)VcT3jaDDmyyHeq7tg7pC6Qc=yTwyF?i zyg_sgz3ULTLkkEbiv`KLyG^uK2jlc8S90q@V0G4`U3uzQN84j7SrN&q3^9%4w?o|O z!DL}IwcnwdTK`i`S3fMArlxEiK#;!eXnYvD zd>YHP5yX>BJQ)Vju*PzU3?5whWL$y|G z&+(^df}lfaf-*Zw0S^}l3Nxl~;aRruhN)VyuyZ>LkMRZ!9Y#V@>^z~*@R(qH;)jgz z=$d2}V*i%Ed!SRmH36EtacH`wZ?b_24gC>IgacyuRGWPyFSTyuF?S!&tJ)|3w)NxB z|M}wgSNDE+^WEjk`k%Y?`X9f3|LT{Y|NiZMtyX)pgFEiGT8FJ`%Go#qWG!fmg%c)+ z-moPozhI(;(cUuQX&DB7nFfBT2ZrEj8cokQVwTyt+w5AF+iaUXt4Z4(yJ_0pwo8Zh z$n1EB^UK!3<9koOe)jOJ@%qF1Uj46~#><_(pLS~S-e@%T8u(Ic)b?t%I=+6e3#Q`J f*#GpTR@b{N5px>4T&@F&BTuFWJ8;c6-CZu=Djz+_c3oib)Pl&-blSM zo6whcp6gf@hx4+xjSAp`Yr5i|2aa>jSf`M|6TSV(v5Uz*sw96UNa~_{G^5 zS-=@g1{rMDRtv4#LZ1q@SUUf;dZ}GoDorf3f~CPKy~DPycGW?su z#&KW6+1-S45r`m;I%&eZ*2Pe-j=)UKxI2pZgo@4;<0(wltUWJ|1c=-PS)1xNxU6+!}(smRjeUuh{ZV6yT8(Su0nvoPjMuEOHx)YyLgu7vWgl!R8;Lup zpk}PK5O`A;%$-;hWZEU$q!*B3>;XUh1oRRW3sxm6@8^&BtGAc;VD zp7h{D(z>)k7h%3eHcFtJQ|+K-I zn&`73j8_X64yY{rgeK@BMTZ1F5ixuasALK8;Roqu)m_pc6%flP`yhL6=oV1+0i|UW zfNqbne|wacv2BzxciIq`UYPk%H{{_#XylVqdRk?R$BMHKuvsc}uMgNV5wNv6V9VS9 zu(dtF$cso`5W`rZD&|BqS_{+eZ8KW!BYjA{2qFPjK zRUxW)!}uC{R~NWL3kW331<87Un`o^=jMHABI*glKQEoJv-!Ai|;QOqih9=oCRRZ|Ln(<5pBmUD-N>Abr)* zct7&^G?8s1h$p#t;)bzXbzz!>fpFr{C}mT1X!v%uEj451rmMy$ts@5z#yq$$7cmswGBPAJjp3rCbOfWtP zB1U+8O>zsde=FX7&?(@W0L@*xUxOZVU|!swtJUXV)hQ`2AnQE-;23(Ro?M&Xu73u@_`ABf)PuF17i48pS>+FwO;HqZx_$2#^?Xq zKOR3h*Z%zK-LKy}e&T4q-Dzn*y!hsiU%&t9_kWriJdMAbxamQ+yWhR0oQ-3k)`iYk zI8nOqyIn!~Qzp6?@Ldz0u3;KR*MRS?Y2X0782EIIj_OJpWnCk9^QNO+4=pm*2}lF9qq4X>qT?tyJiF4Tdmek3tt+o#!jQ5;p>~t fhI(4NKY!F{>}dDos8)>rB1b=j>Dn#~)_49Nei}%j literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/d3c97079-ddf1-4e1f-a902-5eb19ff98914-m0.avro b/warehouse/test_ns.db/target/metadata/d3c97079-ddf1-4e1f-a902-5eb19ff98914-m0.avro deleted file mode 100644 index 9e1e6cb040fb04407108e958d4dab3ed4d86f2e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky^rHW6u=YTYPAJgodlvfq>*c97 zk$Dp~rGMOdri)q1^r4;!o_j(!^dMxBpXtN1XL{)CL(9-(I>i|Y_ZfF#%qZ4GN&FPv zIQuLQIfKa{gUt=K&~7aBsbI^ci?{VloyJmWVyP7@4cF-%8M@k42kkZuFrURDg#GZ2 z+!T!CzDDyqDdi#*VG?(;lzBU6BfUNXGd1&0knkxLoeRb@n5x z4wS;L-YqZ^fZ+is-5@1M0wfhe0+gx9v+`eQDKTNP@&eJrSm<+uR93_^%_fPE;1@#G zGHbc)Opo&@Lb1{%BY5yxK=VlGLxO+RMS{Or>@hdar(?z&);ODr4Z?`I*_E;nH0iX@PNg62? zlcplG>h2L0O~$w@e$iQxJYw zpVCyHk6^rBxNtya;YTz@7b!X<^odB|i$Enyhz~!^&g<@y2C0BpML7W33q!YnasVi8 zvjlW=l!Ke2w9Rd!l(}O-V0uyRL*0;v2cfY~PUuOUEgmcGRe-HZp?iJ6wuON0%>moi z27vAD0Y+X#@`4z~3RN>Frty_9o!&O1)#(FFXRtX;r(d)FT8Zxrwh0qE7pw;mmx^jx zwN-_vJalZ zeKo|b9!xe?Q|C3Rsr^6IbS*?@i{(_ZS_cshRd>n+#YU$Ll0`%BR2sLkV(QA)5d`V0 zj>dbj$7iW*8$moN#FKH9jO#AU(kK*e5(F6&D~aG#dbv{lvV$m_3l^~{T!RXuv9l`r z4b@s*d5%9u69gSY6I9qy3wXFdP?#};3(u;B*G$!hg-18D@EC8v&|zdG$IcV_44(%pN`q_9dFPxdxMVe2Uh2hSwV*mOuKWJ zjjcft4Eh7>@L+M<+JE@oqfegPJJo)EQ`^;kZSQ>B-u>dAAk@NMFBHa!E1>( zVN?3z)>A{yVrC4CM2ggtM#~rnEc6p&aQ4&)d}Cm>jEGKg1{XdPE{wIZH6f4A;Z3lw z(?Bqo3^Lffr5D;sQS5=8EU@$@ZvDfppQ z`0aZcMglNA0A;jD4w3*#jgSCkD$^wYS6NC-n5?}(j3AQ6yhREtA{r+XE*1ENP`%7r zE;}=#Gz?L!a>)=Ld^VQ0`6BTQmZN-j*kh#f5*+<*TM&d3i zs2FQ61zy($3nx|tSx&(=X{?gI=P8fuJJ?1byEkTzL3HAa(#~#czs6Oy#7i z$Sk@$i{)I`$K0bBnB>W$2jnV{6LS2Rs3>FQxKQ%7Q7ak>k%4)wvL)BB)o$|iSkZND z4`5JcX&@}q#_eQ;A7=ST(9uMuamZSF+mwuG!h8Zqow)=vw~R!mp6l@xk_d!n zNe@1>%tBb}Bw1=dQE5Q=Tv%4u zy|k=e&I(r)iq!>EvN8!+nkrPSZprdX8m1~kvnAR7i=ME0^C7xEsSkBS9Ug>6J~^Q$Wwv;%xSIf5g+ll0fNcu_+uH-Stt|lC zy9128h~fn?j1{V6PDG=PFrDr$qt)pFOsBs+Os7|}{#uFe^mhppI~S}65SN;2UbS_F zDB}(J74)tn;0`SykSrD?`_3-W+IKNdySb7Z7Xth4X0&Th9lN_bwu%)|tjZA6IDR?A zogPd!R#WE{s;T`y)pRXHXNTofv04Wa4pn!`B*jK250XVg?-UxhykZ*K)*%Gx%Z|qT zktb%cY8yd3$;6XU$VX)tCUF=@mygE@lPihf6neQ_{j!6|n+q1QDO`gxqp`Ef`VHM$ zZ9K;xqY09Zpb5(CCN9&|c~ohvHXgafn=G{(}6 zl0$#gkyM;B*}-`4Sf*umOl$dL!i!~fO#HOXw$=0deR?!%_j;D!J{rT|s7syp9R^2# zckKC;I){tv*1^Mjk3M^H|FrqyjmBQ%uX^*B`rfm84W66L=3WyYYR%eSt=7QD*XuR? eY3~2_QLVPuxTi)N`RMOz^nIA#*oVRD#{UD}k4km` diff --git a/warehouse/test_ns.db/target/metadata/d57221f8-b07c-4992-b24c-d23de23c47e6-m0.avro b/warehouse/test_ns.db/target/metadata/d57221f8-b07c-4992-b24c-d23de23c47e6-m0.avro deleted file mode 100644 index 343ac4cb2d1df3ced916198099d553b6a4fd80ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KOK;mo5P&5`Fnmbe0u6e~VZpOx@!?pHp8AN<0I8dYb20>CNvvnp+P=Z$0!J^w<_Xc4k+kNJ>#{MS?AmtKFH|Zyr1Qh4Zw&cQbLv zY(ih(c&>?Q%(Q`)2%fq^YiT2&1zw^JPM>SOrwxpj7SajMh`7hN4P&irO%R1=@W$D* z)aMK)gA6unsfA``p+^N>1&G`Q@b};j909&HWfSa17;^{Wgl!R8;RSf zpkl1K5O`G=%$-;fWLO2;q!*B3>BE}3^tIQ>sxn(3O^=vmvA&EeE zmh|95LobB2N|J^4W0?jd8WANSA-+@*?wp{Q^BgaZ0N-}QUx;K=1C-I zKu`uj8K_3dD5a+x1?eQTamKRr9+*9^6?xJxBA;?jr?_=runE*Us3TcnS=6P>3Fn5< zwJ!{#m$SkZg<^Hiq^wK=mZl0-qg%54f(EI~&}>Pz|Dq?1-fW1j527>QrNN0jeuy@q zu{ImRc)4)lfXc$pX^bvXbcpW}5y2kOJI=~%TKp9 z;#LnP6RWB97S+`JpK7`iqP4|xDp{?92#2aYVS-|#lLyJXp|=W+TV63WW$O@v^i4K2PoYe9-aJ*4y5lu4x*hUfa>TZu_9$H`|VR;I=)} z@|bD42VHi!Kfi44J^1L+!zXu7ny=q)>@@zUH-D_}yr|dUx!G*)H1VOtf!%V>d diff --git a/warehouse/test_ns.db/target/metadata/d5c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro b/warehouse/test_ns.db/target/metadata/d5c518c7-6c73-426a-855b-2db6ca782f5b-m0.avro deleted file mode 100644 index 569976c17fb43458ba4f6afee5cfa1dd62399f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^gRP}%=BoL=PjC|naH2!El8cvJYLM13mw|lB0Yiv(8-a57!k6VRR z_!D3+T#&eOK}hf?Ac4e*Ge<5QSn)^j-c0P+Nj9|ER8=&Y%)IyJ_de#$r|z@*!5gVJ zW)u4I-g8Y%6Q&KcRPf9bny!rk7W%0+xO}b!zBVv*Eus@#5p$n$2j=vAPZ&o};Tvb4 zX8~uh7-X=St~Odr8+|I+V(a|d`mOfTR%v3P6)X+b=^g5tI#mnpHgqtbMIwOn@RmFj z%;UL+v-=6Pj4xSZZ!2~bgv?1d%0AjwHWGJG z!IH7oLf~y(Fn8jTAk!|{CcS_RV-NUgC!m+8U?Awo0YTsEB<3D|5QrTBy5u)WBcWov ztjH+4JCEf;*T=C(F)+!K^HXvYh%q^NOk|X?YFtS9%BU3$rO3d%mf2Eh*y=PzdaUTW zwFfXL^EBY5Vc~Id!jJNNBIyNOPO_@&si5N3vtumKj=2nrY)N{NzgCqjs zdD4RqO`{anDoGaF&tw{qctn(hlmto{GOntS)YIS#<^+-BP6b=eWz#6fkt&eIF)w04 zLxM60%0M+rMkPJHILs!IgDY00_rdIWttgUy5&4vJI>n<0f=!^-K^@5p%c3sjPPj77 zo^x%Q{el(lC>5(KCS~Okurw`EHG37yuW6Xc49&OX=P!H0?9Ybi`Y?VPcr?6_*ALMq zG|^^5n6DNtoKRW#2~E&NiVg{UB4YSQppqrThaaR@Rd-2)R6wkvJO4ljObwgerghoC&qi0pNc&#{_0Gp*k_xgY>69HS>1Gda9 z09(5QjJ$~C1u={js$xz=qm3}_-Y%on?gLEwczc+3zheEZ65l@FB~0vGupU5MDyl`* zRu!U(H;iwfcXfd~w17aeT#&5JF40TX86_SUg_yJIU^5y`3wF-wwH zL)_`bWMMV6U!$5@|5HuZLbP{SP9>{#5aCjFCQMLlbc!IEH}rO?aVsjOrfeNTkiP0_ zd>DCrn#i^h#FJb+al_cHx-d<`KsfPelrpiB2zIHLE7UJKh@!b*A)CN6C^s5AtGwS( zt<}bR{4ts!s0&R{Zbv2H;Q>Km#S|Vqs}|leRhKO6-p#@jd;vp;k&+BMPv|pzCK#Ut z5hFalA-RRvzZGL2bP9MTKy#NKERo?M&Xu73u@`(wJf)PuF17i48o4qX`wO;HqZy)cg+IN?y zKfg$R`2Np#gAeu7FQdlq_Zp2qzWwo^ufO^Gm-AY!_HP|eJZQHM+c%W6aSX`X&=w0P zN)LUvEhvA=L>r^MZ5XE6HsKRS@L?J_HVyn{7%ijacf5|-_j;|a*RxwkR+qN=osQeG ze7Eb-Uf&vZ+{5`}>)_FY^Ut0`^Mv4 zg(D>`;$NVnq@kjrq@YKlKp?u)Np#Ti-c0P+PA=@`5=D_cnR)Nc?|sahPo2-}`)?-h zm`&)5o#&dE#!MS%iQuU#w3asVS>Pqw;NrRFd)mNgX(659jEH-T+c4J3)&x;_32&S| zOMT8@GRR=FmRe|57J5{$#nSoP>ZMj?sWdUy3YPk-^bT8^+Ep9v)>~jc3xyB+;cdAo z7{`4LXZK>tg)jUlY$q{un-@c^JOVQt`n^%aCseer8Bbtp!`yeHP=LriFrL0guX%K! z6n_0-hLHda7eHw(l7l2bQXwQjnTj;Y|CN>!9VRO;5X}#THfxc>ijc<1I1&>4T&P-R zES6npVHyM|R=Q*e4;~xQG!WW=;9q5t;4c=s%ns9u!+6CSYg4f!KVWvUR`%hhvXQur z3M$5$3xT(F!Q6=zL55YZO?m+tMlSHvPCzeF!9dWF1A@M9k%+taLm+klXvJ@mMoh)H zsz@)oJB#I9*C&xnF)+!~$EW1R7h`hrgvcmk<+zaYl~GF?3Xy?%Ewd%pu+eVv^jOk$ zYY$*hW@*3;-Nfx=gdb)3NYK$lq;bGnYTJ}JG+`bABx1~vwaQ$AnOjDpQqOjy6p{#p zXGsq}H1tAPt0Y-yKa*)dq7hLN65=am$hfRRQcwIZnC*wQGZn0w%Z6TzBUK>tZJtMh z1_Wggl!0oLj8b~KQIJkT8)qy_?}6F#T9GIHBJwHcbc$Q|1)D&vgF2EGmPK94oN#3r zUHjTFdO0gxQ7BedOv=h6U}>sQHM%9suW69V49%8g`!9OJ=*@=c`XIXWT^gLr@I1L3W#NteULpjbPFi^fYQ`+ zKzB#kzdK4(-!@8_J1q!IH%L9G8}jfVH1x zDnuD?5ZyrU>Hv3W0fA((Ael$oL~9;noOW|1cP<3x@p`l?PaU(nJ+_h+k*vxP(>Q)L z#H}7oCRS7HHL9ukKh<<4L~D!XRI*wH5e`**!UV-eCl8W&LvIxtx4dF%%GMzS>8p;$ z2cgTSv1}VbJjuipCy1P~3zInTg&mDX2@^|+U=@0~T>YYh$eRlmunAm)GNZAx%K8n} zTCF|DpP&hXI?x1Vc9a4hE)W!EOyR<_Y~d|awPNA%-7Gx88!&Vj2}!Z@gg(P#g7JwT zGQy)9l39rTTmI~UP65{hXzr4O3iOBr^ZfQ)u0DsWPDyzIS?BT7`_QY#oF#a}g=0Da z6>t@S3p!p@pi}k}X^Lv8vW|~K(=C0I4NPe0k60pX5W}b1>|J@Obt8|tdw5>eKKSxS z^4m|p|9$jT=j}g7f9*AX-f1*m{`1|x-~Rf;FVAYV+RHlbc+lw_bZ#hT;|P#-pe+`5 zm>hUcM^JvrL6YbmyVemsKA2y&_8)!p__L=E&YLgZY3w%ss5if_?|xIS!E>|O+->4Rty$Zx)f)Kt k)()78pXT2Cr?uK{<6}A6RD&@3#zP#v57QfaFj(F8fANcRvfva<-M8Mv7Kyavxy?hnasTR=J!74%@?Dun)`33?u3Q( zX6J=2rU}yrdMbG43can5eHM7BKDcMpoDp-6aR)fDsVg$d z?#^Sm(DixjQVdM;?8zy)_QiypJS8&9ST!!Bd}Y*mJ5>g@ix&~M;NEQLdl&AfpxSV?aEWf>TQp$WJM&aD#R>FUJr4r z2a|=>)P93%YW+_&T?x_NVmXzpRzZYA)d`uP*yt2NGH>YZQsY)sOkLSJgdlz0(fBZO z`81JjBZw!tcrps&QPqWM68OT2$K#ZVr9`kxyYk=D@tTJy)yG;i^+oUO?7){PY3zstIQ)-f-cVPC*4+ zMc{&t7ZvD~{ZyKwTB^L`G#l`)Y1*!aFAc4++i0}#^_?9s6+hbE dho_CkZtF8Ss;NO3ed`g9K7i@1Js7O-`#%JUNn!v1 diff --git a/warehouse/test_ns.db/target/metadata/2cf0d335-5975-450e-b513-14e7c173188a-m0.avro b/warehouse/test_ns.db/target/metadata/dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/2cf0d335-5975-450e-b513-14e7c173188a-m0.avro rename to warehouse/test_ns.db/target/metadata/dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro index a790e6acb8e4ce9cd073e4f6bf3919c3df2c642e..e5b30cbf146e2621246c3838cce2d037e48d2544 100644 GIT binary patch delta 131 zcmdn0v{h+?u7I3HyY}U~KN^BpZE$!N?QqSU=@c^))0Pb#*G^B`eev^TZvjJRLqkJ- z149D?eFGq=Z)gDI8v+>yAfRiYo061jVxE{}plf8DWTqrWvogj&57Ge!|zu-U5cs28IUu zhK6tg$OQsJeGqA&YoKeCoMw<>Y;3A)YH4n&Yhr4Us+(kLXsl~!l4_o8Xl`t1VUaj_ Kzd)J*x>W$=!z~B^ diff --git a/warehouse/test_ns.db/target/metadata/dd192fbc-35b1-4090-b0d4-b0c858966378-m0.avro b/warehouse/test_ns.db/target/metadata/dd192fbc-35b1-4090-b0d4-b0c858966378-m0.avro deleted file mode 100644 index 9adcae7bad963b6cb2ab38f2b50118cc483dff17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KPjBNy6u^^gRC+)a(jrcK82Owu{?j&pkdSu8R;&cwWw$+5ku|m_jkk_%#^Y9D z$zeYLh%280ByODH0$%`$3*v&bLi-UA@6E)H?PNonO_fIWWahm$zxQX}Ja(Sf_uft1 zF`Lj=cV1{>8Z&L6C4#4}&|2EaXMvY!gYy@f?`Z?0rG<2YGa~LWZo^nBTN6a#1-x{RKB1z0#drc!8|I!Hg#twGg7NeNdc~uC zrSO{%GmHdaxByCPksKrek_sUK%2cFD{;RZ<=rCD%foOgxv{{Q3R)jQ8#*vWV=R(yo zW3lX93)3J#vC<_&c<|VWrh(7~1b-@v1b?y6Wp9X91!$x;~9uih)Vao<1Viz8I6^XGBIBE60VDuZ&vKP>2l7Ynd&%hK+WUr^k}6 z8+!nQGD`z)=q7F_Bm5-GM}m$fB8>yqQro7)p$YQ{AQ5ARtX1X`%-k{(m3p=trI17* zJWG1;p`jPTS|!Os`-w~g5{-zGkPu%fL&jwll6vBQ$!tHgovC2eTsHJ#9H|1CZ}T(~ zG$1I0pbS)_WR%j=je>L%+BjobdJoK=*NQyp7m-gnr&HXzFW3ZX9n_Jmuq^6Q=7dYb z=-O9?(aTxkibAovWKvcp0ZUVbs?jZ3eno>+W@xq~+kep$MsGGm*9Xys@6zB@9zR5z z&{&%dVZ2?-dwam9fq>1;0h`7K zfX(dzMqWhnf*8gMRWc`};aZqhcbm~_^#G>T-yEjZD_MV|#JBp}go&LC)&q!3MK!P5 zszQ|U2GKS2t`2aA77$1l3zB)bO|<3_#%VWKa_d519<4{a^3*ZA+hZ$P5y`3yF^%Il zL)_}YWMVb7-lCeC|5Hs@LbSG6P9>{V5aCd@CrnUmbn+mXH}qDaamy>FrfeNTkiO|? zd>FcX8q2m3#FI=sae~MxyD*6ZU)a%TlrXWB2v(t&%hfMBh`hOA0h_=zC^H&6tE}Hp zt<~Cd{27`cr~^$eya7Xpk&qNSPv|o|CK#Xi zAtOAxCYgoUzva&!=oD~GfaWgQuRxDDFwbw#XeihkaZq^^fC0RF=q+haN(Fv zKm}Yy;DU}973h@xM4F;ns;uMV&~!`RWCIf#`XiPI8^rLbHhW)QYTd|V?k=8JwX^SD zUVZ)B*m>~L-FJR^{MGM`U+**;uU~%u*Xtku{p0U?tycS|j$0mdI{Te#%Go#qW*z8@ zg&ijQp3@POUog?ZaPR1bp?Bcl=;%6p!2`bN_@?V^z3q8M-yAt^+d6cN_JQ8l+m7xX zz?a)Q?Ddb1tZr|Ae%so6a{uY)XAe)CukJQ>8h_TCKh$@=t=HhW*=+7K@uAkN?bK=w le0&d0#lPn6&!5z4JB|Btw4nxJ^cOk$0H!x~VX(UI{{VXLN?8B^ diff --git a/warehouse/test_ns.db/target/metadata/dda9e15d-4031-4715-bf68-69610e86a620-m0.avro b/warehouse/test_ns.db/target/metadata/dda9e15d-4031-4715-bf68-69610e86a620-m0.avro deleted file mode 100644 index 255afc955704c426fcb5de830f579f920ea6dfa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^g6!m~ABoL>S82Owu9=pvKr$ubVN^Dtny9ZQ7*2JD{O#OvDZWUJf z7Z5l80S+Ab8~BhoaNQFZj;KQLC%}6%v12>g&}I|0i8Gmb@6GRh%$rXqU(^rZO6(c; z+0DI|nwUpi8)=D%Q(I_lZR&E*Nwm?$OU-q(5p8P$^KnKPJ3O{vtevg#!r%pbi}{zS z8*`WpGWepc78;d>4ikK}bop)bQnRvDnwV<^OWjR+$8AmRs)KgxZ7`n)!iD|B9l0qO z$9;_#_ahbySGZx&Ng{4HFUDGV1ZFn$`_nM?ndn^cIDx4R1T0Esp^)I0Le(<5 zT6UoYspp|s>5?%#IDE=dPiP~8Kb1v-zj$DCD@gqbk1N)gyNaE<9=DRMvX6I_jl?Zf zP%+k63B0WfmQJh)qGrK1=>=pM+Q3gc1-(QC13^cQ2>QNF!q~<)0S8`jtePY8MUUN5E+=)GFx&DJMAVREP}LK1=S zEa}0AR4;_JN|KfKGnob?oDwA=A+Az}jLRw{^~C*(TW(-Y=7Lvqnd-$jQUx;K=6NWX zM^FYq8K_3dD5a+zdZ`~+IAdM<0L)(2iahC8kP&hHUy^ar4G~$d3X>OIOL3-mD%F4Vr>IV3x)2@0UHzn8@mHG=njC5 z{Q*W^MDl_d#tKz3Ct$%=m}Y;U(P|C=ra9alra35Cf2+hdhx>$yoeS0jh)YE^uiC0Y zl<|7uHT13%;0`SykSrD?<7A&`jUL8nKUZ?+LSXc^quqGw82$aRm8^(lRfd>G(d!}Z z^%$1NR|z~S!mqyim54E#}K5iI~pGb zc07+{+X&)GCZ0^Za8h<*5_zt$!s#^OVl5HOLNAxAUv&_9bHP3C!!;-~8au13-%zd9 z)^q$BnjqK&nxM>%QozFng29YATzJ+kyk)9ZEbQIQ!c)8fLx+)&6gyAoGaN2>?7IOc zad=HK3$cI8pB>OC;F%~tzde_$&+(>HQeHr|dHm5w(5pr|N=p6)Bsw}O5Y-hF6erQ}7a%CEp*keqn~5FU$%WlqqA0Q_Gw;3my^neG>EP+s z{+-ktu`&H~`|DtP7zqhSmK7W%2tJAY;bzR|N9MnuOrBj!HiE{rwuHDMfG zz#C^@WC3R|8Dy|&LoKvx3w15ieT6d(zZR0s)BrXov=f2F0wgvrVa#0Vl`OdF)MBBDt;iiHF} z6RMV3^JV8ol!YORl`iSSgU^OE3x&}m_*YdV_=`mzbE9lLV7z9Hv#!`-5HdGiDf@6; z*+|?)1vO*sxxkycVCKY{Aj>J)CcS_RV-NTl$Do&}U?Awo9zowXNX$L_ArLzNwB|QS zBcWncS7esmoyT&a>*Ls?7?|YAqZ4u+h!Ht{Ok|X?YFtS9%BTemrO3d%mf2EhSZg;$ zdMxO=u?H|H^EBX=Y2$Ws!VmL&B)eP2sVaV2X!PbEc3dQ zJK@r@+U}KQbqZFvqExIdnUs}Fz|vHsYPBntU(qm=8JaK2_h0se)tUCu^j1bz3kW331<8JYlW6TDjMH|Z8WG4H^)}8B9c`V zVwNPYhq%#$$;N8xyg@a!|EHQRh3IUsoJv;9Ai|;Qj+vm?=oCRRYv`R)<5pBmL)qGg zAbs7@_#pE5B#~_+h$p#tG6>^A)rDyi2EvVp!<31IL~u&IT%ms6K@`me3)vX1LAlY` zS>^qPYOPkDXL-xFCj4jOp9*QtQP&^Y-w( z(!T%v=}#~FuYURW_dkC9`{j#w_2=8V{^FmnzWw3V&p+PPH0`e~+;OkfI%r)}&PFjH zYe8Eq+$cTp2Q5MQ1rsfd_LgN@X3MnHj|H#rF5gV}G|i^Z4v$RF@tdY|=rs?AR=e5t z2X?b#G2a`QL&vuLgV|+k|KW#^K6~=uOn-h?-_?KH+WBs4_vEQvRASonmHU>f3Va=KNppmL6lA>@8sEWMHUo zXlQ7lZ(sl-fGjA_z`#J)KsO~VE!EuIAX(SkG}%Pg#KPE8H!(TMRM*_V#5^^{*vQhr qJaO_q0Y}rL9t;d@Oim0;Y)k@73=qJ=aRMyr%)r3J!~qmTcMkyjMlGNK delta 167 zcmdn0v_)xyu7F(3xrEJ^4Ffl&u4Rr5`TeVx=>#(q(}SLlrww=q!eRw%T!CVWWz+G o$@>KyO^GBB|*2{18001L-au&5IQ0}~SmPz>EU0D{FZA^-pY diff --git a/warehouse/test_ns.db/target/metadata/e0184284-5950-45ae-8dd9-1db19f4b0a31-m0.avro b/warehouse/test_ns.db/target/metadata/e0184284-5950-45ae-8dd9-1db19f4b0a31-m0.avro deleted file mode 100644 index 31372de15dff5f0bde4d0ba74710b2e35c78db6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky>BB$6u@nt6{SD{2}G4*v>lQi?}wAvraHt$oWzCWE)hkrR^#3AdC7h;JDbRy zT+v*GX!#!~preOtC@B#IC5mY2D0pwiyWU;Pw1Jigo;pHnX=9K1ZlVn?o@<_~4UCo+(g0^f+-2N`u~xRmkHTm0jk7OP zk29DIGT5x87MhiXE){ICbpCDiQme95nwV<^OTATkhb>L*s*QH*Eij*j!h`+rw%inq zuUNz9z)#ZW7cz|4leKaO}nMf-~J1g193JtqnUh};F^>AUobM+Zvb zH}7W{3BYgwl-43SNCG4kLIRYjNR#|mX(`cRvho7ayijPf7AdR$1ONQ{`vN274p$!QBR2B*TVxhzAFbzhGSFEu%6+8BPW+!W9cQ=)d#BEei zG1goNysZo7POJzrtb%RQ3&=2XfS+~(dWi}Kf{q*z^nHs&+`$Kd*a4swzeyS~6_ctW zz3A>NmUCSnM-IinBsrKc15X%N~tV_A9+%%0bZJn0vaPdTSk+`1=N0JRS4NLE-Dbt!YgrC}V~ zSBBBcS>cL8vASeZRwe;UQ-!K=T(bO%`l-y&Y)Q8Nq9=^rY>2M+qi3E&{WE#|5G|mw zHXFitxp3it%ECu9Mi(hM#B+&=;DbOVONbBGOD@aqk_M@OSVq|g*>gj;fU*xLO+5#6 zca;6Rqcrtxqm;SRg1~hA)P=es4-Y~^mz>hmGFv=W>~(;RLZN$oz@~wK&CLOu#s+}R z?Eyw!MDl_d#tKz3C#2z8nAY(&qt)sGOsl^+OsiM2{#J=^^|uKVI~S}65SNN-UbR() zDC6~`Yv^4^z#UpZAXzL(=HWKcnnxI?$GMU_7XtHWJ=&G0j(NO2wvrW*tjZA6IDR$6 ztsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4plo~f?}hS2g$slw+fA0UNJRg>kxwURY&84 z(Bacqwv8a3Wa7!lk49w|Cb91cI~tD@CYBPxD)e%>`b7tkHy6xj0bGMJqp`Ef`VG}u ztv$z|q6vbIpb5(CC8Kp9eJsBB9}S4cwW{1d6S*L z*njl(zn{H$@AL2enl^sD*J#}Q_S4HBfB*iEpX;?+?e98ndC=(`bgn69lL(k~pf477 zm>jsHj-dP*6CDiqj-l&DM>pUh-wb@}y550*U2p4crW?Jk+3U6s`-ghFdq`Qk=eqs2 z;f{>{xI5CRWgN_JTYHc1Kl$|h!CCX>?Z!^y&wBHR`p&oY8oW1~&7CH`)S9)OTCIVv jZ=tF9*WCT(qgrjJabJ!$)F6z$l%pTO^u{g>R`>lMruj=8 diff --git a/warehouse/test_ns.db/target/metadata/8044e2db-5959-4c27-8e91-e5ed66869db8-m0.avro b/warehouse/test_ns.db/target/metadata/e1bde6c7-ea3a-45a7-b343-5dc750ff4e17-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/8044e2db-5959-4c27-8e91-e5ed66869db8-m0.avro rename to warehouse/test_ns.db/target/metadata/e1bde6c7-ea3a-45a7-b343-5dc750ff4e17-m0.avro index ef8f83ae7306e9caff6b969e0830d09af45d037c..3214becb5afaf4140bcbbb83d08d9e3ec7ea4364 100644 GIT binary patch delta 132 zcmdm@v_)xyu7KS8;9hO!eBbn)yRWeA)Xw%{I>F4uH095Vzuil}O!A)WEuimW00jC5 zh9JVgz!1a&vJJsJ0|Q+H-BiP*lvJ~1bKTTL<3wE((?oOKBx4g}UDK3gb5nz~G?P?A N^U3=J(ge`$0sw)KD+K@m delta 132 zcmdm@v_)xyu7KQ%*DN_3c7;eLh-T$&=>J*5bb^_QsbyR1hF`NEPvV^HEuimWXkcil zZ(wL(pl<*qfdr6*@PJHR16>OP6O&Y2mP;4E)-Sb6OQngKRD*_tDlTb+T3!!S6 zv0Qeh1&QyYSm}}>Jh*I36JKZpf`1i7g1=bcFgr-5BgRYCSlfyndp@({jj|87m5s!0 zR8TV3TnfCd3l>f+2{NplZPE+KFm!;Qb_{xn3I>9X91!$g>!6OLg=JZnQYTy( zM%TVHj9$hHSLBM-1(UK;30Rs+RE=)I@=NL`GDFiP>HhPcFnaSLy50}ZJ%{?I^7tXz zlt$Wo2;;@Vg##)JKcW%3NYNplOGF571S(lVe7IhGQFNCyNCm_y%09?m7`g+LeL!jI z8K9e^?B5)vsqY%4%$)`VrsF3r)D3xf5E{7Tgq{@H;;~|H0&L_8-KzsO4Fqg%57;!e z0Br6KF!Caj7sN1DsDe2G4K~8Gy1R^4s|PTx{`N4fUcvfnCBD_)B~0vGupU5MDymu4 zRu!U%*AK6tcO3zDXaRv_z95-LyF_btFiyLfk{cHSv$GlP+Ed5u?vAZwMI@^t#3YJd z4soXklZn;TdWC9g{!cYs3(?wPIhCx|L4-rqo-#qP(aC~j(a>AD#x1LunzD5WLHe?z z@m}EYStQ#=5KmI^WaNjVq6_25_k{ag0zf=&U~1ZeK!Rtb8@fq8a&E>@qzb*H4ffNb*k{r90)jW~<(h6~4Z z3@YF%0vB|=s6eOe#nKejQl%Xqho)QlCLNg4z#Fqz*dT__wE3IzQtN~+bN2DPs(k;& zr_aB;``1r{Ctu!v?ccZmuKjweR(tlxpI`m(?6+@zuU0CRf2z3ULA%{*Us28`Auwx0 zUo7k(Zn>kjp!}SPHimm!Hw?XPEItf)((z@qb+6(&^dCOeWTxL zvi^~29hn`YJL_wG@x9afi#KX}wdd9PkJY_zs}*>z*Xw(Ae5lkbdzDHJ kA8(_n_^R*!{6VF%SGy}mYibZif03i_!Svcb43_u(A3g?3>i_@% diff --git a/warehouse/test_ns.db/target/metadata/e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro b/warehouse/test_ns.db/target/metadata/e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb-m0.avro deleted file mode 100644 index bb5d69cc21fa9baa07244398e6e7221e7370b073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KOK&4Z5P)sRigG{^2*ha*tvTEAJhFaq;;|7cL0ERP7b0uao@vKJ=0#6Wf?4@5 ztoRMwxFP-mLP8voI3OW`gy0bI2RI;6)$JM2jJ+oDI&wzic6U|vSC6j#X#8pY@Rh`w zvVh*~J=4T2X4+6o1Wz5IwX})Hd^gdC=g&0H)rLk(3u%BeBJMJ7!&oa@<455IeBsxn(3O^=v0fA&EeE zmh|95LobB2N|L4aQ<(-Nnh+%+A)Zo(jLRw{^~C#v*? ztj$L-UM^fXptA5o8l#I89pbq}MDRhNk|o54>m`?EcS(a(K&+x1fb4~#J3u)Al%}2o zx;x6j-BFtQu2IU|X+dB*e(FNqkcS7Mp-WEbX_+k^EA}S9MxoHXJYds6z~=UVO=And z=I#I^FCuwC3}b~VnG@1*BTTEe%V@Rw0Mi<557X+GtiM&_TZ3J~#Lfll0mP-EnpbUA zAr?#5J(mal6ilZXw5FhX)jlD=R#n1H=|v9>X^OVv6ZZdWL1Wk#_@|G z?(|?Xv6@;hQBBSNsitcoT01PKlGQqhaH!e=6BHYrJV+J|y;W%3@`|Y`TSpM2FFG0@ zgbts@vTX$MBoj}@el#w-Fo}In*wJK?FtL&dR-u>6)h|1Uyt!aL3*Z`*8I7G))^DiR zYU4Tn1Wgch3{6mGM=9Xp0zqNM3@$vY7Tz*dD;9R|X5k6mfT6=kNQ#{&^cgM_j0axG z2#>BwW+C=(`MV1`1zZ!Lxl4{J&?64a^V@T|`W&x2CFKQVlgA&v2fb>{S%NoQIHnU& z0ap>YpyNdaI%O}Brl^)G>-ab{-O@MNKtMxp!V+PF7(UbHZ^%on6S>Se!1JnB|M{oc zx3B$qGiv{`_et;buNpt@H5$+V`1iMee*Np~@9MQ$?e98ndD!V3b*?FA(+HS#pf477 zm>jv|j-dR4i4KN)N7oGl9=eVXcr)NTJmiqx*4ym=oBIBj^%}f4o6Y?uzSNqv{aUSoudkx1 g_}4u6{{32QzwwS7ZKy#Q{Xvet3)341Fj(F9e;(gWc>n+a diff --git a/warehouse/test_ns.db/target/metadata/eb933998-38fb-415a-8c6f-65c20c4b60af-m0.avro b/warehouse/test_ns.db/target/metadata/eb933998-38fb-415a-8c6f-65c20c4b60af-m0.avro deleted file mode 100644 index 48d3a1a84cf53b683c77f14462221447f0de9f8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^gRP}%=BoL=P3_d4~KiV|Oo))ncD?wRyyQeC$#`dH!b!;;pw+gEq z7KsBFgv6h~g(H6fCyh2XmCl{@dv#E$J`Lz_($MfPOoy*I!2F>gM0KCSP) zk+@?vp)c<|)5J7p+CWPLPhFw4w2{vOFVO~P&otlD21ZK@=>%s)++*B^u~xPwh{AJt z6LYO#slQ6^u%)S8wb5?91?IC*_^=<| zmYafc+}Ch+H>O`V*OAV9IwB|~`d*odZq&;|tmDvJbvvCw69m`)tVE7n+>iXHg@vy-*54>pyJ z#BEeiG1goNyr~Q3POJzrtb%RQ3&=2XfuD8^dWi}Kf{q*z^nHs&+{GUPu>(LWev>p} zD#lesdePlkEa$pDj9iL=NuEA_NUnS_CdW^Rj51b^3n^b2wWOgC8JO2HTXGE>?Iur; zC0#f600w222Hen1+)hULQI?Mc9Zf_U2dt&GO^HJj<`F<5#td1j%q5t)Wh5%~Y&S|F zi9mRk^x#87FNC#9l7;pYnFb^p5hWoZzEXya%PJ)G#Q&VxerP*W!K%4z=*2iv1v1~} zX(VVsPzFI6s7A>srKcMO=_Isq#P&h76hgnq#o1_d3X>SdgO$jl-c63Vy^>i6bjwz12zo=Y;F$N zG&TTiZVxc>B9a%xFjlCNIUx<#!nBUI8Ld_iU|RjnVOqVC^*2gX@oT|w{a0C#8sfn>2DnTOj%Yj!bCk8&lqE(B(GJ=&G0j(M~_wvrW*tjZA6 zIDR$6tsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4pn=?1jR-t50ZI9ZxtH1ykcs~)*%Gx ztB%G8q06VSY#Tv5$;1;Uh@7$ulQ{5&9gRi_6HAF;6?(Z`{i1`&n+q1O30#9Rqp`Ef z`VG}utv$z|pb3IH&;(_6lmZ?u5EN!i;li_Q;SE!@Vqy1o79Qgb7&?rEq}X{vpW!jV z_{0wx;n5YzEX4jTfA&D9fNKIYcgcPQdc=WwetRxgpMzDWq`ZKv^Z3K}p;wJLOYnvZ z$8-WJ;3@(abiAlQr|c)v6xC8?9Uq6LTlyv&n9$H4u|(J)hEKKG+wxNDMjmr_@w}@2 z5&v`j{MRpEeE;piZ(scT)w_*f?lc-dUjOy{yWd~@c~z^`uIsqtL8r6dxuTqnBS6-H zwpiFuu)rEvw(}wXNRBX&)GewB2*N zqjvYuHFfvE>FRW}Kfi44J-Yw+lcx_(n=jvL>@@zaH-D(_d{eK%bFa%mpyS{WMuXbK&Vj3}Rpv8hGj?kLg*kisMYlHI_n&)Z*qp1aSf-^$yGH%0IGhO3{!3F%{ z?0MpG29rSsn>E!!v$W8qf-RQLf303>m6l2qGp%5$w@UA@si|GH&~Cj6=CeR}upi!% zn}TuN*KqbAqFi{w3xif1F{ge$)QTf8v!*{7hkQas>zeTxrq;|oCkzCL+y&$5hxD3< z`%2+=pQIQGz;FPR)+8B70wfhe0+gvp;_P2(DbZoF@&eJkKxnfj$*l-z6kmoyf}aaj z%Z$acb1g`GAH_AJHAFeuYB;D&DEc2dHR(|jc8Xd;rxXHB(jN=7thE&(Lsk|ArAxdbz}h(x8H?Su&= z5eQF{9(-u%xv*AAve14i(}09yq9nw`Q_7HWQH7))d*3kI3+&NUuyQUNdOnU+fy}mf z77FSUltEAis!=iu>FI=iG6`&)u`Im@X3uLymh_9rr<~I%Zru}X0<{k6NLpAHbt!ei zm0@)4Ys2VetZ+rHSY0tGE0utysYKQ27A(J}ej+n8U6SrU?+K$f8=~v|@WOMbeoLndw`J_k-Q*=u|gHh323kurq$hMv|2rYY4taUY4r-$-zo8}{x)G^=YsVB;!;t~ zsAutcuqg{FGnBDEMm8^(lRfL#C z(VHP|^xbQ4nc*j&NS$KFq3y<*z3>`*H66`#o&v2Pw zeBuR+@bHGD7GnRFJ-eV&z%>DyyLi6@J>nd(}&~ERyZzyM%Auwx0 zUo7k(-gifBLHPv}Z4CFeZWu<}Fm$7>>+k_j@C8HgrRy!d#hg*6cR*>YYr0OWV|ET& z^q^z4blr3<8(uL~2-+6?iM=-s%3xnl-{|CNOONjsg diff --git a/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m0.avro b/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m0.avro deleted file mode 100644 index d1d8862ab24864c185644fe0da9ade1c8c7ea07e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u@1#Dm|bI3B+j+BcGGTA8qror$ubVN>G;F?x~8bi9Oz!I<^^)TZNJ< zH@I*?h!dy%6F6{1+6#gc68{21Li`2r-c0P+PBygNM3Lo8X5M@Admr=W;`MocF-BjG;dE{wH`HBk~jhhLn1 zmWQ0dWRSsTEw#{YEcB^hi>32ltCu>BrP9PwD_9z?(mQM!YFBNv+iZdPEEXZ`hqvXX zU>x@~oZU+)7oiA~xSgfU+c_T^^%0nRy-QM?-Sb)eqFrL0kFL`pH z6n=fbz(@dw2cV1=DM1n-sSpyNOhulR|4K`V36qrtbE z7R%0!IFBL}D_t^#7oP<*kAyKG_*Y#d_>09JbK`t6V!UCEb62rJ7%?|nEBo-SvXQup z3L3`R3xPLv!Q6=rL6%doO?m+tCLZuJPCzeF!9dWF1A@M9k%W8rAP_qMwBa{NBc)>8 zRAg4&UBq&!>%+vO7?|YQlSkw#6k~Gol*lM!^|+Aol~GF?Dv^PCEwiQ6aHrjr>9M5i z#vZ_+EYg5mrj6Sv2tO|Jk)WfA$kT|m)V3)Z(Tw>7kccru)+%!eW^NscNXoc;MWt9>Fe$5$fTgKH)#}zPzobzvGqhMz?7!*>t2Y~>>!aj(=+Wp*9zVpG z(A1a>VZ2_ra6o0@M>ItjDLN$diAdm!KqX6v4?oN<>h6*Tseo8U*$3HkLpOl34=8Q3 z1ay0p{oA9o%}t|}xzmEc^rGB{x*-n_LSvtt($hLyJXYLwfUQcQdwsyRg@En51GcR@ z0Jb*=7SfkK|CqMlTnn6>MqREC=_lI1Q`=ciQrUvxl;Y2gD9H|7O@Fjg9@Xuvnu)x z)mp7R$Dg7Jf{vgGD(t8QJX|0s%$UN3XW7CVrfS2& zFlK}&SER5I`?vDl2b}`03DDeS2My>62j=DNxn6w^SDljb0<1k>Ea6t^88nbugrPfP)=I!BmrH%6+ z@BjYdpTDpDH@@55{_0!(<+iT>^uss5e*ee6zkH!-+Fx6^<3Xo$(7B?VjT1oDfwow< zadzO3I)d`&Omr~XJCJpN@&2w%KOv$h5nr-9GYJzkO&OcH8~HwAwa3 zc7o%+88|`jV1C)!fBfLdC(j<9=`Y{bclF=4c3y1lez~Q=yS@Vte9?BaT}_j(Z|Ptv aes=bL{y@`q_4jbXicwA1_h4Fc+y4PVvr4}J diff --git a/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m1.avro b/warehouse/test_ns.db/target/metadata/ee502702-5de9-4147-9f01-2a63f690f3f8-m1.avro deleted file mode 100644 index 770d9d0b249bb7503c702992e818da515db172e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`KPjBNy6u=X2RP}%=BoL=Pj4W|W8vkk2B%Bs)D^@^RcDtu4vc~pgYwFl$JZ=?M zIqVled;o5I0lom7;Kl_ZA*}?6bG09W_hw?pcCw+(#)=|mGV|V>-}^IfzHq;4?!A+G z7i>ar?!C~(G-3KsPX*6Bp||yMz(POOhvzT!z}JUnTaV}jXT;oR+<~!nz9x*L=kSZO zud{$Nm<%%5tgRMWwS_(vY_W9yYxPpQwp5x}Xa!4yReDElUG1uab{lOlpG6{o{qT<5 z6pZ7(Mzi|~L$&}VH@S`pDCy@-VbKNqT& znTuuTdX$ABij^)I!HdtvGz*13B=}cVB>0O(9&@5>;xb;d#@9)f@ zQCDP?-JQpBq3g5QqZpXv*^@`)IuIA+G?XF(^IB$0p<$!l6zQ>~ z>((B?pv=>Nn}&tk$q7Hs^O2yViO7BV6-i5#4E++DF@rR=W={?ZM_S?S94jTP40d*d|QuT(BNMTq>$X z)m9aviZ_g}p?7tGJG6j6vRsg?!)>CqdKjlig_1iL0;{(k?aEWfI@%sv$%;r;Rft)V zycyzF4<-w%sr?q!)cT)lx)P$j#d0cHt%3-Lsxx7NVxv<8$-JSrOO0DmF?D6@2!ixY zN8@qi@o6I4Mi5VO@x%>dx9Y+)2?OE8<8jKwQX<%;UanBT=pc&bf`x1X*Pz^J?5y&B zL$y|G&+(^df}k!mLAf23fQJhNg&9-0@GM(+%T%pd*t?sBCwK#f4kINQcAn5@_)IW9 z2_i;#d`)r-v41Pxeb6c3ngGpRx?h7Hb6{TFo~za8VAUxpFCgnY{^%j}stIQ)-f-cV zPC*4+Mc{&t7ZvD~gH)QLTB^L`D;e)pPkb`b-#E;Po% ziPC-F?F!1DGttF(@0zAzb`8UXFMKl%cuf3-PsivmcVOFtLBC`7$8P7qJfxkz*Bf_w zhn{742X4=xWv(Q5288XCU7 h+ia+(wfoB_jmD1lK#pp~=&y40W06|Xx@>;HxoT2EZVbb^_QY0sC2&I!He?nqAd7BFx&Ffh_#o~ARuO4AkQ@gdE=>#(q)3r%guC#4^_Eu}Mw}64Op@E^k zfuSLgFaWVYOdtmF3=DJ)bPZDs(~^=+Q*})ZOwDvnEYl2hlT1vKbd8hEEKQS)lgum( NjVA9CNE1M}3IIufDqH{n diff --git a/warehouse/test_ns.db/target/metadata/f5c4729e-faab-4e6b-a5da-b8c0de8541b7-m0.avro b/warehouse/test_ns.db/target/metadata/f5c4729e-faab-4e6b-a5da-b8c0de8541b7-m0.avro deleted file mode 100644 index c4cc470ae91c7fcdcef14801e7831aca8e6973a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KPj4GV6u@oQ3OS$%3B;*~(Vlv+fGj5tSeU-}e z?wC#J^_>@*n8r*SXo=vdE3}q2@>$>|+TiSk=6l+}XlWsx;EITQjN35R%Ju|Ncn;q< z`#SYGgT)|&&01=sS=s1O!4_NR-&Sw6DqE$AxmK{$U!`~0($uNiXt&-1^I0f-I1g{j zL%}?rYdE_bQ!aerM`1gOncF-YYULSN+0gHfB0iy_eaUzNOB?2%8-)Ty?t=03V|vM> zeWmc_CmBWpFkAqowMY(<07-?A0A(uDB>z=fN_1GPyg)QR6xyss3Ohm?C*w#+@N=PR zo3Yq-riEz`pjhdWAq+e=qG=$s0l}ZjBEerQbeSEd6NmANHP)tLM}ENUWUcIjO=Tl- z8x>THH5USJ>VmlwD}oHGV4L&;GK^f{ryYY{qJn{-BL@V1-y#ur@gITM0iYGXNg6Q~ z6l&#GwiE2p|z-hOAZQ63pB(5|w(k8>Ns$ zAUsQY@S&j>!dfNCLi>qK0}_phl8_KzDMQ9(6_R@5f5U7)w4JG7)m%38VjQUgnIH2s z5;PzvgP;slqhyrQ(~W|3656<8S$Yr5p4W;z=@*etIj2)Rx-ZxSY8}*(tgtNVQs#sU z!|2+VhSAGe;f_MFx?oaPCIL%Rg{sjlS$;`_RAy+lB|Cr76Gm?~MArw=x$n~8R9-(s zo6uOB4Pm}qxNt&c;TJSU7b!Z#_lSt#4}nUS5FehOT$J4<4N?KIjIs~1=Z0i`>tLig@~O#=a&n*%nD z4FH?l1B|?grAMu~6rw+RzF7pw;mmx^j$ zwN-^E;|-!K=v^J)4lN*%EEXj5aGPk&BaG8-uH@E*z&u)ycIB;OcDKh?vLcdI8Dbj8 zZ-=HUFoYu7qf9v7Aa)t02OqYEPJ;*y!XzGH>XuLgSWKOikH3gdly} z)%Y-U`81YoBZw!Nc;W<+Q+8nz2fnbQ(I{bJDG{tfFPE!dbP#!S!2&jcXHaG|c2-%x zp<1i8_xLk3K~M*ppv;a^z{3NA!ip(8c$O`^VX9UvJi48Q$M^z<4kIBccAn5@cuX)p z@k2&acH`wZ?cIA4gC>IgbiZ&RGWPyAGL1eF?Sd5tJ>o? z?>Rr;b6&qZ`{kc+`#)Yce!tUb{Q3RAuU^0TFjr|C}-mcn025p z7Iv8Idrn7Ce$GS(!@Z*$hSAY=L&uTcfp0L@;TwM1dV6%}9(2t(+6U~&Y12cG zww<17?bK=w k9DabN;-|U$>u0svPUF6uZKz3@{Y}n(3dh($ diff --git a/warehouse/test_ns.db/target/metadata/0ab31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro b/warehouse/test_ns.db/target/metadata/f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro similarity index 94% rename from warehouse/test_ns.db/target/metadata/0ab31934-05a6-4e09-a869-bc4036a9aa7e-m0.avro rename to warehouse/test_ns.db/target/metadata/f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro index 682fbf6cb4558a84d4b2c756cc98c94f93ee02a3..2ec12881bad7bb17c39dadf949db82382f599437 100644 GIT binary patch delta 129 zcmdn0v{h+?u7I4vj8@n8d)~PB{BGLGp=^49=@c^))4qqrd2Pt?>lmG#kWI~y#M;1kf!40D3Je!2kdN diff --git a/warehouse/test_ns.db/target/metadata/f8a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro b/warehouse/test_ns.db/target/metadata/f8a17aa2-8cfe-47e9-95a2-768caa6c55d2-m0.avro deleted file mode 100644 index ace15a534c80c9d3a3ee1345543ac73dc835a02b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`Ky^rHW6u=$dYPAJgA%PIZ6(dV@`S8c?=Hsf9xD_YCa@_4ztH_$zlZ#o$HskTG z!YLA>paY5j0VFyaN<>4mCDIl2(4F`T&=tHl6Fat(3%h%XqR5`iy!Yn!KIYA*qt6@r zZ>8RZP3g-!&kZq4m@zO?!81=7O=BFe&`*uQ*>fZCje*rPB09wxG4~mFVXT?23FGJ) zym9tL7H|fWK?a*Q)k3?r(5HeemoDDcFLi25rHO@Buryewci1%4u3Bif*#z@hBm&qE zZ^=!;IPPmWznf4l0ujVfD@~ZUb2c=pBQR4p?~Y?WrJ{AgcnVW>d*6#A0V4Onc={f_ z;Bi|i{O(?kkpK)2Kp9O^fFwXtAtXSViYzVum6j3{CMz!xBZ!1CZ<5lAh$iVI783kI zs9I(%mz^0=7KSKRx?~6sJ{!|46vlwyUsaLdFBW;sjk4*8@tQTxZN-j*kh$qb*$20k zjl^A4P&3wE3cRih7EY`QvYe7_(hJBi_JE&p40?$Q27-6@F(JoKh>S8;jSDGX8MUIJ6d9P;GFu7_x7tmS z9xJ-8?EwtRJPo*I+PIyZ@S{8*2|AjHED2dtZJUx2O_@&siI^~CtumKj=2nrY)N{Q! zgCqjsdD4RqEwdEXDoK{wPh=X9cubUplmto{GOntS)YITg<_3{Fnh93VWy>tbkt&eI zHcw+gLxM60%0M+rMkPJHILxMzi!)ZG_rUB$ttgUy8TpiRI>W68f=!{;K^@5p%d#%z zPB^!$u6towy@D04C>5)7CS~Okur$@ETHT7}7c|UdhUQE1{g*vq_2xr#eHcFrJQ|+L z|n`rGLjMHwR@-KH7|S?WtpTx5rkpB9c`V zVwNPYhq%>)$;N8xyg@a!|EHR+h3IUtoJv;fAi|;QPMM(C=oCS+Xy~0%<5pBmL)kin zAbs7@_#pE5ERk&^h$p#tG795S)rDyi2EvWU^qPYOOY&<4@28K}XO8<#tp89xf0RX3XHivufcrQ?+K{(akJ8#v3qn7%9oH^MpRb zXM*u*5HZ5zOOjiN{af+ugH8e01ZeKkb`5&Wfq8Lzu2!Feb*H4ffNb*k!w;cXO*l*O zh6~4Z3M$|#0vB|=s6eM2q|y}CQso^Vho)QlCLfs6C>XO;xFCkljQP9rQtQP&^Y-w( z(!PHGhwoptU;X~#-VGtLeroJ~)6n2q-+>=|&~~(4O_Psr cH^5Z< z$hGPLu80d9D}5L|jfhyzE?75oppHxoOylZM?i)+*~vX5M@Admr=W)6wVkgLe{l z!lv}~t!J8;#Y`J$iQuU#G+i6}EbtO-aQ;m5J#Ap>T1cljBjO(84vgv9nji`<;2URO zq&{ab8Dy}zt`=IAg&q}bxpeVu{ZhNKRGOG;1xx*PdWX8EcGW_=4IRv9q3~fpyd^gU zAc?(tw+Wh1<#DpPhmAM2nw~R!kp5sO-BoPSD zk{*0$8ilY{NwU;_D${^OW1=J^#8=9Yaao0=p7>uf#}A#+Ot5M$n?^B?RDsO5c@_y8 z5R^es2C7jqO6loFK{^c`oUtms2WBs7MV|D_$fums8E)MdYznmw>PS{tmUSs}!c)`i zI+v!|%UR)yLa}Pz|Dq?%-h7Cz526d-rNNmzeuy@u zu{IyVc)4)lfXc#8XpAmWbcpW}5y2k>8!a9UTJG4N?#4hCDn74Lx#7Ps?oaSaCK1HVcLB?EzaR0=BjXY?)gC zwsr>?c@fDAVi+q_$()de8)4erT}G?j1DJMydzf~wWc{@g-|p`cCU!1Z49 z;!Y1H3#+O97S+`HpK7`mqP@d%Dp{?A2#2aOWrAX(lLyJ7p|=Z-TV63WW$O@v^i4tF@p=ws)g4~)ry73H?!~rZ@|!DBqYVo6Z#B~3C5>> z$Owh%cJl9a$YuG-D)&``TCFVfB)(ES3lQlwc0;*-14B^K5So6&L$BsYeQcw zoG>}`Mr}d)1ru!y_qG8Ke3(Ytghzgb|2PCs%V>@J-Hv@^cUoR&G;Vb|p4aMiSijX9 zd924+*EU?^aB^1(bH-D_}y{OmVz1eK;HSwj^tnJlm4SanU hO~t3V|LaG!+Fs+H9BrsU82wF-egM-O`!HDD_kX9hO|<|3 diff --git a/warehouse/test_ns.db/target/metadata/f9f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro b/warehouse/test_ns.db/target/metadata/f9f0db0b-08a2-47a7-a20c-fe26cee6a077-m0.avro deleted file mode 100644 index e55f87259a212a92ccb6dd9f058d2c36be6bc402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`KPjBNy6u^^gRP_KA5(sfvVB~Ys_)oU^!)Xy)?MhI}wtHGd*2Eq+rjBjK<5t;K zz5zmf2PDK1i3<`ZB#=08;3IJ2u;K%7LcBK=kj5U`6Z|Z`D6DxuYt6-b-0y2yo;HMpfUZR45pd*I_ecvJxckmy9*a4swzeyS~ z6_ctWz3A>NmUCSnM-IinBu^ecBGJ^0Yj3t_F2WU2i`rU8jOq9i25SIUraS%svY_|KT_hxT|TST&aoy%O$R+mj|JtOHSxXnJr!`_9nnaq0qfLVADXr=JtS1 zV++9M?f@e%B6&d!V}&Z26Vh-aOslucXtnwP(;93K)9RP3zfs~_gI&VJ&IRiM#HFH| zS8Y`x%6Nn58hY0;aEBHUNEQo{d2g3!%_EG{UasWUg}^-8jCSpUWI)Wg5 z+12%QozFlg2IX!Ja|?uykV+VEIhiMg~#{;h7KbkDR!RFXShr- zKJ`OJcyvuN3$cI8$1dm;@JxW_E;+0~k2o;TU(e<0(_ME<$_L0Mk3aeddexY-1Yfvt zO(&oNo+9u-$A=1Z%6=kEQ7u*0@o{LnrEju{DGhy(CBg_Wjr2dHCMxyFZX;cH{Ru&Bk}XefiDLKmPU4WdlC7zw3DBVW)H0xu%>=B7oL` z##q>4a_Ejbg7OO{IvDRAL)Z0=ZWu-f26_hu@*}_LZN2UEEYI@p9ktD_IcRqsx7!}* zPPgruU1m7U>~}5iaPizaIKBV)vnLPEn=jsM>^1(ZH@~m%eO<4?xY=y(HE~dD*7j<( k1`gk-*VL!E|I5Q#ZLe`(&NlMdU*+tFu)MJklhuR&2M|9BB$6u@nt6{SEC5{T-G(TdWJ_rpnSQyt5?J5xNJ;QUuXk@Kb1v-zgXxnJ4}NS;}vVHO~sBqpV`S;+1*WLBXJuQ zRE#wj0&nYrxf3gb469(9^a3)B9N?!NgI=P7fuJJ?1byEk5qI!GAa(#~#cz^EOvR+C zNH4lOi{)I`N0CD@Fv-)?N95WQ6LS27$S7mwxRCOdQA-*Mk%4(FvnAKC(QfkeSkiTC z4`5JcX}}HL#O-8+A7}YU(9uMsvCmp++mwuG!dwDK#DpPhmAM2nw~R!kp6x^_BoPSD zk{*0$=!LLWNwUy>BGZ6GW1=J^#8b+Uaao0=o_Jp{+Y9Z{RIq9;8+tL0RDsO5c@_!k z6O=(v2C7jqO6loDej0=}&RCY-1GDF~B2W57PQl$A-q(o~^p9F;7;qJAnfG+UDGzvv00Hyfhs{piATsDCDpAEE^` z)@DN(FBdKxP+9mfjnPGl4)I(fBKSj~k|o54>m`?EcS(a(KrEx|gY3DXTR_A z;#LnP6RWB98r9VNpK7`iqP4|xDp{?92#2a2FhQ}=$%ACx&|8JZEw7lGvULbS`l_Sx zVd(H_EZas9PcrdjYYh$eRo1vjDC^nbFu;W&MU~ zt=697PtXKGN6-Xic9a4hE)W!EOyR<_Y~d|awPNAn-7GxD8!&Vj2}!Z@gg(P%g7Lr$ z8R5}2$t=YFEq`}Gr+{k$Gt@S3p!p@pi}k|X^Lv8vW|~K(=C0I4Fojw#w-ywh~ZOh_O`s#I+4qqT|BR9KYsJu z^Y4CoUVqnl`St0){eK!S?=>4YzyJK=hd;jk^Ot%9KDEE=xamQsv){RL%tdK)OEcB|GM7R+e|llU9;D1AM_9OcK3j?cF%SD zZNnWI{c(4sQ_I+&-?#Q2KREsL>BF<;&0CF~#$Wa3_w}8x>NR+8Hk&(5e5o~SJGEK^ jU*D|P)Tg=o>xZ@4PUC?bZRDdb~y!BiY)0k-kEfG9*gx1nLp9OBB4bGlxzN-z4mKM?pu86qHxD9iyY)=q{ z=kSfQ&r_c>SPU}Qtfe-Zm5nYHY_WCzZS_{GvQ?UxYXwXFReFalO`WQZcIz!LpM}DQ z^YFGj6wKqfhO@gd<-!+!6tC4gIbc@d*{}OU4se+A#N=C=?)a7mTOx z&`TceD}`UZmtiCT!vRoQi{u~)kW>f>P^KbH@?WK;M2E%73qw(S3I1ZC!|X7fj2N$2V{Izd^8;olYh`yg zm5s!0R8TS2TnN0b3+7I&2r{gKZPE+KFmiyOb_{xn3I>9X91!$lYINa~6I1+)Fo9!&+S=CYv|<46_A z{FtYapaDS{1ZAKaC8Ly{P86h*(8d+Z()(ccyjJ8%zleOwIi2FseZeMB>!6Ngg=JBf zGACRZM$f)9jDF4vcNB`%1(UKe30RscRE=KA@=F?|GDEX1+4+l}F#5A0x;}``eTN38 z^7I&jH;W<1Ju(7irj(?G!H z=73FO1Hk6?03$CVc|i}`*&WJM&a zGQ>2FUk!1q7n6zA)Ow9-YW`0(T?x_JVmXzpRzZYI)t)dxvC+wcWZuwQg~lzfn3}S6 z2toR)tMNhT@M$dDMi5Uj@njT4qp}N=IPirXd0xWAQX*J|UM^R^=pgduf(2{>&!Eg` z?5whWL$y|G@A0Q-f}kU4f-*Zw0S^xd3M;1Y;90itnyFf`@bG399^(rbI*f#**m**q z;WEMa#19$a(G|%o#QrTGyP#9RGXa{rWWNGE;=nwAJ(sIbchxN^A0X>I{_sQSRb$Q) zeBr`1oq!5>iogRMA1cr(`-wC~wNzQh$D!$#zR4ygH1s`|2ph!ksW!VKAGJ>8GG`a> ztJh``DM*>9df${V{z2xzMQuy-2 z93uf39)L2MqyR~Pq(Vr5G8I``{3|UbCQMddAVv@gW8NgC6%kF+Nh~Dzg;2H3S}r>? zqAUzitaQl`UVJvDStyJF!M~~^!Cx%$m>Xr&5#u#$oV$u02O)FQjj|8#DjSKrsGw%7 zy%cy;7c87u6J$9h+oTteVeA1v;|TN;6$}I&IUwl!CW*O+4+60RKx=-JG!iN%bwy^` z-FYk*x;}|Lih)UKx9Ynd&DhCA)1NRJg=H}(Jq zWu6AyGHu*WPWVZlj|3e}M3#iCskTkYh^EXZfJ96fvR0W(FmtO&RO-22oIw(S@I2|k zhn86iYn3ER?I$t~NIWJ=LP`Rq3>jBdNa|_uEpvm&9nA!*=dxv%<46_AVw!6P0g=JZnawl9^R@c3> ztX{ziSCop?1(ULJ30RtHRIP5s@=F?KGDGtv`TonEuzK?$x;~801CNHM^7tXflqSY} z2;25PxogTn+`ge!v^eWchDDj>CHeq7tg7pC6Qc*3cwyF?S zykUF=z3T|LLkkEb%LU1PxJ|Tn2jjF`D7keZusfU4u03_^?)KP9Rz$L@Ld=rn)eyIO zFxgm5o!6+Q_WxAVwGf>xmQ%@U9Yi=(-6<0k8=WFZ77e{qYTSy7X((HV5Tvg<8Xrd< zpCz(w1o0#nPex%ps=6>u!a%t3c$_k^k_b+zmn+mSJBXsWU?H2rH7GY4JFC3kP_5O* zbNm^aAm|91pxlm1z{3TC!i*VQcvdaEVXD?F?A*@6BfJ4ahmn#DJ5T5{d?py51`#7X zz9PAW*uNF;KIjy1O@QVuJ*YvCIWRA7&(-R4xbBpc7m!UJKmG`M)r7MYZ@6$wr=S9^ zB5*;+iwbngK`KpAEmhv}acH`wZ}NdDje;>tg$rW%%$UC?FSTCmGj9*iEA9CGxBmU| zjf?E3FMj#p<@~FOetl2ZfBy0N-~Raf_kZ5hH0`ej?s(8{AGEJ1XOkF^wV^E*Zj>JQ zqqd;@oQXC@d)qQi3m%r)w&2q?;Q>G31wSpbHD(XZLyLA=-G`>rI_&t}7VRI>7IQjX zI`Vq9WseUQm#zILkDh-1{PC%N{jR>N|JvC3p|Sg2LxXpH2OjvM?P$B2CSTuafT{S| Y*}MK&({}YoIAP7Grt5n!t-kI502}2$@>J-1kmjQ0NSN6Y5)KL diff --git a/warehouse/test_ns.db/target/metadata/snap-1165795474348715640-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro b/warehouse/test_ns.db/target/metadata/snap-1165795474348715640-0-7d0d6d50-d572-4127-b57d-a42a67df8e11.avro deleted file mode 100644 index e4bad7ef8fedc4581b3fefb64902eb663445e11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2020 zcmbVNL2J}N6yBCvdhn?AA`(Iogl0FhJIQQ%@FapD2#Tj7VKOu6Mw85%nRH#s9<(QK zUbHvClPBAQMbNtky$hn?S-hw}py*_Gv&}YbT7{fu-uHd)ee>SS4e##E=|vIauIO-S z1oR>RwuKxEBG`g$1S}hxOI@6>SQ>?}C1jx{a7<*H$Zk1p3$`u@c0Xk?VMd%r9!qB7 zd7mc{mc}|uM8MA&Pok@_&RfSomsZcqOkVz1)Wg(Q4jQBbySSo4l_RVWrFOVJW>Md=k&-B5v zc8EsE;1zz4CMh7%r3<&2|1nJFt4D3py**ag-PFvgY9D$dT&*a z(=b#K`vZ%U1otzH@-WI)!+03m>L`#b$|iU}x_Z2`?#DqaR2vReMmr#9bP7%2aUL=p zmxpHrS2rqnxIxBfkmWO84wEYMoaT|GVXHZx=1>U}7 zLO+Hz?RJl3Ei9Q6ux3K}icBoCtq%srXy0RfH)0Y~EOE)Ig3{Uwf5!Bv*2=T=fl$H%}e&~%f0z`r*>zu*p)`3-sq`+ONXa|HI#eOjYXY$4T+OA zCL4LO4Ma_9Q_D1{`t2AHG?C$1h#D9+v5lzTW&jwGS2`$`y+7BJctundHn(88#RJZDOCe*XE+?mv^M|T)ZtmmO=HBB!FW!HhnTQ_r`!DYwe4+pV diff --git a/warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro b/warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro similarity index 82% rename from warehouse/test_ns.db/target/metadata/snap-1320653015771546028-0-1811fb69-c4b7-4732-98a3-154c8e821d41.avro rename to warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro index c74dd2542bc2eaf22370db65a62fd682b41efef2..e1e87dd81ea68cdf743622d7f9c4eab22c75cd4d 100644 GIT binary patch delta 173 zcmeyv`-gXeh=sASsiCQfvAMaKfw7r|iG_tqL1IyAUWsmTUSdIUMt+HIW{R4Hxw*Ne zk-3qf0Z@UVfti7!!A2iRHi4H~J74@ZW)A$#viyIPMsCIAQa0m|6eEjdbJJvVT?31x zWL*=3WJ6tx6r)sKBNKB&W22V1ET3RF;>jL#BTclbT8K#&R>gF2gC6*QCzj0w;U}3q@_T=QZU7s(jFfcFy`9O?r FFaU1jG^+pr diff --git a/warehouse/test_ns.db/target/metadata/snap-1457045964290920894-0-1b8f6465-742a-450b-a358-12b08ae8ff62.avro b/warehouse/test_ns.db/target/metadata/snap-1457045964290920894-0-1b8f6465-742a-450b-a358-12b08ae8ff62.avro deleted file mode 100644 index 3f21d7f7abc4ac656330f69b33d5a7db5d5446b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2022 zcmbVNL2J}N6yBCvdhjUqQe+Jx9y+^|>|~SlEP|*Ail-uBlDu@INoLK=c3sMXKR^)w zf=4NODI&Iqg5Xg+c<>Jh;=T5usFU4hJ8jyu3OUWZ@B7~S=DnBO-h-*L^E{^D zEK8_BtB~=CrPIbdUCmg7`yEK=tMhA`7<55fs%sheEDN;7x)w$d2V9;luW2bwMz;w~ zqY$`oyHs>0K{8nxW@0Q+1rHZll&<6<0rPX>o6M&|O4sk*xnA!_qEo+iw?5JbZMaxJ zLL-KB

pBQHhz%C^WN9e)C>00cK1+o(_%KMfsz8O??%3@T z*i^vfjFU*_y7ykkF|;cgXb?c)7CmuP&8<`5!zc#s`m9$j9}@*%@(dnFT*$|Es~A)d zN(=$SAY=(u1gZrkg0TY`>mO5qu0DGC2__X(FjQMuR8T>ndRR_j(zpC@`(UN_mbJ7O z$1-AnU}=`oL5`6gCi!mI8%A3mMFNt1g7>4V$2;$S8l_ye;Yek?0}4h*X#$V27-(7^ zo-thB$l%ci*+c7jK6}eyQiWE~+?SUDgtQk6nQpFrV5no(hs^b4YnH}YSC)>#I}pIN z6IgrQ?y;=Ok~sxyE>x_@%*3`f9G;;45C(1nf(BI3l2wY)|0q7$&-o;2!*io0@3R2> zx!ly6|MKF_t>@d(M)q{!#uxfzcI(W>R35w3Y&M#G`E%*89*3rMPq-;>1YT3nYz0KK zNVchacGxCu6IsNdh?v+zv}M{zH#}@pu*0xzpaeH^>2FtSwYj-pA3nW)^L6v>mFZe- z{QawD%K+k8L`M)38xdl8$i~n@Es8zI_ps@=yh8K4)SR9DvH5%b&(@3gAE*9XG-&yb sg)IjKL8v1FdWfil4P=6+J7MV9j!sn3nVI#^&)#kS+}+vT7d>qFU&uCoxc~qF diff --git a/warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro b/warehouse/test_ns.db/target/metadata/snap-1656754234135740529-0-28820ce5-8545-4c2c-ad01-d2d70ca569fc.avro deleted file mode 100644 index f5efd4ad5d89e7cfd6e0b449b30fdb0c7bb6d625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2019 zcmbVNziSjh6uyKQQ&@>c5DCW;tg^ZNHTxrlHYx~$pjbs&W@p~!R`c<-9(P1A;Vkj;2ct}N@0tJi%i`%J>5W>feg*|78u;`LP|hQyGa1~ zv~@1b@&t2r9dZ_B>9jGA*Yj+dkv1gw<(UnI_dB4hG?g4kmQ!V^se}>4l!>#|4JF0N z@HW9|6awRZ2lMtMNaQNQkfsS#$-{UarE5h9%}7CfEhCr<>E^8)SDU?vx0_dPHi!D4 z43?VvXvC1N?W3YgDsd(>cAWGNT^?gi;i9jJ8M zAGuutBMDs1IEh5A7mw}N zF~}ZN7%0TRMG18TvIP}_kpp?wJD>nve)Q@SOe&~hsJF1JpoT#9u$sc8Z`t1V(WKs6 zRnl%8i-?_p#d(hV1x9$76suu8jIKC}I3&dc??l&+chUVgN||WGp~`3nl#HI#1VNU? zfYa*mjNsx%1P?dJ7_ArijF-ct3ZoRBw_qd<3Wg4_N z&ewpq%4A!H>lzvXq`JsLsznTGNbs1hd-Nnp>>T~F4WnR&7K>gm?6kDqQ&H22#57tP*z{{R30 diff --git a/warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro b/warehouse/test_ns.db/target/metadata/snap-1837055597910465939-0-8b4d9444-0e3a-4ad0-93f5-3e3eb577a853.avro deleted file mode 100644 index 807a6aca008430e81e467d58d6630c26d92c3a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2021 zcmbVN&ui2`6yBCvdJsgAdJ$QIc;+O)_gT+jS{>^DJI^ z@F-2Fxpa;-H$XW8lLmhTIEyzgoV56@0}rcogMAKDJlK zpn6bYU=V|lCDak97E}l(4rF|ANCBq$=+!5fR#3xGZ(&(M4T0)mHHB&4=KI^nP=Ig;By`W zO{>E*fy)~iJl-HXXtT&?XE{u(&`O$n@{&PF`>~Me7V3M3I_3k&JYTkEWt>fA=_tHI z0l9VrYroe!lvPm_W9XWS{v+e7~=lS=i-pv%T%evmu2lD6A<^3FV>7MY?yv2N7&}iNKd~*rzt4m;@+vFvacA@)ljA6i(7mbznqgK`63-sZMO?Y$rux0aZdmLIN>W$U6I;8-smkeCLL!$}d1- zU}A!ijfsJ!5)*=r5s8V7AHWXhBu+1N>$Z}oyZ3$Hd*8kH{Lp{ayu8UNPWgxlJtDU( z%QlUnW826w`X;h0gl?ob11j{DFuU&#Ov6R)5ILsfSXTc!hZi}}0CbusK4h)_wUA{A z7WzJ9JYuwEZQ}imb$Kv?1b@7GpovKe+IC0FAYd8MwmMoEK}@(j+da@IPG+|Wrcnr7 zcqta6Wspo(hS`Q8Q6&!-Sw#1W5W<3j_yG&BkkXwekM4KIkr;J$9(QK?piQ?rCuqb# z_fAkT6_uDtjTN*sNJNE>$5RMAnORv%nWd%RBPv$m0i!}1d>mxDb)eF1Z|-&lY%Abu z#z`b|UA)(63{EWrCIpCA_QXjw_s@Y3qZqgsu)JEnffRhjGk6(sAs^eTV^BS)Fc64A z$P(%ZR0}Eua|bduKBWLtee~)REGwvCsJF1JpoT#8u$scMZ~5`|F_hlh)o32aGU8}p zahBmpfsr02#co&(<3Juo0+M2akD}|xyXbx#Q7+qXrZV3FCF4+O0-v!MFs%;H94>EU z@N9!D&}Na(VmU0U&`O%8@{&M^^H|7q3-y(uj@cM8&zG%P8D~>jItuSZ0N2i7&C~Q$ zR%OYYgS8MUS7c@z18q7zL;E>QyaWU$Sm26PiqRJoU+(8(lCuS~Y*IxY!) z?CU5rK}RGcIu0DH8!iEVfDF5Dg?eIi3+X@i8jbb!Z@=Gs{rmRI;hk2aG5;>AX$5_P sd>82hd+6#2qd*^EaCHY8Hp0XrflE})cKhA?e;*Eiz5cwj)I47LfA?fik^lez diff --git a/warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro b/warehouse/test_ns.db/target/metadata/snap-2429342651217145121-0-d07e2165-822c-4192-a463-1384cab3f16d.avro deleted file mode 100644 index a130255e52d83f8e4fba882ff7055d706f42520d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7FJ#Q015Oo|E6qG0wAh1qAfpYfkec4V6LPA0yfv6&MTJMhIgS%aGyN|}*IvNTP6#N5Pc5R=t$t9PhIqPocy*KlAW_+*vcvtHJ`uQK+0p$Sh_XI)rkfiSKZNrIM~cynnksiep^|057uP0euzc_ zY~v6WWT+%uY3xHQgJi6AA~66Gsm$_H@+@5gA2YchPB@dw;DaF4Dg)(iM>Dqz;J^SE zGfrcb>-@fsVhBqaFr`4FyeAH;**gKg7bhSh!iUB39pAtgJcDPkkm|CdG6vIw0t1Bv zq$;6|z_g%1FmoW|qazAH=A{>}U{OH{L%D@{1tkQghs6{YeJc*Ok7M-Sy2XY`q9XPN z7H1hAYmD+R)w^LnjBWKPmXPWR-it0DZ{7VkWkC)1YOP(z^phtGq^fY z!P5;gMX1SY4-=`<)$03(I^iS8qONMq!Z;&i=@`6Y3Bo#tbvPIt z$!aW_6R>Kbd_`t~)3zp)W3->ZI7&fciX|>sWf*-*@x^}DlVnZKO_x036v!EEYUS$X zkKdQKU*Em(=WX!w&AXSi-Q}Gn9lO?SHku>#=hEjx0ZrwejF@Q9Zd2lH17tH#wn?29 zxF`(lw(AnxM;+J3e(2fAYx@Luy&ejwojMII{r6_2QmcL4dGUGs)vr%Cs_Ly$QP0zA xhAo#m;88mu9c23+ZrhlkmfeAXQbOHs$7`FK)#~#vKYs82d;jhFLi1qh{{aHTR$Bl7 diff --git a/warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro b/warehouse/test_ns.db/target/metadata/snap-2440352229145444371-0-93443125-45ae-493f-b226-5729c263a793.avro deleted file mode 100644 index 64d5745ebd58eacc5910114deb145930f155e9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1903 zcmb7F&ui2`6i#a?J$UdS^&%2O@gU7^er}Rp6;Tib#fwG4?Br!Pn#{z^Y}chMdhAj3 zKM>TLC(-{vJbG3{Pa+6<_2^`Gvz<0=+Fo*)dEfWF_sx4Rx4I7&POmb8a@MC@Pohhf z;~2JUSyo^=uH!hiXRhU_0K#=CY^`J1mT&pC=R1Kf5T1E~!J`2X3_2NPT__fv^D!+l z#PuyGSVGC7wTiY1+G4m58G3teTjQe~v<+1&0MjDU)>SP|AdQ$f+uYU&$|koNB1sI4 zhdJW?d639egt>+xP!$j3MM8RINJMc-e3N3tg|vG2_6>EI@Vz zJlP;Kv{~jeTMqLow2J1wxQrl1gOrPOOZ7cNozfu`VOO+fZJbSM=}5dI4oo|Ob&%(W zvPw(l7_6mGwIU1G@U`*y2g5C@U+kpZ<8Z^Y!nyD~pPrxV*k(=~P5Ll^=dcYJXoX)Z7S{Jr!1&&yZe&&)OVm;N7MC{}p@ diff --git a/warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro b/warehouse/test_ns.db/target/metadata/snap-2460630470132577521-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro similarity index 77% rename from warehouse/test_ns.db/target/metadata/snap-1391988045888484974-0-08f30a09-e7c5-42f4-a43f-81cb10b83af1.avro rename to warehouse/test_ns.db/target/metadata/snap-2460630470132577521-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro index 8917a9717e5a0c55be1df5ca2dc3e7b535989718..7bb9a1503cf9374d4fbac6fa4fec37852eed98b5 100644 GIT binary patch delta 259 zcmey!_mR)XKPiimN31w6v7k63zeG1PMa{^>%)rdpz{K3Z(Adb-+}za2P^BQTC^fG{ z7g?FPp^1sHnSrsnnVE^DrKPcnx#dP5NjBm6CaqSjdCCj!retdtX{?A~xx_sA4V!^A z(4>^qWJ?3xM4%pB6SGuHT}$)SL|p^RMB|jCG?TPc0}I_;1HHtuqWl*w3=A9`k1luq zX_@hLsmtWYY?h%ZX=$nE<_5{S=BCLex+WIJmb!__Nv68yK$oVb7#mp{m?y&YzXIxK bW9!>;>gN1k@0K28WMW`oVPF7~=#B#b delta 259 zcmey!_mR)XKPiimN31w6v7k63zeG1PMa|II($Lbv!obAT!otGD!o;SRshet^Y^rNwlxCuvXkwhEYhjq2WN46NVVsy|sGDn`msnPm|H6fVfrI1D z&Gm1lepq!;ZSrF_%g|I)GlRrrOLJW#1B)bGlVsBrU7$P7bW<%&jf_o!E-_ECfa!k) d)X&B?~6Mc)23F)Y36<3_ue<}y<81$PMw%%8Sbz)1Fom4ph7U1(ttkEM>!IuQCIv!awDOTC1TGrk)h(u@m(_kuL14pg}9kKC?+ ztrEDJaT<$U$M1CzgI&vj2?634J+WWS#y{YrI05E|v|BA-HB0!4XK*KGTs*d4$58g5 z!ayJaE=s5)C|gh=7&(yB-T?(@hbp5TP%wI>CI~1^0B6bFxs&(F)R;LGK&Tkrkw+3`QKuaCW)lCevz)?%wCelBg=WzZ7taX({=BxrG*uL5rs z$+k?@4y-8Bk!cwLG7Sxo7ZO0OYlaX-w&^-HO4UUv{r!BSF*mpUX5-u2jgOlbrW=jX zcT`PV4={L!flLPoG9%DYps9es(gO`_>>1*CtocJ|&dxr%|L)%JC%-ngr~X^iF(Obc s%R!DFxuRM}L$0kwNCU$qLOu#{P>9MxXJ%e(-Tm;(&3 zt;9|cENle-0l{AX0E_zvtaK*3*_*xG<<3G#HS@mjd+(d~UhWN_tX7xWv%*5I5flg3X-DZd+ zBVatr5g#vuM6x2xvn+wCc^EGevL{0@jV1A28Y3>GwMP%`Xp@AGwVj7rr4RaSQ#(N; z1+sU7imj-mRA{WAg+V-#IuXkujzng4DRq{Pf=>uvg~ya|VeoN~9khXJx1+h+4X~$x zn;B<`$aV2vr!n}g3LzKEbkr7KU~U>k3*3R1cdeEc=!nZy!tPy;>-OkCrO`Ot(JUDF~paosh!)e zUjMwm{q6AUi|qHiD;Ga@zhC&YCS$iuvu94k&t*(Y2BvV2M}+n8(B!Dt18&yInoiuu z?l5qT&>IAXi`>`<5d?;hEYC&Q!Eu0%%<4($U)!BdxBKSppZ8yWy!^bg-s#N0|D$PF Pnun{Jm1I}Q9xwebkfT_A diff --git a/warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro b/warehouse/test_ns.db/target/metadata/snap-2542743111193882798-0-464f1a0e-cd51-462b-b4c2-81e91f278432.avro deleted file mode 100644 index cb83490a5ec52210a5dfe559628629efe5df3146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2021 zcmbVN&ui2`6yBCvdhjUqBC>?ysk52<+9W+oK`01{r=^71%u6?#WY)}Vw@cllM^7HS zR1bnT@#IOos30hacvBD&Jt$rT{{fxsZnkODrmZ2T%=^CYy>H%ox!k@!b9#{{q{}-@ zppahBEmOBmLz9ndIF4?+&Qh18kO))^b1=5BV>za7=(dhs2ixa4-0VT(14?>v8`4?x zT)@(p2($?)4_Pv+FOtoaHMrk_m^?YVt%yMvl$E-Yg3nT_EZ3DFgotwat+lNrBp#i{ zBnboH!s`;znFh&ZWtfGrMCCkOq+zm=g;3^a#B0naLQ2=KUAa{6hoVzoy;>jXgECyM zAD|IIvT=ZlR#1tU)YyZT28l4!@pu<}PiB^vl4q$G@L?kM!hMzqY4CoKW>qF|bWowqkSt~4^0`EWo zSB_xqb-RbM7M9F0STmt~MW%8YE5qRt+Baa}#UKbJf|RT(7=1$V>3+^8Ng19QEqR|& z@E0;uYkz*PKW=?n6D{KfUb>^+o_}`g=}Z>8qN)wGFMlo_*5jZ`_k@@525qZ?q#GdA zJXzIjnt?_zAfH+qGMjoEwM}0~js~t4=(b}TI*M^4lm2gAKd@?`qA6(_rA>hwlXjbUl-1CQb-|u|-`|j3MbHCsJ0L5v0zW@LL diff --git a/warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro b/warehouse/test_ns.db/target/metadata/snap-25667599030805015-0-7445bf07-cc23-431a-a734-119b9ba5ce66.avro deleted file mode 100644 index 33aae027c3e98b14abb94b35c2840763fd427d87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1785 zcmb7FF>ljA6m}z2F)*USfRJS&raC^yv7L0TkdTm&Kui@fXZxiw*mvgc+z?gSnVFbb z7?3itvoJHjiWvI`Dlv1H#ObAO-LiPNd*AoH_uYHXPvh5Hw{|$eB_C5^XQ|cmgCO*W zL*$_W@{#L5C@}*fY%S-wcF9s?FQJ_z|D+{Oy;_J zuge&MRtB7=kVbV+TvW4n4g4s}fkz3gn&qRuhHrQV?=mjrV@GWax(5x06mk%%9YuRCz8V&IT4UhNlW6 zJuK92SPkPq9%TXwHNj`m?c=SwA7_NiHe9GIcRwm1brn`k^HN@>Fv3+XWV%XyW2kdF0T#uwH5=pXYD-7soeJRA6|7ZRUdpO1nQO2r zp?XC!9}TS8>mzo_??X zmOp-dcy;opbF%eyOU3RvPS=^ppUaq5931JMhzRedu_G`$1mV=lI$^)>$0HQlNz(J| wzUN{ahhE=y-C;b8v7bN?*ahk;>63lK*xsJM|MvOx)5n93Vcakb`8}V-Kfj(fmH+?% diff --git a/warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro b/warehouse/test_ns.db/target/metadata/snap-2600792867184750836-0-dda9e15d-4031-4715-bf68-69610e86a620.avro deleted file mode 100644 index d45ee4020090f0dcecc781c9240fbd2c7325c00e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7FL2DC16i$N&1&>lMBFiFz(9Q0q$tLMpL_rXgo{BD$otI|n?#wzf+ZamzfaijD zPo4z9U!X_Ny?IpVN&kQc-z3>|+HJS>I`h8od+(d~-aH%bt=(K#oaAaOw8!ZEb`%7? zLAxLI!hWaM4f>nWy_`tk+Oxv0^CC^}DtJ=>Pr&0vHU!xW?~H`Zi1zkDDkgZdy-xO} zXsKij8ToYkz}3?n+%3nIkO)cL4aXfZNU6fJodcJXY<`;&&PJegoD)4>1z~m=)(rwg zl{`vI#&=B!6^S8!DiWem+Sz{o#F;QXb{@TO=KA2yHk@-bQsBGisDzeEDp2DT8XeKh z=)@|AB*x6jQpzmb7M^i^8lDKQ(b2P@uvZ5v-HsP-SHN8hT+KLRnCtSrE@Fsk83?67 zhN0fVvVs}{+rw%KtG-od+b6JkZ^t#`jS(jUOQa-IgFz27vkaEQ*vBKL zAu|(v5?w#uruzxw3fpk5ve*G7|M+_2*Sinf-w*#j_<8thuX()o zWzEEH`F_iv;BPV(g#sVl(=k^qI`lP>yP*9tS)WoefUrxwPOuqzonF}WhNGzOMS~~| mpdXQ_9e7#LGSbHn8;xf3_}kI%k4JyrKW;V}*YKcGN#h?O^D_4U diff --git a/warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro b/warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro similarity index 86% rename from warehouse/test_ns.db/target/metadata/snap-1513626882798940460-0-b1c83adc-6c17-4552-aeff-a47f0e2b243d.avro rename to warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro index 3076594a0dbe0de7a1e8629b306804ee9889672a..9639dad429bb935cee532e19225288fed689cd4d 100644 GIT binary patch delta 151 zcmaFM`<7S5KPiimN31w6v7k63zeG1PMa{_Ez}VQp#KO|T(9F=l(8R)UqlyumfX(q! z*XlcpQY_i8UKLUm`ZPI>%{U}2)xy}^*u-4d(9kSJ*Tg6(QPKu7yu5MF&6*; delta 151 zcmaFM`<7S5KPiimN31w6v7k63zeG1PMa|IE(Adn#%)-LR+|t6*#K6RCqlyum0JqJK zVEtG9FJ^sB^7-}Y@6*X?Y{nr;hRGJji7CmtX32);x+bQkM!JcqX=%ENCgy1dsYXdg pCdMhcxdwWPWkvZfTo@Rbm~I@|{Co9_y^UH-3=Awl0R{$ig8>aWHbMXZ diff --git a/warehouse/test_ns.db/target/metadata/snap-329543906335174018-0-8044e2db-5959-4c27-8e91-e5ed66869db8.avro b/warehouse/test_ns.db/target/metadata/snap-2707482049963695882-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro similarity index 85% rename from warehouse/test_ns.db/target/metadata/snap-329543906335174018-0-8044e2db-5959-4c27-8e91-e5ed66869db8.avro rename to warehouse/test_ns.db/target/metadata/snap-2707482049963695882-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro index b97ddbbaf9796a15003d7f012c37840ea008abbe..b0399be8cd17e8d9e5ff8e79f07e44bab7dd8ce3 100644 GIT binary patch delta 190 zcmey(`KPiimN31w6v7k63zeG1PMa{_Ez}&>b$iT$X(#+V*($vDjNTndLC^fG{ z7fG3lxuJoDrKN?rv7v#X0Z_fMf=AdPLs268?X337c_9s$o(} zs#&tRZfc@&qOOT)qPcF8v5B#+X-cxWsXKPiimN31w6v7k63zeG1PMa9_2($vJ*(!k8v*woP6#K6!(r692=HLpY$ zNtK$Zg^`Jwp_!SXfw7sPxuubbq0vTfNj8C$fb+{fZw%=BvHO|UQ>n9WCYP`ohgcYx zn4}t|BZY2erkI&om|3PIS?J~(=p~jF<-c%YU|?fw+19$@ T*X+lWIGGq2SQr?9B)Y)>zTH5} diff --git a/warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro b/warehouse/test_ns.db/target/metadata/snap-2733438816956970508-0-9a8253b2-45ca-4b85-a98a-1bede0a1358e.avro deleted file mode 100644 index d6bf4ffa3c809a971057e9773ac8ffa0341445c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7FJ&)5s5KSTq3PgpDD-g0Qgg`pSb{yY1S5Y7&1QHS-)d^W^?<85Ucg^nlLUc+C z6%r-Cf{GHvpP-TTTnG_br=4$~d-nEPF^G!$O@M9N84*^V=LzG6W&x0?F|zNM)zOLeEpE zibqIJ=tzfPmTKb1EJadDTQ8nIv?fH3tq0Gnxjxvl9czO|26VJR#Wz$krZm>j$`MJl zPAm#YW0hG|N|j~Lz!NIh;VGk1IeHr8?=^ucx8sG|HE?Kv>lx=n<+^;Yvlw<884$*R z0v#ERo{x!?c*7}cVO%BRuLxyi#SJ9jZq%vdKoN-F;YiF zLarzHB)WOLb@wAeg=)jO%3=ppj02+y62>w>v_3owxVlln^9`~@`#PWHa#&SiS2Qox zC59m?GpW+m>T5%tu?g@vQLR}UXWv*l2JcjYu+L#Fi{eaHW64~ARSQ)slB>OJ&t~Un zzlLd?gG3lfRI|!3`ai{2`&mztJ-aqv@+rfR&i{qh)!+ktzJ2%4_UPT6dq2K??Hsqi zv~}#h>vr9V`c1~H6yPfNWK2aDC$2<%1k$aNbq6Twg+bDD`eBNkeiDTa8brwP6Tsjh lKL{gma<8kUkMFlyozAD9zrO!||MBmmPOEiE9kgm``~zydEgb*= diff --git a/warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro b/warehouse/test_ns.db/target/metadata/snap-2836891935063041882-0-c068c47f-bf2e-4f1c-bfa3-8e89e6d03311.avro deleted file mode 100644 index 187513420b2319ae2ed0c9698e8ea77d31329720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7F&ui2`6yB|+D0uK7m4e6;#8b07*(956&msu^07X0$36q(ZZZw&Rnc1#O*}uTQ z!JFVoPsOV@k0Sm!2r8b$ga3dxC%c>Nv}w~8atN9CecyZEy!Uc9eB3<0Dj3ehfJ-x` z*Sfyl^ZQocc2Unpj^+E^s~OILNmCEAT~~!6&+|R6+w(2U?p+b^bO?-q$%bhN`I3D( z;(3atxed99Ia}(k;_aNb1sOn!-(1=;5EV;PNx0J3hgJs3xX=ki1|(3Km8Fzfb~Sv=UcG`v1vL!y7M2y%5a=FOQ&{w^IM_Z&>%C2b4Ubp3c2-H&4?R2xoJW;>u{>}yRBa-INY)!~`J z)rkt8Zjd?JD)N~xheZ`eN%Ke@Qi$*{kt*Fnecwc2gUAx^3|2};6?n3k2%jJ(}cAG`)MyJ#6jMUF%z=r}l$~_q{(WYTX;(QBar%bj( zP|qih7nxzy1=EQvqTaA=`r!AWN0Dt?mYJeGPp{a?vftjhXrO8GgNjBk(y zmZ`}GmWGy=x|SvuDY_;}$;P@#=E+IANvTGLhL#2fsYXdAy152=iDgCkFI*THSXh=_ zczyn8+tKHNOhDe`=WM2-Nv4J==E$i&Ff*aAozTUr>X6eJd<=9TCo zD>Jn;F)%c+Ff{}cCZ=YV<|Y;!eI(h0qqkjN{OavzuXnBKNk7fsEn~UBJoycqfxWT0 zv3X)@a;mPmnW?$1iG_)QuBCx#lCF_iafgc5KSTu95|wKLCCTYr#k*f9Xl1=5E2pssfber)_Ql+80=lMyKV?2zX2{> z_z!SGoDdQxZu|?RA|!qTyGfjG>((tt@6LN~=IzY*QTn`lWkXO@iV2fWMs5Y8D2Suc za5M-;zBh;mQFyaN9H?}Ru*Ne z6DZK9YX`QRm0)jMHV4c&u{SMyoIy^6I@>+4DJmAX1)|v)giJ~#C+i@UoeB#*PoZia zA$dmkbO>Qs6F*=WNhNJP*|~2`GdZ#DJ+>D5V9z(LQ#5j*d#9-QhDy$q#xb;VL}pqi z5hdV6WmcC`XBimyjLPG1%&1h3o&@<(8>n_WS-RZ-hX%NragnK9SMPNe!?2YB5dtKs zo8YvX2N%GPvm8W%S=B7x+cNMC&)`)iqP7`GHpmL?>wH$rVO@n?(>zs| z1jeY!rAk+;9~SiTipk9XO{)VndmWT z#pH6+?|2>ccz(0xG;ObmoJ$$zK&7RJwUN_yI(FMf2)VYSqWp^jHv2$BuxLN+0-tv; zM2x3cT3f(H%;5TU-UZ<`dSwL;~h#6<}s}O zEIX1_TQVnL&4r2;$y=ynjz-65KZIeBg2V(%T(U|t`jq0c{hUvdIXX99@*yJ-F6E}y zZa@F>?B$ay7Jv8p@rQdKuP%H)^L8$eU2Qb#je+`e>9M|mhH_5^RMbhgAu-)cHAVD0|_ D12tNj diff --git a/warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro b/warehouse/test_ns.db/target/metadata/snap-3020510205452172551-0-62985c5d-a0c2-4a0d-9431-a91c756b2433.avro deleted file mode 100644 index 05298e41a4fda99972a9924439ff2c4c152657d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmb7F&2G~`5OyO}ao~u`1%YKD#G#J=;xy?QA&`)esCufv+IT0;g1u{Y*9}pXLtlVr z;0ZW!;sLlLAtc_QhyxNroY_s{bQ8C3x%jX<-}lXYJ2QSZc(rk3OHfpZ5tA;#_ai^_ z<3N8paTx4`aU9$$5C}=c4kU)loIy*RaD9UHIIih3;LM8>0 zqh*jvR)xjBuTT|_ketv%9fDb^iJ!6*NhNLXKYwD6i5%IF_UxHHIMZ$W9E}X<;W;XS zp^`DBv4U0xNuqTUQ9zog%&JnVEJFiNs9c4oj7nwjIw;s_0#$A&bGK{Y*Z|iv&WXx( z@m?1(bQ>8E#(J$H3P-gSSLT_1H-hgXuwy0Ye5-mC!_B zT2LdHJHXlaf&v2b(d$pJte}CR*}|%V1_IN=dJ43Qi4YEK7 zI-kXISXSXwG%wU8h9N35snXTzD?^>JG4N!dTC+CJfw6Q9-iZX^T*6uw#f7ZKlDPt_ z7OGYxkNuuAonE5-8YW2&5@94!%__s_{}f;DXFW;I^yX~Irwl`SU7Kos-JhIBzrH;F z_VWFw2fy$BZJlm>+|aSRp4axq>gO_Ir2tR4Cle~#c;HFI4?%iWvR*gr_u@3hF7ngR z?I0h!{Z16Ps2`*|ad!}QqR7qtww6A9Xjz+^@BV!M{Nv>0=U&UQu347)uBY)25Hd8I diff --git a/warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro b/warehouse/test_ns.db/target/metadata/snap-3060050269327575568-0-a0568eaf-f9a4-4444-b890-39f4a5ee8c86.avro deleted file mode 100644 index bfabd86bef326237cff7225577f6f2d8af6cd58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmcIlJ&)5s5X~JaC@3gSM*%{Xg{aQ)N8-f38X+MeA@L!K16dn;oEYp~-|qTCbjly# zS3rZVqJjpAmYQDxlprC|LCdZa=Qihy?t<(p7wxgY*kpdo_ zqGBs5DG?egXkidfq)xzc2m_H>RZ5kmqu>+FSK%SSTo`;3WDlA^mD|DG?Hbrs!1au? zMC7`-uXPOlMg|l`5Cv6FoK|!99QZg%fdwHc>g8KK1z+Yc$mrEuoy;9d`dWEa)OVeo5x#rKT0qYZCI+zcR0 z<{Ye2s9KTKwLE<`J45?9OoI$KiV#ONs}!UEQGB_d&@njLc@elBBDFffICJix3I4NZ>d2)J1#Ya&bhhXBP! z?4zF16OS?Ue9P$iaSyowUg-6W%<4$#@3&g5cKg-Qm)9S@ef;xqv(=iv|3}j?t diff --git a/warehouse/test_ns.db/target/metadata/snap-1644775352898622177-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro b/warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro similarity index 82% rename from warehouse/test_ns.db/target/metadata/snap-1644775352898622177-0-95ff1dd7-921c-44cf-8ea5-a35d37e5bbc0.avro rename to warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro index eba973a3808f02a2300d98cc625ff5a80262251d..2c8c5ca7f11544bbc7f50bd165705b9fa8efe3db 100644 GIT binary patch delta 190 zcmeyv`-j)ZKPiimN31w6v7k63zeG1PMa|g2+|tCz)WFop*xbm(!raKzRHY!XC^fG{ z7g?Ewv8j=Xfw76Pskym{xtXD{f#pUYNj3rPn~eo~o?3HzZBOj}V#a1Xxs=T$*wDy4 z)zrjTH_1HJT-U@r%}CcGCDBsX!Yswm(lph;*wD~aH`hQfv8*Wng$n}%8{4{#=RPjj SxMEKz69WSa0|SsmHx~epUpp57 delta 190 zcmeyv`-j)ZKPiimN31w6v7k63zeG1PMa|I6#Khd()Y#O>!qURb$jH##T%{nfC^fG{ z7g?E^nT4^Tg^8)Tk)eUPrG<%!vFS!1Nj8C+75c?ny>}R%D*3%DZGMmN4?>O5u SZ|h}UCI$u;1_mIBZY}^$m_B6y diff --git a/warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro b/warehouse/test_ns.db/target/metadata/snap-308720073320660216-0-b7caa35e-a53b-490d-beb5-4d4d57bb8c62.avro deleted file mode 100644 index a81b505861672286b95b64e9310d4b5a3894cc0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1903 zcmb7F&ui2`6yE-zhXV&6un? zsO#GZ`Ho|wP6ydmXD!1Vs5G^xJC^HuzGu63&*`eS)9a#J0$%4pBQR;6hQJq{n|;Pp zEX`fuB4%{aUd6kdwL~<46o0<4XUI_o#zxcN5HU`S^`_B}At6G2+uAcIPA8`+rg0yH z3^FVS^B|S03iA+BsFFuW9@Fh2gs`X}e#jy$m2~sjlLyUVECp-R3!PM;v*wet( zjMG@|6lfj}s6<#PVwS$kp%_&)`igq`K^&jzRaJ!ayJa zsY<9L&@HGCOda5Cct!!1e(BXKm{(B4P;X&bK@EZKVKs$$--?s%gS6h;GH9M8D&lBh zG3R(xV3dbxu^VQ?*j1lm328CGN741;U35Q=sZeb=QJL<5lCh^XLC9DFm{x~p3Rfp8 zc(OreXsgI)wjAbF7$wb1bx5F(^F*q23-x0|ov7 zJTS56gr?g=#0(+yOqaOC^TV(kb!;<5twQ?Oy+&hY<@cX|?+?EH{CZ`v(U?A$)pUHv u$Dn>^e#i4ox9cLahrH0VJ5hv)>v#@Wy5{ookMDo?KfFD7cXzINvh@E@g;TWv diff --git a/warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro b/warehouse/test_ns.db/target/metadata/snap-3204946293128688606-0-5e92b4a8-5944-440d-a97e-eb9566b6a8fb.avro deleted file mode 100644 index 5a3d9a966e339adda65f0d5244243443cdbc1ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmb7F&ui2`6yB~qc<`pwi%1CKsoDHalb(wp2!d7+iiAn#r5jCVVrJ5HDSHr4{uTNc z=s^!2JPKX}!K=4k6ovi)3gTpUvz<0=+Fk<5yzl$o`{uouyV2vNODl|^f(9mh5-%Qgcq2u$-jgQpdc7&KDl5tM!FT0+Yl zacu`mmQvEUR?tpK2P_^!j^13|Rr$C8bzMY%t zqJ%C2*@70q%z=`QPAI^XFTH&QiwZgzx-D!f=pc|iY^Sj3TXwX445|0FR8nP`h&UKn zRF-I5V}yr!y&LAk=!;J&hrFKPgXr$@uDc(lgo!qss?2sk!x%_S5K)=|BJJUs!NrLP zo^Fsi+N|@LFNZ}HYD4o#9AZdNm2r`7t$t{zGdhAYj6`d;#@UpXj>J3Wz|>P%tD-oO zRa!DIHb zez!aD2E$YT!T>y>2p+yz}Z~HeB#xo?H1K@%%+75Qn0cRZ% z&mcn|Zyefkk%K+4Yz{Hw*xs}3gg}agI-4Ha6lLXYhA2ru$S_B8wh2<%sj$B1DOANH zBqwxVhhP?K;zuk-Qb}9So;vmk%i1ghK)S8mt9eFI$2I3p_8^?Pk&7&I~aoKn2GfHY1BMi&DxrzMw4g??a)7h>mI8e9 z(d$pJsi1+O*}|%V1_IN=dJ3Dq6=&PWGkR}o>+x0*Cj*N(M+=Qn9%gzOtcP)=j);Uz zPw+`}^LXp-M}!L1hNa4C2ULt>qX{C$Qb4pmJS(`mQNiT~S)+ZO&w4p*s<11X7wQs2 zf{IkCbhY}ap-$Nxco?bHtc|m8EFFV)Awk#|uoii~mDN}>mtfUG)r#bOZ)7i*7ihnN zMVNs^7)eyK$}svr#W(v|Pm;a7UM~5VVTj9rp;f#;zWe?7gFAlvdph}X?^pY1=hKdk zow#ntovYtu#tH$ha!-a-ba3QK#P>nERkCi>>kfM0kDM{;kDOkR1P&UF22SJ+$B7@u k35u|jc^xf%bidVVx8MEz_UG^CuV0?GTdgbVpjAubA8SK0<^TWy diff --git a/warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro b/warehouse/test_ns.db/target/metadata/snap-3226660396203515851-0-61b30373-a89a-44a1-bcee-d854aeb33acb.avro deleted file mode 100644 index c91923c07b385cec4327f04c94a59bdff0663849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7Fzl+pB6y7_J!@^4B6cGtQtS*}$lVr13iy#PsVj+jbN%C?VO=eU`Hh`Eqf?%uwk3==+3uHR86`k;;BsAhBwe4M1f{E(K-@(o+UH#~zU3FG3i{Wb>Kg9bwc zDR5Cj8-Z*=gJ9}FL5GJFV9Jl)e1dreEe!1z))ll6$R0LRnD;H)-#&)ad+RDG(^N$4 z4lFJTJgP9l!>rm3vtjhaQNkgsCU`fxeY~sg#|dGg4JRto9Z)m&r6vd{O#zeU@J!+2 zMg&hb$P8^(`OKEXyb86Zxi2mwh;f;6k#42FXQ)#;gu)L*Yc|H&l$MUfJL169BUsBk zKa^EkGRI)8gz6PpIEJT=$46*Cf{~vA#}VeZVU=X`3B~98xtb((d~UMjLmEMNx-zx% z;=yb8*O#Y1-d}k3k(~W=ap~u&&kI%Tnyz>Cq4>EBXvshq?s1>6ZWQPo7aPF!I$7N{ z17x5c(y-UZnr&lK3qk-b@*EpOfDjG?Ei<~6^v<ljA6i!P921ZmCge(ieQpe{wcAU-?5)u*;2r(37oqf-Z!M+Q=b3;^xjg1+J zjbFfkI`In_7|IHNfQg-rJ10&rb?cS^$)+z=sstK?Maw*bVzYlUVMUIG zbpQoV8Qtt};e&$pcszz2f4XsKirECr9m6ajW(6^~4Kqn0BV3;C9hwy9)oqSxngAE! z1dH)1NG2=8JcJ~w=Ha49>AngfELOx1Sd4{~Hl94XZ%k7$Htsz(Dt$2L+r}9h8PNSR zR2)quV^U)cEe#T>(h2zl;!tK*mr`fh*YGJ7>+qOSAq_qaa)xc7+U;=Rb_48b;AX~o zDsx@F*Le(nD+4A3NLcs8Sv9+tz$a-2Jd9b{EFTRte8V$%opK=`J8WanJ!mix$Uw*v z+6Z(D8Uzam3N}5b07rlH<`b+cXklo#u&$tmK=-hj!m4li>GnZd@9mki%rY5qGO)NP z@JwN(hq>Af%V7-UQ7Rx;6MPcgKHjSPaZ0&t!%Ahb18T;R)&vn_8DQERo&{Xq$lz*& zEYXh2XSp0!RhTu+b9qT1!DS|7x=MX*s53T&B8+5fHpbb}mX5|d6Tr<2Sj)-eTvlz# zT!K{z)hn{_P+-pI7ihnPS(t;s1Pk1-N;CQ&#aH`TO_DjkUM=~U5s0rUQ#;2;cR%#s ze>0P(Z=Ag^M7}8yPZzA`|<1Nci;c~`1x$J(^-7~N7Jb^f3Is+ Kl3gi#y7a%%+*mvS diff --git a/warehouse/test_ns.db/target/metadata/snap-285316391250252069-0-fe5041a6-7503-46d7-a94a-e367abc8212f.avro b/warehouse/test_ns.db/target/metadata/snap-336213885750966359-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro similarity index 77% rename from warehouse/test_ns.db/target/metadata/snap-285316391250252069-0-fe5041a6-7503-46d7-a94a-e367abc8212f.avro rename to warehouse/test_ns.db/target/metadata/snap-336213885750966359-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro index 41d4721125edca32c0f025312869770d605dab6d..9635692cf4b759eda9a61e73edbfd25b6a1363d1 100644 GIT binary patch delta 279 zcmaFQ_nt4-KPiimN31w6v7k63zeG1PMa9_I%*fE#!ot+t)WFir%-GaYr692=HLpY$ zNtK$3siC=%g{6V1AyB=Ap{0?fkz8?VVQFe!a;k1#X>L+#5tGrzSavpH>o*wWC*)WFEp$iU1}r692=HLpY$ zNtK$hv5A3+nX##ZSq>OiW6)Ffues z)6F%|ODrqOf8oNwz{Ym!NY}*&?=O92XJTMrn*5B-G{n>(E!8;9Bt_ReB_&DMBstMo pH!&qSO*h#*3211drMaPnC9)YTEDKI->bdyy*6kRO8DNC&J^&56T_pej diff --git a/warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro b/warehouse/test_ns.db/target/metadata/snap-3364091044142178334-0-f8a17aa2-8cfe-47e9-95a2-768caa6c55d2.avro deleted file mode 100644 index 040300d4c59716e370b964ec59b17c4719abec06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7F&ui2`6yDZSJQO@=>qR645rk$pzc=Yw1VIoKy_6DWCokR9WF}@N-7aOJh<|{8 zffqg7OOGP{34#YNdQdMSc=0cAvb)*NHf>rVmt@}eeeZqq-pj+@&cezXBPe5i%C$JW zZCS3Z`-X1YhHV;M&$8@W8OnihZ7$3+eM=W%u4(JKW7tmjCWGe%5DXeA(jMfC){Thf zDdO5LIN@<9STB%aD-blK26|hzn`u$)o$qAm)AL-eYB~59(-LIYlD@ zvVDq*A*m!(Xw0F7K|C&X0+s;|L}pbfRhFiNj|rcLV@kL%_$0{aHi0U)gNfTUup@!% z8K<$xb$VZCF}RHkC=4MCs-8HlX6pj@C{BO{m=^W&bz8#MJcGTMadFu}6NBtQjUj{t zxG15CK(?SpFmWKKgEI;+Vys;4|<|CYvXK4OGn}za$xE?tVNcc z$to?G3$T_#)r!m=-BU-SbF`nqFi3%;5OGwqN;3LC#b^7uoFsL0ZM@_$4FO*+O>Mo} zd%b$)>B`~v)jxOMTs`=<^y$*kLK(Z!>9jio@pI|ZfcP;LDGnA3h&$Ew);d=YKT~ w8~YY`u7-8f)NCKyS`WLCW;w2DV9(Z(?#P-;OD|r2{rmgl(c7Jw=E>6k0S?DiOaK4? diff --git a/warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro b/warehouse/test_ns.db/target/metadata/snap-3409260926258592601-0-4f3d6bac-76d6-44d7-84d8-25b914dcf93a.avro deleted file mode 100644 index fbe72777c1453a24e79aa11a55213252e041b2ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmcIl&ui2`6yDZ7^x#qIL6H#DQ?vP<-R)TfK@h5*iiSz%r5jCV*36{qQuZSL0Uq_{ z#hWOIe@OoYZzAYX5D}coZnm>co7RJng^+pQ_r3ScdvEVWPu4DOGJ?izM7fdTo33XK zok0E^f8fhk`}!CaK)9iX1w+@h`@{ag_N~C{J3-)HWALm55`#g?Jc44~xth=-N8H$l zf~AzKJDX^~pgk6kAV(iAALx8K27O!83y5if^({?LQphk9-*yjlg7WG#MmniSN=FaUrce+_|GoQa;jd-`6UA&}UoP2^txYy%SVy zMJ1y`V+Ab?;;GaL*%;zbWLB3_XXz;Tl<-w}ObHhT9|zg}Hc;($ICr}N_7!k5<2)6) zF7E3zhM<)JVGKB|d*Y;;-E-iRGy@jKv}~4dc?!Pa89YxJ7ndEjF{mCi7%*hOMG0*L zss#;#xdR2AoKk?TUV8HimKC%xv|CtL&_bYk*i2#Bx9oWPSW55h>ZHsv5pguIs3_1> zVuXje+zpFi9EeXThg?qZQFQxw%kD=hVWJHymH7^+8HY*}M3iQLNOO4RaB(7ns|~V1 z+cKZUa#&WO*EEmBA%+B%85ikF^_8K{=md%|60O-7XIoi13h$Hy)6ZZn$Kz93l_hfy zRw-1k$ilY<`fPTF_EVUKIdFs#M-8hKqyJHSxu4}E>9b4Kl8-5dcte`nx$^qY`xiGh zetvuVAo=oc=U4ae!sj&^yKS01b0Yp+MzmyL3io(OSPw@gN5vj+vrg9Z5*G&%ij97N z1Hv^^XrLl+sj)sxa+Z*@A|?x*i>UjF|0>hSS;r!#;4kEUH|{#ezl LB)dZPcljA6m}wz7#LBz0J1E^RL6Flv`J@#goK0uF;!rleb32(edpet8=@*Rh>1Ue z#Do~w*!crYtW5m}Fmji~>7`EGB5!x^`@Z+Sd++&4{JM2>M^IFVF_SLA_rqS-?+^XJ z-ye4U;9wXA;k^QJpwczMZqPEz?g}_AfhOS6GLM0`gWDHlC^%>WRc=QMw`<_O0j_796P4@oy|yvzH!>iM0Y_C6 zY^piD0zM@fh$vxYy?noC;A@`2TOy=-?5K&s^q|IoAp@yOXd*Bzs1Yn2;B2y`fWUn8 z`V*`wXkcizu&SVe!1S=5!m4k@#rE-y-aB&ic&mu>fkm97sm3S|bG;0f!#Ge!L_)47 z_&mCKymj{@LWOF>xyoV(RE$HT31Y@FK(szQ3%I&b!SfBWL&Nk*PW!C&t)*iR zJ+I?U)Zb*xN&%j7PexR9aO_FMMa2>51>LwG>C={3Vr}chz8bo=gVH4I7#DTciww5Z)e7L!p932R~bP$>rt*Ic)e>m zdRO;!!}M&|(p}$O&rtz{t8$cKJDzL%rtkQ^h_Q8hjloVINCYbBXCV}e*43C68RF_L z6fB`+(OgBl1?{k?2N~MGyr=MC4$5X*DIlT+RyNv7oIr}1INRD&2+GE{86rsxj0ZX5 zy;+b*RfO5PE>IN@<3&QY%MeVXlK3`_5Es(z`*&})2MO=BZ`^B-^+6eJw2#n8fovb4 zVn`|}6&iDB;SWzroq**K1tPPmlqyS8!Y72!!y`(#@b@staGOAt+rh-`8rYV=^^CJb zIb;5k?%c zs^>Y8YPnvldLfvqC;n9qLY9erN6qw3DgE<$tF^N7_xsm>A3nbNbYZd8T57e#_pF-O vc1_cWJvG!_q3Qdk8k$z5VzZ0E>_(OgbDGP`FTU*m`TgtV>!q3I;nM#DPb5`i diff --git a/warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro b/warehouse/test_ns.db/target/metadata/snap-3473198905970838950-0-b528ecfe-009f-435b-9a1a-5cbc8465e7cb.avro deleted file mode 100644 index 7a79f5b88b4b817b69f8172235aa3d6bfa0bcd6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7FF>ljA6ix#J0}B!=3frY&@zks_WPOo+9mi6v^-}l~k@4b7LyxF?BEhs9*m`R7E4+q21z>mVn z3!;%14#Ft#9+Zd!m5vd1gI0NdU%j^xD z0)4(Sv*ok|d(W~tV8&B>$Feg5c`DS|{>-MRSlkwfk_?25OC-nZAeEg83p`JuY91ju zp$9r7WmpqGWf(~%ZM}T{#F`K}wjRH*7W!b%cdQK>InaX*D!!qTGo^6`tsId=>%^i2 z9IMRgQtB-G2A)uP7LFN}%F**6f7Ax5-Hw-TH^6}bZf0B%mFw!gE@IeiWk6{PXxD$Sof_s-#(tvd;7K?ZxwMmu!wUs)fnYrp_jpG7(;bLBoumr zPovw%TX#PqRH!yws4RCt%@`R?kT8}5qRru1!qtrmUTlyR+SmE4mczOVyQX=iE>p-* zl}nYbRzEY;Ihz2F6V;lHarTX+WAIKT2>TM&sw^*LHI~d3ShY~SB6;A2_I!Sc_FI_7 z1xS=4i5gZJM*pYydOzz)vgfxKOCGZn@Zw+S{Bmczzpu@1egAO$=jiU=QTJr)>z0n) zbKRahQNPKURRUb)o{XvJrHLyMKLF|0$+}6<4*_T3cwUq_!$FWZ5%Q4}-~@-m-2g^7 iaSE@erB5DpI^FJ%Z$FPezW?;)b+^;Gt`0hlH2wic*)JRb diff --git a/warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro b/warehouse/test_ns.db/target/metadata/snap-3480954675033900833-0-ab92ab29-b58f-4338-812c-096249a28990.avro deleted file mode 100644 index 1195672483e3ce167452ece4e8beb58d491a6bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7F&ui2`6yDZS_Mj)VUPP84o|@gs&&?E%A_#(@2ttuKN#1s&$xND=?Yfku|A3xF z@DES~5z&9ZqX+Tk#hVxP=0T6*WOuWjHf`Eoa+rDF_r3ScdoQ8%0RO!h-lF3yF}@t-H5xw1%D*b5IC71H4SAfsCcD&6*{ZdbsL z0;-H$XW8iyn0^ASTpjtk%6@0}rcpP&fAKR~EP(7$H zM38`xCDak97E}nP4&-cjNCAfW=+!5fS5U)HZ(&(M4T0)mHHCTK^8M|Dl-^s{=padC z#O}b7JSU?9BRx!u-7p(QPaeer(qe*lqwB}J=zbDYF57UTGTi|sBUYLqU@QSbtHU#e z%NrRy*&s8tQRFjQ4)ZFslIFg=jG#vbiIC|Q>U)MdVMECMK(=OOoDF5^D7+&9Tswkw zkY$ImDof@Vtc6gyB6A0M+IW0~_9GbiDF_k~K`K@$MxRi8zMqRp(#Gc|OFm=~gw4X# z#=XDap6`S^AFiJN-u!pw>Di?(r`|6Vv1^@9yEBwOmp&VC=t%d3PkB2EI)daIAUb8T z9TH%Z1SZx4$Lr~~WqG=1n4ylaYucEY9>z#dQM-`-ajns4Hb1_2^6BlLU!NZ=HX2Kf zhWwsX)Aa1XG`p5=yI!E%p^J3lhPIBe;~K>3p{R>h&E@5HFJFKC{qxx?Yp%J!^#4%X BRj~j7 diff --git a/warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro b/warehouse/test_ns.db/target/metadata/snap-3528314312383791020-0-9545d2b8-dc7f-4aea-8b70-4c27277ba9b1.avro deleted file mode 100644 index b5c326f29acb36e5d88ef43a3650df32cc37d309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7FO>fgc5KS!(95|vPA%rXoajN651SdUK2nh)Z3B;*F*4jHsmfE{!cij+G;SW^& z6;5zN`~glJkopsPg$p-eH;L12ox0_^JMX=jw==WP(>GhUwgp9{m@w%Q{4nZ=gDB`l zK^P69co_Jh|DZ%1sC136o3zUF`vTrpKr?V@RiwbJ;NFPw0!jA}xFC#L;Wj$ttShn! z6zJofBS+3kaCU8nL&i9Ec5G)vAjd+T?H@T56^q*fQ8EG{lM>0vI!I-w!ur0iP&JQ` zoY1ij!7S6n&sc_}lD1#Hcxq3HoY+rZ+6#Sf<~#NVjU4EBgGykix(h{|>KUY9XEYGpte15WBD z*i>_L4g84YAd-w#&GP-8fp2&Q?}(7g>?lj1g3}06xMw!F1C+v^xnRs$6H054J_gu%``@NSmxB~pk^EzO^`B{1ES60S;Ezg3SMlG6*|!Qtd_&N3a6%dtu8T) zP?bxSu2w%c)H$01Pg2#Ijd2c)rDO2UBnamU)~YNoWi^(}HCVM!y&`$vA2{>*71{?d zOA3$(BZ(ST8Aku7_;3vU7UIn@i9oRPSzXtdwm?H0~crU$n7CO?jVhQx0i)+7{@6Z irh!}dT`hh3xYMz$lRtk?j=vrMMpmbDLmhM)Y5W7|+%Yr& diff --git a/warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro b/warehouse/test_ns.db/target/metadata/snap-3533502525690906202-0-60238f24-b593-4f0e-8ea8-4ede49211ff9.avro deleted file mode 100644 index ee4b2cd5f27029f1c2631e01f7ba57d839341a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7F&2G~`5KbZv95^9VE(lo`;#9{!i9^zJg@l9z0&%L4wf2sa1$)=*t{b8%Hx3lR z1JD=XfW!gy33w8Yy&yR70PH4lx~)^UTzBXDzL{@lW}n2b+BdcYMTM9!=@5Ls7xsFg z7lc7L7*-)VHUX`DeTM-M& z=A+l2U|m52L$ifd1q}qIhxHWJeJjqlk7xAWo~_4QMVt;S;vCI1MtPX)Ww08?p*kWG zay`MP(aqznyB`rMR2wc-mOG$g92rdzGnN6O_2F5<)r|^XY>*Y&*ZHiL!@3H)qIsz< zF{G%>q)Jz-pBd_mO@T+TYR%d>`^M5ScxMuXeF6c@4@OXdo!TBur)JoJY4e13`c zYnVkjNQ99@HLDDx|5JRupYoZRbb>66`7tJ69D{O;qgzdsJ+POEiI9kgm``~y{{G0Xq} diff --git a/warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro b/warehouse/test_ns.db/target/metadata/snap-3540412790301280861-0-3624e0e2-59a6-472f-93fb-8933a1f200bf.avro deleted file mode 100644 index 82935055d07c42c5255a26c21f6386463c6c6919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmb7F&ui2`6yDZSJb09P5eY#(HJi!LO?ng&1VvE1v`CmFFWqP|v&~GpE@i>1|AA-m zB8n)82ao*|JnP9G#DfRLgEuF;o9(n|(-v}?dEfWF_sx4R_rk{u7giX-1J<;^P}dZ-fQS~cx~iy23R%p=*~X4aa6Y-sF-a3( zJQ!f!p9hI#MVNz-K-D~q7b)4SLSh+HRbV{ls;a2!J%)ID)j&DJUKNtyu*B3d@fN4A7-cm_{X#>Ha?Z49yp4Tcyp z;G%>!0@;EF!PJ3*4v#6okRQGI1oH}77}_nYD`+8*J#3~h?^|}beUQ|98!9QYOhoJt zEG`N>sxZRCyxI-3Vf4gN$|0{Nct5&*ysPfVDPf`wCo0n&P&4{c6NHpzfJt+Brf_j1 zf+rhfhBm5vX3Jq-g<8`*5|=R~xXidnw^Bba)EON@5rm>O8{=$9OGn}zabW5RtmR;E zEUUC+PQh9U)hn`akf)BvCul!`QIG@2G3K~om1Oi8#pnCEnk036akAti8bfrxGPSdQ zZT;`7U+=fycHHR3-res@U(S78sAAW2y{iw!&!taG2D)&M2ZVLwQ0KVV1g_V~>XvKT zfWXuoAG?~}GZW3Xl2G$}%fd!tA`~WCj=GifkDHy&^77}`ySp#mJbxK3b~@AVteS3Y zIi77en(afR*|v){Y`TUPCW#Rt+v}NDSZn?inoCPxpMCnh_wU<>KMQlw!?phh9X?l^ diff --git a/warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro b/warehouse/test_ns.db/target/metadata/snap-3544944504255224038-0-88c66652-5303-4cba-a9d6-8d909f55c160.avro deleted file mode 100644 index a7372ac88cfd5efb03776072dc72edb4b06d31d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7Fzl#$=6i$MLg{7Q@BFiFHx7i=rjmcFOav%tTA_%7}vokNr>h8=sGkY-}`5SD+ z?*0Wq@t+X15evc6<|Ffg+DWjcW3+;2( z6?g(U`f%;Qma_uv9n0o`87KC(Wsg$Gh)`#H2R23d;xf#hTzq_R_Ck>@E? z#Umt7=~#ylhBfg6hLKd#){{r~t!XMJ*6w3#p%3lx>%%60W#XEF2}84w{r z;;IQwtGRap{3y*p#F&-!^1aZ&*F1yQsgUZi<0b~vgBk;Y45TWdiNLg=MzC~%v*{TH z_~xV6pI}`<14FZgRRs+Mrib+u)_p5ZwvT7@-kz<;TSXiXEaDu^G)8%t>t(PS#(_FY zCFFX7kE5H%TX#Q7sZedWP+9JPig9Q(LBd!Dh}MT^30F5Nc(FlNXkX{ES`OY ze{Sp89oOx;Q}vrnSSi3&?#Y;nE=gR8_!y*HCF>3bxZm$bffMz-o)h8(IcP}w&VUTP n;V6o*-}ju{>uTwvd#zTd^Y!=7FF)SC|CDrEtxM{lRZHU^HT5x2 diff --git a/warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro b/warehouse/test_ns.db/target/metadata/snap-3556890778772681136-0-3f50de00-debc-4b44-ac41-3f10af7e59a7.avro deleted file mode 100644 index 49273243cb31d0272024e42d0614382a6e22516e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmcIlF>ljA6i!P92E>HQf{6r@T>NFb&PS!dsKW3cbc-MML0Wo6;F zz{GE0L<~p>Q6x4P_z~PWaeAp!w+u+0?%wx(?|t{)^ONZ1#*HmbP{GGkSSh|g@crRv z#|eT_5cG#5*BuP+6^H>5mLBGgJa6E7LE!Yg{?KuQV0f3q>k>!|7Af-x*k=DuLRpT4 zbp(v3lx+65&=I3O9*-eM?{A-&Vp@Q?YnTjT%CNa@m`Ms5=JM>|#3U%MZgWJ^1h@zb zB*x1inXC-+9Y>;S9xhl)4pj)Iu_As_oMcua|q2A>DHK^v%cJDj`S0Q(xanQ@-V zTo>W|)hf@K9Q4DA-y6|@lO9yU{0_ANi(K91IV2PP@AOh%jyEMg2z z6-IiPtKF~|#*sWq1>|ai&!XGMTXjE5372hHsmymk&A6jAK}2Z=h%|?14wpAFxY{5K zw5#%2EQe(kW=-=#USdd4nF*P$QePSBj81@sk!;PzIJ?@?(Ril=1-qCu`|{~D+U#`Z-~Z8cE6qQvnw4Z% I%APO%FFRydSO5S3 diff --git a/warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro b/warehouse/test_ns.db/target/metadata/snap-3787244053631992891-0-8b72c63d-1f45-42b0-8c22-087b27e345d3.avro deleted file mode 100644 index 61bdfbc0a0148b4663f9cabff325180d83cfe2c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7Fy>8S%5WYK6P*6~y&>&=4h=%z5cbD^p79k;!kU*&dSZnV%w_xu&yX#y|(LDeZ zCRX9 zVYn6g<8cs;{RbuDK&4}Z-K15X-xsi70ZqZ7RgnPi`S&u$3nZNb;DRvP3pUUJXMK@Q zpg`a59@%nMg1v3o98$)yy=mDQfgB5UwtHk#R4i@_L`eoh#wC)Ib&$$Vg$+GVp=ur> zIiY(x1hZ5VzhEhnO4{0a^~{@R+my|85np%`ktyTtvG2pmv zf{SVnuYu1<4kAuj)hyo|82E-~a7ctyj~%x$m>x73FytUr32g+X1r36w1Ds7SDZn=$ zz4-*|3R)Q2EvzeOAuv5`rm*f?alU;#qxW`gJ>DwfbYKzZXr?jB!$L2E)i6fth)5{( z1fNE?kGJlAM5s`0xKLT{fSPe^G(o~x4v02~X9-s~DtNI$R%l=6vsw=8D(sr(t-8dJ zp(>XuU9Em*sB<<29w(|b8{_O7OUK}yNf7oGtW{ZF%4#f`Yp`medPVY~7uoaq71|$Q z78f89MiMowGK~ID@%4VzlVs2DES7xAFr*7-S1r; zyY0GtcdCAq39AIS$~_rV(Z`7^5#Iyp*2%h2G78eI5IcT07&?O>@ti0P0>_I+Nic$N jFvOu#czrE>@}$%0_5K_m|N8m$?`P8MbZ)4FP9u$fMJ_C< diff --git a/warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro b/warehouse/test_ns.db/target/metadata/snap-3799741043573514301-0-5276888c-fd0b-4b5a-83a3-d7b071e0a6e4.avro deleted file mode 100644 index 59d952527fa5021831814df3b45eaa79d92c3fa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmb7F&ui2`6y7dH6g*13h=d>>q}lx5q&?T#ih>&&F_NPF@$4Vq)vG7}06}nOce9-~ZCVe3P3C>y_ue<}y?va&*totWD4K{dlMcam!(?YC ziF_{#<0OpzDD?b06U2c^#|#@r>2MeXvG2!8kg8vie_Oz-8fXCyt*ab(Ke#nwyh74B z1TF}p{a_0nayAgf7%KGX=8-LD6R>wJn?u1kwzn;NM4-e%ecL;-DXJEy6{2JWLS_>r z$Lk=KtO|=gPoWwfAvvK3Is~&q6F*`Fl1kco{`8?WC30*%cxEm1!JcnhXK0i_56)2W z4V989jT2~PkR)0s6B8&hm043tlVxDw36&?|1*1|Kd>Z5@U7*J8Z0U9j92?+v#uZVy zuI}qRhG8cI!WeMY^u$>;hnK*QNC_ek2v;x-D!f=pZmXY^Sj9TXDL5JfrvaY+9G4iZ~uv#5tO2 zjPkJ3yJ0nqsrp1DRC>EqR;GIbj_64lr$zw0I=kp7+U&1V_Kq8DJYFT9%{h#9N{j4X+p5It3`GR36u4+?z*T%m4t-pWe z$=iF|KR$l=+yAxkWkbjAy6(W8sy~-8s|C2qJ(*E4z_}|CKLF`A$+~fn4AV3%oDueN xC(2{wq#+6&oaA2OgNKF?Ih8li(!cNbdYhYn-u(Rj{@v%Vq}S`KclDf3;~)BRE}j4Y diff --git a/warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro b/warehouse/test_ns.db/target/metadata/snap-3829301046240051457-0-14c93e86-c022-49c4-bc6f-35621c840a05.avro deleted file mode 100644 index 7ddfd5a42772cf14fafcf4141469541854cd6bfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmcIlJ#W-N5WR#eQcy;rLCCTYRea~qJ3DoRgoFeFQANnwThHYj>|L|F&T)#aL3I2E zI;2ohCyLxKa_(_>T>`;ikuo0v+jQ@aDa(aT%H}Am;~k3ZH`Df1}@?P ziODKRCM&}N+m@)BhYOaHLlu%xtcV{|jD(anUOanbOj9v29zHiJeK6;{#w8jVki$z< z98D#oQezD*4HBu+iFpAymYLP1)LFV3J|$uujwun+;ENz<*aoWIju&n>z<~yCW}K%o z*X4U%#V}}PKuH2gT=&FfHG4O}kJAizjA_{{-}W_p!!vl3av>i(Ze!3rXfPy@fsiG% z5$F~)2o?@7I=!L*M}PF@6Rav|VQ9CouAqfL_pq75s&Dzl_OZ3zJ1|L^WisM?U=d?z zrZCdOT)rLx!oHDjbT!HCif5NQt20xoZ4aJ4~} zXh-F%1p>~mHOIHXLJfI9?8~hjI*OH9gTM;fScE_mPK(TtF~lr zz^a7m70CiSH0Secv|qt2&Ox9A3DmGkGx{IJSNmB_k~!b5mOQ2j;4Niphn{}=vA4Yq zAGV&Jem!_^b-&#@+fcE4{eG`Ml|PpWEjje1dm<*hmyG%Xu|p93I@!MCU}4*J zEkDA(HNu0jJFs%Qr=)-GcRJnf+jrmp{Q7eC@o2NtS$zLT)2TFnuWMG4 JT`7C9^uNs9Q~m$| diff --git a/warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro b/warehouse/test_ns.db/target/metadata/snap-3889083549440119316-0-c73f3f56-2429-4cd4-90c4-f24e1ce2843f.avro deleted file mode 100644 index 9ead079f0f82a83bb47abe7a47a23733740437b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7FL2DC16i$N&L61@|QkFpkp_|>!ZrY@$9z+xbLGe^%nasRx*6z-%Gqa7MBYN8XOe6>={DPXoq6B)z4y&~Z=Mg|Y~0?I3>R|5m7CHBVZT4{ z`(ZB{M3El^gD}{+Utj@DxmMUsR%Y3jgtsLy0xm1_A&7QxFX1A`$~^`lQ_kAmO?)hP zN0Jfb`19Qpq$UNRJqHOOTu`*_pd^KiN_}>4f*8(cw>f5M0#d~VR-7=yn6A}8K-LGJbvlS^Z`w`ol7(_V278e1eQw1wZ;lsJEBsf z6UzcftTU@hsj}=^_>`$tIN?lbM=yec-6l}wc06~x2JTtldd7LGb6vdGI)#1ak)jAFnAO zuphnt1j`B<7@94tDrg|EJ*=m&>|1%UeSE9;4v-md9dSOeSO`2Z80}$hmce2e`}!zV zkedlUk8U1s)BQMQQn%quWxfL{#(~uYL(Vh6tUf$*xW3WBvkkI92PU7za#&V@Dw@~& zl0t&ZOzCuu`pQsed<-HU>ej4{b6_nUi+7?xqAOU-qFBpnEtzYu8lh@Mik{y`)9Dr3 zM=*(VP?%zcYgSoC|EKtJKbuKH(>t>zPdEiK`xjb&oG%aew{QJKzrH;gemLD~pKW~I zFtK}{*YU>sHyQC#f~Vb6F_RrS^b{6{pu8$skL-p?nDlnsZqyyP5uuSg@JZw*-3S5# l-F_4%Zti!C^x30UtKI(eZwOg$l`k+-y;~$g~E*<~? diff --git a/warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro b/warehouse/test_ns.db/target/metadata/snap-3956409816803284574-0-15411624-4674-4dcf-a2f5-46beb4722430.avro deleted file mode 100644 index 25a697f1a5ce13dadeed676b188f8adb03cdd914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1901 zcmb7F&ui2`6i#cYd+;drQe+9@soDHaHa&O}K`00nPesBcdFe)znV6Y$UCLfX^dFGo zNd#|&f=9uV9z6>F1M0zxh*xp4yV*{gHf=9~WZw6E?|t*$%e~;y!j%<@QBDVhDM@tG z^lZn{yuR-AHPh%@wrkzUQ304KLYQpWj^o;%r8)c?I(dS{T|btSe|C5ItynQsG_qJqQrYVm& z99UEoXjEaihgr25X2aO$pArUHHNl6`?c-f_KT0s=Z8%Yx?tq%n6Ph3(Bn5<|fAVy`%c)FGPk)ck>5DGuwt=Sl7U06B-?}!1F&tNU{ z{8Uz9$()0=5~^2ZVQYPPJU&DFF^v2S7>W=>4XXsBFDO3W&($Q! zEnRmEOR*f6KcX;JkP+MbHGsf!4Z|`uCDVG9^v~Op)aiWq_UrSr-~WDOi;}b?N&II?7=#QnB*&{Dm7NOfc%DKP zJVJ6pM>+(vNE1I`5t2&Udh+PLH6e0r-FR(u=RMWh?9XuoTI76C=XM;43@*#S4Tub zswem)x_Z2I_aj1uYQwq8Vh0qA1EUFsj3t0*d3Y9Zb)$mk8)S+0bw11Gu&Tl?Xr8J| z3^B?RsnXTzYeSu|3Gi^JTC+6HzOi%+-l+s(pTU}E*;ZC#$((~#3l%Gpcf7tmo1LNk z9HwCk5@94!$tuI>{}f;CXFW;w?8)sNZDFasjS#Pli-9@z9lsk3hObvTgvw06GXevDb^70C&MbEx+x=s2%l# mcCR0!o|Ae_Eq%OSt2G*5zJ2=m_w$F>v{9>FPzSYA8vg(%u`jRy diff --git a/warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro b/warehouse/test_ns.db/target/metadata/snap-4070318998856319896-0-a3e0a4be-6f80-4c5a-a750-e51d75296669.avro deleted file mode 100644 index a68736b6469f8c21b7a653bc1f76d0605150d22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7FJ#W-N5WO5HL_rya2BDLMsN(b2`D~{KB&0}4L{t&7*50|C!QM6Ab&gYX4MG$I zAsQuZdloQ){g6MUy{ zdZuIfLE!uDz_9{97~IZL0fg&nnB&^MWAz=&c6`SREYmh`F?e1Ai9si27D3UrZw_gZ zA+GO2!4gW^_8QtPXphAs$k3-7dm5kQplx)u0%BTVZM~}v6G$-=-?sNOg0k6ZhDb65 z#={)((K1LRE5cmU6sU@a@ggBRG6d6D5^vHNaUtD({OCbS*?1o|VjIsE+jA+Tg5bp7iupW*Kj*1=NMwP6A957Ko z0(~&_O}!txNJpM)>fl<~bM0U-7zBD|_N4UByRBBI^ZDJuhqpft{^V`()@q68Wi+E}JOzpeWcWH>K4E+b# z`UkKvF~P>n#K3|O3ll;h*r;ITE{W4?-Ma1K;qHCk_uhB!JwJ$^EnHsZ6!&?L2{R$L zTol;tmTM#5N4|?}$MbLYaSl|NdYFT3_&$rVkka+XkM7lniRjhuuGc5}V2s!5CupQV zH&0NpG?kP|jU#AjkVuqH$omk7GP9zTB1>DtCsZ7T$BYVT@NtmUt^yTqhf}vpU{3>= zGtLs3>+HQwV`x<}U_yX|MNgbmvvUr7H%WnqF&mW2N3Mo1c?QoDF63i}RSdcZB?ba1 z2w6fEfo?&GVCq25hNl!@>5pE1f_ViM4AmAE6;u%D9+p#>_bor(K1l1m4TBESR7M;Q zEY5R0QW)uBrgp<@7=3w^2*}g~A4XS?x9WbJP%hhWqB7k91!JH!LBv=Jn3jiU3YRxB zc(OreXiMcYTMqLojDqH=yd==YgH*_LmHLsPPT3IhFp{lV8fQyeIvVdt05{HH9rXLB zvT94_9IQ&HSdqDhd}BO5LwgHGVFm&dEO5yx&FBk?&-b&MBx8JKvgBh%AYM_X)*kNv zdH3z$)Bc^W->-F^Y;~4CUV5{jVmr-dqdAm6mmV8%XiE1)NO^-qO@Z@G5X~alCTaO7 z@GUT78waM_^@$lpUEg$k*Lt diff --git a/warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro b/warehouse/test_ns.db/target/metadata/snap-4179982296980602400-0-c099ea5b-9db5-401c-b103-eac623af11f6.avro deleted file mode 100644 index eaf34a2d53e3afae903c05799935f3d243f33875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmb7F&ui2`6iyc@3gSuXMI;3A)NCf3?2q&;f*=SLPgTMsdFe)znK(1)b}4(&zrllN zL3+}Q7jNPpA^rnGkM`!#ncdBH+O%oCEy*41y6Fpq`J={Sq@E!q&q)88!4>3#cCDx{Cr5WT2muEW%7Qw~*w!kDyfs3%j zV!R5H$;z-kLK0Q;aKSRNt3nbQE8-_K#zIP)&$l0&lT3`wN6*Z;K3KC&^Bj#F$nH5R zuBMVxsc{M|4HB8s33&-|C^M@|sk7{9_>73t@R$-I4L%EUhi#zR?Qr3C1KiiZ&5Vmo z=DK{Zix>v23^++33G1FXuV(KG_%zFbhcT_1P zjX<}cL9lRu(a8k`xcZ|vpI}u%3q!kwbp!%jK}D!m4Rr%F6^&T;)QhtJF^obxtS1!brAeW1L-W>1e!D0o=NTwJOUCS+yl| z1y&_guSnKMBWpIhMEf;N!vX|Ou)qzgG^77he6^p|Bw4fD^CchC1mf$;RO8q2jZfRh zzuz6+I{fkC=eM+TwDxsP#cnxH*O|zl%a~Ri9O<423GXJ6BQVNKPGGI=@x@^8n%(t<=oE<# zQBY7(@DB(fJ^%`OK7bFPK;jqJb>iISeCLA#$<^+>_h#PCjPHd{H!f{+f(t&O!b;pMe)T;JI#FashiEo^7#AkQEBt~(t2qe0*Cz3UvFmp~%0NSTMgHv88S z%5p5MLts3mWV64G4;k(8XaYI@aP`O(vjWUL!(_osctnYi{+?gJ9tRqti1AK>DLMpI}u%3q!kwbpbC^z|C`5%c3}w zRa-KD!K#Gn70EouH|O(nw4cE&$U)#33*4|uGx{IJSNmB_k~!b1mV88Gh%PEqJKx?P z{=V_!(UUJ^_?B&5x!nDJ;q!)y-LvhUJ(d5K2`xF;(mfFn-it$9V0Hk)u9LM#g9IGU z8(E`%;#;maLY6;7iG^U`$02f(2!~eg^py0^Tb)j~`|;DuukT*Hej_$JoyGTmG*PAb OYhAOF>`K{_rT+n2*;5|? diff --git a/warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro b/warehouse/test_ns.db/target/metadata/snap-4213073582251903126-0-46363a35-c28c-4445-a9f3-27f83f5706a2.avro deleted file mode 100644 index 6ba6caa4ebd6dc0cb043c956fb2a1ec1dbd43bbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmcIlJ&)5s5X~JaC@9e(B!n#MM0Jk8^Kn3jKp-R}&{YvK8+&{)*t=$TeIYufrH7wD zg#@Cymj6J>Pe20E(z5HsxlNq&9R-rB-FffLyqy_88NJ-PvcoXS*_d!6iEeq0?OHw8 z?>mlf4=mSqy1O}|fVrWD`F+bCxVG)so+n~GZ(!YI@VWpTf`N-{1a#ZE5fhprZX5w+ z3BlXW4mzTw!@@CS=*zWZolkSn_cfhDNNA+*X?mPM8ZmJ;Jk~MF%G(U#BnHNV9P#lo zNF*!5e9IE3iidHU;6oV_kx&vpCL!WNT0409P@5!ttlfX6mHMF1_OuNeDd58mDz>7M z5}~nz76$P|>I5u@Fc6tlrBqou3O>Pn6&@1Ig~96}yVnG&+z#e$*TB94u4kMjBG<)x zoyE{?WI#~_QBd{7rkdRg;Nv6(7KEgzmv4CrzUCRcNf;N89W*hh9@H2jNP&wIng~=2 zY6No!D4Cp5fUQ1y{Rx&8G%z$g%)FIohva8f3sxggB~Mr5OE>;>-OkCrO`OEth;qA_y-_Q(Gr@?q0wB(;2=v zc)$DZ!S_e)ZI{nb_ z#6QPCgV;5kUfg$Mzh`xkV`NrGO8>amYPH*+KYaZ3_3f`ee7n_}fB#3*E;WCzYL=31 IA-i7sUwYb7mH+?% diff --git a/warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro b/warehouse/test_ns.db/target/metadata/snap-4225042140904107668-0-8509f507-047c-4d3b-b967-af45b8ced15c.avro deleted file mode 100644 index 86742bcbdbcb13bf3e94c19ea7ca47fd9ac9a553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmb7Fy>8S%5Oxj}QGjSrkPt$ag{b1QedoVRjgXL#kcg-vWUam9oP)h`)5Adf(UV10MKY~sWTjf>s+zHjE+nep@ZVB_W%C#d9OD$EQ&at8y? zb_b4Yk8Ibm1K$rHmWTlnrW)q?1KaaQPT&pwzzstQdcfgL1tbBJR7DJ|H@u%xRv=+c zfbooy-e3z&813_93 zx_YmR82nBKgfZZ#>521d9$o>TW;yUEp;fzl+g0!_&){vwg?#L&i$V3E#eg9PAxr2Y zP%UT?EFEBUdO-n>`snQ^SXa=&&~0H;K?i~AVLOF&-}1BVV=KM4XOJq-WyHzABF50H z#z+r~dN-_wF_cG{fTEt@lj!d8uDc&)gv&Nus4RCt!#Gl!Af_}2MB2l%gv%Qlyx1Ts zv{UD^S`O0<=z>P~-tFpY1Rar7u zV6BCk70En1H0JY5v|qz4DnKBN1Zr8O82z8(>-}6$k}(Qkld(E)xO@k_ip#k zr{6!E$+f>f4{rC4H@ljA6iy=shK{H#2pJ18)v=w#sofbNkdTl-Ochw?^K)}x-@?v9iOHfpbF_R8S?+gcie-!#* z5Jo}Y3!>3Zbh|_xsC105tF+4Vn*v@{KruM9DiYvb|3=1mfuwT)To6XP{VjCBSx?|G z6zJXcLt9Quuy-w+17af#%36{NCLVS(oDu{$(hnvLn}ul(K@jx z0mmw{x|BN0zJVuHuEQ~-QaO4W3OPtsLK}f;L4#o70B4hP3h>QG zZ$81Qf)<8$3+oD62uu%~DXjWdoNgb_=)FB#kGG0A8Cb+Qnre*lu+Yn3IgFt?A`%Kc z!6(t}jp#2i2 zaRCygNTP;ShSC2izS_@vlI+>F`I5&h1w8*3Iv>Ao-oJJ9<@_lNHB#`_H& zyX(3=ccOliF{=c)$~_rV(MuCoBEApOt&?>ji3Wox3Y|fiCC<QPUhM4V_a;57U=anyQ;{&4ymV8O%$k{WUF!Y?-aL8n z>`6iBp?`t5icm#_DxO6A4?O8)x7kjcHmyPqA@jcPd+(d~UheuEQx_LlihHa}If{a- zrs=q*W@?t{TDommmTO$;;S5ra%jMT`xicN($oJlwdBTn-A{YYW5@EZQi`!9O;8HTyCDA z5ktCuf{G@o#8hY;K?{R;ROooD2gDPZm8Fzf>JmOm`B6BbDHjGG2Wg!;Q0cZecDn+$ zByct3BoetE+}CLgb}a)A0tmdaCr+x_I0rtAVqhMjd9{4il<*bL;7P=|xNNVELH3}+ z5I_uElu$3($>>T=;8Pj{POHN+ zhKmysJlY@!XsyWSU^z^xP)eGI;xK>^=P?)Q7V1ZaI;MTdJYTeCWt=r>=}5c-4oo?N zHShIKWtEo9Iamv!az$pA>L|nE8QPCv;3dFufH|&MB^mvX;*$H#^H;0a=HGrMOG~pm7q+L0*p+s>)$WU*OPA&h+QL2VrK}bBZH}{b;O#Qm zwk`fIcE`cU4nr52u5KdNatP9O-_>o+GZH#Y(lt^L^t~V zq3=4bV>><1wq0-FdDnA90dr$5tYp%n+H!qw;9q0#tNfs1SewC!At3C$2U z_JOj5;I^}k_9^MIZ~__nbmc(jvmEqYO{WkN8tFTl9w(4SOq}f<=on??ZH90X1LHxC z_+%9%k`-aDWeHTp!#GXwScXI-l*D&Qh`5l}9^SvBO%p!RZa>gUebDDS+9?_-;PELc zwxW^}p|OS*2JuAd1T2Rz5Sdk_R9QL-KEZq)9umxj!6!lXpb1pD9W30gfn5b$&p1m& zuFLn@#NahDpeTYUsCweGntSKK$4Lq-2uV>d-|8#)nrHAlVO%_R(8Qp6P-BQ71ujZx zB2X=;5iA^_WV)dMTYdEU6Rav|U}(0ms-S^D^{}48s&CoJ_OX=S+tYE8rXu2aU=gKg zCNaXpOzwu|Fb>60!Xc9rd>q|8-m?2qf|+Q;Qf09NDn?&vf)ODpAY31w1zg;S;Btd3 z(YDNIxg1ti=oQUlaT!63ij<3VrTW@Xr(_B=7>U-bjkB#R9ffzsf$3+k7J0srRar9U zV3k7EilnYJ)aUavw4cH($bh2=aa6NPG5R0HSNmB`l0Ls&F8Po|5MGp~who<-k8XbH zy*zT?zJB%Y{qN5A3!k@S?5=5c&8hggOi01N6z=f=vu-ppIih3WW|gc7;9AbWatt>D z-{{-@f#JuNZ8*s5#h!1)y?AJ3R#!^@ywz%TI!7Pgd^`N{=j)4htF`$4kEUH}{#w^8 LB|Ad)Wa)na1<6-R diff --git a/warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro b/warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro similarity index 86% rename from warehouse/test_ns.db/target/metadata/snap-1535538213156523650-0-672d0e3d-5c91-43a8-ac17-9e5ddcd2b938.avro rename to warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro index e4308d429182fdbd41c0654216dd92c66476b9e2..41d1e2e8878b76fbf25e3664b7fd338823863989 100644 GIT binary patch delta 152 zcmaFM`<7SLKPiimN31w6v7k63zeG1PMa{(2(A>zv(!kWv*x1a%(9+1#Xrrnjn}Div zqg3>xuKiW-VlvgZkLgZMV>1phG`37lHa0NRH8)5y)-_2nFwspkNix&5Fi%M}Ff_C< qH?uU>%{9-3tr7dO;0F)*+I1sE964F&*_9xht| delta 152 zcmaFM`<7SLKPiimN31w6v7k63zeG1PMa|IE*wob6!pP9r(A3P-$k@!(V56!bo525L zR>nLUT#VTV`Ofjaeh@S{jm*jBG62C2@MG6Su5)@B6;@zI*T8CI2{4W+X?bmQ!f1y_ zW603gJEx|Y=3wp{CWDBw*xWVD1Vb8gd3Jni5|qtvGemF#Tm(51<5iH%PKNo8BT*#} z7Yvh;3W;f?h!1Imgp@X(J$YzMuoxQ$PmQ@gn6q7DgGLHuv_ZwyR8lH6*3i-sft60c zbBF?&Sy@V%rKjOB5$o`X5+NPE408K*pwjJN;dTY=Yv5|e8J4*&-)kGgUM&NPV~B&Y z2{zT-y#_wPDexeoMYVjVr{OD}!E4NgeC(i(LHD4-5JL(=mQY8aTTmfbIKb#+O98I_ z=+!4!RZzoFZ(&(M4T0`qHHB5*^2_bxXuWrAs_~W)7XynJLsNy39%gD8EQfI*kFbDD zP4Go@{dlYHN0@NghI5t04k#IiS`&nnrhrIwcouMZBZKD~WQlfFKFj5>s=_R3p3BP^ z5>%u@rmNJ~hB~DaU_mHbvog-EwsbV!sQ_+X!CK_`R#t7vT!U2!l`E3@&cK|_uF!r7 z(;x$ZVkA(-D$VHs6kqLUHA&{|_I$}lG=^yYFErZkc8-3%`TptX@aLl+;pgA2^X6Go z#qQg7$DYXFWK0VVwscPfgm>c57Kn{N*k!VI*GXJI>3bG9!^rBPVc!}KT+ealjA6i%WJ42-BO2w4_ls$=^S$95&Q3JD1b1Y)X?b+(@ygMAn7&J9r&W(Eet zuV7+AD*O#*RI$Rq1cH&fBu=k&>z2XG-TS`pz3<+8eh@$FUftvbPxzP$D^G6^L)RNQ zUVsK@5V~%F9CT}f84zLVVICR`QHcD&N4`4>f}tPWbl7L03G6vQ|H!{jfEUbNC zJg20GHt{~AeV&Y=#2>C7m|`{obK5W(B$TD*mSJW&6e*Wyy9Xx0<>I!)B+r10XoAIf z9VC;LVV>hiRL#Q$%gLS!Nok^p@6!YeDQ!G?bkCUPVr<-fY%KJ_oNpOtXcR#9&QNhR zm4Zr*6KH9W$dyjSCy+!kv$~WzOQhj*B2K~+N`y4{G|2VaK(*V^((MM=)4PFUKYH^C))llcv|CtL&_bYl*i2#FxBPVbI9l)RnxrZU8F4(Ym@zz4 z80lfDcEf5I19_ASDAfcXN4Jl+>VBLPF57USvfKeRW2iMjOlbj_G>2yimp3wau|Za7 zSLL%>4(lq+n&zpzOd-QnA!NEr{lrigbP6nrWotIZ+0~Yg#ybdyCZOL4M zRSDHAl6g*G&gU0sKZjXVg1{*jxM7uM^nZ%4_p_QLbAD~HB$56ozCMQ!i+XV diff --git a/warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro b/warehouse/test_ns.db/target/metadata/snap-4948184997192531561-0-860b9af2-7966-497a-b16f-9cfbddd7f0ca.avro deleted file mode 100644 index 7fff3fc509262aa85454970a93745199d20175a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7F&5G1O5S|%4D0r0hA`*gl+Dww!`ODq}5d=X{#KR(?ldjCPCf%{Sv*WOg2M@wt zd<7ps^yJBd;4An9i^qKfZ+2%Uvpt*H?0W64@B6C0uBv_-y>8#!5ftTO%A`Z^{eI9N z`{RBPjQpTC*z*TN|6YzbQ0W+9*J+WacLlsHfX3j^B8z}`{5uKb8IsN+a6uUD^mfo8 zXI&9bAw%D8AK7xAgS~Ir9Ad_?y=&PCffNgMc5q}OE(8>`> zv`#2;h(ncGRZ5j*&%hHZH{mg(QaO4a~PG^X=mqy?0>i@m3LM1B*CEbB$3RW_lT{hH8cCYAl&6uxg=dMe>0+wik;_ zwBNuy%s?WHB&u0u82z8(>;0@J$zI$lmwe1H#O1%x`Z{>vTchmL$*&vl|D1e$**R^0 zZ|m57*X_D9^_xstA;4Ac$&iXJj$DcO1f*Lf>yC$B6riN%jDq3N=?5d^ME)>wf;fpV n#-qfGk&}5{Eq(g1)#`M9|NVUY(aa## pFxgBu*FZ0^tSJA53j+fa)0`CtSDoqqxs{KJfq?}mz`%fRFaTepGE4vf delta 151 zcmaFE`-WG=KPiimN31w6v7k63zeG1PMa9U-#Mr{j#Kh3V*wWI_$i&=uqlzJ$K<=dV zk0yQnK1olsf-N%ZNcZGaHsg>)Lt_KW6k`Kj6C;ykU6W)(1Kp$~vlLx(OLIfRL^D%! pvqTHsTm!wtvZDMKE({DzOq)7dpMRP-eJ&dl0|N_CfPn$sU;rv!F*pDK diff --git a/warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro b/warehouse/test_ns.db/target/metadata/snap-5234292787271688478-0-cd1b7da7-41ac-4224-b399-e95130d3bc1a.avro deleted file mode 100644 index 38c54bcec078797054e679dad83e7cc639bd7cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7Fzi$&U6iy-r21Y0gLZ=gA>g9eU=_Q>J2nh)RVye)|XTLNqclKfX8loy2{{UiR zLSkoP1BrhDCdLkI9bsX_PI9T+Yp-Rs-}im*eSYuxak|&OwjmiRqHx9U+}KP z6Ufo0n+L9%72s|=t^mvhaW@@zOd%supY0sD4CRa495FfusgeSz$vQ}9r^5z8pivc% zRD!Zy6GAvP#E&>eN=rM>pFVV^R85@w&zyxmxbsct42=xf?inhfrIK;2aRRL!QPk)p zvH+au%&JnVEF%j~nK}u_oGI<-X;2t9fhxC?rQ0>|zyjAZ&Z*9I^bE}@CQwxC9^bU^UwIR%9F zqt~BcT|omwvxQX!4FtA_^%T~9D^IsiVD;XPYsOng91koK0?iCYdzhPLuo}jpKB5Y8 zGr`Bv&EsvlA5kWC8!l9qJD_45Sxt~~o&jR@;aS4ovu+oG1M8Kf=E)`nzeBbt)*k}&J;-Z0@ku9&SkZh%q3WjP_-h(AQ-yy`32f9 zVV2~e5J3vntg?*$Px1ABHk0JeuP>H7<^=HKUuZo^et+K^{CV)<-HjiIhwoYEsQtNZ zVz+(2>reG>GU25JU%RIgCc7l{6%xCk{3=-=lQ4}5ioJe_u-A{GzL)k!BM(M{uosYC libLe(LDxth-D|Zvov&}cefjz8@5i_8POEiApR{Uu`~!G2GU@;T diff --git a/warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro b/warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro similarity index 86% rename from warehouse/test_ns.db/target/metadata/snap-1544115459057157291-0-1d1fbc5e-5056-49f0-b44b-3c695b3b6812.avro rename to warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro index 315d92551a38c9420128f58ab6419446698659d9..73888aef165b7b9167f0493d961d4fc3045efd0c 100644 GIT binary patch delta 155 zcmaFM`;J%DKPiimN31w6v7k63zeG1PMa|UM)Xc!r!q~{r)WqDt%+%P@WTUDfn-GgJ zi-^N~*PWU28RAJY5sun(3NYrWxoanV2N$8Yi1snkE@1 rnOPVb>E;^fC6*QCzi?q-U}Cy9>B^P1tUK;npsL=mzq#Ho(gPU6@-B7}s5gaqPLA!}`q8-u-TcGpRxlF#74 z0S-MQPJ9C205?7Waje9Z-6T%8b?cUcFT3;Jn|V7kejdH)-rD8_mwZBnl_d{HgR$rP z9&(XC2;9JReD^_#84zLVVFTX}WW;C~42Q^Zf`Q}R=kTrq5`#smA_CTP@1>L#SXfhF zJfo!NZsRGVeI8Gsz+dkinPOgoxo4ORV#*S8*D%uz@`TH?{Uej$VtHF&lBK{!SYk2R z1j%G&*a#tss(H9z897iP35^x;Ga6$drHxlFo*J`EOpGTljio-Ai(TUajU33q1uBlF zl2fU11}zN|nbHY)32`Vht4pb~bTxcN#94SuiI4`L2RY+5Q0;cOa=QT@Y2aqYMJ97y zzt?39UMmAm5=g?jCoZaaa1DH#<-o(3R?YI!P{TJogTssq`Pg9_gYH3tA%Pr(ETN4+ zx1d3=a)8mQGG_U1l0x7O?A=6drXNEebGhksPTeC6Fj<$3(-njs7Ucp+G<)y6JlDP(} z5~^1u8zJ9ZEUwUg3-ho5ffFon!z#__{}kWsXEjOY;`VaM$25WXhBCDi?cMyj^WOWr zb9Z{YIQjUf_q+S8t77+TyKm3r&t*a@4z_epgoO8#$QGC#fUxUi?KDVH5~0XKK6b6) x7>_ONqS#8o^X0zWyxc~UnRRAz>vC=*qFk?y z%~e){m4zr+SzCzzfMBCsX=CSPce6Klxy#)(fn?tIeeZqq-pifn;nIZ_PSB7KsL)e< z&9wv9w_L||J<~RQ$F_s3L&SgxT@7;rr*HP1An?t=a&1#aU*Yh$01|^viaY|=wk{`> zNQw5^Hp5VW<9#vrB)YpWeCNg=~re%sjA2+F6YIU;ES zT!cd;28$q>tPFDvL!v4kE?7!7%MeWClK3`_k&x1z`*&}3MyVKd*6($u`k+l#J4a|_ zKsJw1F%^}JN{s_(X^==uosbV94rOLlDOHx1f=`J!2#+Zd(%{1&({BP*Zih3sYhYIa z*E7yjnd|(%j$`l|84$*R!>T8as@XmTK1nm+VN8p9`G%w5Yo5WAlnZ&;VH1PuL5%@J z211t5M4(zwBbYhB=;)XNO!d<1SFos{fuY&Ls)7ar)x&xUi@xQD+s9CPZ$l$RmdS|y zfklj=afy*0=H+gf4`W|`N(JQQ1n);Tk9XPqC?#CB;Z$X|11iQqX@ZE-3=pXg&kQb4 zWbkx@%+Y3<&wM#7s?aK$2l5a@f{IMYbW8OEL!HqPurQLXSsQ0lSvm^uSOC{fU@eBj zV_B6Ya|+f{s9KTCHTv3Qa)S0F7>79sgpoiss}!TpD8AUw($v=a z$5%IAUJv$mpLgH>`u3D9|2X$ysf=Cg^}4;0{J9Kh!J#MJ6CvSU9Q6cZn;?2svOPQY z`~WA34gt1wNB)-dejFsaW15DMcz~_GqvuAql>T$G)mmPD@%zo+uX~?=zFum}*H%kD z&nnvYj3_{frTc;B=}zDyJuWxRf@pJ`~KNJvOXJgNv;WBYE_V9%JDah6rI5_FVE z`~nRKQSkxL@B#1%G-)ZJVrF-}nZ$_$jfmZrwj^dxf)i(7>c8uLn$ZtB)WUNW%r{TGtq_%mE{g-7$c<#5<&_tZ7hI$()lUs|L8d_CM6_mWoNZ<4D7-TcOuvM+uBr=Jl_m2J ztWv01k<_z7eLlZL`x(sQ5;)2bM=h%qqyJNUy`SYI>GKBlMigeq2wV&KFiOEr6Qi_-Qu=te*W1{5_woCm-|t_2=?{9nE4`lho=xK~`U*1V literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-5620569175367488250-0-01e6f094-0145-4d30-be1e-b291d4941071.avro b/warehouse/test_ns.db/target/metadata/snap-5620569175367488250-0-01e6f094-0145-4d30-be1e-b291d4941071.avro deleted file mode 100644 index a661113b3475a77ebdd82f0b49a4599760eca3fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7Fzl+pB6y9A9w6K)35ee}}b=k~hlkDa?K?Fe*6stqRBzb!qO=e_S2j5%1)nfsrO6%7 zcaY}?c<2rMp*tEm9=cVK5~#5BumJn+(D6|a1U`2BAs#t5IJ~NW#$eGZkD%;1*T<~P ziLmydjDl6-NS6Pk{J zi?ASKvJR5T$}kThiK=!@KGpkFfvvf3kO2u(_%&3qCp9JAy8>n_WT)N!=dm6Zz zah}RtSMPNegWt+Pk_3{l?upZC9$WxFPBY+P%&KPj$kp%-&){{+g?#L=jY0RI!H_@( zLYB}*pj*%&SUOO$=@|uJ{n49Gu&$tmq20o|f))bZ!)6NWzU3#|2Wh>xW6~?H zlCmT-g^?cSYB#KgaU_pY0lAvsqv-bWR^3lh%4HiaRF*rSW(>3@h#1R&(B|+g;qpcX zFE+>uja5FY<*=^8tZAOh%LK-x%7jc;sUI8aj7^~oBiWjbamL!x(RgP9xOon1RTO8k zYD?w zxE8{$XSvA$SrK5cA}7F!8@Lz^v6Z8~lKye8)7jYg_2ui~x8LvHyzO>6J$WF%lX?6D Do6R(f diff --git a/warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro b/warehouse/test_ns.db/target/metadata/snap-5644840696415505864-0-6e467c7d-af98-4d40-b5c3-78a4507807d2.avro deleted file mode 100644 index 06248d3a6d19436792c0c0e3ee1938737fd2f4a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2022 zcmbVNJ!lj`6uyKQQdmlCM2|(RGIz7PvwyKP2!bFeRza58owvEw{W*8$avtHp*3L$- z5DPmIg@8m63khOxW25OTM6l7y&e^-{Ws^-diLlko`@ZkJZ{B-*&AUBya-Ju&%R8w+ zA-iChgxCa|j!9I*z=my-^Ie)jB2YO@HwY%GW;s~Ls%B%`RL^p_+k?ahl=NZ`vT1TA zNVAvj}o;(iBW`s(zWA_iSh7Mn^2ews05p{WERM2yR`%>@L?i$!~HZ7(%`)y)v5y(Zo6Z* zD`2Apu4WvEGS}_*I*7rnWuS}!bBmtXuV(!S_#ljcyMEfMmXApZU-1m?gc>bof7Xr z09OuS?RC2cvX++25mKww2-V5bZlKaAOdZQ9&zKm5e^7_+&rllcWq!jh4Kh zGVteeQyaf71sk7NKV3XGw6{KfU0<4gf8zC29=q6Xx7vOAbLpf#4sGe4a1-8QUR%&? z1w^|@wrv72E#G2@29AvgBN%yxuOrK*#K4w~EvBIuw{q#9OO3|d+`~6d-#&Wz;meb$ z=|*Gx9amI0H3AqkWH{7B#L@!f=z)i9N7tzuXc&7zA^Jm#&d$DjzPb7M#e-+we`}gd wH*ERmMZ^Ig5n@tAHB&`i5U4&Twx#J_p_vytGxP2K#_#Wcx7Ppc6uQ^&e~L1Fp8x;= diff --git a/warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro b/warehouse/test_ns.db/target/metadata/snap-5697805165312478410-0-4ea6a9a0-4adc-4d8c-b987-fa9a0ef7d7cf.avro deleted file mode 100644 index 7764e2e3cec2ee1348e681273907bde4e830548d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7F-D(p-6i$K{f?i5{BeE>wRX4kv=C{{H6a-Q6s>m{#Ih#z~omppQ8$$`=D~Q*E zFCc=xfzMD7#0wD-`V`J2*>uuPxAk`BeBXD@H|LyrJUp!5+>#7sa?F)S$-Pc@(CY`C zu-n-UTkT%I9R_zZB!DT;3cJqoB)KEuRSpb;$MSRtq7mMXxk!=njzCDtS);Xujs$N? zJcbl~+CFyGGy`|faRp#5h`ZysF@=OkeRgo{GL+75Q^aTtQbie3<5iH(PKR}ZK%)vC zsRU&s6GAvP#E&>eN=rM>pFVUZRE?ec&z!kFxU(H+gGK^uv_U1bR1&T=*3jA!MU74* zGr*C~tSF_(vSr~ZQ|oZdnbMA)2Zg;VP~mp8aJvNVSm1KTDb=|y-|HfVZY2XE1V~gg z!KRvbuYiwf0y4rpFP9&*Equu{cul3!j~!Jp*dCM^2qd6%2~`BP1to%o1AS zz5E2L3Mv??Ei5XiAh10wr?Bc2_RM;o&{Xr=-~MVS)xOe&vH4es&EUM7y6Pw zjPgY3bdCDjP$zr>A{y$}ERAz$Egg$@szADzu;y8IA*;1yuE1)9iWMn3LEoLtF42Ao z(xR=ft$(eX z*gfBG`V;+|jCn4>*Y2r^$tD^43W*UYzev_^1L~py3cNNV*lUwM_J)Ig&x_3=#68l( jv6lu-BYnDGt2G+$zkL4r_V3BN5A{Z^c1@quN_qSP2Szfm diff --git a/warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro b/warehouse/test_ns.db/target/metadata/snap-5799605361944678510-0-5dd4367c-28d5-4ce2-ae9a-bca3aed92718.avro deleted file mode 100644 index ca184a1694e514e8ee895a013c39ed255dfb705e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FJ&zMH5KRI|6qIl@2(4C#>NdNZWb<(~LPA190$p`NE61KBhFyEHy_btl`33aU zwCE%n_ybT-@(XBauce_t0z1j(oZH;q(c1Ign|YoYKO4TP-`bH3WpcumN6EveHyCt- zsND?*oldvckHX+Vh6FI>Sz$L>o+S4ryvc!K@K~M>K{Ud9BQ8>;yh9L@a@J_=phLl% z5>FsSAMYN!YL@t)tZd1hQ2&9TLq$cYiot+Mgf^Q>rG;;}_0CAKdw_vqd8THr}EVS}Fwm1bro(w^HN_D z7@<5-I$fi_G1Lj4f{2H@HA~|hT1&^`ohgv+C9HXtUC3%JnJcgwp<+dfDCoQM`6b$~ zVHT&L5J3u+tg?*$Px1ABHk0JeZ!eZS<^=HKU#RVW`g^DS>!%~HMQ=ac`2DSMTK`-( zv3tJX^r!kanebeKuiaBIlT9-86%u1mevzyn5z=XQd)RCBN#u1fv^)d@-6lOFBqSvM#Hm!)+B;4b>|L|FZiuSf`T)EE z;>e{Z&O8AZ5E8rrQeS{0>?U!#sS~$ccjx=QnQv!ipTw`*H?{;tg%~mE5PU!Ed;Va@ z_j`U2g#BI+47_^<;y|Tigk7g)mfaEXwgj4hL(4n{-tljzjOR!?N5BPPwA0%{N1Sy< zGJ+hP-a5ABqyT&0vNg?dyrYN7?=7^FMgp3L#N6R3UoeB#*PoXLv zAvvK#9fDb+i665BNhNK)eE!H96FIUTzOZKcU{ANLH5wVv;Tjd+P|29mSV1dCB+)vN zC?JVcW>qOwmOTScs9c37j7sI`MUcPO1ghMQ=5E)(p#iREoD-Gn;=ML8>^3qWi~&bg z6RfLw=L-0gWFVr1mG$zyz`)l$gLgzo_1IApgXuwy0Ye5-mC!_BT2LdHJHXj^Ljk_| z==CR9R?xuEY++SF1A*ybJ%wf8ii_>z8NGL4>+x0*=L3s4M-z=v9_D%(EQYbKj);U@ zPw;tk^LXp-M}!L1hBKA<4yYIhMia!0Wq@dXc;;|*qk?A}WP$c|K8xkBtirBn4%H=w z6qT7&>1y?rq0ZPCcoeJFtc|m8EFFV)B0<=fu$D!!k=0l-S76mb)r#by*SDwBOSIp> zB+5Y|j3laAWf=XR;>-Q4C&`}PoGtl;VMu2GLhIzy&%1o|l{aPKY)LL zX!sB{6$SqRC{a2pDhhr91-p0W%O*~oP`KHh_ukCgnel`4X?Jsr6ExvtDy$se3L?)B z-7s{WLFf)+&v(6>6U2ZBOAi}5o)<-N6c5~J5V^h^1~)i7uYhD=k*Z9A^}OpN%1R`x z17JL-q~~p+14jEi8$*dcT{|?zYy#$O!(@kjw4Yu4;L&a`zi#}OcC$U3<)W1Jbrl3nC4<^+?gJ9_ZqtkN=aP>!TKEb+z7KU~U>k3*3bPt;;toxRqZXZYMy*-muMIj@O2Np4g zW(p%cEY)sU4Pzvaasj29;N$4_@mAfBa>8XBE>xB~pk|DVi&zC8=!9#yGp$($RQl0=RhrYc-ji%c?Dz zORy@TdPTCpiOl)@0_|roOG*$3BY_%LX-5C2_%iVXq-`&q$6?@yZ`}S1+T*kEGU`zKzLUljA6i!12hK{H#2w4_ls+05Cj$>woR0#S8b3;@`EQk># zHdcnhfauZ%G4cagfE9_6g@p+g&PkkJ>(*_TNV$98_r3Ssd(U@*M@uWKoRT3QFkvLo zb*Jx|*g=+wEektd&+NI^h9n0n3^mN|+t{%j%Xaz*BM)QTyUO8l0W<`I7Fhs!8()c8 zo)KYeL(UUM+jy01=d8oS0c7OEltT>%ys@=Co%LI8AudCz*HZ-{sfB(8W@@_tSV?AP(7@tu;^QUw0)4$dmB0}(o{wq z3@piWGA=RF!>rs5^I`1EqeMVfPVhl=^LUrtPZG*y8%|YbJD_6plqLumOM%e(@XX-y zMg~te$Q*5!`OKHYq6)pDc_=ReYu3iuRF;myI~Kt8Q&@}P z@I+Q+$((_;6slHa?x4OtnVh1%1!F%0K_VhZ%__y{bBZtab2&-+hb)5dVrgn? z_vzlp_1D?%cYW)@rDD>4Q2>XNGAi7;34pcfu*kxK~*)0JtN}wq?w9FIW9slN#@f=C#5V#*N<#DEx_KhYz`^o*xt76A%P4Fb#`!MQiFbGAfm$r$PR16R2`KUbtNYhX%NwaZXgO%lF#E&~Icw z7z2*0COE6+oeSWHBm)trtgM&s1qQz68N4Jys>hC-7)%dp3>Y$ys)Qy2(}Eho!U4`E z8w&8vN3TD@s)7cFW(%td8VF1e>nW`IR-A4h&*;4aTaUMjI2l;PIhtyW@-WxSU^$GD zIwBHsJ;5i@&Eu`R9}y~48_rc0JD_457)_8cmI0#m;aR}djS8M`kR{sJ`7D>istUWJ zd8#fk3{ja$m9AD_8|sWrfX9hy&DuEo#?mo(rxJvH4r^Hy8(EDda{*Q@RINxJdXYVw zoumC6rg07uVI)z_D#Pgi6kqLUJxTWL+I-2U3`08qFSP!af8M?M#=fUNub}-KuYY%r z+n?JycF%RY?nM1f#;g?JD)(eeMHeToM0^C&t&(*IXb=WFIB-H7L{1PTJtv7Ub};Ir oet>Z@Oj0NJx?1}9ZmZSle0=-$!>b=(e!XvZTCGd!q*cq~9~n9_$p8QV diff --git a/warehouse/test_ns.db/target/metadata/snap-6234413701284196546-0-66fa771f-7647-43e2-8f86-fe095e1dc073.avro b/warehouse/test_ns.db/target/metadata/snap-6234413701284196546-0-66fa771f-7647-43e2-8f86-fe095e1dc073.avro deleted file mode 100644 index abf2b70963ed0ce69f81f67272154a69023ef5db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7F!EVz)5KSTu9N>n^1tH5qy->$?;@D}=2&obh5~y4XvNqmvvtaL<-E~7$?$Op=CY--tq6GjOR!?hrk74wA0%_hn#gq zGKL&|xqW2IX#w_*WphXv$M%+Grvx%A)Y<-#O;J9-%@HLj2pJbhj#oh{I~6wYJcX)w zgye)C=n%{jP5g)@NGfS-@5!z;A#!Xzd}_`0!JchdYcw*T2WwP(LnUKM;|y9kB8k?C zMFB~yGOJ3dvg{dnLgiU_!l+b^o(K6+6R2`KUbtNY4-9ZUQZfq}1i25*Rv>apV{2GfHY1BMKwDxrzMw4g??aDcPP1qJx# zqt~BcRY3zovxQX!4Fsl#^%PcpE6%r%XY}5_t;btMoDMAF98EPwd6?^EupGvrIwBHs zJ;A5Z&Eu`R9}y~48_rc0JD_6RHkx3>SO$pJhi3s-H!66(L6&G==d)Z6t19e@=7qY% zkfJh^DqXF9W~ehZ0UnQ3Yu3iuHLLe+}o18->0W|wHc zf@z$CL>Ng_v&t~~KgC!3Sx=HZyER|(3B!=g|Akh$yZ7z!YHFeUecXqRzT@Sg;yzl$o`{uouN6Cxs)$L910pOvEQm&<&pVD1_wgOoCC?il7IgB){tHa;*3DwekeBH0AEh)X1< zn;@C23=14bqG}#4SVs0#2&Snben?X!q_pw$@dIO)iK%h_iLulNbFpKbppgUFJ3+`(oD33A$g__{Q==Ske-H$TDWg9M4Ry&|(9BECEP?`fG&EZ+W<&6wpZjd$F zRr#!!!=?(ergO!K#o`R@moSeD5C|iI8dhmW|EKt7KdVVH7gv@`KBXAai^|l_mv^_nU-kD+yg} z`SO=zp<&`#UJ^yA10x&_6RU9gO8WP`PG@WD$Iri?KL2_1_IB$569na$*{9ua%cClpN`@ZkJ@7{ZU*n75gX@ygq^8ph^LT-4D z-$k|)*dcO)!1cP8eLcqoP+_QHwug`(+JWa=f#bU<=z7;UychzF!Jxye2SwYy+Gj0+FNzNYB~#H=9ts;2i7NC}tU*0*$uv*~GuY0?KS zq8y9CB1k4H!(4Dk+m1htSd>k(4?S&moRvW>qOwmbQXVs5lId85Pptqae#~0#$BDGq-DCR{_^E z&JvmH{Ju_N@ERE~AwZ(4CyuMRdj@ByYEkD{mNa?+GoetAfMjQ+* zE($y@G19}V+zs<#4CJRoKvquhL3HzYm)(yO%4Hi)Rc1S&Vhoig=rNW8ruE^O!R3hz zo^Fsi+A8yzFNZ}HdPVb89unx|VJc+0rTU?vPT2^Gs3%*qHqMr^bQIpP0Ir|HI?VGE zS(PPo2G&xjT9Jj^!1`oziuQ9DM;QoAu)sB|6r;~6zSz&@B0`bMt)Yi@L z&Ffd6?CsrKU&f#BvYqAK3m=!t*frDam?Qaf8L%M-Q@ST2$~&ZI3S4Y}Fso!uhmzf#HRog&^>-XD>werD(gozq9vid++z#dkf8@wf_g&U0Blq diff --git a/warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro b/warehouse/test_ns.db/target/metadata/snap-6486622511572862241-0-f9743534-d4bf-44dd-84e9-8bde8ee730c0.avro deleted file mode 100644 index 127d49ec61e990ab4755ba88ab30edd5234c3176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FF>ljA6iy-rhHjv+AY@sHsgCW$N!-o|2?+@SVycjJ_B}V(+IQye+z?e6S&@+V z3#UTGAz{D-my(lzPQa1B`F9Q6-Z9jK`J{HHuOA&s(6It zgzoDQ%o0ufj3r1aY3udNr`D9niS^`_wa^E9zHMEikpbPmM8!8$GNv>((8>`>v`!=n zNFtS4RZ5j*-@p?pH{l7RQaO4Nfkm97nZ_s&bG-~!!x*X~A|clk zd>-9A-n#n{p+dFcLS?xFD#jh731Y@FK(szQOSrmG!HW&DLi;+O)pA%@VOKP7)Fp-# zm6=rOYW0nw&e#-q6sy*(jk9ko9fNl!LD<)@mPK(TtFdHmz^a9+70HKQXwT=@Xdl8X z%0VKGB&u0u82z8(>;0@J$)4X`Ect|CNEZKv*1^xOTX(w2ukRlZ|GfCyJMEmcPue^D+CF`a;<6tlx1P%`3)CmHNoiKnMCyX(K0ONs| jcuwy1wDj5IR;$zb@#**H({CT%pR_xz)-83?s^#$yFM}{x diff --git a/warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro b/warehouse/test_ns.db/target/metadata/snap-6555608599426066461-0-c08a6dd8-36ff-4258-9e0e-62ecb0e96dc1.avro deleted file mode 100644 index 54b69ce7ebc592ba5a641575f4d5555ae350ffa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7Fzi-n(6i%WH42-BO2w4_ls^cGtUAr@?gg`=~VycjJ@jW*N`_9~*n?_Y8{tB27 ze*hB*iGhEBjS0lYg2ceYfS9;T;`Ca#ZW*FTcklbY_r81Y`N8-}_v!{GsN@qWtPI}{ zeBTe8(2t^#7dSyM3fx;IVnBqYhi&O1Vcyu4?RD+$>CWABms+5#TZ!6yOB~> zAYmN<;~6DAZv!1LI^f9!3iRgsktt>+nA?WQAfXJKn}(TYkYg^-_Kr+~ip6b#NR|Q@ zaf!ra9VC;LVZP%?RL#Q$%gDY8!8B3C_i2KJlr|ncylYG|F)?;_jfFm#^G)LnjU34S z87i)(l2fU10xb;^nbL`Q2}vw7t4pb~^fY`%#7THUiI4`L2Dw{ppxW(t>2?F`Yv5+a zMJ97yz1MjRK`R5o7;s$o#91{DFM&_99C)12s#(4>((nz>;4tGtK6c#3pnK3@z>tHG zCA1Of7BmQ!4lp`BrvO)f^yU++D`;V8x3I3Dg+TYPnZmkn`RVp?wBFk@NtNd^;&@;Y zV`!!@(!)aShSe~J@+cEfs0lufZXa*e{U{?`w&6l$xdUp(NNa*Ir8ywd9G)dy-pJs^ z23et9mCtH9tgA3-w;vyOdq2BxyDE0uwg>i9eq1KB;$TbnL`?Vqk8Oe2J_x%`)=r!d1sI3c zFi2BtmnzwUH8{r-nnpMJmp{NnGsZl}|e2l971kAK^H BHWUB= diff --git a/warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro b/warehouse/test_ns.db/target/metadata/snap-6672072926019974762-0-2c4c63ea-a734-4f86-b728-d35d56b3180c.avro deleted file mode 100644 index fbc2eaf7e7bafbb3e35e0e71924b505b9628c347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1906 zcmb7Fzi-n(6i!Q3bznqgK`65LvDArw+o{BckdP`N@oTA&b-sH}Tx?Mt#sWn_3Q-n#~k?75XWU?~MH4KR=dAP_E+ATr|!v*mc!$?T!=97o_o5Mu(n)e-la zxSDa6$XsXdbsB?L%YX<05|%x2QqA@`@Ntp?4>225%QqYaU-1lHCS1tJ4(k|H4=M}< zQV_C)Is(;#3c=KYoDEMYz*HZ-`ULX|Y8dJ*EGwuXP(7@sFz;J_ynPI%_qH`UNK+Yc zG_WYo(Wt;k53^!7%!V1n%r6P8--EOsq^5@cH0}gHJo(L&#k*F574|< A2mk;8 diff --git a/warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro b/warehouse/test_ns.db/target/metadata/snap-6683184572107984435-0-b09a338b-66dd-4282-8794-c8be344730ce.avro deleted file mode 100644 index 292bb103c4a05fbb37a527f2c2f8dd7f35010116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7F&2G~`5Kf{VIB-Pm1tH5qNJw@3?>IeINJvOXAWj8YYwx5n*t=nO-4Io|BOZYR zkAM*3P!5O(K-_o+4u}IUfW&SRr`tMp%fXl3`Mz)F+nMph^m+ICHYaGp$5dE3z7s{U z@5Vtm@LXpwjDx@rZ%+^dA}l@34}Cv$ywD4yp)+(M&+%??cv%6-z#>(d0_%ARtAJI;H2(}O*Q*hz>o3*c#_eoS-ul!_=acjD(6BzcGAY6d(dFOP=Jsn zv=QhQGzgXsFgm@U09SwX<`b+dXklo#u&$tmK=-hj!n$wy`Sx+N-a9Z!RTMJfbYKx< zXr?gI!&2>r)iB2LC>Kzw2|kT(A8*zDC?{OD;X-A(18T;h)&wb~1t8KKo+Vt~$l%2W zS)pB(&uTfWt1xStXYvxm2vvoU=_>UzLtW4*uq2hO*%)V6TRIx=OaM18VXY>U3t6=# za|Kov!ukNR=irusAzCD#cmocq4*wQ_b5Z=eBEf6~dVb{spsWU{rAE#Cn zVQd9n>{;<(7+6`Hf*%9}-;uwa(&;Pd-}{};*4EFHKi@xoIr;jz+v)V=f&9+r@eghs BGMNAX diff --git a/warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro b/warehouse/test_ns.db/target/metadata/snap-6817748211346412300-0-fdf74252-bdf3-4d1e-b45f-4cf875682ac1.avro deleted file mode 100644 index d393ed09e90306243f4b0a70dd257515f5ebfd3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7F&ui2`6y9B=c<`pwi%1B?Q?vQ8`PH695ClOHgd$;*dFe)znK(1)x|H?Mqj$lB z{tKSG3SI;co}~x>g8l`97bm-$?R3+o^^(KP`@ZkJZ{B-(9KY<}*yIG2d`yLr;d_2) z2Z0+pwmouv*LFshwN)YpL>OwAV+T8a=#K)=34P1=T*tY~;dKQh0fSUU3~VsElTub7 zVH^PC86^W}6CE%*f`+byuCfZG`t znap+hUKcU=oeT(Lz){l^=hZyA0zS=h;88-WcKMd8;9H)-n~V$j*ijdQ>OqSELk>cg z&_$qH&>~nk!06+NGHy|<^6D$ixa>A)h! z(6q)#4~u#?EQc|aN11@4p5W8y?(wd>A7zBgHk_+0c0j|pqclNGX%2|Ahi3toH!^s> zL6&H{&S$wCR#oT?%?o*nAw^X#WV*HbnW4_<1XvWy)@+Tltt=gdcPfDEm#|i4c_FK^ zWUjzk3pFc}c~+>;W|wHcf@xHMKo|+svPv=fKgC!3xt=6_c5A-m6N(|ZUYpwc@$2aM z@!Ri?sek-?^XPbMaMJ(MuVZ&jb7)TF&t*(24yJTZM1&7pONWY`l|KR|HU>s!?vgmY)~#CxFL&?zzW2U+@A+x+s(*c(6FlV;Dy$;A>qp25 zgCO#K7X>~VM`3VhiWv}L>0yC~ya+{Z;Dmk@xE>n$w>iA2fuvxOx=Mfz+*>(i6&BV3 zFkVnHaJTURqeGrfpu$Ht4^1(jg1Kv$3{uK6bH_0A0?Lfbv%N!;;A(kWVN&G4MLfk~ zvI&yO$}kThiE4PbUPokymGq*_B3!iU{gT{L$`%Z1sw#shwT(Leap|b57K&X&m?tO%7~MJ#f;&( z!blG*wHwyM7|NqUK&2-5B)WUNRrlk9aM^}SmDLVt7$dC-5=u+Jq&++`a@bU1HZ(8gWd=E}OCi%$>ZgXfq%&Y~B3rXH&W^TpG~T%YZeGG#Pp22MYD?w{ ztV*a^k<3G(xmaAH{Tk+R1p;SS;FeXI(f=vF+0SZ{%*Bo6l22&{={03)@8jp6-n~x; zJFfX|@5B2C_XofGU;8R{*S3fDO#WOZwB}$-_e4ziFiUKK***xnN!A{XP?Ebiw1Tl8 zSYw`R=(f*muEqZiuRk`~j>m zAR!PSRfU0x0Wl#K7B(anHUxhG5(DQXPOo+Awu^_m_kG`c-@W&IGrYHOW`$EU;C&|a zm|SvumSg#z?Yn;0>$;BZS{DZ>11fYi%(g7Yur1RzdWLNpp6mJ-I6TOKV$f-xhLA1V z=OdP-Na&l8@tDy?YXxm)tj%#BQnYh!OB163XlpGk1I#j_t+uo%hJ=Rq=A8Ri&TWHH?+LI}eJ@ePKNkkYL?x30H_vFNw1-fm6wK^w2O z4$w$|ZXBRuDk=$+8hg;vAQ2Zj0UrPkWM*Y4WtNtLkEz%T$BYVT@P3f#)qzU4gQ?pU zu%m#h8K<$#b@pC|F}Sr1h!7w_*%JrV+&u<9iWA@gW_h)I!&dMW&){Lqg?#LwjzRUH z!ayJaAxo$uP%WqsOdZJB@Q?yb_0g+OFt4D7q29u>f*JzV!)glizUBMd$5482U88xD z$cWv6MOlVM1x9+97Q10KjJ`aI1*F9U??%^;chUVQrd+n+L}j`IO2(ej1R-MyAX*)s zDO}#j;K>G=q0J(n*>adyp_Mdu5?*Wt>fA=_tG-0bDzR zH6IKPWmT5UF<1+saz$p2;cMgZ5!&}*6r>;!K>}5*Qj9*K_~m0ishT z+wnciwCt{_o7h3R?fQn^vuvW{(6i)?7x|&3r$)Pw{(Ys5Soi<{ diff --git a/warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro b/warehouse/test_ns.db/target/metadata/snap-6927406033723608373-0-7b21d6a8-f503-47ff-9a6b-24d3214a27fc.avro deleted file mode 100644 index 0757a29186efb1aef7922d61e32ab0d45e7d5b79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7F&ui2`6y9BW@ZeGEMI;2#OSAd8$!-rli69gN#Z!?m$-H!<$;>)4>AIA?sv!OY zo&@h6q~1mFU+`ZLiXiwGIJ3LiPMbEZhg@df_kHhu^WMv&{kEcC&gZyD!k6hQXR zQE@euf=Z23Xlanhl}^kjkj65zx|BLgPs8U#oQ9{A2x;(HkQ=puYPaL1+YRtQ12;1+ zbD8Vvy)I%1TNx0>faAI+&a2tK0zS(N;BiW;X8BH_;TxX8tDFn@*l`eALjgjT z&_&bk!07aX0$lykn@_N=poO8`!n%SM0^P%A3hTb*XWPfodT-ApRZ+-@lYvEy zp_#%+4@L@yN4bDfP4G!{`*^GFM>*lL4HqiQ9Z)llv?fR>EdY_`@GRl-Mg}i7 z$O`SMd{)b0U4>cGJd>9gGE@~prmNIX4Rt}Mz~V%27k5JmzutkR7BPx1ABR+D7TZ!DI4N-?C@l&PI;_ulu9 z@vogXKfk0d?0as2yeLbp(&;Pd-}gJ6jg8}@zkj~|c=zdBx6|p#1NoiJ;~%Yx15KSTu95|wK0KsZiAr9T_N1ANX8xlgQgoFg@sX~imPa4Cnz1ZG{sLBl? z!HxgWb5BTI`2p}NxS(?72Vf`J)aka{a<%8ZH}gC*em;EDytN@2%H^0VkCKPIL8lYO zgSa1dgWh%=^?IGn90_2`v%+q&B2Dj0cvk?!;ISebf@p>JMqFe_d50h*<*XHLphLmi z5|1H6CwGoqHO;}@aa;kI3*v4$?ubH4q(0j}av93zw;5t|1X3kAQsY&S&Q6DQgFvH7 z9;pOn2PTAYY>1z6jFgsk_Fn8d6RO6})0fU%AKclNbAd(*?BD{G&{9dc)>uPpM-(+W ziOc~fIND8m@}mvJr4@wI#B6$vT(Zs?pok##u?SQF5l}ihF&cLA_PcM zHo-+TcdmgS(G+BYc~LDt*tYN$&)_|kN77hqLxuk&5 ze)Q@StSYEssJF1JpoYNqu$scEZ{_*+39R1Rcg=X~h_iu3LZGR^Xb&^943@*#*GE)A zW+wP7x_-P(_an-rZo|3CVh5Cr1FH#!oTq?Tb$AwVeWQct8)S(NO+L%zu&Tl>XUf6A;Nzw`OIWLu=_+yi*0zy@IvK^GjK+C36i{BUG+P(GB|UY<7kA zTbL#pC`6D#6{{?x|5JRmpUot>v)l6}k2wK6{}&qK!S2Vuk3Juh*B|zdAK(4aI&FS! zn%EuRZ~GJdn~ZrO!PoAogvmA;`U;5yP=1-LkD~|=dWd+WGsNCDg4pX1MguR5AVv_y mow(oivY>6GPoFdzt=7q(-=BVc`T6a8v(;$a&?k*b9{&IynlAYO diff --git a/warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro b/warehouse/test_ns.db/target/metadata/snap-6989454375805241585-0-ce566f28-bd86-431b-ba97-fd70c8073fae.avro deleted file mode 100644 index a6a7a6421f78421cade6831befbf666d3d9b8217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2021 zcmbVNziSjh6uyKQQdmmTh#ZSpW$$+PW`A4?D+vgSpjZW2W@p~!R(E&Kow=MxxPQPx zP%Nyph+t=BA%Q?d5QDXah=MkXg_V7ry}P|kvdJY1Tg|-h``-KJy|>qb+f%3Kd5YV- z#e^Qw3r^E(A{#Ya+cRtnnYL%2Z{rM7p{rq*Wt&FRv2A1-4HH=wLgzT#?LbOEPdiBf z*)%#EvMj+uUxSQCESspGF z!EJ)mCl#!hH3L{uZ>FUkvm#f`Kw5rQDssnw{ z`is>=G-60s4^c4{m6%D5eQ0Trh;kjDw}JRFv!awDOH08=sn`!EEEUq=gCNtL1S;J2 zhi;d^wgN6^oJ2C$(R&@m;7nw|lmhjOo;a-L#tHCY6a)7O>y*nkkb*CH2KOQ^0DzvV=(lss$y2p#vG~9#Md)K6?2H#uZFpm~3HD!2|-;!*UAazU2qo$5482 zMN2zzEF<;?7H1jmGCz>5SsG_kSvm@D zPXO1BVePcrN3tqQ<^-&{P_ZI2+wio0{}}B%(DM@zm|}rTRw+jRqxg6~=aZ!M&kUA4 zVHC(*ZffQ6{KqdlS0CR0@chTZ_NN^-yLsx>R35ujuh;5b`EzNp4u`sQPxvXX(V#AH zwhE$NBwHt7J5FeMdO$r#M-4O31Kf1=kh%u(47U+t&=aGUOaHo5sm#rN-}t(@@%!!W zo2ltaW%&K8sOz{i3~->M&;%XPkm{H?ST|e>frkvcVTFb0PboS(`~KUbcYmI2Z(aOv wO^Y-r3S6Xnwk!`}M05{>t2@}R5vCR;E>$&WW}ZIVeX;fV!RzI*=0U&z0_M_!c>n+a diff --git a/warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro b/warehouse/test_ns.db/target/metadata/snap-700734091558935978-0-de460c3d-034c-4f17-9db2-81edcb0f322d.avro deleted file mode 100644 index fdb07a39045741dd7aa41a07d0a76c0277cfef7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2019 zcmbVN&ui2`6yBCvd+?^zi^vj+dT4g@`$zGpf*>f0r&7XX=B1mOWY)}V*QG3!;@{w1 z@T?#`D2VibQ1IeOFXGWdPl`@!P6dO7}TtnhLBHNS0b9H zh^y<6vzTVn#yncjX^Y_wr0DhK4TTT7pe!|&95Bs^ve;Cj7!tz7x8)5bL+R)=MOhpH z<3Shk&Ll|WD#C0{6R47h@jT8}ix5I_L41#5#D#S8@x!~#e#|?~JCB+peNcvr%_B4t z$X1U~(Iu6H3XKD3VGxfCoq%-#2O_hwlrl?0!p9ju2*)(z!r;Ro-K_(aZUnGFsVW*X;#D`fe7^yF48U34-9oe`;Z5rXwAwv>(bJZcn2Jqasq3w z+dY<5S~90#EriMyncJGD42LIZKY>Az0!IXKRIy4j`i$a}{aj3vGQ2ce@|Y69bA_pm zg~8^HUGq=>uYLaJ?duO-&b~XhJypamwcD+BU;JD;w8x+=+~YyUS|n_9l&=DBm&vvX zSdNBGqH3mvRV&h6)hD5$dO8psYLRIeL`}6;A^qc4qcJ!4d3Wo@+uu9yFHScav$L;2irC=WX;*x51U`UegF9B&B}jk>K67*@EjFuhM`(M kw$ux8Gc#MyzyA8Uv;AsqqIuZvf7~8=0ssI2 diff --git a/warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro b/warehouse/test_ns.db/target/metadata/snap-7022889893183814165-0-0ab31934-05a6-4e09-a869-bc4036a9aa7e.avro deleted file mode 100644 index 45d173d13ab4faf31761350ba03109bc196fb9a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FJ#W-N5WPE5P*5QhC=jwNL=~Uy`-+`{3XqUMNFb^RSz~)Hw_xv@-F1#rbiadw z9-$OeNOTm428o)6KY$`?YIg6=mra~Fq1~PL-pt#X*(dSK_LU7mp%4=$9g^PJ@_M}> z2!pWi2mQbw_@m+N0yt9X7-5%bnPs;GzAlj_=+H8ck$3!?W5#ok&K`0>813{nV2`t| zNG6!W$LssHoE2zqTQ@mSC73yqf-=>f+ZgZeyj6y~Q$jLfLWv9Z1o~KY1 zkC2?uT^*9LL=!(^2}mVvJ%9Spni4s&9z3%a`e@HLty45Iq`Rl6_=ZZxl*Tc%azqlX z6Nv(oNM%-)Qf1jQ@Px|a@PtvR96bs0x0*ne+tJeP8hB`c>lx=n<+^&WvlvE=43MUn zMpYA>R&)OX_%X>)L$+sSof_s**>1pdpousZxwMgu)sOYG)8%t>t(PS#y}kr ziMgKOqv+=G*4+<;3e|=SmE{ho7(=58V#YEAS|6SzT-~VP#RgfSeVxy0IjpO&E1DPT zGQ}~JnN;a&^R;^hZXWv*l2JcLwu+L#Fi{eaHW64~ARSQ)sk`KMWp3l$G zeuc9rM+qrNs99wg{h#9N{j4X+o?lxm`GlpIEdGVo&-eF#9sGEAqkZ+y-EH>xZRfE4 zsjXwTUAOB_)o(Ikr9fA?CnGAlY3xeiyC~f%S=WQO?}zBD=iR;P3D`}3D?-#`5Q+U~Skm()qCmd8I)!7r)+ diff --git a/warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro b/warehouse/test_ns.db/target/metadata/snap-7037381790004132039-0-e59caa8a-08fd-4a6a-9a0f-66d4ced4c4eb.avro deleted file mode 100644 index fb205c3bffbbbe560f209dd3630b2d637fef431a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7Fzl+pB6y9C*u&}U@vk{3wtuC9%uiflb79t3OpjaIeW-~9h(PSoOCburf))s>Q zgQbm?|AF>`r3hCD7WW@02+r(o_U0~kIW3YR^S+3qE1OO39re z@`hgM3`Ynd-|<}JjcygV1S%{&EcB5xbX_lSf`RM!11Ah_aClh(jlrT-K8CXAT~An< zV`1$<$x}vq?k3(VS)a!f$nl43`=*!`U~U^`2{9{)xn-D13K`+@+s?j8alSasF-;TT zA}X+$tb=5-GAuwyqG}#4%9QS^5W-?b{E)?1NNMBg;|Inx6%*tB6Jwzd=6uUIMI!^c zdy0yqsboxQ979WkM5=TmUO*hl%<59=EL{zsQgIv}Gb*IPCqd4z4OF`wE!}Q_0}b5F zI8SA+tNS{OVbIEe2>}w-J#kvi-ap`zGy@*RtZJ5zd=2053|^&N$jgq}7<3OB3k3*J+AXXrXd%!&Y^Jd8TYj>Akk)%UCatneMjQ<+ zE=xR980lfIcEf5IL-{EckgEwkif$io)%`f7T(;ptWw`@t#*x+pW5zPTv^hLWxIB@; ziw&|uJ1U>ma#&Yk)-=!LA%O%}nULu!^fHXuLB4+&qW1DvC2% zwI%ZptV*a}k!65Fb3Q*u`vuIR90Vp<;D%M2(f=vF-p^{1%=y*Dl8+gI_>wZUbLH#1 z&v(Cld2{>q&4Y`--LQAq{n%Bp+qT`er}F1AVHF2kx+fya`($hjT<(If>tt;RMlr@A zwosT5%f|z3jW9~A!GQQN$j67Vm7~6rKD^iIY;3&!@#o;z_n+@Sb$gx8g-%DlPv-F# DN8U6r diff --git a/warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro b/warehouse/test_ns.db/target/metadata/snap-7051609426416309429-0-e0184284-5950-45ae-8dd9-1db19f4b0a31.avro deleted file mode 100644 index 79febe8700385cf5efaee81303319c645b3302e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7F!EVz)5KSTu9JnB%azV(l5T`n}6FW_Mu8@$ZkU$(z1=iX-Nfzu~v%7AHLcWI! zs)W=7XAnQY5mkIZ&wK#8Nt|x$#4R^#ciww5Z)e8O<9E$FJA$HIjG1%@e!S;}e$N{O zonGMgy82`AC`TNqbd0duv`Ev30zMQ#6L4se#lTzsgCXM?lFl)3K^SdycF-|rZIO&2 zLnrrVww&f*?^`y9gmG-|TK14YiiJ8mn%NX(i`xuQG6W%`9Le!INM)zOLeEpEl1E5R z=tzfPmT2N*zAzgGt;-Hw)SSHPhGu4bGOmFw!gwlVZ-84$*Rqp}G$ z)!e-Sen?UfQNoI9`Cee)E1tneBBXlksE)z(pu&J51*uA?BQPzf5G)Q-+c7y z6Raz!VW_vTte}R#^st)3x^KnR_VJ9~JF@k7tB8w%MVzCl#wZUny$n{v*jGnHLZ&D9 zBD#LOb@wAeg=)iv%5n#kj02+yV#ZQHv^qRXxVllniw&|u`#PW1a#&Ykmo#tGC59m? zQmN9_>X(K(WfS00tXi`&&c3m94Bn{(VPC^qhe50x%o6zL| z9dn8QZ>k==*!+K0{iXFxuO?@(8HT1=7$;d+nwjV(rX^bHnwVOq=~^Zw8|o&d7#OD+ uB%7t0rljcR8t5gK73IHjVPIfl+Sf6&+%?1DiN;oC} delta 154 zcmaFI`<7SLKPiimN31w6v7k63zeG1PMa|H{#KhRp#N6D#$i&FZz|h>>Y@@0nn^46| z5r)}%%1-|CKm2Oj`*|JHi^&;mh9L$?DM^Or#!0${DF&&!CZ^`ex{1jt=DJBK#^#o( smS)L@iAK7)26~BQMfopW7#NtC9`tlPeYjxd3}Yq+1{RrHy#L z1_-T5J*j>pVbl$2DHWb-85G*dHUU6V9p1KmVpb4%S+)1;(CQ=^nr3u7bQ kTm!wtvZDNVE({DTEccdu|M1||`Mbgl3`{^i5ThFm0FNX?EC2ui delta 208 zcmey(`@p^02^YGG+=UUI5#UTJPpY7vw1##nYX0j+6q9qZ3% zcP^=SxVSqwu3&Nrn{h~rskxDnVVZ?*l7V@$u8F0kk#3TaNwRK=k#S0@k#Vw#d8(Oi lu7O@+SyBEA7X}74wnbOh{rLK2)mj!N1_l-e1|W%UFaWH5L%IL} diff --git a/warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro b/warehouse/test_ns.db/target/metadata/snap-7144360376649993479-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro similarity index 82% rename from warehouse/test_ns.db/target/metadata/snap-1849061518691625497-0-284b2273-468b-4c60-a6c4-99561a3f0d79.avro rename to warehouse/test_ns.db/target/metadata/snap-7144360376649993479-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro index dd63f24beaccc839145ff8543418353e5ae0a5a0..32e8cad452d5cd11e3983ef37ae7f0c4c98dfaa7 100644 GIT binary patch delta 194 zcmeyv`4T{1s@nZc6(&dC={uO^qX8HT2$ zrKOsi8zk$RnLw;9nd+Jwn3$)g7#mp{m?!Gy8t5gK73IHjVPIfm>)Ueb W=KNppmL6kdVqjolU;vWnW&;3qXF#j~ delta 193 zcmey%`-j)ZKPiimN31w6v7k63zeG1PMa|H{#L~db(A3bv%+k=z$kfErT%{nfC^fG{ z7g?E^si~=%frY81rHPT5fti_!nc+qsNj9ONNgBqiJDyeaw%4DKJE_dW^kQ;3n_-BN zg-Mc;k-4$1iJ3)`u1T_)fo`H%vWc#xrKy==qH&r*in*n3u7O@+SyBEA7X}74woNNm VU;p@W`buLa1_l-e1|W%UGyo{8JBt7S diff --git a/warehouse/test_ns.db/target/metadata/snap-7197919905951446818-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro b/warehouse/test_ns.db/target/metadata/snap-7197919905951446818-0-2c17da15-e1e6-484c-87fd-d5c594ce88c8.avro deleted file mode 100644 index ff13d0b301c51e8e6b89dd23ed808be889ce4a42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmb7FJ#5oJ6i$CsbznqgK`62iQyu$KJFz<>BqSsxP^Su6=ey^|VBZDbxoK2o05P+m zf|xrYBv_b%0SO5)F(O6=!~!ED=Oj+Ab?df^hr9QE-+SM^_k26NKX+k8Fx(eCF3p%; z>mtAFBj2}O-$jno@sM}5k27G>)WaOq^?k41_B+03ckH%f+gAiU%z+UwS)PWF%{!MP zo~2lt+mMNvv-$Q4-p+VSkRGJ?&81yK4*OuNH;oJkB5G@=+1D%9ELuEB6RzD+TU zBM>s^W7(Spsbp1{YugG{@(7v5Y^w;NoD{^jIKfg$H#hFwYz|`CYu>oq9P5KIT5TSq zkpSB|Mg?gq30E42(8?eg7dnCH0|``SWhrHrZ4DnYc^FPOlgi+uAk?h`m2L+Uw<};* z16MOnW0mXly-s52)G}a7fd*wy99Q$&8Sqh@fCvcBtL58{hOc-AJF$@Jv4c7W-Gd4P zg#@H3p^iYeph7TlAmf7*3PAd!SD#>3K@CH_g=Gab1iFXS6lQ%Zj<%1j_1>nz@+46a z2Lp?<3=a#8@-QuS!*m!ubrefTiwQo6t{?BB`*F;KYQwS0WCxUtzSaaG=Luj|9i9nX z-KgO42AQH!kJ^T52Zobi2Y&6vO zyrRVReZX#L`ZRP+$40~qk-cUDCY|;gju47ErRXmuy0rB1-^;gqfA=5DndZ^j{{#6p BS;GJT diff --git a/warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro b/warehouse/test_ns.db/target/metadata/snap-7268602573125653220-0-6cc0535a-3aaa-4c80-93e0-c5b07bdedfcf.avro deleted file mode 100644 index 1c5f8e873f3a383c2bd79117393eb67018322bac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7Fzi-n(6iy-r21Znts57KV=ONZciHdZ}BttatDGzW2U+@7?40W&6gKpr{ZNCLNO883g@d z-wVP)&kw?W*b4&hc7Zrh=@?&PSh;ua480BHEm%(Znhw6w( z$n^xDMmLYQ?tVn5P;IzSS?+*}ao=cyn6V5Htq;!UaYzjPzRcqG9**BJs!8?;6>`Pe7qPURNSTa{&)k4*Z*y$-S(cO5LJBsIDbY+G$;}h5>kLFLe|=z%Ngulv%Ai5itYzc z(WIq7qNd_s5LzVuLOKLLfZex|q76{3K-p@#X9Wrsl!`MzTXzU4+?aG$}u8gL2*uFC{ye{^q5XoE4N&V!Sx4@nPZf9KP zBG=V>UBuvbGN3GjEN*(@yqZT>z>o6+Se%l&UB2Zi_?BnzK4)A!cHG6FdeCCXpa3pP z=ps-pXb~(Opk#VM0k-<+?I&1Q(817cVN*c|f$Cv9g>~Puv+ZLky|=65x+p}%$-p8? z(M)25ho#&Nt6>bqQO=>16MPcgJ>IhWQI45t!-dLn2Q-Y4(gX=11t8oWo+Vt|h~UKr zS)py2&uTfWtI!*o*WxmRF{%qL(v|9`hPohApm8Evvo+4PvUC*Q83(3c!dh3=g{;bw zxdN*cYE~rmtWclNFVTJrv$zC~GQ?5KD#hsk6kqRWIZ68b&SJ@@B!l#(G*$cjdz;m_ zumAn@Yv<_kpGPnI$GvYo8M|egLvt#AE)!BSFokFEb)L@(qYQXXJ_hRgi>6X$__H@e@tEapUmE&ktV?zkfXH^)>C9rit&_JpKU$ C(=pTl diff --git a/warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro b/warehouse/test_ns.db/target/metadata/snap-7440866824021855995-0-32e4b741-ef48-447b-80e3-3a0b9cb05c3b.avro deleted file mode 100644 index f8097742825161bc61a64588a7553d8efdef31d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1906 zcmb7Fzi-n(6i!Q2F)*UCAQV}sVyKhzuf*;G142SVAc2@FWSxD_jlsT4edmU#%HP1m zKfp@G!~_gTtcU@1L+T&Ug$X(!0p}!6uXXFTlBc`(ecyZEz4!bmc)oCDnNvLAeJ1pn ztn_Rfx!ta7+Q>9q$MHPp<^X3vg|3FVo@H9dGi}2`hHXn!_XdZ}9B2qS&C>v~MeBOR zvJ?w_3o;%vx@a!rt&FvK*oPFqySA-~(EzlymX<-tGNP@vv?zvzaCx@Atx=p#Zc|L- z2)OVESoG&XGFchsAS6*G4;NWXH;NF#!h-k#3$c*Wt*4Lgw}!Fkx9&Y@P4qzL4{!IK*olr6kw>2UVVaj1vL!y7M2y%5U3tjQ<(QHKi)n_>AiK0=1C$W z4hI%z86FiF>0w&zhS@N>@+cON7886JT|eGM_v4sy*@hF9=?*9vJ*5c(#uC7^Iy_Uj zyph3^4KhO;MLx6TFt0)@X`abT0ujy=A=53?j|_FfhLHJzY|Y9z8_LpAct--bb_Q!c z7@W$gESYn#7DDBU%pBxuodmkU!H zD{pW8eBCs^-r4`Y_v7~7!{+X#_X|brTBp7MW@Z`x#ylXu1RD^+n3CIUxbb|q#H$JNX delta 208 zcmey(`=d*}uspY{nsphUTWp2BwL+$!5uEx+Z36#=1#HriQx4=84IvmKMoo7C@0) k1HHtuqWl*w3=C{+&t7*-dbeoleE}v01{MYeAc<};0Ml?pt^fc4 diff --git a/warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro b/warehouse/test_ns.db/target/metadata/snap-7505909271869725036-0-8b51f704-8cf7-4d36-85dc-9ba342b6c65c.avro deleted file mode 100644 index 6f23d60c03c7596d6e7a3709f272c77e08e79a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FO>fgc5KSTu9N>n^1wmv1;!wwS66d2_5fTy-5{Oe(S?k?#vtaL<-E~7$g#-Kr z{s320kdXKx9DC!$rDuKsyGfjG>(njR-FffLyq%eS5x;5P*pdw8a>A8M$-`mjhhu-- z9R{Ppc-Rg7-r#2hJ9RZjN;%v8_ghEQBKHEKX7|Is68Dca6siGXI$vQ}9r^7DBL{Xy? z$sBN`Gb>9ev+P=U%G6mn=1gfv&x3+t9jJ6WTDn~UhZeY+aYl8ntM|HyVNlC}2mun6 zO|Yrv-WBi(O+iMO7uE9pzJ;%N2Jfj<`mv)r2HS%Q1A!EjE}@RVwxB|=bU^Uw1qB55 zqgS6`T|o^)y@h23H3YVY)fCo!E6=x&Z}r};W5!!YoDM7!0?iCYdzhJJuo}jZKB5XT zGr_0P_2X^2A5kWC8!l9qJD_A7TTKvio&sXk;aS4%v0r)$*D40XzJQgtf@?3t6ota|Ko-RIW%7`XgsPzeM{j z%%ThwB1oZ%RhH5JDZbv%W|Exwt;LeZoB&?@3yq^6dk-Fc{(JA_=Hrj~C;Fjv()`&p zu{)mE@uvDWneak_r`=N#lN}O!3Wnio+lo`h9nVlcC!uy@5Ll33kUZ>h-(v l01ra!W`4&=pFC+aTCL+h$6tPbJNo*o*=jVd>61n!kAE9>FFODL diff --git a/warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro b/warehouse/test_ns.db/target/metadata/snap-7513461889513613785-0-0e2a44fd-e823-43b1-a1eb-66890d16181a.avro deleted file mode 100644 index 16dd95244e3eb22b38a49c871c4d2775dc606e78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FJ#W-N5WPE5P^3hmLCCWBXyUW?KAqGN5)u*;h$=$X+B?oI*t=$Toy#dYiH?83 zUr0w0Q6WJ`&o6*JRFrh=-kmR-IB`N}t>?Wr^LA$TdHklmu_+lYJLUJ z47c^i2=&L|@IiqEFy&ccw^^BG_a(e5fhFLvGLJ!Y(7lw494qetgruBxdYkw_@UBcI zkmFBxk6bk?z}<0N0SOnx-E!QNLPn%M+dFa@&KG}k%xDTyMFm!qb&$?ZhYf>3qbeS$ z1ZDdsgz&@=KjR5jTH1N_;;A#GYT`V3=`8fYoo_jpXk@_lFHu33O2)OuIka{}QKJ*d z0+L8)R+Um^*|YGJsq^rJGo>B92twl~P~~>Cbh`!~THt!dIn}wY?&~UsQ6mE;1V~gh z!DTh~Z-7r}1~N)`SuZ~rSooS}a7d-nmmM`R*dEjv2xOpi2~7mH1vP@D1A1&_ zg3qFx$J=y2rcCNKT&OH}K*hLiH9^dI2AI`{X9?GTbns$>tkB5hvsw=8D%^_Zwf;#U z#bu^+x<>unP-lD!B8qiu*2WoGOUL4!DUj|ptYuML$!aZ`8?YLoYDJ1+5W4gEHQH}s z7UiHY!3x)`vW)&u@%4T-ljP3tES7x22_%bmp>^{0+u_E;^6~G~`|@l2;eF?{{kd&o zcYMF=PxWgu;iUv$yQd;1yCn7%7W<(5Dp@~(9v%!*;z8K!dxL(AJd7arMx$^$AV@z@ j2zzd!_xvt3>GQ!A+Qbi z@`$n=3u_-3Pbt}Ox9~orT^^4i$L}s3m|`{obH^|l#FQoGwqcG^$PzBkb`MN~^YS*w zBpm@4(FBX}Do7?P!(<8)Rq=4aQnIH)5*jPwJ2b{ZN*fRE-8QDF7#p|l8>K#&^KIi8 zjSR@%F)Bz?$*9ygf|dq}ROv)~0&yfWt4gV|bTxcR#8G%miI4`bgHX@}s@#qiZr8xR z2CiqEr!v>&d!5A4Z)Ctp0!dW$#BnwE&VV1K8Sp5kMZJ8-)9^LV;91IreC()+LHD4> zkU$1Pme53?TTmldIKb%igaVNM==CR9RnWlDY++SF1A*>gJ%v@@^7Zy{wBFk_Ns(nT z;&5OwV|b=8(!*TshUG90&f`P-}uAr5RvSAD#tV z-pJr`gDlZV<+EH4t18Tj=8?QiV1$cI$aIzZk)h7$6j(Hrtyvpqq%9qdcP4Q<>Vj z{`SV_uldU_X!8?%d~@Mp=f}AZZ56v?+g*Dqe=cKMaImF&A|kw-3~hng9tgWi){Y(M zA;&`&M*X4XIcQ*o0UlT*-$O1+T;xDtg|GL>~bvl2Zzk2=s=Zp8>+8eFb;`=|M Rs1*IZCR%ECr0#n0e*xr%RZIW? diff --git a/warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro b/warehouse/test_ns.db/target/metadata/snap-757219070076398543-0-49d50ceb-ff50-4c31-8515-77245a727b91.avro deleted file mode 100644 index 40afc7db9293faf7d256e5fc34a186bbae48933f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1904 zcmb7FF>ljA6i!Q3F)%_IK*+Kx22>|^i5L1;LKsoW$w1ZrxV$boajRd+)pVp6>>a<}NG=MtY*lr4@(E zuH!bbhg^i*cFXHHc5AsuGGNluqOQ9h@;a!6Tx@%7)Wo*yUK6m{2S&kS{WO4VzI8R? zSxTg}1(}FBn{O_Wt&G zU>irMU`-|AO5*@p86@Le#}_@IzRIj9rO2|W;bSHb!YOA`8GIOo-6~Mwwm)&Z1a>rV zIpZ`|xlZ5fIEHp50|`S2{h}w1s=0Lvd=w`je9HUf@{z6KOP;}#SV;BQeiei6L5U%R z1f(jVia@uZL@;q6FTw-3^KZ{1}5BvBFj z152`u40DX~FwJ+vbQnA8D3*}s6TBZ?J>Gfulb8wBhGUh<4k#EstqB6o6CkWSJQKLO zQNiO4GDYJ&pXqX#Rbdu157lJ|5$PvVrJJiC80v%%AoBy&nx%2Z+S1W@hZ2N&0&Bn5 zJC;>jGN)k8g^CrKIjCcfMki=LhM}K=Bq5QcWR+(08O3M&IiDnRbaA}oDG!03&rPlU zdGPHD!{0wVfA#d^+UpxT3t!H?pUY!c8;yEnpnfi0-WSkN?n$4CdKfe$$u>YXiewwM z7dnVSU`3IGESt8l)p4+6xo*>Th}(1n4_hg!=h8oJ)@qB3Z{GcW`D<_Y*`@hfZStK} zvmH^=vax4Hm=eoYKRPRj9BQ>g8zG7)rfs{>{HZh-7C!Ip{C)B7?WeDEGttAf{|Am! BS7iVI diff --git a/warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro b/warehouse/test_ns.db/target/metadata/snap-7582912806309123259-0-9cc4d2ab-ff45-4223-b14a-bb7122648bb7.avro deleted file mode 100644 index ae0b176f8102662fb5cb143512ea8f6abe070c75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7Fzi-n(6iy-r21ZmCR2d5)hC2R{q)j?kNJvOXAf^ggXWw&Uuxgn~uBH&+O z;}6Kh1QRP`H~xi6jKIpfBu=k&>y|0e-TS`pz3<+8ej2@M-`bFj6mra!lhOw}gJCf8 zgQ2(G^YFJ93`X}0B7iB!2)oJ3EZdaurUVv)!^%7Y(edvlT;xPKhahCiStr;ahk|!y zJcgXi?;P1`T7bQ4*#crNsJ&&`NeUU2c(#9JGmTvC8< zK6?EL))h1`G+S6z&_G~%SWjWyxAJ`Zct-E-+j_h);&fn%5M-(`=wYsx!D<+Xc$6y0 z^#q?rH;=dOev&eYZMaZb?tqGMWHdpjRg)79!{hC1UD5MhL^SsQ2HSULvpRDrawU@eQ{QdVQhT!U2$RVz{qyrDgtU7`IN zreO|>P@+i9D#Pgi6kqRWJxTWL_F~D$oI~3;%m%H3ulVaw5-}l}(@4eg(A1s_%Wdse`fO0*? zS3I|8*|zIDwr{zGU>5 zB<=&_!4UC56(o`sVXk2aRLR457L&~)1k

zC|O%g|vF_&JA@G^MQK(t~%8RZL+2w zqLBdEJVeEmR1zvQ_MwGAJT7zsHiRe;nU$rKSy~c4CVW3UqJ#^B4}wgu2~@fr%-pVl zT?t&zIE_WF^Y=Q6q1(uSFa{iyJ#kpg_6hL)H~|(!G_RL$I1;|*89a^|7mpn@F~}a& z7%(KjMF~v=vIRAQnFARe9Z`TOKYINMstOtynk_6VXdsY1tfx@*Ej!pghSYl-8p)GH zMC=VL$}%)AFv7#M*bVbx^ucWi|$7;VWJJEDzhC>GWMh<2q{efk^1n= z;NnIEPdCUMZ5H{=mqS&BR?^%Tml*mePq;|8P~SJy2^~QegrYTT<7`SxN8%lGVA?UP z`EYn7tF&ZJz*-2ED>8EpUz<#h(S8WyAO(&v;;3eoWb`S;tNmO|k~TR%UGfpd5VZVScShppGN3twj&P3$gtc+l;V9b#-YJvq zI96mK+X;2c>sq>lZKV6Yk8}gsK0*fWhL)$NM!S&yeoawYt=}JC?CgAb_jPw+QBjr^ zMSM>y3TB9*8+ke)q35{B(?i>_br(mTYxMgLn3d=^A-b~i?C13v)=q)JG90F^j#;D*>u;&fXlZn^HxdvE6L%hhZ2* zJ3$l$LFo5`uowFG3dDg**9hC7WtQC)@TLTsf=kOh0p9lS3>nXnbPs_G!f1PY6CHBa z5$OnW^x^igBPRtoySBq2WgI(OwlgG#}8G?{;f#hfzq_R_CLAR?= z6_1dd&;uQUS*nR2u@p%qZ9jkd&>j;xviF|ZGktKTTlNZ#4CuiM72ix^8Aw$^6M<<#jbQEoXX7;m z_~xV6pI})*14FZgRRs+Mrib+umVGNOw@=sTy?sZIw~9C)Sj0J+XpHhO*UMlrjFCDb z5^_Dk=h4mMt-Bu)DpVWJROUONVjLJvkT8}3qV?gK!_|!no^6l?+SmCkmcz0Nr=oeO zE-?&InMswdR=+UR85;wS6V;lvarTX+WAIKS2Fi&yUVJ_I@%GQ&{>jGQZ@;Y5C+)M= z$Ci%W^}LQZR=>%Jl>$8Fo{XvJ;KY-NAAt0#WW5mg2PwwLg&5`uzL*mv`@fp0?VSbwiz4wLJa->VGr? literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-7909803071496021477-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro b/warehouse/test_ns.db/target/metadata/snap-7909803071496021477-0-6fca3419-f1ca-4149-bf5c-6d400c0c1c64.avro deleted file mode 100644 index 5116e663360c85081fce82742c43256194e72e62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1906 zcmcIlzi-n(6i!P921XPXge(g&)$uuToVYU}At52Cm?~sl&d-gheP`~@4N(;#frP}u z%7%nsX5ueEVqs?EKVaZL;K$jC(`($iWkB+D_rC9Y@4NS&?~NaCTI^bPRm6cQs-> z#nL(eE@DPEdmVhhSyzw=r1;~NLsQN&Ft-hp17SQgw+u6iAqj;#+dVWXPRrXA(>MYl zgAB{bDo7=(!UhN_RK+7CkLg|!5;9T{-(>_#C2c%>aL1U&a$?-xF-m8aJvQ`XyAIr zX{>TxzSn6CULykzLkNSaCr+xle-3;UCm;gC@_PBm)$ldX;At$RdhDQyLHD4>5JCb{ zmC!_>TTmldIKbKTlmZ<6(d$pJs-S_P*}|%V1_Ir~dJ3z)73=MTwBFk_X`Uo1;%Hzo z=Xh3Nl!s}t8s5UHB7CWF~^tC1!GnN3R_2F5-)r|@+ zH^>t06!|Qd!>S6iqIsk)Lx^ymNR@7(er%`{HU%DxRcqG9+0mAc#ygWB%rjW?EIXA| zTQcWhErhBS$p>g;&gW-n@53xeLE;cgT(e3u`X9wt`?;7TbAGv8@`QyzE*7S?cHZ9q z@cZ@i{aY_TKa=lKr~U21r;Q?Z+qS#*RQ+5gEEixa_hdjtHyqm%^F5Gum8|VW1ovIX zw<3pN%T@m-Ya9)T<%KRn1QCaLu9c#0A^qcKtJQ9Qee>eit3U6)eBan?wHDw15p_z@ OpKGF}W?Sj57ylQXbXXw( diff --git a/warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro b/warehouse/test_ns.db/target/metadata/snap-7929386983707208693-0-a273260d-3475-439f-a9fa-a76fa4e0e177.avro deleted file mode 100644 index 0fd6cc6e0238a81fd033b1d3eba281bfd9829c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2021 zcmbVN&ui2`6yBCvdhjUqpy(3BQ?vOo`PqXf5iEkB^dLpTBzfsZlgyf#?Yfk`i3h=J z@t~I;R8aJwCqeKg=)cgj)aqUEqLbatcG|S56>obr(67>mXaTb(O!N3mu$8#$+)J>AGcEDsnAdMW$vtrgo0Py)I+{$XPe_A)hwR zMkG%$lh+`pG0CR&dAydB77f~v;y0()CD!kNwAhq#2uL1E3r#7CAqgq}wz4i|I31p* zIEy2o%K1hRw z<^dWBWUB|LXo5;YxW*ndH;BcBjz>EXcs#SRlrl?Qz{eTe3lB)fxWW5Dnq3Df-S$Rq zSHPwKu4bIZJlFAk9mZhQGT<II}*EnhVRe8n@kA5+FJ+pA*` zJ*Y5*kO1Q))DeglR0u{69f#_j1g-PGi{q3U)y|*G| z-6Y`=y90~!9QO+h_b@GX!+01S{wZdV78AT1T|eGM_v1LDybXscqa9E(xhO%<{DcP&H^>;R75R*p!=wtSq`A!xLx^xUVLaVJea}!QqzAd@^VY14vnDJZfw#|q zN=LAEJDo#Wg(dS3tc6gyB6Cx9q`}|_?Yq$TQeZg53|FiYj6SCLWIq>^Bn?gtmwZ4% z2<8e?8_SozKU;dRvGnEq@BH!eGf!qeoOnM~#4ajIOX=~SOPh2lDBL~fWwaIg3d8v- zFr`dZ!McrfOATdY*rseCH0Gc&I@U%vYI@aHc!(cJI%Uw7JlF8}}l diff --git a/warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro b/warehouse/test_ns.db/target/metadata/snap-7998744310280295035-0-54dc647f-b4a4-4e63-9a86-56ee7d6f5e07.avro deleted file mode 100644 index bc981b01621ffc2c9f7007e2a6610132f0b5de40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2020 zcmbVNJ!lj`6uyKQu1F~nLF8D1q{!aQ{_mw0K@b9pRnTR2=WTAy?#{V0oAU@)SgT+m z7B-ePK^rT3L9wzCD+^H&D?tdNjk9;Rmq|9cL}9C$_kG`c-@NyB&A&CXu*g!}WgW`Z zh+J^mZPzhPLqocY^tOczYpIJfNVzJ7Eg8slbc7tk(2;E;U9-TI2qn1 zIE_MJ-0NcAnFNVkMVN(Bb={nxqm_p|KAw{NYidXZhIrQ zD_~0kS2Io`k?Z)qj$*KF;RynyD_@{uXwE1tofh;i}Q-ZTc; zg9-zI7`P~58i8y*eLZ(wnj;eLS;9wxjv@|8F~NJ$)5p8$ejKGtwBb-?v;#`Uw$ubZr7_^N zIy@t|xDmm_4KhY+MLy%@FsVW*X>N#10wK<0F48U3_YHMSdysj)XwAwvYtqt@c>5ff zatv$U?Hav;qPOcU~5Cp~QkT9FP>_(HBn3=tGJ-4*5wh+M| zAZVu`SXx^MB3OBi2sYwBp_ARs-rVIbcS5R}_kG`c-@Ny7t#^Cr)EXnWU<1mvG`{E~ z$M4Q;t9)F5x}m5gM6`_6bwy25$YLhWHn&xR^XYAlNtyuT zVS)Kz5hRioVGcq9Rr4@jrlenm#5AgiuhIx}A+6lJenlCje4t#up-lBbovbSdXkO1Ln1KgjUfK(*W9%JmY(axy=0HhDhZJDQkKTNOMFlMk?H1M*v=GQ1Hd9#iE!*EdNb0>!l?<~?MC=YM zE=xSFFv7#U+70tz^uGX_!<^eD{$ljiWu;NnIE zPdCUMZB+Tpm&2k8wWhfxE@MdWFykWKN`22zXLJN**b}YU7-vITIuh@g15=M+9Tvr* ztkRM>25Ti$ugFsDY;`g@Li-Mk!yGt{F~<$7B%}XRe6gRaNm3`Lr%OJfF+?XTQ#)Jz zr#t5R@5-B(`0U$<_aCi%JMm$uirvulu09e!mjN9z(1m+EB&-|vbdJkDaJ^1ecb&wu zFg7%>d|$J@#M5wWMH&L+*q&uOPT*)c>Q>T!E_FJqt1q7a{PgljA6iy;kF)*UCAY?4WRL5sKPVCMI2?+@a#8e^ce12&R_MP#a8=@*3GxQfA zK|3??7uXPcS77SMFW@eT(`((jW$|$LzVCbQyZ4@-#jm@!HaW!wpDiw;Nzz12;3yQ<>}P zy)I)Iwld%(fh4MX;-Z?pYv9Le20S9HYL<@%8ouEfyi2)|j~%r!=pHl}639Tv650rK z3mODV2TC@*qyR^M^yU++D`;V8x3I3Dg+TYPnZmkn`T6!iTJPWNbolZ3;LH8L z2juhKufyY=-bwdcSH*7IcHf@LpUZ?*9Bk>Hh$!zTu`O`93&O6GwF$U^?~%kB57EdP z#Ia`u7!eDN1|bO@-wUy4<*2WuPabtT8yi30e>nQ{uf(a2K&zVE)7wY0Vc%Q z8KE*DRSYa3AtCq+7!ZE|s0#=&uy$bKoW!Y9w{F4mG~8~Pmaf|dHuQ@LNr4J96^8ZfSZlX!-NG6+YgDy}H5bee;q_f7k zfTb}JXdO}>GCHd-lJ%4|xYvQ0yk6Q+L_Yy#rLLslvD8q-zpNlBtK{8nxW~!=0V4J=7h($6r`!#LXw<6*Srr%*tgP4HfH^>}C9PeRIN8xB=QJ0NGog(h$ri-6Gb z@QmQ{L)GTlslYN#XDgVb?lYnH}YD=eJ?Z(jgc zj$rL3$)T);C36hcOekNGsj1q^U~q)?eds$e2;vh#N>&w&{zvi2e$FOI8Jrm|d5`(v zEo7$FPF&c$G5G%H^ya6IvE5rbJOAP2+nFqOrP*vWd-CVfVO7H;XZ}@IgkaP`1 zGf%eZwm~&@OGSnrxX5rV6WKwaqrg=?)c~Snm7rK{WYWJb*J=w3&wfAM`ugVilOHp) zwc6T&ap$I53C_V0*Tei~f|A&dqIYe|zzM=i~0}Num1<{|hdHdcFVv diff --git a/warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro b/warehouse/test_ns.db/target/metadata/snap-8313902679403056549-0-59bbb6ea-f9ba-4642-9b62-57e55f553440.avro deleted file mode 100644 index 9103de25dd953f73b36c83070a921e9a4f84ac37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FF>ljA6iy^irp8S?}KWeeZqu-n%E!%kIrhPEf(eR9HBYokERYy4gJgCx%y%4# zs(H9zm>j8)gvN^aF^!Rs(#HO?N5%w;vGMS^QR#y@+cMT@WI&GAsJNO+My19IS~?=I z(g}G1aVRsZOR2LQXn0J-DmsFQ zBw^hI>uMfe1E1myco@^NS-#_G_=acj26G`FJ8WanJ!mi_kb#gTv=QhQGzjJnFgm%U z09SwX<`XO{Xklo#u&$tmK=-hj!m@Aq#rAQu-a9bWc*}_Mfklj=slrGPbF~Z>!?+`l zuz*}m@OgCmc&qM5m~h#KmCAev)Qo}F1QDefAkrM3Ib7bz;A(>`(5}j7u^g6Fm^ICz zyi6cPWhP|0N_}OhGdcklMzS><zpsx6souqvT?MKa&nF=w+Y zv|qtA%t4?83DmGkGx|Tpm-|^wk~zCoE%}%x5Lf>~=f{Ju8{eMp)4yNd{hYpdf7ml0)~4%K1VIoKFD@D;nV0Rj$xNJ?Y%NRw1TW%Q zMDgm$KV=a_yvpLu|G=5H=}tGh+4Y#2_kG`c-@NzoIDXZ>z9A?o#F$Bk;H|LN3%x-Q z1pUw-jz)p+Z54xyIy zIr_SJXv=8<_Ksz9NEpZVwq>UTGAz{D?x9UlKEKToB`F9Q6-bU(K`J>FHt;-!s(6It zgzo7O%o0ufh$ToWY3tdOht`D1vGw4oHP;7wwr!oEkpbO1L&Y~#GNv@v(8>`>v`!=n zNFtS4RZ5j*VBiUr>+pn8sT@5G@`p{J%I#?3b`3l*!1auCqHrb$%pn;*;!m5G>0@K5K3ah>qr`yLfdT-a(%=I!@4r8c}h=g2E z@JV#@cjGuE0Pbq(4NgM(B6k> zl!HVVNmR4SF#12mSNmB{l0CaIU-AjVkj(!Jt$V+(-u`vx@AJ=Z_rJgV@#lT#xc#lI zV|QG)>rT|)WXwtdu5wRCRCICdO2qd-x>d5SAL7vn^Nx}OgJ75@ j7^#ok>uTxa`>j@|bM*1chohgL-febTtt;xFRZHU^+M+P< diff --git a/warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro b/warehouse/test_ns.db/target/metadata/snap-8348544302231969911-0-dd192fbc-35b1-4090-b0d4-b0c858966378.avro deleted file mode 100644 index 3fa0f92a0ed369cebfe1f376449741435103b069..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FJ&)5s5KSTq5EK;XC_u=v5Y;)h^L6&MAS5ItBoGqP30Z6JBw5bh_3f@NM5h!~ zH2eg90|>!CfPXOb!$BDO{{0+rpwcnIuF@h+?+G|4fF|J3B8!2y{JTTOGbEiu;DRvP>TIDy z&e|dwLxw)xKCvSZ*0mFw_?QK=j~3-WjBK&9K!!tDyUZ-A>AXGG7Y#o6}pjNaR`^?0j@(}6{tqp8Ly4>P?CmctmR zBO)Qw6MPz7Ki<0g5url0;ap|014_owXo8rr6cDWr&jPM)RPcO*EYZHsXSp0!RoErX zYjufXh>BFIbhY~0P^WAHJc?CoR>s*kmX5(Yl_2a3Sc^R0$Z9N^OR#F8az*mK7ud7e z1={;CjWUo3BZ(?j8Aku7_-a4vNwR0R=1V?d7?Syap>gxt;rEXZzx?>K|LVj0>vu-2 zb>+}y<6%+T1tQl%iVC^fG{ z7g?E+xq-2tXq9MQf%Plgrr*L(Ef5 z5{(QEQ*})ZjSO^6Ow5dQEt6Bzbj{5YlT3|Mj1mn@&2)1O^b*U8^53~IFtD)9S@NrE S``KsvZ5SAsfP5fEHyQvwv^_Nd diff --git a/warehouse/test_ns.db/target/metadata/snap-8401722351562146185-0-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro b/warehouse/test_ns.db/target/metadata/snap-8401722351562146185-0-fb961953-5e03-4ad4-aaaa-44c9629344a8.avro deleted file mode 100644 index 173a9cb852aa90b51353dfc2996504e8ef47b950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7Fzi-n(6i%WJ3>~2?2w4_ls^i~ITy;c9NJvN^rmC_ozL&;e-;tzlUF|Z<58%CZRMD8%WS0V;PSbEsN3Ejwv11}2P$X7q&yBuCsKvJ+sRg8f3ygOsc3M8y! zU_7Iw=k1_lM*BRSK!HBqJ~73t1ar?Y8Kjh9bJsA(8RVGDvx5_ppki@bAd-!Ni=;$i zvJR5T%COLJB&z1&f@S1LgR>aLP{IYpFT3CnV1+4pBW2%Fz36*1sXY!qYG4A zO(myN;~ZKVBr>Iw@DkEQW>%L{XX$D9jEM8_loBBg-UPXWHc;($vUIxv4mEHy<06x} zuHNf1hNzVRVGKB_d*Y&+{cGUISq?l&Y1J&>2{e4eGkBeGAs;(wW6(WlFkr|*$P(HJ zbPE~;O9vR8UQ&RoKYH^C))llcv|CtL&_bYl*i2#Fw|ujG9If{bOj6~!j5r%u#2A_> zjP$TjyJ0nqLwS@5DAWX>MYoT)>VA|FF57USvfKeRW2`m7h|(MoX%5d4E^lP;VuP&E zuF7Y%9M)BsHO-;C#4tuxE@Zk&{oGLJbP6mP$<}O)v#Tu~jdv!1n^&+_WqB#9wq&ls zs)Xtl$wFsn&gWNXzl2#*fIt`t)UZl3`ai|j`&mtrIlsAB@+rlT-cY7?CSTtj2A==z z^N0Og-tX-%y`SArT@|}$+kJZ~|6C@t;$TbnL_&BUk8FY15eU0Z)*g@I$c;na3c>NM x0O7zw@?!--8b@C22LT#dh0|BkzaDftTU)1ZPTzn3`{(VCZl}|e2lBg_$3Mt@F&h8? diff --git a/warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro b/warehouse/test_ns.db/target/metadata/snap-8420686025710548535-0-725bfd51-ebd0-4ba7-a45c-f84a42f3bd50.avro deleted file mode 100644 index 85e8e5e18a757cb7b90f91793181b95d1c5e7dfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmb7F&ui2`6yDZSJb09P5eY#&HJcxsWV1c!MTCMPD0(RxCYhIRG?`g5v%6i&-uwf+ zc<8++5ewoUBI3b=e}F&Gg9k;tIJ3LiPMbDuAqye%zVCbQoA=({jh-xASYZV9SeJ4m z#n%GYvHZZd9ItI#o*Q^A?`jVfK)9iXwOp&?`10p?fhS+>D-53Xfy7{tejY)w*t(q1 zB1ha9K*3T<7M&F|C}@+#UC7a!OWQgh^*~?K^a5g9V0~57lN2({#J7!YouGVjnj?}X zz5A$6IzkN(mEfI8mAIfReGJG(kjZ28dLLX9^c5 zB6zYvW@uaHGg}VxD)f@(kvPPVpnk?hx>EhXP-k=qMHq?Jtc-#1SiD#y%w}G?smV;tOu8;*!HYL9 z;-BDMJb3cr-(V3>deV!%3L@gc$?j%5ZQ8VjoMztleeZqq-pl>|_QJ(gPI1NuOz1JW z(Q{nKw0+C+ySD55mgjrdGn@kzx*F!Wj_o>@>HEItbY0|kyVp28Er5og(<1FdzGz>K zSe{~`??BFDMi;GBypyvI4+oIqw^w#GG0H$&Z)-V(EGODpTZ>{y2$yG@yBfvm_Cz1F@ml*B zjRfe{F)Bz=Nto0)gq8-0xYP-F24NsGt4gV|v=n?y#bJ2JsE`I91tG5qRJk2Y-L8RM z1zgWKjb*O0_d1E8+sJ?k0TNU_aa_&z8Sqh@01rY|)XO&=1z+*immHEt;!@LTuqIoPY2}HO^giNP87WIg;T;L!+9|9> zmYv9|ESWQ~mO|Bv%w4mmjmM{GKY>w@g1`g|T(e3s`kdnP{aj9xHoiPr@*yJ-u9T*> z9^HJk@+SD`{{C`Fzq|cyW9jpS_X}n0x?yyTq5QcFSi!-N?umf%4(S^L=UX6*Dp|t= zKk_gj9rq#B9fCa_haS?A?M5!L2y|UbPt8s#y??9KT3-I}>+9d2f4=YSFD$lN)9<{Z wp$RrJ9Vv>secdrpPxn3C(<9eG79tih!Ba(-mi|3|`Fiiii+7(6M2{B#AFM}LPXGV_ diff --git a/warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro b/warehouse/test_ns.db/target/metadata/snap-8581846891827290437-0-62bae933-47ed-4fe2-b10e-e52b1e6a93ed.avro deleted file mode 100644 index f3b3308deebb8eca64d9a38f2105e81d55b48de8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmb7FU2D`p6y4TZM17R{A`*i5)NC^O*kt=$1VIoKpNfP@a?_0_Gchyix|9VGL@M|o z2nziHzKMwM;$IMdgoq#LFL1KE*-o1_Z6QxH_ndR@nR{<;2M-o5t}udgHlSQfqU)aH zAUIO{NZ@A1 zSt4?sz1L9;y;cSsMG*OQPaIaWbpm{xq`>@;md)}FTf#RygU1Qu;<5cU2HArKLj);s zQ9>JmY(axy>OetoumK|&#L+ZT^m6T~JBK8Ir z7X=8t!eIy%Lrmzrd*_3sqY)=ln$Zr1JRm|aYoY8k$6WOn0gFrnde8c zN=xPhtd&r`A`8dx)baQj?T0Y(GvGMF95<|zj6S9Kd_Px{q>e95mV8Jf2+vifc6N51 z^MAg*UjKW6oE`1{dbjlT%%_Dac1_p2`cV8_2DD_L3-`EBST_oEj*Cs;dY!D^GXo5L z%hGHYBF&D$)BaW*e=jU{I@9m8qOKK# v;W)15nz5(Zj*B#}hhhzZW-qO8RQA&XZwdLMn!#FAe^N@SvWy# zyb9vU@-WvhII7{HtjzF8gd`*u#P>*y7?)Na?%h?U85=8i9w@awsPi4=1dSZ<=mZs0 zQppL|IELm1u}tWMbOLe6Giyp|va}?8hS_m=OfcgHuY=5C7pQSNT)5o=yArsaagp&{ zm+y5NgV)J`k_3{l>4}qSw*La3W;xI>CRMw9!;$bU&)```8Gr1si$V6F#gIS_jF-?w zAY0HPSU6CU=_v)6@}sw(U{yf}L$`%Z1sw#khwT(reM{Hd$B=q&U&U3P^N6E?MP-R* z0>eEl#BNv)qtA~r28Ed5qv-DO7Tu3BOnDpDDvKS^Fa}Z+M1+baDKys>kYC* znmmY>c@sUCsQcHh__~IoK0!zNW3!!R6T>WnoLe*m6pt3 zunM7OMV7ANtMmC8+D~8>7Qj$~7;0H18U2sqtNkn{Nu6J=mwZeTh%X3JdxxW|FE0Lg zdF}kWy^puvZ-3~2I`?Kn#O~_)K%erT%a~LYbnYGtF&!k4&QLi5rZ>szUShkxW4f9X zK&&~Ahcsk)rWU2C85@p2wCqSLjDe8;cDvW>_dh>>`}6DXFRy=XZ1#GK@BfIJwdnUX M(OR?5b=Qmk13SW3TmS$7 diff --git a/warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro b/warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro new file mode 100644 index 0000000000000000000000000000000000000000..d3516ef1d0e1a5cfb52d6a4770a4fbd5e2376a06 GIT binary patch literal 1774 zcmb7FzmL-}6mBa921azZAQVN2>C!m;acOU0LP$tR2oTc=MNa(M8WKC$&Xwxu4hsV- zGb=FM#>fZ@3o~N8m45)cZF=tIE_bZ<`@ZkJ&+k1yjGs5JZApf6IpNBqTKZy!P_#K zK!!hUAG&ImgS+Rr0unBWyW_Yc3MrBLZ2!<@I9uFin9&hP73Ek>)pB z1Z86rLU>|`AMgY#E$uvgeBYT;HF54eaTfaE&Uc(MG*V#WGgJagCFNRU1FaoV)aXPq zha}ROm8Fzfb}T$)Y7?GtrnIA{K|xptD&3BjZdbs43tY`OqdM2sd!5IyTg!k60TPu> za8}LTOW;Q|1sNs0sFsg<7QW&cyrNR+$Byb4Y!5071X57CggOG-f(pUX0l}x|6cE^t zUVVaf1vL!y7M2y%5ZE48Q&{({Jl#IX>b-r}jJJ+B8CWa?o*9hxFf+?wHH-s&L=|La zf={CB$J=y2rcCNKT&OH}K*>0?njq#p1drMOkWZh z;UZN!U8BA+)G42Wh+^HEm2nQNrDO5V6iD|1)*{c(Wwn;fC0LD6xgtd$4cz(s0__(t zi!xA{V1+AISw{b-_kWetc_bkn=pqyh jfp{5e8|mY_jYg|=^ySU3@9)3<{M&3b8dvm5qmsuzlGHJ% literal 0 HcmV?d00001 diff --git a/warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro b/warehouse/test_ns.db/target/metadata/snap-8831663020960733836-0-2cf0d335-5975-450e-b513-14e7c173188a.avro deleted file mode 100644 index afd5b56a300724a957c345baaeb747263c1faa87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FF>ljA6iy-r2E>HQf{AVBfiS=Z2^X0|NsS zBLfo)TVX)(3)uK2VP;_CE{W4i-MVGHd*AoH_uYH%o(x_zZ)^#QaxrGoA^3h21%9s= zcpY!2=k*9dXtc z$rv(pa{Jhp(;Vzw%jS?Uj_qyB9ui2gP-h3nHbvRuHbayQLC82qa=Z>w*{QJ5^AxJ& z5t0)+(jk~7n)oqGkW|vvv!@TO36W##!M?T72Ya?{ouiQg9i5}%8!9PN8XIWkh$LDk z7C9ub%B(D<%(7$P36-1hgi)y+Jqz;tb)eGicl*lqXYh&$sUAD7V=z6aFknbQsuJo5ObaRmO9wccTu^{- zK6>>D))mw+)LU3qP(xsPSWRKwx8iL3ct-CX*m}HG#Oc5y&e2q3l!uvK2CHF=)De-8 z=?OlKt{-pR{fJPZ+Hj$=+yN!yj?n}I#!^7EIy_6bx>3Q44YES}I-k{YSXW_}G|$x~ zh9N3asnXTz8$+G43GjHJTC+0FzOi%+-l+s(U&31C`Gu^;lDPt_7AjXH5535q%`VY? z3DY&bvwz>!$A-_;Z8qvx}gWoAoK&r??ONE m`+*-t$jQ96mY(l58m-oc`MaOrPrkhW(`+>w*VIX)lE*)xt1))~ diff --git a/warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro b/warehouse/test_ns.db/target/metadata/snap-8926228177826919489-0-1181aa39-f25a-47e3-8909-bbb955d63a1b.avro deleted file mode 100644 index 87fbf67f4c7a56eae7d0f08b53c6540796b33605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1905 zcmb7F&ui2`6yDZS6ubypFCrm`r)KkOlTCUSK@bFgoQi}=^3okmW@2X2buD|)zeEp$ zc<4zGguVC=h~B(NkK)Z!PlA)(&34+fX&Z9Nyzl$o`{uou2jR1&%WI6FoDC?~aD3bI zE!VOx!CSNMk0xZSJT9Wz*9P5u5g|zbI;XP%D`9Qh*NSW$`I$l?f(MW-8 z9iw7ODk&8jhtR?xjw_vjQ!di2)DI1HN{3Jcp=iyisnmwZHHh%Q#9cFLdb zwM&yLeDZ4W_21uJyz=A1r===(L)W|dQ2bm5v}B+Q_jo{9Hx6}cbLPA190(Gj8b@4qn2Kz3(J2ymC2L1y6 z4kW~Yn3(tvSUNE97a+ujD#XH_6Q|d>b<2R{>F#~s_uhB!JwF+~Si82t2^#Ye6;_Jx z1!2$YIicsfeaH3vf$wi^ju8VQEG=v^==B1p?|GgdxPvhCT;~pl{Q^h~7Af)}uyyZt zLRpT4bpVW~l&pIj=z!5Kk4KQB_csqsF&%@sZI}#V%COln%p`>jb9uIVXcCl{w>ctd z0$fC6Bu2|1nX3%zJB~zEJY2Ap?5Pk;V@3R!#z;tMW9R83W0H!I@$i{Z>VrA!7-wi? zK=#g1aW$2UN{v%!>5oX2PQ=F$M>4ajlqyS4!>2@?hR2i$>F+AY9W;R|x1+h+HE>@8 z*E7yjnd{=c&SThWWIz}Lj;fY8tLEM%@JX5hk78QX%XfSYU-JxJrCi9zj+z*B4{8h; zG7z$aCIa1p8o}HFMknVK;OdWFe}ZKN4Ghf|Ruwc5=pNQnSoSSnZ68PLy~$mMZfdP%(yD6AUTM0FnCe%;EAz z2A3OTfp%3si{-Ga!mMbX%S#LiDl#F{RqCgPI-?U{(NMN#ZJb?g>1e!D0o=TRwHS}j zW!09#f%O`#+*? QDf(kYwA5@%-PPj%0%{vs+W-In diff --git a/warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro b/warehouse/test_ns.db/target/metadata/snap-8961750095722443909-0-a1884ba5-06f9-4e24-9c98-d2fca2b9d66e.avro deleted file mode 100644 index 3ee1de0436bcde48ddac089e924aeb1ad5516241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7Fzi-n(6iy-r1{Ne#7KAJdG1c*pCaK-ILPA2S1Y)X?b@n|s2lk!0J10a{1RD|q z8#5at6Mq7K0TL^Sg`o>0Oo+QAPOo+Ami6v^-}l~k@4eego_4Qo2#QKEX3`<}ZWxXH z?V;yI!|fm#47MUKx>F(!R60i3Ra)iwZ2`|KpeZ=CDiYv5|5nC$fuu75E(oK&U;|A! z>x*;@1^RgN(3Z0j>>bPIkTQ<#P0P**zN;B0zM z0lxX@%_mq_(8ADeVO>EBf$3p0g>~PG)9vFKy|-`c@m3MX1B*CEGmTLm7J3=1hA~t} zL_(n__&Bh01aV)QpkQ1PNm~Ale+BC0yO8;Kc@6p?#gtYB{W{uxpwp z>JmeSs$8mcwfc#n&e;@roT%1pjI(bn9fNl!LD(0tR%LlEtFdG*!K#Jo70HKQXwT;t zXg`BlT!2IvNz|~)F#12m*ZWydl0Cn%Sn?^ukS_j(&dcKGuj_m7Uxkwo@BY62z0o`B ze(LJj9oOx3A8$W@`_t`pI#<+5r;*1$16nek diff --git a/warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro b/warehouse/test_ns.db/target/metadata/snap-903412967392675108-0-ce674485-f7b4-45a2-b7b6-1a4c56568f70.avro deleted file mode 100644 index 15c21cd274e4e18d3d09fc9d4b857123fbef038a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2021 zcmbVN&ui2`6yBCvDtMHNAhLwwsk58O=4a0$2!deoR3uE2mu@u4teM%aOIh%shk^$| z{{{~p#DgdC52$#uB6#p1Dxy7zAcBYoC%esd+O%ma5<7k#+on>&d3#kt%?Is>% zllqyEW(nbF1u_=VbW)ooD;aGtzYPg_a%xrK{SGJ#btMCzW`QzaSHcM5fQhrERV5|K z@HQc76awRJhw%0|NaQNQ3{@4Vf`{=eN|*DHfciP{CF&C{r0Z9&T&(vZ-mYI*tPk}; z8O+!B(1;;j-a`dTDlrurJJ7-)9_2bN>wxcy%!*QqEHw!qrFY-sxIM6p24k%aq-x0 z6@%>E`M?hB~G_$XrjfW@((Uv~(oi zJ_n{8z}oF}_GOip%pq8Fp<+d5hH5K=!2#MgpzkKYNkBL$StS{LMDg){&L>G3oE$EB zp9bL1SebpNIDW%1p|ACF%hpMG)d*+d?@&}=rEJ@IpC(=LOiaF4qwYXn}C zlWZAyvq-k-gK6oyZJ^Ndbfg*S~eD~?=ZPDF^{{vmHQf>2~tOm%Wj>^RpMfshbLAf^hL^WAe}u-+4sKhd+)pVo^OW_SI(_TP6o0slpV7x z*lByd@3m1EVb}F>2jTSr$$%@{4C}al$H6^}JnW-hr-wasS;FHXa0)gbrXghY_N7Q< zDN*(aG8qeAZ?BP2CYqA=AtmoF?pSIv0Bf^hWk5y7tc`{h#gH(mzisVUoTRhUl<+tL zse%Df{bi6&R)={AX;i@@RTlH@JcJ3F6WLV5qjRsGx$t^st=5vTx@-`DH6*3SPK(I55IuV+52JBh)=rhF2kXnqGm4r>uRmGy1M)C#mDc@U%vjkQrEAwntq;E zH1yg%pb^*z;mCG7UT9xgo0Z53sQE zPXG%;H~s(?)R~Q~%&dsJBu+1N>z4KIec$)qckjJ>mcH)Z-Vzj*V#1`Gk?lB$c86i) z$8j75VKfXz;lmPfpwczMZqh2x9|(9`0mb0bsz`xb!TmAg1(NO|aFH=;gmZe#3LE&oLe)G% z@{Atn5W=t~e#$VCO4@$;{E0oy6cVk^%zr z(VI`OuAqgX-NL$p76Q}5W(w=R73bT>H+pa1(c`Tm&IT57j%FI8JS_AwSPkPy9c2;< zJ;7(u?c=SxA7xaiHe9GIcRZhmII>A;aS4fjS60DkQF-6`K*@1x(cVJd8IB1 zj8TS1#4B7m$Dj5<{GS8s9uqL;E$a7{0i+i zFiQ%Mh#-j?RvAYBr}%n5>q&CvcNa?@GXi+=FLdr~f3i+)egAzN{3?!rbbafz`?afM z_dKuXP1SEQVU+++xhE4UdL;EE;s+qTI$1CD`{O}?BX^WWp}UK5=*BS`x&0KPXh`~l kG)~>Z?`i4NN1cvk{rvF$+s8jAU;cKjPUnU?=``~A2QeWpLI3~& diff --git a/warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro b/warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro similarity index 86% rename from warehouse/test_ns.db/target/metadata/snap-601589844698732085-0-2b541d14-821b-4439-b27f-79328feb2cb7.avro rename to warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro index 57fb715d612c6ad6a094a96478a6f572bdb01160..2d6ae09c313d1926914eaadcdca9b6ae69f1d0af 100644 GIT binary patch delta 151 zcmaFE`-WG=KPiimN31w6v7k63zeG1PMa9y{%-q7<*xbm>!~lqlEX+2l7_tfM|CZm8 z&h^gdish7#hIUV$PEKVr4oNdKO|(ojFxNFVOG?u}0BW={p8x;= delta 151 zcmaFE`-WG=KPiimN31w6v7k63zeG1PMa9g((A2`x!o$iTvMqlzJ$z-B+@ zkck!X{arKG7KR)ZoIg30%{as;$<)L!#n438!pJa5*TlrwQa8!SJWbc!(%8r%Ej7s~ pImui%*FZ0^tSJA53j+fa)2kZ|b8c*0d{cmlfq?}mz`%fRFaX6 Date: Wed, 15 Jan 2025 16:19:51 -0500 Subject: [PATCH 07/51] adding unit tests --- ...-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet | Bin 1269 -> 0 bytes ...-b51d7c58-6338-41bd-8d9a-c43afbffe46f.parquet | Bin 1269 -> 0 bytes ...-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet | Bin 1269 -> 0 bytes ...-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet | Bin 1269 -> 0 bytes ...-139ec306-70b3-4d04-a4b6-87de01187693.parquet | Bin 1269 -> 0 bytes ...-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet | Bin 1269 -> 0 bytes ...-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.parquet | Bin 1269 -> 0 bytes ...-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet | Bin 1269 -> 0 bytes ...-9127e543-b7e7-47f2-8da9-86d195e03115.parquet | Bin 1269 -> 0 bytes ...-dffe770c-75c4-4839-acb5-7047ed32907a.parquet | Bin 1269 -> 0 bytes ...-577dec90-a037-46e9-97ea-09a3dbf4fe08.parquet | Bin 1269 -> 0 bytes ...-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.parquet | Bin 1269 -> 0 bytes ...-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet | Bin 1269 -> 0 bytes ...-4a74315f-9dab-46b7-92ed-19078458b5a9.parquet | Bin 1269 -> 0 bytes ...-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.parquet | Bin 1269 -> 0 bytes ...-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet | Bin 1269 -> 0 bytes ...99b-a3b4-4086-bd87-3394284fe2f8.metadata.json | 1 - ...f88-6a7c-45b8-a958-004c093ca006.metadata.json | 1 - ...fda-0884-4aa4-b995-147f022b718c.metadata.json | 1 - ...28a-4932-4639-9468-2d56f45506c1.metadata.json | 1 - ...335-9c00-4246-b055-30710b86fbb3.metadata.json | 1 - ...e62-105d-482e-8b6d-3259e9f9569b.metadata.json | 1 - ...f20-e083-489c-b38a-61765fa10e3e.metadata.json | 1 - ...f41-22dc-4a41-934f-74ae2c8a0b12.metadata.json | 1 - ...a94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json | 1 - ...95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json | 1 - ...bd6-922d-4b7a-943f-844473415464.metadata.json | 1 - ...ad1-9648-4361-bdd3-85edc009f95c.metadata.json | 1 - ...aa5-c78a-485b-9525-445891ecbbbc.metadata.json | 1 - ...5bc-e790-4385-8717-181579fedcf6.metadata.json | 1 - ...7ba-cf75-4f08-88d3-3b2944a04174.metadata.json | 1 - ...9ff-f998-4cac-bb05-f454524df99d.metadata.json | 1 - ...fce-477d-420b-bce2-8a990caf9aa1.metadata.json | 1 - ...010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json | 1 - ...2f4-8c06-43ff-806e-0baca5479a72.metadata.json | 1 - ...5e2-a62b-4855-8678-92790b46bbd6.metadata.json | 1 - ...891-e42e-404c-9714-b097ab448c70.metadata.json | 1 - ...90d-b19f-4cc8-b94d-98dea35e112f.metadata.json | 1 - .../072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro | Bin 4404 -> 0 bytes .../139ec306-70b3-4d04-a4b6-87de01187693-m0.avro | Bin 4404 -> 0 bytes .../42c2a34b-2762-4d3a-888a-0a38aa0d6b27-m0.avro | Bin 4405 -> 0 bytes .../4a74315f-9dab-46b7-92ed-19078458b5a9-m0.avro | Bin 4404 -> 0 bytes .../577dec90-a037-46e9-97ea-09a3dbf4fe08-m0.avro | Bin 4404 -> 0 bytes .../60956563-1580-4c8a-859a-c232e2de30a2-m0.avro | Bin 4406 -> 0 bytes .../668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro | Bin 4404 -> 0 bytes .../7d69cdda-e5cb-479f-8367-161be6ed8913-m0.avro | Bin 4405 -> 0 bytes .../84079b62-f304-4c23-99f3-41b474624827-m0.avro | Bin 4407 -> 0 bytes .../9127e543-b7e7-47f2-8da9-86d195e03115-m0.avro | Bin 4404 -> 0 bytes .../9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro | Bin 4407 -> 0 bytes .../9ec09199-948d-4bc3-b7cb-be211900e2b4-m0.avro | Bin 4404 -> 0 bytes .../b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro | Bin 4405 -> 0 bytes .../d28c75c7-08bc-40c1-8d2e-247132bef819-m0.avro | Bin 4407 -> 0 bytes .../dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro | Bin 4405 -> 0 bytes .../dffe770c-75c4-4839-acb5-7047ed32907a-m0.avro | Bin 4405 -> 0 bytes .../e1bde6c7-ea3a-45a7-b343-5dc750ff4e17-m0.avro | Bin 4404 -> 0 bytes .../f15a9a07-76bf-43a1-8790-6c20032bb450-m0.avro | Bin 4404 -> 0 bytes .../f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro | Bin 4405 -> 0 bytes .../fe837347-116d-42ba-911e-8d2f1dd3b21d-m0.avro | Bin 4404 -> 0 bytes ...8-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro | Bin 1788 -> 0 bytes ...1-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro | Bin 1905 -> 0 bytes ...0-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro | Bin 1773 -> 0 bytes ...2-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro | Bin 1787 -> 0 bytes ...7-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.avro | Bin 1905 -> 0 bytes ...5-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro | Bin 1788 -> 0 bytes ...9-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro | Bin 1903 -> 0 bytes ...2-0-139ec306-70b3-4d04-a4b6-87de01187693.avro | Bin 1773 -> 0 bytes ...6-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.avro | Bin 1772 -> 0 bytes ...4-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro | Bin 1774 -> 0 bytes ...6-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro | Bin 1785 -> 0 bytes ...7-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro | Bin 1774 -> 0 bytes ...9-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro | Bin 1787 -> 0 bytes ...9-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro | Bin 1789 -> 0 bytes ...8-0-84079b62-f304-4c23-99f3-41b474624827.avro | Bin 1787 -> 0 bytes ...1-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.avro | Bin 1905 -> 0 bytes ...1-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro | Bin 1774 -> 0 bytes ...9-0-60956563-1580-4c8a-859a-c232e2de30a2.avro | Bin 1789 -> 0 bytes ...0-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro | Bin 1774 -> 0 bytes ...6-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro | Bin 1772 -> 0 bytes 78 files changed, 22 deletions(-) delete mode 100644 warehouse/test_ns.db/target/data/0000/0100/0001/01010010/00000-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet delete mode 100644 warehouse/test_ns.db/target/data/0001/0001/1111/00110000/00000-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.parquet delete mode 100644 warehouse/test_ns.db/target/data/0001/0010/1010/01001100/00000-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet delete mode 100644 warehouse/test_ns.db/target/data/0010/0011/1101/11000011/00000-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet delete mode 100644 warehouse/test_ns.db/target/data/0011/1101/0001/01110011/00000-0-139ec306-70b3-4d04-a4b6-87de01187693.parquet delete mode 100644 warehouse/test_ns.db/target/data/0100/0011/0000/11000010/00000-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/0110/1100/11111010/00000-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.parquet delete mode 100644 warehouse/test_ns.db/target/data/1000/1010/0011/01101110/00000-0-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/0111/1111/10110011/00000-0-9127e543-b7e7-47f2-8da9-86d195e03115.parquet delete mode 100644 warehouse/test_ns.db/target/data/1001/1110/0010/01101110/00000-0-dffe770c-75c4-4839-acb5-7047ed32907a.parquet delete mode 100644 warehouse/test_ns.db/target/data/1010/0001/0101/01010111/00000-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/0100/0000/11101100/00000-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.parquet delete mode 100644 warehouse/test_ns.db/target/data/1011/1101/0110/10001010/00000-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet delete mode 100644 warehouse/test_ns.db/target/data/1101/0100/1000/00000001/00000-0-4a74315f-9dab-46b7-92ed-19078458b5a9.parquet delete mode 100644 warehouse/test_ns.db/target/data/1111/0100/0010/10111110/00000-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.parquet delete mode 100644 warehouse/test_ns.db/target/data/1111/1101/0100/00001110/00000-0-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet delete mode 100644 warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json delete mode 100644 warehouse/test_ns.db/target/metadata/072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/139ec306-70b3-4d04-a4b6-87de01187693-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/42c2a34b-2762-4d3a-888a-0a38aa0d6b27-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/4a74315f-9dab-46b7-92ed-19078458b5a9-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/577dec90-a037-46e9-97ea-09a3dbf4fe08-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/60956563-1580-4c8a-859a-c232e2de30a2-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/7d69cdda-e5cb-479f-8367-161be6ed8913-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/84079b62-f304-4c23-99f3-41b474624827-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9127e543-b7e7-47f2-8da9-86d195e03115-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/9ec09199-948d-4bc3-b7cb-be211900e2b4-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/d28c75c7-08bc-40c1-8d2e-247132bef819-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/dffe770c-75c4-4839-acb5-7047ed32907a-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/e1bde6c7-ea3a-45a7-b343-5dc750ff4e17-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/f15a9a07-76bf-43a1-8790-6c20032bb450-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/fe837347-116d-42ba-911e-8d2f1dd3b21d-m0.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2460630470132577521-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2707482049963695882-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-2947476326165869587-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-336213885750966359-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-519587681788242446-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-54046115295283986-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-710899873101048239-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7144360376649993479-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-749163274667189918-0-84079b62-f304-4c23-99f3-41b474624827.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7592335843825832251-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-7775845885571657371-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8352403435774761309-0-60956563-1580-4c8a-859a-c232e2de30a2.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro delete mode 100644 warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro diff --git a/warehouse/test_ns.db/target/data/0000/0100/0001/01010010/00000-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet b/warehouse/test_ns.db/target/data/0000/0100/0001/01010010/00000-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.parquet deleted file mode 100644 index f12431457bbc3e298663feeacbeb8bbb717a612f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6o8M7Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)akd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0001/0010/1010/01001100/00000-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet b/warehouse/test_ns.db/target/data/0001/0010/1010/01001100/00000-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0010/0011/1101/11000011/00000-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet b/warehouse/test_ns.db/target/data/0010/0011/1101/11000011/00000-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.parquet deleted file mode 100644 index 7b13d31dd2bd5322cf4b3c8c071e7b7e7ffaf1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvN^Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-kd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/0100/0011/0000/11000010/00000-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet b/warehouse/test_ns.db/target/data/0100/0011/0000/11000010/00000-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.parquet deleted file mode 100644 index 613e73a9075cba3d3016346e7652acee2e8ec88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*U(GOP-$$SeR)~uq=i~*w7+Dg%$~FR7lgzX%6-PzHEZ1X$^# zP)1WIhx`R^mAlT&CGJ`kJ7QUuw#;4f9weo#CS_JQ`f(bx@VI^94q7Y>Oi6$i8IC&c z=*4BH5ds#%z?vWEv?gvMnpTWHVp#MxF`0R80@7i_z=W#khJI**!4y3W;h28QV^LL6 zzf0;b$+XSL|H!J-!@yxkvKSr!)F3o(urQx!@lH}dOXjDL`CBry1r_gTdOtL}45hmX zXkUFVnLlOogKXTWxk^yK$f{yS)Q`$KfNp3}UaOrnpZWr8-;^y{d)(rjSMf{hIpUW)U)=r86kknbkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1000/1010/0011/01101110/00000-0-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet b/warehouse/test_ns.db/target/data/1000/1010/0011/01101110/00000-0-f15a9a07-76bf-43a1-8790-6c20032bb450.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1001/0111/1111/10110011/00000-0-9127e543-b7e7-47f2-8da9-86d195e03115.parquet b/warehouse/test_ns.db/target/data/1001/0111/1111/10110011/00000-0-9127e543-b7e7-47f2-8da9-86d195e03115.parquet deleted file mode 100644 index f12431457bbc3e298663feeacbeb8bbb717a612f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6o8M7Wub@xRk@Zec|eu07@7x(h>|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtFSJv~{)tLG=Nb|S>Ch{D?|JzJWI=emkT1*uz8?a7!)Gav zLLOZqAM)q4W$r4o7Pu>=pbwi0Oy4K(Ktf9ElD)(+j#Hqk!^UN+S7$0PB@TMHKWMfF z&##(}3`|DDN?>T#N3D1yrI=mBu*jWbH1S(;NU5fY4oxvkW8VUkDMkv^sBy<*5lzv) zO4={Ua;@d2KSS2Lka;`JWrFr8q$yTdd#|hl7^WWKxEF$EF)Ib;Lj3`Ca>tu5k$8~dV#_!du?$FEa`JM=;_>yRh7tRr~ zOV%T7iu0VvFY3>e9xUve^YiUO$Ey`CynJrcqYNSoZRsraBZ>-)G&6oeC?VOUl3OUd zj_aKEJm0I{bZT4O4tg=g8HLPJRj7Y42b@-hAn3%pDkO?^N%?GgcX?i9oXsoXqd`

<#lVc*6{tc`e4u>$6mDt c!>j&_SaNqgxxQ)a|K9u6ZRiQFzFPc&P{w5&^{pQo`81 zL&uJtI(KNL4qYqtE3{L`eu+vw=Nb|S>Ch{<_q_Z&=l(4y@^X?XEXKBu@qkAFiO(B< zV$s(CG6YMSo(!1E^e0#rMME|9@T@`)&uTPCJP<{IpoRRA5RR^l*RB zYz>}YH60n4jDeLP(5#PI@kmNByNF?tyToYXx8jgeO%oHEVwlFh1twFB6sS?-j>jUJ zqJ5RLUy|io;s24s`paRdbo3eF|xc71rJ>s{n?nM|in>T74P_tbb89Xzg&Db6&zPt!JE% zx!vYD&f7fQ7BL$OPRL4gencnwvlBf^WyTb5&=#Ps2~D0|CbWGJo9S-OuHDhQHh{De@#vP&hm zP<9>HIqiAASH0=fwz?h6Vv92>nYF6W{e=#wR)!#$#JMVDigii-Yaf2}?k^vAJR dt-hA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1011/1101/0110/10001010/00000-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet b/warehouse/test_ns.db/target/data/1011/1101/0110/10001010/00000-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.parquet deleted file mode 100644 index ecae1371a93f4c70043d04dc55c8b7cdc46c77ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7^J8#-h6vvOTg;2_Xs$9#KtO`}aVrU*DB1)=cxaL)8PhA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=chA7OwDGiYYA4c8>9YhXBd1TYuuQ zw*WHuOPQYxSeR)~uq=i~*w7+DMvDZsDkSfTB0x}O9YB&pg7A2$UxWiZDgrzx1FZB> zD5@!xNB)Ah%3WvX5_heN9kDD!TlOw_50X+=lQJtD{WuL;c-+2l2Q3x`rX)a%3`ZSz z^y0G92muRWV9gJ7S`#-BO)EwpF)VtUn9Mvk0qL+|U_w=NLq9aZV2YlGa7@4Dv8bx3 z-zD{zWZGure`M9^Vc;+%Squ*VY7m+?SeQ?=cqgf!CG%6r{4E*Uf{J%Ey&oD~hSJ>x zw6DIG%%8IPK{jsGTqUSqWK}UE>PKZAKsU4~uhmYPPkn*4Z^{;}J#KN%tN5k$obxHS zx;)Q$muI>nW??~@tPJNxI?)eK^eB~`QoK!@kGdi>c~*_k)*0FOdo+Eh@X0J3%$$Nf zJKe3N+l2-Oa+DI=vkF44$@P7K&WcgQyp3GG-mvYwo%IH-ragA@2c9F!slF;M#!Kf2 z*{5g`FU5IY^cV9N$oCiCoAdMCQqMUpy>trsZHGFDF0^HGbRRL4A0*9qnNY&As#UvG zvm18fWZ-yC^SXDs)9+yxTbxlz(5g=N7doI?S%P2^=ckd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/data/1111/1101/0100/00001110/00000-0-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet b/warehouse/test_ns.db/target/data/1111/1101/0100/00001110/00000-0-7d69cdda-e5cb-479f-8367-161be6ed8913.parquet deleted file mode 100644 index 5c1a072754b4a4eabc63ae63c35ec7a1acf1087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1269 zcmb7EJ8#-h6h1Zkd@~Ah)(opCwi31j49rvEr7ZvX!7hbLEC3!jgi0y-n82)@;9u2OZJoRjf;jhZubb9=rk%Bj922IGZu z1lgtN5e~(9PV^W2^W+B$=jQx;yU=m#g$p;I+jOae=t5gMOY;a)L69`#Cj=!dyHs)t zWvA*?PkXNK)^0lWt!@Xi*y4;zX00kTzt92I$`A-9kynLGu`a2fP46!2MZuX~0X_x< ztJ(eFS-QQaCB6chK>o=Wb8X^<`ZT9Jsa_~Y2Cjnx&|`jM@bcOltu=jrtuYw%$FW!5 cV0hJk5lil_C)YQPef<1_AN&Xb6!8!5FPRYqa{vGU diff --git a/warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json b/warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json deleted file mode 100644 index 709d22a110..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1a29d0a6-a906-48bf-9822-120d142425f3","last-updated-ms":1736962802593,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json b/warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json deleted file mode 100644 index 0f92ea623f..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"7ecdd093-f2d4-48e9-bbe2-56a2206aac2a","last-updated-ms":1736963298259,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json b/warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json deleted file mode 100644 index af3f08fe43..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"fe9e12d2-bc04-4de4-8cfe-29187e34de8c","last-updated-ms":1736963298407,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json b/warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json deleted file mode 100644 index ccd3ad5e13..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"301fdef7-6bc5-4ddf-abfe-51c95b066a11","last-updated-ms":1736963298306,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json b/warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json deleted file mode 100644 index 8da7cd2b5e..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"60f7d59c-143c-44cc-baf8-34a58c4fd747","last-updated-ms":1736962802394,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json b/warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json deleted file mode 100644 index 3dd40df86d..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3513d8a8-fd19-4c33-9295-321c7b85e21e","last-updated-ms":1736963298176,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json b/warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json deleted file mode 100644 index 3047bc9283..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"873a52fe-5b2a-4e1a-a1b6-6724f77edb6e","last-updated-ms":1736962802550,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json b/warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json deleted file mode 100644 index 36ca061d4d..0000000000 --- a/warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"003a8b10-519d-44a0-87c5-e6b5a2584aed","last-updated-ms":1736962802498,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"format-version":2,"last-sequence-number":0} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json b/warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json deleted file mode 100644 index 8dbddb9433..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-0620aa94-f0cc-4685-93c4-b45aa6bc7a85.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"1a29d0a6-a906-48bf-9822-120d142425f3","last-updated-ms":1736962802606,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":519587681788242446,"snapshots":[{"snapshot-id":519587681788242446,"sequence-number":1,"timestamp-ms":1736962802606,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-519587681788242446-0-668f2539-0ddf-4eb2-8c94-58a8ea60e1c6.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":519587681788242446,"timestamp-ms":1736962802606}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-12fe299b-a3b4-4086-bd87-3394284fe2f8.metadata.json","timestamp-ms":1736962802593}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":519587681788242446,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json b/warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json deleted file mode 100644 index 122dd4fd17..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"003a8b10-519d-44a0-87c5-e6b5a2584aed","last-updated-ms":1736962802525,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":5356098321547065394,"snapshots":[{"snapshot-id":5356098321547065394,"sequence-number":1,"timestamp-ms":1736962802525,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5356098321547065394,"timestamp-ms":1736962802525}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json","timestamp-ms":1736962802498}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5356098321547065394,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json b/warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json deleted file mode 100644 index 8f67070ea0..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-52ebbbd6-922d-4b7a-943f-844473415464.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"fe9e12d2-bc04-4de4-8cfe-29187e34de8c","last-updated-ms":1736963298414,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":926787372640640286,"snapshots":[{"snapshot-id":926787372640640286,"sequence-number":1,"timestamp-ms":1736963298414,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":926787372640640286,"timestamp-ms":1736963298414}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-412e8fda-0884-4aa4-b995-147f022b718c.metadata.json","timestamp-ms":1736963298407}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":926787372640640286,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json b/warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json deleted file mode 100644 index 0a048371ba..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"60f7d59c-143c-44cc-baf8-34a58c4fd747","last-updated-ms":1736962802415,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8777927210488106010,"snapshots":[{"snapshot-id":8777927210488106010,"sequence-number":1,"timestamp-ms":1736962802415,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8777927210488106010,"timestamp-ms":1736962802415}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json","timestamp-ms":1736962802394}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8777927210488106010,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json b/warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json deleted file mode 100644 index 0b8a5d5be8..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"301fdef7-6bc5-4ddf-abfe-51c95b066a11","last-updated-ms":1736963298339,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2703304898161014810,"snapshots":[{"snapshot-id":2703304898161014810,"sequence-number":1,"timestamp-ms":1736963298339,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2703304898161014810,"timestamp-ms":1736963298339}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json","timestamp-ms":1736963298306}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2703304898161014810,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json b/warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json deleted file mode 100644 index 79ac5dbd77..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3513d8a8-fd19-4c33-9295-321c7b85e21e","last-updated-ms":1736963298190,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7775845885571657371,"snapshots":[{"snapshot-id":7775845885571657371,"sequence-number":1,"timestamp-ms":1736963298190,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7775845885571657371-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7775845885571657371,"timestamp-ms":1736963298190}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json","timestamp-ms":1736963298176}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7775845885571657371,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json b/warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json deleted file mode 100644 index fb7939eda5..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"873a52fe-5b2a-4e1a-a1b6-6724f77edb6e","last-updated-ms":1736962802562,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7056510587748164127,"snapshots":[{"snapshot-id":7056510587748164127,"sequence-number":1,"timestamp-ms":1736962802562,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7056510587748164127,"timestamp-ms":1736962802562}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json","timestamp-ms":1736962802550}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7056510587748164127,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json b/warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json deleted file mode 100644 index 52de32d0cc..0000000000 --- a/warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"7ecdd093-f2d4-48e9-bbe2-56a2206aac2a","last-updated-ms":1736963298273,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4517289051336819292,"snapshots":[{"snapshot-id":4517289051336819292,"sequence-number":1,"timestamp-ms":1736963298273,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4517289051336819292,"timestamp-ms":1736963298273}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json","timestamp-ms":1736963298259}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4517289051336819292,"type":"branch"}},"format-version":2,"last-sequence-number":1} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json b/warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json deleted file mode 100644 index cdaa23df82..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-4cec4fce-477d-420b-bce2-8a990caf9aa1.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"873a52fe-5b2a-4e1a-a1b6-6724f77edb6e","last-updated-ms":1736962802585,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":54046115295283986,"snapshots":[{"snapshot-id":7056510587748164127,"sequence-number":1,"timestamp-ms":1736962802562,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":749163274667189918,"parent-snapshot-id":7056510587748164127,"sequence-number":2,"timestamp-ms":1736962802580,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-749163274667189918-0-84079b62-f304-4c23-99f3-41b474624827.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-equality-deletes":"0","total-files-size":"0","total-position-deletes":"0","total-delete-files":"0","total-records":"0"},"schema-id":0},{"snapshot-id":54046115295283986,"parent-snapshot-id":749163274667189918,"sequence-number":3,"timestamp-ms":1736962802585,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-54046115295283986-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7056510587748164127,"timestamp-ms":1736962802562},{"snapshot-id":749163274667189918,"timestamp-ms":1736962802580},{"snapshot-id":54046115295283986,"timestamp-ms":1736962802585}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-c231df20-e083-489c-b38a-61765fa10e3e.metadata.json","timestamp-ms":1736962802550},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-b07087ba-cf75-4f08-88d3-3b2944a04174.metadata.json","timestamp-ms":1736962802562}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":54046115295283986,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json b/warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json deleted file mode 100644 index a522e8e5fb..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-52be5010-0cf5-4e7a-b286-c9baf510f7ff.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"003a8b10-519d-44a0-87c5-e6b5a2584aed","last-updated-ms":1736962802545,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2947476326165869587,"snapshots":[{"snapshot-id":5356098321547065394,"sequence-number":1,"timestamp-ms":1736962802525,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2947476326165869587,"parent-snapshot-id":5356098321547065394,"sequence-number":2,"timestamp-ms":1736962802545,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2947476326165869587-0-9ec09199-948d-4bc3-b7cb-be211900e2b4.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5356098321547065394,"timestamp-ms":1736962802525},{"snapshot-id":2947476326165869587,"timestamp-ms":1736962802545}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-e9f1cf41-22dc-4a41-934f-74ae2c8a0b12.metadata.json","timestamp-ms":1736962802498},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-333ff95e-4ec3-4bd7-9e38-bc51d78f83df.metadata.json","timestamp-ms":1736962802525}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2947476326165869587,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json b/warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json deleted file mode 100644 index 3b9bc364ef..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-ba63d2f4-8c06-43ff-806e-0baca5479a72.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"3513d8a8-fd19-4c33-9295-321c7b85e21e","last-updated-ms":1736963298248,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7592335843825832251,"snapshots":[{"snapshot-id":7775845885571657371,"sequence-number":1,"timestamp-ms":1736963298190,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7775845885571657371-0-7d69cdda-e5cb-479f-8367-161be6ed8913.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":710899873101048239,"parent-snapshot-id":7775845885571657371,"sequence-number":2,"timestamp-ms":1736963298219,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-710899873101048239-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-position-deletes":"0","total-records":"0","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2707482049963695882,"parent-snapshot-id":710899873101048239,"sequence-number":3,"timestamp-ms":1736963298232,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2707482049963695882-0-e1bde6c7-ea3a-45a7-b343-5dc750ff4e17.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":7592335843825832251,"parent-snapshot-id":2707482049963695882,"sequence-number":4,"timestamp-ms":1736963298248,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7592335843825832251-0-42c2a34b-2762-4d3a-888a-0a38aa0d6b27.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7775845885571657371,"timestamp-ms":1736963298190},{"snapshot-id":710899873101048239,"timestamp-ms":1736963298219},{"snapshot-id":2707482049963695882,"timestamp-ms":1736963298232},{"snapshot-id":7592335843825832251,"timestamp-ms":1736963298248}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-be44ee62-105d-482e-8b6d-3259e9f9569b.metadata.json","timestamp-ms":1736963298176},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-a48445bc-e790-4385-8717-181579fedcf6.metadata.json","timestamp-ms":1736963298190}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7592335843825832251,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json b/warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json deleted file mode 100644 index 33d052502b..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-d92a05e2-a62b-4855-8678-92790b46bbd6.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"60f7d59c-143c-44cc-baf8-34a58c4fd747","last-updated-ms":1736962802490,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":2460630470132577521,"snapshots":[{"snapshot-id":8777927210488106010,"sequence-number":1,"timestamp-ms":1736962802415,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":1333515437760368488,"parent-snapshot-id":8777927210488106010,"sequence-number":2,"timestamp-ms":1736962802437,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-data-files":"0","total-equality-deletes":"0","total-files-size":"0","total-position-deletes":"0","total-delete-files":"0","total-records":"0"},"schema-id":0},{"snapshot-id":7144360376649993479,"parent-snapshot-id":1333515437760368488,"sequence-number":3,"timestamp-ms":1736962802464,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-7144360376649993479-0-dffe770c-75c4-4839-acb5-7047ed32907a.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":2460630470132577521,"parent-snapshot-id":7144360376649993479,"sequence-number":4,"timestamp-ms":1736962802490,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2460630470132577521-0-577dec90-a037-46e9-97ea-09a3dbf4fe08.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8777927210488106010,"timestamp-ms":1736962802415},{"snapshot-id":1333515437760368488,"timestamp-ms":1736962802437},{"snapshot-id":7144360376649993479,"timestamp-ms":1736962802464},{"snapshot-id":2460630470132577521,"timestamp-ms":1736962802490}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-ae027335-9c00-4246-b055-30710b86fbb3.metadata.json","timestamp-ms":1736962802394},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-6e15dad1-9648-4361-bdd3-85edc009f95c.metadata.json","timestamp-ms":1736962802415}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":2460630470132577521,"type":"branch"}},"format-version":2,"last-sequence-number":4} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json b/warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json deleted file mode 100644 index 465cea5cd4..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-e7c48891-e42e-404c-9714-b097ab448c70.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"301fdef7-6bc5-4ddf-abfe-51c95b066a11","last-updated-ms":1736963298400,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":3079425052372487255,"snapshots":[{"snapshot-id":2703304898161014810,"sequence-number":1,"timestamp-ms":1736963298339,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-2703304898161014810-0-fe837347-116d-42ba-911e-8d2f1dd3b21d.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":8352403435774761309,"parent-snapshot-id":2703304898161014810,"sequence-number":2,"timestamp-ms":1736963298393,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-8352403435774761309-0-60956563-1580-4c8a-859a-c232e2de30a2.avro","summary":{"operation":"overwrite","removed-files-size":"1269","deleted-data-files":"1","deleted-records":"2","total-files-size":"0","total-data-files":"0","total-position-deletes":"0","total-records":"0","total-delete-files":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":3079425052372487255,"parent-snapshot-id":8352403435774761309,"sequence-number":3,"timestamp-ms":1736963298400,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":2703304898161014810,"timestamp-ms":1736963298339},{"snapshot-id":8352403435774761309,"timestamp-ms":1736963298393},{"snapshot-id":3079425052372487255,"timestamp-ms":1736963298400}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-49b6f28a-4932-4639-9468-2d56f45506c1.metadata.json","timestamp-ms":1736963298306},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-947a3aa5-c78a-485b-9525-445891ecbbbc.metadata.json","timestamp-ms":1736963298339}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":3079425052372487255,"type":"branch"}},"format-version":2,"last-sequence-number":3} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json b/warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json deleted file mode 100644 index a55ee096cd..0000000000 --- a/warehouse/test_ns.db/target/metadata/00002-f56a090d-b19f-4cc8-b94d-98dea35e112f.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"location":"file://./warehouse/test_ns.db/target","table-uuid":"7ecdd093-f2d4-48e9-bbe2-56a2206aac2a","last-updated-ms":1736963298297,"last-column-id":3,"schemas":[{"type":"struct","fields":[{"id":1,"name":"order_id","type":"long","required":true},{"id":2,"name":"order_date","type":"date","required":true},{"id":3,"name":"order_type","type":"string","required":true}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":336213885750966359,"snapshots":[{"snapshot-id":4517289051336819292,"sequence-number":1,"timestamp-ms":1736963298273,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"1","total-delete-files":"0","total-records":"2","total-files-size":"1269","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":336213885750966359,"parent-snapshot-id":4517289051336819292,"sequence-number":2,"timestamp-ms":1736963298297,"manifest-list":"file://./warehouse/test_ns.db/target/metadata/snap-336213885750966359-0-4a74315f-9dab-46b7-92ed-19078458b5a9.avro","summary":{"operation":"append","added-files-size":"1269","added-data-files":"1","added-records":"2","total-data-files":"2","total-delete-files":"0","total-records":"4","total-files-size":"2538","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":4517289051336819292,"timestamp-ms":1736963298273},{"snapshot-id":336213885750966359,"timestamp-ms":1736963298297}],"metadata-log":[{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00000-39d61f88-6a7c-45b8-a958-004c093ca006.metadata.json","timestamp-ms":1736963298259},{"metadata-file":"file://./warehouse/test_ns.db/target/metadata/00001-fdce89ff-f998-4cac-bb05-f454524df99d.metadata.json","timestamp-ms":1736963298273}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":336213885750966359,"type":"branch"}},"format-version":2,"last-sequence-number":2} \ No newline at end of file diff --git a/warehouse/test_ns.db/target/metadata/072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro b/warehouse/test_ns.db/target/metadata/072e5b91-a728-4a4a-98da-740a6e3ce1cb-m0.avro deleted file mode 100644 index 0b9a1ca9e7755c717b41472066483c2ec76537ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`Ky^rHW6u^^Q6m5Z4NFb^!My@E5jX(A_A5;h2ij%nIxZ9JER*^NfCmY{7wi%Ci z6;3HAkr1NdFQ7p}fFTQ~s8_TUQ1RYO?AT5&?B=prSgL|p4a!^ zO56#X((5}fG%<^rHq;WqQ&(thZS1qaOSIwH3(fbmq0!btI>i|g_ZYWfteve1qVOEP zarR~Ea|V+^2Aj9lLbI~aqk=7$F21c_YE_m>6LYO#slQI|sI948bO3j5& zM+ZvbcOPUJ3BYgxl-4FWNCG4kLIRYjNR#|mX(`cRvho7a{7`7~HYuzKX`De1RXgf==(N_xQh=0u>(LWev>p} zDkfD$dePlkEa$pDja-U>NuE700w222Hen1+)hULah8t+9Zf_U2du5OO^HJj<`F<5CJb4t%q5t)Wh5%~Y&S|F zi9mRk^x#87FNC#9lBM<&nFb^p6D1)bzEXya%PJ)G#Q%!ferP*0!K%4z=*2iv1v1~} zX(VVsPzFI6s7A>srKcMO=`^%)#;Wu_n7ybKdD1T)G(njirGSSE1cezhxbUo6c*9h!Sa@_h3y<*z3>`*7QtUjT&+wRF zeCmgc@aT$U7GnRFzk8rlz%>DyyX2q(J>tMTzde_$&*8dLQeHqddHmtW(5uFrC3wSy zV>$s9a20_II$l(uQ}z>SifXB{j*mmrEq#*>OljzkSt4u@!)Mz3U3sZ>BagXzcwW_h z_~zC7_kS6E`{?gK==B%GX}rACX#Du|tAGFb>FeL>wOZ}3I_`Mb?H+WmC})!hkaeLg z7Iv5%curSPe$GS}qrI!^hK>)TYZ$tG=<*vpb-e?hp2_Yx1EWKGX1{Yt4{2x6_h_eg zsM8~6xy*2#gT-ZQ|MC4NpFewW+Pr?J(Q5ozZ~j_ueP6G^d$ZYWHSwj^thH*j2EM+H hrs7|7@Apq?wN~RpIoeQzF#1xCegxASdoWnt_J5R%OYZ;x diff --git a/warehouse/test_ns.db/target/metadata/139ec306-70b3-4d04-a4b6-87de01187693-m0.avro b/warehouse/test_ns.db/target/metadata/139ec306-70b3-4d04-a4b6-87de01187693-m0.avro deleted file mode 100644 index 3f09c10d9a25abea574adf0f76ff4396eab9b0f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2Jk;6u@oQigG{^5{OffMtip7{RsZzR74{xK`3o{A+lEE-Eq8RznGm(y;Q%PDMRJe?NGgN`C{vLp`LEJaqQhe41)_PO(B>^t*b&k=nMOi_UkFv( zjODg-ElhnM#Y&fqVBoR|O?{ya3I0?T3I1ZC!|X5(#*A02v9=XE@qA_{8)YAFD;tU1 zsGwr3xfFO)7c87u5oA~e+oTteVdMZm?F94^6$}I&IV9-&7Kyln9|U3tfL8n_X~a}a ztBUlZyR%r%b$uQ=6a$kyet4f;dtypX9uXO3tQ;3ozA|b>Lm@ISuVuF68n!x3o*pZ@ zZtMXJ$}A1Ip__P|jPQdj9|<~|h&1+DOC6h%F-@3D0Ew6~WUVrnVCI&QsMNEaD1{^f z;aSpy4-LH#)+$Ms+D~N~kZ3}bgoJoX88R-bkkk|J3A4S>9?t};=CYv|<46_A{FrBv zpgutv1ZAKaC8Ly{PUNRSXyb}i>3uMJQ7iJKUq(LVoX+s*o?rpgI;bOAVOiFt%n6r< z(X+1%qo1?F9fe|b$)v1I0+yxbpiMbEgG?>G-J&bwgergoZ9TrKe@Kc&*r*02_ru_x6BI0|A@c12&B< z0Gqo5jJ$~C1u={js$@<`!;LVl-Y%on>H|z`usuwxU$Xv2iEj;d2@^XPtOpR6ifUf9 zRfQ z4wEBy+!2&tFwwzi@94T=bPPi`V1yqAjByIS>3Uml!;QooOYgRO`q*k8yZUjP9*?{2 ze$QpFuHWkptfR$a>)^rNhhIIuch-FUUSqHESH1bFzW2OdgK@Lj+-u^X)~xN-Y7HE| jTL)9|uetxrXSLd1^#%NG-g^~O9W3{q3PPlXMvY!{qtvpwcVJA<)&x;_0dJgr zminB*WRSsTx>{&e7J5{$#nSoP>ZNvNsWdUy3YPk-^bT}Q?W%=#8#>BE}3^tIQ>sxn(3O^&B@!A&EeE zmh|95(VPd10b82`w#*Fx zTiXMSyolrlF^mQ)P z#H}7o7FJXH6{@NAKh<<4M0<C2AB z`=QIHv1}VbJjuk9VGs?=E==OU7fv)9B}^#3nCG|Wa`ib}bxO($$U2Xo+=E^<<}AS*E*#Sd zsDP^oT+s2N0-ds-NK;fxm34d^nr`WvY+yn|f5Z~ufEYg2W^c+%ts8mF-NW;$_Q$8+ z=+67}%b))K_vbr*eeq7?$DKywpC7(`{`{BkfBUswtJVIjaFPLa!xVKHiG}|V8w&B5mSHpl8qYdAN(K1?xmTOV_aM-dsM^@|5vuUf_ z?b4P(?JlK;cQmv*2lLz3{=*L*ee&e~S@XpkjorrY_2zf=-LLC4cy2bEyG?wkHEX-I oS_2>N?0~8G*W7#iq*mK)d?-hoY7jg&}L&bl{1-n@6GT1nKz#~&vp*pO58D< z(3iWP??lEq|STkD_MBxQ|tZcMrGg&&2jBxY{o=};?=z|6XScNFmn6|F1A6PQ{z58NmeAaWm!r|;4$9vv!$ z-+Yi^Bmlz&P+F7ZAPJCE2nkT8B2DsNrKLoN$;t~v^FyJ{nxwEIq;WEigakhqs+Jjx zWlyy*4FVJ^T{46hkBw*=2yH;{r?N=!7Ykixhv~#&ykd>Dso0SpFgsZ*yR)fmByOXE zim~QG;7wgHcVb15VHIqXUO5Om~#pzoU`;x7Ip5IX?0;x|bnrea)G zq!-W$Q*!N#F*$imWR$UTTuAxKs3i@B$iTdo*^+D6Xg7I!Ea|$j z2QVnJG~kAA;&w8^53_tE=x8F+IABe+ZAu)PFpmHdF=ohGWiG+YEhAB>XS-1fNd&^P zqz4}wdLgV;k}R~J$uuC*h$smO@s%=UTvj2eC;nH=_Cwp53RcZ!LoddWDv3G)QHJW=pdD7d>J0WBH%Y_RER2Dv0)4 z+#X=$MIX@oT|@8c0C#8sfn>2DnMd11YaU~qc5@}SE(GTBdbBG~9kaVVwvrW*tjZA6IDR$6 ztsYD!R#WRWs;T)u)pR99Ym4PnvRVZZ4pn=?1jR-t50ZI9ZxtH1ykcs~)*%GxtB%I| zq06VSY#Tv5$;1;Uh@7$ulQ{5&9gRi_6HAF;6?(Z`{i1`&n+q1O30#9Rqp`Ef`VG}u ztv$ydqX~jK&;(_6lmZ?u5EN!i;li_Q;SE!@V&U=aEIh#*FmxCRNwM>UKEq>z@rfTY z!lP@FS&02x{_cTJ0oMd*?vld_^oRrV{PtX~KAlykq`ZKv^Z4mK=v8CR61?HUF`a-4 zxQf699WN@-Df@{uMYU8}$H$@RmcGdbCN%U%ED<({;ZtpPM_y{($Ybt4o>#RW>@WU! z@#6cBzI*@cJ0BXJRsU_bUjON@zkmPt=U;z(qgJc^vx7SxwA+X6Ys%R;0%UDyi-jE~ zhn~|GlwUB>#%OOFhHkWVL)Y8z(cAFB2Zr!z>8%d!b}Zv))arZGX?2dBZmVxHuVwW0 zZm)CHbB<{LaDLf3c=++7&!5~sZ@he`zE}Tqr}4|q-nTn7cyBZsdkuW4HEMgcS{+~C k-UU$qVaggK}KHoWbJMqSB zLSOE_Fyu65M&C%JNIhvZjZwftKQa0jFO0x9`c~73=mb}A;WOdFTr=Af^5_|S6YR@0 z5DXTB3^r@(jdo?DPbFJyoqt=s)v0V%Cgxhf(qNU|LDSHuYN6d`6U=9k4B$MXr49x2 zc&@?hZcK#?WWb|V5;L!HF)+$Au(EF69dR+CvUSBo0!!=mfyW~WBKN^~dWT*KeyA0G z`%#9G01OX68BLOdBtTLlBtV(UG|7KemJ$;dYcCKZh@>%VlERLN#>tpV1%576Z?hKL zE{rG*LlmoAGJt{4Ml=nj(I@y*StR(2MILjbbTVY3VvVz@*ijHNH(4wDXj9op+(iWy zW9@~&o4R1`#EKxxDcGjGfDE|@{EQROOLQ<0bY!2P@0)}R5C0K}9ROPKo1zg@Ij$-) zi|)>1IoI_W_b3J?dHVR2TnBPYPM#1IWvm<*O1?H~NkbtrFt1g%O+R)&nrDirl3_=>qfZY8}*(tgtNVQs#t9%j&pS zmetK!;f_MFx@1aLCIL%Rg{svlS$;*sRAp$kB|Cr76IORNK-Y)-S>Vy|TwOoJn9$gm z4Pd@pxNt&e;X@jui!>b)_(XE}L!gQ!#D^awmt}V;gLFVFqwIm~xuIJ?*#nfenFG2# z%HHi!+UB-Vs@!QpV0vNdL)}o92ceNq&gfa0EnX|`I>1(;(7ice+d{zh=74Q$1Hkt7 z03$D=ctH$fg({g7(P%A9r?bsyb-Do4>1__v>6Wa&QQ|wjZNkLP1?vICrKXx!ZCxSC zctd^-z3ULTLkkEbiv`KPw@tM6F~(^pS90q@U>~nXyYkktJKJNcSP{jl3^9%4*F)Uu z#bjeOb>5(w+W%8cS3-2QSWXqIRS@A)btgfMArlD;eK#;!fYJ3oR zVj8Qq5yX>BJQ;?3Sax9&hkruzgJh8*@O`hPGI`QF7=H z+mecBOtvxF+m>mWZPPTZHVpJX)3RWIpO)FW*Xe-bp4pwEP-cN#zM?0vUWgK?wL*lXaR)~M~(YIPjGvkRu; gr?LORX|1+b|3u9;^d!u_^$=&_K=t}QOjeKmA7tf9djJ3c diff --git a/warehouse/test_ns.db/target/metadata/60956563-1580-4c8a-859a-c232e2de30a2-m0.avro b/warehouse/test_ns.db/target/metadata/60956563-1580-4c8a-859a-c232e2de30a2-m0.avro deleted file mode 100644 index 44709116e6c42a99aab3b0c0aaa974ed22763588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4406 zcmb`K&5zqe6u^@-TCEUTA%QscFj#O)HXeJs`QTJUS5$?iwA)h^SrdD*G3(f7Jl<8P za^t`W!CwLg?p)vo{{rd_sRFKu8}H4;j_ssjH%*j8&Sd7jH^28WZ$2G;UO#v}aVLDr zUfgGknh&(3TOhDb9$5$Atr9t!zyYh3D`~@Gnwd zaF`4-_`IbTT9t(!lYF^!@oW83yRuZ7m}><~{dIbWEkp0Bjdq(YFrSCghy94Q+7yiA zzJ~MLF%#04eiXKon7hrVL!&$bGaKgZaU`ZpwlBFzU~0oUaHCLy$bB%Lz0EE~bf^`6 z^L~br01OvE87-27BtTLlBtV(TG|B%}mJ$;tYcCMP52Z10k;00Q#mOX+3j9K-UPhP8 zo*H2q1SnRyWC#x)AG0)&#(>~oWs%@79=hBK)9HwdiZ%AOV#j{Kon)izqitm)aR(Jt zjJ1{muj_(^6DxwKU9e4g0U1Uv@H0+8FVVq3(2)azzHgC8xcEgNb^vI_Z;D3DX8B0a(L|qJpxGNgd=O6xdbz}j6|oN<3=eY5eUzc z9(+j6LRjl0S!zF3X+WYe(Gn8kYh}o|tU^&w{4crVht6mwc{P`*S&SoHAoFdWMUn*s zWe}8sYP5_}db&}NPD2N0tV-{J*^63{C;c+=nGkG-TlXcOLal>3k`@Urj8$COj&Hq zhcI3)TsWY!@DmoJi!>eLdqhU?Mxcr%#E0i67iD)TgLFWwqU?k0g`qn@*$0%CnFG2x z%Kpt!TIQ}%s@!QoV7fu-LETV?2VtQ{PT6UhEgmb*Ccv~%=w2PLMG>&IJz$G&0od9d zVB|#YkR&;kO=LbYjB(n{mE5=xSjU^uu03_E?(WzsRz$HXLrmlN!JieKQCwK#f4kIBccAn5@cwBNZ^+QfX zbVV`?v46{-JL31FVzp3BweXx%BPE+Csce*Z)0Rb#;uyy3zzoq!6s ziogXOFDlR}`-w6|w^UijC!pz8zR3orEcC}bkq(FvGh_aiy41Rn$K8EAuWEzW{{H8; z_wKy=;JbHz`j?+wG=9C+Z2b8A`#=8r{p+tDG~iYHvyOWnbUKHfD<=3P0%#p*jHMGM zhu)|onK(;@;yN^D5a__A9;?2fh<9WULLw)btdJUeN&E{ScA8O6oUai)^$2aOV f{c7(2{86p8*SM=j8~NxjYV-q`-q?r1>c;;A3HeGu diff --git a/warehouse/test_ns.db/target/metadata/668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro b/warehouse/test_ns.db/target/metadata/668f2539-0ddf-4eb2-8c94-58a8ea60e1c6-m0.avro deleted file mode 100644 index 92e49bf712de673d6be0543e7c6481c057a2f1d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPjBNy6u^@-sw#vkBoL=PjLbD@{HINm>}e5Ou@aPJw|lCBHL)jKZyk>rk6VQ$ zUw{Mf0r&uj6Bq6vfy9A3dqSL7d;xB}HxoOylMQV)Q54yenfKoO-k*8%$>>>q|INg^ zU=#Xs=eZ%LF*626B1P&+qh*W(7W#=XIDc*gzA>;`Mnoq#gA1Pt7sguInvh3N;Z3m5 z(?Bqo3^LfPr5D z`1RckBLNs5fHGPn2T6dWMo54%m1&ayt1KlZOx9i?Mi5D3)*^)!5si}zE*1E>P`%7r zEIT)%Gz?L!a>)=Ld^VN#G6BTQmO~sCbkh#fP*@v6TM&d3i zs2FQ61m4sIb0<~=Sx&(=X}YfL@}5fuJJ?1byEkTzL3HAa(#~#czs6OyxyY zky&(i7R$M=kGMxMFv*ig56E>OFUZMbqN0qI<3h>TMlES5L&zvXxn(3e^<0mqkVGIn zOM393WfsC(C&@zlsY(OF$3#m=NT8J=nN=^NdRx z5|lwu2CC6AO6lqGFr7p$&RCY-1GDF~B2W57 z-7CxL<*aZ;p;%oqB`cGFrKv*IIxbm$MZ;8OXtpHVf6)_GZ#G2Nhx}>a(eO+iKg5{O z*q9Aryj-|&Kxg5{G)5O`IwbIkq206*P~r|>e$EIW2;yZ#i|T3jpJ8C z-0Hz(V>NYNqng_PQ%zSwbhcPd6{}Sc;ZSuaOj2xg@*tTv^iH91%PXd#Z5=|8zUpYa zA9-RLtF{rulT17rg?vRxIq^&cYMC0Yit8kQ6&l=repKnV19- zBZ6O(%tGwn@@F4(O1LIKbC(=cpmPDt^V@T|`W&u0CDjFFoyQ-10KIA~Sb{fPIHnU& z0ap>YpyNdaI^`fyrs$R`>-YpT-O4xFz=TG@m?hE$F=A@W-cgrYkNeEq!}F^4-dAt@ z`PpADejXp~ypYe@Up9W&+kQyWiGp@Z4-RcboW7Yu0vawFW-E jRR>e?)7<;@!&+^(aZiml^dOA>rbgd~>5V-YtZw^1b=^to diff --git a/warehouse/test_ns.db/target/metadata/7d69cdda-e5cb-479f-8367-161be6ed8913-m0.avro b/warehouse/test_ns.db/target/metadata/7d69cdda-e5cb-479f-8367-161be6ed8913-m0.avro deleted file mode 100644 index 43fe041a888493d54d017b28ce4304eddab3a44c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&5I*N6u^^g80N4Hg5qfpMT56|^v6uTJgvBc3p%d5vmgwisdQH+z0>LLt*)LS zF8LE&1P}fRdJ#N`2hV!(;!VMef+rVmo(12lN_V%B`>0nRj-FHx zZpY4qP3enU&onWMm^RR2!4pSl4Q=c(-;K4w*)z>^wSm#l0y@PRA$J+KVXTp^@x$O8 zesT6R@i>FYAcM^tYN1(L=u*L!OBcV^FSSZbrHPqVu+&?pci7O>u9|4K-T?DiAUxO) zZ^})d)m1zy($3n!KY8CK3V=>=pMI>1jm2E9ZD13^a)2>QN3Lhj%ff!G0{CBI1; z5fziNB0cZ!G?p`6?}rY>z$A|!-X~X{n2_T~L`E4a#)Xuxj9Srj+oohhW9AY-A|?!3tIQ>sxkV%@^=v0h zAc;VDn)Kj9L(he^N|L4a6PX4i91|rWCZ1A;jEgEH_1OD_*eR`Nm;1`EKMb)3CG``Tq3M!z|9MXsz4;Jb?}z7}L;X{E z{19zQBW*r}@nYe^0hNUx&#7hCDn74P0_UPl{~uSg|(&HgbjT)d8CZ0yeh? zY#LhtHg^XYc@fDAVi+q_!JL2w8(~`AT}G?b1DIBSdze=M2!l7zUnV{I{WI?iM=&fAimQ_qm**b(E zec91?FL3xQl5Hc1C#iTc^21Tlg>mG2!Vbsdn2D7{uyVazrheH$WX%Qh*%YopsnOV3 zrTvC#tu~(HkI)1`N6-YNb`%00E)W!E%;3VaYT-3gwPa!EW)>df4H!C%m?YSFLZ9I> z!T8h*7~$a+NiD?wEqixCr+{k$Gt@S3p!p@pi}l@X^Lv8(vFWq(=C0I4oqp_jae*g5W{EM{0(`jbwZap`*>be z{{8s(Uyi+`4Ie%gC}`_C_GKi#U;zWe^4-+un;>%V@jRw|XhtGMMsyWMJEQO+hI zFl$3!EbJg|xudqA{G5q4hI`w92flQptsA=D*5QE>^`bZRX4mcX9oMBzcI1qjhu!|T z*|R#`rqMA*ti#-1->_PX+t$H@yAMBleDAdW;`Q2I?T>2xo9f-D`lzEtX! oy-KBqudku0_|*4*c&}2~tKF5OH8lvMKg!W}V0vvI2Fv^Y4@~z>{Qv*} diff --git a/warehouse/test_ns.db/target/metadata/84079b62-f304-4c23-99f3-41b474624827-m0.avro b/warehouse/test_ns.db/target/metadata/84079b62-f304-4c23-99f3-41b474624827-m0.avro deleted file mode 100644 index cd23bb8e90942a93ab5a2fafca88f259bf16edfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&2QsG6u=X2R8l2 zH}-_M@?Y>5z+t-*CnOHsm+J~nTsZRHOzhZ6HniD9ZDdbo-h1v zM)dW)XSx_COdsf(NOMo;P zFlVea6L?z}Or1C<$h0fANiQHn?g2mj2=o#a3oe|A3{3L$uAFt0b9eKbC1gctDhdjD$)VGOnwT)U)s#=7h21js=^~Wz(p}kt&eoHcz>r z5kVOQWuO`*qn4f?kMdFM;EYA-JurJ(E6SvwMLtbaI>xPsf{mcoK^-Xy%d9RHPPjD9 zL+8pgdnGGeQ7KlJOv)-GU}>78Y97`szoJntGqhMz?7!*>vo{%{>mz<1dNewf#}Cm* zG|?wR7_S#D98g*KIZe<-iVg{VA~^gZP{|VF!w<8|y1S%7Dj*h7_Cfa4&<&vM14_#% z0o@&C|L!O)W78;Q?zAB=y(ssgZpg!f(AX!(^tjFzj}>PXV6#%_-X5@JB4BHMz?QiN zU~6-Lkr$D?AcnC*)y#=$yb`8;xXEa>djQk!uMgAi)vUi&;@kaA!ojA{2qFPpM zRUztlBYq9Ns|(zr1q71Sf@JM)60LQBae7!PxpN_~4pyUGdg@q*n`0|k5y`3!F;9{= zL)_@WWMMV6-=dmY|5HtuLbNwnP9>{l5aCdDMods_bjl!^HuQF-aVsmPu52AbkiO|? zd>DJ_IFW55h$n@3;zr!9yD&?lP&hmYGA0%h!LIajrTSS1Q8pJWVk5W)6-HxcRrDLG zwOVYRlKceC&aZ@|!DWF*JV6Z#CF36_q+ zn30rUlfpvm-^ynnbPBj8Ky#Pv&OzrXFfVV<_3E>??39!jkX0Uk^a=E;Ny;+3;leSU zfeN^azy%#ID$ps1nKVVUR7J;^LenjMQw)q~90n{C4v0y|`s4$7sr9(eylp(M8aJ=B zlkaZ+;J^R#?Z3ai%-+#{yVufwe*WY07r*@Z_lu?mpT=KJ-1MN^-R)k}lwEM3)`iYk zIB~Y?yIn!kb0)eN@Lkg|jILptMi>6^3qA(C!LVU;j84$A-CqA-uR{ac@9gdOgHGS| z%#Q0Dc3^l1Y~S~Hr}wR$#}7`veERUT_4<8nOMBI9{nXt0q1k}vR;#tu!iPqyvDIj3 j`1oG4p+2qcn@<~!E$x9E)ymPAa`a=Eu5H8M{LcRaMD0)< diff --git a/warehouse/test_ns.db/target/metadata/9127e543-b7e7-47f2-8da9-86d195e03115-m0.avro b/warehouse/test_ns.db/target/metadata/9127e543-b7e7-47f2-8da9-86d195e03115-m0.avro deleted file mode 100644 index 96103d3deda26a50791944ebb1509ae96adf6edb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^gRP}%=B+v?pJ&b$h%3^b_!~H{xbPqF-c0P+PBygNL`mdKX5M@Admr=Wv(Xpzz1I?V z!l&%Tou`JJ#oQPei4>_Tjg~R?dEh0+;K@_N_lyB;86lhEj7WG~I55`A)&x;_4!;Ed zGW7+A$smKzTY8~YS?DpzmrEDF)-SayOO=VaR@OWb}6EL zt?--oGK>UZxB$v%ksKrek{Tfa%1ow7{;#r>m@rv;ff#-$jd_a{R)j20CXrO&7ee(i zx?J|e2-6@yvC1Vwc<}g`rGYdC1pg|F1b^|+<8RQHp)J@t!yOj zpn{6A)>7bgU9fOsMG&-r>e83rafd-Q-@`Eo*z9}^X2yc`!wzBXz_Lm@ISuT{3>8g8|lJUv!) zUE2c~lvx@GYFfCRjPS!O9|<~|$TSXkOK+Qz5lgs70EwJ%WUVuoVCI&Q=+txED1{^f z;aSpy52;xQYn>!Z?I$V?NHiu|LPC743>lYIDC&v-6?gp58O<5Z2Xq#G%3^eprbB#>$OzsDRI!Bk@ciVW>@H=H4v1BheUQB{bPFi^fYLH^ zKsQI(zd1_F+%`&;J1q!IH%L9G8|v^NEcD0;J1MipW5wA7m=+4%s{^(u0=8}s*rK-p zY;6xP@*;{C#4uKRP(B> zD?}M@5M4px3(w7~L z_d{3AV%0W+c#?@HqaYfUU6{myFP&&SPPkl21iR47O0@oYw+A`Hg}r%P;1t9YPAMF kzFr4Y@zvb@^W$1=r}2RrZRkN5eXd47gz1f47_4slKZoW=;s5{u diff --git a/warehouse/test_ns.db/target/metadata/9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro b/warehouse/test_ns.db/target/metadata/9dde4c7b-f563-4f30-a379-e5bba52de832-m0.avro deleted file mode 100644 index c7463537893afbe346e2a07c15e8384c78e6d45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4407 zcmb`K&5I*N6u^^g80H{@qU>o8MW2&Nf6V4<@v!0!F6g-K&cebF+Ddn2(@uX`T|Glw z@-K*2!9PF*K|FX6yy;ah!h$Dn;^NJJ!1t=so$gLH&ScYs(5Y0t_v-gP>eYwiPwEG+ zCC-!u^u>*5nwZ5*8)}K*sUx(OHu0G6Cfe}qndZ6L&}eBP4RA)pUB+z~Yh`QvD0~XP zIQum9ID^R`gUwrNp;=kzQo)u>7r)jowJJ-ciMdv=)LW-_)Y8q4i68u7_ zT4pSlooQj}`zThrWCSlRo6yu3+K}L1Ws%@77COuh(_qYa#Tsi{u@lc{cCu0S(YCUY zxQz-b#+plkS9QU{i4{SHRj^HZ0U1UP@Y9Y#FHylj(2+xezHgC;JNQK)b^vI_Z<0n# z#k8tOFSWFj$)zWz}KhRx}hM1M^yDORiz7-Q?-9 zqU*{Yz@W_1fE&7r+sOz&$nue(qlrjkpS9GsDH+p*xdf1iDMQvOa|vc{8Hq|g+lf+0 zA`qS>J^0Yj3t_F2WU2i`rU8j2L`g`9r<5V%vI2tj?K~l}W(TRH170N|s+xKb0ApEy?y@^n}r$kI?mg^we{xe=3h3 zq6IY8<|7y{7cLx7S@;2s(M5_5@mwMz_#jZp65_-4lJl~=q(LemR#6T>_QKE|pd0{7 zQ_lfiALZcsC{2CWC}r-nATS+2b)jy^!-LS!B`5Tx%odLodlO)zQ0QJAuxTJ*b9=z1 zu?1jrcYu)>k-Q*=u|k#132C?yrq$bJv|4?DX$`iAY4uCiUn%je!7gE9=YsVB;!;t~ ztG22TWxRfL3BBtWxI+sFB#Q;fyuC}bW*6hMmn*q;Auzj}(XKsp%--(UN>)U&Dnm@; z_~j6HdN7$-O|4g`rsn@t)3p$-9hOtcY8^y4RPBHXij7VlB#VaLDl~3+#nhCoBM8!$ z9gX)whtFc!HiCGPi6>(}8kb#|#J(r&XfjEdSV;t{(97lOmmNgjTri&na1F|g#?C71 zH&ko2@f?4ICI~u)CMdI`6!36?pfFoo?>6>gIprJQmiLgNopK0^Axi^ZdzAA2)uz(QN$i5i5=U?hBlihitNeEdvAX4W8Qr2yr}QLo48{(p|5vd zYGN8QZJ;HBr>@Xi+Q?^tmuQ2_mzwWs1EZydbb>P??lEq|SSwo-MBx>@arSNMa|V+^ z2Aj3iLbI~aqk=7#&fiuqwJJ-ciMdv=)L*4{*wWOl+Gw}l0`plYeAo|f%T2*J?rS)E z5K}IE;YVRRiJ9BH9BSnenAy-Dj3PdvqJ6`70#h62z8i%CMDBs{^h0{XqXVVzhfgz% z1Yo!TN^6lEBmt5NApy!%q)Gm-w3O&DS$TnIekinAixgIbG)~5mkl^P+)iPtT>{1KU zAV9IwB|~`d*odZq&;|tmDvJbvvCw69m`)tVE7n+>iXHg@vy-*54>y&K#BEeiG1goN zysHc5POJzrtb%RQ3&=2XfuD8)dWi}Kf{q*z^nHs&+{GUPu>(LWev>p}D#lesdePlk zEa$quid>3;NiLq9l3QPl$;opfql}f~LdsW0Eomr32IjTQmR!R|yUEjIN!Oh{fI*q1 z0XK9Lx04ZmlI0^oM-!380c)vkQ{vEsc?6J%F+J^0Yj z3t_F2WTE{`rU8jYL`g`9uaqIFGv6Itgu@u`Im@X3uLyp7e{zr<~I%ZrvAb0<{k6NLE-Dbt!YgwPAGa8^h@3 ztZ+r4SY0zIE0chwsY2E0mMp)aK`JveTaxX+=n11Y8=~uj=*o9#a4wG@qD^S5&4w^u zE?hXEvhXpD(M5_5@jW6U_##lr65_-2lk2j(q(LemmQnUW_T11dpzH%mQ_lh2A7%gk zC{2CaC}r-nATZq^^`LIZ!-LS!BWLui%odLodmUh-Q0U$suxTJ*b92C^u>oLndw`J_ zk-Q*=u|k#132C?%rq$hMv|2rYY4taUY4u9h-zo8}{x)G^=YsVB;!;t~tG22TWxPRj z3%#oY+@S>olEs2#ezHxp<`KqeH&=4+LSP=PN4xUWF}vGiD_IfAsthrW<2OUx>cM1U zHMQQNnwtMpO;1ccux_lbT zwh_dWOgwRd$SJ!pi34BQ(P)$~v6Ki_p_j|mFFJ_4xnKdCz%?i{8au13-%zd9+H?Fl znjokHO;Bb>Dd6D(L1D%eEbE;*<`k2o;TZ_nlGbGYi1loyb79zQ*XUNz<{!5c0d(+Q}6s|Z}s z@uC8qvY$v(R7;h0d>oo?>6>g|LPLMV5@CZFKGkL)$V;sodCc9z^Q!jo!xtCypW}be zo1cIAOXHi58o%x|8bAI1*Ke=BfA#0nTCMhX9d|tFbPhVVl(TUJ$U4v#3p-2>Jf|Zl zzha_;(caMwUGM0+VZaYO8Sn~kI0T=z-tIG3?;HJoyMNg8+J}y7wVkf(v>j#|Mqk&N z=^P%+FI)RhK701`;?a5Y_4|$8#vk?O&-L9O>os_8Hk-Rme5f^RyR}*aAK%*nQ}NT> edw5!_?KZxUqfIpkqwhS%(PNn2*n`39w*LbQdPS`O diff --git a/warehouse/test_ns.db/target/metadata/b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro b/warehouse/test_ns.db/target/metadata/b51d7c58-6338-41bd-8d9a-c43afbffe46f-m0.avro deleted file mode 100644 index a4df047e5b07294fc6c2eff00d2959ceaac2ece1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky>BB$6u@nt6{SEC5{T*qqpj_DKXUO0)gdn8BnZb{PC|;T)$HzUyqERvGCP}K zf*Tq-M8V%cO-n<8KteRvAkm>iLKG)jdfuDyu6J#pNqn}VXgr>I@6GRh%$pCLC-uEo zQg_70^!cqTO-vG|4YXA7%oSQo^8*%osWv#h(gIH#7%eTLV_Xq)k8vC3TKS$Zj?Um4 zXP;yNXRsJ#uxU$eG#55{RIvHh*|*hOt%a@9#6l}r8m!VgY-#FLZM0i&f%z;F0i1`o z<)L66&o!LhPAC_F2;!)nCd_S~4z=nGtZeAF{g{ubXkRd%!qSGh=f;r$k-K0#eS==` zcwZ^}>g^mO0T?cT(psbdNr0q6NPsdGSz7!mEhRcER$d@l5D9JCBBdP>P0~>;B>0(7 zwau7sJJq5r3{k9f$q)t}^Jx|eZ9wp+sz~q`i(F<$+1O!x!5V8*v3?LTJ6$XLU{l#h z+(rcp#+q}1*LA_ni3@@Zt7Mz>0y2zU;HMpdUZR45pd$waecvK6ckv&A*a4smev>p3 zDn^Tn^s>A2ST1zEAG;I-lRSQSpIioFM2;R28D*>*7gD}5YDq&WGBB@YwiFsRI!%!t zOS-P@0SwAK4Y;A3c$}Q@gFGJzI+}0Rc z5`pkM>A{DFUJ7fKBy;V@G7U)V6D1)ffl`Kyt12Y*H293!L1a4qsNNl!NpvvFkOie>3NFnd-jilm=MKINQF@aTbHW2kjdNAkiluS>ZT z&JCk$Ul>NOV1+wM#p;|%S-Au(O$$_wZpHEo8fG#>^DX)L%bqZL(;>P(jL!m>h9~m+ zA=;QG+H?r>)xw1nDhofL3A#wpA%RCk41WkzvV{2Xg7m!VE@_Yoh-H+0kUcYW3n=@5 z($ot;H%HmOIZ9LCHcFX0EeK3E%si+Y^70@w^2jkguCm2z#a;*4C>6Sw2W%P$*xVej zX>0)4+#X=$MIj?EL=|rsUqbKd0C#8sfn>QLnRm8{);z>G?G{RITnNm=^=Mb#I%ao!Y$YoqSydrs zN%CTdTfLY}tftmWR8#YRs_9CI))vdDWVH$+T&nh%35tzQ5hSyQ-YPY2Ma9&VtwRXX z7hR3_B9~7R**1cBl8Yx!7&}!Lrb!qGJNEsQiKRraO1)g6e%?V8%>@hD7@k47(b!q# z{f26-*52cf&;&spXo7M(Dgh4<2ns7E@Zedt@S3T*VBz7-EIh&&FmxCx$*}W;KEq>z z@o^9_!sAPlTZsKzG4?>GfM)_Ucj^8D^q2$l;`LmuJ_oCAN%;U-=kfdRLa&-|mf{N+ zuIUt1z*7Vs==e~9PB}=WDXOK)J3bCgxAaXuF{V-AvsBn1hEKHV>+(_S#vXHb@xH2k z{O!}f|NP~L@2@^Rd-Lh%U%b`$^;VutU5+%dead#Bevw5(qHz;L{F z&+F5+dtg!D@qKo1=b{N5px>4T&@F&BTuFWJ8;c6-CZu=Djz+_c3oib)Pl&-blSM zo6whcp6gf@hx4+xjSAp`Yr5i|2aa>jSf`M|6TSV(v5Uz*sw96UNa~_{G^5 zS-=@g1{rMDRtv4#LZ1q@SUUf;dZ}GoDorf3f~CPKy~DPycGW?su z#&KW6+1-S45r`m;I%&eZ*2Pe-j=)UKxI2pZgo@4;<0(wltUWJ|1c=-PS)1xNxU6+!}(smRjeUuh{ZV6yT8(Su0nvoPjMuEOHx)YyLgu7vWgl!R8;Lup zpk}PK5O`A;%$-;hWZEU$q!*B3>;XUh1oRRW3sxm6@8^&BtGAc;VD zp7h{D(z>)k7h%3eHcFtJQ|+K-I zn&`73j8_X64yY{rgeK@BMTZ1F5ixuasALK8;Roqu)m_pc6%flP`yhL6=oV1+0i|UW zfNqbne|wacv2BzxciIq`UYPk%H{{_#XylVqdRk?R$BMHKuvsc}uMgNV5wNv6V9VS9 zu(dtF$cso`5W`rZD&|BqS_{+eZ8KW!BYjA{2qFPjK zRUxW)!}uC{R~NWL3kW331<87Un`o^=jMHABI*glKQEoJv-!Ai|;QOqih9=oCRRZ|Ln(<5pBmUD-N>Abr)* zct7&^G?8s1h$p#t;)bzXbzz!>fpFr{C}mT1X!v%uEj451rmMy$ts@5z#yq$$7cmswGBPAJjp3rCbOfWtP zB1U+8O>zsde=FX7&?(@W0L@*xUxOZVU|!swtJUXV)hQ`2AnQE-;23(Ro?M&Xu73u@_`ABf)PuF17i48pS>+FwO;HqZx_$2#^?Xq zKOR3h*Z%zK-LKy}e&T4q-Dzn*y!hsiU%&t9_kWriJdMAbxamQ+yWhR0oQ-3k)`iYk zI8nOqyIn!~Qzp6?@Ldz0u3;KR*MRS?Y2X0782EIIj_OJpWnCk9^QNO+4=pm*2}lF9qq4X>qT?tyJiF4Tdmek3tt+o#!jQ5;p>~t fhI(4NKY!F{>}dDos8)>rB1b=j>Dn#~)_49Nei}%j diff --git a/warehouse/test_ns.db/target/metadata/dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro b/warehouse/test_ns.db/target/metadata/dbe47ab0-23b1-4e63-9170-dcd2e30019ed-m0.avro deleted file mode 100644 index e5b30cbf146e2621246c3838cce2d037e48d2544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`Ky^rHW6u^^QwAuo#kU&&djNFoJ{IP64XzosTD^7ytxZSH(ku|m_8{ay%8IN}r zPLb%KLWndp&IOk<`Ev_$aK6cJcnPL zeV+Q9!DNuZW-YbQtSt1XV2h>mU#pi|m8H_eTq{`WuhKhgX=+z(v|De1`79JZ?1#7I zreGZRHJsgzDHp!*qp+RC%x#_xwekqeZ0L7K5uZ@ezGOUssSR__jY0t;cfol29=+tz zzEb$jhZ#l!FkAqowMY(<07-?A0A(uDB>z`hN_3d4yg)QR6xyss3M)byC*w#+@N=PR znXy=QriEz`pjhdWA-s5OMAJZM1A>2*MS{Or=rTJ@Cl2EkYphMhj{Jbx$y(V5o61Jw zHY%tXYc2%d)CF@VRs+Rjw4YAzdkF^*J$%(rEwGQe?R#+BwDRaVw zVRY?F!|3I#a7Ce5T`(ytlYphELe=P&EWe~dDl;@&lI_3f38Oa~qU(d`+;?ekDvuwc zO=zsmhA>_(TsWYz@Dm!NixeH=dqhO=L71Ju(7ice(?G!H=73FO z1Hk6?03$CVc|iTeFy>Xod&QQ}+uZNkLP1?vICrJ|Zw zZB-%4c!TH)dRGUyLkkEbiv`L2V4G;oLyXgIuH@E*z&u=!cIByKcDKh?vLcdI8Dbj8 zuZOtRgUQ5dYP~@XuLgSWKOikH3gdlz0 z(fBBI`81YoBZw!Nc;W<+Q+8nz2fnbQ(I{bJDG{tfFPE!dbP#!S!2&jcYfxr1c2-%x zp<1i8=lBVlAgBXPP-aId;Nb#6Va60LJj)i|FjXrS9^THvBfJ4ahmnvJJ5T5{JSG^Q z_#q=ax+0l{*uUlP9_SQsO@QVu*{?v4I55v|&*kcKuacH`wZ?b_24gC>IgbiZ&RGYmkFSTyuF?Scwt6J}? z_kaK6-!D(TzrOd^*}a$D#xHjojUTSRe);QnKmPVly;iIJUB@jCI-UK_73FLk0kaPD z#ljAgeb4C#%FmhTV7PY-csjbF>m41wJBE$}@S@|>*4v)L4!YFQ+ot6h?E`jbwfjaF z#$C^37Od$rZ-0K<+Iw>U>1WR#oi<;+)7WYJS#Ms~cfPIH;Jw*w?lkeG)~xN+Y7KmS i8%@Qhx%<;cwc1YOz8r0+K^Xm6jy{0tja?Y5?)yKTkWDWD diff --git a/warehouse/test_ns.db/target/metadata/dffe770c-75c4-4839-acb5-7047ed32907a-m0.avro b/warehouse/test_ns.db/target/metadata/dffe770c-75c4-4839-acb5-7047ed32907a-m0.avro deleted file mode 100644 index ec55b5aa4ca35098b8113750040478392341c70d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`KPjBNy6u^^gR8Pqw;NrRFd)mNgX(65BiimrRJ22PE_5@LQ3Ew#T zD)l*o#UO*tTWX_O+2~QhmRlF!)^D{cTcwG)RxH=KBc04&3FP!8|Hx3_LcbX&|%#!Jo<^!Cx$NnG>ed5#tqWtZl`P{eU^iM%mqMWg~G1 z6;zBhmjZ9=f`t<+f()x*oAd%Qj9lQS9fMw?f`OnT2LyfJA`y4-gFx&6(2CzAjhKo_ zRgqqFcNWXJuFoQuVqlWe!TwXu>=KNW_F8Yn8bKGq;RHrJmzPDI^gH z&ypT|Xy}EoR!Oqdek#*|L}Q{PB*a(Bka1asq@MU+Gsh2|(M+&vE*p9=j#Ponk9ige z8W5C0PzI_|GD_*`MnO6a9bB<0y$5D5YDJ#(%gCpk(-|J!7ixXDl z8f)_*%$ExnPN*#WoW|%PMThtv5fS_&P{|VF!}F7?vb&@~Dj-%-_CfZ-&>f)c14>iR z0o@&C|L!PFeb*>u?zA8<-5~X#Zph1n(9k2N^t8+tuN7w#V53mz-W;%LAYgNQz^1VU zU~_kXkr$D?AcnC*mCOlgxDlph?=o7g9>BEv+rzYaCF^gM_*Q?HFtKyNdH`{$sOD8$ zRfsa)Ai9Cxbp+g@1q71Cf@B`;60P|VzM-d+V6??$}CJM6xPFOyl_V z5O;bpnOIG&H>jrO|5Vep5Um}SQ^{%_M7UI)DH9YMojgbu4ZT%p-13U4DO-mSq_4Xg zAB8TT#j{)2l`^+ zgvp^d>Ilj&ndo4+cMM%OI)-8B9T>m|j27Q?U2p4cZ#-tUt-Ede$nCbfJ*(fQ?&zp( z>s_09mf6>BdboIP9X$Tv$(QGk&YG{@Y3w!rs5gJC?|oaZ!MNFM?lo~xYu5H^wFVCF iqpA4U-2eHLT5YfKp`2}~Ntpdr&VB^T8~ZR>J@yRJ5Tq=_#^Skw_JlmTfNz3* zl?H;rVvxb6ZN1U1Z1kyQ^R2UQ%eOj}t;)n)D_9yV(>rJz`cxgX+iZjRERq47M|9Mo zU>?sknBI%2kbw+%)JbCIHO~h|c?MQC%zGm)##DB$nMh!1!`|_DBthgh7*9W-*MjeA zh2MRcVI%;<15ierkmVF?Q(i!Z+yj2bG3X^a7zjGDPtf;m!i9(b2*eHmt@usRh^f4+ zDl&`i&SE*&^@w{E1Cu;^`jFfN@{$~%5*1~v92ZKyHfljbAu=$pRkq|B);dj|9t*l| z?EwtREDeNZ+IXCd@RKYb2|Aj{G!9u?ADfaPO_)yriM(XUT4yf7%q=6)spon;g(L#u zS<-_KEwd2TI!Wf*PgEKZJ|bE|LISM}8JATk>Phf5bA!koP9&@5vSk+INEgWbm}gwl zkf02LGEj|{QA$sbhv_(SamAwaLoj<*EAphDM?MvTPVne~WMimxP)D-DGOtUS6Rs?) z=U!XZVa^J76pGaqQ?fD%SehzStzOCUYZ|61L$fW}`HP;g4yOZjeaJ5YkA`RJ`XR=c z#>R92^X0;Y6FLhY(->W(>5#xDlEWVYRV*Ps{2;k1yGt3Q17Z>75y+kyx&f3&fYLT| zKzB!Zba#}txoMOtciIq`UYPn&H`L`pXylUVELnf6#CMK12@^XPtOpR6nrdFP zb%iM74fzf9u0!AsEg+CA79@LrlW6S&jMHAO8)e;Hpf=6B8pWRVj9P9 zhPcs-$;N8xyhSy&|EHQRh3IUsoGMn!Ai|~Uj+vy`=;T2%Yv`RqQUp>R-^IbKR^Hb%};;-@OiCP`?HQG?svPp-5V;{B?n|(Xp5yA zCAFoPn zZ{Hk^_L$Y%ojta8o_zH5%V!VHny=q$v>JcZo4?ds-`8s}ZZ?~(CJt)NTB}xT;PBl# in2Mj~_HUonYOTh{YPO*#VfK}p{REabwqde*?Ee7LYDz2s diff --git a/warehouse/test_ns.db/target/metadata/f15a9a07-76bf-43a1-8790-6c20032bb450-m0.avro b/warehouse/test_ns.db/target/metadata/f15a9a07-76bf-43a1-8790-6c20032bb450-m0.avro deleted file mode 100644 index bbf2a1a61c3b89f386d558982fe18fe77a8eb954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`K&2QsG6u^^gRP}%=BoNX{dl>n`C29Q8HXnOh#8#{XW!dd=sUmA^Pa0Fl_KwFb zVHJV6?E$o0_!~HI;1A#k5-0uw4xAT`T#@4flGk9qU4^I3iG zjl>HOE~rB-FBG%?o-minvo4qKYqRU7TrTVOs5g%A7T zZMi8J$9)ZFcVfzgFZ?KMCoyxIXG5(#0y7)>ol(RmRJ1P{Phe`p+;gK)fXH1ip1wmb zd9<$-etS2=NC1WlptKgrK@uRT5E7tFMVjPqrKLoN$;t~v^FyJ{TBNWdq;WEigakhq zs+JjxWoKHL1_6qdE*Zju$3`>_gf<}fsw@)x#X^_aVLEXbuUKPkDt6=t%ud$IKG;+? z61P!7#aMG8@VYLTJFz0junM+GFCfFn1%BEw=p`x`2s&~=(DyA8aTmV`#0~(h_)XG? zsTfxk=|y*Ev7GDrFmfpdCVBGc0lD(Um>fSQGRjyvE~I>A)RKlmWME#)Y{@ljw3|FV zmULa)0~nN98gN55aXT5|hgm)nbTkoZ9I%$!HYE;Cm`4DK7&Bz8GM8ZHmXWB`v)w3# zBm&`C(t{5Ty%5$aNfz2qWEzlYM3jVt_(~ZvE~}8#6aNcl`=RYj1*_(=p%>#w707&> zr;(rmK^X*Ppc*Bkl%8%Bq?6Fb8OzdpVD`LL^vN8!+nkrO{ZprdX8l*BqvnAR7i=Hrgvmv@Zh|YbN2B-4) zA=-q-+H45p<-&ynDhofNF}g_6A-+dM1Rn${SwehxesWQEmo!KP#4^f0$etUz1(bb2 zY3ezko1^UC9Hpsm8>P&h76hgnq#o1_d3X>SdgO$jl-c63Vy^>i6bjwz12zo=Y;F$N zG&TTiZVxc>B9a%xFjlCNIUx<#!nC^Ej8>}$Fs=UPFs)w6`fDY=)!!ye>|C%OKwK)S zdDT`GqKr3)uAp~yfIGB+K(bhn%)@P>HIFb(ySb7Z7XtHWJ=&G0j@jKFTgi$@R%M83 z9KRakRu3ikxwU zRY&9f(B;!uwv8a3Wa5bvL{8a-NgVjXjz*(|iKRra3cXyee$heX%>@hC1g=4u(b!pK z{f26-)}G^!(F8#qXo503N&ycS2nsW%aN$|D@S3SwvGC|-79Qgb7&?rEq}X{vpW!jV z_{0wx;n5YzEX4jTfA&D9fNKIYcgcPQdc=WwetRxgpMzDWq`ZKv^Z0}Jp;wJLOYnvZ z$8-WJ;3@(abiAlQr|c)v6xC8?9Uq6LTlyv&n9$H4u|(J)hEKKG+wxNDMjmr_@w}@2 z@b2yJzyAEM=Z9bZ`{~oW-~HJ5?N+1l^FLobfAP)lf84IsYJb;p$AeC1zjH-78%Kbw z18uRe!(`ucI)d_ZCOR1H9Yfc3_%ig4t{X-N{^28k!Hc%u9vO$UPxWrQd*qDT2NpHj zy>4G`AGxNkTc+b29P0b?%huk*dyhVOa{sjX@~y^BD*iQhfBB$R+iBdBqYX6(qrb}0_h5Qs7Y3`_{tt2DN(cY| diff --git a/warehouse/test_ns.db/target/metadata/f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro b/warehouse/test_ns.db/target/metadata/f83b8964-afa9-459f-9bc1-bd03f0c6e5dd-m0.avro deleted file mode 100644 index 2ec12881bad7bb17c39dadf949db82382f599437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb`K&2QsG6u^^gRP}%=BoL=PjLbD@{LzmjoEFi-N>G;F?x~8bu|00Qb!;;pw+gFV zkdXF(5J&hgxFR7yTDb66z;(5VKY$DG&BTuFWJB9c)JFDX=Djz+_c3oib)GbL-bmds zo6r|`o@!#6Fm0%%f@iMKI+`D_&`Y)9*;6g>w4u?_B09ktG4~j^VXTv{3FGJ--Z=X_ z3pj(xAcM_1YN1(M=uyEIOXqK^ms+)@(!@e5SQ@O-JL+g^S6#GQ?|}I%5&`UocjcyF z9QQSv-AyPLfe7NLn0Fm2ZJbi~=@_1J% z{N}wJBLNsLfYLgo07-zPLP&rz6PTK#7Ii6i!i8ZR z+LwmWFIeGl`J7Xydb@(x=R|Q0%95E0A$Y%-2ln~pfvRY z(9KZ}ZjRE_H;q!}P6q}mQt%YeFZZcY}KESjFw})xs{`Dj1q71if@JP*60LcFae7!Nxp5&d57whydFq&ln`0|k5y`3wF-wwH zL)_@WWMVb7UZa|t|5Hs@LbNtmP9>{V5aCd@CrnUmbc!IEH}qDiaVsjOrfeNSkiP0@ zJc?XCO=Q~$;z=%^IAQEmU6>|eAne%pQzn)Y!7BA~h5AJYQ8X7UWD~dsK} zwOV_QKSC1(b)X5#?WhDiTp%dSn8Jl;*}`k4YR$rfn^|~_H(=;6Qj%fk34Mmg1mlw+ zVuZ(6B)1Uzx8m6YodT{2(A=fFHRv%1=Ed!~T7C9bos#kbvd-i8KY(5};Vi`)E*#S- zsDP^oT+s2N0-bV@N>fxzm3Mp`nr`Wvd|*POz-OtjK@6X2v$y4?){Q;pZsU2?Am4p; z^v_Q(Km7XNFMr&AcmLPcA9q@b9#dEb0&Hi?ma`-^`34RdJq2b3qCr$!LY7(^{(Hyoc`couSFO!xo* diff --git a/warehouse/test_ns.db/target/metadata/fe837347-116d-42ba-911e-8d2f1dd3b21d-m0.avro b/warehouse/test_ns.db/target/metadata/fe837347-116d-42ba-911e-8d2f1dd3b21d-m0.avro deleted file mode 100644 index 731cc9c38d1438ce0bec98c616d1ace80113a5fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 zcmb`KPmkL~6u^@-TI~TXNFYu{8cldQFspD1pg-W z1&7HXgU?%fp;cMvG0B%p7vI(|wJS@NiMdv=)L*A}*fR94+Gw}g0`qw&eb|p^t4+Z; z?rS)|9Wx<)=|^EZiMiW+JT%H9FtcIa9!FxzWc!kf1g18u12+mKh};L`*}LpgM2A}8 z4Sc7f z?6DE1L4abFONQ{`@i9vSX$%PdR2B*T;-Sl(FrALLs90lfD|YM$+(|adKH63`5_eER z#aL@8@VYKoII$v#+6CK`7m#7(0zcyf^b#Em1RXgb==&Clgo_UXu>(LWep57JCMQ)z zX3^bQEa$pDk6eaKXgVj$*Z|c&0-ws0-0~~ERrlB zD1)F3RHJ2-($kHCbQ(H1V^w+&%wE)rJn5H_&xBwz+`2FM6lxvRk*u&R>r&=~3rf4r zC8fQb6|N{0s|&7VWfHJ7RjAT#$?{7Uq$)$RCE5Oqo}j(?5M3Wc=f2B=Gj;qBW6EM< zK7{dd;lcr(gjq8Mr9W!ao|fQ8jlk$R}#T4^m4iSWe1Tr7d+roxCUiLV`r818@jdH zc#c0r6C@i!6O`Fe3V66cFqkoe3(u;B*G$!lg~vCu@C0wb&|xGb#m*D@43A4LrhdqY zh^|OxA@*Q?=T+^);LY}X zU+@3)$KTKBbN|z4jo)uI8o$2y`LBQf{QkSoYPH%wb=>iw(>d&1F~KJhAnQO|ES)ep z^hO=Y#5tE8jP{OcniL+?>`;8b$E5JVano#@?J@7!UHhopru5irA6X;T?o-O!Jzp2rWV0vR82CLit5BRA_vH$=8 diff --git a/warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro b/warehouse/test_ns.db/target/metadata/snap-1333515437760368488-0-d28c75c7-08bc-40c1-8d2e-247132bef819.avro deleted file mode 100644 index e1e87dd81ea68cdf743622d7f9c4eab22c75cd4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmb7FO>fgc5KTi595|wKLCCTIAymg-N$mEFkdTlNATCtMTJKI8gT3qSuA4?x4*V7* zxN$;A9QX$a@iWSWKhOj0CULs0Telp1uy@{jGjC_c&(gPRH#P)Cr5H2mWaPddhT*^; z^us6`df_nc$MM|~aiG#M!{R84wt^_|Jr&@4L(li_2-vHDVsL0xq`g39Y~XncRr3hRGrFro2*aBADZ@xAY3tRCC)OmBW9#utYpxIWY|}bNBL}*Bj*4%n zyYPXYx+YRu*05>x(GL`G{ zzAj=IwlW|>fFyNKoL6&r1^g(>K_r+}&GNmzfp2&Q2bqxSvXeFj(}M;BfgGeNp^d<_ zph2*3fV0U31^DKrH?Lq-K?_5>g>?lj1g3}06jpsJ&bE(d^xlq5t2|c`Cj*N(M^lYa z9u|5xEQc{xpE3!Bp5T+{_VL!;k1{G$8_rc0JD_IVGMXS|EC)oJ!?S>^6BRt)AWO8b z^I0y3RTXwk^F|#K7@;bcDqXF9YN&HI0iL9)H5=pX8%xLFok|e)C9G9hUdU=JnJchr zp?XE~ffw7e*(KWVV44&l5kV3)tTK%LPw~}$){|t!1FDX=8?YR^6a~ZQrfUDe-2^Bq(x)SkSkZzrljA6n0BhbznqgK`1f^fmFxm*oouL6%rB>5(o*YLe|Ci+?d*T;qKfJRoUpk z!pv5dN=!`s4GfGhF|aTp1~wMNz&VN2Yu&o-;=%X6?|bjN_uf6~y;!)qDkvU^K9g2L z?zFrP>bS`Bk>j@7zTa*+w+EO5m6jgnJD%rukn49kUJwMX=La_hyv%_{V9`A50blfP z#EfTHT06i+!suda74LA?6j2{C{PFs(DMte^*Bd5>h;d@BHOx4HlnC{2bJwIeo1A8t zCNT&Z4zTRcgH*CAtc{RDl{`Z7gl-ifghd7MLl$AFq#I8kKWGdS*>Bu`(wOLjIbLg= zqLBjKIz`3NR8poij-i!7GAVRIF@PvknU$rKS++EMLgjII#HdsTp9DF69jJ6WoVr~B zw>5Az<1A6R&hG0hhE6R5CIm=W_QYv5yBEO6NeUv2SY9n3c^bar8N5n_RF@srG3Xvt z7zm^wRS9(jx&;-2sRNu1&nUprFTHvN^9pJh>MblQs3FijtfnyUTXC{|kk)&fCe71S zMH~$*<{Xa-jPfumcEfBKyXsdWAuA^MD7t>Ui|)q>6{-yh4hh6KPo+w?P(L=*DH{S0d#W`nfjN5Z$hj;J~Ru<$_QY0jFjY??*RVaYRT6BqR{03Pnyl*)=3~u$?ZeYQ=>^ ze+^vvACS10BjQFcT=)gpyPK`sv}w88^WK|zo*BQ4-)-F9k_;De!j(tKqwX;1^@4sl z3egS zWn&XUcw&fO@B}L@?Yw#Q%$ZU(ah|?*7W&}Mx19?#GGOBiRFI{TajkI%tsPO+=tQ!B zB+{8xrBqpVEj(rFEIi>%X-Ch4(69+qxg9Otu7L*@xSnxNb*`)Tx{P6`kpU9|B&wR= zqMCcxz^60=86~`|mml;ke9bfXNTt$`9W^o79@H2JWT12jO$4?DHG-uBf=@3g0NIaT ze}Z)d4Ghf|Ruwc5*dEqXSof_w-#&rWdwZ@KZyj+uuviE@GZ^h*ZkEAn7(;zT735}u zPota1+jKvsOzJjVs4RCt#W=E>Am%&+%<99lgzFm}yx1TsG&1?DmczOVx1xEgFA1c$ z%#=>osGk|?j88#Cv2M-UI3sK6SiCa@(!GMUEQ(86ttE2}RwGocNHGXPcRs&D`#sE} z926#4;hI&J(f=vF-p^)|-1(iwl215+WbrSw9)J7(M{ijcLo$2k*w*X*uyoT4kK z=n%hvL`6l#cTn;H`2Y%vAlSV-Up8^#gvQ10y!U3_&WxYNZ`Q7DFpMfTCfv-^y93|$ zhrz%ehT+H^gyaNOq}f;7#NlF+Y;eC1ID8Y z@$o81*KFRr5fACzN>w_`d($CN+0Pmim z;wUNw5gI4Z!XKVXorqPCL?W}MlqSo8g3mEO2~P;-!r#*%$L|6)Zbu8ZTVPKCw=*tt zk?Zok&SMyLGN3etG-_JnteV|R;Iq5{7A2%^mv0Xhe9JRGrXe-rF&7T@)hXcwiBw zXeu$n!&0t>l&{EFFb+%7Gadu+~*|E~~O+ zF2O2=niWYsJ1}Om3$*uO8kN9Nia2Unr5OF6;;a2EC&`#ypD+1@q>x;drfN5j-rxDY z_xqkcd-&?-kC%UYhil)~WbC$O^{t8cw~R^6z!L892(x|~TO83{;8v5Y1x}p8DDh1| zE;5H6^3B*Cx~7*VzGr9I5FFnu?Y@*gysv5N>z|Ik{Q2I~j7J{O!_D*&;dvlk&++7n$=6&Dy-Z$^P+=?D7om=4)4f%ixJt0@D z!09`E&$c|%bA2yx{r>6@RGKWV6Pz*XPvIz3Fbtz_f zhJ?NiIZqgETPtWgXI+j5kfGNXb~G^_g0|k#a=i#(xQWe8!oB;H^c2`SyVcjsnjl!!s+#@)_TAGFC@=Maq) z=++@BrlOKEsj&|&4H8MI6Y?S8P-a$@Qe|l=_=Jl6aLlNX1|I~O{U%W5b~tmp26h#2 zJ>x8qxz6wFCQ0TBWuta{?Gn(Y(d<0J(hVpi14Hyj0D^9&v*T*%7~n;29NY77KY z5VC|O0@Z>V!OVf2jgBb5R4=`L1&azA7@94tDrg{3J*=m&=v#iUeGH}dHZ@wLsf^eg zSd`~zTwGU{ z{(W+h`|n>|d%5!&Z(Lpebmq-c8N1%=b$cWEa~ZILLr=OVLdv@&>Isx@f#_Aq_5#30 zUgl&|9seey8H8XTfVhg@_Aa# z$TdkHyT0z(wy!&8M0B47NXL$i;wX;6@#0GJx72L6e|&%T?cckvU!E^5L=V>fAM|Zl Aw*UYD diff --git a/warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro b/warehouse/test_ns.db/target/metadata/snap-3079425052372487255-0-9127e543-b7e7-47f2-8da9-86d195e03115.avro deleted file mode 100644 index 2c8c5ca7f11544bbc7f50bd165705b9fa8efe3db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1788 zcmb7F&ui2`6iyc@f*z$_L_!cRHk;p@-Fg*45d@{DB4IZ3wi``m;>@J$Qug54f5M}u zLP7A-zrnkIfY7VpAK=XHW;?rS(|XBa=6&Dy-Z$^PydJ*ay1T;(D*2cSJHw9yHy(t3 zX1;K7Kp0tx#F z7|$r__&ex`(JoKNP@t3h$Cj9uVC|U}gOoCC?V8pogB){tc5rMFRLpM+M6wZZk(5Y` zS3xpa85X&&MAbZ8u#6n45KL1={EDVXNNIEb%?opqiLv?otvS~RYqo1%qLBkRyhO#* zRB|dc*3i-*ktv;omyjkhv$~WzOJBohM6AP8N`y3c6XeBhpxW(Z;dTQYY2aqYMJ97y zzSmU@y;cTEMFF1v=*=fsRnWrFZed+P3xV!oGlf;(^3C>fwcb0hNR{U@;$mPCV`!={ z(!)aShUGB!$l;(g)b9feTc_V}88)S+0 zR6fh)u&TnUY2L|83?o$KLZ++K*M>T$6JW_uwq|3TJ#Fb|yi)<(x`wqX%PU#6C36E- zB~-6S7P)2OA6$z8f+iotKdPwo5y<4Kf#lN`ad|?-E3!@Hf=9~WZw6E?|t*$%SQBY>Ea3_C}(}jwFIwP zmTMZ8?>nBO2d-;5!D@~QAY7B8uG@~`nSP) zA+Bvh!4gW^<_g*_Xotmp$k6VU9hHxAP}dc;fS49oT~pLv0x4$V+vbi+P&PTu5J`H# zc$g#Jp9hItMVO=O0#)%aUL<6z48b%miSN)DaUreTzk6F5CcLlQx~EL^K^?CtM`)x# zwvJFSB$bp3jRmwYh$p2^$a087ky%wrm8B`+6T%naF(q6Wd>CYSO`yu{aO!pq>`35x z##thAo!!@Q3~nO>!WeK^^~6y%Tc^PHk`!1N(?Pv_-Ink*&)`YIxVY@Fi9zs2BsO2_i~UK%_oAQ@A)0 z!IKR#LmOp2v*j?aLak^Xh(ioLG)TEfw^Uyk>XZ(l2qV#&wQ)A2r6cih z%PK9IQ?Qmo)ru?}-B-us6SN<}D9nH(j5w-UB^iB2@%er(CrKS&o-Fy8Vu;U|rnYYU z{rc+C#^+!3^|!sJA6`CN{(kP`QW?A6?RL6D@pI|Z0fVk^kB5YHaMb0f*aF_IlI_~a zvn|8vX#qx&X1kH61twt42z1Z49Y1nVpk;cel>U9Q)mmQO{rPAA-`j)e_IM xY8qAmv8B73r$?4%W8Kz}9l4tCVbBf3_uRmeHQVh^&tL4nd-LP{c&>T4^#6nfSZn|Q diff --git a/warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro b/warehouse/test_ns.db/target/metadata/snap-4517289051336819292-0-139ec306-70b3-4d04-a4b6-87de01187693.avro deleted file mode 100644 index 41d1e2e8878b76fbf25e3664b7fd338823863989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmb7FJ&)5s5KSTqBq-4#A%rX+Ty>7^IG|L|Fz7S3+D7pW@ zKR}3rf{u=cioZa06~BSqB+hNliSKB4=e;-cc4qcz^tyg?Pf(PJ36l=N2knmEYxM_S z#}9&T-ygIFt@|0`K&4}ZU8i}H+!OFN2O5Jz^E3k9@b8WoPmy$vfeXTDqqT>QIcth| z0x9}(`^1*B4D2Jz<`6TE?L*5R5lFC5XTuYlqI7YaB1%ReWSAj2SqG`?R9MIJ6sq76 zk`p@CA(+LQ_z8=VRMOUqXOFEZkrV6Db8Ddw_WaP=qLBa{Z&C3Lm4qpc4YYDZ60H-8 z4B}8_R+Lg?*)s5i%1wC8s8o(#1o^!xP~mpCbh`xZ7~pcoDN(tu-fI^_w~_&23^**B zU|Y?>74RdHfCyujm&^Cs2EODOydy%Y#}2C)Ob<#77!r`Ggen5lf)c^f0nVm73h>QG zFF(P$f(nLe3yTUW2uu&lDXjZeTx=iD=)Iw>$6H054=myw%``@NnCfM)8pgglA`((P z!ROJ{xB~pkN#rO%O4b0HWpLS;Ezg3SMlG724PNtd_&N3cH|rr7kgy zP@YJYu2$a|>V!>!hmmT{(m4CZ(lK~v5`=vTYo290S&b!g1y(IotVrJR`u2Q&iS`?q zg(*mckwhh{45R;3e7&FbB-!&@izOd34DsS$s6E*KaA)}E^vC-4-RaN5{wJE$FXoqi94=llI$ jcMv$K*VNKy4{NnXll`6uzDiVn9r&EES5Pj?E>xUeX*Z2nh)Z3B**<$Y;Ow42d0Vr^l(f4MxNt z;0GWE!~k=}&cY91?_WS-z`na&-KI^;YQOLM-uwLC^OMobwVUgbp;C^y@+jGi!eNx` z#7Vf5B>h2uFo-uxB!DT;in_t7Jija9bp;HA$Esokq8n~xTog!o2OuQntlM8l2ZHw` z9z%h?+&OgBv;_B_;|joB5O>RQGYUD8`fT^mWvH0n7KqUdq)JPq#;YKmoDPeEK%;6N zsRU*FCWLToh#zx|l$Lg$KYip(s2V#DpE+}VaA#Z2IT|^z{c}`8OC{%8;}lvuqNveH zWeGUdnboD#S@tbFW$H8>bEdSTXF=gk8>n_WUAWxwp2RTXYc^Fm(| z$WWClovu+oHPktufJjHWH5=m`T1&^`ohp#-C9G9hUdU=KnJcgwp?XD%C`jDd>=Nx) zFii_kh#-X;R#`^>r}%0=n@MtKx93Y9a{_q&FLaKM-oL&6d++PJztfHTc<)#Dc{GT9>|Um>v%%CD34<2cFs(e}^_2+6zwjQU=JhXXH4Py#3p kAjGj(1U(~t{Gik6c0Ydl@%iV6Ki_Y4JDqF#pwmd>A4oqiNdN!< diff --git a/warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro b/warehouse/test_ns.db/target/metadata/snap-5356098321547065394-0-b51d7c58-6338-41bd-8d9a-c43afbffe46f.avro deleted file mode 100644 index 73888aef165b7b9167f0493d961d4fc3045efd0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7Fzi-n(6i%WJ42)H~Ah0aNRL6E4=SL?7eh3K(3B*((>+E}OuGn|x?%WVnnfV9U z`45;_SosSWkk}9dQ+Iamk~qD_jawEEcklbY_r81Y`9*xvzP%?XD#V0Ihu{Zc5DvWY zDCqfNf9MUuVBEi7AP!VIM%XP{X4zcM*5ZH_2OLCB~;a*~F>F$@|R5XOL` zstK;DIk*8nB^ih)VP(C1uW#UMp22$}qXtuDbpn<^ju%5!YZ^dT&ct-CX*?PQH#KpiO&e2R`l!v)q2CHElsUspG z*AsjZ-8|m9`w^i+wc$c#xdST3vC#xEV;LY?AD$&#-KgNj23etfozH4HtgEmqnm6ha zLyF2ws&uvbrJ>H)6nGS?)~t=QZ!8^ycP2sD*RYmFv6aG4-`Z?YesJpJA|Z+~g) z*hAOtx>NNxnXpoTtK5?j6T!N}?RF?L3HjGUw&pfpZX m=nqmS_qtm8{86jb>HPWq;n&}9KYx5|cUr9-b)vo-dHe&qVk@u! diff --git a/warehouse/test_ns.db/target/metadata/snap-54046115295283986-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro b/warehouse/test_ns.db/target/metadata/snap-54046115295283986-0-072e5b91-a728-4a4a-98da-740a6e3ce1cb.avro deleted file mode 100644 index bfc82268b14c4c2e8252ce414e9510125e294d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1785 zcmb7FyKdA#6y05+hypqk8iXt>WxRf@pJ`~KNJvOXJgNv;WBYE_V9%JDah6rI5_FVE z`~nRKQSkxL@B#1%G-)ZJVrF-}nZ$_$jfmZrwj^dxf)i(7>c8uLn$ZtB)WUNW%r{TGtq_%mE{g-7$c<#5<&_tZ7hI$()lUs|L8d_CM6_mWoNZ<4D7-TcOuvM+uBr=Jl_m2J ztWv01k<_z7eLlZL`x(sQ5;)2bM=h%qqyJNUy`SYI>GKBlMigeq2wV&KFiOEr6Qi_-Qu=te*W1{5_woCm-|t_2=?{9nE4`lho=xK~`U*1V diff --git a/warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro b/warehouse/test_ns.db/target/metadata/snap-7056510587748164127-0-f83b8964-afa9-459f-9bc1-bd03f0c6e5dd.avro deleted file mode 100644 index 8fb31b6f1990ae06782b62561c9b8a66d00ec437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7F&2H2%5Z+yJ;J^_T4hTgN;^d#d^sa!{1<)8AT4WLMj(;a%JVVmi11<=oo&E;eju7gx|DlG6kg{pXj z|(5X@pt{D{R!DrxKa(}&iK$f@<!5bo^dhD=?!StZUfFT8`N@yZ5EvOMJ9pG$sK>@z` z==CR9SJ1%FY++SF1A*ybJ%x4OinHzG8NIh->+x0*Cj*N(M{|u)9%gzOtcG!{j);Uz zPw+`}^LXp-M}!L1hNa4K2ULs`qX{C$Qb4pmJWIH`QNiT~S)qNM&uTfWtFSAY7wQs2 zf{IkCbhY}ap-$Nhco?bHtc|m8EFFV)EZDc6;~%N|H821G diff --git a/warehouse/test_ns.db/target/metadata/snap-710899873101048239-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro b/warehouse/test_ns.db/target/metadata/snap-710899873101048239-0-9dde4c7b-f563-4f30-a379-e5bba52de832.avro deleted file mode 100644 index 02797e8e83144ff7310f2464d011521f4f292734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787 zcmb7FJ#W-N5WSpIP^1DB3J|ia2nyo!*E#m3Mo36VAP`lA%-SC37VKTKyUuZn?vGGV zQXvY&pP-_p0Z}3fM1yGAy*pnvapFMX!rpoB&Ago%-%p;cZESLaDn6#d!r4~nI?-qp zg}&>!&M@-)(N={R5MgOiH^MLsqG1q4K@hq-LFk9>bq+6TASqa+E)!sV?^;e-iG+0k zjAKgr-X=O=bimUwl<3`+LsLvEFn0};K}uO>ZX0Hfp~$%Wws&X}RL)OJL~ssV#1#_b zRglb8h6RozQ4J3l43m8olF?KV-=irKQrdX@@UAhzVr<-bWX$!!oNXJYXcR#9Pf>9- zm4Zr*V`yoRz)C0P6{NAutSP0*($nymh~w~-5+Myf339_OP~&#IaJvN#G;llP63bkd z_jMM-PA3D(GRWelCr+!`{|9`I3*d1|>vs9hP{X%8gO`{KdD(FngYH3#A%g;hETM}) zx1dF^aDdUt83nldrMItORY3*=Evq!6|5JRmpVcIpv&-`(pVAD{3(C~q>-V>=dKMYN9A@74eeZqq-pk|hi{7PWFYMekzgG8=$5?(=?$jq8jnk=_9d``qkcuI+o2A>9bQ5UFjJ6XEj0*4y7opG7V zTvzXP9>cJc0bvX{X?o(Un*B@Qv%CPFq_l3A?*YbTQ~2v=}fHAY=($ z1iA$+f~5nDPR}X8(;vP41nUYq7`iQND(E24J#442?puDkeO#^gb}dpDg^V~JSi~5b zDU9^6RJ&m{j3arJ3nU;btF~k= z!K#Fs70E((WXssSfp;JS=~_MN*Kp(WzR zF;JEh+;_IoF(m_*jG;u|?#y&Ptw7(?bP5TfslKb}Sq??Y#J7W)j#0TdEfLN$U_7c2 zAFqQ%t|Dw?SpwDYFivxPC__?`NaANCL0m{{uU_nHlbnyWCoi>yKIrpZ?E;Mg@Zkk2 zwxUuHp>YN+4C1-eiC6_mBrDneix{5J6gKk0*@4MJL57J zxvuW(G6t`c0i`LVQPUF_)jYfgKFbSWQ9|l=`If8TTb{v(oN;m4Q5S>iL5m@U0=Oul zi$JxYMX+>$lF20n*y^RXuV7t42Sc}oO$8kUs)y|q)_u#)w~wXt-hqzmq7V_M1B)m{ zQ;88CmU1_&hA|MIat@`O;M3^t@s{0>a?C^xB~pkWM^CWr|s0O9uVEaBor1TQwo z3T?}LR?A^sh2GG-6^AKgs4lojSE`>G>ViywMzLtk);QbB(ouM)9GHFuYh6{BvMNjF z8mv;NS&?*P1^Rq`h4y=xMkR2RB92;CDMtUN_pZ1^L zo*v8|-S~R)>*4GEpN;PuGIq~22j)clT*jnkU<&tmgxMgCO^)axaI;C)3|z|(W6v?N zq2(HG;tY*2%!Y<*$FBHOId0(iMrjSC^vUC1Z*%j~3;%m%H3ulVaw5-}l}(@4eg(A1s_%Wdse`fO0*? zS3I|8*|zIDwr{zGU>5 zB<=&_!4UC56(o`sVXk2aRLR457L&~)1k

zC|O%g|vF_&JA@G^MQK(t~%8RZL+2w zqLBdEJVeEmR1zvQ_MwGAJT7zsHiRe;nU$rKSy~c4CVW3UqJ#^B4}wgu2~@fr%-pVl zT?t&zIE_WF^Y=Q6q1(uSFa{iyJ#kpg_6hL)H~|(!G_RL$I1;|*89a^|7mpn@F~}a& z7%(KjMF~v=vIRAQnFARe9Z`TOKYINMstOtynk_6VXdsY1tfx@*Ej!pghSYl-8p)GH zMC=VL$}%)AFv7#M*bVbx^ucWi|$7;VWJJEDzhC>GWMh<2q{efk^1n= z;NnIEPdCUMZ5H{=mqS&BR?^%Tml*mePq;|8P~SJy2^~QegrYTT<7`SxN8%lGVA?UP z`EYn7tF&ZJz*-2ED>8EpUz<#h(S8WyAO(&v;;3eoWb`S;tNmO|k~TR%UGfpd5VZVScShppGN3twj&P3$gtc+l;V9b#-YJvq zI96mK+X;2c>sq>lZKV6Yk8}gsK0*fWhL)$NM!S&yeoawYt=}JC?CgAb_jPw+QBjr^ zMSM>y3TB9*8+ke)q35{B(?i>_br(mTYxMgLn3d=^A-b~i?C13v)=q)JG90F^j#;D*>u;&fXlZn^HxdvE6L%hhZ2* zJ3$l$LFo5`uowFG3dDg**9hC7WtQC)@TLTsf=kOh0p9lS3>nXnbPs_G!f1PY6CHBa z5$OnW^x^igBPRtoySBq2WgI(OwlgG#}8G?{;f#hfzq_R_CLAR?= z6_1dd&;uQUS*nR2u@p%qZ9jkd&>j;xviF|ZGktKTTlNZ#4CuiM72ix^8Aw$^6M<<#jbQEoXX7;m z_~xV6pI})*14FZgRRs+Mrib+umVGNOw@=sTy?sZIw~9C)Sj0J+XpHhO*UMlrjFCDb z5^_Dk=h4mMt-Bu)DpVWJROUONVjLJvkT8}3qV?gK!_|!no^6l?+SmCkmcz0Nr=oeO zE-?&InMswdR=+UR85;wS6V;lvarTX+WAIKS2Fi&yUVJ_I@%GQ&{>jGQZ@;Y5C+)M= z$Ci%W^}LQZR=>%Jl>$8Fo{XvJ;KY-NAAt0#WW5mg2PwwLg&5`uzL*mv`@fp0?VSbwiz4wLJa->VGr? diff --git a/warehouse/test_ns.db/target/metadata/snap-8352403435774761309-0-60956563-1580-4c8a-859a-c232e2de30a2.avro b/warehouse/test_ns.db/target/metadata/snap-8352403435774761309-0-60956563-1580-4c8a-859a-c232e2de30a2.avro deleted file mode 100644 index b1b68973fd45b8129f99cbe17e35c9fe1acd0e42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmb7Fzi-n(6i%WJ42-BO2rLUR)$#dP;&etxNJvPailIW*#rKjJ>^tK-H$+t=1{nDd zSeQYbI-&j#%&;Q_;vZn+E{W4i-MVG)a`(RPd+)pVo*xfiw6AY-igP|;!b-@!&0xdkc^>k^LFn`xD|FsrN>boa%*uNC$k*^S&){{!g?#L&i9z?E#y}tiAxmf? z&@HGDEFCD=^nwB${n6`Bu&$tiq1nQ!f(8QJ!+HwqzU61z2Wh>xZ_+YNWyI;g;-bJa zg^?a+YB#KgF_cG%fJ{yBX>{{=tM11M<+2SID$5;EF%GmQ7&4XuruE@j!sU$&UTlyR z+EMwemczOVv!Zz}FA0ornF^V%Qr{Trluege*I_~^#AGcNPu5EYisrTml}#u9cy#lKykQ)!N$n^5gr*H=n-!`q^%^I`Tk%XY=?6oGmn1 diff --git a/warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro b/warehouse/test_ns.db/target/metadata/snap-8777927210488106010-0-dbe47ab0-23b1-4e63-9170-dcd2e30019ed.avro deleted file mode 100644 index d3516ef1d0e1a5cfb52d6a4770a4fbd5e2376a06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7FzmL-}6mBa921azZAQVN2>C!m;acOU0LP$tR2oTc=MNa(M8WKC$&Xwxu4hsV- zGb=FM#>fZ@3o~N8m45)cZF=tIE_bZ<`@ZkJ&+k1yjGs5JZApf6IpNBqTKZy!P_#K zK!!hUAG&ImgS+Rr0unBWyW_Yc3MrBLZ2!<@I9uFin9&hP73Ek>)pB z1Z86rLU>|`AMgY#E$uvgeBYT;HF54eaTfaE&Uc(MG*V#WGgJagCFNRU1FaoV)aXPq zha}ROm8Fzfb}T$)Y7?GtrnIA{K|xptD&3BjZdbs43tY`OqdM2sd!5IyTg!k60TPu> za8}LTOW;Q|1sNs0sFsg<7QW&cyrNR+$Byb4Y!5071X57CggOG-f(pUX0l}x|6cE^t zUVVaf1vL!y7M2y%5ZE48Q&{({Jl#IX>b-r}jJJ+B8CWa?o*9hxFf+?wHH-s&L=|La zf={CB$J=y2rcCNKT&OH}K*>0?njq#p1drMOkWZh z;UZN!U8BA+)G42Wh+^HEm2nQNrDO5V6iD|1)*{c(Wwn;fC0LD6xgtd$4cz(s0__(t zi!xA{V1+AISw{b-_kWetc_bkn=pqyh jfp{5e8|mY_jYg|=^ySU3@9)3<{M&3b8dvm5qmsuzlGHJ% diff --git a/warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro b/warehouse/test_ns.db/target/metadata/snap-926787372640640286-0-f15a9a07-76bf-43a1-8790-6c20032bb450.avro deleted file mode 100644 index 2d6ae09c313d1926914eaadcdca9b6ae69f1d0af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1772 zcmb7F&x_MQ6mE+L5s$JWh=j1mP4lBa((b{N2!bFeo)!s{O9)6Dz6@4au{dwCQ-Z(rZz1m%26g@xn&u{ZQb ze$V%YeMf%YXtG9rt!ZS%!pl42)w+I^G^SX0*$r zDP-v5%@b41b1)ALlR-pTY#tb9f+3B$JUcou3Chab3=y0F7eS81bR8s%=g~T*c#1CnNgp@X(K7L@#u$UV6pBSY+n2Q5ri$)4$vPH$!R8lH6Hqg=$ft60c zbBF?&Syf7vrKjOB5u5Oc5+NNu4|4q`P~~>8bh`!~XyAIr8J4-O-fI`bu#o}9F~mXD z1lwxvT>_ur6nGHPqF%n!*YGvZ;1%XVK6cQ=pnFhbh#>_bOK2j{EvOMJ9bj~}qX1Wb z^!gL5D`;S7wy>(8fk5}Lp2E6s`T6#7wB9>1)p*N@vw=m7p}E3H4>Pq4R>L@wM_53n zCipD6dAwEkBTTq#!%}6r11iR`)&wD?DIiiGo+Vt~$l!8=tkAB?XSE#GRhSjcGkF<9 zf{Ikgbd~zXP^WYTEC^+5*2dY@mX5|d7r@O6Sc^R0$*L`xORy@TYDKbvGcp&83$$Or zJjg(x7ztFfN;CRD#n<~;O_I5|Q7-w2#t@bNh1Qq9^v&ejFYnv_NTUr zJ+$qvJ(GWvDJ?kI(mfFn-iAhB~)A{`8_1pLFzJ9;eX|=A%gH|n#e>{jVoB#j- From a96fdf90bb6cbab9c392093a2621d4f583c6e765 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 16 Jan 2025 10:08:58 -0500 Subject: [PATCH 08/51] finished unit tests --- tests/table/test_merge_rows.py | 132 ++++++++++++++++++++++----------- 1 file changed, 88 insertions(+), 44 deletions(-) diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index dfee441b25..f48e7e3f84 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -1,25 +1,5 @@ -## unit test for merging rows +## unit tests for merging rows -## todo -""" - simplify this unit testing to reusable functions - check with how the other unit tests are flagged and add accordlingly - fix the warehouse path; its not creating it in this test module - wonder if the pyiceberg team already has a warehouse folder to stash all these tests in? - add a show_table function to visually see the new table - add a function to nuke the warehouse folder to cleanup - - update these functions to all start with "test_" - - test_1: single update/insert - test_2: scale to 1k updates/inserts on single key - test_3: test update only - test_4: test insert only - test_5: test no update or insert - test_6: composite key update/insert 100 rows - test_7: composite key update/insert 1000 rows - -""" from datafusion import SessionContext from pyiceberg.catalog.sql import SqlCatalog @@ -114,7 +94,7 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool): return table -def test_merge_scenario_1(): +def test_merge_scenario_1_simple(): """ tests a single insert and update @@ -124,10 +104,13 @@ def test_merge_scenario_1(): source_df = gen_source_dataset(2, 3, False, False) - res = table.merge_rows(source_df, ["order_id"]) + res = table.merge_rows(df=source_df, join_cols=["order_id"]) + + rows_updated_should_be = 1 + rows_inserted_should_be = 1 - assert res['rows_updated'] == 1, f"rows updated should be 1, but got {res['rows_updated']}" - assert res['rows_inserted'] == 1, f"rows inserted should be 1, but got {res['rows_inserted']}" + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" #print(res) @@ -135,20 +118,20 @@ def test_merge_scenario_1(): purge_warehouse() -def test_merge_scenario_2(): +def test_merge_scenario_2_10k_rows(): """ - tests merging 1000 rows on a single key + tests merging 10000 rows on a single key to simulate larger workload """ - table = gen_target_iceberg_table(1, 1000, False) - source_df = gen_source_dataset(501, 1500, False, False) + table = gen_target_iceberg_table(1, 10000, False) + source_df = gen_source_dataset(5001, 15000, False, False) - res = table.merge_rows(source_df, ["order_id"]) + res = table.merge_rows(df=source_df, join_cols=["order_id"]) - rows_updated_should_be = 500 - rows_inserted_should_be = 500 + rows_updated_should_be = 5000 + rows_inserted_should_be = 5000 assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" @@ -157,7 +140,7 @@ def test_merge_scenario_2(): purge_warehouse() -def test_merge_scenario_3(): +def test_merge_scenario_3_composite_key(): """ tests merging 200 rows with a composite key @@ -167,7 +150,7 @@ def test_merge_scenario_3(): source_df = gen_source_dataset(101, 300, True, False) - res = table.merge_rows(source_df, ["order_id", "order_line_id"]) + res = table.merge_rows(df=source_df, join_cols=["order_id", "order_line_id"]) #print(res) @@ -181,6 +164,49 @@ def test_merge_scenario_3(): purge_warehouse() +def test_merge_update_only(): + + """ + tests explicit merge options to do update only + """ + + table = gen_target_iceberg_table(1, 1000, False) + source_df = gen_source_dataset(501, 1500, False, False) + + merge_options = {'when_matched_update_all': True, 'when_not_matched_insert_all': False} + res = table.merge_rows(df=source_df, join_cols=["order_id"], merge_options=merge_options) + + rows_updated_should_be = 500 + rows_inserted_should_be = 0 + + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + + #show_iceberg_table(table) + + purge_warehouse() + +def test_merge_insert_only(): + """ + tests explicit merge options to do insert only + """ + + table = gen_target_iceberg_table(1, 1000, False) + source_df = gen_source_dataset(501, 1500, False, False) + + merge_options = {'when_matched_update_all': False, 'when_not_matched_insert_all': True} + res = table.merge_rows(df=source_df, join_cols=["order_id"], merge_options=merge_options) + + rows_updated_should_be = 0 + rows_inserted_should_be = 500 + + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + + #show_iceberg_table(table) + + purge_warehouse() + def test_merge_source_dups(): """ @@ -190,7 +216,7 @@ def test_merge_source_dups(): table = gen_target_iceberg_table(1, 10, False) source_df = gen_source_dataset(5, 15, False, True) - res = table.merge_rows(source_df, ["order_id"]) + res = table.merge_rows(df=source_df, join_cols=["order_id"]) error_msgs = res['error_msgs'] @@ -200,18 +226,36 @@ def test_merge_source_dups(): purge_warehouse() +def test_key_cols_misaligned(): -def test_merge_update_only(): - print('blah') + """ + tests join columns missing from one of the tables + """ -def test_merge_insert_only(): - print('blah') + #generate dummy target iceberg table + df = ctx.sql("select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type").to_arrow_table() -def test_key_cols_misaligned(): - print('blah') + catalog = get_sql_catalog(test_namespace) + table = catalog.create_table(f"{test_namespace}.target", df.schema) + + table.append(df) + + df_src = ctx.sql("select 1 as item_id, date '2021-05-01' as order_date, 'B' as order_type").to_arrow_table() + + res = table.merge_rows(df=df_src, join_cols=['order_id']) + error_msgs = res['error_msgs'] + + #print(res) + + assert 'Join columns missing in tables' in error_msgs, f"error message should contain 'Join columns missing in tables', but got {error_msgs}" + + purge_warehouse() if __name__ == "__main__": - test_merge_scenario_1() - test_merge_scenario_2() - test_merge_scenario_3() + test_merge_scenario_1_simple() + test_merge_scenario_2_10k_rows() + test_merge_scenario_3_composite_key() + test_merge_update_only() + test_merge_insert_only() test_merge_source_dups() + test_key_cols_misaligned() From fa5ab35ad8fab7a2867d396b43c42db2bbafdbf9 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 16 Jan 2025 11:28:50 -0500 Subject: [PATCH 09/51] removed unnecesary return --- pyiceberg/table/__init__.py | 2 -- tests/table/test_merge_rows.py | 1 - 2 files changed, 3 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index ca2a62516d..0fe37bed57 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1196,8 +1196,6 @@ def merge_rows(self, df: pa.Table, join_cols: list print(f"Error: {e}") raise e - return {} - def append(self, df: pa.Table, snapshot_properties: Dict[str, str] = EMPTY_DICT) -> None: """ Shorthand API for appending a PyArrow table to the table. diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index f48e7e3f84..b6a22f8112 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -1,6 +1,5 @@ ## unit tests for merging rows - from datafusion import SessionContext from pyiceberg.catalog.sql import SqlCatalog import os From cfa2277f7f1e824f47fda13da354377eef7ad116 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 17 Jan 2025 10:31:48 -0500 Subject: [PATCH 10/51] updated poetry manifest list for datafusion package dependency --- pyiceberg/table/__init__.py | 2 -- pyproject.toml | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 0fe37bed57..0aa80a5339 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1109,8 +1109,6 @@ def merge_rows(self, df: pa.Table, join_cols: list ctx = SessionContext() - - #register both source and target tables so we can find the deltas to update/append ctx.register_dataset(source_table_name, ds.dataset(df)) ctx.register_dataset(target_table_name, ds.dataset(self.scan().to_arrow())) diff --git a/pyproject.toml b/pyproject.toml index 4b425141b5..37dfb56ca1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,6 +64,7 @@ tenacity = ">=8.2.3,<10.0.0" pyarrow = { version = ">=14.0.0,<19.0.0", optional = true } pandas = { version = ">=1.0.0,<3.0.0", optional = true } duckdb = { version = ">=0.5.0,<2.0.0", optional = true } +datafusion = { version = "43.1.0", optional = true } ray = [ { version = "==2.10.0", python = "<3.9", optional = true }, { version = ">=2.10.0,<3.0.0", python = ">=3.9", optional = true }, @@ -226,6 +227,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -378,6 +383,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -530,6 +539,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -682,6 +695,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -834,6 +851,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -986,6 +1007,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -1138,6 +1163,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -1193,6 +1222,7 @@ script = "build-module.py" pyarrow = ["pyarrow"] pandas = ["pandas", "pyarrow"] duckdb = ["duckdb", "pyarrow"] +datafusion = ["datafusion", "pyarrow"] ray = ["ray", "pyarrow", "pandas"] daft = ["getdaft"] snappy = ["python-snappy"] @@ -1361,6 +1391,10 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true From 35f29be86b90e6e28fc4b7de2695ebfd22333a1e Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 22 Jan 2025 14:04:48 -0500 Subject: [PATCH 11/51] added license headers, cleaned up dead code --- poetry.lock | 1356 +++++++- pyiceberg/table/__init__.py | 17 +- pyiceberg/table/merge_rows_util.py | 18 + pyiceberg/table/test.py | 1 - pyproject.toml | 5070 +++++++++++++++++++++++++++- tests/table/test_merge_rows.py | 94 +- 6 files changed, 6437 insertions(+), 119 deletions(-) delete mode 100644 pyiceberg/table/test.py diff --git a/poetry.lock b/poetry.lock index b67371ecbd..dda58d879d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "adlfs" @@ -6,6 +6,8 @@ version = "2024.12.0" description = "Access Azure Datalake Gen1 with fsspec and dask" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "adlfs-2024.12.0-py3-none-any.whl", hash = "sha256:00aab061ddec0413b2039487e656b62e01ece8ef1ca0493f76034a596cf069e3"}, {file = "adlfs-2024.12.0.tar.gz", hash = "sha256:04582bf7461a57365766d01a295a0a88b2b8c42c4fea06e2d673f62675cac5c6"}, @@ -23,12 +25,19 @@ fsspec = ">=2023.12.0" docs = ["furo", "myst-parser", "numpydoc", "sphinx"] tests = ["arrow", "dask[dataframe]", "docker", "pytest", "pytest-mock"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aiobotocore" version = "2.17.0" description = "Async client for aws services using botocore and aiohttp" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\"" files = [ {file = "aiobotocore-2.17.0-py3-none-any.whl", hash = "sha256:aedccd5368a64401233ef9f27983d3d3cb6a507a6ca981f5ec1df014c00e260e"}, {file = "aiobotocore-2.17.0.tar.gz", hash = "sha256:a3041333c565bff9d63b4468bee4944f2d81cff63a45b10e5cc652f3837f9cc2"}, @@ -51,23 +60,37 @@ wrapt = ">=1.10.10,<2.0.0" awscli = ["awscli (>=1.36.15,<1.36.35)"] boto3 = ["boto3 (>=1.35.74,<1.35.94)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aiohappyeyeballs" version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aiohttp" version = "3.11.11" description = "Async http client/server framework (asyncio)" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, @@ -160,12 +183,19 @@ yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aioitertools" version = "0.12.0" description = "itertools and builtins for AsyncIO and mixed iterables" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\"" files = [ {file = "aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796"}, {file = "aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b"}, @@ -178,12 +208,19 @@ typing_extensions = {version = ">=4.0", markers = "python_version < \"3.10\""} dev = ["attribution (==1.8.0)", "black (==24.8.0)", "build (>=1.2)", "coverage (==7.6.1)", "flake8 (==7.1.1)", "flit (==3.9.0)", "mypy (==1.11.2)", "ufmt (==2.7.1)", "usort (==1.0.8.post1)"] docs = ["sphinx (==8.0.2)", "sphinx-mdinclude (==0.6.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aiosignal" version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -192,60 +229,92 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "antlr4-python3-runtime" version = "4.13.2" description = "ANTLR 4.13.2 runtime for Python 3" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8"}, {file = "antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "(extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\") and python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "attrs" version = "24.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] +markers = {main = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\""} [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] @@ -255,12 +324,18 @@ docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphi tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aws-sam-translator" version = "1.94.0" description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates" optional = false -python-versions = "!=4.0,<=4.0,>=3.8" +python-versions = ">=3.8, <=4.0, !=4.0" +groups = ["dev"] files = [ {file = "aws_sam_translator-1.94.0-py3-none-any.whl", hash = "sha256:100e33eeffcfa81f7c45cadeb0ee29596ce829f6b4d2745140f04fa19a41f539"}, {file = "aws_sam_translator-1.94.0.tar.gz", hash = "sha256:8ec258d9f7ece72ef91c81f4edb45a2db064c16844b6afac90c575893beaa391"}, @@ -275,12 +350,18 @@ typing-extensions = ">=4.4" [package.extras] dev = ["black (==24.3.0)", "boto3 (>=1.23,<2)", "boto3-stubs[appconfig,serverlessrepo] (>=1.19.5,<2.dev0)", "coverage (>=5.3,<8)", "dateparser (>=1.1,<2.0)", "mypy (>=1.3.0,<1.4.0)", "parameterized (>=0.7,<1.0)", "pytest (>=6.2,<8)", "pytest-cov (>=2.10,<5)", "pytest-env (>=0.6,<1)", "pytest-rerunfailures (>=9.1,<12)", "pytest-xdist (>=2.5,<4)", "pyyaml (>=6.0,<7.0)", "requests (>=2.28,<3.0)", "ruamel.yaml (==0.17.21)", "ruff (>=0.4.5,<0.5.0)", "tenacity (>=8.0,<9.0)", "types-PyYAML (>=6.0,<7.0)", "types-jsonschema (>=3.2,<4.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "aws-xray-sdk" version = "2.14.0" description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "aws_xray_sdk-2.14.0-py2.py3-none-any.whl", hash = "sha256:cfbe6feea3d26613a2a869d14c9246a844285c97087ad8f296f901633554ad94"}, {file = "aws_xray_sdk-2.14.0.tar.gz", hash = "sha256:aab843c331af9ab9ba5cefb3a303832a19db186140894a523edafc024cc0493c"}, @@ -290,12 +371,19 @@ files = [ botocore = ">=1.11.3" wrapt = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "azure-core" version = "1.32.0" description = "Microsoft Azure Core Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"}, {file = "azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5"}, @@ -309,12 +397,19 @@ typing-extensions = ">=4.6.0" [package.extras] aio = ["aiohttp (>=3.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "azure-datalake-store" version = "0.0.53" description = "Azure Data Lake Store Filesystem Client Library for Python" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure-datalake-store-0.0.53.tar.gz", hash = "sha256:05b6de62ee3f2a0a6e6941e6933b792b800c3e7f6ffce2fc324bc19875757393"}, {file = "azure_datalake_store-0.0.53-py2.py3-none-any.whl", hash = "sha256:a30c902a6e360aa47d7f69f086b426729784e71c536f330b691647a51dc42b2b"}, @@ -325,12 +420,19 @@ cffi = "*" msal = ">=1.16.0,<2" requests = ">=2.20.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "azure-identity" version = "1.19.0" description = "Microsoft Azure Identity Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure_identity-1.19.0-py3-none-any.whl", hash = "sha256:e3f6558c181692d7509f09de10cca527c7dce426776454fb97df512a46527e81"}, {file = "azure_identity-1.19.0.tar.gz", hash = "sha256:500144dc18197d7019b81501165d4fa92225f03778f17d7ca8a2a180129a9c83"}, @@ -343,12 +445,19 @@ msal = ">=1.30.0" msal-extensions = ">=1.2.0" typing-extensions = ">=4.0.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "azure-storage-blob" version = "12.24.0" description = "Microsoft Azure Blob Storage Client Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure_storage_blob-12.24.0-py3-none-any.whl", hash = "sha256:4f0bb4592ea79a2d986063696514c781c9e62be240f09f6397986e01755bc071"}, {file = "azure_storage_blob-12.24.0.tar.gz", hash = "sha256:eaaaa1507c8c363d6e1d1342bd549938fdf1adec9b1ada8658c8f5bf3aea844e"}, @@ -363,12 +472,18 @@ typing-extensions = ">=4.6.0" [package.extras] aio = ["azure-core[aio] (>=1.30.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "babel" version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -377,12 +492,19 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "backports-tarfile" version = "1.2.0" description = "Backport of CPython tarfile module" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\"" files = [ {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, @@ -392,27 +514,40 @@ files = [ docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["jaraco.test", "pytest (!=8.0.*)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "blinker" version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "boto3" version = "1.35.93" description = "The AWS SDK for Python" optional = false -python-versions = ">=3.8" +python-versions = ">= 3.8" +groups = ["main", "dev"] files = [ {file = "boto3-1.35.93-py3-none-any.whl", hash = "sha256:7de2c44c960e486f3c57e5203ea6393c6c4f0914c5f81c789ceb8b5d2ba5d1c5"}, {file = "boto3-1.35.93.tar.gz", hash = "sha256:2446e819cf4e295833474cdcf2c92bc82718ce537e9ee1f17f7e3d237f60e69b"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\""} [package.dependencies] botocore = ">=1.35.93,<1.36.0" @@ -422,16 +557,23 @@ s3transfer = ">=0.10.0,<0.11.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "botocore" version = "1.35.93" description = "Low-level, data-driven core of boto 3." optional = false -python-versions = ">=3.8" +python-versions = ">= 3.8" +groups = ["main", "dev"] files = [ {file = "botocore-1.35.93-py3-none-any.whl", hash = "sha256:47f7161000af6036f806449e3de12acdd3ec11aac7f5578e43e96241413a0f8f"}, {file = "botocore-1.35.93.tar.gz", hash = "sha256:b8d245a01e7d64c41edcf75a42be158df57b9518a83a3dbf5c7e4b8c2bc540cc"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\" or extra == \"s3fs\""} [package.dependencies] jmespath = ">=0.7.1,<2.0.0" @@ -444,12 +586,18 @@ urllib3 = [ [package.extras] crt = ["awscrt (==0.22.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "build" version = "1.2.2.post1" description = "A simple, correct Python build frontend" optional = false -python-versions = ">=3.8" +python-versions = ">= 3.8" +groups = ["dev"] files = [ {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, @@ -470,34 +618,52 @@ typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", " uv = ["uv (>=0.1.18)"] virtualenv = ["virtualenv (>=20.0.35)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cachetools" version = "5.5.0" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "certifi" version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main", "dev", "docs"] files = [ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cffi" version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -567,27 +733,40 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] +markers = {main = "(extra == \"zstandard\" or extra == \"adlfs\") and (platform_python_implementation == \"PyPy\" or extra == \"adlfs\")", dev = "platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cfn-lint" version = "1.22.2" description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "cfn_lint-1.22.2-py3-none-any.whl", hash = "sha256:dd8f575f3cec51f07940fd2564a20a68377937ccac2d0c25b7f94713a7ccbad2"}, {file = "cfn_lint-1.22.2.tar.gz", hash = "sha256:83b3fb9ada7caf94bc75b4bf13999371f74aae39bad92280fd8c9d114ba4006c"}, @@ -608,12 +787,18 @@ graph = ["pydot"] junit = ["junit-xml (>=1.9,<2.0)"] sarif = ["jschema_to_python (>=1.2.3,<1.3.0)", "sarif-om (>=1.0.4,<1.1.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "charset-normalizer" version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" +groups = ["main", "dev", "docs"] files = [ {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, @@ -722,12 +907,18 @@ files = [ {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "click" version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "docs"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -736,16 +927,28 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "docs"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\" or os_name == \"nt\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "coverage" @@ -753,6 +956,7 @@ version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, @@ -824,12 +1028,19 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cramjam" version = "2.9.1" description = "Thin Python bindings to de/compression algorithms in Rust" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"snappy\"" files = [ {file = "cramjam-2.9.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8e82464d1e00fbbb12958999b8471ba5e9f3d9711954505a0a7b378762332e6f"}, {file = "cramjam-2.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d2df8a6511cc08ef1fccd2e0c65e2ebc9f57574ec8376052a76851af5398810"}, @@ -926,12 +1137,18 @@ files = [ [package.extras] dev = ["black (==22.3.0)", "hypothesis", "numpy", "pytest (>=5.30)", "pytest-benchmark", "pytest-xdist"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cryptography" version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -961,6 +1178,7 @@ files = [ {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] +markers = {main = "extra == \"adlfs\""} [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} @@ -975,12 +1193,18 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "cython" version = "3.0.11" description = "The Cython compiler for writing C extensions in the Python language." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "Cython-3.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa"}, {file = "Cython-3.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1"}, @@ -1050,23 +1274,61 @@ files = [ {file = "cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + +[[package]] +name = "datafusion" +version = "43.1.0" +description = "Build and run queries against data" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "datafusion-43.1.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b40afe48762c7649d1ec3a0116e31d3ee5226812fc4896c0f309d3d490a855c8"}, + {file = "datafusion-43.1.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a61d3efa91578108631ae5f8f070e15656d8eb125a34fe9a1df13db72ce1bcde"}, + {file = "datafusion-43.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb46deaf625558819cff708acb115d1d249a18adf51e1eaabda898979b344b5b"}, + {file = "datafusion-43.1.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0d9ae56162304475a147c8e7284b85bda1849659c4495da4d071834a2e6392cd"}, + {file = "datafusion-43.1.0-cp38-abi3-win_amd64.whl", hash = "sha256:930830dad47925b1a84b281184eafc00152f02a84a8acc770ac3ebd36b4db5ac"}, + {file = "datafusion-43.1.0.tar.gz", hash = "sha256:271fee9ed931e976bd095ceb50ba9907fd93267f4f9517a6ea83cd46c1aa42d5"}, +] + +[package.dependencies] +pyarrow = ">=11.0.0" +typing-extensions = {version = "*", markers = "python_version < \"3.13\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "deptry" version = "0.22.0" description = "A command line utility to check for unused, missing and transitive dependencies in a Python project." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "deptry-0.22.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:2b903c94162e30640bb7a3e6800c7afd03a6bb12b693a21290e06c713dba35af"}, {file = "deptry-0.22.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8b523a33bed952679c97a9f55c690803f0fbeb32649946dcc1362c3f015897c7"}, @@ -1093,23 +1355,35 @@ packaging = ">=23.2" requirements-parser = ">=0.11.0,<1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "distlib" version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "docker" version = "7.1.0" description = "A Python library for the Docker Engine API." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, @@ -1126,23 +1400,35 @@ docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] ssh = ["paramiko (>=2.4.3)"] websockets = ["websocket-client (>=1.3.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "docutils" version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "domdf-python-tools" version = "3.9.0" description = "Helpful functions for Python 🐍 🛠️" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "domdf_python_tools-3.9.0-py3-none-any.whl", hash = "sha256:4e1ef365cbc24627d6d1e90cf7d46d8ab8df967e1237f4a26885f6986c78872e"}, {file = "domdf_python_tools-3.9.0.tar.gz", hash = "sha256:1f8a96971178333a55e083e35610d7688cd7620ad2b99790164e1fc1a3614c18"}, @@ -1156,12 +1442,19 @@ typing-extensions = ">=3.7.4.1" all = ["pytz (>=2019.1)"] dates = ["pytz (>=2019.1)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "duckdb" version = "1.1.3" description = "DuckDB in-process database" optional = true python-versions = ">=3.7.0" +groups = ["main"] +markers = "extra == \"duckdb\"" files = [ {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:1c0226dc43e2ee4cc3a5a4672fddb2d76fd2cf2694443f395c02dd1bea0b7fce"}, {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:7c71169fa804c0b65e49afe423ddc2dc83e198640e3b041028da8110f7cd16f7"}, @@ -1217,12 +1510,19 @@ files = [ {file = "duckdb-1.1.3.tar.gz", hash = "sha256:68c3a46ab08836fe041d15dcbf838f74a990d551db47cb24ab1c4576fc19351c"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "exceptiongroup" version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1231,12 +1531,18 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "fastavro" version = "1.10.0" description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"}, {file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"}, @@ -1277,28 +1583,41 @@ lz4 = ["lz4"] snappy = ["cramjam"] zstandard = ["zstandard"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "filelock" version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] +markers = {main = "extra == \"ray\""} [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] typing = ["typing-extensions (>=4.12.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "flask" version = "3.1.0" description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"}, {file = "flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac"}, @@ -1316,12 +1635,18 @@ Werkzeug = ">=3.1" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "flask-cors" version = "5.0.0" description = "A Flask extension adding a decorator for CORS support" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "Flask_Cors-5.0.0-py2.py3-none-any.whl", hash = "sha256:b9e307d082a9261c100d8fb0ba909eec6a228ed1b60a8315fd85f783d61910bc"}, {file = "flask_cors-5.0.0.tar.gz", hash = "sha256:5aadb4b950c4e93745034594d9f3ea6591f734bb3662e16e255ffbf5e89c88ef"}, @@ -1330,12 +1655,19 @@ files = [ [package.dependencies] Flask = ">=0.9" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "frozenlist" version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1431,12 +1763,18 @@ files = [ {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "fsspec" version = "2024.12.0" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, @@ -1470,12 +1808,19 @@ test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe, test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "gcsfs" version = "2024.12.0" description = "Convenient Filesystem interface over GCS" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "gcsfs-2024.12.0-py2.py3-none-any.whl", hash = "sha256:ec88e48f77e466723705458af85dda238e43aa69fac071efd98829d06e9f095a"}, {file = "gcsfs-2024.12.0.tar.gz", hash = "sha256:e672413922108300ebc1fe78b8f99f3c7c1b94e7e088f5a6dc88de6d5a93d156"}, @@ -1494,12 +1839,19 @@ requests = "*" crc = ["crcmod"] gcsfuse = ["fusepy"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "getdaft" version = "0.4.2" description = "Distributed Dataframes for Multimodal Data" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"daft\"" files = [ {file = "getdaft-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3760e69e66e571dbb42ad354954bd52d3ce8eafdfc93c9bdaf2c1ed42017808e"}, {file = "getdaft-0.4.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:2b1c072f69663b87e4f3aa926cf7441d1d150fe46a6d2b32c8b01f72a237680b"}, @@ -1528,12 +1880,18 @@ ray = ["packaging", "ray[client,data] (>=2.0.0)", "ray[client,data] (>=2.10.0)"] sql = ["connectorx", "sqlalchemy", "sqlglot"] unity = ["unitycatalog"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -1545,12 +1903,19 @@ python-dateutil = ">=2.8.1" [package.extras] dev = ["flake8", "markdown", "twine", "wheel"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-api-core" version = "2.24.0" description = "Google API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_api_core-2.24.0-py3-none-any.whl", hash = "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9"}, {file = "google_api_core-2.24.0.tar.gz", hash = "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf"}, @@ -1572,12 +1937,19 @@ grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-auth" version = "2.37.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_auth-2.37.0-py2.py3-none-any.whl", hash = "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0"}, {file = "google_auth-2.37.0.tar.gz", hash = "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00"}, @@ -1596,12 +1968,19 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-auth-oauthlib" version = "1.2.1" description = "Google Authentication Library" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_auth_oauthlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f"}, {file = "google_auth_oauthlib-1.2.1.tar.gz", hash = "sha256:afd0cad092a2eaa53cd8e8298557d6de1034c6cb4a740500b5357b648af97263"}, @@ -1614,12 +1993,19 @@ requests-oauthlib = ">=0.7.0" [package.extras] tool = ["click (>=6.0.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-cloud-core" version = "2.4.1" description = "Google Cloud API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, @@ -1632,12 +2018,19 @@ google-auth = ">=1.25.0,<3.0dev" [package.extras] grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-cloud-storage" version = "2.19.0" description = "Google Cloud Storage API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_cloud_storage-2.19.0-py2.py3-none-any.whl", hash = "sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba"}, {file = "google_cloud_storage-2.19.0.tar.gz", hash = "sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2"}, @@ -1655,12 +2048,19 @@ requests = ">=2.18.0,<3.0.0dev" protobuf = ["protobuf (<6.0.0dev)"] tracing = ["opentelemetry-api (>=1.1.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-crc32c" version = "1.6.0" description = "A python wrapper of the C library 'Google CRC32C'" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa"}, {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9"}, @@ -1694,12 +2094,19 @@ files = [ [package.extras] testing = ["pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "google-resumable-media" version = "2.7.2" description = "Utilities for Google Media Downloads and Resumable Uploads" optional = true -python-versions = ">=3.7" +python-versions = ">= 3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_resumable_media-2.7.2-py2.py3-none-any.whl", hash = "sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa"}, {file = "google_resumable_media-2.7.2.tar.gz", hash = "sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0"}, @@ -1712,12 +2119,19 @@ google-crc32c = ">=1.0,<2.0dev" aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] requests = ["requests (>=2.18.0,<3.0.0dev)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "googleapis-common-protos" version = "1.66.0" description = "Common protobufs used in Google APIs" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, @@ -1729,12 +2143,18 @@ protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "graphql-core" version = "3.2.5" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." optional = false -python-versions = "<4,>=3.6" +python-versions = ">=3.6,<4" +groups = ["dev"] files = [ {file = "graphql_core-3.2.5-py3-none-any.whl", hash = "sha256:2f150d5096448aa4f8ab26268567bbfeef823769893b39c1a2e1409590939c8a"}, {file = "graphql_core-3.2.5.tar.gz", hash = "sha256:e671b90ed653c808715645e3998b7ab67d382d55467b7e2978549111bbabf8d5"}, @@ -1743,12 +2163,19 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4,<5", markers = "python_version < \"3.10\""} +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "greenlet" version = "3.1.1" description = "Lightweight in-process concurrent programming" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "(extra == \"sql-postgres\" or extra == \"sql-sqlite\") and python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" files = [ {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, @@ -1829,26 +2256,38 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "griffe" -version = "1.5.4" +version = "1.5.5" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "griffe-1.5.4-py3-none-any.whl", hash = "sha256:ed33af890586a5bebc842fcb919fc694b3dc1bc55b7d9e0228de41ce566b4a1d"}, - {file = "griffe-1.5.4.tar.gz", hash = "sha256:073e78ad3e10c8378c2f798bd4ef87b92d8411e9916e157fd366a17cc4fd4e52"}, + {file = "griffe-1.5.5-py3-none-any.whl", hash = "sha256:2761b1e8876c6f1f9ab1af274df93ea6bbadd65090de5f38f4cb5cc84897c7dd"}, + {file = "griffe-1.5.5.tar.gz", hash = "sha256:35ee5b38b93d6a839098aad0f92207e6ad6b70c3e8866c08ca669275b8cba585"}, ] [package.dependencies] colorama = ">=0.4" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "identify" version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, @@ -1857,12 +2296,18 @@ files = [ [package.extras] license = ["ukkonen"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main", "dev", "docs"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1871,27 +2316,40 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "importlib-metadata" version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] +markers = {dev = "python_full_version < \"3.10.2\"", docs = "python_version < \"3.10\""} [package.dependencies] zipp = ">=3.20" @@ -1905,45 +2363,70 @@ perf = ["ipython"] test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "isodate" version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "itsdangerous" version = "2.2.0" description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jaraco-context" version = "6.0.1" description = "Useful decorators and context managers" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"}, {file = "jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3"}, @@ -1956,12 +2439,18 @@ files = [ doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] test = ["portend", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jaraco-packaging" version = "10.2.3" description = "tools to supplement packaging Python releases" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "jaraco.packaging-10.2.3-py3-none-any.whl", hash = "sha256:ceb5806d2ac5731ba5b265d196e4cb848afa2a958f01d0bf3a1dfaa3969ed92c"}, {file = "jaraco_packaging-10.2.3.tar.gz", hash = "sha256:d726cc42faa62b2f70585cbe1176b4b469fe6d75f21b19034b688b4340917933"}, @@ -1977,12 +2466,18 @@ sphinx = "*" doc = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] test = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "types-docutils"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jinja2" version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["dev", "docs"] files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -1994,16 +2489,28 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jmespath" version = "1.0.1" description = "JSON Matching Expressions" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\" or extra == \"s3fs\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "joserfc" @@ -2011,6 +2518,7 @@ version = "1.0.1" description = "The ultimate Python library for JOSE RFCs, including JWS, JWE, JWK, JWA, JWT" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "joserfc-1.0.1-py3-none-any.whl", hash = "sha256:ae16f56b4091181cab5148a75610bb40d2452db17d09169598605250fa40f5dd"}, {file = "joserfc-1.0.1.tar.gz", hash = "sha256:c4507be82d681245f461710ffca1fa809fd288f49bc3ce4dba0b1c591700a686"}, @@ -2022,12 +2530,18 @@ cryptography = "*" [package.extras] drafts = ["pycryptodome"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jsonpatch" version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["dev"] files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -2036,12 +2550,18 @@ files = [ [package.dependencies] jsonpointer = ">=1.9" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jsonpath-ng" version = "1.7.0" description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, @@ -2051,27 +2571,40 @@ files = [ [package.dependencies] ply = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jsonpointer" version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" +description = "Identify specific nodes in a JSON document (RFC 6901) " optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jsonschema" version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] +markers = {main = "extra == \"ray\""} [package.dependencies] attrs = ">=22.2.0" @@ -2083,12 +2616,18 @@ rpds-py = ">=0.7.1" format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jsonschema-spec" version = "0.1.3" description = "JSONSchema Spec with object-oriented paths" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "jsonschema_spec-0.1.3-py3-none-any.whl", hash = "sha256:b3cde007ad65c2e631e2f8653cf187124a2c714d02d9fafbab68ad64bf5745d6"}, {file = "jsonschema_spec-0.1.3.tar.gz", hash = "sha256:8d8db7c255e524fab1016a952a9143e5b6e3c074f4ed25d1878f8e97806caec0"}, @@ -2100,26 +2639,39 @@ pathable = ">=0.4.1,<0.5.0" PyYAML = ">=5.1" typing-extensions = ">=4.3.0,<5.0.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "jsonschema-specifications" version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] +markers = {main = "extra == \"ray\""} [package.dependencies] referencing = ">=0.31.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "lazy-object-proxy" version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, @@ -2160,12 +2712,18 @@ files = [ {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "markdown" version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -2178,12 +2736,18 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -2202,12 +2766,18 @@ profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "markupsafe" version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -2272,34 +2842,52 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs" version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, @@ -2325,12 +2913,18 @@ watchdog = ">=2.0" i18n = ["babel (>=2.9.0)"] min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-autorefs" version = "1.3.0" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"}, {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"}, @@ -2341,12 +2935,18 @@ Markdown = ">=3.3" markupsafe = ">=2.0.1" mkdocs = ">=1.1" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-gen-files" version = "0.5.0" description = "MkDocs plugin to programmatically generate documentation pages during the build" optional = false python-versions = ">=3.7" +groups = ["docs"] files = [ {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, @@ -2355,12 +2955,18 @@ files = [ [package.dependencies] mkdocs = ">=1.0.3" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-get-deps" version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -2372,12 +2978,18 @@ mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-literate-nav" version = "0.6.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" optional = false python-versions = ">=3.7" +groups = ["docs"] files = [ {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, @@ -2386,15 +2998,21 @@ files = [ [package.dependencies] mkdocs = ">=1.0.3" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-material" -version = "9.5.49" +version = "9.5.50" description = "Documentation that simply works" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ - {file = "mkdocs_material-9.5.49-py3-none-any.whl", hash = "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e"}, - {file = "mkdocs_material-9.5.49.tar.gz", hash = "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d"}, + {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, + {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, ] [package.dependencies] @@ -2411,27 +3029,39 @@ regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-material-extensions" version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocs-section-index" version = "0.3.9" description = "MkDocs plugin to allow clickable sections that lead to an index page" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_section_index-0.3.9-py3-none-any.whl", hash = "sha256:5e5eb288e8d7984d36c11ead5533f376fdf23498f44e903929d72845b24dfe34"}, {file = "mkdocs_section_index-0.3.9.tar.gz", hash = "sha256:b66128d19108beceb08b226ee1ba0981840d14baf8a652b6c59e650f3f92e4f8"}, @@ -2440,12 +3070,18 @@ files = [ [package.dependencies] mkdocs = ">=1.2" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocstrings" version = "0.27.0" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, @@ -2468,12 +3104,18 @@ crystal = ["mkdocstrings-crystal (>=0.3.4)"] python = ["mkdocstrings-python (>=0.5.2)"] python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mkdocstrings-python" version = "1.13.0" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, @@ -2484,12 +3126,18 @@ griffe = ">=0.49" mkdocs-autorefs = ">=1.2" mkdocstrings = ">=0.26" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mmh3" version = "5.0.1" description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f0a4b4bf05778ed77d820d6e7d0e9bd6beb0c01af10e1ce9233f5d2f814fcafa"}, {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac7a391039aeab95810c2d020b69a94eb6b4b37d4e2374831e92db3a0cdf71c6"}, @@ -2597,12 +3245,18 @@ plot = ["matplotlib (==3.9.2)", "pandas (==2.2.2)"] test = ["pytest (==8.3.3)", "pytest-sugar (==1.0.0)"] type = ["mypy (==1.11.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "moto" version = "5.0.26" description = "A library that allows you to easily mock out tests based on AWS infrastructure" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "moto-5.0.26-py3-none-any.whl", hash = "sha256:803831f427ca6c0452ae4fb898d731cfc19906466a33a88cbc1076abcbfcbba7"}, {file = "moto-5.0.26.tar.gz", hash = "sha256:6829f58a670a087e7c5b63f8183c6b72d64a1444e420c212250b7326b69a9183"}, @@ -2656,12 +3310,18 @@ ssm = ["PyYAML (>=5.1)"] stepfunctions = ["antlr4-python3-runtime", "jsonpath-ng"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -2673,12 +3333,19 @@ docs = ["sphinx"] gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "msal" version = "1.31.1" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "msal-1.31.1-py3-none-any.whl", hash = "sha256:29d9882de247e96db01386496d59f29035e5e841bcac892e6d7bf4390bf6bd17"}, {file = "msal-1.31.1.tar.gz", hash = "sha256:11b5e6a3f802ffd3a72107203e20c4eac6ef53401961b880af2835b723d80578"}, @@ -2692,12 +3359,19 @@ requests = ">=2.0.0,<3" [package.extras] broker = ["pymsalruntime (>=0.14,<0.18)", "pymsalruntime (>=0.17,<0.18)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "msal-extensions" version = "1.2.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"}, {file = "msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef"}, @@ -2707,12 +3381,19 @@ files = [ msal = ">=1.29,<2" portalocker = ">=1.4,<3" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "msgpack" version = "1.1.0" description = "MessagePack serializer" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"ray\"" files = [ {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, @@ -2780,12 +3461,19 @@ files = [ {file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "multidict" version = "6.1.0" description = "multidict implementation" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -2884,12 +3572,19 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "mypy-boto3-glue" version = "1.35.93" description = "Type annotations for boto3 Glue 1.35.93 service generated with mypy-boto3-builder 8.8.0" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"glue\"" files = [ {file = "mypy_boto3_glue-1.35.93-py3-none-any.whl", hash = "sha256:cf46553f68048124bad65345b593ec5ba3806bd9bd15a1d7516d0cb3d79a0652"}, {file = "mypy_boto3_glue-1.35.93.tar.gz", hash = "sha256:27759a83ffa5414b2589da83625816a3c7cb97600fec68578bd3012a9ae20ee8"}, @@ -2898,12 +3593,18 @@ files = [ [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.12\""} +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "natsort" version = "8.4.0" description = "Simple yet flexible natural sorting in Python." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"}, {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"}, @@ -2913,12 +3614,18 @@ files = [ fast = ["fastnumbers (>=2.0.0)"] icu = ["PyICU (>=1.0.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "networkx" version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, @@ -2931,23 +3638,36 @@ doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9. extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +groups = ["dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "numpy" version = "1.26.4" description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -2987,12 +3707,19 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -3003,12 +3730,18 @@ rsa = ["cryptography (>=3.0.0)"] signals = ["blinker (>=1.4.0)"] signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "openapi-schema-validator" version = "0.4.3" description = "OpenAPI schema validation for Python" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "openapi_schema_validator-0.4.3-py3-none-any.whl", hash = "sha256:f1eff2a7936546a3ce62b88a17d09de93c9bd229cbc43cb696c988a61a382548"}, {file = "openapi_schema_validator-0.4.3.tar.gz", hash = "sha256:6940dba9f4906c97078fea6fd9d5a3a3384207db368c4e32f6af6abd7c5c560b"}, @@ -3018,12 +3751,18 @@ files = [ jsonschema = ">=4.0.0,<5.0.0" rfc3339-validator = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "openapi-spec-validator" version = "0.5.5" description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3 spec validator" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "openapi_spec_validator-0.5.5-py3-none-any.whl", hash = "sha256:93ba247f585e1447214b4207728a7cce3726d148238217be69e6b8725c118fbe"}, {file = "openapi_spec_validator-0.5.5.tar.gz", hash = "sha256:3010df5237748e25d7fac2b2aaf13457c1afd02735b2bd6f008a10079c8f443a"}, @@ -3038,16 +3777,28 @@ openapi-schema-validator = ">=0.4.2,<0.5.0" [package.extras] requests = ["requests"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] +markers = {main = "extra == \"ray\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "paginate" @@ -3055,6 +3806,7 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -3064,12 +3816,19 @@ files = [ dev = ["pytest", "tox"] lint = ["black"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pandas" version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -3118,8 +3877,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3150,34 +3909,52 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pathable" version = "0.4.3" description = "Object-oriented paths" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "pathable-0.4.3-py3-none-any.whl", hash = "sha256:cdd7b1f9d7d5c8b8d3315dbf5a86b2596053ae845f056f57d97c0eefff84da14"}, {file = "pathable-0.4.3.tar.gz", hash = "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -3188,12 +3965,18 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -3203,23 +3986,36 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "ply" version = "3.11" description = "Python Lex & Yacc" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "portalocker" version = "2.10.1" description = "Wraps the portalocker recipe for easy usage" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, @@ -3233,15 +4029,21 @@ docs = ["sphinx (>=1.7.1)"] redis = ["redis"] tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pre-commit" -version = "4.0.1" +version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ - {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, - {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, + {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, + {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, ] [package.dependencies] @@ -3251,12 +4053,19 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "propcache" version = "0.2.1" description = "Accelerated property cache" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -3342,12 +4151,19 @@ files = [ {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "proto-plus" version = "1.25.0" description = "Beautiful, Pythonic protocol buffers." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, @@ -3359,12 +4175,19 @@ protobuf = ">=3.19.0,<6.0.0dev" [package.extras] testing = ["google-api-core (>=1.31.5)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "protobuf" version = "5.29.2" description = "" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "protobuf-5.29.2-cp310-abi3-win32.whl", hash = "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851"}, {file = "protobuf-5.29.2-cp310-abi3-win_amd64.whl", hash = "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9"}, @@ -3379,12 +4202,19 @@ files = [ {file = "protobuf-5.29.2.tar.gz", hash = "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "psycopg2-binary" version = "2.9.10" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"sql-postgres\"" files = [ {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, @@ -3456,12 +4286,18 @@ files = [ {file = "psycopg2_binary-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:30e34c4e97964805f715206c7b789d54a78b70f3ff19fbe590104b71c45600e5"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "py-partiql-parser" version = "0.6.1" description = "Pure Python PartiQL Parser" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "py_partiql_parser-0.6.1-py2.py3-none-any.whl", hash = "sha256:ff6a48067bff23c37e9044021bf1d949c83e195490c17e020715e927fe5b2456"}, {file = "py_partiql_parser-0.6.1.tar.gz", hash = "sha256:8583ff2a0e15560ef3bc3df109a7714d17f87d81d33e8c38b7fed4e58a63215d"}, @@ -3470,23 +4306,35 @@ files = [ [package.extras] dev = ["black (==22.6.0)", "flake8", "mypy", "pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "py4j" version = "0.10.9.7" description = "Enables Python programs to dynamically access arbitrary Java objects" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "py4j-0.10.9.7-py2.py3-none-any.whl", hash = "sha256:85defdfd2b2376eb3abf5ca6474b51ab7e0de341c75a02f46dc9b5976f5a5c1b"}, {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyarrow" version = "18.1.0" description = "Python library for Apache Arrow" -optional = true +optional = false python-versions = ">=3.9" +groups = ["main"] files = [ {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, @@ -3535,23 +4383,37 @@ files = [ [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyasn1" version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyasn1-modules" version = "0.4.1" description = "A collection of ASN.1-based protocols modules" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, @@ -3560,16 +4422,28 @@ files = [ [package.dependencies] pyasn1 = ">=0.4.6,<0.7.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pycparser" version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] +markers = {main = "(extra == \"zstandard\" or extra == \"adlfs\") and (platform_python_implementation == \"PyPy\" or extra == \"adlfs\")", dev = "platform_python_implementation != \"PyPy\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "pydantic" @@ -3577,6 +4451,7 @@ version = "2.10.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, @@ -3591,12 +4466,18 @@ typing-extensions = ">=4.12.2" email = ["email-validator (>=2.0.0)"] timezone = ["tzdata"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pydantic-core" version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -3703,12 +4584,18 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -3717,12 +4604,41 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + +[[package]] +name = "pyiceberg-core" +version = "0.4.0" +description = "" +optional = true +python-versions = "*" +groups = ["main"] +markers = "extra == \"pyiceberg-core\"" +files = [ + {file = "pyiceberg_core-0.4.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5aec569271c96e18428d542f9b7007117a7232c06017f95cb239d42e952ad3b4"}, + {file = "pyiceberg_core-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e74773e58efa4df83aba6f6265cdd41e446fa66fa4e343ca86395fed9f209ae"}, + {file = "pyiceberg_core-0.4.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7675d21a54bf3753c740d8df78ad7efe33f438096844e479d4f3493f84830925"}, + {file = "pyiceberg_core-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7058ad935a40b1838e4cdc5febd768878c1a51f83dca005d5a52a7fa280a2489"}, + {file = "pyiceberg_core-0.4.0-cp39-abi3-win_amd64.whl", hash = "sha256:a83eb4c2307ae3dd321a9360828fb043a4add2cc9797bef0bafa20894488fb07"}, + {file = "pyiceberg_core-0.4.0.tar.gz", hash = "sha256:d2e6138707868477b806ed354aee9c476e437913a331cb9ad9ad46b4054cd11f"}, +] + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyjwt" version = "2.10.1" description = "JSON Web Token implementation in Python" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, @@ -3737,12 +4653,18 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pymdown-extensions" version = "10.13" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pymdown_extensions-10.13-py3-none-any.whl", hash = "sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428"}, {file = "pymdown_extensions-10.13.tar.gz", hash = "sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd"}, @@ -3755,12 +4677,18 @@ pyyaml = "*" [package.extras] extra = ["pygments (>=2.12)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyparsing" version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -3769,23 +4697,35 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyproject-hooks" version = "1.2.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pyspark" version = "3.5.3" description = "Apache Spark Python API" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pyspark-3.5.3.tar.gz", hash = "sha256:68b7cc0c0c570a7d8644f49f40d2da8709b01d30c9126cc8cf93b4f84f3d9747"}, ] @@ -3800,12 +4740,18 @@ mllib = ["numpy (>=1.15,<2)"] pandas-on-spark = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] sql = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -3822,12 +4768,18 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pytest-checkdocs" version = "2.13.0" description = "check the README when running tests" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest_checkdocs-2.13.0-py3-none-any.whl", hash = "sha256:5df5bbd7e9753aa51a5f6954a301a4066bd4a04eb7e0c712c5d5d7ede1cbe153"}, {file = "pytest_checkdocs-2.13.0.tar.gz", hash = "sha256:b0e67169c543986142e15afbc17c772da87fcdb0922c7b1e4f6c60f8769f11f9"}, @@ -3841,12 +4793,18 @@ docutils = ">=0.15" docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "types-docutils"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pytest-lazy-fixture" version = "0.6.3" description = "It helps to use fixtures in pytest.mark.parametrize" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "pytest-lazy-fixture-0.6.3.tar.gz", hash = "sha256:0e7d0c7f74ba33e6e80905e9bfd81f9d15ef9a790de97993e34213deb5ad10ac"}, {file = "pytest_lazy_fixture-0.6.3-py3-none-any.whl", hash = "sha256:e0b379f38299ff27a653f03eaa69b08a6fd4484e46fd1c9907d984b9f9daeda6"}, @@ -3855,12 +4813,18 @@ files = [ [package.dependencies] pytest = ">=3.2.5" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pytest-mock" version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -3872,12 +4836,18 @@ pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev", "docs"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3886,12 +4856,19 @@ files = [ [package.dependencies] six = ">=1.5" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "python-snappy" version = "0.7.3" description = "Python library for the snappy compression library from Google" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"snappy\"" files = [ {file = "python_snappy-0.7.3-py3-none-any.whl", hash = "sha256:074c0636cfcd97e7251330f428064050ac81a52c62ed884fc2ddebbb60ed7f50"}, {file = "python_snappy-0.7.3.tar.gz", hash = "sha256:40216c1badfb2d38ac781ecb162a1d0ec40f8ee9747e610bcfefdfa79486cee3"}, @@ -3900,23 +4877,36 @@ files = [ [package.dependencies] cramjam = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pytz" version = "2024.2" description = "World timezone definitions, modern and historical" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "pywin32" version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, @@ -3937,6 +4927,12 @@ files = [ {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] +markers = {main = "extra == \"adlfs\" and platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "pyyaml" @@ -3944,6 +4940,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -3999,6 +4996,12 @@ files = [ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +markers = {main = "extra == \"ray\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "pyyaml-env-tag" @@ -4006,6 +5009,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -4014,12 +5018,19 @@ files = [ [package.dependencies] pyyaml = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "ray" version = "2.40.0" description = "Ray provides a simple, universal API for building distributed applications." optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"ray\"" files = [ {file = "ray-2.40.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:064af8bc52cc988c82470b8e76e5df417737fa7c1d87f597a892c69eb4ec3caa"}, {file = "ray-2.40.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45beb4019cd20b6cb10572d8012c771bccd623f544a669da6797ccf993c4bb33"}, @@ -4071,27 +5082,40 @@ serve-grpc = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "fastapi", "grpcio train = ["fsspec", "pandas", "pyarrow (<18)", "pyarrow (>=9.0.0)", "requests", "tensorboardX (>=1.9)"] tune = ["fsspec", "pandas", "pyarrow (<18)", "pyarrow (>=9.0.0)", "requests", "tensorboardX (>=1.9)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "referencing" version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] +markers = {main = "extra == \"ray\""} [package.dependencies] attrs = ">=22.2.0" rpds-py = ">=0.7.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "regex" version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -4189,12 +5213,18 @@ files = [ {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -4210,12 +5240,18 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "requests-mock" version = "1.12.1" description = "Mock out responses from the requests package" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, @@ -4227,12 +5263,19 @@ requests = ">=2.22,<3" [package.extras] fixture = ["fixtures"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "requests-oauthlib" version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = true python-versions = ">=3.4" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -4245,12 +5288,18 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "requirements-parser" version = "0.11.0" description = "This is a small Python module for parsing Pip requirement files." optional = false -python-versions = "<4.0,>=3.8" +python-versions = ">=3.8,<4.0" +groups = ["dev"] files = [ {file = "requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684"}, {file = "requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920"}, @@ -4260,12 +5309,18 @@ files = [ packaging = ">=23.2" types-setuptools = ">=69.1.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "responses" version = "0.25.3" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "responses-0.25.3-py3-none-any.whl", hash = "sha256:521efcbc82081ab8daa588e08f7e8a64ce79b91c39f6e62199b19159bea7dbcb"}, {file = "responses-0.25.3.tar.gz", hash = "sha256:617b9247abd9ae28313d57a75880422d55ec63c29d33d629697590a034358dba"}, @@ -4279,12 +5334,18 @@ urllib3 = ">=1.25.10,<3.0" [package.extras] tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -4293,12 +5354,18 @@ files = [ [package.dependencies] six = "*" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "rich" version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -4312,12 +5379,18 @@ typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.1 [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "rpds-py" version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, @@ -4423,6 +5496,12 @@ files = [ {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] +markers = {main = "extra == \"ray\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "rsa" @@ -4430,6 +5509,8 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = true python-versions = ">=3.6,<4" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -4438,12 +5519,19 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "s3fs" version = "2024.12.0" description = "Convenient Filesystem interface over S3" optional = true -python-versions = ">=3.9" +python-versions = ">= 3.9" +groups = ["main"] +markers = "extra == \"s3fs\"" files = [ {file = "s3fs-2024.12.0-py3-none-any.whl", hash = "sha256:d8665549f9d1de083151582437a2f10d5f3b3227c1f8e67a2b0b730db813e005"}, {file = "s3fs-2024.12.0.tar.gz", hash = "sha256:1b0f3a8f5946cca5ba29871d6792ab1e4528ed762327d8aefafc81b73b99fd56"}, @@ -4458,16 +5546,23 @@ fsspec = "==2024.12.0.*" awscli = ["aiobotocore[awscli] (>=2.5.4,<3.0.0)"] boto3 = ["aiobotocore[boto3] (>=2.5.4,<3.0.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "s3transfer" version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = false -python-versions = ">=3.8" +python-versions = ">= 3.8" +groups = ["main", "dev"] files = [ {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\""} [package.dependencies] botocore = ">=1.33.2,<2.0a.0" @@ -4475,12 +5570,18 @@ botocore = ">=1.33.2,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "setuptools" version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, @@ -4495,45 +5596,69 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "six" version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main", "dev", "docs"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinx" version = "7.4.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, @@ -4564,12 +5689,18 @@ docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=6.0)", "importlib-metadata (>=6.0)", "mypy (==1.10.1)", "pytest (>=6.0)", "ruff (==0.5.2)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-docutils (==0.21.0.20240711)", "types-requests (>=2.30.0)"] test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, @@ -4580,12 +5711,18 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, @@ -4596,12 +5733,18 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, @@ -4612,12 +5755,18 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -4626,12 +5775,18 @@ files = [ [package.extras] test = ["flake8", "mypy", "pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, @@ -4642,12 +5797,18 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["defusedxml (>=0.7.1)", "pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, @@ -4658,12 +5819,19 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sqlalchemy" version = "2.0.37" description = "Database Abstraction Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"sql-postgres\" or extra == \"sql-sqlite\"" files = [ {file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e"}, {file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069"}, @@ -4753,12 +5921,18 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "strictyaml" version = "1.7.3" description = "Strict, typed YAML parser" optional = false python-versions = ">=3.7.0" +groups = ["main"] files = [ {file = "strictyaml-1.7.3-py3-none-any.whl", hash = "sha256:fb5c8a4edb43bebb765959e420f9b3978d7f1af88c80606c03fb420888f5d1c7"}, {file = "strictyaml-1.7.3.tar.gz", hash = "sha256:22f854a5fcab42b5ddba8030a0e4be51ca89af0267961c8d6cfa86395586c407"}, @@ -4767,12 +5941,18 @@ files = [ [package.dependencies] python-dateutil = ">=2.6.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "sympy" version = "1.13.3" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, @@ -4784,12 +5964,18 @@ mpmath = ">=1.1.0,<1.4" [package.extras] dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "tenacity" version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, @@ -4799,12 +5985,19 @@ files = [ doc = ["reno", "sphinx"] test = ["pytest", "tornado (>=4.5)", "typeguard"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "thrift" version = "0.21.0" description = "Python bindings for the Apache Thrift RPC system" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"hive\"" files = [ {file = "thrift-0.21.0.tar.gz", hash = "sha256:5e6f7c50f936ebfa23e924229afc95eb219f8c8e5a83202dd4a391244803e402"}, ] @@ -4817,12 +6010,19 @@ all = ["tornado (>=4.0)", "twisted"] tornado = ["tornado (>=4.0)"] twisted = ["twisted"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "tomli" version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version <= \"3.11.0a6\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -4858,12 +6058,19 @@ files = [ {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "tqdm" version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"daft\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -4879,45 +6086,71 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "types-setuptools" version = "75.6.0.20241126" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b"}, {file = "types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "tzdata" version = "2024.2" description = "Provider of IANA time zone data" optional = true python-versions = ">=2" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "urllib3" version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +groups = ["main", "dev", "docs"] +markers = "python_version < \"3.10\"" files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, @@ -4928,12 +6161,19 @@ brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotl secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "urllib3" version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] +markers = "python_version >= \"3.10\" and python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, @@ -4945,12 +6185,18 @@ h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "virtualenv" version = "20.28.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, @@ -4965,12 +6211,18 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "watchdog" version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -5007,12 +6259,18 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "werkzeug" version = "3.1.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, @@ -5024,12 +6282,18 @@ MarkupSafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "wrapt" version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -5097,6 +6361,12 @@ files = [ {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] +markers = {main = "extra == \"s3fs\""} + +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" [[package]] name = "xmltodict" @@ -5104,17 +6374,25 @@ version = "0.14.2" description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, ] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "yarl" version = "1.18.3" description = "Yet another URL library" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -5205,16 +6483,23 @@ idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.0" +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "zipp" version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] +markers = {dev = "python_full_version < \"3.10.2\"", docs = "python_version < \"3.10\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] @@ -5224,12 +6509,19 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [[package]] name = "zstandard" version = "0.23.0" description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"zstandard\"" files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -5336,6 +6628,11 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\ [package.extras] cffi = ["cffi (>=1.11)"] +[package.source] +type = "legacy" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" +reference = "jfrog" + [extras] adlfs = ["adlfs"] daft = ["getdaft"] @@ -5346,6 +6643,7 @@ glue = ["boto3", "mypy-boto3-glue"] hive = ["thrift"] pandas = ["pandas", "pyarrow"] pyarrow = ["pyarrow"] +pyiceberg-core = ["pyiceberg-core"] ray = ["pandas", "pyarrow", "ray", "ray"] rest-sigv4 = ["boto3"] s3fs = ["s3fs"] @@ -5355,6 +6653,6 @@ sql-sqlite = ["sqlalchemy"] zstandard = ["zstandard"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = "^3.9, !=3.9.7" -content-hash = "306213628bcc69346e14742843c8e6bccf19c2615886943c2e1482a954a388ec" +content-hash = "567ec9cd4b954ac1f0872cd87129db845d497712e72a2eed74c69d8be4024d15" diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 0aa80a5339..6c4343c8e9 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -136,8 +136,6 @@ from pyiceberg.utils.config import Config from pyiceberg.utils.properties import property_as_bool -from pyiceberg.table import merge_rows_util - if TYPE_CHECKING: import daft import pandas as pd @@ -1083,7 +1081,8 @@ def merge_rows(self, df: pa.Table, join_cols: list A dictionary containing the number of rows updated and inserted. """ - #merge_rows_util is a file + from pyiceberg.table import merge_rows_util + try: from datafusion import SessionContext except ModuleNotFoundError as e: @@ -1097,7 +1096,6 @@ def merge_rows(self, df: pa.Table, join_cols: list source_table_name = "source" target_table_name = "target" - if merge_options is None or merge_options == {}: merge_options = {'when_matched_update_all': True, 'when_not_matched_insert_all': True} @@ -1120,7 +1118,6 @@ def merge_rows(self, df: pa.Table, join_cols: list target_col_names = set([col[0] for col in target_col_list]) source_col_types = {col[0]: col[1] for col in source_col_list} - #target_col_types = {col[0]: col[1] for col in target_col_list} missing_columns = merge_rows_util.do_join_columns_exist(source_col_names, target_col_names, join_cols) @@ -1128,15 +1125,11 @@ def merge_rows(self, df: pa.Table, join_cols: list return {'error_msgs': f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}"} - #raise Exception(f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}") - #check for dups on source if merge_rows_util.dups_check_in_source(source_table_name, join_cols, ctx): return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No Merge executed'} - #raise Exception(f"Duplicate rows found in source table based on the key columns [{', '.join(join_cols)}]") - update_row_cnt = 0 insert_row_cnt = 0 @@ -1146,9 +1139,8 @@ def merge_rows(self, df: pa.Table, join_cols: list if when_matched_update_all: - # Get the rows to update update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) - #print(update_recs_sql) + update_recs = ctx.sql(update_recs_sql).to_arrow_table() update_row_cnt = len(update_recs) @@ -1165,8 +1157,6 @@ def merge_rows(self, df: pa.Table, join_cols: list f"({' AND '.join([f'{col} = {repr(row[col])}' if source_col_types[col] != 'string' else f'{col} = {repr(row[col])}' for col in join_cols])})" for row in update_recs.to_pylist() ) - - #print(f"overwrite_filter: {overwrite_filter}") txn.overwrite(update_recs, overwrite_filter) @@ -1183,7 +1173,6 @@ def merge_rows(self, df: pa.Table, join_cols: list if when_matched_update_all or when_not_matched_insert_all: txn.commit_transaction() - #print("commited changes") return { "rows_updated": update_row_cnt, diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py index b691414122..6bb2481528 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/merge_rows_util.py @@ -1,4 +1,22 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + from datafusion import SessionContext def get_table_column_list(connection: SessionContext, table_name: str) -> list: diff --git a/pyiceberg/table/test.py b/pyiceberg/table/test.py deleted file mode 100644 index e0369f70fe..0000000000 --- a/pyiceberg/table/test.py +++ /dev/null @@ -1 +0,0 @@ -print('test') \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 37dfb56ca1..d59fe88a1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,10 +61,9 @@ fsspec = ">=2023.1.0" pyparsing = ">=3.1.0,<4.0.0" zstandard = ">=0.13.0,<1.0.0" tenacity = ">=8.2.3,<10.0.0" -pyarrow = { version = ">=14.0.0,<19.0.0", optional = true } +pyarrow = { version = ">=14.0.0,<20.0.0", optional = true } pandas = { version = ">=1.0.0,<3.0.0", optional = true } duckdb = { version = ">=0.5.0,<2.0.0", optional = true } -datafusion = { version = "43.1.0", optional = true } ray = [ { version = "==2.10.0", python = "<3.9", optional = true }, { version = ">=2.10.0,<3.0.0", python = ">=3.9", optional = true }, @@ -80,12 +79,14 @@ psycopg2-binary = { version = ">=2.9.6", optional = true } sqlalchemy = { version = "^2.0.18", optional = true } getdaft = { version = ">=0.2.12", optional = true } cachetools = "^5.5.0" +pyiceberg-core = { version = "^0.4.0", optional = true } +datafusion = "^43.1.0" [tool.poetry.group.dev.dependencies] pytest = "7.4.4" pytest-checkdocs = "2.13.0" pytest-lazy-fixture = "0.6.3" -pre-commit = "4.0.1" +pre-commit = "4.1.0" fastavro = "1.10.0" coverage = { version = "^7.4.2", extras = ["toml"] } requests-mock = "1.12.1" @@ -100,19 +101,4894 @@ docutils = "!=0.21.post1" # https://github.com/python-poetry/poetry/issues/924 [tool.poetry.group.docs.dependencies] # for mkdocs mkdocs = "1.6.1" -griffe = "1.5.4" +griffe = "1.5.5" jinja2 = "3.1.5" mkdocstrings = "0.27.0" mkdocstrings-python = "1.13.0" mkdocs-literate-nav = "0.6.1" mkdocs-autorefs = "1.3.0" mkdocs-gen-files = "0.5.0" -mkdocs-material = "9.5.49" +mkdocs-material = "9.5.50" mkdocs-material-extensions = "1.3.1" mkdocs-section-index = "0.3.9" + + +[[tool.poetry.source]] +name = "jfrog" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple/" +priority = "primary" + +[[tool.mypy.overrides]] +module = "pytest_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyiceberg_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + [[tool.mypy.overrides]] -module = "pytest_mock.*" +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" ignore_missing_imports = true [[tool.mypy.overrides]] @@ -227,10 +5103,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -383,10 +5255,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -539,10 +5407,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -695,10 +5559,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -851,10 +5711,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -1007,10 +5863,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -1164,7 +6016,155 @@ module = "duckdb.*" ignore_missing_imports = true [[tool.mypy.overrides]] -module = "datafusion.*" +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" ignore_missing_imports = true [[tool.mypy.overrides]] @@ -1222,7 +6222,6 @@ script = "build-module.py" pyarrow = ["pyarrow"] pandas = ["pandas", "pyarrow"] duckdb = ["duckdb", "pyarrow"] -datafusion = ["datafusion", "pyarrow"] ray = ["ray", "pyarrow", "pandas"] daft = ["getdaft"] snappy = ["python-snappy"] @@ -1236,6 +6235,7 @@ sql-postgres = ["sqlalchemy", "psycopg2-binary"] sql-sqlite = ["sqlalchemy"] gcsfs = ["gcsfs"] rest-sigv4 = ["boto3"] +pyiceberg-core = ["pyiceberg-core"] [tool.pytest.ini_options] markers = [ @@ -1391,10 +6391,6 @@ ignore_missing_imports = true module = "duckdb.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "datafusion.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "ray.*" ignore_missing_imports = true @@ -1436,4 +6432,4 @@ module = "tenacity.*" ignore_missing_imports = true [tool.coverage.run] -source = ['pyiceberg/'] +source = ['pyiceberg/'] \ No newline at end of file diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index b6a22f8112..163596da8f 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -1,13 +1,30 @@ -## unit tests for merging rows +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. -from datafusion import SessionContext from pyiceberg.catalog.sql import SqlCatalog import os import shutil -ctx = SessionContext() +_TEST_NAMESPACE = "test_ns" -test_namespace = "test_ns" +try: + from datafusion import SessionContext +except ModuleNotFoundError as e: + raise ModuleNotFoundError("For merge_rows, DataFusion needs to be installed") from e def get_test_warehouse_path(): curr_dir = os.path.dirname(os.path.abspath(__file__)) @@ -32,7 +49,7 @@ def purge_warehouse(): if os.path.exists(warehouse_path): shutil.rmtree(warehouse_path) -def show_iceberg_table(table): +def show_iceberg_table(table, ctx: SessionContext): import pyarrow.dataset as ds table_name = "target" if ctx.table_exist(table_name): @@ -40,12 +57,12 @@ def show_iceberg_table(table): ctx.register_dataset(table_name, ds.dataset(table.scan().to_arrow())) ctx.sql(f"SELECT * FROM {table_name} limit 5").show() -def show_df(df): +def show_df(df, ctx: SessionContext): import pyarrow.dataset as ds ctx.register_dataset("df", ds.dataset(df)) ctx.sql("select * from df limit 10").show() -def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_dup: bool): +def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_dup: bool, ctx: SessionContext): additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" @@ -75,7 +92,7 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du return df -def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool): +def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext): additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" @@ -86,8 +103,8 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool): from t """).to_arrow_table() - catalog = get_sql_catalog(test_namespace) - table = catalog.create_table(f"{test_namespace}.target", df.schema) + catalog = get_sql_catalog(_TEST_NAMESPACE) + table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) @@ -99,8 +116,10 @@ def test_merge_scenario_1_simple(): tests a single insert and update """ - table = gen_target_iceberg_table(1, 2, False) - source_df = gen_source_dataset(2, 3, False, False) + ctx = SessionContext() + + table = gen_target_iceberg_table(1, 2, False, ctx) + source_df = gen_source_dataset(2, 3, False, False, ctx) res = table.merge_rows(df=source_df, join_cols=["order_id"]) @@ -123,8 +142,10 @@ def test_merge_scenario_2_10k_rows(): tests merging 10000 rows on a single key to simulate larger workload """ - table = gen_target_iceberg_table(1, 10000, False) - source_df = gen_source_dataset(5001, 15000, False, False) + ctx = SessionContext() + + table = gen_target_iceberg_table(1, 10000, False, ctx) + source_df = gen_source_dataset(5001, 15000, False, False, ctx) res = table.merge_rows(df=source_df, join_cols=["order_id"]) @@ -135,8 +156,6 @@ def test_merge_scenario_2_10k_rows(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - #show_iceberg_table(table) - purge_warehouse() def test_merge_scenario_3_composite_key(): @@ -145,22 +164,20 @@ def test_merge_scenario_3_composite_key(): tests merging 200 rows with a composite key """ - table = gen_target_iceberg_table(1, 200, True) - source_df = gen_source_dataset(101, 300, True, False) + ctx = SessionContext() + + table = gen_target_iceberg_table(1, 200, True, ctx) + source_df = gen_source_dataset(101, 300, True, False, ctx) res = table.merge_rows(df=source_df, join_cols=["order_id", "order_line_id"]) - #print(res) - rows_updated_should_be = 100 rows_inserted_should_be = 100 assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - #show_iceberg_table(table) - purge_warehouse() def test_merge_update_only(): @@ -169,8 +186,10 @@ def test_merge_update_only(): tests explicit merge options to do update only """ - table = gen_target_iceberg_table(1, 1000, False) - source_df = gen_source_dataset(501, 1500, False, False) + ctx = SessionContext() + + table = gen_target_iceberg_table(1, 1000, False, ctx) + source_df = gen_source_dataset(501, 1500, False, False, ctx) merge_options = {'when_matched_update_all': True, 'when_not_matched_insert_all': False} res = table.merge_rows(df=source_df, join_cols=["order_id"], merge_options=merge_options) @@ -181,8 +200,6 @@ def test_merge_update_only(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - #show_iceberg_table(table) - purge_warehouse() def test_merge_insert_only(): @@ -190,8 +207,10 @@ def test_merge_insert_only(): tests explicit merge options to do insert only """ - table = gen_target_iceberg_table(1, 1000, False) - source_df = gen_source_dataset(501, 1500, False, False) + ctx = SessionContext() + + table = gen_target_iceberg_table(1, 1000, False, ctx) + source_df = gen_source_dataset(501, 1500, False, False, ctx) merge_options = {'when_matched_update_all': False, 'when_not_matched_insert_all': True} res = table.merge_rows(df=source_df, join_cols=["order_id"], merge_options=merge_options) @@ -202,8 +221,6 @@ def test_merge_insert_only(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - #show_iceberg_table(table) - purge_warehouse() def test_merge_source_dups(): @@ -212,15 +229,15 @@ def test_merge_source_dups(): tests duplicate rows in source """ - table = gen_target_iceberg_table(1, 10, False) - source_df = gen_source_dataset(5, 15, False, True) + ctx = SessionContext() + + table = gen_target_iceberg_table(1, 10, False, ctx) + source_df = gen_source_dataset(5, 15, False, True, ctx) res = table.merge_rows(df=source_df, join_cols=["order_id"]) error_msgs = res['error_msgs'] - #print(error_msgs) - assert 'Duplicate rows found in source dataset' in error_msgs, f"error message should contain 'Duplicate rows found in source dataset', but got {error_msgs}" purge_warehouse() @@ -231,11 +248,13 @@ def test_key_cols_misaligned(): tests join columns missing from one of the tables """ + ctx = SessionContext() + #generate dummy target iceberg table df = ctx.sql("select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type").to_arrow_table() - catalog = get_sql_catalog(test_namespace) - table = catalog.create_table(f"{test_namespace}.target", df.schema) + catalog = get_sql_catalog(_TEST_NAMESPACE) + table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) @@ -244,13 +263,12 @@ def test_key_cols_misaligned(): res = table.merge_rows(df=df_src, join_cols=['order_id']) error_msgs = res['error_msgs'] - #print(res) - assert 'Join columns missing in tables' in error_msgs, f"error message should contain 'Join columns missing in tables', but got {error_msgs}" purge_warehouse() if __name__ == "__main__": + test_merge_scenario_1_simple() test_merge_scenario_2_10k_rows() test_merge_scenario_3_composite_key() From 6c68d0d5e8c24e9ef97d7dcefa0dbade583ec058 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 29 Jan 2025 08:40:59 -0500 Subject: [PATCH 12/51] updated the merge function to use bools for matched and not matched rows --- pyiceberg/table/__init__.py | 14 ++++---------- tests/table/test_merge_rows.py | 10 ++-------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 6c4343c8e9..47ff1d09aa 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1065,7 +1065,8 @@ def name_mapping(self) -> Optional[NameMapping]: return self.metadata.name_mapping() def merge_rows(self, df: pa.Table, join_cols: list - ,merge_options: dict = {'when_matched_update_all': True, 'when_not_matched_insert_all': True} + , when_matched_update_all: bool = True + , when_not_matched_insert_all: bool = True ) -> Dict: """ Shorthand API for performing an upsert/merge to an iceberg table. @@ -1073,9 +1074,8 @@ def merge_rows(self, df: pa.Table, join_cols: list Args: df: The input dataframe to merge with the table's data. join_cols: The columns to join on. - merge_options: A dictionary of merge actions to perform. Currently supports these predicates > - when_matched_update_all: default is True - when_not_matched_insert_all: default is True + when_matched_update_all: Bool indicating to update rows that are matched but require an update due to a value in a non-key column changing + when_not_matched_insert_all: Bool indicating new rows to be inserted that do not match any existing rows in the table Returns: A dictionary containing the number of rows updated and inserted. @@ -1096,12 +1096,6 @@ def merge_rows(self, df: pa.Table, join_cols: list source_table_name = "source" target_table_name = "target" - if merge_options is None or merge_options == {}: - merge_options = {'when_matched_update_all': True, 'when_not_matched_insert_all': True} - - when_matched_update_all = merge_options.get('when_matched_update_all', False) - when_not_matched_insert_all = merge_options.get('when_not_matched_insert_all', False) - if when_matched_update_all == False and when_not_matched_insert_all == False: return {'rows_updated': 0, 'rows_inserted': 0, 'msg': 'no merge options selected...exiting'} diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index 163596da8f..0ff07e63f8 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -130,10 +130,6 @@ def test_merge_scenario_1_simple(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - #print(res) - - #show_iceberg_table(table) - purge_warehouse() def test_merge_scenario_2_10k_rows(): @@ -191,8 +187,7 @@ def test_merge_update_only(): table = gen_target_iceberg_table(1, 1000, False, ctx) source_df = gen_source_dataset(501, 1500, False, False, ctx) - merge_options = {'when_matched_update_all': True, 'when_not_matched_insert_all': False} - res = table.merge_rows(df=source_df, join_cols=["order_id"], merge_options=merge_options) + res = table.merge_rows(df=source_df, join_cols=["order_id"], when_matched_update_all=True, when_not_matched_insert_all=False) rows_updated_should_be = 500 rows_inserted_should_be = 0 @@ -212,8 +207,7 @@ def test_merge_insert_only(): table = gen_target_iceberg_table(1, 1000, False, ctx) source_df = gen_source_dataset(501, 1500, False, False, ctx) - merge_options = {'when_matched_update_all': False, 'when_not_matched_insert_all': True} - res = table.merge_rows(df=source_df, join_cols=["order_id"], merge_options=merge_options) + res = table.merge_rows(df=source_df, join_cols=["order_id"], when_matched_update_all=False, when_not_matched_insert_all=True) rows_updated_should_be = 0 rows_inserted_should_be = 500 From 2d1e8ae5e0fbab4757788a9496406817017588e7 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 31 Jan 2025 11:21:14 -0500 Subject: [PATCH 13/51] incorporated changes for boolExpression. It simplified the filters a lot --- pyiceberg/table/__init__.py | 49 ++++++++++++++++-------------- pyiceberg/table/merge_rows_util.py | 11 ++++--- tests/table/test_merge_rows.py | 9 +++++- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 47ff1d09aa..1500718a2f 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -52,6 +52,7 @@ IsNull, Or, Reference, + In, ) from pyiceberg.expressions.visitors import ( _InclusiveMetricsEvaluator, @@ -1099,11 +1100,34 @@ def merge_rows(self, df: pa.Table, join_cols: list if when_matched_update_all == False and when_not_matched_insert_all == False: return {'rows_updated': 0, 'rows_inserted': 0, 'msg': 'no merge options selected...exiting'} + missing_columns = merge_rows_util.do_join_columns_exist(df, self, join_cols) + + if missing_columns['source'] or missing_columns['target']: + + return {'error_msgs': f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}"} + ctx = SessionContext() #register both source and target tables so we can find the deltas to update/append ctx.register_dataset(source_table_name, ds.dataset(df)) - ctx.register_dataset(target_table_name, ds.dataset(self.scan().to_arrow())) + + #instead of loading in the entire target table, let's just load in what we know exists + unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) + + pred = None + + if len(join_cols) == 1: + pred = In(join_cols[0], unique_keys[0].to_pylist()) + else: + pred = Or(*[ + And(*[ + EqualTo(col, row[col]) + for col in join_cols + ]) + for row in unique_keys.to_pylist() + ]) + #print(pred) + ctx.register_dataset(target_table_name, ds.dataset(self.scan(row_filter=pred).to_arrow())) source_col_list = merge_rows_util.get_table_column_list(ctx, source_table_name) target_col_list = merge_rows_util.get_table_column_list(ctx, target_table_name) @@ -1111,14 +1135,6 @@ def merge_rows(self, df: pa.Table, join_cols: list source_col_names = set([col[0] for col in source_col_list]) target_col_names = set([col[0] for col in target_col_list]) - source_col_types = {col[0]: col[1] for col in source_col_list} - - missing_columns = merge_rows_util.do_join_columns_exist(source_col_names, target_col_names, join_cols) - - if missing_columns['source'] or missing_columns['target']: - - return {'error_msgs': f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}"} - #check for dups on source if merge_rows_util.dups_check_in_source(source_table_name, join_cols, ctx): @@ -1139,20 +1155,7 @@ def merge_rows(self, df: pa.Table, join_cols: list update_row_cnt = len(update_recs) - if len(join_cols) == 1: - join_col = join_cols[0] - col_type = source_col_types[join_col] - values = [row[join_col] for row in update_recs.to_pylist()] - # if strings are in the filter, we encapsulate with tick marks - formatted_values = [f"'{value}'" if col_type == 'string' else str(value) for value in values] - overwrite_filter = f"{join_col} IN ({', '.join(formatted_values)})" - else: - overwrite_filter = " OR ".join( - f"({' AND '.join([f'{col} = {repr(row[col])}' if source_col_types[col] != 'string' else f'{col} = {repr(row[col])}' for col in join_cols])})" - for row in update_recs.to_pylist() - ) - - txn.overwrite(update_recs, overwrite_filter) + txn.overwrite(update_recs, overwrite_filter=pred) # Insert the new records diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py index 6bb2481528..f87c8b8f6b 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/merge_rows_util.py @@ -18,6 +18,8 @@ from datafusion import SessionContext +from pyarrow import Table as pyarrow_table +from pyiceberg import table as pyiceberg_table def get_table_column_list(connection: SessionContext, table_name: str) -> list: """ @@ -61,7 +63,8 @@ def dups_check_in_source(source_table: str, join_cols: list, connection: Session return source_dup_count > 0 -def do_join_columns_exist(source_col_list: set, target_col_list: set, join_cols: list) -> bool: + +def do_join_columns_exist(source_df: pyarrow_table, target_iceberg_table: pyiceberg_table, join_cols: list) -> bool: """ This function checks if the join columns exist in both the source and target tables. @@ -73,15 +76,13 @@ def do_join_columns_exist(source_col_list: set, target_col_list: set, join_cols: } for col in join_cols: - if col not in source_col_list: + if col not in source_df.column_names: missing_columns['source'].append(col) - if col not in target_col_list: + if col not in target_iceberg_table.schema().column_names: missing_columns['target'].append(col) return missing_columns - - def get_rows_to_update_sql(source_table_name: str, target_table_name: str , join_cols: list , source_cols_list: set diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index 0ff07e63f8..d41fb7f7a0 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -120,7 +120,6 @@ def test_merge_scenario_1_simple(): table = gen_target_iceberg_table(1, 2, False, ctx) source_df = gen_source_dataset(2, 3, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"]) @@ -131,6 +130,7 @@ def test_merge_scenario_1_simple(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() + print('merge rows: test scenario 1 pass') def test_merge_scenario_2_10k_rows(): @@ -153,6 +153,7 @@ def test_merge_scenario_2_10k_rows(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() + print('merge rows: test scenario 2 pass') def test_merge_scenario_3_composite_key(): @@ -175,6 +176,7 @@ def test_merge_scenario_3_composite_key(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() + print('merge rows: composite keys test pass') def test_merge_update_only(): @@ -196,6 +198,7 @@ def test_merge_update_only(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() + print('merge rows: update only pass') def test_merge_insert_only(): """ @@ -216,6 +219,7 @@ def test_merge_insert_only(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() + print('merge rows: insert only pass') def test_merge_source_dups(): @@ -235,6 +239,7 @@ def test_merge_source_dups(): assert 'Duplicate rows found in source dataset' in error_msgs, f"error message should contain 'Duplicate rows found in source dataset', but got {error_msgs}" purge_warehouse() + print('merge rows: source dups test pass') def test_key_cols_misaligned(): @@ -261,6 +266,8 @@ def test_key_cols_misaligned(): purge_warehouse() + print('merge rows: key cols misaligned test pass') + if __name__ == "__main__": test_merge_scenario_1_simple() From f988f259672151da3510131a339e24ea5b0fa6ac Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 31 Jan 2025 13:41:53 -0500 Subject: [PATCH 14/51] moved the filter build function to a separate function to accomodate what actually needs to get updated --- pyiceberg/table/__init__.py | 25 ++---- pyiceberg/table/merge_rows_util.py | 29 +++++++ tests/table/test_merge_rows.py | 124 ++++++++++++++++++++++++++++- 3 files changed, 158 insertions(+), 20 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 1500718a2f..a34a823d67 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1111,22 +1111,9 @@ def merge_rows(self, df: pa.Table, join_cols: list #register both source and target tables so we can find the deltas to update/append ctx.register_dataset(source_table_name, ds.dataset(df)) - #instead of loading in the entire target table, let's just load in what we know exists - unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) - - pred = None - - if len(join_cols) == 1: - pred = In(join_cols[0], unique_keys[0].to_pylist()) - else: - pred = Or(*[ - And(*[ - EqualTo(col, row[col]) - for col in join_cols - ]) - for row in unique_keys.to_pylist() - ]) - #print(pred) + #get list of rows that exist so we don't have to load the entire target table + pred = merge_rows_util.get_filter_list(df, join_cols) + ctx.register_dataset(target_table_name, ds.dataset(self.scan(row_filter=pred).to_arrow())) source_col_list = merge_rows_util.get_table_column_list(ctx, source_table_name) @@ -1155,7 +1142,11 @@ def merge_rows(self, df: pa.Table, join_cols: list update_row_cnt = len(update_recs) - txn.overwrite(update_recs, overwrite_filter=pred) + overwrite_filter = merge_rows_util.get_filter_list(update_recs, join_cols) + + ## need to fix this; its overwriting everything based on a key match...not based on what has actually changed + ## maybe add that thing in as a function? + txn.overwrite(update_recs, overwrite_filter=overwrite_filter) # Insert the new records diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py index f87c8b8f6b..11825d4546 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/merge_rows_util.py @@ -19,8 +19,37 @@ from datafusion import SessionContext from pyarrow import Table as pyarrow_table +import pyarrow as pa from pyiceberg import table as pyiceberg_table +from pyiceberg.expressions import ( + BooleanExpression, + And, + EqualTo, + Or, + In, +) + +def get_filter_list(df: pyarrow_table, join_cols: list) -> BooleanExpression: + + unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) + + pred = None + + if len(join_cols) == 1: + pred = In(join_cols[0], unique_keys[0].to_pylist()) + else: + pred = Or(*[ + And(*[ + EqualTo(col, row[col]) + for col in join_cols + ]) + for row in unique_keys.to_pylist() + ]) + + return pred + + def get_table_column_list(connection: SessionContext, table_name: str) -> list: """ This function retrieves the column names and their data types for the specified table. diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index d41fb7f7a0..c9bdc1a718 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -110,7 +110,7 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, return table -def test_merge_scenario_1_simple(): +def test_merge_scenario_1a_simple(): """ tests a single insert and update @@ -130,7 +130,122 @@ def test_merge_scenario_1_simple(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: test scenario 1 pass') + print('merge rows: test scenario 1a pass') + +def test_merge_scenario_1b_simple(): + + """ + tests a single insert and update; skips a row that does not need to be updated + """ + + ctx = SessionContext() + + df = ctx.sql(f""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-01' as order_date, 'A' as order_type + """).to_arrow_table() + + catalog = get_sql_catalog(_TEST_NAMESPACE) + table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) + + table.append(df) + + source_df = ctx.sql(f""" + select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type + union all + select 2 as order_id, date '2021-01-01' as order_date, 'B' as order_type + union all + select 3 as order_id, date '2021-01-01' as order_date, 'A' as order_type + """).to_arrow_table() + + res = table.merge_rows(df=source_df, join_cols=["order_id"]) + + rows_updated_should_be = 1 + rows_inserted_should_be = 1 + + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + + purge_warehouse() + print('merge rows: test scenario 1b (skip 1 row) pass') + + +def test_merge_scenario_1c_simple(): + + """ + tests a single insert and update; primary key is a date column + """ + + ctx = SessionContext() + + df = ctx.sql(f""" + select date '2021-01-01' as order_date, 'A' as order_type + union all + select date '2021-01-02' as order_date, 'A' as order_type + """).to_arrow_table() + + catalog = get_sql_catalog(_TEST_NAMESPACE) + table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) + + table.append(df) + + source_df = ctx.sql(f""" + select date '2021-01-01' as order_date, 'A' as order_type + union all + select date '2021-01-02' as order_date, 'B' as order_type + union all + select date '2021-01-03' as order_date, 'A' as order_type + """).to_arrow_table() + + res = table.merge_rows(df=source_df, join_cols=["order_date"]) + + rows_updated_should_be = 1 + rows_inserted_should_be = 1 + + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + + purge_warehouse() + print('merge rows: test scenario 1c (date as key column) pass') + +def test_merge_scenario_1d_simple(): + + """ + tests a single insert and update; primary key is a string column + """ + + ctx = SessionContext() + + df = ctx.sql(f""" + select 'abc' as order_id, 'A' as order_type + union all + select 'def' as order_id, 'A' as order_type + """).to_arrow_table() + + catalog = get_sql_catalog(_TEST_NAMESPACE) + table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) + + table.append(df) + + source_df = ctx.sql(f""" + select 'abc' as order_id, 'A' as order_type + union all + select 'def' as order_id, 'B' as order_type + union all + select 'ghi' as order_id, 'A' as order_type + """).to_arrow_table() + + res = table.merge_rows(df=source_df, join_cols=["order_id"]) + + rows_updated_should_be = 1 + rows_inserted_should_be = 1 + + assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + + purge_warehouse() + print('merge rows: test scenario 1d (string as key column) pass') def test_merge_scenario_2_10k_rows(): @@ -270,7 +385,10 @@ def test_key_cols_misaligned(): if __name__ == "__main__": - test_merge_scenario_1_simple() + test_merge_scenario_1a_simple() + test_merge_scenario_1b_simple() + #test_merge_scenario_1c_simple() + test_merge_scenario_1d_simple() test_merge_scenario_2_10k_rows() test_merge_scenario_3_composite_key() test_merge_update_only() From 43393b47c97fcf2981807869d556b46147524761 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 31 Jan 2025 13:45:53 -0500 Subject: [PATCH 15/51] removed unneccessary comment --- pyiceberg/table/__init__.py | 2 -- tests/table/test_merge_rows.py | 2 +- ...-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet | Bin 0 -> 873 bytes ...e22-6505-4978-bedc-f609b950ce36.metadata.json | 1 + ...937-1653-47f5-993c-fa16ba0b5d37.metadata.json | 1 + .../643a1a07-c467-45f9-8e4f-e59ef5d300c8-m0.avro | Bin 0 -> 4380 bytes ...2-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro | Bin 0 -> 1833 bytes 7 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 tests/table/warehouse/test_ns.db/target/data/0000/0010/0000/00000111/00000-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet create mode 100644 tests/table/warehouse/test_ns.db/target/metadata/00000-09fcae22-6505-4978-bedc-f609b950ce36.metadata.json create mode 100644 tests/table/warehouse/test_ns.db/target/metadata/00001-7cacc937-1653-47f5-993c-fa16ba0b5d37.metadata.json create mode 100644 tests/table/warehouse/test_ns.db/target/metadata/643a1a07-c467-45f9-8e4f-e59ef5d300c8-m0.avro create mode 100644 tests/table/warehouse/test_ns.db/target/metadata/snap-6962069681001976462-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index a34a823d67..d1d7b7b363 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1144,8 +1144,6 @@ def merge_rows(self, df: pa.Table, join_cols: list overwrite_filter = merge_rows_util.get_filter_list(update_recs, join_cols) - ## need to fix this; its overwriting everything based on a key match...not based on what has actually changed - ## maybe add that thing in as a function? txn.overwrite(update_recs, overwrite_filter=overwrite_filter) # Insert the new records diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index c9bdc1a718..ff70618cdb 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -387,7 +387,7 @@ def test_key_cols_misaligned(): test_merge_scenario_1a_simple() test_merge_scenario_1b_simple() - #test_merge_scenario_1c_simple() + test_merge_scenario_1c_simple() test_merge_scenario_1d_simple() test_merge_scenario_2_10k_rows() test_merge_scenario_3_composite_key() diff --git a/tests/table/warehouse/test_ns.db/target/data/0000/0010/0000/00000111/00000-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet b/tests/table/warehouse/test_ns.db/target/data/0000/0010/0000/00000111/00000-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet new file mode 100644 index 0000000000000000000000000000000000000000..0c374e883d68c08717c19d321f8e922fbe155517 GIT binary patch literal 873 zcmaJ=U2D@|6h28~C?gj|d_w}cD1(Ly-DW2p+i({raqX-dTQk~~+(zlwPT__hb| zojw6V7gj}9=|XobjiZ*vc@xSD9$aD4>?WTAHN8D19;PO{0=gQ=Kt&3F9^~ohMNVYMSFv!qjZX zuDIX`)vkeFuov5fVQS`k#r&wabvOUNtJ%B&8qez}kOE*x<4;H)EFt^mJH`E}xL*|K z=4N*h%pZ!Wxq0)m`T)RoECYk!@MJr?to0$c#xjpRL~PN=@*Hu7UW|3b82wnrJSsR~ z%SU|1n*3``9-IE|RUEO|C(uoH>jXll1d;U(_A{Y5i2cXSQP^$19PW*0Av2IH`0#g` zngq>)%n=V5N?Km4)oBKucBg%K9wy<*+fjFYJmMM#A^uq_;xRkKn`D4bSy4anI%bo_ z_jn!^vCT(jvX$Mxu{94Hoq2aXI2|_H6qV4|`yk!A*~=Zi5}J|z$(L3V^T>tO?CgM5 uOnT|-H_>!ukR&U;G@ZBB$6u_O8ixdzVM0H4`t?lfW6Wc*L=_D??NDz*@q>8N7cy}Bxx8B*CnN4I) zZYd~eXi<=m==lR^kdB6uk_L%Cfr^5H_h!B8T{~wIpHHXFcz5Q#H^28WZ$2A-v9tG% z4909i|1n;fYML_h$dpQCfihd>C}MFa&7+G~W)zx7PRmT_1ZQv&GU10*F_<-9HUA~p z%PbNMrh^nVYvoJbrKNgJxfB#e$t8$dT0Cf(xp8e&Z@0h-mZ%8K5^Zf8yhrl}vj-^^ zDpCesaMDSBxBtU0L!2Bee44GIG>uoA_6vfP!Yh`yfm5s!GRIp^MyAXI+ z7tEcwB*^h9wrMXQLmmJ>^BDA!JQxT%@`#}CTZD@M9|U3tfG+t>(@3crFDtUE?k-}v z)b$AuC;?(6{!$|4Pf zW4pMWg7DKK9|<~|s4R_HE8jLHLn>KF0ErqiWSwU&!OX2A$y3h{cm_!X!i%H_A3Am= ztn(yUXg}3yK=_E{5+sRoWyrX$LQ|K~m&}h6e>hcaIhP%~8b>-C7mCifqA@`k1ZAL_ zTt+QD10H9S#K#${(t99nUMtF^Uqn6?f=+Skkzy05bx=o&!m_AKg%e&lPS?M3oLMfUb}EWfai(OrIjeoY2&q4d8vf zaN&zQ3qPePx+teZqL3&K{}HHW3Gop|@&>Gd~<>Gf*X-zo9E{x)G^=YsVB;xeaNR_(k()bYmr z8d}gHaEBHUNLCAyd$3Kk?jgo$w^VZPLf{^*M|7Da4au%!hRs$~2CY&qpK4)Jh_Fm0qq?zvv*!=7Pm+0@t9zXzZ+tej{(K)}G_f z(F8?@&;%8B)B+wZ5EN!i;li_O;T=WS?Dk%$*}W;J|kp`iAj_&BKS2a zEX4k;9EYG&!8HMzJGs9EoeN;DFTtyqxXx{-q`rWx^Z3cf(5t3`Nxb30F)cv_Tt(oX zjTaT@lq0E4$y=(T;}g(yYu^+vCNzmgOe!D5h^aYyUteki9 z^d$tmxMbG+S38}mF;6ULo|Uw8Bv{u}urUYR`mLYH{cs4MV3o2kQ!E?)!Nb9a9>LRb z9R15~+wH@SM;&T++d=2B+wL5U`t2U;jN0s=&qfEKXWKzxBjnqTcSV9;zf@lT`KXc#!yef^}-Xc~|7_}BTkVHmrx>t!zg0gJ^=NdN!< literal 0 HcmV?d00001 diff --git a/tests/table/warehouse/test_ns.db/target/metadata/snap-6962069681001976462-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro b/tests/table/warehouse/test_ns.db/target/metadata/snap-6962069681001976462-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro new file mode 100644 index 0000000000000000000000000000000000000000..277182157f855711348e1fc251827abe0b49f1b3 GIT binary patch literal 1833 zcmb7FF>ljA6izJ$2E>GlkPxyg#8lUInm9>?m=F>Y5)#mr?#*+CnF?m>egh72T@&_&bkz}f7a0zCcF zn^&-|poO8`!n%SM0^P%A3hTZVr`yNXdT-xS?$Q6 zGLx9DQa>@&8JhtQLTt^(ID6XC(Rk+)gmnRHSrq58YD?x4tV*a}k-YB?t;OO3?bk35 za*!k@k~FN+jQ&sY^?p{9WG!w~OFm*TMAf^{x&GtZD0}et^9$=%`18Zt`^F#RqoHDV z9mm-d_&7LILI(W6VL~{?JdFUKk1?jo$Kb5~*~MH=7>>0L8~P(i`tgqIMngMyw^i0(9(Fp0@$UQ4 UulK)?j=pXfoz4~f(rJ|N50_6w@Bjb+ literal 0 HcmV?d00001 From 9a561b46ac95001ccea15de5f95c7d6972e4aff9 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 31 Jan 2025 13:46:28 -0500 Subject: [PATCH 16/51] removed test files --- tests/table/test_merge_rows.py | 2 +- ...-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet | Bin 873 -> 0 bytes ...e22-6505-4978-bedc-f609b950ce36.metadata.json | 1 - ...937-1653-47f5-993c-fa16ba0b5d37.metadata.json | 1 - .../643a1a07-c467-45f9-8e4f-e59ef5d300c8-m0.avro | Bin 4380 -> 0 bytes ...2-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro | Bin 1833 -> 0 bytes 6 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 tests/table/warehouse/test_ns.db/target/data/0000/0010/0000/00000111/00000-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet delete mode 100644 tests/table/warehouse/test_ns.db/target/metadata/00000-09fcae22-6505-4978-bedc-f609b950ce36.metadata.json delete mode 100644 tests/table/warehouse/test_ns.db/target/metadata/00001-7cacc937-1653-47f5-993c-fa16ba0b5d37.metadata.json delete mode 100644 tests/table/warehouse/test_ns.db/target/metadata/643a1a07-c467-45f9-8e4f-e59ef5d300c8-m0.avro delete mode 100644 tests/table/warehouse/test_ns.db/target/metadata/snap-6962069681001976462-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index ff70618cdb..c9bdc1a718 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -387,7 +387,7 @@ def test_key_cols_misaligned(): test_merge_scenario_1a_simple() test_merge_scenario_1b_simple() - test_merge_scenario_1c_simple() + #test_merge_scenario_1c_simple() test_merge_scenario_1d_simple() test_merge_scenario_2_10k_rows() test_merge_scenario_3_composite_key() diff --git a/tests/table/warehouse/test_ns.db/target/data/0000/0010/0000/00000111/00000-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet b/tests/table/warehouse/test_ns.db/target/data/0000/0010/0000/00000111/00000-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.parquet deleted file mode 100644 index 0c374e883d68c08717c19d321f8e922fbe155517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmaJ=U2D@|6h28~C?gj|d_w}cD1(Ly-DW2p+i({raqX-dTQk~~+(zlwPT__hb| zojw6V7gj}9=|XobjiZ*vc@xSD9$aD4>?WTAHN8D19;PO{0=gQ=Kt&3F9^~ohMNVYMSFv!qjZX zuDIX`)vkeFuov5fVQS`k#r&wabvOUNtJ%B&8qez}kOE*x<4;H)EFt^mJH`E}xL*|K z=4N*h%pZ!Wxq0)m`T)RoECYk!@MJr?to0$c#xjpRL~PN=@*Hu7UW|3b82wnrJSsR~ z%SU|1n*3``9-IE|RUEO|C(uoH>jXll1d;U(_A{Y5i2cXSQP^$19PW*0Av2IH`0#g` zngq>)%n=V5N?Km4)oBKucBg%K9wy<*+fjFYJmMM#A^uq_;xRkKn`D4bSy4anI%bo_ z_jn!^vCT(jvX$Mxu{94Hoq2aXI2|_H6qV4|`yk!A*~=Zi5}J|z$(L3V^T>tO?CgM5 uOnT|-H_>!ukR&U;G@ZBB$6u_O8ixdzVM0H4`t?lfW6Wc*L=_D??NDz*@q>8N7cy}Bxx8B*CnN4I) zZYd~eXi<=m==lR^kdB6uk_L%Cfr^5H_h!B8T{~wIpHHXFcz5Q#H^28WZ$2A-v9tG% z4909i|1n;fYML_h$dpQCfihd>C}MFa&7+G~W)zx7PRmT_1ZQv&GU10*F_<-9HUA~p z%PbNMrh^nVYvoJbrKNgJxfB#e$t8$dT0Cf(xp8e&Z@0h-mZ%8K5^Zf8yhrl}vj-^^ zDpCesaMDSBxBtU0L!2Bee44GIG>uoA_6vfP!Yh`yfm5s!GRIp^MyAXI+ z7tEcwB*^h9wrMXQLmmJ>^BDA!JQxT%@`#}CTZD@M9|U3tfG+t>(@3crFDtUE?k-}v z)b$AuC;?(6{!$|4Pf zW4pMWg7DKK9|<~|s4R_HE8jLHLn>KF0ErqiWSwU&!OX2A$y3h{cm_!X!i%H_A3Am= ztn(yUXg}3yK=_E{5+sRoWyrX$LQ|K~m&}h6e>hcaIhP%~8b>-C7mCifqA@`k1ZAL_ zTt+QD10H9S#K#${(t99nUMtF^Uqn6?f=+Skkzy05bx=o&!m_AKg%e&lPS?M3oLMfUb}EWfai(OrIjeoY2&q4d8vf zaN&zQ3qPePx+teZqL3&K{}HHW3Gop|@&>Gd~<>Gf*X-zo9E{x)G^=YsVB;xeaNR_(k()bYmr z8d}gHaEBHUNLCAyd$3Kk?jgo$w^VZPLf{^*M|7Da4au%!hRs$~2CY&qpK4)Jh_Fm0qq?zvv*!=7Pm+0@t9zXzZ+tej{(K)}G_f z(F8?@&;%8B)B+wZ5EN!i;li_O;T=WS?Dk%$*}W;J|kp`iAj_&BKS2a zEX4k;9EYG&!8HMzJGs9EoeN;DFTtyqxXx{-q`rWx^Z3cf(5t3`Nxb30F)cv_Tt(oX zjTaT@lq0E4$y=(T;}g(yYu^+vCNzmgOe!D5h^aYyUteki9 z^d$tmxMbG+S38}mF;6ULo|Uw8Bv{u}urUYR`mLYH{cs4MV3o2kQ!E?)!Nb9a9>LRb z9R15~+wH@SM;&T++d=2B+wL5U`t2U;jN0s=&qfEKXWKzxBjnqTcSV9;zf@lT`KXc#!yef^}-Xc~|7_}BTkVHmrx>t!zg0gJ^=NdN!< diff --git a/tests/table/warehouse/test_ns.db/target/metadata/snap-6962069681001976462-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro b/tests/table/warehouse/test_ns.db/target/metadata/snap-6962069681001976462-0-643a1a07-c467-45f9-8e4f-e59ef5d300c8.avro deleted file mode 100644 index 277182157f855711348e1fc251827abe0b49f1b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1833 zcmb7FF>ljA6izJ$2E>GlkPxyg#8lUInm9>?m=F>Y5)#mr?#*+CnF?m>egh72T@&_&bkz}f7a0zCcF zn^&-|poO8`!n%SM0^P%A3hTZVr`yNXdT-xS?$Q6 zGLx9DQa>@&8JhtQLTt^(ID6XC(Rk+)gmnRHSrq58YD?x4tV*a}k-YB?t;OO3?bk35 za*!k@k~FN+jQ&sY^?p{9WG!w~OFm*TMAf^{x&GtZD0}et^9$=%`18Zt`^F#RqoHDV z9mm-d_&7LILI(W6VL~{?JdFUKk1?jo$Kb5~*~MH=7>>0L8~P(i`tgqIMngMyw^i0(9(Fp0@$UQ4 UulK)?j=pXfoz4~f(rJ|N50_6w@Bjb+ From 9ef39a6bcdfd1915027bffb9e144c941b743a9dd Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Mon, 3 Feb 2025 16:49:50 -0500 Subject: [PATCH 17/51] bug fixes and removed some more dependency on datafusion --- pyiceberg/expressions/literals.py | 6 ++++ pyiceberg/table/__init__.py | 23 ++++++------ pyiceberg/table/merge_rows_util.py | 56 +++++++++--------------------- tests/table/test_merge_rows.py | 2 +- 4 files changed, 34 insertions(+), 53 deletions(-) diff --git a/pyiceberg/expressions/literals.py b/pyiceberg/expressions/literals.py index d1c170d0dd..f257dee68e 100644 --- a/pyiceberg/expressions/literals.py +++ b/pyiceberg/expressions/literals.py @@ -28,6 +28,8 @@ from math import isnan from typing import Any, Generic, Type from uuid import UUID +from datetime import date +from datetime import datetime from pyiceberg.typedef import L from pyiceberg.types import ( @@ -53,10 +55,12 @@ time_str_to_micros, timestamp_to_micros, timestamptz_to_micros, + date_to_days, ) from pyiceberg.utils.decimal import decimal_to_unscaled, unscaled_to_decimal from pyiceberg.utils.singleton import Singleton + UUID_BYTES_LENGTH = 16 @@ -145,6 +149,8 @@ def literal(value: L) -> Literal[L]: return BinaryLiteral(value) elif isinstance(value, Decimal): return DecimalLiteral(value) + elif isinstance(value, date): + return LongLiteral(date_to_days(value)) else: raise TypeError(f"Invalid literal value: {repr(value)}") diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index d1d7b7b363..4e1490e703 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1106,6 +1106,14 @@ def merge_rows(self, df: pa.Table, join_cols: list return {'error_msgs': f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}"} + if merge_rows_util.dups_check_in_source(df, join_cols): + + return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No Merge executed'} + + + source_col_list = merge_rows_util.get_table_column_list_pa(df) + target_col_list = merge_rows_util.get_table_column_list_iceberg(self) + ctx = SessionContext() #register both source and target tables so we can find the deltas to update/append @@ -1116,17 +1124,6 @@ def merge_rows(self, df: pa.Table, join_cols: list ctx.register_dataset(target_table_name, ds.dataset(self.scan(row_filter=pred).to_arrow())) - source_col_list = merge_rows_util.get_table_column_list(ctx, source_table_name) - target_col_list = merge_rows_util.get_table_column_list(ctx, target_table_name) - - source_col_names = set([col[0] for col in source_col_list]) - target_col_names = set([col[0] for col in target_col_list]) - - #check for dups on source - if merge_rows_util.dups_check_in_source(source_table_name, join_cols, ctx): - - return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No Merge executed'} - update_row_cnt = 0 insert_row_cnt = 0 @@ -1136,7 +1133,7 @@ def merge_rows(self, df: pa.Table, join_cols: list if when_matched_update_all: - update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) + update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_list, target_col_list) update_recs = ctx.sql(update_recs_sql).to_arrow_table() @@ -1149,7 +1146,7 @@ def merge_rows(self, df: pa.Table, join_cols: list # Insert the new records if when_not_matched_insert_all: - insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(source_table_name, target_table_name, join_cols, source_col_names, target_col_names) + insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(source_table_name, target_table_name, join_cols, source_col_list, target_col_list) insert_recs = ctx.sql(insert_recs_sql).to_arrow_table() diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py index 11825d4546..70d7401677 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/merge_rows_util.py @@ -15,11 +15,9 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. - - -from datafusion import SessionContext from pyarrow import Table as pyarrow_table import pyarrow as pa +from pyarrow import compute as pc from pyiceberg import table as pyiceberg_table from pyiceberg.expressions import ( @@ -50,47 +48,26 @@ def get_filter_list(df: pyarrow_table, join_cols: list) -> BooleanExpression: return pred -def get_table_column_list(connection: SessionContext, table_name: str) -> list: - """ - This function retrieves the column names and their data types for the specified table. - It returns a list of tuples where each tuple contains the column name and its data type. - - Args: - connection: DataFusion SessionContext. - table_name: The name of the table for which to retrieve column information. - - Returns: - A list of tuples containing column names and their corresponding data types. - """ - # DataFusion logic - res = connection.sql(f""" - SELECT column_name, data_type - FROM information_schema.columns - WHERE table_name = '{table_name}' - """).collect() +def get_table_column_list_pa(df: pyarrow_table) -> list: + return set(col for col in df.column_names) - column_names = res[0][0].to_pylist() # Extract the first column (column names) - data_types = res[0][1].to_pylist() # Extract the second column (data types) +def get_table_column_list_iceberg(table: pyiceberg_table) -> list: + return set(col for col in table.schema().column_names) - return list(zip(column_names, data_types)) # Combine into list of tuples - -def dups_check_in_source(source_table: str, join_cols: list, connection: SessionContext) -> bool: +def dups_check_in_source(df: pyarrow_table, join_cols: list) -> bool: """ - This function checks if there are duplicate rows in the source and target tables based on the join columns. - It returns True if there are duplicate rows in either table, otherwise it returns False. + This function checks if there are duplicate rows in the source table based on the join columns. + It returns True if there are duplicate rows in the source table, otherwise it returns False. """ # Check for duplicates in the source table - source_dup_sql = f""" - SELECT {', '.join(join_cols)}, COUNT(*) - FROM {source_table} - GROUP BY {', '.join(join_cols)} - HAVING COUNT(*) > 1 - LIMIT 1 - """ - source_dup_df = connection.sql(source_dup_sql).collect() - source_dup_count = len(source_dup_df) - - return source_dup_count > 0 + source_dup_count = len( + df.select(join_cols) + .group_by(join_cols) + .aggregate([([], "count_all")]) + .filter(pc.field("count_all") > 1) + ) + + return source_dup_count > 0 def do_join_columns_exist(source_df: pyarrow_table, target_iceberg_table: pyiceberg_table, join_cols: list) -> bool: @@ -122,6 +99,7 @@ def get_rows_to_update_sql(source_table_name: str, target_table_name: str """ # Determine non-join columns that exist in both tables + non_join_cols = source_cols_list.intersection(target_cols_list) - set(join_cols) diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index c9bdc1a718..ff70618cdb 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -387,7 +387,7 @@ def test_key_cols_misaligned(): test_merge_scenario_1a_simple() test_merge_scenario_1b_simple() - #test_merge_scenario_1c_simple() + test_merge_scenario_1c_simple() test_merge_scenario_1d_simple() test_merge_scenario_2_10k_rows() test_merge_scenario_3_composite_key() From 2ba1ed68ef772d6d1ba4705b1291200de9a33c1e Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 4 Feb 2025 09:54:00 -0500 Subject: [PATCH 18/51] updated various items including adding a dataclass return result --- pyiceberg/table/__init__.py | 16 ++++++++-- pyiceberg/table/merge_rows_util.py | 8 +++-- tests/table/test_merge_rows.py | 49 ++++++++++-------------------- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 4e1490e703..f4532866cb 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -137,6 +137,8 @@ from pyiceberg.utils.config import Config from pyiceberg.utils.properties import property_as_bool +from dataclasses import dataclass + if TYPE_CHECKING: import daft import pandas as pd @@ -1065,10 +1067,18 @@ def name_mapping(self) -> Optional[NameMapping]: """Return the table's field-id NameMapping.""" return self.metadata.name_mapping() + @dataclass + class MergeResult: + """docstring""" + rows_updated: int + rows_inserted: int + info_msgs: str + error_msgs: str + def merge_rows(self, df: pa.Table, join_cols: list , when_matched_update_all: bool = True , when_not_matched_insert_all: bool = True - ) -> Dict: + ) -> MergeResult: """ Shorthand API for performing an upsert/merge to an iceberg table. @@ -1098,7 +1108,7 @@ def merge_rows(self, df: pa.Table, join_cols: list target_table_name = "target" if when_matched_update_all == False and when_not_matched_insert_all == False: - return {'rows_updated': 0, 'rows_inserted': 0, 'msg': 'no merge options selected...exiting'} + return {'rows_updated': 0, 'rows_inserted': 0, 'info_msgs': 'no merge options selected...exiting'} missing_columns = merge_rows_util.do_join_columns_exist(df, self, join_cols) @@ -1143,9 +1153,9 @@ def merge_rows(self, df: pa.Table, join_cols: list txn.overwrite(update_recs, overwrite_filter=overwrite_filter) - # Insert the new records if when_not_matched_insert_all: + insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(source_table_name, target_table_name, join_cols, source_col_list, target_col_list) insert_recs = ctx.sql(insert_recs_sql).to_arrow_table() diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py index 70d7401677..dcdc65cffc 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/merge_rows_util.py @@ -48,10 +48,10 @@ def get_filter_list(df: pyarrow_table, join_cols: list) -> BooleanExpression: return pred -def get_table_column_list_pa(df: pyarrow_table) -> list: +def get_table_column_list_pa(df: pyarrow_table) -> set: return set(col for col in df.column_names) -def get_table_column_list_iceberg(table: pyiceberg_table) -> list: +def get_table_column_list_iceberg(table: pyiceberg_table) -> set: return set(col for col in table.schema().column_names) def dups_check_in_source(df: pyarrow_table, join_cols: list) -> bool: @@ -69,7 +69,6 @@ def dups_check_in_source(df: pyarrow_table, join_cols: list) -> bool: return source_dup_count > 0 - def do_join_columns_exist(source_df: pyarrow_table, target_iceberg_table: pyiceberg_table, join_cols: list) -> bool: """ @@ -89,6 +88,8 @@ def do_join_columns_exist(source_df: pyarrow_table, target_iceberg_table: pyiceb return missing_columns + + def get_rows_to_update_sql(source_table_name: str, target_table_name: str , join_cols: list , source_cols_list: set @@ -99,6 +100,7 @@ def get_rows_to_update_sql(source_table_name: str, target_table_name: str """ # Determine non-join columns that exist in both tables + non_join_cols = source_cols_list.intersection(target_cols_list) - set(join_cols) diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index ff70618cdb..fe0b57b1b7 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -85,11 +85,8 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du {dup_row} """ - #print(sql) - df = ctx.sql(sql).to_arrow_table() - return df def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext): @@ -110,7 +107,7 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, return table -def test_merge_scenario_1a_simple(): +def test_merge_scenario_single_ins_upd(): """ tests a single insert and update @@ -130,9 +127,8 @@ def test_merge_scenario_1a_simple(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: test scenario 1a pass') -def test_merge_scenario_1b_simple(): +def test_merge_scenario_skip_upd_row(): """ tests a single insert and update; skips a row that does not need to be updated @@ -168,10 +164,8 @@ def test_merge_scenario_1b_simple(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: test scenario 1b (skip 1 row) pass') - -def test_merge_scenario_1c_simple(): +def test_merge_scenario_date_as_key(): """ tests a single insert and update; primary key is a date column @@ -207,9 +201,8 @@ def test_merge_scenario_1c_simple(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: test scenario 1c (date as key column) pass') -def test_merge_scenario_1d_simple(): +def test_merge_scenario_string_as_key(): """ tests a single insert and update; primary key is a string column @@ -245,9 +238,8 @@ def test_merge_scenario_1d_simple(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: test scenario 1d (string as key column) pass') -def test_merge_scenario_2_10k_rows(): +def test_merge_scenario_10k_rows(): """ tests merging 10000 rows on a single key to simulate larger workload @@ -268,9 +260,8 @@ def test_merge_scenario_2_10k_rows(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: test scenario 2 pass') -def test_merge_scenario_3_composite_key(): +def test_merge_scenario_composite_key(): """ tests merging 200 rows with a composite key @@ -291,7 +282,6 @@ def test_merge_scenario_3_composite_key(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: composite keys test pass') def test_merge_update_only(): @@ -313,7 +303,6 @@ def test_merge_update_only(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: update only pass') def test_merge_insert_only(): """ @@ -334,7 +323,6 @@ def test_merge_insert_only(): assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() - print('merge rows: insert only pass') def test_merge_source_dups(): @@ -354,7 +342,6 @@ def test_merge_source_dups(): assert 'Duplicate rows found in source dataset' in error_msgs, f"error message should contain 'Duplicate rows found in source dataset', but got {error_msgs}" purge_warehouse() - print('merge rows: source dups test pass') def test_key_cols_misaligned(): @@ -381,17 +368,13 @@ def test_key_cols_misaligned(): purge_warehouse() - print('merge rows: key cols misaligned test pass') - -if __name__ == "__main__": - - test_merge_scenario_1a_simple() - test_merge_scenario_1b_simple() - test_merge_scenario_1c_simple() - test_merge_scenario_1d_simple() - test_merge_scenario_2_10k_rows() - test_merge_scenario_3_composite_key() - test_merge_update_only() - test_merge_insert_only() - test_merge_source_dups() - test_key_cols_misaligned() +test_merge_scenario_single_ins_upd +test_merge_scenario_skip_upd_row +test_merge_scenario_date_as_key +test_merge_scenario_string_as_key +test_merge_scenario_10k_rows() +test_merge_scenario_composite_key() +test_merge_update_only() +test_merge_insert_only() +test_merge_source_dups() +test_key_cols_misaligned() From a42eecd46ffce5ca50f848fd7f8eb189bd3bef05 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 4 Feb 2025 16:04:07 -0500 Subject: [PATCH 19/51] updated merge_rows to remove dependency from datafusion! wahoo --- pyiceberg/table/__init__.py | 38 ++------ pyiceberg/table/merge_rows_util.py | 140 ++++++++++++++++++----------- tests/table/test_merge_rows.py | 14 +-- 3 files changed, 98 insertions(+), 94 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index f4532866cb..c873c5a60f 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1088,25 +1088,11 @@ def merge_rows(self, df: pa.Table, join_cols: list when_matched_update_all: Bool indicating to update rows that are matched but require an update due to a value in a non-key column changing when_not_matched_insert_all: Bool indicating new rows to be inserted that do not match any existing rows in the table - Returns: - A dictionary containing the number of rows updated and inserted. + Returns: a MergeResult class """ from pyiceberg.table import merge_rows_util - try: - from datafusion import SessionContext - except ModuleNotFoundError as e: - raise ModuleNotFoundError("For merge_rows, DataFusion needs to be installed") from e - - try: - from pyarrow import dataset as ds - except ModuleNotFoundError as e: - raise ModuleNotFoundError("For merge_rows, PyArrow needs to be installed") from e - - source_table_name = "source" - target_table_name = "target" - if when_matched_update_all == False and when_not_matched_insert_all == False: return {'rows_updated': 0, 'rows_inserted': 0, 'info_msgs': 'no merge options selected...exiting'} @@ -1120,19 +1106,9 @@ def merge_rows(self, df: pa.Table, join_cols: list return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No Merge executed'} - - source_col_list = merge_rows_util.get_table_column_list_pa(df) - target_col_list = merge_rows_util.get_table_column_list_iceberg(self) - - ctx = SessionContext() - - #register both source and target tables so we can find the deltas to update/append - ctx.register_dataset(source_table_name, ds.dataset(df)) - #get list of rows that exist so we don't have to load the entire target table pred = merge_rows_util.get_filter_list(df, join_cols) - - ctx.register_dataset(target_table_name, ds.dataset(self.scan(row_filter=pred).to_arrow())) + iceberg_table_trimmed = self.scan(row_filter=pred).to_arrow() update_row_cnt = 0 insert_row_cnt = 0 @@ -1142,10 +1118,8 @@ def merge_rows(self, df: pa.Table, join_cols: list try: if when_matched_update_all: - - update_recs_sql = merge_rows_util.get_rows_to_update_sql(source_table_name, target_table_name, join_cols, source_col_list, target_col_list) - - update_recs = ctx.sql(update_recs_sql).to_arrow_table() + + update_recs = merge_rows_util.get_rows_to_update(df, iceberg_table_trimmed, join_cols) update_row_cnt = len(update_recs) @@ -1156,9 +1130,7 @@ def merge_rows(self, df: pa.Table, join_cols: list if when_not_matched_insert_all: - insert_recs_sql = merge_rows_util.get_rows_to_insert_sql(source_table_name, target_table_name, join_cols, source_col_list, target_col_list) - - insert_recs = ctx.sql(insert_recs_sql).to_arrow_table() + insert_recs = merge_rows_util.get_rows_to_insert(df, iceberg_table_trimmed, join_cols) insert_row_cnt = len(insert_recs) diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/merge_rows_util.py index dcdc65cffc..6da8ac269f 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/merge_rows_util.py @@ -47,13 +47,6 @@ def get_filter_list(df: pyarrow_table, join_cols: list) -> BooleanExpression: return pred - -def get_table_column_list_pa(df: pyarrow_table) -> set: - return set(col for col in df.column_names) - -def get_table_column_list_iceberg(table: pyiceberg_table) -> set: - return set(col for col in table.schema().column_names) - def dups_check_in_source(df: pyarrow_table, join_cols: list) -> bool: """ This function checks if there are duplicate rows in the source table based on the join columns. @@ -88,58 +81,97 @@ def do_join_columns_exist(source_df: pyarrow_table, target_iceberg_table: pyiceb return missing_columns - - -def get_rows_to_update_sql(source_table_name: str, target_table_name: str - , join_cols: list - , source_cols_list: set - , target_cols_list: set) -> str: +def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: + """ - This function returns the rows that need to be updated in the target table based on the source table. - It compares the source and target tables based on the join columns and returns the rows that have different values in the non-join columns. + This function takes the source_table, trims it down to rows that match in both source and target. + It then does a scan for the non-key columns to see if any are mis-aligned before returning the final row set to update """ + + all_columns = set(source_table.column_names) + join_cols_set = set(join_cols) - # Determine non-join columns that exist in both tables + non_key_cols = list(all_columns - join_cols_set) - non_join_cols = source_cols_list.intersection(target_cols_list) - set(join_cols) - - - sql = f""" - SELECT {', '.join([f"src.{col}" for col in join_cols])}, - {', '.join([f"src.{col}" for col in non_join_cols])} - FROM {source_table_name} as src - INNER JOIN {target_table_name} as tgt - ON {' AND '.join([f"src.{col} = tgt.{col}" for col in join_cols])} - EXCEPT DISTINCT - SELECT {', '.join([f"tgt.{col}" for col in join_cols])}, - {', '.join([f"tgt.{col}" for col in non_join_cols])} - FROM {target_table_name} as tgt - """ - return sql + match_expr = None + + for col in join_cols: + target_values = target_table.column(col).to_pylist() + expr = pc.field(col).isin(target_values) + if match_expr is None: + match_expr = expr + else: + match_expr = match_expr & expr -def get_rows_to_insert_sql(source_table_name: str, target_table_name: str - , join_cols: list - , source_cols_list: set - , target_cols_list: set) -> str: - + + matching_source_rows = source_table.filter(match_expr) + + rows_to_update = [] + + for index in range(matching_source_rows.num_rows): + + source_row = matching_source_rows.slice(index, 1) + + + target_filter = None + + for col in join_cols: + target_value = source_row.column(col)[0].as_py() + if target_filter is None: + target_filter = pc.field(col) == target_value + else: + target_filter = target_filter & (pc.field(col) == target_value) + + matching_target_row = target_table.filter(target_filter) + + if matching_target_row.num_rows > 0: + needs_update = False + + for non_key_col in non_key_cols: + source_value = source_row.column(non_key_col)[0].as_py() + target_value = matching_target_row.column(non_key_col)[0].as_py() + + if source_value != target_value: + needs_update = True + break + + if needs_update: + rows_to_update.append(source_row) + + if rows_to_update: + rows_to_update_table = pa.concat_tables(rows_to_update) + else: + rows_to_update_table = pa.Table.from_arrays([], names=source_table.column_names) + + common_columns = set(source_table.column_names).intersection(set(target_table.column_names)) + rows_to_update_table = rows_to_update_table.select(list(common_columns)) + + return rows_to_update_table + +def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: + + source_filter_expr = None + + for col in join_cols: + + target_values = target_table.column(col).to_pylist() + expr = pc.field(col).isin(target_values) + + if source_filter_expr is None: + source_filter_expr = expr + else: + source_filter_expr = source_filter_expr & expr + + non_matching_expr = ~source_filter_expr + + source_columns = set(source_table.column_names) + target_columns = set(target_table.column_names) + + common_columns = source_columns.intersection(target_columns) + + non_matching_rows = source_table.filter(non_matching_expr).select(common_columns) + + return non_matching_rows - # Determine non-join columns that exist in both tables - insert_cols = source_cols_list.intersection(target_cols_list) - set(join_cols) - - # Build the SQL query - sql = f""" - SELECT - {', '.join([f"src.{col}" for col in join_cols])}, - {', '.join([f"src.{col}" for col in insert_cols])} - FROM - {source_table_name} as src - LEFT JOIN - {target_table_name} as tgt - ON - {' AND '.join([f"src.{col} = tgt.{col}" for col in join_cols])} - WHERE - tgt.{join_cols[0]} IS NULL - """ - return sql diff --git a/tests/table/test_merge_rows.py b/tests/table/test_merge_rows.py index fe0b57b1b7..ab56747e5c 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_merge_rows.py @@ -16,8 +16,11 @@ # under the License. from pyiceberg.catalog.sql import SqlCatalog +from pyiceberg.catalog import Table as pyiceberg_table import os import shutil +import pyarrow as pa +from datetime import datetime _TEST_NAMESPACE = "test_ns" @@ -117,7 +120,6 @@ def test_merge_scenario_single_ins_upd(): table = gen_target_iceberg_table(1, 2, False, ctx) source_df = gen_source_dataset(2, 3, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"]) rows_updated_should_be = 1 @@ -125,7 +127,6 @@ def test_merge_scenario_single_ins_upd(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - purge_warehouse() def test_merge_scenario_skip_upd_row(): @@ -250,7 +251,6 @@ def test_merge_scenario_10k_rows(): table = gen_target_iceberg_table(1, 10000, False, ctx) source_df = gen_source_dataset(5001, 15000, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"]) rows_updated_should_be = 5000 @@ -368,10 +368,10 @@ def test_key_cols_misaligned(): purge_warehouse() -test_merge_scenario_single_ins_upd -test_merge_scenario_skip_upd_row -test_merge_scenario_date_as_key -test_merge_scenario_string_as_key +test_merge_scenario_single_ins_upd() +test_merge_scenario_skip_upd_row() +test_merge_scenario_date_as_key() +test_merge_scenario_string_as_key() test_merge_scenario_10k_rows() test_merge_scenario_composite_key() test_merge_update_only() From 1305f5814a116b353c1023deba816b2a670e86c7 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 5 Feb 2025 12:00:03 -0500 Subject: [PATCH 20/51] renamed merge_rows to upsert, removed unnecessary code. will put in final tweaks to test code soon to paramaterize for pytests --- pyiceberg/table/__init__.py | 34 ++++++++----------- .../{merge_rows_util.py => upsert_util.py} | 19 ----------- .../{test_merge_rows.py => test_upsert.py} | 28 ++++++++------- 3 files changed, 30 insertions(+), 51 deletions(-) rename pyiceberg/table/{merge_rows_util.py => upsert_util.py} (88%) rename tests/table/{test_merge_rows.py => test_upsert.py} (92%) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index c873c5a60f..bfb613be03 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1068,46 +1068,40 @@ def name_mapping(self) -> Optional[NameMapping]: return self.metadata.name_mapping() @dataclass - class MergeResult: + class UpsertResult: """docstring""" rows_updated: int rows_inserted: int info_msgs: str error_msgs: str - def merge_rows(self, df: pa.Table, join_cols: list + def upsert(self, df: pa.Table, join_cols: list , when_matched_update_all: bool = True , when_not_matched_insert_all: bool = True - ) -> MergeResult: + ) -> UpsertResult: """ - Shorthand API for performing an upsert/merge to an iceberg table. + Shorthand API for performing an upsert to an iceberg table. Args: - df: The input dataframe to merge with the table's data. + df: The input dataframe to upsert with the table's data. join_cols: The columns to join on. when_matched_update_all: Bool indicating to update rows that are matched but require an update due to a value in a non-key column changing when_not_matched_insert_all: Bool indicating new rows to be inserted that do not match any existing rows in the table - Returns: a MergeResult class + Returns: a UpsertResult class """ - from pyiceberg.table import merge_rows_util + from pyiceberg.table import upsert_util if when_matched_update_all == False and when_not_matched_insert_all == False: - return {'rows_updated': 0, 'rows_inserted': 0, 'info_msgs': 'no merge options selected...exiting'} + return {'rows_updated': 0, 'rows_inserted': 0, 'info_msgs': 'no upsert options selected...exiting'} - missing_columns = merge_rows_util.do_join_columns_exist(df, self, join_cols) - - if missing_columns['source'] or missing_columns['target']: - - return {'error_msgs': f"Join columns missing in tables: Source table columns missing: {missing_columns['source']}, Target table columns missing: {missing_columns['target']}"} - - if merge_rows_util.dups_check_in_source(df, join_cols): + if upsert_util.dups_check_in_source(df, join_cols): - return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No Merge executed'} + return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No upsert executed'} #get list of rows that exist so we don't have to load the entire target table - pred = merge_rows_util.get_filter_list(df, join_cols) + pred = upsert_util.get_filter_list(df, join_cols) iceberg_table_trimmed = self.scan(row_filter=pred).to_arrow() update_row_cnt = 0 @@ -1119,18 +1113,18 @@ def merge_rows(self, df: pa.Table, join_cols: list if when_matched_update_all: - update_recs = merge_rows_util.get_rows_to_update(df, iceberg_table_trimmed, join_cols) + update_recs = upsert_util.get_rows_to_update(df, iceberg_table_trimmed, join_cols) update_row_cnt = len(update_recs) - overwrite_filter = merge_rows_util.get_filter_list(update_recs, join_cols) + overwrite_filter = upsert_util.get_filter_list(update_recs, join_cols) txn.overwrite(update_recs, overwrite_filter=overwrite_filter) if when_not_matched_insert_all: - insert_recs = merge_rows_util.get_rows_to_insert(df, iceberg_table_trimmed, join_cols) + insert_recs = upsert_util.get_rows_to_insert(df, iceberg_table_trimmed, join_cols) insert_row_cnt = len(insert_recs) diff --git a/pyiceberg/table/merge_rows_util.py b/pyiceberg/table/upsert_util.py similarity index 88% rename from pyiceberg/table/merge_rows_util.py rename to pyiceberg/table/upsert_util.py index 6da8ac269f..f9db01b909 100644 --- a/pyiceberg/table/merge_rows_util.py +++ b/pyiceberg/table/upsert_util.py @@ -62,25 +62,6 @@ def dups_check_in_source(df: pyarrow_table, join_cols: list) -> bool: return source_dup_count > 0 -def do_join_columns_exist(source_df: pyarrow_table, target_iceberg_table: pyiceberg_table, join_cols: list) -> bool: - - """ - This function checks if the join columns exist in both the source and target tables. - It returns a dictionary indicating which join columns are missing from each table. - """ - missing_columns = { - 'source': [], - 'target': [] - } - - for col in join_cols: - if col not in source_df.column_names: - missing_columns['source'].append(col) - if col not in target_iceberg_table.schema().column_names: - missing_columns['target'].append(col) - - return missing_columns - def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: """ diff --git a/tests/table/test_merge_rows.py b/tests/table/test_upsert.py similarity index 92% rename from tests/table/test_merge_rows.py rename to tests/table/test_upsert.py index ab56747e5c..c388524684 100644 --- a/tests/table/test_merge_rows.py +++ b/tests/table/test_upsert.py @@ -120,7 +120,7 @@ def test_merge_scenario_single_ins_upd(): table = gen_target_iceberg_table(1, 2, False, ctx) source_df = gen_source_dataset(2, 3, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"]) + res = table.upsert(df=source_df, join_cols=["order_id"]) rows_updated_should_be = 1 rows_inserted_should_be = 1 @@ -156,7 +156,7 @@ def test_merge_scenario_skip_upd_row(): select 3 as order_id, date '2021-01-01' as order_date, 'A' as order_type """).to_arrow_table() - res = table.merge_rows(df=source_df, join_cols=["order_id"]) + res = table.upsert(df=source_df, join_cols=["order_id"]) rows_updated_should_be = 1 rows_inserted_should_be = 1 @@ -193,7 +193,7 @@ def test_merge_scenario_date_as_key(): select date '2021-01-03' as order_date, 'A' as order_type """).to_arrow_table() - res = table.merge_rows(df=source_df, join_cols=["order_date"]) + res = table.upsert(df=source_df, join_cols=["order_date"]) rows_updated_should_be = 1 rows_inserted_should_be = 1 @@ -230,7 +230,7 @@ def test_merge_scenario_string_as_key(): select 'ghi' as order_id, 'A' as order_type """).to_arrow_table() - res = table.merge_rows(df=source_df, join_cols=["order_id"]) + res = table.upsert(df=source_df, join_cols=["order_id"]) rows_updated_should_be = 1 rows_inserted_should_be = 1 @@ -251,7 +251,7 @@ def test_merge_scenario_10k_rows(): table = gen_target_iceberg_table(1, 10000, False, ctx) source_df = gen_source_dataset(5001, 15000, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"]) + res = table.upsert(df=source_df, join_cols=["order_id"]) rows_updated_should_be = 5000 rows_inserted_should_be = 5000 @@ -273,7 +273,7 @@ def test_merge_scenario_composite_key(): source_df = gen_source_dataset(101, 300, True, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id", "order_line_id"]) + res = table.upsert(df=source_df, join_cols=["order_id", "order_line_id"]) rows_updated_should_be = 100 rows_inserted_should_be = 100 @@ -294,7 +294,7 @@ def test_merge_update_only(): table = gen_target_iceberg_table(1, 1000, False, ctx) source_df = gen_source_dataset(501, 1500, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"], when_matched_update_all=True, when_not_matched_insert_all=False) + res = table.upsert(df=source_df, join_cols=["order_id"], when_matched_update_all=True, when_not_matched_insert_all=False) rows_updated_should_be = 500 rows_inserted_should_be = 0 @@ -314,7 +314,7 @@ def test_merge_insert_only(): table = gen_target_iceberg_table(1, 1000, False, ctx) source_df = gen_source_dataset(501, 1500, False, False, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"], when_matched_update_all=False, when_not_matched_insert_all=True) + res = table.upsert(df=source_df, join_cols=["order_id"], when_matched_update_all=False, when_not_matched_insert_all=True) rows_updated_should_be = 0 rows_inserted_should_be = 500 @@ -335,7 +335,7 @@ def test_merge_source_dups(): table = gen_target_iceberg_table(1, 10, False, ctx) source_df = gen_source_dataset(5, 15, False, True, ctx) - res = table.merge_rows(df=source_df, join_cols=["order_id"]) + res = table.upsert(df=source_df, join_cols=["order_id"]) error_msgs = res['error_msgs'] @@ -361,10 +361,14 @@ def test_key_cols_misaligned(): df_src = ctx.sql("select 1 as item_id, date '2021-05-01' as order_date, 'B' as order_type").to_arrow_table() - res = table.merge_rows(df=df_src, join_cols=['order_id']) - error_msgs = res['error_msgs'] + try: + + res = table.upsert(df=df_src, join_cols=['order_id']) + + except KeyError as e: + error_msgs = str(e) - assert 'Join columns missing in tables' in error_msgs, f"error message should contain 'Join columns missing in tables', but got {error_msgs}" + assert 'Field "order_id" does not exist in schema' in error_msgs, f"""error message should contain 'Field "order_id" does not exist in schema', but got {error_msgs}""" purge_warehouse() From b2be3db084ee0919fe05aca10382763c38a2f21e Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 5 Feb 2025 13:54:36 -0500 Subject: [PATCH 21/51] adding params to unit testing for pytest; having some errors --- pyproject.toml | 1216 ++++++++++++++++++++++++++++++++++++ tests/table/test_upsert.py | 96 ++- 2 files changed, 1287 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d59fe88a1a..c8c381d41d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6207,6 +6207,1222 @@ ignore_missing_imports = true module = "tenacity.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + [tool.poetry.scripts] pyiceberg = "pyiceberg.cli.console:run" diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index c388524684..bc9bfe5d99 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -19,15 +19,16 @@ from pyiceberg.catalog import Table as pyiceberg_table import os import shutil -import pyarrow as pa -from datetime import datetime +# import pyarrow as pa +# from datetime import datetime +import pytest _TEST_NAMESPACE = "test_ns" try: from datafusion import SessionContext except ModuleNotFoundError as e: - raise ModuleNotFoundError("For merge_rows, DataFusion needs to be installed") from e + raise ModuleNotFoundError("For upsert testing, DataFusion needs to be installed") from e def get_test_warehouse_path(): curr_dir = os.path.dirname(os.path.abspath(__file__)) @@ -110,25 +111,81 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, return table -def test_merge_scenario_single_ins_upd(): - """ - tests a single insert and update - """ +def gen_target_iceberg_table_v2(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: SqlCatalog, namespace: str): + + additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" + + df = ctx.sql(f""" + with t as (SELECT unnest(range({start_row},{end_row+1})) as order_id) + SELECT t.order_id {additional_columns} + , date '2021-01-01' as order_date, 'A' as order_type + from t + """).to_arrow_table() + + #catalog = get_sql_catalog(_TEST_NAMESPACE) + table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) + + table.append(df) + + return table + +@pytest.fixture +def catalog_conn(): + warehouse_path = get_test_warehouse_path() + os.makedirs(warehouse_path, exist_ok=True) + print(warehouse_path) + catalog = SqlCatalog( + "default", + **{ + #"uri": f"sqlite:///:memory:", + "uri": f"sqlite:///{warehouse_path}/test.db", + "warehouse": f"file://{warehouse_path}", + }, + ) + catalog.create_namespace(namespace="test_ns") + + try: + yield catalog + finally: + # If SqlCatalog has a method to close the connection, use it here + # If not, ensure the database connection is cleaned up properly + # For example, delete the database file if it's created in a temporary directory + if os.path.exists(f"{warehouse_path}/test.db"): + os.remove(f"{warehouse_path}/test.db") + +@pytest.mark.parametrize( + "run_scenario, join_cols, src_start_row, src_end_row, target_start_row, target_end_row, expected_updated, expected_inserted", + [ + (1, ["order_id"], 1, 2, 2, 3, 1, 1), + #(2, ["order_id"], 5001, 15000, 1, 10000, 5000, 5000), + ] +) +def test_merge_rows(catalog_conn, run_scenario, join_cols, src_start_row, src_end_row, target_start_row, target_end_row, expected_updated, expected_inserted): + + ctx = SessionContext() - table = gen_target_iceberg_table(1, 2, False, ctx) - source_df = gen_source_dataset(2, 3, False, False, ctx) - res = table.upsert(df=source_df, join_cols=["order_id"]) + cat = catalog_conn - rows_updated_should_be = 1 - rows_inserted_should_be = 1 + source_df = gen_source_dataset(src_start_row, src_end_row, False, False, ctx) + ice_table = gen_target_iceberg_table_v2(target_start_row, target_end_row, False, ctx, cat, _TEST_NAMESPACE) + res = ice_table.upsert(df=source_df, join_cols=join_cols) + + print('ran in the pytest area') + + print(res) + + assert res['rows_updated'] == expected_updated, f"rows updated should be {expected_updated}, but got {res['rows_updated']}" + assert res['rows_inserted'] == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res['rows_inserted']}" - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" purge_warehouse() + #catalog.drop_namespace(_TEST_NAMESPACE) + + print('asserts succeeded in pytest area') + def test_merge_scenario_skip_upd_row(): """ @@ -371,14 +428,3 @@ def test_key_cols_misaligned(): assert 'Field "order_id" does not exist in schema' in error_msgs, f"""error message should contain 'Field "order_id" does not exist in schema', but got {error_msgs}""" purge_warehouse() - -test_merge_scenario_single_ins_upd() -test_merge_scenario_skip_upd_row() -test_merge_scenario_date_as_key() -test_merge_scenario_string_as_key() -test_merge_scenario_10k_rows() -test_merge_scenario_composite_key() -test_merge_update_only() -test_merge_insert_only() -test_merge_source_dups() -test_key_cols_misaligned() From f5688ad96323e8bd577eb163ef25252144961733 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 5 Feb 2025 15:58:03 -0500 Subject: [PATCH 22/51] fixed bugs on unit testing; added context wrapper for txn; fixed various items --- pyiceberg/expressions/literals.py | 3 +- pyiceberg/table/__init__.py | 41 +++---- tests/table/test_upsert.py | 185 +++++++----------------------- 3 files changed, 61 insertions(+), 168 deletions(-) diff --git a/pyiceberg/expressions/literals.py b/pyiceberg/expressions/literals.py index f257dee68e..3055c20a23 100644 --- a/pyiceberg/expressions/literals.py +++ b/pyiceberg/expressions/literals.py @@ -28,8 +28,7 @@ from math import isnan from typing import Any, Generic, Type from uuid import UUID -from datetime import date -from datetime import datetime +from datetime import date, datetime from pyiceberg.typedef import L from pyiceberg.types import ( diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index bfb613be03..349d4c13c7 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1067,13 +1067,13 @@ def name_mapping(self) -> Optional[NameMapping]: """Return the table's field-id NameMapping.""" return self.metadata.name_mapping() - @dataclass + @dataclass(frozen=True) class UpsertResult: - """docstring""" - rows_updated: int - rows_inserted: int - info_msgs: str - error_msgs: str + """Summary the upsert operation""" + rows_updated: int = 0 + rows_inserted: int = 0 + info_msgs: Optional[str] = None + error_msgs: Optional[str] = None def upsert(self, df: pa.Table, join_cols: list , when_matched_update_all: bool = True @@ -1095,6 +1095,7 @@ def upsert(self, df: pa.Table, join_cols: list if when_matched_update_all == False and when_not_matched_insert_all == False: return {'rows_updated': 0, 'rows_inserted': 0, 'info_msgs': 'no upsert options selected...exiting'} + #return UpsertResult(info_msgs='no upsert options selected...exiting') if upsert_util.dups_check_in_source(df, join_cols): @@ -1107,31 +1108,28 @@ def upsert(self, df: pa.Table, join_cols: list update_row_cnt = 0 insert_row_cnt = 0 - txn = self.transaction() - try: - - if when_matched_update_all: - update_recs = upsert_util.get_rows_to_update(df, iceberg_table_trimmed, join_cols) + with self.transaction() as txn: + + if when_matched_update_all: - update_row_cnt = len(update_recs) + update_recs = upsert_util.get_rows_to_update(df, iceberg_table_trimmed, join_cols) - overwrite_filter = upsert_util.get_filter_list(update_recs, join_cols) + update_row_cnt = len(update_recs) - txn.overwrite(update_recs, overwrite_filter=overwrite_filter) + overwrite_filter = upsert_util.get_filter_list(update_recs, join_cols) + txn.overwrite(update_recs, overwrite_filter=overwrite_filter) - if when_not_matched_insert_all: - - insert_recs = upsert_util.get_rows_to_insert(df, iceberg_table_trimmed, join_cols) - insert_row_cnt = len(insert_recs) + if when_not_matched_insert_all: + + insert_recs = upsert_util.get_rows_to_insert(df, iceberg_table_trimmed, join_cols) - txn.append(insert_recs) + insert_row_cnt = len(insert_recs) - if when_matched_update_all or when_not_matched_insert_all: - txn.commit_transaction() + txn.append(insert_recs) return { "rows_updated": update_row_cnt, @@ -1139,7 +1137,6 @@ def upsert(self, df: pa.Table, join_cols: list } except Exception as e: - print(f"Error: {e}") raise e def append(self, df: pa.Table, snapshot_properties: Dict[str, str] = EMPTY_DICT) -> None: diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index bc9bfe5d99..bbfbe05838 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -19,8 +19,6 @@ from pyiceberg.catalog import Table as pyiceberg_table import os import shutil -# import pyarrow as pa -# from datetime import datetime import pytest _TEST_NAMESPACE = "test_ns" @@ -34,22 +32,8 @@ def get_test_warehouse_path(): curr_dir = os.path.dirname(os.path.abspath(__file__)) return f"{curr_dir}/warehouse" -def get_sql_catalog(namespace: str) -> SqlCatalog: - warehouse_path = get_test_warehouse_path() - catalog = SqlCatalog( - "default", - **{ - "uri": f"sqlite:///:memory:", - "warehouse": f"file://{warehouse_path}", - }, - ) - - catalog.create_namespace(namespace=namespace) - return catalog - def purge_warehouse(): warehouse_path = get_test_warehouse_path() - if os.path.exists(warehouse_path): shutil.rmtree(warehouse_path) @@ -93,25 +77,6 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du return df -def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext): - - additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" - - df = ctx.sql(f""" - with t as (SELECT unnest(range({start_row},{end_row+1})) as order_id) - SELECT t.order_id {additional_columns} - , date '2021-01-01' as order_date, 'A' as order_type - from t - """).to_arrow_table() - - catalog = get_sql_catalog(_TEST_NAMESPACE) - table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) - - table.append(df) - - return table - - def gen_target_iceberg_table_v2(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: SqlCatalog, namespace: str): additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" @@ -123,14 +88,13 @@ def gen_target_iceberg_table_v2(start_row: int, end_row: int, composite_key: boo from t """).to_arrow_table() - #catalog = get_sql_catalog(_TEST_NAMESPACE) table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) return table -@pytest.fixture +@pytest.fixture(scope="session") def catalog_conn(): warehouse_path = get_test_warehouse_path() os.makedirs(warehouse_path, exist_ok=True) @@ -138,60 +102,52 @@ def catalog_conn(): catalog = SqlCatalog( "default", **{ - #"uri": f"sqlite:///:memory:", - "uri": f"sqlite:///{warehouse_path}/test.db", + "uri": f"sqlite:///:memory:", "warehouse": f"file://{warehouse_path}", }, ) catalog.create_namespace(namespace="test_ns") - try: - yield catalog - finally: - # If SqlCatalog has a method to close the connection, use it here - # If not, ensure the database connection is cleaned up properly - # For example, delete the database file if it's created in a temporary directory - if os.path.exists(f"{warehouse_path}/test.db"): - os.remove(f"{warehouse_path}/test.db") + yield catalog @pytest.mark.parametrize( - "run_scenario, join_cols, src_start_row, src_end_row, target_start_row, target_end_row, expected_updated, expected_inserted", + "join_cols, src_start_row, src_end_row, target_start_row, target_end_row, when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted", [ - (1, ["order_id"], 1, 2, 2, 3, 1, 1), - #(2, ["order_id"], 5001, 15000, 1, 10000, 5000, 5000), + (["order_id"], 1, 2, 2, 3, True, True, 1, 1), # single row + (["order_id"], 5001, 15000, 1, 10000, True, True, 5000, 5000), #10k rows + (["order_id"], 501, 1500, 1, 1000, True, False, 500, 0), # update only + (["order_id"], 501, 1500, 1, 1000, False, True, 0, 500), # insert only ] ) -def test_merge_rows(catalog_conn, run_scenario, join_cols, src_start_row, src_end_row, target_start_row, target_end_row, expected_updated, expected_inserted): +def test_merge_rows(catalog_conn, join_cols, src_start_row, src_end_row, target_start_row, target_end_row + , when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted): - ctx = SessionContext() - cat = catalog_conn + catalog = catalog_conn source_df = gen_source_dataset(src_start_row, src_end_row, False, False, ctx) - ice_table = gen_target_iceberg_table_v2(target_start_row, target_end_row, False, ctx, cat, _TEST_NAMESPACE) - res = ice_table.upsert(df=source_df, join_cols=join_cols) - - print('ran in the pytest area') - - print(res) + ice_table = gen_target_iceberg_table_v2(target_start_row, target_end_row, False, ctx, catalog, _TEST_NAMESPACE) + res = ice_table.upsert(df=source_df, join_cols=join_cols, when_matched_update_all=when_matched_update_all, when_not_matched_insert_all=when_not_matched_insert_all) assert res['rows_updated'] == expected_updated, f"rows updated should be {expected_updated}, but got {res['rows_updated']}" assert res['rows_inserted'] == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res['rows_inserted']}" - purge_warehouse() - - #catalog.drop_namespace(_TEST_NAMESPACE) + catalog.drop_table(f"{_TEST_NAMESPACE}.target") - print('asserts succeeded in pytest area') +@pytest.fixture(scope="session", autouse=True) +def cleanup(): + yield # This allows other tests to run first + purge_warehouse() -def test_merge_scenario_skip_upd_row(): +def test_merge_scenario_skip_upd_row(catalog_conn): """ tests a single insert and update; skips a row that does not need to be updated """ + ctx = SessionContext() df = ctx.sql(f""" @@ -200,7 +156,7 @@ def test_merge_scenario_skip_upd_row(): select 2 as order_id, date '2021-01-01' as order_date, 'A' as order_type """).to_arrow_table() - catalog = get_sql_catalog(_TEST_NAMESPACE) + catalog = catalog_conn table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) @@ -221,9 +177,9 @@ def test_merge_scenario_skip_upd_row(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - purge_warehouse() + catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_date_as_key(): +def test_merge_scenario_date_as_key(catalog_conn): """ tests a single insert and update; primary key is a date column @@ -237,7 +193,7 @@ def test_merge_scenario_date_as_key(): select date '2021-01-02' as order_date, 'A' as order_type """).to_arrow_table() - catalog = get_sql_catalog(_TEST_NAMESPACE) + catalog = catalog_conn table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) @@ -258,9 +214,9 @@ def test_merge_scenario_date_as_key(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - purge_warehouse() + catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_string_as_key(): +def test_merge_scenario_string_as_key(catalog_conn): """ tests a single insert and update; primary key is a string column @@ -274,7 +230,7 @@ def test_merge_scenario_string_as_key(): select 'def' as order_id, 'A' as order_type """).to_arrow_table() - catalog = get_sql_catalog(_TEST_NAMESPACE) + catalog = catalog_conn table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) @@ -295,30 +251,9 @@ def test_merge_scenario_string_as_key(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - purge_warehouse() - -def test_merge_scenario_10k_rows(): - - """ - tests merging 10000 rows on a single key to simulate larger workload - """ - - ctx = SessionContext() - - table = gen_target_iceberg_table(1, 10000, False, ctx) - source_df = gen_source_dataset(5001, 15000, False, False, ctx) - - res = table.upsert(df=source_df, join_cols=["order_id"]) - - rows_updated_should_be = 5000 - rows_inserted_should_be = 5000 - - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - - purge_warehouse() + catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_composite_key(): +def test_merge_scenario_composite_key(catalog_conn): """ tests merging 200 rows with a composite key @@ -326,7 +261,8 @@ def test_merge_scenario_composite_key(): ctx = SessionContext() - table = gen_target_iceberg_table(1, 200, True, ctx) + catalog = catalog_conn + table = gen_target_iceberg_table_v2(1, 200, True, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(101, 300, True, False, ctx) @@ -338,50 +274,9 @@ def test_merge_scenario_composite_key(): assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - purge_warehouse() - -def test_merge_update_only(): - - """ - tests explicit merge options to do update only - """ - - ctx = SessionContext() - - table = gen_target_iceberg_table(1, 1000, False, ctx) - source_df = gen_source_dataset(501, 1500, False, False, ctx) - - res = table.upsert(df=source_df, join_cols=["order_id"], when_matched_update_all=True, when_not_matched_insert_all=False) - - rows_updated_should_be = 500 - rows_inserted_should_be = 0 - - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - - purge_warehouse() + catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_insert_only(): - """ - tests explicit merge options to do insert only - """ - - ctx = SessionContext() - - table = gen_target_iceberg_table(1, 1000, False, ctx) - source_df = gen_source_dataset(501, 1500, False, False, ctx) - - res = table.upsert(df=source_df, join_cols=["order_id"], when_matched_update_all=False, when_not_matched_insert_all=True) - - rows_updated_should_be = 0 - rows_inserted_should_be = 500 - - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" - - purge_warehouse() - -def test_merge_source_dups(): +def test_merge_source_dups(catalog_conn): """ tests duplicate rows in source @@ -389,7 +284,9 @@ def test_merge_source_dups(): ctx = SessionContext() - table = gen_target_iceberg_table(1, 10, False, ctx) + + catalog = catalog_conn + table = gen_target_iceberg_table_v2(1, 10, False, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(5, 15, False, True, ctx) res = table.upsert(df=source_df, join_cols=["order_id"]) @@ -398,9 +295,9 @@ def test_merge_source_dups(): assert 'Duplicate rows found in source dataset' in error_msgs, f"error message should contain 'Duplicate rows found in source dataset', but got {error_msgs}" - purge_warehouse() + catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_key_cols_misaligned(): +def test_key_cols_misaligned(catalog_conn): """ tests join columns missing from one of the tables @@ -408,10 +305,9 @@ def test_key_cols_misaligned(): ctx = SessionContext() - #generate dummy target iceberg table df = ctx.sql("select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type").to_arrow_table() - catalog = get_sql_catalog(_TEST_NAMESPACE) + catalog = catalog_conn table = catalog.create_table(f"{_TEST_NAMESPACE}.target", df.schema) table.append(df) @@ -427,4 +323,5 @@ def test_key_cols_misaligned(): assert 'Field "order_id" does not exist in schema' in error_msgs, f"""error message should contain 'Field "order_id" does not exist in schema', but got {error_msgs}""" - purge_warehouse() + catalog.drop_table(f"{_TEST_NAMESPACE}.target") + From 7d55a4eb988addff6fc51738fe1b6cd53434e2c3 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 6 Feb 2025 09:32:51 -0500 Subject: [PATCH 23/51] bug fixes --- pyiceberg/table/__init__.py | 56 ++++++++++++++++++++++------------ pyiceberg/table/upsert_util.py | 14 +++------ tests/table/test_upsert.py | 27 ++++++---------- 3 files changed, 51 insertions(+), 46 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 349d4c13c7..ec6baf0f3f 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -52,7 +52,6 @@ IsNull, Or, Reference, - In, ) from pyiceberg.expressions.visitors import ( _InclusiveMetricsEvaluator, @@ -1072,8 +1071,6 @@ class UpsertResult: """Summary the upsert operation""" rows_updated: int = 0 rows_inserted: int = 0 - info_msgs: Optional[str] = None - error_msgs: Optional[str] = None def upsert(self, df: pa.Table, join_cols: list , when_matched_update_all: bool = True @@ -1083,27 +1080,46 @@ def upsert(self, df: pa.Table, join_cols: list Shorthand API for performing an upsert to an iceberg table. Args: + self: the target Iceberg table to execute the upsert on df: The input dataframe to upsert with the table's data. - join_cols: The columns to join on. + join_cols: The columns to join on. These are essentially analogous to primary keys when_matched_update_all: Bool indicating to update rows that are matched but require an update due to a value in a non-key column changing when_not_matched_insert_all: Bool indicating new rows to be inserted that do not match any existing rows in the table - Returns: a UpsertResult class + Example Use Cases: + Case 1: Both Parameters = True (Full Upsert) + Existing row found → Update it + New row found → Insert it + + Case 2: when_matched_update_all = False, when_not_matched_insert_all = True + Existing row found → Do nothing (no updates) + New row found → Insert it + + Case 3: when_matched_update_all = True, when_not_matched_insert_all = False + Existing row found → Update it + New row found → Do nothing (no inserts) + + Case 4: Both Parameters = False (No Merge Effect) + Existing row found → Do nothing + New row found → Do nothing + (Function effectively does nothing) + + + Returns: a UpsertResult class (contains details of rows updated and inserted) """ from pyiceberg.table import upsert_util if when_matched_update_all == False and when_not_matched_insert_all == False: - return {'rows_updated': 0, 'rows_inserted': 0, 'info_msgs': 'no upsert options selected...exiting'} - #return UpsertResult(info_msgs='no upsert options selected...exiting') + raise Exception('no upsert options selected...exiting') - if upsert_util.dups_check_in_source(df, join_cols): + if upsert_util.has_duplicate_rows(df, join_cols): - return {'error_msgs': 'Duplicate rows found in source dataset based on the key columns. No upsert executed'} + raise Exception('Duplicate rows found in source dataset based on the key columns. No upsert executed') #get list of rows that exist so we don't have to load the entire target table - pred = upsert_util.get_filter_list(df, join_cols) - iceberg_table_trimmed = self.scan(row_filter=pred).to_arrow() + matched_predicate = upsert_util.create_match_filter(df, join_cols) + matched_iceberg_table = self.scan(row_filter=matched_predicate).to_arrow() update_row_cnt = 0 insert_row_cnt = 0 @@ -1113,23 +1129,25 @@ def upsert(self, df: pa.Table, join_cols: list with self.transaction() as txn: if when_matched_update_all: + + #function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed + rows_to_update = upsert_util.get_rows_to_update(df, matched_iceberg_table, join_cols) - update_recs = upsert_util.get_rows_to_update(df, iceberg_table_trimmed, join_cols) - - update_row_cnt = len(update_recs) + update_row_cnt = len(rows_to_update) - overwrite_filter = upsert_util.get_filter_list(update_recs, join_cols) + #build the match predicate filter + overwrite_mask_predicate = upsert_util.create_match_filter(rows_to_update, join_cols) - txn.overwrite(update_recs, overwrite_filter=overwrite_filter) + txn.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) if when_not_matched_insert_all: - insert_recs = upsert_util.get_rows_to_insert(df, iceberg_table_trimmed, join_cols) + rows_to_insert = upsert_util.get_rows_to_insert(df, matched_iceberg_table, join_cols) - insert_row_cnt = len(insert_recs) + insert_row_cnt = len(rows_to_insert) - txn.append(insert_recs) + txn.append(rows_to_insert) return { "rows_updated": update_row_cnt, diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index f9db01b909..cb03b6e04d 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -28,16 +28,14 @@ In, ) -def get_filter_list(df: pyarrow_table, join_cols: list) -> BooleanExpression: +def create_match_filter(df: pyarrow_table, join_cols: list) -> BooleanExpression: unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) - pred = None - if len(join_cols) == 1: - pred = In(join_cols[0], unique_keys[0].to_pylist()) + return In(join_cols[0], unique_keys[0].to_pylist()) else: - pred = Or(*[ + return Or(*[ And(*[ EqualTo(col, row[col]) for col in join_cols @@ -45,9 +43,7 @@ def get_filter_list(df: pyarrow_table, join_cols: list) -> BooleanExpression: for row in unique_keys.to_pylist() ]) - return pred - -def dups_check_in_source(df: pyarrow_table, join_cols: list) -> bool: +def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: """ This function checks if there are duplicate rows in the source table based on the join columns. It returns True if there are duplicate rows in the source table, otherwise it returns False. @@ -144,7 +140,7 @@ def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols source_filter_expr = expr else: source_filter_expr = source_filter_expr & expr - + non_matching_expr = ~source_filter_expr source_columns = set(source_table.column_names) diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index bbfbe05838..eb74f207fe 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -77,7 +77,7 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du return df -def gen_target_iceberg_table_v2(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: SqlCatalog, namespace: str): +def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: SqlCatalog, namespace: str): additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" @@ -107,7 +107,7 @@ def catalog_conn(): }, ) - catalog.create_namespace(namespace="test_ns") + catalog.create_namespace(namespace=_TEST_NAMESPACE) yield catalog @@ -128,7 +128,7 @@ def test_merge_rows(catalog_conn, join_cols, src_start_row, src_end_row, target_ catalog = catalog_conn source_df = gen_source_dataset(src_start_row, src_end_row, False, False, ctx) - ice_table = gen_target_iceberg_table_v2(target_start_row, target_end_row, False, ctx, catalog, _TEST_NAMESPACE) + ice_table = gen_target_iceberg_table(target_start_row, target_end_row, False, ctx, catalog, _TEST_NAMESPACE) res = ice_table.upsert(df=source_df, join_cols=join_cols, when_matched_update_all=when_matched_update_all, when_not_matched_insert_all=when_not_matched_insert_all) assert res['rows_updated'] == expected_updated, f"rows updated should be {expected_updated}, but got {res['rows_updated']}" @@ -147,7 +147,6 @@ def test_merge_scenario_skip_upd_row(catalog_conn): tests a single insert and update; skips a row that does not need to be updated """ - ctx = SessionContext() df = ctx.sql(f""" @@ -262,7 +261,7 @@ def test_merge_scenario_composite_key(catalog_conn): ctx = SessionContext() catalog = catalog_conn - table = gen_target_iceberg_table_v2(1, 200, True, ctx, catalog, _TEST_NAMESPACE) + table = gen_target_iceberg_table(1, 200, True, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(101, 300, True, False, ctx) @@ -286,14 +285,12 @@ def test_merge_source_dups(catalog_conn): catalog = catalog_conn - table = gen_target_iceberg_table_v2(1, 10, False, ctx, catalog, _TEST_NAMESPACE) + table = gen_target_iceberg_table(1, 10, False, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(5, 15, False, True, ctx) - res = table.upsert(df=source_df, join_cols=["order_id"]) - - error_msgs = res['error_msgs'] + with pytest.raises(Exception, match="Duplicate rows found in source dataset based on the key columns. No upsert executed"): + table.upsert(df=source_df, join_cols=["order_id"]) - assert 'Duplicate rows found in source dataset' in error_msgs, f"error message should contain 'Duplicate rows found in source dataset', but got {error_msgs}" catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -314,14 +311,8 @@ def test_key_cols_misaligned(catalog_conn): df_src = ctx.sql("select 1 as item_id, date '2021-05-01' as order_date, 'B' as order_type").to_arrow_table() - try: - - res = table.upsert(df=df_src, join_cols=['order_id']) - - except KeyError as e: - error_msgs = str(e) - - assert 'Field "order_id" does not exist in schema' in error_msgs, f"""error message should contain 'Field "order_id" does not exist in schema', but got {error_msgs}""" + with pytest.raises(Exception, match=r"""Field ".*" does not exist in schema"""): + table.upsert(df=df_src, join_cols=['order_id']) catalog.drop_table(f"{_TEST_NAMESPACE}.target") From 2e14767e2231c134beb4a15cbb0fc7f18d04e9a9 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 6 Feb 2025 12:31:14 -0500 Subject: [PATCH 24/51] updated some error throwing items --- pyiceberg/table/__init__.py | 47 +++++++++++++++++----------------- pyiceberg/table/upsert_util.py | 1 - 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index ec6baf0f3f..79a17fed00 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1111,11 +1111,11 @@ def upsert(self, df: pa.Table, join_cols: list from pyiceberg.table import upsert_util if when_matched_update_all == False and when_not_matched_insert_all == False: - raise Exception('no upsert options selected...exiting') + raise ValueError('no upsert options selected...exiting') if upsert_util.has_duplicate_rows(df, join_cols): - raise Exception('Duplicate rows found in source dataset based on the key columns. No upsert executed') + raise ValueError('Duplicate rows found in source dataset based on the key columns. No upsert executed') #get list of rows that exist so we don't have to load the entire target table matched_predicate = upsert_util.create_match_filter(df, join_cols) @@ -1124,38 +1124,37 @@ def upsert(self, df: pa.Table, join_cols: list update_row_cnt = 0 insert_row_cnt = 0 - try: + - with self.transaction() as txn: - - if when_matched_update_all: - - #function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed - rows_to_update = upsert_util.get_rows_to_update(df, matched_iceberg_table, join_cols) + with self.transaction() as txn: + + if when_matched_update_all: + + #function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed + rows_to_update = upsert_util.get_rows_to_update(df, matched_iceberg_table, join_cols) - update_row_cnt = len(rows_to_update) + update_row_cnt = len(rows_to_update) - #build the match predicate filter - overwrite_mask_predicate = upsert_util.create_match_filter(rows_to_update, join_cols) + #build the match predicate filter + overwrite_mask_predicate = upsert_util.create_match_filter(rows_to_update, join_cols) - txn.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) + txn.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) - if when_not_matched_insert_all: - - rows_to_insert = upsert_util.get_rows_to_insert(df, matched_iceberg_table, join_cols) + if when_not_matched_insert_all: + + rows_to_insert = upsert_util.get_rows_to_insert(df, matched_iceberg_table, join_cols) - insert_row_cnt = len(rows_to_insert) + insert_row_cnt = len(rows_to_insert) - txn.append(rows_to_insert) + txn.append(rows_to_insert) - return { - "rows_updated": update_row_cnt, - "rows_inserted": insert_row_cnt - } + return { + "rows_updated": update_row_cnt, + "rows_inserted": insert_row_cnt + } - except Exception as e: - raise e + #return UpsertResult(rows_updated=update_row_cnt, rows_inserted=insert_row_cnt) def append(self, df: pa.Table, snapshot_properties: Dict[str, str] = EMPTY_DICT) -> None: """ diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index cb03b6e04d..d9bf0d04a0 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -1,4 +1,3 @@ - # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information From 85c58484d0bff5f998c77fbe11cfd1cc8d83f185 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 6 Feb 2025 13:35:51 -0500 Subject: [PATCH 25/51] moved datafusion to just a dev dependency in poetry toml --- poetry.lock | 7 +- pyiceberg/table/__init__.py | 10 +- pyiceberg/table/upsert_util.py | 2 +- pyproject.toml | 1218 +++++++++++++++++++++++++++++++- tests/table/test_upsert.py | 13 +- 5 files changed, 1227 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index dda58d879d..ea70bcdebc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1285,7 +1285,7 @@ version = "43.1.0" description = "Build and run queries against data" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["dev"] files = [ {file = "datafusion-43.1.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b40afe48762c7649d1ec3a0116e31d3ee5226812fc4896c0f309d3d490a855c8"}, {file = "datafusion-43.1.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a61d3efa91578108631ae5f8f070e15656d8eb125a34fe9a1df13db72ce1bcde"}, @@ -4334,7 +4334,7 @@ version = "18.1.0" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "dev"] files = [ {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, @@ -4379,6 +4379,7 @@ files = [ {file = "pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052"}, {file = "pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73"}, ] +markers = {main = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\""} [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] @@ -6655,4 +6656,4 @@ zstandard = ["zstandard"] [metadata] lock-version = "2.1" python-versions = "^3.9, !=3.9.7" -content-hash = "567ec9cd4b954ac1f0872cd87129db845d497712e72a2eed74c69d8be4024d15" +content-hash = "f6b43b11c7720ffb74001a450dc8e2385038a4563ff0b6cd3809fec5f183ca12" diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 79a17fed00..6dd77bee83 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1114,7 +1114,6 @@ def upsert(self, df: pa.Table, join_cols: list raise ValueError('no upsert options selected...exiting') if upsert_util.has_duplicate_rows(df, join_cols): - raise ValueError('Duplicate rows found in source dataset based on the key columns. No upsert executed') #get list of rows that exist so we don't have to load the entire target table @@ -1124,9 +1123,7 @@ def upsert(self, df: pa.Table, join_cols: list update_row_cnt = 0 insert_row_cnt = 0 - - - with self.transaction() as txn: + with self.transaction() as tx: if when_matched_update_all: @@ -1138,8 +1135,7 @@ def upsert(self, df: pa.Table, join_cols: list #build the match predicate filter overwrite_mask_predicate = upsert_util.create_match_filter(rows_to_update, join_cols) - txn.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) - + tx.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) if when_not_matched_insert_all: @@ -1147,7 +1143,7 @@ def upsert(self, df: pa.Table, join_cols: list insert_row_cnt = len(rows_to_insert) - txn.append(rows_to_insert) + tx.append(rows_to_insert) return { "rows_updated": update_row_cnt, diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index d9bf0d04a0..48847ce833 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -47,7 +47,7 @@ def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: This function checks if there are duplicate rows in the source table based on the join columns. It returns True if there are duplicate rows in the source table, otherwise it returns False. """ - # Check for duplicates in the source table + source_dup_count = len( df.select(join_cols) .group_by(join_cols) diff --git a/pyproject.toml b/pyproject.toml index c8c381d41d..29fafc5737 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,7 +80,6 @@ sqlalchemy = { version = "^2.0.18", optional = true } getdaft = { version = ">=0.2.12", optional = true } cachetools = "^5.5.0" pyiceberg-core = { version = "^0.4.0", optional = true } -datafusion = "^43.1.0" [tool.poetry.group.dev.dependencies] pytest = "7.4.4" @@ -97,6 +96,7 @@ pyspark = "3.5.3" cython = "3.0.11" deptry = ">=0.14,<0.23" docutils = "!=0.21.post1" # https://github.com/python-poetry/poetry/issues/9248#issuecomment-2026240520 +datafusion = "^43.1.0" [tool.poetry.group.docs.dependencies] # for mkdocs @@ -7423,6 +7423,1222 @@ ignore_missing_imports = true module = "tenacity.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + [tool.poetry.scripts] pyiceberg = "pyiceberg.cli.console:run" diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index eb74f207fe..8c69e161ad 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -14,20 +14,15 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. - from pyiceberg.catalog.sql import SqlCatalog from pyiceberg.catalog import Table as pyiceberg_table import os import shutil import pytest +from datafusion import SessionContext _TEST_NAMESPACE = "test_ns" -try: - from datafusion import SessionContext -except ModuleNotFoundError as e: - raise ModuleNotFoundError("For upsert testing, DataFusion needs to be installed") from e - def get_test_warehouse_path(): curr_dir = os.path.dirname(os.path.abspath(__file__)) return f"{curr_dir}/warehouse" @@ -110,6 +105,7 @@ def catalog_conn(): catalog.create_namespace(namespace=_TEST_NAMESPACE) yield catalog + purge_warehouse() @pytest.mark.parametrize( "join_cols, src_start_row, src_end_row, target_start_row, target_end_row, when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted", @@ -136,11 +132,6 @@ def test_merge_rows(catalog_conn, join_cols, src_start_row, src_end_row, target_ catalog.drop_table(f"{_TEST_NAMESPACE}.target") -@pytest.fixture(scope="session", autouse=True) -def cleanup(): - yield # This allows other tests to run first - purge_warehouse() - def test_merge_scenario_skip_upd_row(catalog_conn): """ From 6472071c00347ed249fc59c5a0145091457a9c11 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 6 Feb 2025 13:52:24 -0500 Subject: [PATCH 26/51] updated UpsertRow class to be recognized in the return statement --- pyiceberg/table/__init__.py | 18 ++++++------------ tests/table/test_upsert.py | 21 +++++++++++---------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 6dd77bee83..11e9ed34c1 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -150,6 +150,11 @@ ALWAYS_TRUE = AlwaysTrue() DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE = "downcast-ns-timestamp-to-us-on-write" +@dataclass() +class UpsertResult: + """Summary the upsert operation""" + rows_updated: int = 0 + rows_inserted: int = 0 class TableProperties: PARQUET_ROW_GROUP_SIZE_BYTES = "write.parquet.row-group-size-bytes" @@ -1066,12 +1071,6 @@ def name_mapping(self) -> Optional[NameMapping]: """Return the table's field-id NameMapping.""" return self.metadata.name_mapping() - @dataclass(frozen=True) - class UpsertResult: - """Summary the upsert operation""" - rows_updated: int = 0 - rows_inserted: int = 0 - def upsert(self, df: pa.Table, join_cols: list , when_matched_update_all: bool = True , when_not_matched_insert_all: bool = True @@ -1145,12 +1144,7 @@ def upsert(self, df: pa.Table, join_cols: list tx.append(rows_to_insert) - return { - "rows_updated": update_row_cnt, - "rows_inserted": insert_row_cnt - } - - #return UpsertResult(rows_updated=update_row_cnt, rows_inserted=insert_row_cnt) + return UpsertResult(rows_updated=update_row_cnt, rows_inserted=insert_row_cnt) def append(self, df: pa.Table, snapshot_properties: Dict[str, str] = EMPTY_DICT) -> None: """ diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index 8c69e161ad..1533779c8f 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -16,6 +16,7 @@ # under the License. from pyiceberg.catalog.sql import SqlCatalog from pyiceberg.catalog import Table as pyiceberg_table +from pyiceberg.table import UpsertResult import os import shutil import pytest @@ -127,8 +128,8 @@ def test_merge_rows(catalog_conn, join_cols, src_start_row, src_end_row, target_ ice_table = gen_target_iceberg_table(target_start_row, target_end_row, False, ctx, catalog, _TEST_NAMESPACE) res = ice_table.upsert(df=source_df, join_cols=join_cols, when_matched_update_all=when_matched_update_all, when_not_matched_insert_all=when_not_matched_insert_all) - assert res['rows_updated'] == expected_updated, f"rows updated should be {expected_updated}, but got {res['rows_updated']}" - assert res['rows_inserted'] == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res['rows_inserted']}" + assert res.rows_updated == expected_updated, f"rows updated should be {expected_updated}, but got {res['rows_updated']}" + assert res.rows_inserted == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res['rows_inserted']}" catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -164,8 +165,8 @@ def test_merge_scenario_skip_upd_row(catalog_conn): rows_updated_should_be = 1 rows_inserted_should_be = 1 - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -201,8 +202,8 @@ def test_merge_scenario_date_as_key(catalog_conn): rows_updated_should_be = 1 rows_inserted_should_be = 1 - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -238,8 +239,8 @@ def test_merge_scenario_string_as_key(catalog_conn): rows_updated_should_be = 1 rows_inserted_should_be = 1 - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -261,8 +262,8 @@ def test_merge_scenario_composite_key(catalog_conn): rows_updated_should_be = 100 rows_inserted_should_be = 100 - assert res['rows_updated'] == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res['rows_inserted'] == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" + assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" catalog.drop_table(f"{_TEST_NAMESPACE}.target") From 51c34da8e22385fc8a4edc709e8e249591e71fc8 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Thu, 6 Feb 2025 13:57:38 -0500 Subject: [PATCH 27/51] removed some spaces and streamlined assert statements in unit testing --- tests/table/test_upsert.py | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index 1533779c8f..e3363c82d2 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -90,6 +90,10 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, return table +def assert_upsert_result(res, expected_updated, expected_inserted): + assert res.rows_updated == expected_updated, f"rows updated should be {expected_updated}, but got {res.rows_updated}" + assert res.rows_inserted == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res.rows_inserted}" + @pytest.fixture(scope="session") def catalog_conn(): warehouse_path = get_test_warehouse_path() @@ -128,8 +132,7 @@ def test_merge_rows(catalog_conn, join_cols, src_start_row, src_end_row, target_ ice_table = gen_target_iceberg_table(target_start_row, target_end_row, False, ctx, catalog, _TEST_NAMESPACE) res = ice_table.upsert(df=source_df, join_cols=join_cols, when_matched_update_all=when_matched_update_all, when_not_matched_insert_all=when_not_matched_insert_all) - assert res.rows_updated == expected_updated, f"rows updated should be {expected_updated}, but got {res['rows_updated']}" - assert res.rows_inserted == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res['rows_inserted']}" + assert_upsert_result(res, expected_updated, expected_inserted) catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -162,11 +165,10 @@ def test_merge_scenario_skip_upd_row(catalog_conn): res = table.upsert(df=source_df, join_cols=["order_id"]) - rows_updated_should_be = 1 - rows_inserted_should_be = 1 + expected_updated = 1 + expected_inserted = 1 - assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert_upsert_result(res, expected_updated, expected_inserted) catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -199,11 +201,10 @@ def test_merge_scenario_date_as_key(catalog_conn): res = table.upsert(df=source_df, join_cols=["order_date"]) - rows_updated_should_be = 1 - rows_inserted_should_be = 1 + expected_updated = 1 + expected_inserted = 1 - assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert_upsert_result(res, expected_updated, expected_inserted) catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -236,11 +237,10 @@ def test_merge_scenario_string_as_key(catalog_conn): res = table.upsert(df=source_df, join_cols=["order_id"]) - rows_updated_should_be = 1 - rows_inserted_should_be = 1 + expected_updated = 1 + expected_inserted = 1 - assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert_upsert_result(res, expected_updated, expected_inserted) catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -256,14 +256,12 @@ def test_merge_scenario_composite_key(catalog_conn): table = gen_target_iceberg_table(1, 200, True, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(101, 300, True, False, ctx) - res = table.upsert(df=source_df, join_cols=["order_id", "order_line_id"]) - rows_updated_should_be = 100 - rows_inserted_should_be = 100 + expected_updated = 100 + expected_inserted = 100 - assert res.rows_updated == rows_updated_should_be, f"rows updated should be {rows_updated_should_be}, but got {res['rows_updated']}" - assert res.rows_inserted == rows_inserted_should_be, f"rows inserted should be {rows_inserted_should_be}, but got {res['rows_inserted']}" + assert_upsert_result(res, expected_updated, expected_inserted) catalog.drop_table(f"{_TEST_NAMESPACE}.target") @@ -275,7 +273,6 @@ def test_merge_source_dups(catalog_conn): ctx = SessionContext() - catalog = catalog_conn table = gen_target_iceberg_table(1, 10, False, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(5, 15, False, True, ctx) @@ -283,7 +280,6 @@ def test_merge_source_dups(catalog_conn): with pytest.raises(Exception, match="Duplicate rows found in source dataset based on the key columns. No upsert executed"): table.upsert(df=source_df, join_cols=["order_id"]) - catalog.drop_table(f"{_TEST_NAMESPACE}.target") def test_key_cols_misaligned(catalog_conn): From 862a69aeb861e9d3ca5755ae144d78fb53ec9f17 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 7 Feb 2025 09:36:11 -0500 Subject: [PATCH 28/51] updated test cases to use an InMemory catalog --- tests/table/test_upsert.py | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index e3363c82d2..d655d9b473 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -14,25 +14,12 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -from pyiceberg.catalog.sql import SqlCatalog -from pyiceberg.catalog import Table as pyiceberg_table -from pyiceberg.table import UpsertResult -import os -import shutil +from tests.catalog.test_base import InMemoryCatalog import pytest from datafusion import SessionContext _TEST_NAMESPACE = "test_ns" -def get_test_warehouse_path(): - curr_dir = os.path.dirname(os.path.abspath(__file__)) - return f"{curr_dir}/warehouse" - -def purge_warehouse(): - warehouse_path = get_test_warehouse_path() - if os.path.exists(warehouse_path): - shutil.rmtree(warehouse_path) - def show_iceberg_table(table, ctx: SessionContext): import pyarrow.dataset as ds table_name = "target" @@ -73,7 +60,7 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du return df -def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: SqlCatalog, namespace: str): +def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: InMemoryCatalog, namespace: str): additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" @@ -96,21 +83,9 @@ def assert_upsert_result(res, expected_updated, expected_inserted): @pytest.fixture(scope="session") def catalog_conn(): - warehouse_path = get_test_warehouse_path() - os.makedirs(warehouse_path, exist_ok=True) - print(warehouse_path) - catalog = SqlCatalog( - "default", - **{ - "uri": f"sqlite:///:memory:", - "warehouse": f"file://{warehouse_path}", - }, - ) - + catalog = InMemoryCatalog('test') catalog.create_namespace(namespace=_TEST_NAMESPACE) - yield catalog - purge_warehouse() @pytest.mark.parametrize( "join_cols, src_start_row, src_end_row, target_start_row, target_end_row, when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted", From 3731b86f6615c5be9038e3f4ae4040d91deb2a9c Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Fri, 7 Feb 2025 09:43:52 -0500 Subject: [PATCH 29/51] updated some formatting; added more commentary on the rows_to_update section --- pyiceberg/table/__init__.py | 2 ++ pyiceberg/table/upsert_util.py | 13 +++---------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 11e9ed34c1..973dc63168 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1127,6 +1127,8 @@ def upsert(self, df: pa.Table, join_cols: list if when_matched_update_all: #function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed + #we don't want to do just a blanket overwrite for matched rows if the actual non-key column data hasn't changed + #this extra step avoids unnecessary IO and writes rows_to_update = upsert_util.get_rows_to_update(df, matched_iceberg_table, join_cols) update_row_cnt = len(rows_to_update) diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index 48847ce833..8403384a63 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -17,7 +17,6 @@ from pyarrow import Table as pyarrow_table import pyarrow as pa from pyarrow import compute as pc -from pyiceberg import table as pyiceberg_table from pyiceberg.expressions import ( BooleanExpression, @@ -44,18 +43,15 @@ def create_match_filter(df: pyarrow_table, join_cols: list) -> BooleanExpression def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: """ - This function checks if there are duplicate rows in the source table based on the join columns. - It returns True if there are duplicate rows in the source table, otherwise it returns False. + This function checks if there are duplicate rows in in a pyarrow table based on the join columns. """ - source_dup_count = len( + return len( df.select(join_cols) .group_by(join_cols) .aggregate([([], "count_all")]) .filter(pc.field("count_all") > 1) - ) - - return source_dup_count > 0 + ) > 0 def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: @@ -69,7 +65,6 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols non_key_cols = list(all_columns - join_cols_set) - match_expr = None for col in join_cols: @@ -80,7 +75,6 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols match_expr = expr else: match_expr = match_expr & expr - matching_source_rows = source_table.filter(match_expr) @@ -90,7 +84,6 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols source_row = matching_source_rows.slice(index, 1) - target_filter = None for col in join_cols: From bbb35d6f76041e9297193302f5191281fe3341d3 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Mon, 10 Feb 2025 09:29:04 -0500 Subject: [PATCH 30/51] rebased poetry lock file and pyproject.toml file; removed sf repo info --- poetry.lock | 1983 ++------- pyiceberg/table/upsert_util.py | 3 +- pyproject.toml | 7467 +------------------------------- 3 files changed, 349 insertions(+), 9104 deletions(-) diff --git a/poetry.lock b/poetry.lock index ea70bcdebc..d24514a2b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "adlfs" @@ -6,8 +6,6 @@ version = "2024.12.0" description = "Access Azure Datalake Gen1 with fsspec and dask" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "adlfs-2024.12.0-py3-none-any.whl", hash = "sha256:00aab061ddec0413b2039487e656b62e01ece8ef1ca0493f76034a596cf069e3"}, {file = "adlfs-2024.12.0.tar.gz", hash = "sha256:04582bf7461a57365766d01a295a0a88b2b8c42c4fea06e2d673f62675cac5c6"}, @@ -25,28 +23,21 @@ fsspec = ">=2023.12.0" docs = ["furo", "myst-parser", "numpydoc", "sphinx"] tests = ["arrow", "dask[dataframe]", "docker", "pytest", "pytest-mock"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "aiobotocore" -version = "2.17.0" +version = "2.19.0" description = "Async client for aws services using botocore and aiohttp" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"s3fs\"" files = [ - {file = "aiobotocore-2.17.0-py3-none-any.whl", hash = "sha256:aedccd5368a64401233ef9f27983d3d3cb6a507a6ca981f5ec1df014c00e260e"}, - {file = "aiobotocore-2.17.0.tar.gz", hash = "sha256:a3041333c565bff9d63b4468bee4944f2d81cff63a45b10e5cc652f3837f9cc2"}, + {file = "aiobotocore-2.19.0-py3-none-any.whl", hash = "sha256:12c2960a21472b8eb3452cde5eb31d541ca1464d236f4221556320fa8aed2ee8"}, + {file = "aiobotocore-2.19.0.tar.gz", hash = "sha256:552d5756989621b5274f1b4a4840cd76ae83dd930d0b1839af6443743a893faf"}, ] [package.dependencies] aiohttp = ">=3.9.2,<4.0.0" aioitertools = ">=0.5.1,<1.0.0" -botocore = ">=1.35.74,<1.35.94" +botocore = ">=1.36.0,<1.36.4" jmespath = ">=0.7.1,<2.0.0" multidict = ">=6.0.0,<7.0.0" python-dateutil = ">=2.1,<3.0.0" @@ -57,13 +48,8 @@ urllib3 = [ wrapt = ">=1.10.10,<2.0.0" [package.extras] -awscli = ["awscli (>=1.36.15,<1.36.35)"] -boto3 = ["boto3 (>=1.35.74,<1.35.94)"] - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" +awscli = ["awscli (>=1.37.0,<1.37.4)"] +boto3 = ["boto3 (>=1.36.0,<1.36.4)"] [[package]] name = "aiohappyeyeballs" @@ -71,26 +57,17 @@ version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "aiohttp" version = "3.11.11" description = "Async http client/server framework (asyncio)" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, @@ -183,19 +160,12 @@ yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "aioitertools" version = "0.12.0" description = "itertools and builtins for AsyncIO and mixed iterables" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"s3fs\"" files = [ {file = "aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796"}, {file = "aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b"}, @@ -208,19 +178,12 @@ typing_extensions = {version = ">=4.0", markers = "python_version < \"3.10\""} dev = ["attribution (==1.8.0)", "black (==24.8.0)", "build (>=1.2)", "coverage (==7.6.1)", "flake8 (==7.1.1)", "flit (==3.9.0)", "mypy (==1.11.2)", "ufmt (==2.7.1)", "usort (==1.0.8.post1)"] docs = ["sphinx (==8.0.2)", "sphinx-mdinclude (==0.6.2)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "aiosignal" version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -229,92 +192,60 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "antlr4-python3-runtime" version = "4.13.2" description = "ANTLR 4.13.2 runtime for Python 3" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8"}, {file = "antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "(extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\") and python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "attrs" version = "24.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] -markers = {main = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\""} [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] @@ -324,18 +255,12 @@ docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphi tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "aws-sam-translator" version = "1.94.0" description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates" optional = false -python-versions = ">=3.8, <=4.0, !=4.0" -groups = ["dev"] +python-versions = "!=4.0,<=4.0,>=3.8" files = [ {file = "aws_sam_translator-1.94.0-py3-none-any.whl", hash = "sha256:100e33eeffcfa81f7c45cadeb0ee29596ce829f6b4d2745140f04fa19a41f539"}, {file = "aws_sam_translator-1.94.0.tar.gz", hash = "sha256:8ec258d9f7ece72ef91c81f4edb45a2db064c16844b6afac90c575893beaa391"}, @@ -350,18 +275,12 @@ typing-extensions = ">=4.4" [package.extras] dev = ["black (==24.3.0)", "boto3 (>=1.23,<2)", "boto3-stubs[appconfig,serverlessrepo] (>=1.19.5,<2.dev0)", "coverage (>=5.3,<8)", "dateparser (>=1.1,<2.0)", "mypy (>=1.3.0,<1.4.0)", "parameterized (>=0.7,<1.0)", "pytest (>=6.2,<8)", "pytest-cov (>=2.10,<5)", "pytest-env (>=0.6,<1)", "pytest-rerunfailures (>=9.1,<12)", "pytest-xdist (>=2.5,<4)", "pyyaml (>=6.0,<7.0)", "requests (>=2.28,<3.0)", "ruamel.yaml (==0.17.21)", "ruff (>=0.4.5,<0.5.0)", "tenacity (>=8.0,<9.0)", "types-PyYAML (>=6.0,<7.0)", "types-jsonschema (>=3.2,<4.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "aws-xray-sdk" version = "2.14.0" description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service." optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "aws_xray_sdk-2.14.0-py2.py3-none-any.whl", hash = "sha256:cfbe6feea3d26613a2a869d14c9246a844285c97087ad8f296f901633554ad94"}, {file = "aws_xray_sdk-2.14.0.tar.gz", hash = "sha256:aab843c331af9ab9ba5cefb3a303832a19db186140894a523edafc024cc0493c"}, @@ -371,19 +290,12 @@ files = [ botocore = ">=1.11.3" wrapt = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "azure-core" version = "1.32.0" description = "Microsoft Azure Core Library for Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"}, {file = "azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5"}, @@ -397,19 +309,12 @@ typing-extensions = ">=4.6.0" [package.extras] aio = ["aiohttp (>=3.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "azure-datalake-store" version = "0.0.53" description = "Azure Data Lake Store Filesystem Client Library for Python" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "azure-datalake-store-0.0.53.tar.gz", hash = "sha256:05b6de62ee3f2a0a6e6941e6933b792b800c3e7f6ffce2fc324bc19875757393"}, {file = "azure_datalake_store-0.0.53-py2.py3-none-any.whl", hash = "sha256:a30c902a6e360aa47d7f69f086b426729784e71c536f330b691647a51dc42b2b"}, @@ -420,19 +325,12 @@ cffi = "*" msal = ">=1.16.0,<2" requests = ">=2.20.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "azure-identity" version = "1.19.0" description = "Microsoft Azure Identity Library for Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "azure_identity-1.19.0-py3-none-any.whl", hash = "sha256:e3f6558c181692d7509f09de10cca527c7dce426776454fb97df512a46527e81"}, {file = "azure_identity-1.19.0.tar.gz", hash = "sha256:500144dc18197d7019b81501165d4fa92225f03778f17d7ca8a2a180129a9c83"}, @@ -445,19 +343,12 @@ msal = ">=1.30.0" msal-extensions = ">=1.2.0" typing-extensions = ">=4.0.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "azure-storage-blob" version = "12.24.0" description = "Microsoft Azure Blob Storage Client Library for Python" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "azure_storage_blob-12.24.0-py3-none-any.whl", hash = "sha256:4f0bb4592ea79a2d986063696514c781c9e62be240f09f6397986e01755bc071"}, {file = "azure_storage_blob-12.24.0.tar.gz", hash = "sha256:eaaaa1507c8c363d6e1d1342bd549938fdf1adec9b1ada8658c8f5bf3aea844e"}, @@ -472,18 +363,12 @@ typing-extensions = ">=4.6.0" [package.extras] aio = ["azure-core[aio] (>=1.30.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "babel" version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -492,19 +377,12 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "backports-tarfile" version = "1.2.0" description = "Backport of CPython tarfile module" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "python_version <= \"3.11\"" files = [ {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, @@ -514,66 +392,46 @@ files = [ docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["jaraco.test", "pytest (!=8.0.*)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "blinker" version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "boto3" -version = "1.35.93" +version = "1.36.3" description = "The AWS SDK for Python" optional = false -python-versions = ">= 3.8" -groups = ["main", "dev"] +python-versions = ">=3.8" files = [ - {file = "boto3-1.35.93-py3-none-any.whl", hash = "sha256:7de2c44c960e486f3c57e5203ea6393c6c4f0914c5f81c789ceb8b5d2ba5d1c5"}, - {file = "boto3-1.35.93.tar.gz", hash = "sha256:2446e819cf4e295833474cdcf2c92bc82718ce537e9ee1f17f7e3d237f60e69b"}, + {file = "boto3-1.36.3-py3-none-any.whl", hash = "sha256:f9843a5d06f501d66ada06f5a5417f671823af2cf319e36ceefa1bafaaaaa953"}, + {file = "boto3-1.36.3.tar.gz", hash = "sha256:53a5307f6a3526ee2f8590e3c45efa504a3ea4532c1bfe4926c0c19bf188d141"}, ] -markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\""} [package.dependencies] -botocore = ">=1.35.93,<1.36.0" +botocore = ">=1.36.3,<1.37.0" jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.10.0,<0.11.0" +s3transfer = ">=0.11.0,<0.12.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "botocore" -version = "1.35.93" +version = "1.36.3" description = "Low-level, data-driven core of boto 3." optional = false -python-versions = ">= 3.8" -groups = ["main", "dev"] +python-versions = ">=3.8" files = [ - {file = "botocore-1.35.93-py3-none-any.whl", hash = "sha256:47f7161000af6036f806449e3de12acdd3ec11aac7f5578e43e96241413a0f8f"}, - {file = "botocore-1.35.93.tar.gz", hash = "sha256:b8d245a01e7d64c41edcf75a42be158df57b9518a83a3dbf5c7e4b8c2bc540cc"}, + {file = "botocore-1.36.3-py3-none-any.whl", hash = "sha256:536ab828e6f90dbb000e3702ac45fd76642113ae2db1b7b1373ad24104e89255"}, + {file = "botocore-1.36.3.tar.gz", hash = "sha256:775b835e979da5c96548ed1a0b798101a145aec3cd46541d62e27dda5a94d7f8"}, ] -markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\" or extra == \"s3fs\""} [package.dependencies] jmespath = ">=0.7.1,<2.0.0" @@ -584,20 +442,14 @@ urllib3 = [ ] [package.extras] -crt = ["awscrt (==0.22.0)"] - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" +crt = ["awscrt (==0.23.4)"] [[package]] name = "build" version = "1.2.2.post1" description = "A simple, correct Python build frontend" optional = false -python-versions = ">= 3.8" -groups = ["dev"] +python-versions = ">=3.8" files = [ {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, @@ -618,52 +470,34 @@ typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", " uv = ["uv (>=0.1.18)"] virtualenv = ["virtualenv (>=20.0.35)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cachetools" -version = "5.5.0" +version = "5.5.1" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ - {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, - {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, + {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, + {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "certifi" version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" -groups = ["main", "dev", "docs"] files = [ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cffi" version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -733,40 +567,27 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] -markers = {main = "(extra == \"zstandard\" or extra == \"adlfs\") and (platform_python_implementation == \"PyPy\" or extra == \"adlfs\")", dev = "platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cfn-lint" version = "1.22.2" description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "cfn_lint-1.22.2-py3-none-any.whl", hash = "sha256:dd8f575f3cec51f07940fd2564a20a68377937ccac2d0c25b7f94713a7ccbad2"}, {file = "cfn_lint-1.22.2.tar.gz", hash = "sha256:83b3fb9ada7caf94bc75b4bf13999371f74aae39bad92280fd8c9d114ba4006c"}, @@ -787,18 +608,12 @@ graph = ["pydot"] junit = ["junit-xml (>=1.9,<2.0)"] sarif = ["jschema_to_python (>=1.2.3,<1.3.0)", "sarif-om (>=1.0.4,<1.1.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "charset-normalizer" version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" -groups = ["main", "dev", "docs"] files = [ {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, @@ -907,18 +722,12 @@ files = [ {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "click" version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["main", "dev", "docs"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -927,28 +736,16 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main", "dev", "docs"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\" or os_name == \"nt\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "coverage" @@ -956,7 +753,6 @@ version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, @@ -1028,19 +824,12 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cramjam" version = "2.9.1" description = "Thin Python bindings to de/compression algorithms in Rust" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"snappy\"" files = [ {file = "cramjam-2.9.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8e82464d1e00fbbb12958999b8471ba5e9f3d9711954505a0a7b378762332e6f"}, {file = "cramjam-2.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d2df8a6511cc08ef1fccd2e0c65e2ebc9f57574ec8376052a76851af5398810"}, @@ -1137,18 +926,12 @@ files = [ [package.extras] dev = ["black (==22.3.0)", "hypothesis", "numpy", "pytest (>=5.30)", "pytest-benchmark", "pytest-xdist"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cryptography" version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" -groups = ["main", "dev"] files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -1178,7 +961,6 @@ files = [ {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] -markers = {main = "extra == \"adlfs\""} [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} @@ -1193,18 +975,12 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "cython" version = "3.0.11" description = "The Cython compiler for writing C extensions in the Python language." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["dev"] +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ {file = "Cython-3.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa"}, {file = "Cython-3.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1"}, @@ -1274,78 +1050,40 @@ files = [ {file = "cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - -[[package]] -name = "datafusion" -version = "43.1.0" -description = "Build and run queries against data" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "datafusion-43.1.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b40afe48762c7649d1ec3a0116e31d3ee5226812fc4896c0f309d3d490a855c8"}, - {file = "datafusion-43.1.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a61d3efa91578108631ae5f8f070e15656d8eb125a34fe9a1df13db72ce1bcde"}, - {file = "datafusion-43.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb46deaf625558819cff708acb115d1d249a18adf51e1eaabda898979b344b5b"}, - {file = "datafusion-43.1.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0d9ae56162304475a147c8e7284b85bda1849659c4495da4d071834a2e6392cd"}, - {file = "datafusion-43.1.0-cp38-abi3-win_amd64.whl", hash = "sha256:930830dad47925b1a84b281184eafc00152f02a84a8acc770ac3ebd36b4db5ac"}, - {file = "datafusion-43.1.0.tar.gz", hash = "sha256:271fee9ed931e976bd095ceb50ba9907fd93267f4f9517a6ea83cd46c1aa42d5"}, -] - -[package.dependencies] -pyarrow = ">=11.0.0" -typing-extensions = {version = "*", markers = "python_version < \"3.13\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" optional = true python-versions = ">=3.5" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "deptry" -version = "0.22.0" +version = "0.23.0" description = "A command line utility to check for unused, missing and transitive dependencies in a Python project." optional = false python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "deptry-0.22.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:2b903c94162e30640bb7a3e6800c7afd03a6bb12b693a21290e06c713dba35af"}, - {file = "deptry-0.22.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8b523a33bed952679c97a9f55c690803f0fbeb32649946dcc1362c3f015897c7"}, - {file = "deptry-0.22.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c68fa570be1443888d252c6f551356777e56e82e492e68e6db3d65b31100c450"}, - {file = "deptry-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:016f8a5b6c32762beea47a4d9d2d7b04f1b6e534448e5444c7a742bd2fdb260d"}, - {file = "deptry-0.22.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:46c868a0493556b41096f9824a15a3ce38811e6b4a2699ebec16e06e9f85cd84"}, - {file = "deptry-0.22.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:aebba0d1ca119f6241ff0d5b72e72a9b912fa880e81f4ab346a32d9001d6ddb1"}, - {file = "deptry-0.22.0-cp39-abi3-win_amd64.whl", hash = "sha256:2da497a9888f930b5c86c6524b29a4d284ed320edd4148ecc2e45e10f177f4fe"}, - {file = "deptry-0.22.0-cp39-abi3-win_arm64.whl", hash = "sha256:35acf2ac783ba2ec43ba593ba14e0080393c0ab24797ba55fbed30f0ba02259f"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9db9d0b8244e2b20bd75a21312c35ee628a602b00c0e2f267fb90f4600de6d2d"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:edd0060065325cd70e6ce47feaa724cdb7fc3f4de673e4ed0fa38e8c1adc4155"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b371a3c3194c2db9196ab1f80d5ce08138dea731eff8dd9fb2997da42941fa7"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e20a8ba89078d06440316dba719c2278fdb19923e76633b808fd1b5670020c4"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f4872f48225d1e7dbacb1be5e427945c8f76abf6b91453e038aae076b638ba01"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:9a12ebe86299e7bb054804464467f33c49e5a34f204b710fa10fbe1f31c56964"}, - {file = "deptry-0.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:fbe6211b972337acdeec6c11a82b666597c1edd6c6e2a93eb705bf49644bfb08"}, - {file = "deptry-0.22.0.tar.gz", hash = "sha256:32212cd40562f71b24da69babaed9a4233c567da390f681d86bb66f8ec4d2bfe"}, +files = [ + {file = "deptry-0.23.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1f2a6817a37d76e8f6b667381b7caf6ea3e6d6c18b5be24d36c625f387c79852"}, + {file = "deptry-0.23.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9601b64cc0aed42687fdd5c912d5f1e90d7f7333fb589b14e35bfdfebae866f3"}, + {file = "deptry-0.23.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6172b2205f6e84bcc9df25226693d4deb9576a6f746c2ace828f6d13401d357"}, + {file = "deptry-0.23.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cfa4b3a46ee8a026eaa38e4b9ba43fe6036a07fe16bf0a663cb611b939f6af8"}, + {file = "deptry-0.23.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9d03cc99a61c348df92074a50e0a71b28f264f0edbf686084ca90e6fd44e3abe"}, + {file = "deptry-0.23.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9a46f78098f145100dc582a59af8548b26cdfa16cf0fbd85d2d44645e724cb6a"}, + {file = "deptry-0.23.0-cp39-abi3-win_amd64.whl", hash = "sha256:d53e803b280791d89a051b6183d9dc40411200e22a8ab7e6c32c6b169822a664"}, + {file = "deptry-0.23.0-cp39-abi3-win_arm64.whl", hash = "sha256:da7678624f4626d839c8c03675452cefc59d6cf57d25c84a9711dae514719279"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:40706dcbed54141f2d23afa70a272171c8c46531cd6f0f9c8ef482c906b3cee2"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:889541844092f18e7b48631852195f36c25c5afd4d7e074b19ba824b430add50"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aff9156228eb16cd81792f920c1623c00cb59091ae572600ba0eac587da33c0c"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:583154732cfd438a4a090b7d13d8b2016f1ac2732534f34fb689345768d8538b"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:736e7bc557aec6118b2a4d454f0d81f070782faeaa9d8d3c9a15985c9f265372"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5f7e4b1a5232ed6d352fca7173750610a169377d1951d3e9782947191942a765"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:04afae204654542406318fd3dd6f4a6697579597f37195437daf84a53ee0ebbf"}, + {file = "deptry-0.23.0.tar.gz", hash = "sha256:4915a3590ccf38ad7a9176aee376745aa9de121f50f8da8fb9ccec87fa93e676"}, ] [package.dependencies] @@ -1355,35 +1093,23 @@ packaging = ">=23.2" requirements-parser = ">=0.11.0,<1" tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "distlib" version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "docker" version = "7.1.0" description = "A Python library for the Docker Engine API." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, @@ -1400,35 +1126,23 @@ docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] ssh = ["paramiko (>=2.4.3)"] websockets = ["websocket-client (>=1.3.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "docutils" version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "domdf-python-tools" version = "3.9.0" description = "Helpful functions for Python 🐍 🛠️" optional = false python-versions = ">=3.6" -groups = ["dev"] files = [ {file = "domdf_python_tools-3.9.0-py3-none-any.whl", hash = "sha256:4e1ef365cbc24627d6d1e90cf7d46d8ab8df967e1237f4a26885f6986c78872e"}, {file = "domdf_python_tools-3.9.0.tar.gz", hash = "sha256:1f8a96971178333a55e083e35610d7688cd7620ad2b99790164e1fc1a3614c18"}, @@ -1442,78 +1156,65 @@ typing-extensions = ">=3.7.4.1" all = ["pytz (>=2019.1)"] dates = ["pytz (>=2019.1)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "duckdb" -version = "1.1.3" +version = "1.2.0" description = "DuckDB in-process database" optional = true python-versions = ">=3.7.0" -groups = ["main"] -markers = "extra == \"duckdb\"" -files = [ - {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:1c0226dc43e2ee4cc3a5a4672fddb2d76fd2cf2694443f395c02dd1bea0b7fce"}, - {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:7c71169fa804c0b65e49afe423ddc2dc83e198640e3b041028da8110f7cd16f7"}, - {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:872d38b65b66e3219d2400c732585c5b4d11b13d7a36cd97908d7981526e9898"}, - {file = "duckdb-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25fb02629418c0d4d94a2bc1776edaa33f6f6ccaa00bd84eb96ecb97ae4b50e9"}, - {file = "duckdb-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3f5cd604e7c39527e6060f430769b72234345baaa0987f9500988b2814f5e4"}, - {file = "duckdb-1.1.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08935700e49c187fe0e9b2b86b5aad8a2ccd661069053e38bfaed3b9ff795efd"}, - {file = "duckdb-1.1.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9b47036945e1db32d70e414a10b1593aec641bd4c5e2056873d971cc21e978b"}, - {file = "duckdb-1.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:35c420f58abc79a68a286a20fd6265636175fadeca1ce964fc8ef159f3acc289"}, - {file = "duckdb-1.1.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4f0e2e5a6f5a53b79aee20856c027046fba1d73ada6178ed8467f53c3877d5e0"}, - {file = "duckdb-1.1.3-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:911d58c22645bfca4a5a049ff53a0afd1537bc18fedb13bc440b2e5af3c46148"}, - {file = "duckdb-1.1.3-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:c443d3d502335e69fc1e35295fcfd1108f72cb984af54c536adfd7875e79cee5"}, - {file = "duckdb-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a55169d2d2e2e88077d91d4875104b58de45eff6a17a59c7dc41562c73df4be"}, - {file = "duckdb-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d0767ada9f06faa5afcf63eb7ba1befaccfbcfdac5ff86f0168c673dd1f47aa"}, - {file = "duckdb-1.1.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51c6d79e05b4a0933672b1cacd6338f882158f45ef9903aef350c4427d9fc898"}, - {file = "duckdb-1.1.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:183ac743f21c6a4d6adfd02b69013d5fd78e5e2cd2b4db023bc8a95457d4bc5d"}, - {file = "duckdb-1.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:a30dd599b8090ea6eafdfb5a9f1b872d78bac318b6914ada2d35c7974d643640"}, - {file = "duckdb-1.1.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a433ae9e72c5f397c44abdaa3c781d94f94f4065bcbf99ecd39433058c64cb38"}, - {file = "duckdb-1.1.3-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:d08308e0a46c748d9c30f1d67ee1143e9c5ea3fbcccc27a47e115b19e7e78aa9"}, - {file = "duckdb-1.1.3-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:5d57776539211e79b11e94f2f6d63de77885f23f14982e0fac066f2885fcf3ff"}, - {file = "duckdb-1.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e59087dbbb63705f2483544e01cccf07d5b35afa58be8931b224f3221361d537"}, - {file = "duckdb-1.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ebf5f60ddbd65c13e77cddb85fe4af671d31b851f125a4d002a313696af43f1"}, - {file = "duckdb-1.1.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4ef7ba97a65bd39d66f2a7080e6fb60e7c3e41d4c1e19245f90f53b98e3ac32"}, - {file = "duckdb-1.1.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f58db1b65593ff796c8ea6e63e2e144c944dd3d51c8d8e40dffa7f41693d35d3"}, - {file = "duckdb-1.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:e86006958e84c5c02f08f9b96f4bc26990514eab329b1b4f71049b3727ce5989"}, - {file = "duckdb-1.1.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:0897f83c09356206ce462f62157ce064961a5348e31ccb2a557a7531d814e70e"}, - {file = "duckdb-1.1.3-cp313-cp313-macosx_12_0_universal2.whl", hash = "sha256:cddc6c1a3b91dcc5f32493231b3ba98f51e6d3a44fe02839556db2b928087378"}, - {file = "duckdb-1.1.3-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:1d9ab6143e73bcf17d62566e368c23f28aa544feddfd2d8eb50ef21034286f24"}, - {file = "duckdb-1.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f073d15d11a328f2e6d5964a704517e818e930800b7f3fa83adea47f23720d3"}, - {file = "duckdb-1.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5724fd8a49e24d730be34846b814b98ba7c304ca904fbdc98b47fa95c0b0cee"}, - {file = "duckdb-1.1.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51e7dbd968b393343b226ab3f3a7b5a68dee6d3fe59be9d802383bf916775cb8"}, - {file = "duckdb-1.1.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00cca22df96aa3473fe4584f84888e2cf1c516e8c2dd837210daec44eadba586"}, - {file = "duckdb-1.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:77f26884c7b807c7edd07f95cf0b00e6d47f0de4a534ac1706a58f8bc70d0d31"}, - {file = "duckdb-1.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4748635875fc3c19a7320a6ae7410f9295557450c0ebab6d6712de12640929a"}, - {file = "duckdb-1.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74e121ab65dbec5290f33ca92301e3a4e81797966c8d9feef6efdf05fc6dafd"}, - {file = "duckdb-1.1.3-cp37-cp37m-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c619e4849837c8c83666f2cd5c6c031300cd2601e9564b47aa5de458ff6e69d"}, - {file = "duckdb-1.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0ba6baa0af33ded836b388b09433a69b8bec00263247f6bf0a05c65c897108d3"}, - {file = "duckdb-1.1.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:ecb1dc9062c1cc4d2d88a5e5cd8cc72af7818ab5a3c0f796ef0ffd60cfd3efb4"}, - {file = "duckdb-1.1.3-cp38-cp38-macosx_12_0_universal2.whl", hash = "sha256:5ace6e4b1873afdd38bd6cc8fcf90310fb2d454f29c39a61d0c0cf1a24ad6c8d"}, - {file = "duckdb-1.1.3-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:a1fa0c502f257fa9caca60b8b1478ec0f3295f34bb2efdc10776fc731b8a6c5f"}, - {file = "duckdb-1.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6411e21a2128d478efbd023f2bdff12464d146f92bc3e9c49247240448ace5a6"}, - {file = "duckdb-1.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5336939d83837af52731e02b6a78a446794078590aa71fd400eb17f083dda3e"}, - {file = "duckdb-1.1.3-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f549af9f7416573ee48db1cf8c9d27aeed245cb015f4b4f975289418c6cf7320"}, - {file = "duckdb-1.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:2141c6b28162199999075d6031b5d63efeb97c1e68fb3d797279d31c65676269"}, - {file = "duckdb-1.1.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:09c68522c30fc38fc972b8a75e9201616b96ae6da3444585f14cf0d116008c95"}, - {file = "duckdb-1.1.3-cp39-cp39-macosx_12_0_universal2.whl", hash = "sha256:8ee97ec337794c162c0638dda3b4a30a483d0587deda22d45e1909036ff0b739"}, - {file = "duckdb-1.1.3-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a1f83c7217c188b7ab42e6a0963f42070d9aed114f6200e3c923c8899c090f16"}, - {file = "duckdb-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1aa3abec8e8995a03ff1a904b0e66282d19919f562dd0a1de02f23169eeec461"}, - {file = "duckdb-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80158f4c7c7ada46245837d5b6869a336bbaa28436fbb0537663fa324a2750cd"}, - {file = "duckdb-1.1.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:647f17bd126170d96a38a9a6f25fca47ebb0261e5e44881e3782989033c94686"}, - {file = "duckdb-1.1.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:252d9b17d354beb9057098d4e5d5698e091a4f4a0d38157daeea5fc0ec161670"}, - {file = "duckdb-1.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:eeacb598120040e9591f5a4edecad7080853aa8ac27e62d280f151f8c862afa3"}, - {file = "duckdb-1.1.3.tar.gz", hash = "sha256:68c3a46ab08836fe041d15dcbf838f74a990d551db47cb24ab1c4576fc19351c"}, -] - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" +files = [ + {file = "duckdb-1.2.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:7452d3655063cc3062504b5b22f8968acb96ffcdc6c2b8207bbec9da1de1f884"}, + {file = "duckdb-1.2.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:28d40a269212270e08b8541ea0922c3a893407897481cd484ad896bc2ba77a00"}, + {file = "duckdb-1.2.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:ed4586aa441a57f68e5fa5655b8a86509e1c3b6521ad4d40455ae4594e18cd59"}, + {file = "duckdb-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07823a485bc656cf2f63020117fec5245aa7fb8d085a43700208ac8b7e728866"}, + {file = "duckdb-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3b86475373cbd000035f34ba02420bc8ff432eaa646b09c5de975610120155d"}, + {file = "duckdb-1.2.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be7a14d1380ea8345b27bf5bbe77209c14ee0277c7401f504a2519936f9d087e"}, + {file = "duckdb-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c491485a14f806d12407d85510da8f09ad5d9a079ec449b7bff75eea5f9431c3"}, + {file = "duckdb-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:c8f6c09c939deb0bccaa6485798dacef0969046d1aa845ef10063558c8ee14e0"}, + {file = "duckdb-1.2.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:970a396b133608b5acb297cc172097866abbbce6cc57a2ec6b128b4f99a63ecd"}, + {file = "duckdb-1.2.0-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:ecd713a8388c1e173ef04aa5545873e93d44cb950c2af5459b44668676abc873"}, + {file = "duckdb-1.2.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:9e1323ab11ca9ee72bb3c54dfb4919add4b2aa524085bac80c2a888ce673cdf0"}, + {file = "duckdb-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c22e4ddcf1a76b4cf90cac23de06910557b239b4ba783e6dec1e04210de897e9"}, + {file = "duckdb-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f2b0fbe63786061b028f48e41efcecfdcf3d5f8cb5ce415ee1d5885691c19f"}, + {file = "duckdb-1.2.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6dc9fd4c6f3505d7d69eed05d26a345d9652a4dab791b6d95ac18d6cdda2041"}, + {file = "duckdb-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4788c1f6d588be232b4a9dbc2c4a3546cd1ced945a1182d785cf913a5bd122a3"}, + {file = "duckdb-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:eeb5a517445d18949610cd30da1215303693cdae2942e6b1b7661314380f715e"}, + {file = "duckdb-1.2.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c0427501908d3b4fe464913b0ae2418ff52d1fa24b3982d864169b1d54b6bbee"}, + {file = "duckdb-1.2.0-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:33df2430f35e68739fd9fb6bbe1a5f86f4f46b362c9abb3a3f74a989560ef597"}, + {file = "duckdb-1.2.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:fd8ca2910efb85f0dd0d50383eaed9b6b7e86e6cacb032c36712e84265855e58"}, + {file = "duckdb-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9747d3d2a3290c795c0343eb927dbc75ca78d0440726824c2a39d9634fba9394"}, + {file = "duckdb-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91704accb74223267ae226f3470d71f7ad824549482b3f7fc91710a9fe5a1152"}, + {file = "duckdb-1.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9357737c6699b1f57e1d02b299371b2634bf08927d4e8386146ec5e4d1ebb31"}, + {file = "duckdb-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d61ba5272dd1bf772b7a74f4964e83080602f8f6e9a46a0fa7203a4e0e05249"}, + {file = "duckdb-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f317cfa2f6ff3bc209985715669f4b8dd601faa69e46a206163e53b8db61a1d1"}, + {file = "duckdb-1.2.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7feaaf185e89138e3d0f4dc9bf647767df1a3f080b4be719837613cb9288b79e"}, + {file = "duckdb-1.2.0-cp313-cp313-macosx_12_0_universal2.whl", hash = "sha256:a52bb5991656cab0b90537c5e05746019be09c5f63535db03ddbff6f65b2ccb3"}, + {file = "duckdb-1.2.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d10d5596667f82812b130f3e7fffb282a31c05525ee2f8adddfaa1a07529fe9"}, + {file = "duckdb-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436b7c0cd40a63fdce8477b03868026b60b2376cf155812be07392213b707874"}, + {file = "duckdb-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c6b8464d9bd5770071d4a00a457b4c09974b930ccb1fe99991cfa8ddda0b905"}, + {file = "duckdb-1.2.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2835bc4828d2e1f8ad58f8ef946815af8beb55f9697e6e9d5a028b81abc02c62"}, + {file = "duckdb-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b35284599ac6bf6a09ffd334bc7f4d5df47126bce054a0f73b53f3eac1a5688e"}, + {file = "duckdb-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:5cf770fdd5244e47b3cbca6dd4ef2d13b6b9a6071f3fc7b55487e9ddff19e9cd"}, + {file = "duckdb-1.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ccd37c1c000f2a3a7e8852d9cc64de4549ab484d4ecc05f8a3df76443d3b8"}, + {file = "duckdb-1.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89d0111609383bd440f1afe2b540969ec02cd1e11959df0313efb644c14d061"}, + {file = "duckdb-1.2.0-cp37-cp37m-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:304c5395f9bd788b1e35a71407b80e3af116daa77b05dc417a6deb986ffd4def"}, + {file = "duckdb-1.2.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:6effb33a2bed59ddaa53cb5e3cfb2ad47e2fb98a156f49073df7c755394ab52a"}, + {file = "duckdb-1.2.0-cp38-cp38-macosx_12_0_universal2.whl", hash = "sha256:a405579b402e49ad5b52e58953e29a489c4f611a0c768088a50a086baea5e134"}, + {file = "duckdb-1.2.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:eb4ce9c6cfc0f45d1cf827e5a10294fdfd235e221aeebf10d3a31e898e3a2e0e"}, + {file = "duckdb-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:648e2179e1a56cca884c1c993d12f07807f5a285d78972cb3a001736c8f6d332"}, + {file = "duckdb-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b88bf1cc28d76e23534ae1485c5fefcac610ee98f61b378ec255530387fbf93"}, + {file = "duckdb-1.2.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4548e068e8dfbda5839c3a5ed1f036f0773d984d02d933ee54395c864228fe9b"}, + {file = "duckdb-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:a679ab1ab14bc2adf9ce8bc06ae64b9312a63b93925becc8959ff38350d913de"}, + {file = "duckdb-1.2.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f802ddf4d87d319fd957d5dbc283db750c970909b6456bd3e3a51f61e153b524"}, + {file = "duckdb-1.2.0-cp39-cp39-macosx_12_0_universal2.whl", hash = "sha256:238093c290e63f010684a970e1af0780f8974b3a812b4f6a734d78a73658bd3d"}, + {file = "duckdb-1.2.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a7d2577229c699431f620bdd1e97175e558f8bfd0f56fa6bcc41f13841148b91"}, + {file = "duckdb-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8336c9e4c66ab7fd1ba8786a2551f96f2bbc9a8d6d86f109c5d4c86634635e4f"}, + {file = "duckdb-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d01a72a4c6ba78882bc5d184b0768c9ac4351406af3e43a9da5810400acbdee"}, + {file = "duckdb-1.2.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b4d0b997702f74669ffb43283f3291ee05ca464b68deabee9a365cd40fc729e"}, + {file = "duckdb-1.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:69ce703855e30aa253bf47a4002ee35a7c63ff970306879ae76ab355bfe03632"}, + {file = "duckdb-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:a58c0763068fac7cf202a5ac9c0f85c0b6044a98185d73b5f049f955fd10b4e8"}, + {file = "duckdb-1.2.0.tar.gz", hash = "sha256:a5ce81828e6d1c3f06836d3bda38eef8355765f08ad5ce239abd6f56934dd1f8"}, +] [[package]] name = "exceptiongroup" @@ -1521,8 +1222,6 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" -groups = ["dev"] -markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1531,18 +1230,12 @@ files = [ [package.extras] test = ["pytest (>=6)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "fastavro" version = "1.10.0" description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"}, {file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"}, @@ -1583,41 +1276,28 @@ lz4 = ["lz4"] snappy = ["cramjam"] zstandard = ["zstandard"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "filelock" version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] -markers = {main = "extra == \"ray\""} [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] typing = ["typing-extensions (>=4.12.2)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "flask" version = "3.1.0" description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"}, {file = "flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac"}, @@ -1635,18 +1315,12 @@ Werkzeug = ">=3.1" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "flask-cors" version = "5.0.0" description = "A Flask extension adding a decorator for CORS support" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "Flask_Cors-5.0.0-py2.py3-none-any.whl", hash = "sha256:b9e307d082a9261c100d8fb0ba909eec6a228ed1b60a8315fd85f783d61910bc"}, {file = "flask_cors-5.0.0.tar.gz", hash = "sha256:5aadb4b950c4e93745034594d9f3ea6591f734bb3662e16e255ffbf5e89c88ef"}, @@ -1655,19 +1329,12 @@ files = [ [package.dependencies] Flask = ">=0.9" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "frozenlist" version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1763,18 +1430,12 @@ files = [ {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "fsspec" version = "2024.12.0" description = "File-system specification" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, @@ -1808,19 +1469,12 @@ test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe, test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "gcsfs" version = "2024.12.0" description = "Convenient Filesystem interface over GCS" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "gcsfs-2024.12.0-py2.py3-none-any.whl", hash = "sha256:ec88e48f77e466723705458af85dda238e43aa69fac071efd98829d06e9f095a"}, {file = "gcsfs-2024.12.0.tar.gz", hash = "sha256:e672413922108300ebc1fe78b8f99f3c7c1b94e7e088f5a6dc88de6d5a93d156"}, @@ -1839,26 +1493,19 @@ requests = "*" crc = ["crcmod"] gcsfuse = ["fusepy"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "getdaft" -version = "0.4.2" +version = "0.4.3" description = "Distributed Dataframes for Multimodal Data" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"daft\"" files = [ - {file = "getdaft-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3760e69e66e571dbb42ad354954bd52d3ce8eafdfc93c9bdaf2c1ed42017808e"}, - {file = "getdaft-0.4.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:2b1c072f69663b87e4f3aa926cf7441d1d150fe46a6d2b32c8b01f72a237680b"}, - {file = "getdaft-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e6450fd90743bd981575dc3a1b6694fe1e4a9fe2fc31ea5ad1ca92e1dabef2"}, - {file = "getdaft-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852c71f81e1ff4fffd60ee7542ff325d1e93ec857adff8c26494a0188dc79ae"}, - {file = "getdaft-0.4.2-cp39-abi3-win_amd64.whl", hash = "sha256:687031e101dd4df151f387cc8a2a60bfc6bda640d4deb2d3a74a4f742eb57edf"}, - {file = "getdaft-0.4.2.tar.gz", hash = "sha256:9d253a5dce0ee798be9737ef1da60f313235fd459b4ff3b48e6aafe30538ff21"}, + {file = "getdaft-0.4.3-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:94ad4a3b5dca650e5fe75b2db16b901fd7640e29af67f17fbcb213d90551a523"}, + {file = "getdaft-0.4.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:e2c7ad0a47874f5af20168a437504e00c84fa8c2cffb9e32cb7d508484c6c0db"}, + {file = "getdaft-0.4.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8fa68769f95a71f63d38b12811d94c47dc4bc2a14654bb5e481a8adc3ae5cba"}, + {file = "getdaft-0.4.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eb59124f3390103049d581afc1d8860cc07663f4928c46d4e88aad98bfea6c1"}, + {file = "getdaft-0.4.3-cp39-abi3-win_amd64.whl", hash = "sha256:50d7c38c1fe0ce07a45c8beadc0a1742bb854e8ec0736d341dd8963481af2b21"}, + {file = "getdaft-0.4.3.tar.gz", hash = "sha256:01f95c2d75b680a8d7fab757cbefd756dea340526af3aabc8be709f6e002f05d"}, ] [package.dependencies] @@ -1880,18 +1527,12 @@ ray = ["packaging", "ray[client,data] (>=2.0.0)", "ray[client,data] (>=2.10.0)"] sql = ["connectorx", "sqlalchemy", "sqlglot"] unity = ["unitycatalog"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" -groups = ["docs"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -1903,19 +1544,12 @@ python-dateutil = ">=2.8.1" [package.extras] dev = ["flake8", "markdown", "twine", "wheel"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-api-core" version = "2.24.0" description = "Google API client core library" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "google_api_core-2.24.0-py3-none-any.whl", hash = "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9"}, {file = "google_api_core-2.24.0.tar.gz", hash = "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf"}, @@ -1937,19 +1571,12 @@ grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-auth" version = "2.37.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "google_auth-2.37.0-py2.py3-none-any.whl", hash = "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0"}, {file = "google_auth-2.37.0.tar.gz", hash = "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00"}, @@ -1968,19 +1595,12 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-auth-oauthlib" version = "1.2.1" description = "Google Authentication Library" optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "google_auth_oauthlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f"}, {file = "google_auth_oauthlib-1.2.1.tar.gz", hash = "sha256:afd0cad092a2eaa53cd8e8298557d6de1034c6cb4a740500b5357b648af97263"}, @@ -1993,19 +1613,12 @@ requests-oauthlib = ">=0.7.0" [package.extras] tool = ["click (>=6.0.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-cloud-core" version = "2.4.1" description = "Google Cloud API client core library" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, @@ -2018,19 +1631,12 @@ google-auth = ">=1.25.0,<3.0dev" [package.extras] grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-cloud-storage" version = "2.19.0" description = "Google Cloud Storage API client library" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "google_cloud_storage-2.19.0-py2.py3-none-any.whl", hash = "sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba"}, {file = "google_cloud_storage-2.19.0.tar.gz", hash = "sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2"}, @@ -2048,19 +1654,12 @@ requests = ">=2.18.0,<3.0.0dev" protobuf = ["protobuf (<6.0.0dev)"] tracing = ["opentelemetry-api (>=1.1.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-crc32c" version = "1.6.0" description = "A python wrapper of the C library 'Google CRC32C'" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa"}, {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9"}, @@ -2094,19 +1693,12 @@ files = [ [package.extras] testing = ["pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "google-resumable-media" version = "2.7.2" description = "Utilities for Google Media Downloads and Resumable Uploads" optional = true -python-versions = ">= 3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" +python-versions = ">=3.7" files = [ {file = "google_resumable_media-2.7.2-py2.py3-none-any.whl", hash = "sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa"}, {file = "google_resumable_media-2.7.2.tar.gz", hash = "sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0"}, @@ -2119,19 +1711,12 @@ google-crc32c = ">=1.0,<2.0dev" aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] requests = ["requests (>=2.18.0,<3.0.0dev)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "googleapis-common-protos" version = "1.66.0" description = "Common protobufs used in Google APIs" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, @@ -2143,18 +1728,12 @@ protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4 [package.extras] grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "graphql-core" version = "3.2.5" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." optional = false -python-versions = ">=3.6,<4" -groups = ["dev"] +python-versions = "<4,>=3.6" files = [ {file = "graphql_core-3.2.5-py3-none-any.whl", hash = "sha256:2f150d5096448aa4f8ab26268567bbfeef823769893b39c1a2e1409590939c8a"}, {file = "graphql_core-3.2.5.tar.gz", hash = "sha256:e671b90ed653c808715645e3998b7ab67d382d55467b7e2978549111bbabf8d5"}, @@ -2163,19 +1742,12 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4,<5", markers = "python_version < \"3.10\""} -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "greenlet" version = "3.1.1" description = "Lightweight in-process concurrent programming" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "(extra == \"sql-postgres\" or extra == \"sql-sqlite\") and python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" files = [ {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, @@ -2256,38 +1828,26 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "griffe" -version = "1.5.5" +version = "1.5.6" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" -groups = ["docs"] files = [ - {file = "griffe-1.5.5-py3-none-any.whl", hash = "sha256:2761b1e8876c6f1f9ab1af274df93ea6bbadd65090de5f38f4cb5cc84897c7dd"}, - {file = "griffe-1.5.5.tar.gz", hash = "sha256:35ee5b38b93d6a839098aad0f92207e6ad6b70c3e8866c08ca669275b8cba585"}, + {file = "griffe-1.5.6-py3-none-any.whl", hash = "sha256:b2a3afe497c6c1f952e54a23095ecc09435016293e77af8478ed65df1022a394"}, + {file = "griffe-1.5.6.tar.gz", hash = "sha256:181f6666d5aceb6cd6e2da5a2b646cfb431e47a0da1fda283845734b67e10944"}, ] [package.dependencies] colorama = ">=0.4" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "identify" version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, @@ -2296,18 +1856,12 @@ files = [ [package.extras] license = ["ukkonen"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["main", "dev", "docs"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -2316,40 +1870,27 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["dev"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "importlib-metadata" version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] files = [ {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] -markers = {dev = "python_full_version < \"3.10.2\"", docs = "python_version < \"3.10\""} [package.dependencies] zipp = ">=3.20" @@ -2363,70 +1904,45 @@ perf = ["ipython"] test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "isodate" version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "itsdangerous" version = "2.2.0" description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jaraco-context" version = "6.0.1" description = "Useful decorators and context managers" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"}, {file = "jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3"}, @@ -2439,18 +1955,12 @@ files = [ doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] test = ["portend", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jaraco-packaging" version = "10.2.3" description = "tools to supplement packaging Python releases" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "jaraco.packaging-10.2.3-py3-none-any.whl", hash = "sha256:ceb5806d2ac5731ba5b265d196e4cb848afa2a958f01d0bf3a1dfaa3969ed92c"}, {file = "jaraco_packaging-10.2.3.tar.gz", hash = "sha256:d726cc42faa62b2f70585cbe1176b4b469fe6d75f21b19034b688b4340917933"}, @@ -2466,18 +1976,12 @@ sphinx = "*" doc = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] test = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "types-docutils"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jinja2" version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" -groups = ["dev", "docs"] files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -2489,28 +1993,16 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jmespath" version = "1.0.1" description = "JSON Matching Expressions" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\" or extra == \"s3fs\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "joserfc" @@ -2518,7 +2010,6 @@ version = "1.0.1" description = "The ultimate Python library for JOSE RFCs, including JWS, JWE, JWK, JWA, JWT" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "joserfc-1.0.1-py3-none-any.whl", hash = "sha256:ae16f56b4091181cab5148a75610bb40d2452db17d09169598605250fa40f5dd"}, {file = "joserfc-1.0.1.tar.gz", hash = "sha256:c4507be82d681245f461710ffca1fa809fd288f49bc3ce4dba0b1c591700a686"}, @@ -2530,18 +2021,12 @@ cryptography = "*" [package.extras] drafts = ["pycryptodome"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jsonpatch" version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -groups = ["dev"] files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -2550,18 +2035,12 @@ files = [ [package.dependencies] jsonpointer = ">=1.9" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jsonpath-ng" version = "1.7.0" description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, @@ -2571,40 +2050,27 @@ files = [ [package.dependencies] ply = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jsonpointer" version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901) " +description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jsonschema" version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] -markers = {main = "extra == \"ray\""} [package.dependencies] attrs = ">=22.2.0" @@ -2616,18 +2082,12 @@ rpds-py = ">=0.7.1" format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jsonschema-spec" version = "0.1.3" description = "JSONSchema Spec with object-oriented paths" optional = false python-versions = ">=3.7.0,<4.0.0" -groups = ["dev"] files = [ {file = "jsonschema_spec-0.1.3-py3-none-any.whl", hash = "sha256:b3cde007ad65c2e631e2f8653cf187124a2c714d02d9fafbab68ad64bf5745d6"}, {file = "jsonschema_spec-0.1.3.tar.gz", hash = "sha256:8d8db7c255e524fab1016a952a9143e5b6e3c074f4ed25d1878f8e97806caec0"}, @@ -2639,39 +2099,26 @@ pathable = ">=0.4.1,<0.5.0" PyYAML = ">=5.1" typing-extensions = ">=4.3.0,<5.0.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "jsonschema-specifications" version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] -markers = {main = "extra == \"ray\""} [package.dependencies] referencing = ">=0.31.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "lazy-object-proxy" version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, @@ -2712,18 +2159,12 @@ files = [ {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "markdown" version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -2736,18 +2177,12 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -2766,18 +2201,12 @@ profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "markupsafe" version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" -groups = ["dev", "docs"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -2842,52 +2271,34 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" -groups = ["docs"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs" version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, @@ -2913,18 +2324,12 @@ watchdog = ">=2.0" i18n = ["babel (>=2.9.0)"] min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-autorefs" version = "1.3.0" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.9" -groups = ["docs"] files = [ {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"}, {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"}, @@ -2935,18 +2340,12 @@ Markdown = ">=3.3" markupsafe = ">=2.0.1" mkdocs = ">=1.1" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-gen-files" version = "0.5.0" description = "MkDocs plugin to programmatically generate documentation pages during the build" optional = false python-versions = ">=3.7" -groups = ["docs"] files = [ {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, @@ -2955,18 +2354,12 @@ files = [ [package.dependencies] mkdocs = ">=1.0.3" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-get-deps" version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -2978,18 +2371,12 @@ mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-literate-nav" version = "0.6.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" optional = false python-versions = ">=3.7" -groups = ["docs"] files = [ {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, @@ -2998,21 +2385,15 @@ files = [ [package.dependencies] mkdocs = ">=1.0.3" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-material" -version = "9.5.50" +version = "9.6.3" description = "Documentation that simply works" optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ - {file = "mkdocs_material-9.5.50-py3-none-any.whl", hash = "sha256:f24100f234741f4d423a9d672a909d859668a4f404796be3cf035f10d6050385"}, - {file = "mkdocs_material-9.5.50.tar.gz", hash = "sha256:ae5fe16f3d7c9ccd05bb6916a7da7420cf99a9ce5e33debd9d40403a090d5825"}, + {file = "mkdocs_material-9.6.3-py3-none-any.whl", hash = "sha256:1125622067e26940806701219303b27c0933e04533560725d97ec26fd16a39cf"}, + {file = "mkdocs_material-9.6.3.tar.gz", hash = "sha256:c87f7d1c39ce6326da5e10e232aed51bae46252e646755900f4b0fc9192fa832"}, ] [package.dependencies] @@ -3033,35 +2414,23 @@ git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-lo imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-material-extensions" version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocs-section-index" version = "0.3.9" description = "MkDocs plugin to allow clickable sections that lead to an index page" optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "mkdocs_section_index-0.3.9-py3-none-any.whl", hash = "sha256:5e5eb288e8d7984d36c11ead5533f376fdf23498f44e903929d72845b24dfe34"}, {file = "mkdocs_section_index-0.3.9.tar.gz", hash = "sha256:b66128d19108beceb08b226ee1ba0981840d14baf8a652b6c59e650f3f92e4f8"}, @@ -3070,32 +2439,25 @@ files = [ [package.dependencies] mkdocs = ">=1.2" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocstrings" -version = "0.27.0" +version = "0.28.0" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" -groups = ["docs"] files = [ - {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, - {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, + {file = "mkdocstrings-0.28.0-py3-none-any.whl", hash = "sha256:84cf3dc910614781fe0fee46ce8006fde7df6cc7cca2e3f799895fb8a9170b39"}, + {file = "mkdocstrings-0.28.0.tar.gz", hash = "sha256:df20afef1eafe36ba466ae20732509ecb74237653a585f5061937e54b553b4e0"}, ] [package.dependencies] -click = ">=7.0" importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} Jinja2 = ">=2.11.1" Markdown = ">=3.6" MarkupSafe = ">=1.1" mkdocs = ">=1.4" -mkdocs-autorefs = ">=1.2" -platformdirs = ">=2.2" +mkdocs-autorefs = ">=1.3" +mkdocs-get-deps = ">=0.2" pymdown-extensions = ">=6.3" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} @@ -3104,162 +2466,130 @@ crystal = ["mkdocstrings-crystal (>=0.3.4)"] python = ["mkdocstrings-python (>=0.5.2)"] python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mkdocstrings-python" -version = "1.13.0" +version = "1.14.6" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" -groups = ["docs"] files = [ - {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, - {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, + {file = "mkdocstrings_python-1.14.6-py3-none-any.whl", hash = "sha256:e0ca11b49ac0f23070afb566245f4ff80ea1700e03c9dbc143d70dbf1cae074e"}, + {file = "mkdocstrings_python-1.14.6.tar.gz", hash = "sha256:3fb6589491614422d781dacca085c0c5a53a7063af37a2fea5864e24e378b03e"}, ] [package.dependencies] griffe = ">=0.49" mkdocs-autorefs = ">=1.2" -mkdocstrings = ">=0.26" - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" +mkdocstrings = ">=0.28" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [[package]] name = "mmh3" -version = "5.0.1" +version = "5.1.0" description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f0a4b4bf05778ed77d820d6e7d0e9bd6beb0c01af10e1ce9233f5d2f814fcafa"}, - {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac7a391039aeab95810c2d020b69a94eb6b4b37d4e2374831e92db3a0cdf71c6"}, - {file = "mmh3-5.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3a2583b5521ca49756d8d8bceba80627a9cc295f255dcab4e3df7ccc2f09679a"}, - {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:081a8423fe53c1ac94f87165f3e4c500125d343410c1a0c5f1703e898a3ef038"}, - {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b4d72713799755dc8954a7d36d5c20a6c8de7b233c82404d122c7c7c1707cc"}, - {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:389a6fd51efc76d3182d36ec306448559c1244f11227d2bb771bdd0e6cc91321"}, - {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39f4128edaa074bff721b1d31a72508cba4d2887ee7867f22082e1fe9d4edea0"}, - {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5d23a94d91aabba3386b3769048d5f4210fdfef80393fece2f34ba5a7b466c"}, - {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:16347d038361f8b8f24fd2b7ef378c9b68ddee9f7706e46269b6e0d322814713"}, - {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6e299408565af7d61f2d20a5ffdd77cf2ed902460fe4e6726839d59ba4b72316"}, - {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42050af21ddfc5445ee5a66e73a8fc758c71790305e3ee9e4a85a8e69e810f94"}, - {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2ae9b1f5ef27ec54659920f0404b7ceb39966e28867c461bfe83a05e8d18ddb0"}, - {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:50c2495a02045f3047d71d4ae9cdd7a15efc0bcbb7ff17a18346834a8e2d1d19"}, - {file = "mmh3-5.0.1-cp310-cp310-win32.whl", hash = "sha256:c028fa77cddf351ca13b4a56d43c1775652cde0764cadb39120b68f02a23ecf6"}, - {file = "mmh3-5.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c5e741e421ec14400c4aae30890515c201f518403bdef29ae1e00d375bb4bbb5"}, - {file = "mmh3-5.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:b17156d56fabc73dbf41bca677ceb6faed435cc8544f6566d72ea77d8a17e9d0"}, - {file = "mmh3-5.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a6d5a9b1b923f1643559ba1fc0bf7a5076c90cbb558878d3bf3641ce458f25d"}, - {file = "mmh3-5.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3349b968be555f7334bbcce839da98f50e1e80b1c615d8e2aa847ea4a964a012"}, - {file = "mmh3-5.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1bd3c94b110e55db02ab9b605029f48a2f7f677c6e58c09d44e42402d438b7e1"}, - {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ba84d48608f79adbb10bb09986b6dc33eeda5c2d1bd75d00820081b73bde9"}, - {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0217987a8b8525c8d9170f66d036dec4ab45cfbd53d47e8d76125791ceb155e"}, - {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2797063a34e78d1b61639a98b0edec1c856fa86ab80c7ec859f1796d10ba429"}, - {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8bba16340adcbd47853a2fbe5afdb397549e8f2e79324ff1dced69a3f8afe7c3"}, - {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:282797957c9f60b51b9d768a602c25f579420cc9af46feb77d457a27823d270a"}, - {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e4fb670c29e63f954f9e7a2cdcd57b36a854c2538f579ef62681ccbaa1de2b69"}, - {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ee7d85438dc6aff328e19ab052086a3c29e8a9b632998a49e5c4b0034e9e8d6"}, - {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7fb5db231f3092444bc13901e6a8d299667126b00636ffbad4a7b45e1051e2f"}, - {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c100dd441703da5ec136b1d9003ed4a041d8a1136234c9acd887499796df6ad8"}, - {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71f3b765138260fd7a7a2dba0ea5727dabcd18c1f80323c9cfef97a7e86e01d0"}, - {file = "mmh3-5.0.1-cp311-cp311-win32.whl", hash = "sha256:9a76518336247fd17689ce3ae5b16883fd86a490947d46a0193d47fb913e26e3"}, - {file = "mmh3-5.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:336bc4df2e44271f1c302d289cc3d78bd52d3eed8d306c7e4bff8361a12bf148"}, - {file = "mmh3-5.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:af6522722fbbc5999aa66f7244d0986767a46f1fb05accc5200f75b72428a508"}, - {file = "mmh3-5.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f2730bb263ed9c388e8860438b057a53e3cc701134a6ea140f90443c4c11aa40"}, - {file = "mmh3-5.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6246927bc293f6d56724536400b85fb85f5be26101fa77d5f97dd5e2a4c69bf2"}, - {file = "mmh3-5.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fbca322519a6e6e25b6abf43e940e1667cf8ea12510e07fb4919b48a0cd1c411"}, - {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eae8c19903ed8a1724ad9e67e86f15d198a7a1271a4f9be83d47e38f312ed672"}, - {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09fd6cc72c07c0c07c3357714234b646d78052487c4a3bd5f7f6e08408cff60"}, - {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ff8551fee7ae3b11c5d986b6347ade0dccaadd4670ffdb2b944dee120ffcc84"}, - {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e39694c73a5a20c8bf36dfd8676ed351e5234d55751ba4f7562d85449b21ef3f"}, - {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba6001989a92f72a89c7cf382fda831678bd780707a66b4f8ca90239fdf2123"}, - {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0771f90c9911811cc606a5c7b7b58f33501c9ee896ed68a6ac22c7d55878ecc0"}, - {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:09b31ed0c0c0920363e96641fac4efde65b1ab62b8df86293142f35a254e72b4"}, - {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5cf4a8deda0235312db12075331cb417c4ba163770edfe789bde71d08a24b692"}, - {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:41f7090a95185ef20ac018581a99337f0cbc84a2135171ee3290a9c0d9519585"}, - {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b97b5b368fb7ff22194ec5854f5b12d8de9ab67a0f304728c7f16e5d12135b76"}, - {file = "mmh3-5.0.1-cp312-cp312-win32.whl", hash = "sha256:842516acf04da546f94fad52db125ee619ccbdcada179da51c326a22c4578cb9"}, - {file = "mmh3-5.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:d963be0dbfd9fca209c17172f6110787ebf78934af25e3694fe2ba40e55c1e2b"}, - {file = "mmh3-5.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:a5da292ceeed8ce8e32b68847261a462d30fd7b478c3f55daae841404f433c15"}, - {file = "mmh3-5.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:673e3f1c8d4231d6fb0271484ee34cb7146a6499fc0df80788adb56fd76842da"}, - {file = "mmh3-5.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f795a306bd16a52ad578b663462cc8e95500b3925d64118ae63453485d67282b"}, - {file = "mmh3-5.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5ed57a5e28e502a1d60436cc25c76c3a5ba57545f250f2969af231dc1221e0a5"}, - {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:632c28e7612e909dbb6cbe2fe496201ada4695b7715584005689c5dc038e59ad"}, - {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53fd6bd525a5985e391c43384672d9d6b317fcb36726447347c7fc75bfed34ec"}, - {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dceacf6b0b961a0e499836af3aa62d60633265607aef551b2a3e3c48cdaa5edd"}, - {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f0738d478fdfb5d920f6aff5452c78f2c35b0eff72caa2a97dfe38e82f93da2"}, - {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e70285e7391ab88b872e5bef632bad16b9d99a6d3ca0590656a4753d55988af"}, - {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:27e5fc6360aa6b828546a4318da1a7da6bf6e5474ccb053c3a6aa8ef19ff97bd"}, - {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7989530c3c1e2c17bf5a0ec2bba09fd19819078ba90beedabb1c3885f5040b0d"}, - {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:cdad7bee649950da7ecd3cbbbd12fb81f1161072ecbdb5acfa0018338c5cb9cf"}, - {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e143b8f184c1bb58cecd85ab4a4fd6dc65a2d71aee74157392c3fddac2a4a331"}, - {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5eb12e886f3646dd636f16b76eb23fc0c27e8ff3c1ae73d4391e50ef60b40f6"}, - {file = "mmh3-5.0.1-cp313-cp313-win32.whl", hash = "sha256:16e6dddfa98e1c2d021268e72c78951234186deb4df6630e984ac82df63d0a5d"}, - {file = "mmh3-5.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d3ffb792d70b8c4a2382af3598dad6ae0c5bd9cee5b7ffcc99aa2f5fd2c1bf70"}, - {file = "mmh3-5.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:122fa9ec148383f9124292962bda745f192b47bfd470b2af5fe7bb3982b17896"}, - {file = "mmh3-5.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b12bad8c75e6ff5d67319794fb6a5e8c713826c818d47f850ad08b4aa06960c6"}, - {file = "mmh3-5.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e5bbb066538c1048d542246fc347bb7994bdda29a3aea61c22f9f8b57111ce69"}, - {file = "mmh3-5.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eee6134273f64e2a106827cc8fd77e70cc7239a285006fc6ab4977d59b015af2"}, - {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d04d9aa19d48e4c7bbec9cabc2c4dccc6ff3b2402f856d5bf0de03e10f167b5b"}, - {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79f37da1eed034d06567a69a7988456345c7f29e49192831c3975b464493b16e"}, - {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:242f77666743337aa828a2bf2da71b6ba79623ee7f93edb11e009f69237c8561"}, - {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffd943fff690463945f6441a2465555b3146deaadf6a5e88f2590d14c655d71b"}, - {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565b15f8d7df43acb791ff5a360795c20bfa68bca8b352509e0fbabd06cc48cd"}, - {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc6aafb867c2030df98ac7760ff76b500359252867985f357bd387739f3d5287"}, - {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:32898170644d45aa27c974ab0d067809c066205110f5c6d09f47d9ece6978bfe"}, - {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:42865567838d2193eb64e0ef571f678bf361a254fcdef0c5c8e73243217829bd"}, - {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:5ff5c1f301c4a8b6916498969c0fcc7e3dbc56b4bfce5cfe3fe31f3f4609e5ae"}, - {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:be74c2dda8a6f44a504450aa2c3507f8067a159201586fc01dd41ab80efc350f"}, - {file = "mmh3-5.0.1-cp38-cp38-win32.whl", hash = "sha256:5610a842621ff76c04b20b29cf5f809b131f241a19d4937971ba77dc99a7f330"}, - {file = "mmh3-5.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:de15739ac50776fe8aa1ef13f1be46a6ee1fbd45f6d0651084097eb2be0a5aa4"}, - {file = "mmh3-5.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:48e84cf3cc7e8c41bc07de72299a73b92d9e3cde51d97851420055b1484995f7"}, - {file = "mmh3-5.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd9dc28c2d168c49928195c2e29b96f9582a5d07bd690a28aede4cc07b0e696"}, - {file = "mmh3-5.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2771a1c56a3d4bdad990309cff5d0a8051f29c8ec752d001f97d6392194ae880"}, - {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5ff2a8322ba40951a84411550352fba1073ce1c1d1213bb7530f09aed7f8caf"}, - {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a16bd3ec90682c9e0a343e6bd4c778c09947c8c5395cdb9e5d9b82b2559efbca"}, - {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d45733a78d68b5b05ff4a823aea51fa664df1d3bf4929b152ff4fd6dea2dd69b"}, - {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:904285e83cedebc8873b0838ed54c20f7344120be26e2ca5a907ab007a18a7a0"}, - {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac4aeb1784e43df728034d0ed72e4b2648db1a69fef48fa58e810e13230ae5ff"}, - {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cb3d4f751a0b8b4c8d06ef1c085216c8fddcc8b8c8d72445976b5167a40c6d1e"}, - {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8021851935600e60c42122ed1176399d7692df338d606195cd599d228a04c1c6"}, - {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6182d5924a5efc451900f864cbb021d7e8ad5d524816ca17304a0f663bc09bb5"}, - {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5f30b834552a4f79c92e3d266336fb87fd92ce1d36dc6813d3e151035890abbd"}, - {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cd4383f35e915e06d077df27e04ffd3be7513ec6a9de2d31f430393f67e192a7"}, - {file = "mmh3-5.0.1-cp39-cp39-win32.whl", hash = "sha256:1455fb6b42665a97db8fc66e89a861e52b567bce27ed054c47877183f86ea6e3"}, - {file = "mmh3-5.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:9e26a0f4eb9855a143f5938a53592fa14c2d3b25801c2106886ab6c173982780"}, - {file = "mmh3-5.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:0d0a35a69abdad7549c4030a714bb4ad07902edb3bbe61e1bbc403ded5d678be"}, - {file = "mmh3-5.0.1.tar.gz", hash = "sha256:7dab080061aeb31a6069a181f27c473a1f67933854e36a3464931f2716508896"}, +python-versions = ">=3.9" +files = [ + {file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:eaf4ac5c6ee18ca9232238364d7f2a213278ae5ca97897cafaa123fcc7bb8bec"}, + {file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48f9aa8ccb9ad1d577a16104834ac44ff640d8de8c0caed09a2300df7ce8460a"}, + {file = "mmh3-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4ba8cac21e1f2d4e436ce03a82a7f87cda80378691f760e9ea55045ec480a3d"}, + {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69281c281cb01994f054d862a6bb02a2e7acfe64917795c58934b0872b9ece4"}, + {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d05ed3962312fbda2a1589b97359d2467f677166952f6bd410d8c916a55febf"}, + {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78ae6a03f4cff4aa92ddd690611168856f8c33a141bd3e5a1e0a85521dc21ea0"}, + {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95f983535b39795d9fb7336438faae117424c6798f763d67c6624f6caf2c4c01"}, + {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d46fdd80d4c7ecadd9faa6181e92ccc6fe91c50991c9af0e371fdf8b8a7a6150"}, + {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16e976af7365ea3b5c425124b2a7f0147eed97fdbb36d99857f173c8d8e096"}, + {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6fa97f7d1e1f74ad1565127229d510f3fd65d931fdedd707c1e15100bc9e5ebb"}, + {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4052fa4a8561bd62648e9eb993c8f3af3bdedadf3d9687aa4770d10e3709a80c"}, + {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3f0e8ae9f961037f812afe3cce7da57abf734285961fffbeff9a4c011b737732"}, + {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:99297f207db967814f1f02135bb7fe7628b9eacb046134a34e1015b26b06edce"}, + {file = "mmh3-5.1.0-cp310-cp310-win32.whl", hash = "sha256:2e6c8dc3631a5e22007fbdb55e993b2dbce7985c14b25b572dd78403c2e79182"}, + {file = "mmh3-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:e4e8c7ad5a4dddcfde35fd28ef96744c1ee0f9d9570108aa5f7e77cf9cfdf0bf"}, + {file = "mmh3-5.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:45da549269883208912868a07d0364e1418d8292c4259ca11699ba1b2475bd26"}, + {file = "mmh3-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b529dcda3f951ff363a51d5866bc6d63cf57f1e73e8961f864ae5010647079d"}, + {file = "mmh3-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db1079b3ace965e562cdfc95847312f9273eb2ad3ebea983435c8423e06acd7"}, + {file = "mmh3-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22d31e3a0ff89b8eb3b826d6fc8e19532998b2aa6b9143698043a1268da413e1"}, + {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2139bfbd354cd6cb0afed51c4b504f29bcd687a3b1460b7e89498329cc28a894"}, + {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c8105c6a435bc2cd6ea2ef59558ab1a2976fd4a4437026f562856d08996673a"}, + {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57730067174a7f36fcd6ce012fe359bd5510fdaa5fe067bc94ed03e65dafb769"}, + {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bde80eb196d7fdc765a318604ded74a4378f02c5b46c17aa48a27d742edaded2"}, + {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9c8eddcb441abddeb419c16c56fd74b3e2df9e57f7aa2903221996718435c7a"}, + {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:99e07e4acafbccc7a28c076a847fb060ffc1406036bc2005acb1b2af620e53c3"}, + {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e25ba5b530e9a7d65f41a08d48f4b3fedc1e89c26486361166a5544aa4cad33"}, + {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bb9bf7475b4d99156ce2f0cf277c061a17560c8c10199c910a680869a278ddc7"}, + {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2a1b0878dd281ea3003368ab53ff6f568e175f1b39f281df1da319e58a19c23a"}, + {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:25f565093ac8b8aefe0f61f8f95c9a9d11dd69e6a9e9832ff0d293511bc36258"}, + {file = "mmh3-5.1.0-cp311-cp311-win32.whl", hash = "sha256:1e3554d8792387eac73c99c6eaea0b3f884e7130eb67986e11c403e4f9b6d372"}, + {file = "mmh3-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8ad777a48197882492af50bf3098085424993ce850bdda406a358b6ab74be759"}, + {file = "mmh3-5.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f29dc4efd99bdd29fe85ed6c81915b17b2ef2cf853abf7213a48ac6fb3eaabe1"}, + {file = "mmh3-5.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45712987367cb9235026e3cbf4334670522a97751abfd00b5bc8bfa022c3311d"}, + {file = "mmh3-5.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b1020735eb35086ab24affbea59bb9082f7f6a0ad517cb89f0fc14f16cea4dae"}, + {file = "mmh3-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:babf2a78ce5513d120c358722a2e3aa7762d6071cd10cede026f8b32452be322"}, + {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4f47f58cd5cbef968c84a7c1ddc192fef0a36b48b0b8a3cb67354531aa33b00"}, + {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2044a601c113c981f2c1e14fa33adc9b826c9017034fe193e9eb49a6882dbb06"}, + {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c94d999c9f2eb2da44d7c2826d3fbffdbbbbcde8488d353fee7c848ecc42b968"}, + {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a015dcb24fa0c7a78f88e9419ac74f5001c1ed6a92e70fd1803f74afb26a4c83"}, + {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:457da019c491a2d20e2022c7d4ce723675e4c081d9efc3b4d8b9f28a5ea789bd"}, + {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71408579a570193a4ac9c77344d68ddefa440b00468a0b566dcc2ba282a9c559"}, + {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8b3a04bc214a6e16c81f02f855e285c6df274a2084787eeafaa45f2fbdef1b63"}, + {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:832dae26a35514f6d3c1e267fa48e8de3c7b978afdafa0529c808ad72e13ada3"}, + {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bf658a61fc92ef8a48945ebb1076ef4ad74269e353fffcb642dfa0890b13673b"}, + {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3313577453582b03383731b66447cdcdd28a68f78df28f10d275d7d19010c1df"}, + {file = "mmh3-5.1.0-cp312-cp312-win32.whl", hash = "sha256:1d6508504c531ab86c4424b5a5ff07c1132d063863339cf92f6657ff7a580f76"}, + {file = "mmh3-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:aa75981fcdf3f21759d94f2c81b6a6e04a49dfbcdad88b152ba49b8e20544776"}, + {file = "mmh3-5.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:a4c1a76808dfea47f7407a0b07aaff9087447ef6280716fd0783409b3088bb3c"}, + {file = "mmh3-5.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a523899ca29cfb8a5239618474a435f3d892b22004b91779fcb83504c0d5b8c"}, + {file = "mmh3-5.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:17cef2c3a6ca2391ca7171a35ed574b5dab8398163129a3e3a4c05ab85a4ff40"}, + {file = "mmh3-5.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52e12895b30110f3d89dae59a888683cc886ed0472dd2eca77497edef6161997"}, + {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d6719045cda75c3f40397fc24ab67b18e0cb8f69d3429ab4c39763c4c608dd"}, + {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d19fa07d303a91f8858982c37e6939834cb11893cb3ff20e6ee6fa2a7563826a"}, + {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31b47a620d622fbde8ca1ca0435c5d25de0ac57ab507209245e918128e38e676"}, + {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00f810647c22c179b6821079f7aa306d51953ac893587ee09cf1afb35adf87cb"}, + {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6128b610b577eed1e89ac7177ab0c33d06ade2aba93f5c89306032306b5f1c6"}, + {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1e550a45d2ff87a1c11b42015107f1778c93f4c6f8e731bf1b8fa770321b8cc4"}, + {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:785ae09276342f79fd8092633e2d52c0f7c44d56e8cfda8274ccc9b76612dba2"}, + {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0f4be3703a867ef976434afd3661a33884abe73ceb4ee436cac49d3b4c2aaa7b"}, + {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e513983830c4ff1f205ab97152a0050cf7164f1b4783d702256d39c637b9d107"}, + {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9135c300535c828c0bae311b659f33a31c941572eae278568d1a953c4a57b59"}, + {file = "mmh3-5.1.0-cp313-cp313-win32.whl", hash = "sha256:c65dbd12885a5598b70140d24de5839551af5a99b29f9804bb2484b29ef07692"}, + {file = "mmh3-5.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:10db7765201fc65003fa998faa067417ef6283eb5f9bba8f323c48fd9c33e91f"}, + {file = "mmh3-5.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:b22fe2e54be81f6c07dcb36b96fa250fb72effe08aa52fbb83eade6e1e2d5fd7"}, + {file = "mmh3-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:166b67749a1d8c93b06f5e90576f1ba838a65c8e79f28ffd9dfafba7c7d0a084"}, + {file = "mmh3-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:adba83c7ba5cc8ea201ee1e235f8413a68e7f7b8a657d582cc6c6c9d73f2830e"}, + {file = "mmh3-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a61f434736106804eb0b1612d503c4e6eb22ba31b16e6a2f987473de4226fa55"}, + {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba9ce59816b30866093f048b3312c2204ff59806d3a02adee71ff7bd22b87554"}, + {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd51597bef1e503363b05cb579db09269e6e6c39d419486626b255048daf545b"}, + {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d51a1ed642d3fb37b8f4cab966811c52eb246c3e1740985f701ef5ad4cdd2145"}, + {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:709bfe81c53bf8a3609efcbd65c72305ade60944f66138f697eefc1a86b6e356"}, + {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e01a9b0092b6f82e861137c8e9bb9899375125b24012eb5219e61708be320032"}, + {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:27e46a2c13c9a805e03c9ec7de0ca8e096794688ab2125bdce4229daf60c4a56"}, + {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5766299c1d26f6bfd0a638e070bd17dbd98d4ccb067d64db3745bf178e700ef0"}, + {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7785205e3e4443fdcbb73766798c7647f94c2f538b90f666688f3e757546069e"}, + {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:8e574fbd39afb433b3ab95683b1b4bf18313dc46456fc9daaddc2693c19ca565"}, + {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1b6727a5a20e32cbf605743749f3862abe5f5e097cbf2afc7be5aafd32a549ae"}, + {file = "mmh3-5.1.0-cp39-cp39-win32.whl", hash = "sha256:d6eaa711d4b9220fe5252032a44bf68e5dcfb7b21745a96efc9e769b0dd57ec2"}, + {file = "mmh3-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:49d444913f6c02980e5241a53fe9af2338f2043d6ce5b6f5ea7d302c52c604ac"}, + {file = "mmh3-5.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:0daaeaedd78773b70378f2413c7d6b10239a75d955d30d54f460fb25d599942d"}, + {file = "mmh3-5.1.0.tar.gz", hash = "sha256:136e1e670500f177f49ec106a4ebf0adf20d18d96990cc36ea492c651d2b406c"}, ] [package.extras] -benchmark = ["pymmh3 (==0.0.5)", "pyperf (==2.7.0)", "xxhash (==3.5.0)"] -docs = ["myst-parser (==4.0.0)", "shibuya (==2024.8.30)", "sphinx (==8.0.2)", "sphinx-copybutton (==0.5.2)"] -lint = ["black (==24.8.0)", "clang-format (==18.1.8)", "isort (==5.13.2)", "pylint (==3.2.7)"] -plot = ["matplotlib (==3.9.2)", "pandas (==2.2.2)"] -test = ["pytest (==8.3.3)", "pytest-sugar (==1.0.0)"] -type = ["mypy (==1.11.2)"] - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" +benchmark = ["pymmh3 (==0.0.5)", "pyperf (==2.8.1)", "xxhash (==3.5.0)"] +docs = ["myst-parser (==4.0.0)", "shibuya (==2024.12.21)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)"] +lint = ["black (==24.10.0)", "clang-format (==19.1.7)", "isort (==5.13.2)", "pylint (==3.3.3)"] +plot = ["matplotlib (==3.10.0)", "pandas (==2.2.3)"] +test = ["pytest (==8.3.4)", "pytest-sugar (==1.0.0)"] +type = ["mypy (==1.14.1)"] [[package]] name = "moto" -version = "5.0.26" +version = "5.0.28" description = "A library that allows you to easily mock out tests based on AWS infrastructure" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "moto-5.0.26-py3-none-any.whl", hash = "sha256:803831f427ca6c0452ae4fb898d731cfc19906466a33a88cbc1076abcbfcbba7"}, - {file = "moto-5.0.26.tar.gz", hash = "sha256:6829f58a670a087e7c5b63f8183c6b72d64a1444e420c212250b7326b69a9183"}, + {file = "moto-5.0.28-py3-none-any.whl", hash = "sha256:2dfbea1afe3b593e13192059a1a7fc4b3cf7fdf92e432070c22346efa45aa0f0"}, + {file = "moto-5.0.28.tar.gz", hash = "sha256:4d3437693411ec943c13c77de5b0b520c4b0a9ac850fead4ba2a54709e086e8b"}, ] [package.dependencies] @@ -3282,7 +2612,7 @@ pyparsing = {version = ">=3.0.7", optional = true, markers = "extra == \"server\ python-dateutil = ">=2.1,<3.0.0" PyYAML = {version = ">=5.1", optional = true, markers = "extra == \"server\""} requests = ">=2.5" -responses = ">=0.15.0" +responses = ">=0.15.0,<0.25.5 || >0.25.5" setuptools = {version = "*", optional = true, markers = "extra == \"server\""} werkzeug = ">=0.5,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1" xmltodict = "*" @@ -3310,18 +2640,12 @@ ssm = ["PyYAML (>=5.1)"] stepfunctions = ["antlr4-python3-runtime", "jsonpath-ng"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -3333,19 +2657,12 @@ docs = ["sphinx"] gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "msal" version = "1.31.1" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "msal-1.31.1-py3-none-any.whl", hash = "sha256:29d9882de247e96db01386496d59f29035e5e841bcac892e6d7bf4390bf6bd17"}, {file = "msal-1.31.1.tar.gz", hash = "sha256:11b5e6a3f802ffd3a72107203e20c4eac6ef53401961b880af2835b723d80578"}, @@ -3359,19 +2676,12 @@ requests = ">=2.0.0,<3" [package.extras] broker = ["pymsalruntime (>=0.14,<0.18)", "pymsalruntime (>=0.17,<0.18)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "msal-extensions" version = "1.2.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"}, {file = "msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef"}, @@ -3381,19 +2691,12 @@ files = [ msal = ">=1.29,<2" portalocker = ">=1.4,<3" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "msgpack" version = "1.1.0" description = "MessagePack serializer" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"ray\"" files = [ {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, @@ -3461,19 +2764,12 @@ files = [ {file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "multidict" version = "6.1.0" description = "multidict implementation" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -3572,39 +2868,26 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "mypy-boto3-glue" -version = "1.35.93" -description = "Type annotations for boto3 Glue 1.35.93 service generated with mypy-boto3-builder 8.8.0" +version = "1.36.4" +description = "Type annotations for boto3 Glue 1.36.4 service generated with mypy-boto3-builder 8.8.0" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"glue\"" files = [ - {file = "mypy_boto3_glue-1.35.93-py3-none-any.whl", hash = "sha256:cf46553f68048124bad65345b593ec5ba3806bd9bd15a1d7516d0cb3d79a0652"}, - {file = "mypy_boto3_glue-1.35.93.tar.gz", hash = "sha256:27759a83ffa5414b2589da83625816a3c7cb97600fec68578bd3012a9ae20ee8"}, + {file = "mypy_boto3_glue-1.36.4-py3-none-any.whl", hash = "sha256:ae420af4301fbe84a6e38b244901cfa98c9162c646fb621d0f9f39a918e34cef"}, + {file = "mypy_boto3_glue-1.36.4.tar.gz", hash = "sha256:6f8630ccde28bcd346ca0fc60c33a394aa3a6a7c878dd0eb22e255cb464ed5f4"}, ] [package.dependencies] typing-extensions = {version = "*", markers = "python_version < \"3.12\""} -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "natsort" version = "8.4.0" description = "Simple yet flexible natural sorting in Python." optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"}, {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"}, @@ -3614,18 +2897,12 @@ files = [ fast = ["fastnumbers (>=2.0.0)"] icu = ["PyICU (>=1.0.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "networkx" version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, @@ -3638,36 +2915,23 @@ doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9. extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -groups = ["dev"] +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "numpy" version = "1.26.4" description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -3707,19 +2971,12 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = true python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -3730,18 +2987,12 @@ rsa = ["cryptography (>=3.0.0)"] signals = ["blinker (>=1.4.0)"] signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "openapi-schema-validator" version = "0.4.3" description = "OpenAPI schema validation for Python" optional = false python-versions = ">=3.7.0,<4.0.0" -groups = ["dev"] files = [ {file = "openapi_schema_validator-0.4.3-py3-none-any.whl", hash = "sha256:f1eff2a7936546a3ce62b88a17d09de93c9bd229cbc43cb696c988a61a382548"}, {file = "openapi_schema_validator-0.4.3.tar.gz", hash = "sha256:6940dba9f4906c97078fea6fd9d5a3a3384207db368c4e32f6af6abd7c5c560b"}, @@ -3751,18 +3002,12 @@ files = [ jsonschema = ">=4.0.0,<5.0.0" rfc3339-validator = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "openapi-spec-validator" version = "0.5.5" description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3 spec validator" optional = false python-versions = ">=3.7.0,<4.0.0" -groups = ["dev"] files = [ {file = "openapi_spec_validator-0.5.5-py3-none-any.whl", hash = "sha256:93ba247f585e1447214b4207728a7cce3726d148238217be69e6b8725c118fbe"}, {file = "openapi_spec_validator-0.5.5.tar.gz", hash = "sha256:3010df5237748e25d7fac2b2aaf13457c1afd02735b2bd6f008a10079c8f443a"}, @@ -3777,28 +3022,16 @@ openapi-schema-validator = ">=0.4.2,<0.5.0" [package.extras] requests = ["requests"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main", "dev", "docs"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] -markers = {main = "extra == \"ray\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "paginate" @@ -3806,7 +3039,6 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" -groups = ["docs"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -3816,19 +3048,12 @@ files = [ dev = ["pytest", "tox"] lint = ["black"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pandas" version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -3877,8 +3102,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3909,52 +3134,34 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pathable" version = "0.4.3" description = "Object-oriented paths" optional = false python-versions = ">=3.7.0,<4.0.0" -groups = ["dev"] files = [ {file = "pathable-0.4.3-py3-none-any.whl", hash = "sha256:cdd7b1f9d7d5c8b8d3315dbf5a86b2596053ae845f056f57d97c0eefff84da14"}, {file = "pathable-0.4.3.tar.gz", hash = "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -3965,18 +3172,12 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -3986,36 +3187,23 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "ply" version = "3.11" description = "Python Lex & Yacc" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "portalocker" version = "2.10.1" description = "Wraps the portalocker recipe for easy usage" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, @@ -4029,18 +3217,12 @@ docs = ["sphinx (>=1.7.1)"] redis = ["redis"] tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pre-commit" version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, @@ -4053,19 +3235,12 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "propcache" version = "0.2.1" description = "Accelerated property cache" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -4151,19 +3326,12 @@ files = [ {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "proto-plus" version = "1.25.0" description = "Beautiful, Pythonic protocol buffers." optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, @@ -4175,19 +3343,12 @@ protobuf = ">=3.19.0,<6.0.0dev" [package.extras] testing = ["google-api-core (>=1.31.5)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "protobuf" version = "5.29.2" description = "" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "protobuf-5.29.2-cp310-abi3-win32.whl", hash = "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851"}, {file = "protobuf-5.29.2-cp310-abi3-win_amd64.whl", hash = "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9"}, @@ -4202,19 +3363,12 @@ files = [ {file = "protobuf-5.29.2.tar.gz", hash = "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "psycopg2-binary" version = "2.9.10" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"sql-postgres\"" files = [ {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, @@ -4286,18 +3440,12 @@ files = [ {file = "psycopg2_binary-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:30e34c4e97964805f715206c7b789d54a78b70f3ff19fbe590104b71c45600e5"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "py-partiql-parser" version = "0.6.1" description = "Pure Python PartiQL Parser" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "py_partiql_parser-0.6.1-py2.py3-none-any.whl", hash = "sha256:ff6a48067bff23c37e9044021bf1d949c83e195490c17e020715e927fe5b2456"}, {file = "py_partiql_parser-0.6.1.tar.gz", hash = "sha256:8583ff2a0e15560ef3bc3df109a7714d17f87d81d33e8c38b7fed4e58a63215d"}, @@ -4306,115 +3454,88 @@ files = [ [package.extras] dev = ["black (==22.6.0)", "flake8", "mypy", "pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "py4j" version = "0.10.9.7" description = "Enables Python programs to dynamically access arbitrary Java objects" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "py4j-0.10.9.7-py2.py3-none-any.whl", hash = "sha256:85defdfd2b2376eb3abf5ca6474b51ab7e0de341c75a02f46dc9b5976f5a5c1b"}, {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyarrow" -version = "18.1.0" +version = "19.0.0" description = "Python library for Apache Arrow" -optional = false +optional = true python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, - {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f443122c8e31f4c9199cb23dca29ab9427cef990f283f80fe15b8e124bcc49b"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a03da7f2758645d17b7b4f83c8bffeae5bbb7f974523fe901f36288d2eab71"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ba17845efe3aa358ec266cf9cc2800fa73038211fb27968bfa88acd09261a470"}, - {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3c35813c11a059056a22a3bef520461310f2f7eea5c8a11ef9de7062a23f8d56"}, - {file = "pyarrow-18.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9736ba3c85129d72aefa21b4f3bd715bc4190fe4426715abfff90481e7d00812"}, - {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854"}, - {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31e9417ba9c42627574bdbfeada7217ad8a4cbbe45b9d6bdd4b62abbca4c6f6"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:01c034b576ce0eef554f7c3d8c341714954be9b3f5d5bc7117006b85fcf302fe"}, - {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f266a2c0fc31995a06ebd30bcfdb7f615d7278035ec5b1cd71c48d56daaf30b0"}, - {file = "pyarrow-18.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d4f13eee18433f99adefaeb7e01d83b59f73360c231d4782d9ddfaf1c3fbde0a"}, - {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9f3a76670b263dc41d0ae877f09124ab96ce10e4e48f3e3e4257273cee61ad0d"}, - {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:da31fbca07c435be88a0c321402c4e31a2ba61593ec7473630769de8346b54ee"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543ad8459bc438efc46d29a759e1079436290bd583141384c6f7a1068ed6f992"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0743e503c55be0fdb5c08e7d44853da27f19dc854531c0570f9f394ec9671d54"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d4b3d2a34780645bed6414e22dda55a92e0fcd1b8a637fba86800ad737057e33"}, - {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c52f81aa6f6575058d8e2c782bf79d4f9fdc89887f16825ec3a66607a5dd8e30"}, - {file = "pyarrow-18.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ad4892617e1a6c7a551cfc827e072a633eaff758fa09f21c4ee548c30bcaf99"}, - {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:84e314d22231357d473eabec709d0ba285fa706a72377f9cc8e1cb3c8013813b"}, - {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:f591704ac05dfd0477bb8f8e0bd4b5dc52c1cadf50503858dce3a15db6e46ff2"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acb7564204d3c40babf93a05624fc6a8ec1ab1def295c363afc40b0c9e66c191"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74de649d1d2ccb778f7c3afff6085bd5092aed4c23df9feeb45dd6b16f3811aa"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f96bd502cb11abb08efea6dab09c003305161cb6c9eafd432e35e76e7fa9b90c"}, - {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36ac22d7782554754a3b50201b607d553a8d71b78cdf03b33c1125be4b52397c"}, - {file = "pyarrow-18.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:25dbacab8c5952df0ca6ca0af28f50d45bd31c1ff6fcf79e2d120b4a65ee7181"}, - {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a276190309aba7bc9d5bd2933230458b3521a4317acfefe69a354f2fe59f2bc"}, - {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ad514dbfcffe30124ce655d72771ae070f30bf850b48bc4d9d3b25993ee0e386"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aebc13a11ed3032d8dd6e7171eb6e86d40d67a5639d96c35142bd568b9299324"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9"}, - {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba"}, - {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:0b331e477e40f07238adc7ba7469c36b908f07c89b95dd4bd3a0ec84a3d1e21e"}, - {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c4dd0c9010a25ba03e198fe743b1cc03cd33c08190afff371749c52ccbbaf76"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f97b31b4c4e21ff58c6f330235ff893cc81e23da081b1a4b1c982075e0ed4e9"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4813cb8ecf1809871fd2d64a8eff740a1bd3691bbe55f01a3cf6c5ec869754"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:05a5636ec3eb5cc2a36c6edb534a38ef57b2ab127292a716d00eabb887835f1e"}, - {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:73eeed32e724ea3568bb06161cad5fa7751e45bc2228e33dcb10c614044165c7"}, - {file = "pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052"}, - {file = "pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73"}, -] -markers = {main = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\""} +files = [ + {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"}, + {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2795064647add0f16563e57e3d294dbfc067b723f0fd82ecd80af56dad15f503"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a218670b26fb1bc74796458d97bcab072765f9b524f95b2fccad70158feb8b17"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:66732e39eaa2247996a6b04c8aa33e3503d351831424cdf8d2e9a0582ac54b34"}, + {file = "pyarrow-19.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e675a3ad4732b92d72e4d24009707e923cab76b0d088e5054914f11a797ebe44"}, + {file = "pyarrow-19.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f094742275586cdd6b1a03655ccff3b24b2610c3af76f810356c4c71d24a2a6c"}, + {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8e3a839bf36ec03b4315dc924d36dcde5444a50066f1c10f8290293c0427b46a"}, + {file = "pyarrow-19.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:ce42275097512d9e4e4a39aade58ef2b3798a93aa3026566b7892177c266f735"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9348a0137568c45601b031a8d118275069435f151cbb77e6a08a27e8125f59d4"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0144a712d990d60f7f42b7a31f0acaccf4c1e43e957f7b1ad58150d6f639c1"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2a1a109dfda558eb011e5f6385837daffd920d54ca00669f7a11132d0b1e6042"}, + {file = "pyarrow-19.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:be686bf625aa7b9bada18defb3a3ea3981c1099697239788ff111d87f04cd263"}, + {file = "pyarrow-19.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:239ca66d9a05844bdf5af128861af525e14df3c9591bcc05bac25918e650d3a2"}, + {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:a7bbe7109ab6198688b7079cbad5a8c22de4d47c4880d8e4847520a83b0d1b68"}, + {file = "pyarrow-19.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:4624c89d6f777c580e8732c27bb8e77fd1433b89707f17c04af7635dd9638351"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b6d3ce4288793350dc2d08d1e184fd70631ea22a4ff9ea5c4ff182130249d9b"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450a7d27e840e4d9a384b5c77199d489b401529e75a3b7a3799d4cd7957f2f9c"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a08e2a8a039a3f72afb67a6668180f09fddaa38fe0d21f13212b4aba4b5d2451"}, + {file = "pyarrow-19.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f43f5aef2a13d4d56adadae5720d1fed4c1356c993eda8b59dace4b5983843c1"}, + {file = "pyarrow-19.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f672f5364b2d7829ef7c94be199bb88bf5661dd485e21d2d37de12ccb78a136"}, + {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:cf3bf0ce511b833f7bc5f5bb3127ba731e97222023a444b7359f3a22e2a3b463"}, + {file = "pyarrow-19.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:4d8b0c0de0a73df1f1bf439af1b60f273d719d70648e898bc077547649bb8352"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92aff08e23d281c69835e4a47b80569242a504095ef6a6223c1f6bb8883431d"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3b78eff5968a1889a0f3bc81ca57e1e19b75f664d9c61a42a604bf9d8402aae"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b34d3bde38eba66190b215bae441646330f8e9da05c29e4b5dd3e41bde701098"}, + {file = "pyarrow-19.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5418d4d0fab3a0ed497bad21d17a7973aad336d66ad4932a3f5f7480d4ca0c04"}, + {file = "pyarrow-19.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e82c3d5e44e969c217827b780ed8faf7ac4c53f934ae9238872e749fa531f7c9"}, + {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f208c3b58a6df3b239e0bb130e13bc7487ed14f39a9ff357b6415e3f6339b560"}, + {file = "pyarrow-19.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:c751c1c93955b7a84c06794df46f1cec93e18610dcd5ab7d08e89a81df70a849"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b903afaa5df66d50fc38672ad095806443b05f202c792694f3a604ead7c6ea6e"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22a4bc0937856263df8b94f2f2781b33dd7f876f787ed746608e06902d691a5"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:5e8a28b918e2e878c918f6d89137386c06fe577cd08d73a6be8dafb317dc2d73"}, + {file = "pyarrow-19.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:29cd86c8001a94f768f79440bf83fee23963af5e7bc68ce3a7e5f120e17edf89"}, + {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:c0423393e4a07ff6fea08feb44153302dd261d0551cc3b538ea7a5dc853af43a"}, + {file = "pyarrow-19.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:718947fb6d82409013a74b176bf93e0f49ef952d8a2ecd068fecd192a97885b7"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1c162c4660e0978411a4761f91113dde8da3433683efa473501254563dcbe8"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73268cf557e688efb60f1ccbc7376f7e18cd8e2acae9e663e98b194c40c1a2d"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:edfe6d3916e915ada9acc4e48f6dafca7efdbad2e6283db6fd9385a1b23055f1"}, + {file = "pyarrow-19.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:da410b70a7ab8eb524112f037a7a35da7128b33d484f7671a264a4c224ac131d"}, + {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"}, + {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"}, +] [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyasn1" version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyasn1-modules" version = "0.4.1" description = "A collection of ASN.1-based protocols modules" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, @@ -4423,39 +3544,26 @@ files = [ [package.dependencies] pyasn1 = ">=0.4.6,<0.7.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pycparser" version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] -markers = {main = "(extra == \"zstandard\" or extra == \"adlfs\") and (platform_python_implementation == \"PyPy\" or extra == \"adlfs\")", dev = "platform_python_implementation != \"PyPy\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "pydantic" -version = "2.10.5" +version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ - {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, - {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] [package.dependencies] @@ -4467,18 +3575,12 @@ typing-extensions = ">=4.12.2" email = ["email-validator (>=2.0.0)"] timezone = ["tzdata"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pydantic-core" version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -4585,18 +3687,12 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["main", "dev", "docs"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -4605,19 +3701,12 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyiceberg-core" version = "0.4.0" description = "" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"pyiceberg-core\"" files = [ {file = "pyiceberg_core-0.4.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5aec569271c96e18428d542f9b7007117a7232c06017f95cb239d42e952ad3b4"}, {file = "pyiceberg_core-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e74773e58efa4df83aba6f6265cdd41e446fa66fa4e343ca86395fed9f209ae"}, @@ -4627,19 +3716,12 @@ files = [ {file = "pyiceberg_core-0.4.0.tar.gz", hash = "sha256:d2e6138707868477b806ed354aee9c476e437913a331cb9ad9ad46b4054cd11f"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyjwt" version = "2.10.1" description = "JSON Web Token implementation in Python" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"adlfs\"" files = [ {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, @@ -4654,18 +3736,12 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pymdown-extensions" version = "10.13" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" -groups = ["docs"] files = [ {file = "pymdown_extensions-10.13-py3-none-any.whl", hash = "sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428"}, {file = "pymdown_extensions-10.13.tar.gz", hash = "sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd"}, @@ -4678,18 +3754,12 @@ pyyaml = "*" [package.extras] extra = ["pygments (>=2.12)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyparsing" version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -4698,35 +3768,23 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyproject-hooks" version = "1.2.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pyspark" version = "3.5.3" description = "Apache Spark Python API" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pyspark-3.5.3.tar.gz", hash = "sha256:68b7cc0c0c570a7d8644f49f40d2da8709b01d30c9126cc8cf93b4f84f3d9747"}, ] @@ -4741,18 +3799,12 @@ mllib = ["numpy (>=1.15,<2)"] pandas-on-spark = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] sql = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -4769,18 +3821,12 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pytest-checkdocs" version = "2.13.0" description = "check the README when running tests" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pytest_checkdocs-2.13.0-py3-none-any.whl", hash = "sha256:5df5bbd7e9753aa51a5f6954a301a4066bd4a04eb7e0c712c5d5d7ede1cbe153"}, {file = "pytest_checkdocs-2.13.0.tar.gz", hash = "sha256:b0e67169c543986142e15afbc17c772da87fcdb0922c7b1e4f6c60f8769f11f9"}, @@ -4794,18 +3840,12 @@ docutils = ">=0.15" docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "types-docutils"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pytest-lazy-fixture" version = "0.6.3" description = "It helps to use fixtures in pytest.mark.parametrize" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "pytest-lazy-fixture-0.6.3.tar.gz", hash = "sha256:0e7d0c7f74ba33e6e80905e9bfd81f9d15ef9a790de97993e34213deb5ad10ac"}, {file = "pytest_lazy_fixture-0.6.3-py3-none-any.whl", hash = "sha256:e0b379f38299ff27a653f03eaa69b08a6fd4484e46fd1c9907d984b9f9daeda6"}, @@ -4814,18 +3854,12 @@ files = [ [package.dependencies] pytest = ">=3.2.5" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pytest-mock" version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -4837,18 +3871,12 @@ pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main", "dev", "docs"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -4857,19 +3885,12 @@ files = [ [package.dependencies] six = ">=1.5" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "python-snappy" version = "0.7.3" description = "Python library for the snappy compression library from Google" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"snappy\"" files = [ {file = "python_snappy-0.7.3-py3-none-any.whl", hash = "sha256:074c0636cfcd97e7251330f428064050ac81a52c62ed884fc2ddebbb60ed7f50"}, {file = "python_snappy-0.7.3.tar.gz", hash = "sha256:40216c1badfb2d38ac781ecb162a1d0ec40f8ee9747e610bcfefdfa79486cee3"}, @@ -4878,36 +3899,23 @@ files = [ [package.dependencies] cramjam = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pytz" version = "2024.2" description = "World timezone definitions, modern and historical" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "pywin32" version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" -groups = ["main", "dev"] files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, @@ -4928,12 +3936,6 @@ files = [ {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] -markers = {main = "extra == \"adlfs\" and platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "pyyaml" @@ -4941,7 +3943,6 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main", "dev", "docs"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -4997,12 +3998,6 @@ files = [ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] -markers = {main = "extra == \"ray\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "pyyaml-env-tag" @@ -5010,7 +4005,6 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" -groups = ["docs"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -5019,19 +4013,12 @@ files = [ [package.dependencies] pyyaml = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "ray" version = "2.40.0" description = "Ray provides a simple, universal API for building distributed applications." optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"ray\"" files = [ {file = "ray-2.40.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:064af8bc52cc988c82470b8e76e5df417737fa7c1d87f597a892c69eb4ec3caa"}, {file = "ray-2.40.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45beb4019cd20b6cb10572d8012c771bccd623f544a669da6797ccf993c4bb33"}, @@ -5083,40 +4070,27 @@ serve-grpc = ["aiohttp (>=3.7)", "aiohttp-cors", "colorful", "fastapi", "grpcio train = ["fsspec", "pandas", "pyarrow (<18)", "pyarrow (>=9.0.0)", "requests", "tensorboardX (>=1.9)"] tune = ["fsspec", "pandas", "pyarrow (<18)", "pyarrow (>=9.0.0)", "requests", "tensorboardX (>=1.9)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "referencing" version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] -markers = {main = "extra == \"ray\""} [package.dependencies] attrs = ">=22.2.0" rpds-py = ">=0.7.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "regex" version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -5214,18 +4188,12 @@ files = [ {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" -groups = ["main", "dev", "docs"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -5241,18 +4209,12 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "requests-mock" version = "1.12.1" description = "Mock out responses from the requests package" optional = false python-versions = ">=3.5" -groups = ["dev"] files = [ {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, @@ -5264,19 +4226,12 @@ requests = ">=2.22,<3" [package.extras] fixture = ["fixtures"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "requests-oauthlib" version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = true python-versions = ">=3.4" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -5289,18 +4244,12 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "requirements-parser" version = "0.11.0" description = "This is a small Python module for parsing Pip requirement files." optional = false -python-versions = ">=3.8,<4.0" -groups = ["dev"] +python-versions = "<4.0,>=3.8" files = [ {file = "requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684"}, {file = "requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920"}, @@ -5310,18 +4259,12 @@ files = [ packaging = ">=23.2" types-setuptools = ">=69.1.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "responses" version = "0.25.3" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "responses-0.25.3-py3-none-any.whl", hash = "sha256:521efcbc82081ab8daa588e08f7e8a64ce79b91c39f6e62199b19159bea7dbcb"}, {file = "responses-0.25.3.tar.gz", hash = "sha256:617b9247abd9ae28313d57a75880422d55ec63c29d33d629697590a034358dba"}, @@ -5335,18 +4278,12 @@ urllib3 = ">=1.25.10,<3.0" [package.extras] tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["dev"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -5355,18 +4292,12 @@ files = [ [package.dependencies] six = "*" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "rich" version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" -groups = ["main"] files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -5380,18 +4311,12 @@ typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.1 [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "rpds-py" version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, @@ -5497,12 +4422,6 @@ files = [ {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] -markers = {main = "extra == \"ray\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "rsa" @@ -5510,8 +4429,6 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = true python-versions = ">=3.6,<4" -groups = ["main"] -markers = "extra == \"gcsfs\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -5520,19 +4437,12 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "s3fs" version = "2024.12.0" description = "Convenient Filesystem interface over S3" optional = true -python-versions = ">= 3.9" -groups = ["main"] -markers = "extra == \"s3fs\"" +python-versions = ">=3.9" files = [ {file = "s3fs-2024.12.0-py3-none-any.whl", hash = "sha256:d8665549f9d1de083151582437a2f10d5f3b3227c1f8e67a2b0b730db813e005"}, {file = "s3fs-2024.12.0.tar.gz", hash = "sha256:1b0f3a8f5946cca5ba29871d6792ab1e4528ed762327d8aefafc81b73b99fd56"}, @@ -5547,34 +4457,22 @@ fsspec = "==2024.12.0.*" awscli = ["aiobotocore[awscli] (>=2.5.4,<3.0.0)"] boto3 = ["aiobotocore[boto3] (>=2.5.4,<3.0.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "s3transfer" -version = "0.10.4" +version = "0.11.1" description = "An Amazon S3 Transfer Manager" optional = false -python-versions = ">= 3.8" -groups = ["main", "dev"] +python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, - {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, + {file = "s3transfer-0.11.1-py3-none-any.whl", hash = "sha256:8fa0aa48177be1f3425176dfe1ab85dcd3d962df603c3dbfc585e6bf857ef0ff"}, + {file = "s3transfer-0.11.1.tar.gz", hash = "sha256:3f25c900a367c8b7f7d8f9c34edc87e300bde424f779dc9f0a8ae4f9df9264f6"}, ] -markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\""} [package.dependencies] -botocore = ">=1.33.2,<2.0a.0" +botocore = ">=1.36.0,<2.0a.0" [package.extras] -crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" +crt = ["botocore[crt] (>=1.36.0,<2.0a.0)"] [[package]] name = "setuptools" @@ -5582,7 +4480,6 @@ version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, @@ -5597,69 +4494,45 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "six" version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main", "dev", "docs"] +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" -groups = ["main"] files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinx" version = "7.4.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, @@ -5690,18 +4563,12 @@ docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=6.0)", "importlib-metadata (>=6.0)", "mypy (==1.10.1)", "pytest (>=6.0)", "ruff (==0.5.2)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-docutils (==0.21.0.20240711)", "types-requests (>=2.30.0)"] test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, @@ -5712,18 +4579,12 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, @@ -5734,18 +4595,12 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, @@ -5756,18 +4611,12 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" -groups = ["dev"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -5776,18 +4625,12 @@ files = [ [package.extras] test = ["flake8", "mypy", "pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, @@ -5798,18 +4641,12 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["defusedxml (>=0.7.1)", "pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, @@ -5820,77 +4657,70 @@ lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sqlalchemy" -version = "2.0.37" +version = "2.0.38" description = "Database Abstraction Library" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"sql-postgres\" or extra == \"sql-sqlite\"" -files = [ - {file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6f5d254a22394847245f411a2956976401e84da4288aa70cbcd5190744062c1"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41296bbcaa55ef5fdd32389a35c710133b097f7b2609d8218c0eabded43a1d84"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bedee60385c1c0411378cbd4dc486362f5ee88deceea50002772912d798bb00f"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6c67415258f9f3c69867ec02fea1bf6508153709ecbd731a982442a590f2b7e4"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-win32.whl", hash = "sha256:650dcb70739957a492ad8acff65d099a9586b9b8920e3507ca61ec3ce650bb72"}, - {file = "SQLAlchemy-2.0.37-cp310-cp310-win_amd64.whl", hash = "sha256:93d1543cd8359040c02b6614421c8e10cd7a788c40047dbc507ed46c29ae5636"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:78361be6dc9073ed17ab380985d1e45e48a642313ab68ab6afa2457354ff692c"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b661b49d0cb0ab311a189b31e25576b7ac3e20783beb1e1817d72d9d02508bf5"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d57bafbab289e147d064ffbd5cca2d7b1394b63417c0636cea1f2e93d16eb9e8"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa2c0913f02341d25fb858e4fb2031e6b0813494cca1ba07d417674128ce11b"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9df21b8d9e5c136ea6cde1c50d2b1c29a2b5ff2b1d610165c23ff250e0704087"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db18ff6b8c0f1917f8b20f8eca35c28bbccb9f83afa94743e03d40203ed83de9"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-win32.whl", hash = "sha256:46954173612617a99a64aee103bcd3f078901b9a8dcfc6ae80cbf34ba23df989"}, - {file = "SQLAlchemy-2.0.37-cp311-cp311-win_amd64.whl", hash = "sha256:7b7e772dc4bc507fdec4ee20182f15bd60d2a84f1e087a8accf5b5b7a0dcf2ba"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2952748ecd67ed3b56773c185e85fc084f6bdcdec10e5032a7c25a6bc7d682ef"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3151822aa1db0eb5afd65ccfafebe0ef5cda3a7701a279c8d0bf17781a793bb4"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaa8039b6d20137a4e02603aba37d12cd2dde7887500b8855356682fc33933f4"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cdba1f73b64530c47b27118b7053b8447e6d6f3c8104e3ac59f3d40c33aa9fd"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1b2690456528a87234a75d1a1644cdb330a6926f455403c8e4f6cad6921f9098"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf5ae8a9dcf657fd72144a7fd01f243236ea39e7344e579a121c4205aedf07bb"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-win32.whl", hash = "sha256:ea308cec940905ba008291d93619d92edaf83232ec85fbd514dcb329f3192761"}, - {file = "SQLAlchemy-2.0.37-cp312-cp312-win_amd64.whl", hash = "sha256:635d8a21577341dfe4f7fa59ec394b346da12420b86624a69e466d446de16aff"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8c4096727193762e72ce9437e2a86a110cf081241919ce3fab8e89c02f6b6658"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e4fb5ac86d8fe8151966814f6720996430462e633d225497566b3996966b9bdb"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e56a139bfe136a22c438478a86f8204c1eb5eed36f4e15c4224e4b9db01cb3e4"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f95fc8e3f34b5f6b3effb49d10ac97c569ec8e32f985612d9b25dd12d0d2e94"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c505edd429abdfe3643fa3b2e83efb3445a34a9dc49d5f692dd087be966020e0"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:12b0f1ec623cccf058cf21cb544f0e74656618165b083d78145cafde156ea7b6"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-win32.whl", hash = "sha256:293f9ade06b2e68dd03cfb14d49202fac47b7bb94bffcff174568c951fbc7af2"}, - {file = "SQLAlchemy-2.0.37-cp313-cp313-win_amd64.whl", hash = "sha256:d70f53a0646cc418ca4853da57cf3ddddbccb8c98406791f24426f2dd77fd0e2"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:44f569d0b1eb82301b92b72085583277316e7367e038d97c3a1a899d9a05e342"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2eae3423e538c10d93ae3e87788c6a84658c3ed6db62e6a61bb9495b0ad16bb"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfff7be361048244c3aa0f60b5e63221c5e0f0e509f4e47b8910e22b57d10ae7"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:5bc3339db84c5fb9130ac0e2f20347ee77b5dd2596ba327ce0d399752f4fce39"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:84b9f23b0fa98a6a4b99d73989350a94e4a4ec476b9a7dfe9b79ba5939f5e80b"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-win32.whl", hash = "sha256:51bc9cfef83e0ac84f86bf2b10eaccb27c5a3e66a1212bef676f5bee6ef33ebb"}, - {file = "SQLAlchemy-2.0.37-cp37-cp37m-win_amd64.whl", hash = "sha256:8e47f1af09444f87c67b4f1bb6231e12ba6d4d9f03050d7fc88df6d075231a49"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6b788f14c5bb91db7f468dcf76f8b64423660a05e57fe277d3f4fad7b9dcb7ce"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521ef85c04c33009166777c77e76c8a676e2d8528dc83a57836b63ca9c69dcd1"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75311559f5c9881a9808eadbeb20ed8d8ba3f7225bef3afed2000c2a9f4d49b9"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cce918ada64c956b62ca2c2af59b125767097ec1dca89650a6221e887521bfd7"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9d087663b7e1feabea8c578d6887d59bb00388158e8bff3a76be11aa3f748ca2"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cf95a60b36997dad99692314c4713f141b61c5b0b4cc5c3426faad570b31ca01"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-win32.whl", hash = "sha256:d75ead7dd4d255068ea0f21492ee67937bd7c90964c8f3c2bea83c7b7f81b95f"}, - {file = "SQLAlchemy-2.0.37-cp38-cp38-win_amd64.whl", hash = "sha256:74bbd1d0a9bacf34266a7907d43260c8d65d31d691bb2356f41b17c2dca5b1d0"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:648ec5acf95ad59255452ef759054f2176849662af4521db6cb245263ae4aa33"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:35bd2df269de082065d4b23ae08502a47255832cc3f17619a5cea92ce478b02b"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f581d365af9373a738c49e0c51e8b18e08d8a6b1b15cc556773bcd8a192fa8b"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82df02816c14f8dc9f4d74aea4cb84a92f4b0620235daa76dde002409a3fbb5a"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94b564e38b344d3e67d2e224f0aec6ba09a77e4582ced41e7bfd0f757d926ec9"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:955a2a765aa1bd81aafa69ffda179d4fe3e2a3ad462a736ae5b6f387f78bfeb8"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-win32.whl", hash = "sha256:03f0528c53ca0b67094c4764523c1451ea15959bbf0a8a8a3096900014db0278"}, - {file = "SQLAlchemy-2.0.37-cp39-cp39-win_amd64.whl", hash = "sha256:4b12885dc85a2ab2b7d00995bac6d967bffa8594123b02ed21e8eb2205a7584b"}, - {file = "SQLAlchemy-2.0.37-py3-none-any.whl", hash = "sha256:a8998bf9f8658bd3839cbc44ddbe982955641863da0c1efe5b00c1ab4f5c16b1"}, - {file = "sqlalchemy-2.0.37.tar.gz", hash = "sha256:12b28d99a9c14eaf4055810df1001557176716de0167b91026e648e65229bffb"}, +files = [ + {file = "SQLAlchemy-2.0.38-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5e1d9e429028ce04f187a9f522818386c8b076723cdbe9345708384f49ebcec6"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b87a90f14c68c925817423b0424381f0e16d80fc9a1a1046ef202ab25b19a444"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:402c2316d95ed90d3d3c25ad0390afa52f4d2c56b348f212aa9c8d072a40eee5"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6493bc0eacdbb2c0f0d260d8988e943fee06089cd239bd7f3d0c45d1657a70e2"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0561832b04c6071bac3aad45b0d3bb6d2c4f46a8409f0a7a9c9fa6673b41bc03"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:49aa2cdd1e88adb1617c672a09bf4ebf2f05c9448c6dbeba096a3aeeb9d4d443"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-win32.whl", hash = "sha256:64aa8934200e222f72fcfd82ee71c0130a9c07d5725af6fe6e919017d095b297"}, + {file = "SQLAlchemy-2.0.38-cp310-cp310-win_amd64.whl", hash = "sha256:c57b8e0841f3fce7b703530ed70c7c36269c6d180ea2e02e36b34cb7288c50c7"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bf89e0e4a30714b357f5d46b6f20e0099d38b30d45fa68ea48589faf5f12f62d"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8455aa60da49cb112df62b4721bd8ad3654a3a02b9452c783e651637a1f21fa2"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f53c0d6a859b2db58332e0e6a921582a02c1677cc93d4cbb36fdf49709b327b2"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c4817dff8cef5697f5afe5fec6bc1783994d55a68391be24cb7d80d2dbc3a6"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9cea5b756173bb86e2235f2f871b406a9b9d722417ae31e5391ccaef5348f2c"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40e9cdbd18c1f84631312b64993f7d755d85a3930252f6276a77432a2b25a2f3"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-win32.whl", hash = "sha256:cb39ed598aaf102251483f3e4675c5dd6b289c8142210ef76ba24aae0a8f8aba"}, + {file = "SQLAlchemy-2.0.38-cp311-cp311-win_amd64.whl", hash = "sha256:f9d57f1b3061b3e21476b0ad5f0397b112b94ace21d1f439f2db472e568178ae"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12d5b06a1f3aeccf295a5843c86835033797fea292c60e72b07bcb5d820e6dd3"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e036549ad14f2b414c725349cce0772ea34a7ab008e9cd67f9084e4f371d1f32"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee3bee874cb1fadee2ff2b79fc9fc808aa638670f28b2145074538d4a6a5028e"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e185ea07a99ce8b8edfc788c586c538c4b1351007e614ceb708fd01b095ef33e"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b79ee64d01d05a5476d5cceb3c27b5535e6bb84ee0f872ba60d9a8cd4d0e6579"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:afd776cf1ebfc7f9aa42a09cf19feadb40a26366802d86c1fba080d8e5e74bdd"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-win32.whl", hash = "sha256:a5645cd45f56895cfe3ca3459aed9ff2d3f9aaa29ff7edf557fa7a23515a3725"}, + {file = "SQLAlchemy-2.0.38-cp312-cp312-win_amd64.whl", hash = "sha256:1052723e6cd95312f6a6eff9a279fd41bbae67633415373fdac3c430eca3425d"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ecef029b69843b82048c5b347d8e6049356aa24ed644006c9a9d7098c3bd3bfd"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c8bcad7fc12f0cc5896d8e10fdf703c45bd487294a986903fe032c72201596b"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a0ef3f98175d77180ffdc623d38e9f1736e8d86b6ba70bff182a7e68bed7727"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0ac78898c50e2574e9f938d2e5caa8fe187d7a5b69b65faa1ea4648925b096"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9eb4fa13c8c7a2404b6a8e3772c17a55b1ba18bc711e25e4d6c0c9f5f541b02a"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5dba1cdb8f319084f5b00d41207b2079822aa8d6a4667c0f369fce85e34b0c86"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-win32.whl", hash = "sha256:eae27ad7580529a427cfdd52c87abb2dfb15ce2b7a3e0fc29fbb63e2ed6f8120"}, + {file = "SQLAlchemy-2.0.38-cp313-cp313-win_amd64.whl", hash = "sha256:b335a7c958bc945e10c522c069cd6e5804f4ff20f9a744dd38e748eb602cbbda"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:40310db77a55512a18827488e592965d3dec6a3f1e3d8af3f8243134029daca3"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d3043375dd5bbcb2282894cbb12e6c559654c67b5fffb462fda815a55bf93f7"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70065dfabf023b155a9c2a18f573e47e6ca709b9e8619b2e04c54d5bcf193178"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:c058b84c3b24812c859300f3b5abf300daa34df20d4d4f42e9652a4d1c48c8a4"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0398361acebb42975deb747a824b5188817d32b5c8f8aba767d51ad0cc7bb08d"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-win32.whl", hash = "sha256:a2bc4e49e8329f3283d99840c136ff2cd1a29e49b5624a46a290f04dff48e079"}, + {file = "SQLAlchemy-2.0.38-cp37-cp37m-win_amd64.whl", hash = "sha256:9cd136184dd5f58892f24001cdce986f5d7e96059d004118d5410671579834a4"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:665255e7aae5f38237b3a6eae49d2358d83a59f39ac21036413fab5d1e810578"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:92f99f2623ff16bd4aaf786ccde759c1f676d39c7bf2855eb0b540e1ac4530c8"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa498d1392216fae47eaf10c593e06c34476ced9549657fca713d0d1ba5f7248"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9afbc3909d0274d6ac8ec891e30210563b2c8bdd52ebbda14146354e7a69373"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:57dd41ba32430cbcc812041d4de8d2ca4651aeefad2626921ae2a23deb8cd6ff"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3e35d5565b35b66905b79ca4ae85840a8d40d31e0b3e2990f2e7692071b179ca"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-win32.whl", hash = "sha256:f0d3de936b192980209d7b5149e3c98977c3810d401482d05fb6d668d53c1c63"}, + {file = "SQLAlchemy-2.0.38-cp38-cp38-win_amd64.whl", hash = "sha256:3868acb639c136d98107c9096303d2d8e5da2880f7706f9f8c06a7f961961149"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07258341402a718f166618470cde0c34e4cec85a39767dce4e24f61ba5e667ea"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a826f21848632add58bef4f755a33d45105d25656a0c849f2dc2df1c71f6f50"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:386b7d136919bb66ced64d2228b92d66140de5fefb3c7df6bd79069a269a7b06"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f2951dc4b4f990a4b394d6b382accb33141d4d3bd3ef4e2b27287135d6bdd68"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8bf312ed8ac096d674c6aa9131b249093c1b37c35db6a967daa4c84746bc1bc9"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6db316d6e340f862ec059dc12e395d71f39746a20503b124edc255973977b728"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-win32.whl", hash = "sha256:c09a6ea87658695e527104cf857c70f79f14e9484605e205217aae0ec27b45fc"}, + {file = "SQLAlchemy-2.0.38-cp39-cp39-win_amd64.whl", hash = "sha256:12f5c9ed53334c3ce719155424dc5407aaa4f6cadeb09c5b627e06abb93933a1"}, + {file = "SQLAlchemy-2.0.38-py3-none-any.whl", hash = "sha256:63178c675d4c80def39f1febd625a6333f44c0ba269edd8a468b156394b27753"}, + {file = "sqlalchemy-2.0.38.tar.gz", hash = "sha256:e5a4d82bdb4bf1ac1285a68eab02d253ab73355d9f0fe725a97e1e0fa689decb"}, ] [package.dependencies] @@ -5922,18 +4752,12 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "strictyaml" version = "1.7.3" description = "Strict, typed YAML parser" optional = false python-versions = ">=3.7.0" -groups = ["main"] files = [ {file = "strictyaml-1.7.3-py3-none-any.whl", hash = "sha256:fb5c8a4edb43bebb765959e420f9b3978d7f1af88c80606c03fb420888f5d1c7"}, {file = "strictyaml-1.7.3.tar.gz", hash = "sha256:22f854a5fcab42b5ddba8030a0e4be51ca89af0267961c8d6cfa86395586c407"}, @@ -5942,18 +4766,12 @@ files = [ [package.dependencies] python-dateutil = ">=2.6.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "sympy" version = "1.13.3" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, @@ -5965,18 +4783,12 @@ mpmath = ">=1.1.0,<1.4" [package.extras] dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "tenacity" version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, @@ -5986,19 +4798,12 @@ files = [ doc = ["reno", "sphinx"] test = ["pytest", "tornado (>=4.5)", "typeguard"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "thrift" version = "0.21.0" description = "Python bindings for the Apache Thrift RPC system" optional = true python-versions = "*" -groups = ["main"] -markers = "extra == \"hive\"" files = [ {file = "thrift-0.21.0.tar.gz", hash = "sha256:5e6f7c50f936ebfa23e924229afc95eb219f8c8e5a83202dd4a391244803e402"}, ] @@ -6011,19 +4816,12 @@ all = ["tornado (>=4.0)", "twisted"] tornado = ["tornado (>=4.0)"] twisted = ["twisted"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "tomli" version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "python_full_version <= \"3.11.0a6\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -6059,19 +4857,12 @@ files = [ {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "tqdm" version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = true python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"daft\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -6087,71 +4878,45 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "types-setuptools" version = "75.6.0.20241126" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b"}, {file = "types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" -groups = ["main", "dev", "docs"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "tzdata" version = "2024.2" description = "Provider of IANA time zone data" optional = true python-versions = ">=2" -groups = ["main"] -markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "urllib3" version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -groups = ["main", "dev", "docs"] -markers = "python_version < \"3.10\"" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, @@ -6162,19 +4927,12 @@ brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotl secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "urllib3" version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" -groups = ["main", "dev", "docs"] -markers = "python_version >= \"3.10\" and python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, @@ -6186,18 +4944,12 @@ h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "virtualenv" version = "20.28.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, @@ -6212,18 +4964,12 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "watchdog" version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" -groups = ["docs"] files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -6260,18 +5006,12 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "werkzeug" version = "3.1.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, @@ -6283,18 +5023,12 @@ MarkupSafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "wrapt" version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -6362,12 +5096,6 @@ files = [ {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] -markers = {main = "extra == \"s3fs\""} - -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" [[package]] name = "xmltodict" @@ -6375,25 +5103,17 @@ version = "0.14.2" description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.6" -groups = ["dev"] files = [ {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, ] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "yarl" version = "1.18.3" description = "Yet another URL library" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -6484,23 +5204,16 @@ idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.0" -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "zipp" version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" -groups = ["dev", "docs"] files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] -markers = {dev = "python_full_version < \"3.10.2\"", docs = "python_version < \"3.10\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] @@ -6510,19 +5223,12 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [[package]] name = "zstandard" version = "0.23.0" description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"zstandard\"" files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -6629,11 +5335,6 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\ [package.extras] cffi = ["cffi (>=1.11)"] -[package.source] -type = "legacy" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple" -reference = "jfrog" - [extras] adlfs = ["adlfs"] daft = ["getdaft"] @@ -6654,6 +5355,6 @@ sql-sqlite = ["sqlalchemy"] zstandard = ["zstandard"] [metadata] -lock-version = "2.1" +lock-version = "2.0" python-versions = "^3.9, !=3.9.7" -content-hash = "f6b43b11c7720ffb74001a450dc8e2385038a4563ff0b6cd3809fec5f183ca12" +content-hash = "b098e8eb88d536e263d14ce2805abfc55519b2cfb1c620df60d1936cbfb04226" \ No newline at end of file diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index 8403384a63..1b12ed43e7 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -142,5 +142,4 @@ def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols non_matching_rows = source_table.filter(non_matching_expr).select(common_columns) - return non_matching_rows - + return non_matching_rows \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 29fafc5737..ee3766d50e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,31 +94,23 @@ typing-extensions = "4.12.2" pytest-mock = "3.14.0" pyspark = "3.5.3" cython = "3.0.11" -deptry = ">=0.14,<0.23" +deptry = ">=0.14,<0.24" docutils = "!=0.21.post1" # https://github.com/python-poetry/poetry/issues/9248#issuecomment-2026240520 -datafusion = "^43.1.0" [tool.poetry.group.docs.dependencies] # for mkdocs mkdocs = "1.6.1" -griffe = "1.5.5" +griffe = "1.5.6" jinja2 = "3.1.5" -mkdocstrings = "0.27.0" -mkdocstrings-python = "1.13.0" +mkdocstrings = "0.28.0" +mkdocstrings-python = "1.14.6" mkdocs-literate-nav = "0.6.1" mkdocs-autorefs = "1.3.0" mkdocs-gen-files = "0.5.0" -mkdocs-material = "9.5.50" +mkdocs-material = "9.6.3" mkdocs-material-extensions = "1.3.1" mkdocs-section-index = "0.3.9" - - -[[tool.poetry.source]] -name = "jfrog" -url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple/" -priority = "primary" - [[tool.mypy.overrides]] module = "pytest_mock.*" ignore_missing_imports = true @@ -1191,7454 +1183,6 @@ ignore_missing_imports = true module = "tenacity.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - [tool.poetry.scripts] pyiceberg = "pyiceberg.cli.console:run" @@ -8676,6 +1220,7 @@ markers = [ "adls: marks a test as requiring access to adls compliant storage (use with --adls.account-name, --adls.account-key, and --adls.endpoint args)", "integration: marks integration tests against Apache Spark", "gcs: marks a test as requiring access to gcs compliant storage (use with --gs.token, --gs.project, and --gs.endpoint)", + "benchmark: collection of tests to validate read/write performance before and after a change" ] # Turns a warning into an error From 02af4d4bf71a8048ca8f2bee46273283438a94c6 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Mon, 10 Feb 2025 16:37:08 -0500 Subject: [PATCH 31/51] updated equality checks with not instead of == false --- pyiceberg/table/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index dceb094ebd..0f87b2ec50 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1131,7 +1131,7 @@ def upsert(self, df: pa.Table, join_cols: list from pyiceberg.table import upsert_util - if when_matched_update_all == False and when_not_matched_insert_all == False: + if not when_matched_update_all and not when_not_matched_insert_all: raise ValueError('no upsert options selected...exiting') if upsert_util.has_duplicate_rows(df, join_cols): From cc75192f0daa7dfcdfab45024f60a72dc1b15fef Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Mon, 10 Feb 2025 16:45:35 -0500 Subject: [PATCH 32/51] ran ruff check --fix --- pyiceberg/expressions/literals.py | 3 - pyiceberg/table/__init__.py | 10 +- pyiceberg/table/upsert_util.py | 29 +- tests/table/test_upsert.py | 19 +- vendor/fb303/FacebookService.py | 61 +- vendor/hive_metastore/ThriftHiveMetastore.py | 1337 +++++++----------- vendor/hive_metastore/ttypes.py | 626 ++++---- 7 files changed, 906 insertions(+), 1179 deletions(-) diff --git a/pyiceberg/expressions/literals.py b/pyiceberg/expressions/literals.py index 94ecc1f4b2..b29d0d9e48 100644 --- a/pyiceberg/expressions/literals.py +++ b/pyiceberg/expressions/literals.py @@ -29,7 +29,6 @@ from math import isnan from typing import Any, Generic, Type from uuid import UUID -from datetime import date, datetime from pyiceberg.typedef import L from pyiceberg.types import ( @@ -57,12 +56,10 @@ time_str_to_micros, timestamp_to_micros, timestamptz_to_micros, - date_to_days, ) from pyiceberg.utils.decimal import decimal_to_unscaled, unscaled_to_decimal from pyiceberg.utils.singleton import Singleton - UUID_BYTES_LENGTH = 16 diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 0f87b2ec50..e53381c0eb 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -137,8 +137,6 @@ from pyiceberg.utils.config import Config from pyiceberg.utils.properties import property_as_bool -from dataclasses import dataclass - if TYPE_CHECKING: import daft import pandas as pd @@ -1145,9 +1143,9 @@ def upsert(self, df: pa.Table, join_cols: list insert_row_cnt = 0 with self.transaction() as tx: - + if when_matched_update_all: - + #function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed #we don't want to do just a blanket overwrite for matched rows if the actual non-key column data hasn't changed #this extra step avoids unnecessary IO and writes @@ -1158,10 +1156,10 @@ def upsert(self, df: pa.Table, join_cols: list #build the match predicate filter overwrite_mask_predicate = upsert_util.create_match_filter(rows_to_update, join_cols) - tx.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) + tx.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) if when_not_matched_insert_all: - + rows_to_insert = upsert_util.get_rows_to_insert(df, matched_iceberg_table, join_cols) insert_row_cnt = len(rows_to_insert) diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index 1b12ed43e7..e6646e5ece 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -14,18 +14,19 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -from pyarrow import Table as pyarrow_table import pyarrow as pa +from pyarrow import Table as pyarrow_table from pyarrow import compute as pc from pyiceberg.expressions import ( - BooleanExpression, And, + BooleanExpression, EqualTo, - Or, In, + Or, ) + def create_match_filter(df: pyarrow_table, join_cols: list) -> BooleanExpression: unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) @@ -45,7 +46,7 @@ def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: """ This function checks if there are duplicate rows in in a pyarrow table based on the join columns. """ - + return len( df.select(join_cols) .group_by(join_cols) @@ -54,12 +55,12 @@ def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: ) > 0 def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: - + """ This function takes the source_table, trims it down to rows that match in both source and target. It then does a scan for the non-key columns to see if any are mis-aligned before returning the final row set to update """ - + all_columns = set(source_table.column_names) join_cols_set = set(join_cols) @@ -75,19 +76,19 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols match_expr = expr else: match_expr = match_expr & expr - + matching_source_rows = source_table.filter(match_expr) rows_to_update = [] for index in range(matching_source_rows.num_rows): - + source_row = matching_source_rows.slice(index, 1) target_filter = None for col in join_cols: - target_value = source_row.column(col)[0].as_py() + target_value = source_row.column(col)[0].as_py() if target_filter is None: target_filter = pc.field(col) == target_value else: @@ -104,7 +105,7 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols if source_value != target_value: needs_update = True - break + break if needs_update: rows_to_update.append(source_row) @@ -120,7 +121,7 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols return rows_to_update_table def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: - + source_filter_expr = None for col in join_cols: @@ -132,14 +133,14 @@ def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols source_filter_expr = expr else: source_filter_expr = source_filter_expr & expr - + non_matching_expr = ~source_filter_expr source_columns = set(source_table.column_names) target_columns = set(target_table.column_names) - + common_columns = source_columns.intersection(target_columns) non_matching_rows = source_table.filter(non_matching_expr).select(common_columns) - return non_matching_rows \ No newline at end of file + return non_matching_rows diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index d655d9b473..798019f69c 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -14,10 +14,11 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -from tests.catalog.test_base import InMemoryCatalog import pytest from datafusion import SessionContext +from tests.catalog.test_base import InMemoryCatalog + _TEST_NAMESPACE = "test_ns" def show_iceberg_table(table, ctx: SessionContext): @@ -119,7 +120,7 @@ def test_merge_scenario_skip_upd_row(catalog_conn): ctx = SessionContext() - df = ctx.sql(f""" + df = ctx.sql(""" select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type union all select 2 as order_id, date '2021-01-01' as order_date, 'A' as order_type @@ -130,7 +131,7 @@ def test_merge_scenario_skip_upd_row(catalog_conn): table.append(df) - source_df = ctx.sql(f""" + source_df = ctx.sql(""" select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type union all select 2 as order_id, date '2021-01-01' as order_date, 'B' as order_type @@ -155,7 +156,7 @@ def test_merge_scenario_date_as_key(catalog_conn): ctx = SessionContext() - df = ctx.sql(f""" + df = ctx.sql(""" select date '2021-01-01' as order_date, 'A' as order_type union all select date '2021-01-02' as order_date, 'A' as order_type @@ -166,7 +167,7 @@ def test_merge_scenario_date_as_key(catalog_conn): table.append(df) - source_df = ctx.sql(f""" + source_df = ctx.sql(""" select date '2021-01-01' as order_date, 'A' as order_type union all select date '2021-01-02' as order_date, 'B' as order_type @@ -191,7 +192,7 @@ def test_merge_scenario_string_as_key(catalog_conn): ctx = SessionContext() - df = ctx.sql(f""" + df = ctx.sql(""" select 'abc' as order_id, 'A' as order_type union all select 'def' as order_id, 'A' as order_type @@ -202,7 +203,7 @@ def test_merge_scenario_string_as_key(catalog_conn): table.append(df) - source_df = ctx.sql(f""" + source_df = ctx.sql(""" select 'abc' as order_id, 'A' as order_type union all select 'def' as order_id, 'B' as order_type @@ -230,7 +231,7 @@ def test_merge_scenario_composite_key(catalog_conn): catalog = catalog_conn table = gen_target_iceberg_table(1, 200, True, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(101, 300, True, False, ctx) - + res = table.upsert(df=source_df, join_cols=["order_id", "order_line_id"]) expected_updated = 100 @@ -251,7 +252,7 @@ def test_merge_source_dups(catalog_conn): catalog = catalog_conn table = gen_target_iceberg_table(1, 10, False, ctx, catalog, _TEST_NAMESPACE) source_df = gen_source_dataset(5, 15, False, True, ctx) - + with pytest.raises(Exception, match="Duplicate rows found in source dataset based on the key columns. No upsert executed"): table.upsert(df=source_df, join_cols=["order_id"]) diff --git a/vendor/fb303/FacebookService.py b/vendor/fb303/FacebookService.py index c46b0a82a2..7115e8a0d8 100644 --- a/vendor/fb303/FacebookService.py +++ b/vendor/fb303/FacebookService.py @@ -50,21 +50,18 @@ def getName(self): Returns a descriptive name of the service """ - pass def getVersion(self): """ Returns the version of the service """ - pass def getStatus(self): """ Gets the status of this service """ - pass def getStatusDetails(self): """ @@ -72,14 +69,12 @@ def getStatusDetails(self): the dead or warning state, or what is being started or stopped. """ - pass def getCounters(self): """ Gets the counters for this service """ - pass def getCounter(self, key): """ @@ -89,7 +84,6 @@ def getCounter(self, key): - key """ - pass def setOption(self, key, value): """ @@ -100,7 +94,6 @@ def setOption(self, key, value): - value """ - pass def getOption(self, key): """ @@ -110,14 +103,12 @@ def getOption(self, key): - key """ - pass def getOptions(self): """ Gets all options """ - pass def getCpuProfile(self, profileDurationInSec): """ @@ -128,28 +119,24 @@ def getCpuProfile(self, profileDurationInSec): - profileDurationInSec """ - pass def aliveSince(self): """ Returns the unix time that the server has been running since """ - pass def reinitialize(self): """ Tell the server to reload its configuration, reopen log files, etc """ - pass def shutdown(self): """ Suggest a shutdown to the server """ - pass class Client(Iface): @@ -890,7 +877,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -958,7 +945,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1011,7 +998,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1079,7 +1066,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1132,7 +1119,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1198,7 +1185,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1251,7 +1238,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1319,7 +1306,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1372,7 +1359,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1452,7 +1439,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1528,7 +1515,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1603,7 +1590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1693,7 +1680,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1754,7 +1741,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1822,7 +1809,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1899,7 +1886,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1952,7 +1939,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2036,7 +2023,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2110,7 +2097,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2187,7 +2174,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2240,7 +2227,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2306,7 +2293,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2359,7 +2346,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2404,7 +2391,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): diff --git a/vendor/hive_metastore/ThriftHiveMetastore.py b/vendor/hive_metastore/ThriftHiveMetastore.py index 4d25c087c7..92ba9eaeae 100644 --- a/vendor/hive_metastore/ThriftHiveMetastore.py +++ b/vendor/hive_metastore/ThriftHiveMetastore.py @@ -52,7 +52,6 @@ def getMetaConf(self, key): - key """ - pass def setMetaConf(self, key, value): """ @@ -61,7 +60,6 @@ def setMetaConf(self, key, value): - value """ - pass def create_catalog(self, catalog): """ @@ -69,7 +67,6 @@ def create_catalog(self, catalog): - catalog """ - pass def alter_catalog(self, rqst): """ @@ -77,7 +74,6 @@ def alter_catalog(self, rqst): - rqst """ - pass def get_catalog(self, catName): """ @@ -85,7 +81,6 @@ def get_catalog(self, catName): - catName """ - pass def get_catalogs(self): pass @@ -96,7 +91,6 @@ def drop_catalog(self, catName): - catName """ - pass def create_database(self, database): """ @@ -104,7 +98,6 @@ def create_database(self, database): - database """ - pass def get_database(self, name): """ @@ -112,7 +105,6 @@ def get_database(self, name): - name """ - pass def get_database_req(self, request): """ @@ -120,7 +112,6 @@ def get_database_req(self, request): - request """ - pass def drop_database(self, name, deleteData, cascade): """ @@ -130,7 +121,6 @@ def drop_database(self, name, deleteData, cascade): - cascade """ - pass def drop_database_req(self, req): """ @@ -138,7 +128,6 @@ def drop_database_req(self, req): - req """ - pass def get_databases(self, pattern): """ @@ -146,7 +135,6 @@ def get_databases(self, pattern): - pattern """ - pass def get_all_databases(self): pass @@ -158,7 +146,6 @@ def alter_database(self, dbname, db): - db """ - pass def create_dataconnector(self, connector): """ @@ -166,7 +153,6 @@ def create_dataconnector(self, connector): - connector """ - pass def get_dataconnector_req(self, request): """ @@ -174,7 +160,6 @@ def get_dataconnector_req(self, request): - request """ - pass def drop_dataconnector(self, name, ifNotExists, checkReferences): """ @@ -184,7 +169,6 @@ def drop_dataconnector(self, name, ifNotExists, checkReferences): - checkReferences """ - pass def get_dataconnectors(self): pass @@ -196,7 +180,6 @@ def alter_dataconnector(self, name, connector): - connector """ - pass def get_type(self, name): """ @@ -204,7 +187,6 @@ def get_type(self, name): - name """ - pass def create_type(self, type): """ @@ -212,7 +194,6 @@ def create_type(self, type): - type """ - pass def drop_type(self, type): """ @@ -220,7 +201,6 @@ def drop_type(self, type): - type """ - pass def get_type_all(self, name): """ @@ -228,7 +208,6 @@ def get_type_all(self, name): - name """ - pass def get_fields(self, db_name, table_name): """ @@ -237,7 +216,6 @@ def get_fields(self, db_name, table_name): - table_name """ - pass def get_fields_with_environment_context(self, db_name, table_name, environment_context): """ @@ -247,7 +225,6 @@ def get_fields_with_environment_context(self, db_name, table_name, environment_c - environment_context """ - pass def get_fields_req(self, req): """ @@ -255,7 +232,6 @@ def get_fields_req(self, req): - req """ - pass def get_schema(self, db_name, table_name): """ @@ -264,7 +240,6 @@ def get_schema(self, db_name, table_name): - table_name """ - pass def get_schema_with_environment_context(self, db_name, table_name, environment_context): """ @@ -274,7 +249,6 @@ def get_schema_with_environment_context(self, db_name, table_name, environment_c - environment_context """ - pass def get_schema_req(self, req): """ @@ -282,7 +256,6 @@ def get_schema_req(self, req): - req """ - pass def create_table(self, tbl): """ @@ -290,7 +263,6 @@ def create_table(self, tbl): - tbl """ - pass def create_table_with_environment_context(self, tbl, environment_context): """ @@ -299,7 +271,6 @@ def create_table_with_environment_context(self, tbl, environment_context): - environment_context """ - pass def create_table_with_constraints( self, tbl, primaryKeys, foreignKeys, uniqueConstraints, notNullConstraints, defaultConstraints, checkConstraints @@ -315,7 +286,6 @@ def create_table_with_constraints( - checkConstraints """ - pass def create_table_req(self, request): """ @@ -323,7 +293,6 @@ def create_table_req(self, request): - request """ - pass def drop_constraint(self, req): """ @@ -331,7 +300,6 @@ def drop_constraint(self, req): - req """ - pass def add_primary_key(self, req): """ @@ -339,7 +307,6 @@ def add_primary_key(self, req): - req """ - pass def add_foreign_key(self, req): """ @@ -347,7 +314,6 @@ def add_foreign_key(self, req): - req """ - pass def add_unique_constraint(self, req): """ @@ -355,7 +321,6 @@ def add_unique_constraint(self, req): - req """ - pass def add_not_null_constraint(self, req): """ @@ -363,7 +328,6 @@ def add_not_null_constraint(self, req): - req """ - pass def add_default_constraint(self, req): """ @@ -371,7 +335,6 @@ def add_default_constraint(self, req): - req """ - pass def add_check_constraint(self, req): """ @@ -379,7 +342,6 @@ def add_check_constraint(self, req): - req """ - pass def translate_table_dryrun(self, request): """ @@ -387,7 +349,6 @@ def translate_table_dryrun(self, request): - request """ - pass def drop_table(self, dbname, name, deleteData): """ @@ -397,7 +358,6 @@ def drop_table(self, dbname, name, deleteData): - deleteData """ - pass def drop_table_with_environment_context(self, dbname, name, deleteData, environment_context): """ @@ -408,7 +368,6 @@ def drop_table_with_environment_context(self, dbname, name, deleteData, environm - environment_context """ - pass def truncate_table(self, dbName, tableName, partNames): """ @@ -418,7 +377,6 @@ def truncate_table(self, dbName, tableName, partNames): - partNames """ - pass def truncate_table_req(self, req): """ @@ -426,7 +384,6 @@ def truncate_table_req(self, req): - req """ - pass def get_tables(self, db_name, pattern): """ @@ -435,7 +392,6 @@ def get_tables(self, db_name, pattern): - pattern """ - pass def get_tables_by_type(self, db_name, pattern, tableType): """ @@ -445,7 +401,6 @@ def get_tables_by_type(self, db_name, pattern, tableType): - tableType """ - pass def get_all_materialized_view_objects_for_rewriting(self): pass @@ -456,7 +411,6 @@ def get_materialized_views_for_rewriting(self, db_name): - db_name """ - pass def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): """ @@ -466,7 +420,6 @@ def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): - tbl_types """ - pass def get_all_tables(self, db_name): """ @@ -474,7 +427,6 @@ def get_all_tables(self, db_name): - db_name """ - pass def get_table(self, dbname, tbl_name): """ @@ -483,7 +435,6 @@ def get_table(self, dbname, tbl_name): - tbl_name """ - pass def get_table_objects_by_name(self, dbname, tbl_names): """ @@ -492,7 +443,6 @@ def get_table_objects_by_name(self, dbname, tbl_names): - tbl_names """ - pass def get_tables_ext(self, req): """ @@ -500,7 +450,6 @@ def get_tables_ext(self, req): - req """ - pass def get_table_req(self, req): """ @@ -508,7 +457,6 @@ def get_table_req(self, req): - req """ - pass def get_table_objects_by_name_req(self, req): """ @@ -516,7 +464,6 @@ def get_table_objects_by_name_req(self, req): - req """ - pass def get_materialization_invalidation_info(self, creation_metadata, validTxnList): """ @@ -525,7 +472,6 @@ def get_materialization_invalidation_info(self, creation_metadata, validTxnList) - validTxnList """ - pass def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata): """ @@ -536,7 +482,6 @@ def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata) - creation_metadata """ - pass def get_table_names_by_filter(self, dbname, filter, max_tables): """ @@ -546,7 +491,6 @@ def get_table_names_by_filter(self, dbname, filter, max_tables): - max_tables """ - pass def alter_table(self, dbname, tbl_name, new_tbl): """ @@ -556,7 +500,6 @@ def alter_table(self, dbname, tbl_name, new_tbl): - new_tbl """ - pass def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, environment_context): """ @@ -567,7 +510,6 @@ def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, enviro - environment_context """ - pass def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): """ @@ -578,7 +520,6 @@ def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): - cascade """ - pass def alter_table_req(self, req): """ @@ -586,7 +527,6 @@ def alter_table_req(self, req): - req """ - pass def add_partition(self, new_part): """ @@ -594,7 +534,6 @@ def add_partition(self, new_part): - new_part """ - pass def add_partition_with_environment_context(self, new_part, environment_context): """ @@ -603,7 +542,6 @@ def add_partition_with_environment_context(self, new_part, environment_context): - environment_context """ - pass def add_partitions(self, new_parts): """ @@ -611,7 +549,6 @@ def add_partitions(self, new_parts): - new_parts """ - pass def add_partitions_pspec(self, new_parts): """ @@ -619,7 +556,6 @@ def add_partitions_pspec(self, new_parts): - new_parts """ - pass def append_partition(self, db_name, tbl_name, part_vals): """ @@ -629,7 +565,6 @@ def append_partition(self, db_name, tbl_name, part_vals): - part_vals """ - pass def add_partitions_req(self, request): """ @@ -637,7 +572,6 @@ def add_partitions_req(self, request): - request """ - pass def append_partition_with_environment_context(self, db_name, tbl_name, part_vals, environment_context): """ @@ -648,7 +582,6 @@ def append_partition_with_environment_context(self, db_name, tbl_name, part_vals - environment_context """ - pass def append_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -658,7 +591,6 @@ def append_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ - pass def append_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, environment_context): """ @@ -669,7 +601,6 @@ def append_partition_by_name_with_environment_context(self, db_name, tbl_name, p - environment_context """ - pass def drop_partition(self, db_name, tbl_name, part_vals, deleteData): """ @@ -680,7 +611,6 @@ def drop_partition(self, db_name, tbl_name, part_vals, deleteData): - deleteData """ - pass def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, deleteData, environment_context): """ @@ -692,7 +622,6 @@ def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, - environment_context """ - pass def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): """ @@ -703,7 +632,6 @@ def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): - deleteData """ - pass def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, deleteData, environment_context): """ @@ -715,7 +643,6 @@ def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, par - environment_context """ - pass def drop_partitions_req(self, req): """ @@ -723,7 +650,6 @@ def drop_partitions_req(self, req): - req """ - pass def get_partition(self, db_name, tbl_name, part_vals): """ @@ -733,7 +659,6 @@ def get_partition(self, db_name, tbl_name, part_vals): - part_vals """ - pass def get_partition_req(self, req): """ @@ -741,7 +666,6 @@ def get_partition_req(self, req): - req """ - pass def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -753,7 +677,6 @@ def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_ - dest_table_name """ - pass def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -765,7 +688,6 @@ def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest - dest_table_name """ - pass def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group_names): """ @@ -777,7 +699,6 @@ def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group - group_names """ - pass def get_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -787,7 +708,6 @@ def get_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ - pass def get_partitions(self, db_name, tbl_name, max_parts): """ @@ -797,7 +717,6 @@ def get_partitions(self, db_name, tbl_name, max_parts): - max_parts """ - pass def get_partitions_req(self, req): """ @@ -805,7 +724,6 @@ def get_partitions_req(self, req): - req """ - pass def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, group_names): """ @@ -817,7 +735,6 @@ def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, grou - group_names """ - pass def get_partitions_pspec(self, db_name, tbl_name, max_parts): """ @@ -827,7 +744,6 @@ def get_partitions_pspec(self, db_name, tbl_name, max_parts): - max_parts """ - pass def get_partition_names(self, db_name, tbl_name, max_parts): """ @@ -837,7 +753,6 @@ def get_partition_names(self, db_name, tbl_name, max_parts): - max_parts """ - pass def get_partition_values(self, request): """ @@ -845,7 +760,6 @@ def get_partition_values(self, request): - request """ - pass def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -856,7 +770,6 @@ def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ - pass def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, user_name, group_names): """ @@ -869,7 +782,6 @@ def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, u - group_names """ - pass def get_partitions_ps_with_auth_req(self, req): """ @@ -877,7 +789,6 @@ def get_partitions_ps_with_auth_req(self, req): - req """ - pass def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -888,7 +799,6 @@ def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ - pass def get_partition_names_ps_req(self, req): """ @@ -896,7 +806,6 @@ def get_partition_names_ps_req(self, req): - req """ - pass def get_partition_names_req(self, req): """ @@ -904,7 +813,6 @@ def get_partition_names_req(self, req): - req """ - pass def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -915,7 +823,6 @@ def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ - pass def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -926,7 +833,6 @@ def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ - pass def get_partitions_by_expr(self, req): """ @@ -934,7 +840,6 @@ def get_partitions_by_expr(self, req): - req """ - pass def get_partitions_spec_by_expr(self, req): """ @@ -942,7 +847,6 @@ def get_partitions_spec_by_expr(self, req): - req """ - pass def get_num_partitions_by_filter(self, db_name, tbl_name, filter): """ @@ -952,7 +856,6 @@ def get_num_partitions_by_filter(self, db_name, tbl_name, filter): - filter """ - pass def get_partitions_by_names(self, db_name, tbl_name, names): """ @@ -962,7 +865,6 @@ def get_partitions_by_names(self, db_name, tbl_name, names): - names """ - pass def get_partitions_by_names_req(self, req): """ @@ -970,7 +872,6 @@ def get_partitions_by_names_req(self, req): - req """ - pass def alter_partition(self, db_name, tbl_name, new_part): """ @@ -980,7 +881,6 @@ def alter_partition(self, db_name, tbl_name, new_part): - new_part """ - pass def alter_partitions(self, db_name, tbl_name, new_parts): """ @@ -990,7 +890,6 @@ def alter_partitions(self, db_name, tbl_name, new_parts): - new_parts """ - pass def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts, environment_context): """ @@ -1001,7 +900,6 @@ def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts - environment_context """ - pass def alter_partitions_req(self, req): """ @@ -1009,7 +907,6 @@ def alter_partitions_req(self, req): - req """ - pass def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, environment_context): """ @@ -1020,7 +917,6 @@ def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, - environment_context """ - pass def rename_partition(self, db_name, tbl_name, part_vals, new_part): """ @@ -1031,7 +927,6 @@ def rename_partition(self, db_name, tbl_name, part_vals, new_part): - new_part """ - pass def rename_partition_req(self, req): """ @@ -1039,7 +934,6 @@ def rename_partition_req(self, req): - req """ - pass def partition_name_has_valid_characters(self, part_vals, throw_exception): """ @@ -1048,7 +942,6 @@ def partition_name_has_valid_characters(self, part_vals, throw_exception): - throw_exception """ - pass def get_config_value(self, name, defaultValue): """ @@ -1057,7 +950,6 @@ def get_config_value(self, name, defaultValue): - defaultValue """ - pass def partition_name_to_vals(self, part_name): """ @@ -1065,7 +957,6 @@ def partition_name_to_vals(self, part_name): - part_name """ - pass def partition_name_to_spec(self, part_name): """ @@ -1073,7 +964,6 @@ def partition_name_to_spec(self, part_name): - part_name """ - pass def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -1084,7 +974,6 @@ def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ - pass def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -1095,7 +984,6 @@ def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ - pass def get_primary_keys(self, request): """ @@ -1103,7 +991,6 @@ def get_primary_keys(self, request): - request """ - pass def get_foreign_keys(self, request): """ @@ -1111,7 +998,6 @@ def get_foreign_keys(self, request): - request """ - pass def get_unique_constraints(self, request): """ @@ -1119,7 +1005,6 @@ def get_unique_constraints(self, request): - request """ - pass def get_not_null_constraints(self, request): """ @@ -1127,7 +1012,6 @@ def get_not_null_constraints(self, request): - request """ - pass def get_default_constraints(self, request): """ @@ -1135,7 +1019,6 @@ def get_default_constraints(self, request): - request """ - pass def get_check_constraints(self, request): """ @@ -1143,7 +1026,6 @@ def get_check_constraints(self, request): - request """ - pass def get_all_table_constraints(self, request): """ @@ -1151,7 +1033,6 @@ def get_all_table_constraints(self, request): - request """ - pass def update_table_column_statistics(self, stats_obj): """ @@ -1159,7 +1040,6 @@ def update_table_column_statistics(self, stats_obj): - stats_obj """ - pass def update_partition_column_statistics(self, stats_obj): """ @@ -1167,7 +1047,6 @@ def update_partition_column_statistics(self, stats_obj): - stats_obj """ - pass def update_table_column_statistics_req(self, req): """ @@ -1175,7 +1054,6 @@ def update_table_column_statistics_req(self, req): - req """ - pass def update_partition_column_statistics_req(self, req): """ @@ -1183,7 +1061,6 @@ def update_partition_column_statistics_req(self, req): - req """ - pass def update_transaction_statistics(self, req): """ @@ -1191,7 +1068,6 @@ def update_transaction_statistics(self, req): - req """ - pass def get_table_column_statistics(self, db_name, tbl_name, col_name): """ @@ -1201,7 +1077,6 @@ def get_table_column_statistics(self, db_name, tbl_name, col_name): - col_name """ - pass def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name): """ @@ -1212,7 +1087,6 @@ def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name - col_name """ - pass def get_table_statistics_req(self, request): """ @@ -1220,7 +1094,6 @@ def get_table_statistics_req(self, request): - request """ - pass def get_partitions_statistics_req(self, request): """ @@ -1228,7 +1101,6 @@ def get_partitions_statistics_req(self, request): - request """ - pass def get_aggr_stats_for(self, request): """ @@ -1236,7 +1108,6 @@ def get_aggr_stats_for(self, request): - request """ - pass def set_aggr_stats_for(self, request): """ @@ -1244,7 +1115,6 @@ def set_aggr_stats_for(self, request): - request """ - pass def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_name, engine): """ @@ -1256,7 +1126,6 @@ def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_n - engine """ - pass def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): """ @@ -1267,7 +1136,6 @@ def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): - engine """ - pass def create_function(self, func): """ @@ -1275,7 +1143,6 @@ def create_function(self, func): - func """ - pass def drop_function(self, dbName, funcName): """ @@ -1284,7 +1151,6 @@ def drop_function(self, dbName, funcName): - funcName """ - pass def alter_function(self, dbName, funcName, newFunc): """ @@ -1294,7 +1160,6 @@ def alter_function(self, dbName, funcName, newFunc): - newFunc """ - pass def get_functions(self, dbName, pattern): """ @@ -1303,7 +1168,6 @@ def get_functions(self, dbName, pattern): - pattern """ - pass def get_function(self, dbName, funcName): """ @@ -1312,7 +1176,6 @@ def get_function(self, dbName, funcName): - funcName """ - pass def get_all_functions(self): pass @@ -1323,7 +1186,6 @@ def create_role(self, role): - role """ - pass def drop_role(self, role_name): """ @@ -1331,7 +1193,6 @@ def drop_role(self, role_name): - role_name """ - pass def get_role_names(self): pass @@ -1347,7 +1208,6 @@ def grant_role(self, role_name, principal_name, principal_type, grantor, grantor - grant_option """ - pass def revoke_role(self, role_name, principal_name, principal_type): """ @@ -1357,7 +1217,6 @@ def revoke_role(self, role_name, principal_name, principal_type): - principal_type """ - pass def list_roles(self, principal_name, principal_type): """ @@ -1366,7 +1225,6 @@ def list_roles(self, principal_name, principal_type): - principal_type """ - pass def grant_revoke_role(self, request): """ @@ -1374,7 +1232,6 @@ def grant_revoke_role(self, request): - request """ - pass def get_principals_in_role(self, request): """ @@ -1382,7 +1239,6 @@ def get_principals_in_role(self, request): - request """ - pass def get_role_grants_for_principal(self, request): """ @@ -1390,7 +1246,6 @@ def get_role_grants_for_principal(self, request): - request """ - pass def get_privilege_set(self, hiveObject, user_name, group_names): """ @@ -1400,7 +1255,6 @@ def get_privilege_set(self, hiveObject, user_name, group_names): - group_names """ - pass def list_privileges(self, principal_name, principal_type, hiveObject): """ @@ -1410,7 +1264,6 @@ def list_privileges(self, principal_name, principal_type, hiveObject): - hiveObject """ - pass def grant_privileges(self, privileges): """ @@ -1418,7 +1271,6 @@ def grant_privileges(self, privileges): - privileges """ - pass def revoke_privileges(self, privileges): """ @@ -1426,7 +1278,6 @@ def revoke_privileges(self, privileges): - privileges """ - pass def grant_revoke_privileges(self, request): """ @@ -1434,7 +1285,6 @@ def grant_revoke_privileges(self, request): - request """ - pass def refresh_privileges(self, objToRefresh, authorizer, grantRequest): """ @@ -1444,7 +1294,6 @@ def refresh_privileges(self, objToRefresh, authorizer, grantRequest): - grantRequest """ - pass def set_ugi(self, user_name, group_names): """ @@ -1453,7 +1302,6 @@ def set_ugi(self, user_name, group_names): - group_names """ - pass def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): """ @@ -1462,7 +1310,6 @@ def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): - renewer_kerberos_principal_name """ - pass def renew_delegation_token(self, token_str_form): """ @@ -1470,7 +1317,6 @@ def renew_delegation_token(self, token_str_form): - token_str_form """ - pass def cancel_delegation_token(self, token_str_form): """ @@ -1478,7 +1324,6 @@ def cancel_delegation_token(self, token_str_form): - token_str_form """ - pass def add_token(self, token_identifier, delegation_token): """ @@ -1487,7 +1332,6 @@ def add_token(self, token_identifier, delegation_token): - delegation_token """ - pass def remove_token(self, token_identifier): """ @@ -1495,7 +1339,6 @@ def remove_token(self, token_identifier): - token_identifier """ - pass def get_token(self, token_identifier): """ @@ -1503,7 +1346,6 @@ def get_token(self, token_identifier): - token_identifier """ - pass def get_all_token_identifiers(self): pass @@ -1514,7 +1356,6 @@ def add_master_key(self, key): - key """ - pass def update_master_key(self, seq_number, key): """ @@ -1523,7 +1364,6 @@ def update_master_key(self, seq_number, key): - key """ - pass def remove_master_key(self, key_seq): """ @@ -1531,7 +1371,6 @@ def remove_master_key(self, key_seq): - key_seq """ - pass def get_master_keys(self): pass @@ -1548,7 +1387,6 @@ def open_txns(self, rqst): - rqst """ - pass def abort_txn(self, rqst): """ @@ -1556,7 +1394,6 @@ def abort_txn(self, rqst): - rqst """ - pass def abort_txns(self, rqst): """ @@ -1564,7 +1401,6 @@ def abort_txns(self, rqst): - rqst """ - pass def commit_txn(self, rqst): """ @@ -1572,7 +1408,6 @@ def commit_txn(self, rqst): - rqst """ - pass def get_latest_txnid_in_conflict(self, txnId): """ @@ -1580,7 +1415,6 @@ def get_latest_txnid_in_conflict(self, txnId): - txnId """ - pass def repl_tbl_writeid_state(self, rqst): """ @@ -1588,7 +1422,6 @@ def repl_tbl_writeid_state(self, rqst): - rqst """ - pass def get_valid_write_ids(self, rqst): """ @@ -1596,7 +1429,6 @@ def get_valid_write_ids(self, rqst): - rqst """ - pass def allocate_table_write_ids(self, rqst): """ @@ -1604,7 +1436,6 @@ def allocate_table_write_ids(self, rqst): - rqst """ - pass def get_max_allocated_table_write_id(self, rqst): """ @@ -1612,7 +1443,6 @@ def get_max_allocated_table_write_id(self, rqst): - rqst """ - pass def seed_write_id(self, rqst): """ @@ -1620,7 +1450,6 @@ def seed_write_id(self, rqst): - rqst """ - pass def seed_txn_id(self, rqst): """ @@ -1628,7 +1457,6 @@ def seed_txn_id(self, rqst): - rqst """ - pass def lock(self, rqst): """ @@ -1636,7 +1464,6 @@ def lock(self, rqst): - rqst """ - pass def check_lock(self, rqst): """ @@ -1644,7 +1471,6 @@ def check_lock(self, rqst): - rqst """ - pass def unlock(self, rqst): """ @@ -1652,7 +1478,6 @@ def unlock(self, rqst): - rqst """ - pass def show_locks(self, rqst): """ @@ -1660,7 +1485,6 @@ def show_locks(self, rqst): - rqst """ - pass def heartbeat(self, ids): """ @@ -1668,7 +1492,6 @@ def heartbeat(self, ids): - ids """ - pass def heartbeat_txn_range(self, txns): """ @@ -1676,7 +1499,6 @@ def heartbeat_txn_range(self, txns): - txns """ - pass def compact(self, rqst): """ @@ -1684,7 +1506,6 @@ def compact(self, rqst): - rqst """ - pass def compact2(self, rqst): """ @@ -1692,7 +1513,6 @@ def compact2(self, rqst): - rqst """ - pass def show_compact(self, rqst): """ @@ -1700,7 +1520,6 @@ def show_compact(self, rqst): - rqst """ - pass def add_dynamic_partitions(self, rqst): """ @@ -1708,7 +1527,6 @@ def add_dynamic_partitions(self, rqst): - rqst """ - pass def find_next_compact(self, workerId): """ @@ -1716,7 +1534,6 @@ def find_next_compact(self, workerId): - workerId """ - pass def find_next_compact2(self, rqst): """ @@ -1724,7 +1541,6 @@ def find_next_compact2(self, rqst): - rqst """ - pass def update_compactor_state(self, cr, txn_id): """ @@ -1733,7 +1549,6 @@ def update_compactor_state(self, cr, txn_id): - txn_id """ - pass def find_columns_with_stats(self, cr): """ @@ -1741,7 +1556,6 @@ def find_columns_with_stats(self, cr): - cr """ - pass def mark_cleaned(self, cr): """ @@ -1749,7 +1563,6 @@ def mark_cleaned(self, cr): - cr """ - pass def mark_compacted(self, cr): """ @@ -1757,7 +1570,6 @@ def mark_compacted(self, cr): - cr """ - pass def mark_failed(self, cr): """ @@ -1765,7 +1577,6 @@ def mark_failed(self, cr): - cr """ - pass def mark_refused(self, cr): """ @@ -1773,7 +1584,6 @@ def mark_refused(self, cr): - cr """ - pass def update_compaction_metrics_data(self, data): """ @@ -1781,7 +1591,6 @@ def update_compaction_metrics_data(self, data): - data """ - pass def remove_compaction_metrics_data(self, request): """ @@ -1789,7 +1598,6 @@ def remove_compaction_metrics_data(self, request): - request """ - pass def set_hadoop_jobid(self, jobId, cq_id): """ @@ -1798,7 +1606,6 @@ def set_hadoop_jobid(self, jobId, cq_id): - cq_id """ - pass def get_latest_committed_compaction_info(self, rqst): """ @@ -1806,7 +1613,6 @@ def get_latest_committed_compaction_info(self, rqst): - rqst """ - pass def get_next_notification(self, rqst): """ @@ -1814,7 +1620,6 @@ def get_next_notification(self, rqst): - rqst """ - pass def get_current_notificationEventId(self): pass @@ -1825,7 +1630,6 @@ def get_notification_events_count(self, rqst): - rqst """ - pass def fire_listener_event(self, rqst): """ @@ -1833,7 +1637,6 @@ def fire_listener_event(self, rqst): - rqst """ - pass def flushCache(self): pass @@ -1844,7 +1647,6 @@ def add_write_notification_log(self, rqst): - rqst """ - pass def add_write_notification_log_in_batch(self, rqst): """ @@ -1852,7 +1654,6 @@ def add_write_notification_log_in_batch(self, rqst): - rqst """ - pass def cm_recycle(self, request): """ @@ -1860,7 +1661,6 @@ def cm_recycle(self, request): - request """ - pass def get_file_metadata_by_expr(self, req): """ @@ -1868,7 +1668,6 @@ def get_file_metadata_by_expr(self, req): - req """ - pass def get_file_metadata(self, req): """ @@ -1876,7 +1675,6 @@ def get_file_metadata(self, req): - req """ - pass def put_file_metadata(self, req): """ @@ -1884,7 +1682,6 @@ def put_file_metadata(self, req): - req """ - pass def clear_file_metadata(self, req): """ @@ -1892,7 +1689,6 @@ def clear_file_metadata(self, req): - req """ - pass def cache_file_metadata(self, req): """ @@ -1900,7 +1696,6 @@ def cache_file_metadata(self, req): - req """ - pass def get_metastore_db_uuid(self): pass @@ -1911,7 +1706,6 @@ def create_resource_plan(self, request): - request """ - pass def get_resource_plan(self, request): """ @@ -1919,7 +1713,6 @@ def get_resource_plan(self, request): - request """ - pass def get_active_resource_plan(self, request): """ @@ -1927,7 +1720,6 @@ def get_active_resource_plan(self, request): - request """ - pass def get_all_resource_plans(self, request): """ @@ -1935,7 +1727,6 @@ def get_all_resource_plans(self, request): - request """ - pass def alter_resource_plan(self, request): """ @@ -1943,7 +1734,6 @@ def alter_resource_plan(self, request): - request """ - pass def validate_resource_plan(self, request): """ @@ -1951,7 +1741,6 @@ def validate_resource_plan(self, request): - request """ - pass def drop_resource_plan(self, request): """ @@ -1959,7 +1748,6 @@ def drop_resource_plan(self, request): - request """ - pass def create_wm_trigger(self, request): """ @@ -1967,7 +1755,6 @@ def create_wm_trigger(self, request): - request """ - pass def alter_wm_trigger(self, request): """ @@ -1975,7 +1762,6 @@ def alter_wm_trigger(self, request): - request """ - pass def drop_wm_trigger(self, request): """ @@ -1983,7 +1769,6 @@ def drop_wm_trigger(self, request): - request """ - pass def get_triggers_for_resourceplan(self, request): """ @@ -1991,7 +1776,6 @@ def get_triggers_for_resourceplan(self, request): - request """ - pass def create_wm_pool(self, request): """ @@ -1999,7 +1783,6 @@ def create_wm_pool(self, request): - request """ - pass def alter_wm_pool(self, request): """ @@ -2007,7 +1790,6 @@ def alter_wm_pool(self, request): - request """ - pass def drop_wm_pool(self, request): """ @@ -2015,7 +1797,6 @@ def drop_wm_pool(self, request): - request """ - pass def create_or_update_wm_mapping(self, request): """ @@ -2023,7 +1804,6 @@ def create_or_update_wm_mapping(self, request): - request """ - pass def drop_wm_mapping(self, request): """ @@ -2031,7 +1811,6 @@ def drop_wm_mapping(self, request): - request """ - pass def create_or_drop_wm_trigger_to_pool_mapping(self, request): """ @@ -2039,7 +1818,6 @@ def create_or_drop_wm_trigger_to_pool_mapping(self, request): - request """ - pass def create_ischema(self, schema): """ @@ -2047,7 +1825,6 @@ def create_ischema(self, schema): - schema """ - pass def alter_ischema(self, rqst): """ @@ -2055,7 +1832,6 @@ def alter_ischema(self, rqst): - rqst """ - pass def get_ischema(self, name): """ @@ -2063,7 +1839,6 @@ def get_ischema(self, name): - name """ - pass def drop_ischema(self, name): """ @@ -2071,7 +1846,6 @@ def drop_ischema(self, name): - name """ - pass def add_schema_version(self, schemaVersion): """ @@ -2079,7 +1853,6 @@ def add_schema_version(self, schemaVersion): - schemaVersion """ - pass def get_schema_version(self, schemaVersion): """ @@ -2087,7 +1860,6 @@ def get_schema_version(self, schemaVersion): - schemaVersion """ - pass def get_schema_latest_version(self, schemaName): """ @@ -2095,7 +1867,6 @@ def get_schema_latest_version(self, schemaName): - schemaName """ - pass def get_schema_all_versions(self, schemaName): """ @@ -2103,7 +1874,6 @@ def get_schema_all_versions(self, schemaName): - schemaName """ - pass def drop_schema_version(self, schemaVersion): """ @@ -2111,7 +1881,6 @@ def drop_schema_version(self, schemaVersion): - schemaVersion """ - pass def get_schemas_by_cols(self, rqst): """ @@ -2119,7 +1888,6 @@ def get_schemas_by_cols(self, rqst): - rqst """ - pass def map_schema_version_to_serde(self, rqst): """ @@ -2127,7 +1895,6 @@ def map_schema_version_to_serde(self, rqst): - rqst """ - pass def set_schema_version_state(self, rqst): """ @@ -2135,7 +1902,6 @@ def set_schema_version_state(self, rqst): - rqst """ - pass def add_serde(self, serde): """ @@ -2143,7 +1909,6 @@ def add_serde(self, serde): - serde """ - pass def get_serde(self, rqst): """ @@ -2151,7 +1916,6 @@ def get_serde(self, rqst): - rqst """ - pass def get_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -2161,7 +1925,6 @@ def get_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ - pass def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -2171,7 +1934,6 @@ def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ - pass def add_runtime_stats(self, stat): """ @@ -2179,7 +1941,6 @@ def add_runtime_stats(self, stat): - stat """ - pass def get_runtime_stats(self, rqst): """ @@ -2187,7 +1948,6 @@ def get_runtime_stats(self, rqst): - rqst """ - pass def get_partitions_with_specs(self, request): """ @@ -2195,7 +1955,6 @@ def get_partitions_with_specs(self, request): - request """ - pass def scheduled_query_poll(self, request): """ @@ -2203,7 +1962,6 @@ def scheduled_query_poll(self, request): - request """ - pass def scheduled_query_maintenance(self, request): """ @@ -2211,7 +1969,6 @@ def scheduled_query_maintenance(self, request): - request """ - pass def scheduled_query_progress(self, info): """ @@ -2219,7 +1976,6 @@ def scheduled_query_progress(self, info): - info """ - pass def get_scheduled_query(self, scheduleKey): """ @@ -2227,7 +1983,6 @@ def get_scheduled_query(self, scheduleKey): - scheduleKey """ - pass def add_replication_metrics(self, replicationMetricList): """ @@ -2235,7 +1990,6 @@ def add_replication_metrics(self, replicationMetricList): - replicationMetricList """ - pass def get_replication_metrics(self, rqst): """ @@ -2243,7 +1997,6 @@ def get_replication_metrics(self, rqst): - rqst """ - pass def get_open_txns_req(self, getOpenTxnsRequest): """ @@ -2251,7 +2004,6 @@ def get_open_txns_req(self, getOpenTxnsRequest): - getOpenTxnsRequest """ - pass def create_stored_procedure(self, proc): """ @@ -2259,7 +2011,6 @@ def create_stored_procedure(self, proc): - proc """ - pass def get_stored_procedure(self, request): """ @@ -2267,7 +2018,6 @@ def get_stored_procedure(self, request): - request """ - pass def drop_stored_procedure(self, request): """ @@ -2275,7 +2025,6 @@ def drop_stored_procedure(self, request): - request """ - pass def get_all_stored_procedures(self, request): """ @@ -2283,7 +2032,6 @@ def get_all_stored_procedures(self, request): - request """ - pass def find_package(self, request): """ @@ -2291,7 +2039,6 @@ def find_package(self, request): - request """ - pass def add_package(self, request): """ @@ -2299,7 +2046,6 @@ def add_package(self, request): - request """ - pass def get_all_packages(self, request): """ @@ -2307,7 +2053,6 @@ def get_all_packages(self, request): - request """ - pass def drop_package(self, request): """ @@ -2315,7 +2060,6 @@ def drop_package(self, request): - request """ - pass def get_all_write_event_info(self, request): """ @@ -2323,7 +2067,6 @@ def get_all_write_event_info(self, request): - request """ - pass class Client(fb303.FacebookService.Client, Iface): @@ -20241,7 +19984,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20330,7 +20073,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20427,7 +20170,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20509,7 +20252,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20585,7 +20328,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20684,7 +20427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20774,7 +20517,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20873,7 +20616,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20963,7 +20706,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21063,7 +20806,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21130,7 +20873,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21209,7 +20952,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21291,7 +21034,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21390,7 +21133,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21480,7 +21223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21579,7 +21322,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21670,7 +21413,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21770,7 +21513,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21859,7 +21602,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21959,7 +21702,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22073,7 +21816,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22186,7 +21929,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22276,7 +22019,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22375,7 +22118,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22466,7 +22209,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22565,7 +22308,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22625,7 +22368,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22715,7 +22458,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22811,7 +22554,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22905,7 +22648,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22988,7 +22731,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23087,7 +22830,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23177,7 +22920,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23277,7 +23020,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23391,7 +23134,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23481,7 +23224,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23549,7 +23292,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23639,7 +23382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23735,7 +23478,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23829,7 +23572,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23913,7 +23656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24013,7 +23756,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24102,7 +23845,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24213,7 +23956,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24310,7 +24053,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24409,7 +24152,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24499,7 +24242,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24601,7 +24344,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24698,7 +24441,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24825,7 +24568,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24949,7 +24692,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25083,7 +24826,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25179,7 +24922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25291,7 +25034,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25402,7 +25145,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25529,7 +25272,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25653,7 +25396,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25787,7 +25530,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25883,7 +25626,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25995,7 +25738,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26091,7 +25834,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26202,7 +25945,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26312,7 +26055,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26430,7 +26173,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26653,7 +26396,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26806,7 +26549,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26903,7 +26646,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27014,7 +26757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27111,7 +26854,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27198,7 +26941,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27281,7 +27024,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27368,7 +27111,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27451,7 +27194,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27538,7 +27281,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27621,7 +27364,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27708,7 +27451,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27791,7 +27534,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27878,7 +27621,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27961,7 +27704,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28048,7 +27791,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28131,7 +27874,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28218,7 +27961,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28301,7 +28044,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28425,7 +28168,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28555,7 +28298,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28656,7 +28399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28779,7 +28522,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28887,7 +28630,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29009,7 +28752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29098,7 +28841,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29174,7 +28917,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29262,7 +29005,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29359,7 +29102,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29465,7 +29208,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29576,7 +29319,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29689,7 +29432,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29749,7 +29492,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29836,7 +29579,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29919,7 +29662,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30018,7 +29761,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30139,7 +29882,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30249,7 +29992,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30332,7 +30075,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30431,7 +30174,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30528,7 +30271,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30635,7 +30378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30749,7 +30492,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30840,7 +30583,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30915,7 +30658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31011,7 +30754,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31093,7 +30836,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31193,7 +30936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31282,7 +31025,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31394,7 +31137,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31504,7 +31247,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31623,7 +31366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31761,7 +31504,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31881,7 +31624,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31998,7 +31741,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32135,7 +31878,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32259,7 +32002,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32360,7 +32103,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32484,7 +32227,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32592,7 +32335,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32715,7 +32458,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32823,7 +32566,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32906,7 +32649,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33006,7 +32749,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33095,7 +32838,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33207,7 +32950,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33316,7 +33059,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33435,7 +33178,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33539,7 +33282,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33650,7 +33393,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33754,7 +33497,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33865,7 +33608,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34000,7 +33743,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34126,7 +33869,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34222,7 +33965,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34334,7 +34077,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34482,7 +34225,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34615,7 +34358,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34740,7 +34483,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34866,7 +34609,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35004,7 +34747,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35137,7 +34880,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35284,7 +35027,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35404,7 +35147,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35557,7 +35300,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35684,7 +35427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35814,7 +35557,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35934,7 +35677,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36077,7 +35820,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36204,7 +35947,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36293,7 +36036,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36393,7 +36136,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36521,7 +36264,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36635,7 +36378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36724,7 +36467,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36824,7 +36567,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36986,7 +36729,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37138,7 +36881,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37314,7 +37057,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37474,7 +37217,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37654,7 +37397,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37782,7 +37525,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37900,7 +37643,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38014,7 +37757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38130,7 +37873,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38252,7 +37995,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38341,7 +38084,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38441,7 +38184,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38595,7 +38338,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38731,7 +38474,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38847,7 +38590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38969,7 +38712,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39085,7 +38828,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39210,7 +38953,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39299,7 +39042,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39399,7 +39142,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39539,7 +39282,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39668,7 +39411,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39846,7 +39589,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39989,7 +39732,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40078,7 +39821,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40178,7 +39921,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40318,7 +40061,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40450,7 +40193,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40539,7 +40282,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40639,7 +40382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40728,7 +40471,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40839,7 +40582,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40969,7 +40712,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41098,7 +40841,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41228,7 +40971,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41357,7 +41100,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41446,7 +41189,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41546,7 +41289,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41635,7 +41378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41735,7 +41478,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41853,7 +41596,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41966,7 +41709,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42094,7 +41837,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42216,7 +41959,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42305,7 +42048,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42405,7 +42148,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42522,7 +42265,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42623,7 +42366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42742,7 +42485,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42843,7 +42586,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42975,7 +42718,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43083,7 +42826,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43166,7 +42909,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43266,7 +43009,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43396,7 +43139,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43504,7 +43247,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43639,7 +43382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43747,7 +43490,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43830,7 +43573,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43930,7 +43673,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44042,7 +43785,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44136,7 +43879,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44233,7 +43976,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44329,7 +44072,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44412,7 +44155,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44511,7 +44254,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44594,7 +44337,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44699,7 +44442,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44838,7 +44581,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44994,7 +44737,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45162,7 +44905,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45330,7 +45073,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45447,7 +45190,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45547,7 +45290,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45636,7 +45379,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45736,7 +45479,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45825,7 +45568,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45925,7 +45668,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46014,7 +45757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46114,7 +45857,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46203,7 +45946,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46303,7 +46046,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46392,7 +46135,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46492,7 +46235,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46581,7 +46324,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46681,7 +46424,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46770,7 +46513,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46893,7 +46636,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46996,7 +46739,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47119,7 +46862,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47222,7 +46965,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47346,7 +47089,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47449,7 +47192,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47573,7 +47316,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47676,7 +47419,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47751,7 +47494,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47856,7 +47599,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47994,7 +47737,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48140,7 +47883,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48285,7 +48028,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48388,7 +48131,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48488,7 +48231,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48577,7 +48320,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48677,7 +48420,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48766,7 +48509,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48866,7 +48609,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48955,7 +48698,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49078,7 +48821,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49238,7 +48981,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49389,7 +49132,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49535,7 +49278,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49679,7 +49422,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49782,7 +49525,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49893,7 +49636,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50005,7 +49748,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50099,7 +49842,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50210,7 +49953,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50311,7 +50054,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50409,7 +50152,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50515,7 +50258,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50612,7 +50355,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50719,7 +50462,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50786,7 +50529,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50865,7 +50608,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50947,7 +50690,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51034,7 +50777,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51117,7 +50860,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51204,7 +50947,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51264,7 +51007,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51354,7 +51097,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51501,7 +51244,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51623,7 +51366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51732,7 +51475,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51833,7 +51576,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51928,7 +51671,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52031,7 +51774,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52113,7 +51856,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52201,7 +51944,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52283,7 +52026,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52371,7 +52114,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52453,7 +52196,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52541,7 +52284,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52661,7 +52404,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52763,7 +52506,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52871,7 +52614,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52981,7 +52724,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53063,7 +52806,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53150,7 +52893,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53232,7 +52975,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53319,7 +53062,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53401,7 +53144,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53489,7 +53232,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53598,7 +53341,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53700,7 +53443,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53807,7 +53550,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53913,7 +53656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54014,7 +53757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54110,7 +53853,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54193,7 +53936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54280,7 +54023,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54363,7 +54106,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54438,7 +54181,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54529,7 +54272,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54611,7 +54354,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54687,7 +54430,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54762,7 +54505,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54838,7 +54581,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54915,7 +54658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54968,7 +54711,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55046,7 +54789,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55122,7 +54865,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55209,7 +54952,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55304,7 +55047,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55398,7 +55141,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55480,7 +55223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55555,7 +55298,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55608,7 +55351,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55686,7 +55429,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55739,7 +55482,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55806,7 +55549,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55859,7 +55602,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55926,7 +55669,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56001,7 +55744,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56077,7 +55820,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56152,7 +55895,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56227,7 +55970,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56303,7 +56046,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56378,7 +56121,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56454,7 +56197,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56541,7 +56284,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56623,7 +56366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56710,7 +56453,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56792,7 +56535,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56846,7 +56589,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56913,7 +56656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57013,7 +56756,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57102,7 +56845,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57214,7 +56957,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57310,7 +57053,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57398,7 +57141,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57480,7 +57223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57555,7 +57298,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57631,7 +57374,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57706,7 +57449,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57782,7 +57525,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57882,7 +57625,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57971,7 +57714,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58083,7 +57826,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58179,7 +57922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58266,7 +58009,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58349,7 +58092,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58425,7 +58168,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58500,7 +58243,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58599,7 +58342,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58689,7 +58432,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58765,7 +58508,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58840,7 +58583,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58894,7 +58637,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58961,7 +58704,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59037,7 +58780,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59112,7 +58855,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59188,7 +58931,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59263,7 +59006,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59350,7 +59093,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59434,7 +59177,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59522,7 +59265,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59604,7 +59347,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59692,7 +59435,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59786,7 +59529,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59847,7 +59590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59914,7 +59657,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60001,7 +59744,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60076,7 +59819,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60151,7 +59894,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60227,7 +59970,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60302,7 +60045,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60378,7 +60121,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60453,7 +60196,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60529,7 +60272,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60604,7 +60347,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60680,7 +60423,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60767,7 +60510,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60849,7 +60592,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60924,7 +60667,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61013,7 +60756,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61074,7 +60817,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61141,7 +60884,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61217,7 +60960,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61292,7 +61035,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61368,7 +61111,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61421,7 +61164,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61488,7 +61231,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61563,7 +61306,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61639,7 +61382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61714,7 +61457,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61790,7 +61533,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61843,7 +61586,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61888,7 +61631,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61955,7 +61698,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62031,7 +61774,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62106,7 +61849,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62182,7 +61925,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62257,7 +62000,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62345,7 +62088,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62427,7 +62170,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62503,7 +62246,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62578,7 +62321,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62654,7 +62397,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62729,7 +62472,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62805,7 +62548,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62880,7 +62623,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62956,7 +62699,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63031,7 +62774,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63107,7 +62850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63160,7 +62903,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63240,7 +62983,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63322,7 +63065,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63434,7 +63177,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63530,7 +63273,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63630,7 +63373,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63719,7 +63462,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63807,7 +63550,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63889,7 +63632,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63977,7 +63720,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64059,7 +63802,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64171,7 +63914,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64267,7 +64010,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64367,7 +64110,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64456,7 +64199,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64568,7 +64311,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64664,7 +64407,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64788,7 +64531,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64891,7 +64634,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65003,7 +64746,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65099,7 +64842,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65211,7 +64954,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65307,7 +65050,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65407,7 +65150,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65496,7 +65239,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65620,7 +65363,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65723,7 +65466,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65847,7 +65590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65950,7 +65693,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66062,7 +65805,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66158,7 +65901,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66282,7 +66025,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66385,7 +66128,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66497,7 +66240,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66593,7 +66336,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66717,7 +66460,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66820,7 +66563,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66919,7 +66662,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67009,7 +66752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67096,7 +66839,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67179,7 +66922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67279,7 +67022,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67368,7 +67111,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67467,7 +67210,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67557,7 +67300,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67656,7 +67399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67746,7 +67489,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67846,7 +67589,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67935,7 +67678,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68035,7 +67778,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68124,7 +67867,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68232,7 +67975,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68321,7 +68064,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68408,7 +68151,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68491,7 +68234,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68579,7 +68322,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68661,7 +68404,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68748,7 +68491,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68831,7 +68574,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68930,7 +68673,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69020,7 +68763,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69107,7 +68850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69190,7 +68933,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69290,7 +69033,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69406,7 +69149,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69496,7 +69239,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69598,7 +69341,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69687,7 +69430,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69762,7 +69505,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69837,7 +69580,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69913,7 +69656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70009,7 +69752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70091,7 +69834,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70179,7 +69922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70261,7 +70004,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70349,7 +70092,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70431,7 +70174,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70542,7 +70285,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70639,7 +70382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70726,7 +70469,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70809,7 +70552,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70909,7 +70652,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70998,7 +70741,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71073,7 +70816,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71149,7 +70892,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71237,7 +70980,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71319,7 +71062,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71395,7 +71138,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71470,7 +71213,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71557,7 +71300,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71640,7 +71383,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71740,7 +71483,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71829,7 +71572,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71904,7 +71647,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71980,7 +71723,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72079,7 +71822,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72161,7 +71904,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72261,7 +72004,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72350,7 +72093,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72425,7 +72168,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72501,7 +72244,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72600,7 +72343,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72682,7 +72425,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72757,7 +72500,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72833,7 +72576,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72929,7 +72672,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): diff --git a/vendor/hive_metastore/ttypes.py b/vendor/hive_metastore/ttypes.py index dca7aaadc7..fd279207cb 100644 --- a/vendor/hive_metastore/ttypes.py +++ b/vendor/hive_metastore/ttypes.py @@ -643,7 +643,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -735,7 +735,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -815,7 +815,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -983,7 +983,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1231,7 +1231,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1399,7 +1399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1555,7 +1555,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1725,7 +1725,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1895,7 +1895,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2071,7 +2071,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2184,7 +2184,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2326,7 +2326,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2440,7 +2440,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2556,7 +2556,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2627,7 +2627,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2782,7 +2782,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2869,7 +2869,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2931,7 +2931,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3076,7 +3076,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3117,7 +3117,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3207,7 +3207,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3347,7 +3347,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3427,7 +3427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3500,7 +3500,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3566,7 +3566,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3639,7 +3639,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3779,7 +3779,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3841,7 +3841,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3945,7 +3945,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4008,7 +4008,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4085,7 +4085,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4149,7 +4149,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4212,7 +4212,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4286,7 +4286,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4350,7 +4350,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4591,7 +4591,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4753,7 +4753,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4829,7 +4829,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4973,7 +4973,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5223,7 +5223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5394,7 +5394,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5498,7 +5498,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5612,7 +5612,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5726,7 +5726,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5844,7 +5844,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5948,7 +5948,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6026,7 +6026,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6142,7 +6142,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6206,7 +6206,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6322,7 +6322,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6386,7 +6386,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6502,7 +6502,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6656,7 +6656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6753,7 +6753,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6889,7 +6889,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7003,7 +7003,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7097,7 +7097,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7183,7 +7183,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7640,7 +7640,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7747,7 +7747,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7993,7 +7993,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8148,7 +8148,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8232,7 +8232,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8303,7 +8303,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8459,7 +8459,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8558,7 +8558,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8685,7 +8685,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8749,7 +8749,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8850,7 +8850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8972,7 +8972,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9045,7 +9045,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9191,7 +9191,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9264,7 +9264,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9388,7 +9388,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9461,7 +9461,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9585,7 +9585,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9658,7 +9658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9782,7 +9782,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9855,7 +9855,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9979,7 +9979,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10052,7 +10052,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10176,7 +10176,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10241,7 +10241,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10353,7 +10353,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10426,7 +10426,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10499,7 +10499,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10572,7 +10572,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10645,7 +10645,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10718,7 +10718,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10791,7 +10791,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10878,7 +10878,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10965,7 +10965,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11143,7 +11143,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11228,7 +11228,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11327,7 +11327,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11491,7 +11491,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11669,7 +11669,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11752,7 +11752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11911,7 +11911,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11982,7 +11982,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12058,7 +12058,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12153,7 +12153,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12325,7 +12325,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12529,7 +12529,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12605,7 +12605,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12678,7 +12678,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12886,7 +12886,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12972,7 +12972,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13146,7 +13146,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13222,7 +13222,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13399,7 +13399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13573,7 +13573,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13660,7 +13660,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13772,7 +13772,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13928,7 +13928,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14000,7 +14000,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14090,7 +14090,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14162,7 +14162,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14258,7 +14258,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14412,7 +14412,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14544,7 +14544,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14650,7 +14650,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14799,7 +14799,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14953,7 +14953,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15055,7 +15055,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15183,7 +15183,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15256,7 +15256,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15334,7 +15334,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15471,7 +15471,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15544,7 +15544,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15626,7 +15626,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15690,7 +15690,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15786,7 +15786,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15850,7 +15850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16008,7 +16008,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16163,7 +16163,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16255,7 +16255,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16343,7 +16343,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16407,7 +16407,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16523,7 +16523,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16791,7 +16791,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16862,7 +16862,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16936,7 +16936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17014,7 +17014,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17108,7 +17108,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17290,7 +17290,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17556,7 +17556,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17619,7 +17619,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17771,7 +17771,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17834,7 +17834,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17944,7 +17944,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18052,7 +18052,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18093,7 +18093,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18403,7 +18403,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18476,7 +18476,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18594,7 +18594,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18667,7 +18667,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18745,7 +18745,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18893,7 +18893,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19023,7 +19023,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19123,7 +19123,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19289,7 +19289,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19362,7 +19362,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19426,7 +19426,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19544,7 +19544,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19608,7 +19608,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19768,7 +19768,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19852,7 +19852,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19997,7 +19997,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20067,7 +20067,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20216,7 +20216,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20257,7 +20257,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20378,7 +20378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20419,7 +20419,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20493,7 +20493,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20582,7 +20582,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20692,7 +20692,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20780,7 +20780,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20852,7 +20852,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20893,7 +20893,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20999,7 +20999,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21040,7 +21040,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21112,7 +21112,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21176,7 +21176,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21284,7 +21284,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21355,7 +21355,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21427,7 +21427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21533,7 +21533,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21732,7 +21732,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21809,7 +21809,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21991,7 +21991,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22064,7 +22064,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22226,7 +22226,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22352,7 +22352,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22468,7 +22468,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22626,7 +22626,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22706,7 +22706,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22747,7 +22747,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22873,7 +22873,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22951,7 +22951,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23069,7 +23069,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23209,7 +23209,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23343,7 +23343,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23489,7 +23489,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23625,7 +23625,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23763,7 +23763,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23859,7 +23859,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24010,7 +24010,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24087,7 +24087,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24128,7 +24128,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24192,7 +24192,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24255,7 +24255,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24333,7 +24333,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24396,7 +24396,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24460,7 +24460,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24531,7 +24531,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24658,7 +24658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24721,7 +24721,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24799,7 +24799,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24897,7 +24897,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24975,7 +24975,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25016,7 +25016,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25079,7 +25079,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25120,7 +25120,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25183,7 +25183,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25224,7 +25224,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25316,7 +25316,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25357,7 +25357,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25435,7 +25435,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25506,7 +25506,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25569,7 +25569,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25610,7 +25610,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25687,7 +25687,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25728,7 +25728,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25820,7 +25820,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25861,7 +25861,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25936,7 +25936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25977,7 +25977,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26040,7 +26040,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26081,7 +26081,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26199,7 +26199,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26240,7 +26240,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26408,7 +26408,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26500,7 +26500,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26576,7 +26576,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26765,7 +26765,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26840,7 +26840,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26932,7 +26932,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27003,7 +27003,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27080,7 +27080,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27155,7 +27155,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27219,7 +27219,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27309,7 +27309,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27387,7 +27387,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27629,7 +27629,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27860,7 +27860,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27923,7 +27923,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27989,7 +27989,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28055,7 +28055,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28137,7 +28137,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28240,7 +28240,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28371,7 +28371,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28450,7 +28450,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28558,7 +28558,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28716,7 +28716,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28757,7 +28757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28932,7 +28932,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28973,7 +28973,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29161,7 +29161,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29202,7 +29202,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29288,7 +29288,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29359,7 +29359,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29579,7 +29579,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29714,7 +29714,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29787,7 +29787,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29922,7 +29922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29995,7 +29995,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30143,7 +30143,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30208,7 +30208,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30342,7 +30342,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30415,7 +30415,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30573,7 +30573,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30649,7 +30649,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30845,7 +30845,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30918,7 +30918,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31054,7 +31054,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31127,7 +31127,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31215,7 +31215,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31285,7 +31285,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31383,7 +31383,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31463,7 +31463,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31583,7 +31583,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31717,7 +31717,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31815,7 +31815,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31913,7 +31913,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31993,7 +31993,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32127,7 +32127,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32219,7 +32219,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32299,7 +32299,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32379,7 +32379,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32459,7 +32459,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32539,7 +32539,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32619,7 +32619,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32699,7 +32699,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32779,7 +32779,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32859,7 +32859,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32939,7 +32939,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33019,7 +33019,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33099,7 +33099,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33179,7 +33179,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33259,7 +33259,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33339,7 +33339,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33419,7 +33419,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): From 998d98b4124f3ec4b83c3a045ceae9cbbb016de6 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 11 Feb 2025 08:45:34 -0500 Subject: [PATCH 33/51] manually added lint fixes and updated poetry toml and lock files. thank you kevin --- poetry.lock | 312 +++++++++++++- pyiceberg/table/__init__.py | 33 +- pyiceberg/table/upsert_util.py | 31 +- pyproject.toml | 761 +++++++++++++++++++++++++++++++++ tests/table/test_upsert.py | 87 ++-- 5 files changed, 1142 insertions(+), 82 deletions(-) diff --git a/poetry.lock b/poetry.lock index a39e69895f..21994726a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "adlfs" @@ -6,6 +6,8 @@ version = "2024.12.0" description = "Access Azure Datalake Gen1 with fsspec and dask" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "adlfs-2024.12.0-py3-none-any.whl", hash = "sha256:00aab061ddec0413b2039487e656b62e01ece8ef1ca0493f76034a596cf069e3"}, {file = "adlfs-2024.12.0.tar.gz", hash = "sha256:04582bf7461a57365766d01a295a0a88b2b8c42c4fea06e2d673f62675cac5c6"}, @@ -29,6 +31,8 @@ version = "2.19.0" description = "Async client for aws services using botocore and aiohttp" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\"" files = [ {file = "aiobotocore-2.19.0-py3-none-any.whl", hash = "sha256:12c2960a21472b8eb3452cde5eb31d541ca1464d236f4221556320fa8aed2ee8"}, {file = "aiobotocore-2.19.0.tar.gz", hash = "sha256:552d5756989621b5274f1b4a4840cd76ae83dd930d0b1839af6443743a893faf"}, @@ -57,6 +61,8 @@ version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, @@ -68,6 +74,8 @@ version = "3.11.11" description = "Async http client/server framework (asyncio)" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, @@ -166,6 +174,8 @@ version = "0.12.0" description = "itertools and builtins for AsyncIO and mixed iterables" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\"" files = [ {file = "aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796"}, {file = "aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b"}, @@ -184,6 +194,8 @@ version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -198,6 +210,7 @@ version = "0.7.16" description = "A light, configurable Sphinx theme" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, @@ -209,6 +222,7 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -220,6 +234,7 @@ version = "4.13.2" description = "ANTLR 4.13.2 runtime for Python 3" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8"}, {file = "antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916"}, @@ -231,6 +246,8 @@ version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "(extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\") and python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -242,10 +259,12 @@ version = "24.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] +markers = {main = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\""} [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] @@ -261,6 +280,7 @@ version = "1.94.0" description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates" optional = false python-versions = "!=4.0,<=4.0,>=3.8" +groups = ["dev"] files = [ {file = "aws_sam_translator-1.94.0-py3-none-any.whl", hash = "sha256:100e33eeffcfa81f7c45cadeb0ee29596ce829f6b4d2745140f04fa19a41f539"}, {file = "aws_sam_translator-1.94.0.tar.gz", hash = "sha256:8ec258d9f7ece72ef91c81f4edb45a2db064c16844b6afac90c575893beaa391"}, @@ -281,6 +301,7 @@ version = "2.14.0" description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "aws_xray_sdk-2.14.0-py2.py3-none-any.whl", hash = "sha256:cfbe6feea3d26613a2a869d14c9246a844285c97087ad8f296f901633554ad94"}, {file = "aws_xray_sdk-2.14.0.tar.gz", hash = "sha256:aab843c331af9ab9ba5cefb3a303832a19db186140894a523edafc024cc0493c"}, @@ -296,6 +317,8 @@ version = "1.32.0" description = "Microsoft Azure Core Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"}, {file = "azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5"}, @@ -315,6 +338,8 @@ version = "0.0.53" description = "Azure Data Lake Store Filesystem Client Library for Python" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure-datalake-store-0.0.53.tar.gz", hash = "sha256:05b6de62ee3f2a0a6e6941e6933b792b800c3e7f6ffce2fc324bc19875757393"}, {file = "azure_datalake_store-0.0.53-py2.py3-none-any.whl", hash = "sha256:a30c902a6e360aa47d7f69f086b426729784e71c536f330b691647a51dc42b2b"}, @@ -331,6 +356,8 @@ version = "1.19.0" description = "Microsoft Azure Identity Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure_identity-1.19.0-py3-none-any.whl", hash = "sha256:e3f6558c181692d7509f09de10cca527c7dce426776454fb97df512a46527e81"}, {file = "azure_identity-1.19.0.tar.gz", hash = "sha256:500144dc18197d7019b81501165d4fa92225f03778f17d7ca8a2a180129a9c83"}, @@ -349,6 +376,8 @@ version = "12.24.0" description = "Microsoft Azure Blob Storage Client Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "azure_storage_blob-12.24.0-py3-none-any.whl", hash = "sha256:4f0bb4592ea79a2d986063696514c781c9e62be240f09f6397986e01755bc071"}, {file = "azure_storage_blob-12.24.0.tar.gz", hash = "sha256:eaaaa1507c8c363d6e1d1342bd549938fdf1adec9b1ada8658c8f5bf3aea844e"}, @@ -369,6 +398,7 @@ version = "2.16.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, @@ -383,6 +413,8 @@ version = "1.2.0" description = "Backport of CPython tarfile module" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version <= \"3.11\"" files = [ {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, @@ -398,6 +430,7 @@ version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, @@ -409,10 +442,12 @@ version = "1.36.3" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "boto3-1.36.3-py3-none-any.whl", hash = "sha256:f9843a5d06f501d66ada06f5a5417f671823af2cf319e36ceefa1bafaaaaa953"}, {file = "boto3-1.36.3.tar.gz", hash = "sha256:53a5307f6a3526ee2f8590e3c45efa504a3ea4532c1bfe4926c0c19bf188d141"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\""} [package.dependencies] botocore = ">=1.36.3,<1.37.0" @@ -428,10 +463,12 @@ version = "1.36.3" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "botocore-1.36.3-py3-none-any.whl", hash = "sha256:536ab828e6f90dbb000e3702ac45fd76642113ae2db1b7b1373ad24104e89255"}, {file = "botocore-1.36.3.tar.gz", hash = "sha256:775b835e979da5c96548ed1a0b798101a145aec3cd46541d62e27dda5a94d7f8"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\" or extra == \"s3fs\""} [package.dependencies] jmespath = ">=0.7.1,<2.0.0" @@ -450,6 +487,7 @@ version = "1.2.2.post1" description = "A simple, correct Python build frontend" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, @@ -476,6 +514,7 @@ version = "5.5.1" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "cachetools-5.5.1-py3-none-any.whl", hash = "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"}, {file = "cachetools-5.5.1.tar.gz", hash = "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95"}, @@ -487,6 +526,7 @@ version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main", "dev", "docs"] files = [ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, @@ -498,6 +538,7 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -567,6 +608,7 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] +markers = {main = "(extra == \"zstandard\" or extra == \"adlfs\") and (platform_python_implementation == \"PyPy\" or extra == \"adlfs\")", dev = "platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" @@ -577,6 +619,7 @@ version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -588,6 +631,7 @@ version = "1.22.2" description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "cfn_lint-1.22.2-py3-none-any.whl", hash = "sha256:dd8f575f3cec51f07940fd2564a20a68377937ccac2d0c25b7f94713a7ccbad2"}, {file = "cfn_lint-1.22.2.tar.gz", hash = "sha256:83b3fb9ada7caf94bc75b4bf13999371f74aae39bad92280fd8c9d114ba4006c"}, @@ -614,6 +658,7 @@ version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" +groups = ["main", "dev", "docs"] files = [ {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, @@ -728,6 +773,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "docs"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -742,10 +788,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "docs"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\" or os_name == \"nt\""} [[package]] name = "coverage" @@ -753,6 +801,7 @@ version = "7.6.10" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "coverage-7.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78"}, {file = "coverage-7.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c"}, @@ -830,6 +879,8 @@ version = "2.9.1" description = "Thin Python bindings to de/compression algorithms in Rust" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"snappy\"" files = [ {file = "cramjam-2.9.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8e82464d1e00fbbb12958999b8471ba5e9f3d9711954505a0a7b378762332e6f"}, {file = "cramjam-2.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d2df8a6511cc08ef1fccd2e0c65e2ebc9f57574ec8376052a76851af5398810"}, @@ -932,6 +983,7 @@ version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -961,6 +1013,7 @@ files = [ {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] +markers = {main = "extra == \"adlfs\""} [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} @@ -981,6 +1034,7 @@ version = "3.0.11" description = "The Cython compiler for writing C extensions in the Python language." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["dev"] files = [ {file = "Cython-3.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa"}, {file = "Cython-3.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1"}, @@ -1050,12 +1104,34 @@ files = [ {file = "cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff"}, ] +[[package]] +name = "datafusion" +version = "44.0.0" +description = "Build and run queries against data" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "datafusion-44.0.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:4786f0a09c6b422ac18c6ea095650c14454be5af3df880b5c169688f610ab41a"}, + {file = "datafusion-44.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:bbad11b33c424a658edbc52db39dfe4ddc30339ffac7c43cdc1aa128c260ae76"}, + {file = "datafusion-44.0.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ca3b47fd34e1c96cf6d40a877245afd36f3ccf8b39dda1e5b6f811f273af781"}, + {file = "datafusion-44.0.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:22d2e3ecf5d0b1b75c8ad48c8d9af14a0ac4de1633e86d3b397614f68aa8123c"}, + {file = "datafusion-44.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:b36774dca54a0e1c88c8080b8c72cc2df5e95f4340a0cdbdd18a0473401551c5"}, + {file = "datafusion-44.0.0.tar.gz", hash = "sha256:5fc3740406ff531527aa8baa5954fe0bf1f02ea72170e172746b38cffc0d8d50"}, +] + +[package.dependencies] +pyarrow = ">=11.0.0" +typing-extensions = {version = "*", markers = "python_version < \"3.13\""} + [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -1067,6 +1143,7 @@ version = "0.23.0" description = "A command line utility to check for unused, missing and transitive dependencies in a Python project." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "deptry-0.23.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1f2a6817a37d76e8f6b667381b7caf6ea3e6d6c18b5be24d36c625f387c79852"}, {file = "deptry-0.23.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9601b64cc0aed42687fdd5c912d5f1e90d7f7333fb589b14e35bfdfebae866f3"}, @@ -1099,6 +1176,7 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -1110,6 +1188,7 @@ version = "7.1.0" description = "A Python library for the Docker Engine API." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, @@ -1132,6 +1211,7 @@ version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, @@ -1143,6 +1223,7 @@ version = "3.9.0" description = "Helpful functions for Python 🐍 🛠️" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "domdf_python_tools-3.9.0-py3-none-any.whl", hash = "sha256:4e1ef365cbc24627d6d1e90cf7d46d8ab8df967e1237f4a26885f6986c78872e"}, {file = "domdf_python_tools-3.9.0.tar.gz", hash = "sha256:1f8a96971178333a55e083e35610d7688cd7620ad2b99790164e1fc1a3614c18"}, @@ -1162,6 +1243,8 @@ version = "1.2.0" description = "DuckDB in-process database" optional = true python-versions = ">=3.7.0" +groups = ["main"] +markers = "extra == \"duckdb\"" files = [ {file = "duckdb-1.2.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:7452d3655063cc3062504b5b22f8968acb96ffcdc6c2b8207bbec9da1de1f884"}, {file = "duckdb-1.2.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:28d40a269212270e08b8541ea0922c3a893407897481cd484ad896bc2ba77a00"}, @@ -1222,6 +1305,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -1236,6 +1321,7 @@ version = "1.10.0" description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"}, {file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"}, @@ -1282,10 +1368,12 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] +markers = {main = "extra == \"ray\""} [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] @@ -1298,6 +1386,7 @@ version = "3.1.0" description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"}, {file = "flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac"}, @@ -1321,6 +1410,7 @@ version = "5.0.0" description = "A Flask extension adding a decorator for CORS support" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "Flask_Cors-5.0.0-py2.py3-none-any.whl", hash = "sha256:b9e307d082a9261c100d8fb0ba909eec6a228ed1b60a8315fd85f783d61910bc"}, {file = "flask_cors-5.0.0.tar.gz", hash = "sha256:5aadb4b950c4e93745034594d9f3ea6591f734bb3662e16e255ffbf5e89c88ef"}, @@ -1335,6 +1425,8 @@ version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1436,6 +1528,7 @@ version = "2024.12.0" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, @@ -1475,6 +1568,8 @@ version = "2024.12.0" description = "Convenient Filesystem interface over GCS" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "gcsfs-2024.12.0-py2.py3-none-any.whl", hash = "sha256:ec88e48f77e466723705458af85dda238e43aa69fac071efd98829d06e9f095a"}, {file = "gcsfs-2024.12.0.tar.gz", hash = "sha256:e672413922108300ebc1fe78b8f99f3c7c1b94e7e088f5a6dc88de6d5a93d156"}, @@ -1499,6 +1594,8 @@ version = "0.4.3" description = "Distributed Dataframes for Multimodal Data" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"daft\"" files = [ {file = "getdaft-0.4.3-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:94ad4a3b5dca650e5fe75b2db16b901fd7640e29af67f17fbcb213d90551a523"}, {file = "getdaft-0.4.3-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:e2c7ad0a47874f5af20168a437504e00c84fa8c2cffb9e32cb7d508484c6c0db"}, @@ -1533,6 +1630,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -1550,6 +1648,8 @@ version = "2.24.0" description = "Google API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_api_core-2.24.0-py3-none-any.whl", hash = "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9"}, {file = "google_api_core-2.24.0.tar.gz", hash = "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf"}, @@ -1577,6 +1677,8 @@ version = "2.37.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_auth-2.37.0-py2.py3-none-any.whl", hash = "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0"}, {file = "google_auth-2.37.0.tar.gz", hash = "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00"}, @@ -1601,6 +1703,8 @@ version = "1.2.1" description = "Google Authentication Library" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_auth_oauthlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f"}, {file = "google_auth_oauthlib-1.2.1.tar.gz", hash = "sha256:afd0cad092a2eaa53cd8e8298557d6de1034c6cb4a740500b5357b648af97263"}, @@ -1619,6 +1723,8 @@ version = "2.4.1" description = "Google Cloud API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, @@ -1637,6 +1743,8 @@ version = "2.19.0" description = "Google Cloud Storage API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_cloud_storage-2.19.0-py2.py3-none-any.whl", hash = "sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba"}, {file = "google_cloud_storage-2.19.0.tar.gz", hash = "sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2"}, @@ -1660,6 +1768,8 @@ version = "1.6.0" description = "A python wrapper of the C library 'Google CRC32C'" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa"}, {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9"}, @@ -1699,6 +1809,8 @@ version = "2.7.2" description = "Utilities for Google Media Downloads and Resumable Uploads" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "google_resumable_media-2.7.2-py2.py3-none-any.whl", hash = "sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa"}, {file = "google_resumable_media-2.7.2.tar.gz", hash = "sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0"}, @@ -1717,6 +1829,8 @@ version = "1.66.0" description = "Common protobufs used in Google APIs" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, @@ -1734,6 +1848,7 @@ version = "3.2.5" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." optional = false python-versions = "<4,>=3.6" +groups = ["dev"] files = [ {file = "graphql_core-3.2.5-py3-none-any.whl", hash = "sha256:2f150d5096448aa4f8ab26268567bbfeef823769893b39c1a2e1409590939c8a"}, {file = "graphql_core-3.2.5.tar.gz", hash = "sha256:e671b90ed653c808715645e3998b7ab67d382d55467b7e2978549111bbabf8d5"}, @@ -1748,6 +1863,8 @@ version = "3.1.1" description = "Lightweight in-process concurrent programming" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "(extra == \"sql-postgres\" or extra == \"sql-sqlite\") and python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" files = [ {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, @@ -1834,6 +1951,7 @@ version = "1.5.6" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "griffe-1.5.6-py3-none-any.whl", hash = "sha256:b2a3afe497c6c1f952e54a23095ecc09435016293e77af8478ed65df1022a394"}, {file = "griffe-1.5.6.tar.gz", hash = "sha256:181f6666d5aceb6cd6e2da5a2b646cfb431e47a0da1fda283845734b67e10944"}, @@ -1848,6 +1966,7 @@ version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, @@ -1862,6 +1981,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main", "dev", "docs"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1876,6 +1996,7 @@ version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -1887,10 +2008,12 @@ version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] +markers = {dev = "python_full_version < \"3.10.2\"", docs = "python_version < \"3.10\""} [package.dependencies] zipp = ">=3.20" @@ -1910,6 +2033,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -1921,6 +2045,8 @@ version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, @@ -1932,6 +2058,7 @@ version = "2.2.0" description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, @@ -1943,6 +2070,7 @@ version = "6.0.1" description = "Useful decorators and context managers" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"}, {file = "jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3"}, @@ -1961,6 +2089,7 @@ version = "10.2.3" description = "tools to supplement packaging Python releases" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "jaraco.packaging-10.2.3-py3-none-any.whl", hash = "sha256:ceb5806d2ac5731ba5b265d196e4cb848afa2a958f01d0bf3a1dfaa3969ed92c"}, {file = "jaraco_packaging-10.2.3.tar.gz", hash = "sha256:d726cc42faa62b2f70585cbe1176b4b469fe6d75f21b19034b688b4340917933"}, @@ -1982,6 +2111,7 @@ version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["dev", "docs"] files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -1999,10 +2129,12 @@ version = "1.0.1" description = "JSON Matching Expressions" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\" or extra == \"s3fs\""} [[package]] name = "joserfc" @@ -2010,6 +2142,7 @@ version = "1.0.1" description = "The ultimate Python library for JOSE RFCs, including JWS, JWE, JWK, JWA, JWT" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "joserfc-1.0.1-py3-none-any.whl", hash = "sha256:ae16f56b4091181cab5148a75610bb40d2452db17d09169598605250fa40f5dd"}, {file = "joserfc-1.0.1.tar.gz", hash = "sha256:c4507be82d681245f461710ffca1fa809fd288f49bc3ce4dba0b1c591700a686"}, @@ -2027,6 +2160,7 @@ version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["dev"] files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -2041,10 +2175,9 @@ version = "1.7.0" description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, - {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, - {file = "jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6"}, ] [package.dependencies] @@ -2056,6 +2189,7 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -2067,10 +2201,12 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, ] +markers = {main = "extra == \"ray\""} [package.dependencies] attrs = ">=22.2.0" @@ -2088,6 +2224,7 @@ version = "0.1.3" description = "JSONSchema Spec with object-oriented paths" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "jsonschema_spec-0.1.3-py3-none-any.whl", hash = "sha256:b3cde007ad65c2e631e2f8653cf187124a2c714d02d9fafbab68ad64bf5745d6"}, {file = "jsonschema_spec-0.1.3.tar.gz", hash = "sha256:8d8db7c255e524fab1016a952a9143e5b6e3c074f4ed25d1878f8e97806caec0"}, @@ -2105,10 +2242,12 @@ version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] +markers = {main = "extra == \"ray\""} [package.dependencies] referencing = ">=0.31.0" @@ -2119,6 +2258,7 @@ version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, @@ -2165,6 +2305,7 @@ version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -2183,6 +2324,7 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -2207,6 +2349,7 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -2277,6 +2420,7 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -2288,6 +2432,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -2299,6 +2444,7 @@ version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, @@ -2330,6 +2476,7 @@ version = "1.3.0" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "mkdocs_autorefs-1.3.0-py3-none-any.whl", hash = "sha256:d180f9778a04e78b7134e31418f238bba56f56d6a8af97873946ff661befffb3"}, {file = "mkdocs_autorefs-1.3.0.tar.gz", hash = "sha256:6867764c099ace9025d6ac24fd07b85a98335fbd30107ef01053697c8f46db61"}, @@ -2346,6 +2493,7 @@ version = "0.5.0" description = "MkDocs plugin to programmatically generate documentation pages during the build" optional = false python-versions = ">=3.7" +groups = ["docs"] files = [ {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, @@ -2360,6 +2508,7 @@ version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -2377,6 +2526,7 @@ version = "0.6.1" description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" optional = false python-versions = ">=3.7" +groups = ["docs"] files = [ {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, @@ -2391,6 +2541,7 @@ version = "9.6.3" description = "Documentation that simply works" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_material-9.6.3-py3-none-any.whl", hash = "sha256:1125622067e26940806701219303b27c0933e04533560725d97ec26fd16a39cf"}, {file = "mkdocs_material-9.6.3.tar.gz", hash = "sha256:c87f7d1c39ce6326da5e10e232aed51bae46252e646755900f4b0fc9192fa832"}, @@ -2420,6 +2571,7 @@ version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -2431,6 +2583,7 @@ version = "0.3.9" description = "MkDocs plugin to allow clickable sections that lead to an index page" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_section_index-0.3.9-py3-none-any.whl", hash = "sha256:5e5eb288e8d7984d36c11ead5533f376fdf23498f44e903929d72845b24dfe34"}, {file = "mkdocs_section_index-0.3.9.tar.gz", hash = "sha256:b66128d19108beceb08b226ee1ba0981840d14baf8a652b6c59e650f3f92e4f8"}, @@ -2445,6 +2598,7 @@ version = "0.28.0" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "mkdocstrings-0.28.0-py3-none-any.whl", hash = "sha256:84cf3dc910614781fe0fee46ce8006fde7df6cc7cca2e3f799895fb8a9170b39"}, {file = "mkdocstrings-0.28.0.tar.gz", hash = "sha256:df20afef1eafe36ba466ae20732509ecb74237653a585f5061937e54b553b4e0"}, @@ -2472,6 +2626,7 @@ version = "1.14.6" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "mkdocstrings_python-1.14.6-py3-none-any.whl", hash = "sha256:e0ca11b49ac0f23070afb566245f4ff80ea1700e03c9dbc143d70dbf1cae074e"}, {file = "mkdocstrings_python-1.14.6.tar.gz", hash = "sha256:3fb6589491614422d781dacca085c0c5a53a7063af37a2fea5864e24e378b03e"}, @@ -2489,6 +2644,7 @@ version = "5.1.0" description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." optional = false python-versions = ">=3.9" +groups = ["main"] files = [ {file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:eaf4ac5c6ee18ca9232238364d7f2a213278ae5ca97897cafaa123fcc7bb8bec"}, {file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48f9aa8ccb9ad1d577a16104834ac44ff640d8de8c0caed09a2300df7ce8460a"}, @@ -2587,6 +2743,7 @@ version = "5.0.28" description = "A library that allows you to easily mock out tests based on AWS infrastructure" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "moto-5.0.28-py3-none-any.whl", hash = "sha256:2dfbea1afe3b593e13192059a1a7fc4b3cf7fdf92e432070c22346efa45aa0f0"}, {file = "moto-5.0.28.tar.gz", hash = "sha256:4d3437693411ec943c13c77de5b0b520c4b0a9ac850fead4ba2a54709e086e8b"}, @@ -2646,6 +2803,7 @@ version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -2663,6 +2821,8 @@ version = "1.31.1" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "msal-1.31.1-py3-none-any.whl", hash = "sha256:29d9882de247e96db01386496d59f29035e5e841bcac892e6d7bf4390bf6bd17"}, {file = "msal-1.31.1.tar.gz", hash = "sha256:11b5e6a3f802ffd3a72107203e20c4eac6ef53401961b880af2835b723d80578"}, @@ -2682,6 +2842,8 @@ version = "1.2.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"}, {file = "msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef"}, @@ -2697,6 +2859,8 @@ version = "1.1.0" description = "MessagePack serializer" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"ray\"" files = [ {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, @@ -2770,6 +2934,8 @@ version = "6.1.0" description = "multidict implementation" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -2874,6 +3040,8 @@ version = "1.36.4" description = "Type annotations for boto3 Glue 1.36.4 service generated with mypy-boto3-builder 8.8.0" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"glue\"" files = [ {file = "mypy_boto3_glue-1.36.4-py3-none-any.whl", hash = "sha256:ae420af4301fbe84a6e38b244901cfa98c9162c646fb621d0f9f39a918e34cef"}, {file = "mypy_boto3_glue-1.36.4.tar.gz", hash = "sha256:6f8630ccde28bcd346ca0fc60c33a394aa3a6a7c878dd0eb22e255cb464ed5f4"}, @@ -2888,6 +3056,7 @@ version = "8.4.0" description = "Simple yet flexible natural sorting in Python." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"}, {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"}, @@ -2903,6 +3072,7 @@ version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, @@ -2921,6 +3091,7 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -2932,6 +3103,8 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -2977,6 +3150,8 @@ version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -2993,6 +3168,7 @@ version = "0.4.3" description = "OpenAPI schema validation for Python" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "openapi_schema_validator-0.4.3-py3-none-any.whl", hash = "sha256:f1eff2a7936546a3ce62b88a17d09de93c9bd229cbc43cb696c988a61a382548"}, {file = "openapi_schema_validator-0.4.3.tar.gz", hash = "sha256:6940dba9f4906c97078fea6fd9d5a3a3384207db368c4e32f6af6abd7c5c560b"}, @@ -3008,6 +3184,7 @@ version = "0.5.5" description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3 spec validator" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "openapi_spec_validator-0.5.5-py3-none-any.whl", hash = "sha256:93ba247f585e1447214b4207728a7cce3726d148238217be69e6b8725c118fbe"}, {file = "openapi_spec_validator-0.5.5.tar.gz", hash = "sha256:3010df5237748e25d7fac2b2aaf13457c1afd02735b2bd6f008a10079c8f443a"}, @@ -3028,10 +3205,12 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] +markers = {main = "extra == \"ray\""} [[package]] name = "paginate" @@ -3039,6 +3218,7 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -3054,6 +3234,8 @@ version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -3102,8 +3284,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3140,6 +3322,7 @@ version = "0.4.3" description = "Object-oriented paths" optional = false python-versions = ">=3.7.0,<4.0.0" +groups = ["dev"] files = [ {file = "pathable-0.4.3-py3-none-any.whl", hash = "sha256:cdd7b1f9d7d5c8b8d3315dbf5a86b2596053ae845f056f57d97c0eefff84da14"}, {file = "pathable-0.4.3.tar.gz", hash = "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab"}, @@ -3151,6 +3334,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -3162,6 +3346,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -3178,6 +3363,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -3193,6 +3379,7 @@ version = "3.11" description = "Python Lex & Yacc" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, @@ -3204,6 +3391,8 @@ version = "2.10.1" description = "Wraps the portalocker recipe for easy usage" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, @@ -3223,6 +3412,7 @@ version = "4.1.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "pre_commit-4.1.0-py2.py3-none-any.whl", hash = "sha256:d29e7cb346295bcc1cc75fc3e92e343495e3ea0196c9ec6ba53f49f10ab6ae7b"}, {file = "pre_commit-4.1.0.tar.gz", hash = "sha256:ae3f018575a588e30dfddfab9a05448bfbd6b73d78709617b5a2b853549716d4"}, @@ -3241,6 +3431,8 @@ version = "0.2.1" description = "Accelerated property cache" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -3332,6 +3524,8 @@ version = "1.25.0" description = "Beautiful, Pythonic protocol buffers." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, @@ -3349,6 +3543,8 @@ version = "5.29.2" description = "" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "protobuf-5.29.2-cp310-abi3-win32.whl", hash = "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851"}, {file = "protobuf-5.29.2-cp310-abi3-win_amd64.whl", hash = "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9"}, @@ -3369,6 +3565,8 @@ version = "2.9.10" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"sql-postgres\"" files = [ {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, @@ -3417,7 +3615,6 @@ files = [ {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bb89f0a835bcfc1d42ccd5f41f04870c1b936d8507c6df12b7737febc40f0909"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f0c2d907a1e102526dd2986df638343388b94c33860ff3bbe1384130828714b1"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567"}, - {file = "psycopg2_binary-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:eb09aa7f9cecb45027683bb55aebaaf45a0df8bf6de68801a6afdc7947bb09d4"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b73d6d7f0ccdad7bc43e6d34273f70d587ef62f824d7261c4ae9b8b1b6af90e8"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce5ab4bf46a211a8e924d307c1b1fcda82368586a19d0a24f8ae166f5c784864"}, @@ -3446,6 +3643,7 @@ version = "0.6.1" description = "Pure Python PartiQL Parser" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "py_partiql_parser-0.6.1-py2.py3-none-any.whl", hash = "sha256:ff6a48067bff23c37e9044021bf1d949c83e195490c17e020715e927fe5b2456"}, {file = "py_partiql_parser-0.6.1.tar.gz", hash = "sha256:8583ff2a0e15560ef3bc3df109a7714d17f87d81d33e8c38b7fed4e58a63215d"}, @@ -3460,6 +3658,7 @@ version = "0.10.9.7" description = "Enables Python programs to dynamically access arbitrary Java objects" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "py4j-0.10.9.7-py2.py3-none-any.whl", hash = "sha256:85defdfd2b2376eb3abf5ca6474b51ab7e0de341c75a02f46dc9b5976f5a5c1b"}, {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, @@ -3469,8 +3668,9 @@ files = [ name = "pyarrow" version = "19.0.0" description = "Python library for Apache Arrow" -optional = true +optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"}, {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"}, @@ -3515,6 +3715,7 @@ files = [ {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"}, {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"}, ] +markers = {main = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\""} [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] @@ -3525,6 +3726,8 @@ version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -3536,6 +3739,8 @@ version = "0.4.1" description = "A collection of ASN.1-based protocols modules" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, @@ -3550,10 +3755,12 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] +markers = {main = "(extra == \"zstandard\" or extra == \"adlfs\") and (platform_python_implementation == \"PyPy\" or extra == \"adlfs\")", dev = "platform_python_implementation != \"PyPy\""} [[package]] name = "pydantic" @@ -3561,6 +3768,7 @@ version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, @@ -3581,6 +3789,7 @@ version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -3693,6 +3902,7 @@ version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -3707,6 +3917,8 @@ version = "0.4.0" description = "" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"pyiceberg-core\"" files = [ {file = "pyiceberg_core-0.4.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5aec569271c96e18428d542f9b7007117a7232c06017f95cb239d42e952ad3b4"}, {file = "pyiceberg_core-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e74773e58efa4df83aba6f6265cdd41e446fa66fa4e343ca86395fed9f209ae"}, @@ -3722,6 +3934,8 @@ version = "2.10.1" description = "JSON Web Token implementation in Python" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"adlfs\"" files = [ {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, @@ -3742,6 +3956,7 @@ version = "10.13" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pymdown_extensions-10.13-py3-none-any.whl", hash = "sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428"}, {file = "pymdown_extensions-10.13.tar.gz", hash = "sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd"}, @@ -3760,6 +3975,7 @@ version = "3.2.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -3774,6 +3990,7 @@ version = "1.2.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, @@ -3785,6 +4002,7 @@ version = "3.5.3" description = "Apache Spark Python API" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pyspark-3.5.3.tar.gz", hash = "sha256:68b7cc0c0c570a7d8644f49f40d2da8709b01d30c9126cc8cf93b4f84f3d9747"}, ] @@ -3805,6 +4023,7 @@ version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -3827,6 +4046,7 @@ version = "2.13.0" description = "check the README when running tests" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest_checkdocs-2.13.0-py3-none-any.whl", hash = "sha256:5df5bbd7e9753aa51a5f6954a301a4066bd4a04eb7e0c712c5d5d7ede1cbe153"}, {file = "pytest_checkdocs-2.13.0.tar.gz", hash = "sha256:b0e67169c543986142e15afbc17c772da87fcdb0922c7b1e4f6c60f8769f11f9"}, @@ -3846,6 +4066,7 @@ version = "0.6.3" description = "It helps to use fixtures in pytest.mark.parametrize" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "pytest-lazy-fixture-0.6.3.tar.gz", hash = "sha256:0e7d0c7f74ba33e6e80905e9bfd81f9d15ef9a790de97993e34213deb5ad10ac"}, {file = "pytest_lazy_fixture-0.6.3-py3-none-any.whl", hash = "sha256:e0b379f38299ff27a653f03eaa69b08a6fd4484e46fd1c9907d984b9f9daeda6"}, @@ -3860,6 +4081,7 @@ version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -3877,6 +4099,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev", "docs"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3891,6 +4114,8 @@ version = "0.7.3" description = "Python library for the snappy compression library from Google" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"snappy\"" files = [ {file = "python_snappy-0.7.3-py3-none-any.whl", hash = "sha256:074c0636cfcd97e7251330f428064050ac81a52c62ed884fc2ddebbb60ed7f50"}, {file = "python_snappy-0.7.3.tar.gz", hash = "sha256:40216c1badfb2d38ac781ecb162a1d0ec40f8ee9747e610bcfefdfa79486cee3"}, @@ -3905,6 +4130,8 @@ version = "2024.2" description = "World timezone definitions, modern and historical" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, @@ -3916,6 +4143,7 @@ version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, @@ -3936,6 +4164,7 @@ files = [ {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] +markers = {main = "extra == \"adlfs\" and platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} [[package]] name = "pyyaml" @@ -3943,6 +4172,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -3998,6 +4228,7 @@ files = [ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +markers = {main = "extra == \"ray\""} [[package]] name = "pyyaml-env-tag" @@ -4005,6 +4236,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -4019,6 +4251,8 @@ version = "2.40.0" description = "Ray provides a simple, universal API for building distributed applications." optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"ray\"" files = [ {file = "ray-2.40.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:064af8bc52cc988c82470b8e76e5df417737fa7c1d87f597a892c69eb4ec3caa"}, {file = "ray-2.40.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45beb4019cd20b6cb10572d8012c771bccd623f544a669da6797ccf993c4bb33"}, @@ -4076,10 +4310,12 @@ version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] +markers = {main = "extra == \"ray\""} [package.dependencies] attrs = ">=22.2.0" @@ -4091,6 +4327,7 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -4194,6 +4431,7 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -4215,6 +4453,7 @@ version = "1.12.1" description = "Mock out responses from the requests package" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, @@ -4232,6 +4471,8 @@ version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = true python-versions = ">=3.4" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -4250,6 +4491,7 @@ version = "0.11.0" description = "This is a small Python module for parsing Pip requirement files." optional = false python-versions = "<4.0,>=3.8" +groups = ["dev"] files = [ {file = "requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684"}, {file = "requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920"}, @@ -4265,6 +4507,7 @@ version = "0.25.3" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "responses-0.25.3-py3-none-any.whl", hash = "sha256:521efcbc82081ab8daa588e08f7e8a64ce79b91c39f6e62199b19159bea7dbcb"}, {file = "responses-0.25.3.tar.gz", hash = "sha256:617b9247abd9ae28313d57a75880422d55ec63c29d33d629697590a034358dba"}, @@ -4284,6 +4527,7 @@ version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -4298,6 +4542,7 @@ version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -4317,6 +4562,7 @@ version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" +groups = ["main", "dev"] files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, @@ -4422,6 +4668,7 @@ files = [ {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] +markers = {main = "extra == \"ray\""} [[package]] name = "rsa" @@ -4429,6 +4676,8 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = true python-versions = ">=3.6,<4" +groups = ["main"] +markers = "extra == \"gcsfs\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -4443,6 +4692,8 @@ version = "2024.12.0" description = "Convenient Filesystem interface over S3" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\"" files = [ {file = "s3fs-2024.12.0-py3-none-any.whl", hash = "sha256:d8665549f9d1de083151582437a2f10d5f3b3227c1f8e67a2b0b730db813e005"}, {file = "s3fs-2024.12.0.tar.gz", hash = "sha256:1b0f3a8f5946cca5ba29871d6792ab1e4528ed762327d8aefafc81b73b99fd56"}, @@ -4463,10 +4714,12 @@ version = "0.11.1" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "s3transfer-0.11.1-py3-none-any.whl", hash = "sha256:8fa0aa48177be1f3425176dfe1ab85dcd3d962df603c3dbfc585e6bf857ef0ff"}, {file = "s3transfer-0.11.1.tar.gz", hash = "sha256:3f25c900a367c8b7f7d8f9c34edc87e300bde424f779dc9f0a8ae4f9df9264f6"}, ] +markers = {main = "extra == \"glue\" or extra == \"dynamodb\" or extra == \"rest-sigv4\""} [package.dependencies] botocore = ">=1.36.0,<2.0a.0" @@ -4480,6 +4733,7 @@ version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, @@ -4500,6 +4754,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev", "docs"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -4511,6 +4766,7 @@ version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, @@ -4522,6 +4778,7 @@ version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, @@ -4533,6 +4790,7 @@ version = "7.4.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, @@ -4569,6 +4827,7 @@ version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, @@ -4585,6 +4844,7 @@ version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, @@ -4601,6 +4861,7 @@ version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, @@ -4617,6 +4878,7 @@ version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -4631,6 +4893,7 @@ version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, @@ -4647,6 +4910,7 @@ version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, @@ -4663,6 +4927,8 @@ version = "2.0.38" description = "Database Abstraction Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"sql-postgres\" or extra == \"sql-sqlite\"" files = [ {file = "SQLAlchemy-2.0.38-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5e1d9e429028ce04f187a9f522818386c8b076723cdbe9345708384f49ebcec6"}, {file = "SQLAlchemy-2.0.38-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b87a90f14c68c925817423b0424381f0e16d80fc9a1a1046ef202ab25b19a444"}, @@ -4758,6 +5024,7 @@ version = "1.7.3" description = "Strict, typed YAML parser" optional = false python-versions = ">=3.7.0" +groups = ["main"] files = [ {file = "strictyaml-1.7.3-py3-none-any.whl", hash = "sha256:fb5c8a4edb43bebb765959e420f9b3978d7f1af88c80606c03fb420888f5d1c7"}, {file = "strictyaml-1.7.3.tar.gz", hash = "sha256:22f854a5fcab42b5ddba8030a0e4be51ca89af0267961c8d6cfa86395586c407"}, @@ -4772,6 +5039,7 @@ version = "1.13.3" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, @@ -4789,6 +5057,7 @@ version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, @@ -4804,6 +5073,8 @@ version = "0.21.0" description = "Python bindings for the Apache Thrift RPC system" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"hive\"" files = [ {file = "thrift-0.21.0.tar.gz", hash = "sha256:5e6f7c50f936ebfa23e924229afc95eb219f8c8e5a83202dd4a391244803e402"}, ] @@ -4822,6 +5093,8 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version <= \"3.11.0a6\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -4863,6 +5136,8 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"daft\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -4884,6 +5159,7 @@ version = "75.6.0.20241126" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b"}, {file = "types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0"}, @@ -4895,6 +5171,7 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -4906,6 +5183,8 @@ version = "2024.2" description = "Provider of IANA time zone data" optional = true python-versions = ">=2" +groups = ["main"] +markers = "extra == \"pandas\" or extra == \"ray\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, @@ -4917,6 +5196,8 @@ version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main", "dev", "docs"] +markers = "python_version < \"3.10\"" files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, @@ -4933,6 +5214,8 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] +markers = "python_version >= \"3.10\" and python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, @@ -4950,6 +5233,7 @@ version = "20.28.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, @@ -4970,6 +5254,7 @@ version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" +groups = ["docs"] files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, @@ -5012,6 +5297,7 @@ version = "3.1.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" +groups = ["dev"] files = [ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, @@ -5029,6 +5315,7 @@ version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -5096,6 +5383,7 @@ files = [ {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] +markers = {main = "extra == \"s3fs\""} [[package]] name = "xmltodict" @@ -5103,6 +5391,7 @@ version = "0.14.2" description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, @@ -5114,6 +5403,8 @@ version = "1.18.3" description = "Yet another URL library" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"s3fs\" or extra == \"adlfs\" or extra == \"gcsfs\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -5210,10 +5501,12 @@ version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] +markers = {dev = "python_full_version < \"3.10.2\"", docs = "python_version < \"3.10\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] @@ -5229,6 +5522,8 @@ version = "0.23.0" description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"zstandard\"" files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -5355,7 +5650,6 @@ sql-sqlite = ["sqlalchemy"] zstandard = ["zstandard"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = "^3.9, !=3.9.7" - -content-hash = "b098e8eb88d536e263d14ce2805abfc55519b2cfb1c620df60d1936cbfb04226" +content-hash = "c5aa295e70831e6e76b69ddc3ac481b14c5d7fe363fac6565bf8b6f6ded0614d" \ No newline at end of file diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index e53381c0eb..ef9be725af 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -149,12 +149,15 @@ ALWAYS_TRUE = AlwaysTrue() DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE = "downcast-ns-timestamp-to-us-on-write" + @dataclass() class UpsertResult: """Summary the upsert operation""" + rows_updated: int = 0 rows_inserted: int = 0 + class TableProperties: PARQUET_ROW_GROUP_SIZE_BYTES = "write.parquet.row-group-size-bytes" PARQUET_ROW_GROUP_SIZE_BYTES_DEFAULT = 128 * 1024 * 1024 # 128 MB @@ -1091,12 +1094,10 @@ def name_mapping(self) -> Optional[NameMapping]: """Return the table's field-id NameMapping.""" return self.metadata.name_mapping() - def upsert(self, df: pa.Table, join_cols: list - , when_matched_update_all: bool = True - , when_not_matched_insert_all: bool = True - ) -> UpsertResult: - """ - Shorthand API for performing an upsert to an iceberg table. + def upsert( + self, df: pa.Table, join_cols: list, when_matched_update_all: bool = True, when_not_matched_insert_all: bool = True + ) -> UpsertResult: + """Shorthand API for performing an upsert to an iceberg table. Args: self: the target Iceberg table to execute the upsert on @@ -1124,18 +1125,19 @@ def upsert(self, df: pa.Table, join_cols: list (Function effectively does nothing) - Returns: a UpsertResult class (contains details of rows updated and inserted) + Returns: + An UpsertResult class (contains details of rows updated and inserted) """ from pyiceberg.table import upsert_util if not when_matched_update_all and not when_not_matched_insert_all: - raise ValueError('no upsert options selected...exiting') + raise ValueError("no upsert options selected...exiting") if upsert_util.has_duplicate_rows(df, join_cols): - raise ValueError('Duplicate rows found in source dataset based on the key columns. No upsert executed') + raise ValueError("Duplicate rows found in source dataset based on the key columns. No upsert executed") - #get list of rows that exist so we don't have to load the entire target table + # get list of rows that exist so we don't have to load the entire target table matched_predicate = upsert_util.create_match_filter(df, join_cols) matched_iceberg_table = self.scan(row_filter=matched_predicate).to_arrow() @@ -1143,23 +1145,20 @@ def upsert(self, df: pa.Table, join_cols: list insert_row_cnt = 0 with self.transaction() as tx: - if when_matched_update_all: - - #function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed - #we don't want to do just a blanket overwrite for matched rows if the actual non-key column data hasn't changed - #this extra step avoids unnecessary IO and writes + # function get_rows_to_update is doing a check on non-key columns to see if any of the values have actually changed + # we don't want to do just a blanket overwrite for matched rows if the actual non-key column data hasn't changed + # this extra step avoids unnecessary IO and writes rows_to_update = upsert_util.get_rows_to_update(df, matched_iceberg_table, join_cols) update_row_cnt = len(rows_to_update) - #build the match predicate filter + # build the match predicate filter overwrite_mask_predicate = upsert_util.create_match_filter(rows_to_update, join_cols) tx.overwrite(rows_to_update, overwrite_filter=overwrite_mask_predicate) if when_not_matched_insert_all: - rows_to_insert = upsert_util.get_rows_to_insert(df, matched_iceberg_table, join_cols) insert_row_cnt = len(rows_to_insert) diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index e6646e5ece..d01b977656 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -28,37 +28,25 @@ def create_match_filter(df: pyarrow_table, join_cols: list) -> BooleanExpression: - unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) if len(join_cols) == 1: return In(join_cols[0], unique_keys[0].to_pylist()) else: - return Or(*[ - And(*[ - EqualTo(col, row[col]) - for col in join_cols - ]) - for row in unique_keys.to_pylist() - ]) + return Or(*[And(*[EqualTo(col, row[col]) for col in join_cols]) for row in unique_keys.to_pylist()]) def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: """ This function checks if there are duplicate rows in in a pyarrow table based on the join columns. """ - return len( - df.select(join_cols) - .group_by(join_cols) - .aggregate([([], "count_all")]) - .filter(pc.field("count_all") > 1) - ) > 0 + return len(df.select(join_cols).group_by(join_cols).aggregate([([], "count_all")]).filter(pc.field("count_all") > 1)) > 0 -def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: +def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list[str]) -> pa.Table: """ - This function takes the source_table, trims it down to rows that match in both source and target. - It then does a scan for the non-key columns to see if any are mis-aligned before returning the final row set to update + This function takes the source_table, trims it down to rows that match in both source and target. + It then does a scan for the non-key columns to see if any are mis-aligned before returning the final row set to update """ all_columns = set(source_table.column_names) @@ -82,7 +70,6 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols rows_to_update = [] for index in range(matching_source_rows.num_rows): - source_row = matching_source_rows.slice(index, 1) target_filter = None @@ -120,12 +107,10 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols return rows_to_update_table -def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols: list) -> pa.Table: - - source_filter_expr = None +def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols: list[str]) -> pa.Table: + source_filter_expr = pc.scalar(True) for col in join_cols: - target_values = target_table.column(col).to_pylist() expr = pc.field(col).isin(target_values) @@ -143,4 +128,4 @@ def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols non_matching_rows = source_table.filter(non_matching_expr).select(common_columns) - return non_matching_rows + return non_matching_rows \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index ee3766d50e..468ede4c69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -96,6 +96,7 @@ pyspark = "3.5.3" cython = "3.0.11" deptry = ">=0.14,<0.24" docutils = "!=0.21.post1" # https://github.com/python-poetry/poetry/issues/9248#issuecomment-2026240520 +datafusion = "^44.0.0" [tool.poetry.group.docs.dependencies] # for mkdocs @@ -1183,6 +1184,766 @@ ignore_missing_imports = true module = "tenacity.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + [tool.poetry.scripts] pyiceberg = "pyiceberg.cli.console:run" diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index 798019f69c..83362ae2a9 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -21,24 +21,28 @@ _TEST_NAMESPACE = "test_ns" + def show_iceberg_table(table, ctx: SessionContext): import pyarrow.dataset as ds + table_name = "target" if ctx.table_exist(table_name): ctx.deregister_table(table_name) ctx.register_dataset(table_name, ds.dataset(table.scan().to_arrow())) ctx.sql(f"SELECT * FROM {table_name} limit 5").show() + def show_df(df, ctx: SessionContext): import pyarrow.dataset as ds + ctx.register_dataset("df", ds.dataset(df)) ctx.sql("select * from df limit 10").show() def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_dup: bool, ctx: SessionContext): - additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" - dup_row = f""" + dup_row = ( + f""" UNION ALL ( SELECT t.order_id {additional_columns} @@ -46,8 +50,10 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du from t limit 1 ) - """ if add_dup else "" - + """ + if add_dup + else "" + ) sql = f""" with t as (SELECT unnest(range({start_row},{end_row+1})) as order_id) @@ -61,8 +67,10 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du return df -def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: InMemoryCatalog, namespace: str): +def gen_target_iceberg_table( + start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: InMemoryCatalog, namespace: str +): additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" df = ctx.sql(f""" @@ -78,44 +86,60 @@ def gen_target_iceberg_table(start_row: int, end_row: int, composite_key: bool, return table + def assert_upsert_result(res, expected_updated, expected_inserted): assert res.rows_updated == expected_updated, f"rows updated should be {expected_updated}, but got {res.rows_updated}" assert res.rows_inserted == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res.rows_inserted}" + @pytest.fixture(scope="session") def catalog_conn(): - catalog = InMemoryCatalog('test') + catalog = InMemoryCatalog("test") catalog.create_namespace(namespace=_TEST_NAMESPACE) yield catalog @pytest.mark.parametrize( "join_cols, src_start_row, src_end_row, target_start_row, target_end_row, when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted", [ - (["order_id"], 1, 2, 2, 3, True, True, 1, 1), # single row - (["order_id"], 5001, 15000, 1, 10000, True, True, 5000, 5000), #10k rows - (["order_id"], 501, 1500, 1, 1000, True, False, 500, 0), # update only - (["order_id"], 501, 1500, 1, 1000, False, True, 0, 500), # insert only - ] + (["order_id"], 1, 2, 2, 3, True, True, 1, 1), # single row + (["order_id"], 5001, 15000, 1, 10000, True, True, 5000, 5000), # 10k rows + (["order_id"], 501, 1500, 1, 1000, True, False, 500, 0), # update only + (["order_id"], 501, 1500, 1, 1000, False, True, 0, 500), # insert only + ], ) -def test_merge_rows(catalog_conn, join_cols, src_start_row, src_end_row, target_start_row, target_end_row - , when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted): - +def test_merge_rows( + catalog_conn, + join_cols, + src_start_row, + src_end_row, + target_start_row, + target_end_row, + when_matched_update_all, + when_not_matched_insert_all, + expected_updated, + expected_inserted, +): ctx = SessionContext() catalog = catalog_conn source_df = gen_source_dataset(src_start_row, src_end_row, False, False, ctx) ice_table = gen_target_iceberg_table(target_start_row, target_end_row, False, ctx, catalog, _TEST_NAMESPACE) - res = ice_table.upsert(df=source_df, join_cols=join_cols, when_matched_update_all=when_matched_update_all, when_not_matched_insert_all=when_not_matched_insert_all) + res = ice_table.upsert( + df=source_df, + join_cols=join_cols, + when_matched_update_all=when_matched_update_all, + when_not_matched_insert_all=when_not_matched_insert_all, + ) assert_upsert_result(res, expected_updated, expected_inserted) catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_skip_upd_row(catalog_conn): +def test_merge_scenario_skip_upd_row(catalog_conn): """ - tests a single insert and update; skips a row that does not need to be updated + tests a single insert and update; skips a row that does not need to be updated """ ctx = SessionContext() @@ -134,7 +158,7 @@ def test_merge_scenario_skip_upd_row(catalog_conn): source_df = ctx.sql(""" select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type union all - select 2 as order_id, date '2021-01-01' as order_date, 'B' as order_type + select 2 as order_id, date '2021-01-01' as order_date, 'B' as order_type union all select 3 as order_id, date '2021-01-01' as order_date, 'A' as order_type """).to_arrow_table() @@ -148,10 +172,10 @@ def test_merge_scenario_skip_upd_row(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_date_as_key(catalog_conn): +def test_merge_scenario_date_as_key(catalog_conn): """ - tests a single insert and update; primary key is a date column + tests a single insert and update; primary key is a date column """ ctx = SessionContext() @@ -170,7 +194,7 @@ def test_merge_scenario_date_as_key(catalog_conn): source_df = ctx.sql(""" select date '2021-01-01' as order_date, 'A' as order_type union all - select date '2021-01-02' as order_date, 'B' as order_type + select date '2021-01-02' as order_date, 'B' as order_type union all select date '2021-01-03' as order_date, 'A' as order_type """).to_arrow_table() @@ -184,10 +208,10 @@ def test_merge_scenario_date_as_key(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_string_as_key(catalog_conn): +def test_merge_scenario_string_as_key(catalog_conn): """ - tests a single insert and update; primary key is a string column + tests a single insert and update; primary key is a string column """ ctx = SessionContext() @@ -206,7 +230,7 @@ def test_merge_scenario_string_as_key(catalog_conn): source_df = ctx.sql(""" select 'abc' as order_id, 'A' as order_type union all - select 'def' as order_id, 'B' as order_type + select 'def' as order_id, 'B' as order_type union all select 'ghi' as order_id, 'A' as order_type """).to_arrow_table() @@ -221,9 +245,8 @@ def test_merge_scenario_string_as_key(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") def test_merge_scenario_composite_key(catalog_conn): - """ - tests merging 200 rows with a composite key + tests merging 200 rows with a composite key """ ctx = SessionContext() @@ -241,10 +264,10 @@ def test_merge_scenario_composite_key(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_source_dups(catalog_conn): +def test_merge_source_dups(catalog_conn): """ - tests duplicate rows in source + tests duplicate rows in source """ ctx = SessionContext() @@ -259,9 +282,8 @@ def test_merge_source_dups(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") def test_key_cols_misaligned(catalog_conn): - """ - tests join columns missing from one of the tables + tests join columns missing from one of the tables """ ctx = SessionContext() @@ -276,7 +298,6 @@ def test_key_cols_misaligned(catalog_conn): df_src = ctx.sql("select 1 as item_id, date '2021-05-01' as order_date, 'B' as order_type").to_arrow_table() with pytest.raises(Exception, match=r"""Field ".*" does not exist in schema"""): - table.upsert(df=df_src, join_cols=['order_id']) - - catalog.drop_table(f"{_TEST_NAMESPACE}.target") + table.upsert(df=df_src, join_cols=["order_id"]) + catalog.drop_table(f"{_TEST_NAMESPACE}.target") \ No newline at end of file From 513c839242ae46106632310560eb5415edab6ba9 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 11 Feb 2025 12:52:39 -0500 Subject: [PATCH 34/51] added formatting fices --- .gitignore | 3 + node_modules/.bin/glob | 1 + node_modules/.bin/js-yaml | 1 + node_modules/.bin/katex | 1 + node_modules/.bin/markdown-it | 1 + node_modules/.bin/markdownlint | 1 + node_modules/.bin/node-which | 1 + node_modules/.bin/run-con | 1 + node_modules/.package-lock.json | 1415 +++++++ node_modules/@isaacs/cliui/LICENSE.txt | 14 + node_modules/@isaacs/cliui/README.md | 143 + node_modules/@isaacs/cliui/index.mjs | 14 + node_modules/@isaacs/cliui/package.json | 86 + node_modules/@pkgjs/parseargs/.editorconfig | 14 + node_modules/@pkgjs/parseargs/CHANGELOG.md | 147 + node_modules/@pkgjs/parseargs/LICENSE | 201 + node_modules/@pkgjs/parseargs/README.md | 413 ++ .../parseargs/examples/is-default-value.js | 25 + .../parseargs/examples/limit-long-syntax.js | 35 + .../@pkgjs/parseargs/examples/negate.js | 43 + .../parseargs/examples/no-repeated-options.js | 31 + .../parseargs/examples/ordered-options.mjs | 41 + .../parseargs/examples/simple-hard-coded.js | 26 + node_modules/@pkgjs/parseargs/index.js | 396 ++ .../@pkgjs/parseargs/internal/errors.js | 47 + .../@pkgjs/parseargs/internal/primordials.js | 393 ++ .../@pkgjs/parseargs/internal/util.js | 14 + .../@pkgjs/parseargs/internal/validators.js | 89 + node_modules/@pkgjs/parseargs/package.json | 36 + node_modules/@pkgjs/parseargs/utils.js | 198 + node_modules/@types/debug/LICENSE | 21 + node_modules/@types/debug/README.md | 69 + node_modules/@types/debug/index.d.ts | 50 + node_modules/@types/debug/package.json | 57 + node_modules/@types/katex/LICENSE | 21 + node_modules/@types/katex/README.md | 15 + .../@types/katex/contrib/auto-render.d.ts | 67 + node_modules/@types/katex/index.d.ts | 151 + node_modules/@types/katex/package.json | 50 + node_modules/@types/ms/LICENSE | 21 + node_modules/@types/ms/README.md | 82 + node_modules/@types/ms/index.d.ts | 63 + node_modules/@types/ms/package.json | 26 + node_modules/@types/unist/LICENSE | 21 + node_modules/@types/unist/README.md | 122 + node_modules/@types/unist/index.d.ts | 103 + node_modules/@types/unist/package.json | 55 + node_modules/ansi-regex/index.d.ts | 33 + node_modules/ansi-regex/index.js | 10 + node_modules/ansi-regex/license | 9 + node_modules/ansi-regex/package.json | 61 + node_modules/ansi-regex/readme.md | 60 + node_modules/ansi-styles/index.d.ts | 236 ++ node_modules/ansi-styles/index.js | 223 + node_modules/ansi-styles/license | 9 + node_modules/ansi-styles/package.json | 54 + node_modules/ansi-styles/readme.md | 173 + node_modules/argparse/CHANGELOG.md | 216 + node_modules/argparse/LICENSE | 254 ++ node_modules/argparse/README.md | 84 + node_modules/argparse/argparse.js | 3707 +++++++++++++++++ node_modules/argparse/package.json | 31 + .../balanced-match/.github/FUNDING.yml | 2 + node_modules/balanced-match/LICENSE.md | 21 + node_modules/balanced-match/README.md | 97 + node_modules/balanced-match/index.js | 62 + node_modules/balanced-match/package.json | 48 + .../brace-expansion/.github/FUNDING.yml | 2 + node_modules/brace-expansion/LICENSE | 21 + node_modules/brace-expansion/README.md | 135 + node_modules/brace-expansion/index.js | 203 + node_modules/brace-expansion/package.json | 46 + .../character-entities-legacy/index.d.ts | 6 + .../character-entities-legacy/index.js | 113 + .../character-entities-legacy/license | 22 + .../character-entities-legacy/package.json | 77 + .../character-entities-legacy/readme.md | 157 + node_modules/character-entities/index.d.ts | 6 + node_modules/character-entities/index.js | 2132 ++++++++++ node_modules/character-entities/license | 22 + node_modules/character-entities/package.json | 78 + node_modules/character-entities/readme.md | 152 + .../character-reference-invalid/index.d.ts | 6 + .../character-reference-invalid/index.js | 35 + .../character-reference-invalid/license | 22 + .../character-reference-invalid/package.json | 83 + .../character-reference-invalid/readme.md | 156 + node_modules/color-convert/CHANGELOG.md | 54 + node_modules/color-convert/LICENSE | 21 + node_modules/color-convert/README.md | 68 + node_modules/color-convert/conversions.js | 839 ++++ node_modules/color-convert/index.js | 81 + node_modules/color-convert/package.json | 48 + node_modules/color-convert/route.js | 97 + node_modules/color-name/LICENSE | 8 + node_modules/color-name/README.md | 11 + node_modules/color-name/index.js | 152 + node_modules/color-name/package.json | 28 + node_modules/commander/LICENSE | 22 + node_modules/commander/Readme.md | 1149 +++++ node_modules/commander/esm.mjs | 16 + node_modules/commander/index.js | 24 + node_modules/commander/package-support.json | 16 + node_modules/commander/package.json | 82 + node_modules/commander/typings/esm.d.mts | 3 + node_modules/commander/typings/index.d.ts | 1045 +++++ node_modules/cross-spawn/LICENSE | 21 + node_modules/cross-spawn/README.md | 89 + node_modules/cross-spawn/index.js | 39 + node_modules/cross-spawn/package.json | 73 + node_modules/debug/LICENSE | 20 + node_modules/debug/README.md | 481 +++ node_modules/debug/package.json | 65 + node_modules/debug/src/browser.js | 272 ++ node_modules/debug/src/common.js | 292 ++ node_modules/debug/src/index.js | 10 + node_modules/debug/src/node.js | 263 ++ .../index.d.ts | 12 + .../index.dom.d.ts | 6 + .../index.dom.js | 33 + .../decode-named-character-reference/index.js | 18 + .../decode-named-character-reference/license | 22 + .../package.json | 89 + .../readme.md | 135 + node_modules/deep-extend/CHANGELOG.md | 46 + node_modules/deep-extend/LICENSE | 20 + node_modules/deep-extend/README.md | 91 + node_modules/deep-extend/index.js | 1 + node_modules/deep-extend/package.json | 62 + node_modules/dequal/index.d.ts | 1 + node_modules/dequal/license | 21 + node_modules/dequal/lite/index.d.ts | 1 + node_modules/dequal/lite/index.js | 31 + node_modules/dequal/lite/index.min.js | 1 + node_modules/dequal/lite/index.mjs | 29 + node_modules/dequal/package.json | 57 + node_modules/dequal/readme.md | 112 + node_modules/devlop/license | 22 + node_modules/devlop/package.json | 80 + node_modules/devlop/readme.md | 360 ++ node_modules/eastasianwidth/README.md | 32 + node_modules/eastasianwidth/eastasianwidth.js | 311 ++ node_modules/eastasianwidth/package.json | 18 + node_modules/emoji-regex/LICENSE-MIT.txt | 20 + node_modules/emoji-regex/README.md | 137 + node_modules/emoji-regex/RGI_Emoji.d.ts | 5 + node_modules/emoji-regex/RGI_Emoji.js | 6 + .../emoji-regex/es2015/RGI_Emoji.d.ts | 5 + node_modules/emoji-regex/es2015/RGI_Emoji.js | 6 + node_modules/emoji-regex/es2015/index.d.ts | 5 + node_modules/emoji-regex/es2015/index.js | 6 + node_modules/emoji-regex/es2015/text.d.ts | 5 + node_modules/emoji-regex/es2015/text.js | 6 + node_modules/emoji-regex/index.d.ts | 5 + node_modules/emoji-regex/index.js | 6 + node_modules/emoji-regex/package.json | 52 + node_modules/emoji-regex/text.d.ts | 5 + node_modules/emoji-regex/text.js | 6 + node_modules/entities/LICENSE | 11 + node_modules/entities/package.json | 90 + node_modules/entities/readme.md | 122 + node_modules/foreground-child/LICENSE | 15 + node_modules/foreground-child/README.md | 128 + node_modules/foreground-child/package.json | 111 + node_modules/glob/LICENSE | 15 + node_modules/glob/README.md | 1265 ++++++ node_modules/glob/package.json | 99 + node_modules/ignore/LICENSE-MIT | 21 + node_modules/ignore/README.md | 452 ++ node_modules/ignore/index.d.ts | 81 + node_modules/ignore/index.js | 779 ++++ node_modules/ignore/legacy.js | 673 +++ node_modules/ignore/package.json | 88 + node_modules/ini/LICENSE | 15 + node_modules/ini/README.md | 180 + node_modules/ini/package.json | 45 + node_modules/is-alphabetical/index.d.ts | 8 + node_modules/is-alphabetical/index.js | 16 + node_modules/is-alphabetical/license | 22 + node_modules/is-alphabetical/package.json | 73 + node_modules/is-alphabetical/readme.md | 141 + node_modules/is-alphanumerical/index.d.ts | 8 + node_modules/is-alphanumerical/index.js | 13 + node_modules/is-alphanumerical/license | 22 + node_modules/is-alphanumerical/package.json | 79 + node_modules/is-alphanumerical/readme.md | 142 + node_modules/is-decimal/index.d.ts | 8 + node_modules/is-decimal/index.js | 13 + node_modules/is-decimal/license | 22 + node_modules/is-decimal/package.json | 73 + node_modules/is-decimal/readme.md | 139 + .../is-fullwidth-code-point/index.d.ts | 17 + node_modules/is-fullwidth-code-point/index.js | 50 + node_modules/is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 42 + .../is-fullwidth-code-point/readme.md | 39 + node_modules/is-hexadecimal/index.d.ts | 8 + node_modules/is-hexadecimal/index.js | 17 + node_modules/is-hexadecimal/license | 22 + node_modules/is-hexadecimal/package.json | 73 + node_modules/is-hexadecimal/readme.md | 141 + node_modules/isexe/.npmignore | 2 + node_modules/isexe/LICENSE | 15 + node_modules/isexe/README.md | 51 + node_modules/isexe/index.js | 57 + node_modules/isexe/mode.js | 41 + node_modules/isexe/package.json | 31 + node_modules/isexe/test/basic.js | 221 + node_modules/isexe/windows.js | 42 + node_modules/jackspeak/LICENSE.md | 55 + node_modules/jackspeak/README.md | 357 ++ node_modules/jackspeak/package.json | 95 + node_modules/js-yaml/CHANGELOG.md | 616 +++ node_modules/js-yaml/LICENSE | 21 + node_modules/js-yaml/README.md | 246 ++ node_modules/js-yaml/index.js | 47 + node_modules/js-yaml/package.json | 66 + node_modules/jsonc-parser/CHANGELOG.md | 76 + node_modules/jsonc-parser/LICENSE.md | 21 + node_modules/jsonc-parser/README.md | 364 ++ node_modules/jsonc-parser/SECURITY.md | 41 + node_modules/jsonc-parser/package.json | 37 + node_modules/jsonpointer/LICENSE.md | 21 + node_modules/jsonpointer/README.md | 45 + node_modules/jsonpointer/jsonpointer.d.ts | 35 + node_modules/jsonpointer/jsonpointer.js | 100 + node_modules/jsonpointer/package.json | 48 + node_modules/katex/LICENSE | 21 + node_modules/katex/README.md | 125 + node_modules/katex/cli.js | 112 + .../katex/contrib/auto-render/README.md | 8 + .../katex/contrib/auto-render/auto-render.js | 142 + .../katex/contrib/auto-render/index.html | 56 + .../contrib/auto-render/splitAtDelimiters.js | 85 + .../auto-render/test/auto-render-spec.js | 363 ++ node_modules/katex/contrib/copy-tex/README.md | 39 + .../katex/contrib/copy-tex/copy-tex.js | 51 + .../katex/contrib/copy-tex/index.html | 38 + .../katex/contrib/copy-tex/katex2tex.js | 61 + .../contrib/mathtex-script-type/README.md | 38 + .../mathtex-script-type.js | 22 + node_modules/katex/contrib/mhchem/README.md | 23 + node_modules/katex/contrib/mhchem/mhchem.js | 1695 ++++++++ .../render-a11y-string/render-a11y-string.js | 746 ++++ .../test/render-a11y-string-spec.js | 549 +++ node_modules/katex/katex.js | 247 ++ .../katex/node_modules/commander/LICENSE | 22 + .../katex/node_modules/commander/Readme.md | 1015 +++++ .../katex/node_modules/commander/esm.mjs | 15 + .../katex/node_modules/commander/index.js | 27 + .../commander/package-support.json | 16 + .../katex/node_modules/commander/package.json | 69 + .../node_modules/commander/typings/index.d.ts | 774 ++++ node_modules/katex/package.json | 195 + node_modules/katex/src/Lexer.js | 122 + node_modules/katex/src/MacroExpander.js | 470 +++ node_modules/katex/src/Namespace.js | 129 + node_modules/katex/src/Options.js | 319 ++ node_modules/katex/src/ParseError.js | 86 + node_modules/katex/src/Parser.js | 1029 +++++ node_modules/katex/src/Settings.js | 360 ++ node_modules/katex/src/SourceLocation.js | 42 + node_modules/katex/src/Style.js | 130 + node_modules/katex/src/Token.js | 47 + node_modules/katex/src/buildCommon.js | 784 ++++ node_modules/katex/src/buildHTML.js | 406 ++ node_modules/katex/src/buildMathML.js | 322 ++ node_modules/katex/src/buildTree.js | 67 + node_modules/katex/src/defineEnvironment.js | 117 + node_modules/katex/src/defineFunction.js | 223 + node_modules/katex/src/defineMacro.js | 125 + node_modules/katex/src/delimiter.js | 835 ++++ node_modules/katex/src/domTree.js | 632 +++ node_modules/katex/src/environments.js | 9 + node_modules/katex/src/environments/array.js | 1118 +++++ node_modules/katex/src/environments/cd.js | 313 ++ node_modules/katex/src/fontMetrics.js | 282 ++ node_modules/katex/src/fontMetricsData.js | 2077 +++++++++ node_modules/katex/src/fonts/Makefile | 139 + node_modules/katex/src/fonts/default.cfg | 20 + .../katex/src/fonts/generate_fonts.py | 58 + node_modules/katex/src/fonts/makeBlacker | 49 + node_modules/katex/src/fonts/makeFF | 2005 +++++++++ node_modules/katex/src/fonts/xbbold.mf | 182 + node_modules/katex/src/functions.js | 55 + node_modules/katex/src/functions/accent.js | 284 ++ .../katex/src/functions/accentunder.js | 60 + node_modules/katex/src/functions/arrow.js | 144 + node_modules/katex/src/functions/char.js | 45 + node_modules/katex/src/functions/color.js | 88 + node_modules/katex/src/functions/cr.js | 61 + node_modules/katex/src/functions/def.js | 210 + .../katex/src/functions/delimsizing.js | 360 ++ node_modules/katex/src/functions/enclose.js | 323 ++ .../katex/src/functions/environment.js | 62 + node_modules/katex/src/functions/font.js | 120 + node_modules/katex/src/functions/genfrac.js | 510 +++ node_modules/katex/src/functions/hbox.js | 39 + .../katex/src/functions/horizBrace.js | 137 + node_modules/katex/src/functions/href.js | 93 + node_modules/katex/src/functions/html.js | 102 + .../katex/src/functions/htmlmathml.js | 34 + .../katex/src/functions/includegraphics.js | 151 + node_modules/katex/src/functions/kern.js | 56 + node_modules/katex/src/functions/lap.js | 74 + node_modules/katex/src/functions/math.js | 42 + .../katex/src/functions/mathchoice.js | 51 + node_modules/katex/src/functions/mclass.js | 168 + node_modules/katex/src/functions/op.js | 334 ++ .../katex/src/functions/operatorname.js | 164 + node_modules/katex/src/functions/ordgroup.js | 22 + node_modules/katex/src/functions/overline.js | 59 + node_modules/katex/src/functions/phantom.js | 117 + node_modules/katex/src/functions/pmb.js | 44 + node_modules/katex/src/functions/raisebox.js | 46 + node_modules/katex/src/functions/relax.js | 17 + node_modules/katex/src/functions/rule.js | 77 + node_modules/katex/src/functions/sizing.js | 91 + node_modules/katex/src/functions/smash.js | 110 + node_modules/katex/src/functions/sqrt.js | 125 + node_modules/katex/src/functions/styling.js | 73 + node_modules/katex/src/functions/supsub.js | 267 ++ node_modules/katex/src/functions/symbolsOp.js | 34 + .../katex/src/functions/symbolsOrd.js | 62 + .../katex/src/functions/symbolsSpacing.js | 73 + node_modules/katex/src/functions/tag.js | 40 + node_modules/katex/src/functions/text.js | 76 + node_modules/katex/src/functions/underline.js | 58 + .../src/functions/utils/assembleSupSub.js | 120 + node_modules/katex/src/functions/vcenter.js | 44 + node_modules/katex/src/functions/verb.js | 58 + node_modules/katex/src/macros.js | 1033 +++++ node_modules/katex/src/mathMLTree.js | 267 ++ node_modules/katex/src/metrics/README.md | 23 + .../katex/src/metrics/extract_tfms.py | 114 + .../katex/src/metrics/extract_ttfs.py | 122 + node_modules/katex/src/metrics/format_json.py | 28 + node_modules/katex/src/metrics/mapping.pl | 1224 ++++++ node_modules/katex/src/metrics/parse_tfm.py | 211 + node_modules/katex/src/parseNode.js | 524 +++ node_modules/katex/src/parseTree.js | 49 + node_modules/katex/src/spacingData.js | 108 + node_modules/katex/src/stretchy.js | 378 ++ node_modules/katex/src/styles/fonts.scss | 71 + node_modules/katex/src/styles/katex.scss | 664 +++ node_modules/katex/src/svgGeometry.js | 545 +++ node_modules/katex/src/symbols.js | 890 ++++ node_modules/katex/src/tree.js | 78 + node_modules/katex/src/types.js | 36 + node_modules/katex/src/unicodeAccents.js | 18 + node_modules/katex/src/unicodeScripts.js | 126 + node_modules/katex/src/unicodeSupOrSub.js | 108 + node_modules/katex/src/unicodeSymbols.js | 32 + node_modules/katex/src/units.js | 106 + node_modules/katex/src/utils.js | 130 + node_modules/katex/src/wide-character.js | 111 + node_modules/katex/types/katex.d.ts | 258 ++ node_modules/linkify-it/LICENSE | 22 + node_modules/linkify-it/README.md | 196 + node_modules/linkify-it/index.mjs | 642 +++ node_modules/linkify-it/package.json | 58 + node_modules/lru-cache/LICENSE | 15 + node_modules/lru-cache/README.md | 331 ++ node_modules/lru-cache/package.json | 116 + node_modules/markdown-it/LICENSE | 22 + node_modules/markdown-it/README.md | 324 ++ node_modules/markdown-it/index.mjs | 1 + node_modules/markdown-it/package.json | 92 + node_modules/markdownlint-cli/LICENSE | 21 + node_modules/markdownlint-cli/README.md | 181 + node_modules/markdownlint-cli/markdownlint.js | 336 ++ node_modules/markdownlint-cli/package.json | 95 + node_modules/markdownlint/CHANGELOG.md | 495 +++ node_modules/markdownlint/CONTRIBUTING.md | 93 + node_modules/markdownlint/LICENSE | 21 + node_modules/markdownlint/README.md | 1037 +++++ node_modules/markdownlint/doc/CustomRules.md | 194 + node_modules/markdownlint/doc/Prettier.md | 27 + .../markdownlint/doc/ReleaseProcess.md | 20 + node_modules/markdownlint/doc/Rules.md | 2535 +++++++++++ node_modules/markdownlint/doc/md001.md | 37 + node_modules/markdownlint/doc/md003.md | 59 + node_modules/markdownlint/doc/md004.md | 50 + node_modules/markdownlint/doc/md005.md | 53 + node_modules/markdownlint/doc/md007.md | 52 + node_modules/markdownlint/doc/md009.md | 51 + node_modules/markdownlint/doc/md010.md | 56 + node_modules/markdownlint/doc/md011.md | 30 + node_modules/markdownlint/doc/md012.md | 38 + node_modules/markdownlint/doc/md013.md | 58 + node_modules/markdownlint/doc/md014.md | 54 + node_modules/markdownlint/doc/md018.md | 27 + node_modules/markdownlint/doc/md019.md | 28 + node_modules/markdownlint/doc/md020.md | 29 + node_modules/markdownlint/doc/md021.md | 31 + node_modules/markdownlint/doc/md022.md | 52 + node_modules/markdownlint/doc/md023.md | 33 + node_modules/markdownlint/doc/md024.md | 44 + node_modules/markdownlint/doc/md025.md | 49 + node_modules/markdownlint/doc/md026.md | 40 + node_modules/markdownlint/doc/md027.md | 24 + node_modules/markdownlint/doc/md028.md | 40 + node_modules/markdownlint/doc/md029.md | 98 + node_modules/markdownlint/doc/md030.md | 82 + node_modules/markdownlint/doc/md031.md | 50 + node_modules/markdownlint/doc/md032.md | 55 + node_modules/markdownlint/doc/md033.md | 27 + node_modules/markdownlint/doc/md034.md | 55 + node_modules/markdownlint/doc/md035.md | 37 + node_modules/markdownlint/doc/md036.md | 45 + node_modules/markdownlint/doc/md037.md | 37 + node_modules/markdownlint/doc/md038.md | 40 + node_modules/markdownlint/doc/md039.md | 21 + node_modules/markdownlint/doc/md040.md | 52 + node_modules/markdownlint/doc/md041.md | 49 + node_modules/markdownlint/doc/md042.md | 32 + node_modules/markdownlint/doc/md043.md | 69 + node_modules/markdownlint/doc/md044.md | 45 + node_modules/markdownlint/doc/md045.md | 40 + node_modules/markdownlint/doc/md046.md | 40 + node_modules/markdownlint/doc/md047.md | 34 + node_modules/markdownlint/doc/md048.md | 42 + node_modules/markdownlint/doc/md049.md | 36 + node_modules/markdownlint/doc/md050.md | 35 + node_modules/markdownlint/doc/md051.md | 95 + node_modules/markdownlint/doc/md052.md | 40 + node_modules/markdownlint/doc/md053.md | 38 + node_modules/markdownlint/doc/md054.md | 100 + node_modules/markdownlint/doc/md055.md | 55 + node_modules/markdownlint/doc/md056.md | 37 + node_modules/markdownlint/doc/md058.md | 48 + node_modules/markdownlint/helpers/LICENSE | 21 + node_modules/markdownlint/helpers/README.md | 29 + node_modules/markdownlint/helpers/helpers.cjs | 542 +++ .../helpers/micromark-helpers.cjs | 301 ++ .../markdownlint/helpers/package.json | 26 + node_modules/markdownlint/helpers/shared.cjs | 16 + node_modules/markdownlint/package.json | 120 + .../markdownlint/schema/.markdownlint.jsonc | 310 ++ .../markdownlint/schema/.markdownlint.yaml | 277 ++ .../schema/ValidatingConfiguration.md | 26 + .../markdownlint-config-schema-strict.json | 1841 ++++++++ .../schema/markdownlint-config-schema.json | 1846 ++++++++ node_modules/markdownlint/style/all.json | 5 + .../markdownlint/style/cirosantilli.json | 22 + node_modules/markdownlint/style/prettier.json | 27 + node_modules/markdownlint/style/relaxed.json | 12 + node_modules/mdurl/LICENSE | 45 + node_modules/mdurl/README.md | 102 + node_modules/mdurl/index.mjs | 11 + node_modules/mdurl/package.json | 37 + .../micromark-core-commonmark/dev/index.d.ts | 23 + .../dev/index.d.ts.map | 1 + .../micromark-core-commonmark/dev/index.js | 22 + .../micromark-core-commonmark/index.d.ts | 23 + .../micromark-core-commonmark/index.d.ts.map | 1 + .../micromark-core-commonmark/index.js | 22 + .../micromark-core-commonmark/license | 22 + .../micromark-core-commonmark/package.json | 74 + .../micromark-core-commonmark/readme.md | 171 + .../dev/index.d.ts | 156 + .../dev/index.js | 3 + .../micromark-extension-directive/index.d.ts | 156 + .../micromark-extension-directive/index.js | 3 + .../micromark-extension-directive/license | 22 + .../package.json | 127 + .../micromark-extension-directive/readme.md | 424 ++ .../dev/index.d.ts | 24 + .../dev/index.js | 2 + .../index.d.ts | 24 + .../index.js | 2 + .../license | 22 + .../package.json | 116 + .../readme.md | 422 ++ .../dev/index.d.ts | 164 + .../dev/index.js | 3 + .../index.d.ts | 164 + .../micromark-extension-gfm-footnote/index.js | 3 + .../micromark-extension-gfm-footnote/license | 22 + .../package.json | 132 + .../readme.md | 656 +++ .../dev/index.d.ts | 37 + .../dev/index.js | 2 + .../micromark-extension-gfm-table/index.d.ts | 37 + .../micromark-extension-gfm-table/index.js | 2 + .../micromark-extension-gfm-table/license | 22 + .../package.json | 116 + .../micromark-extension-gfm-table/readme.md | 515 +++ .../micromark-extension-math/dev/index.d.ts | 61 + .../micromark-extension-math/dev/index.js | 3 + .../micromark-extension-math/index.d.ts | 61 + .../micromark-extension-math/index.js | 3 + node_modules/micromark-extension-math/license | 22 + .../micromark-extension-math/package.json | 121 + .../micromark-extension-math/readme.md | 429 ++ .../dev/index.d.ts | 42 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 255 ++ .../micromark-factory-destination/index.d.ts | 42 + .../index.d.ts.map | 1 + .../micromark-factory-destination/index.js | 206 + .../micromark-factory-destination/license | 22 + .../package.json | 57 + .../micromark-factory-destination/readme.md | 234 ++ .../micromark-factory-label/dev/index.d.ts | 37 + .../dev/index.d.ts.map | 1 + .../micromark-factory-label/dev/index.js | 172 + .../micromark-factory-label/index.d.ts | 37 + .../micromark-factory-label/index.d.ts.map | 1 + node_modules/micromark-factory-label/index.js | 148 + node_modules/micromark-factory-label/license | 22 + .../micromark-factory-label/package.json | 60 + .../micromark-factory-label/readme.md | 224 + .../micromark-factory-space/dev/index.d.ts | 37 + .../dev/index.d.ts.map | 1 + .../micromark-factory-space/dev/index.js | 67 + .../micromark-factory-space/index.d.ts | 37 + .../micromark-factory-space/index.d.ts.map | 1 + node_modules/micromark-factory-space/index.js | 64 + node_modules/micromark-factory-space/license | 22 + .../micromark-factory-space/package.json | 55 + .../micromark-factory-space/readme.md | 225 + .../micromark-factory-title/dev/index.d.ts | 36 + .../dev/index.d.ts.map | 1 + .../micromark-factory-title/dev/index.js | 169 + .../micromark-factory-title/index.d.ts | 36 + .../micromark-factory-title/index.d.ts.map | 1 + node_modules/micromark-factory-title/index.js | 158 + node_modules/micromark-factory-title/license | 22 + .../micromark-factory-title/package.json | 58 + .../micromark-factory-title/readme.md | 229 + .../dev/index.d.ts | 22 + .../dev/index.d.ts.map | 1 + .../micromark-factory-whitespace/dev/index.js | 53 + .../micromark-factory-whitespace/index.d.ts | 22 + .../index.d.ts.map | 1 + .../micromark-factory-whitespace/index.js | 44 + .../micromark-factory-whitespace/license | 22 + .../micromark-factory-whitespace/package.json | 57 + .../micromark-factory-whitespace/readme.md | 205 + .../micromark-util-character/dev/index.d.ts | 195 + .../dev/index.d.ts.map | 1 + .../micromark-util-character/dev/index.js | 252 ++ .../micromark-util-character/index.d.ts | 195 + .../micromark-util-character/index.d.ts.map | 1 + .../micromark-util-character/index.js | 246 ++ node_modules/micromark-util-character/license | 22 + .../micromark-util-character/package.json | 57 + .../micromark-util-character/readme.md | 446 ++ .../micromark-util-chunked/dev/index.d.ts | 41 + .../micromark-util-chunked/dev/index.d.ts.map | 1 + .../micromark-util-chunked/dev/index.js | 89 + .../micromark-util-chunked/index.d.ts | 41 + .../micromark-util-chunked/index.d.ts.map | 1 + node_modules/micromark-util-chunked/index.js | 81 + node_modules/micromark-util-chunked/license | 22 + .../micromark-util-chunked/package.json | 57 + node_modules/micromark-util-chunked/readme.md | 219 + .../dev/index.d.ts | 18 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 38 + .../index.d.ts | 18 + .../index.d.ts.map | 1 + .../index.js | 27 + .../micromark-util-classify-character/license | 22 + .../package.json | 59 + .../readme.md | 205 + .../index.d.ts | 22 + .../index.d.ts.map | 1 + .../index.js | 143 + .../micromark-util-combine-extensions/license | 22 + .../package.json | 52 + .../readme.md | 201 + .../dev/index.d.ts | 16 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 42 + .../index.d.ts | 16 + .../index.d.ts.map | 1 + .../index.js | 32 + .../license | 22 + .../package.json | 59 + .../readme.md | 184 + node_modules/micromark-util-encode/index.d.ts | 14 + .../micromark-util-encode/index.d.ts.map | 1 + node_modules/micromark-util-encode/index.js | 33 + node_modules/micromark-util-encode/license | 22 + .../micromark-util-encode/package.json | 47 + node_modules/micromark-util-encode/readme.md | 176 + .../micromark-util-html-tag-name/index.d.ts | 30 + .../index.d.ts.map | 1 + .../micromark-util-html-tag-name/index.js | 93 + .../micromark-util-html-tag-name/license | 22 + .../micromark-util-html-tag-name/package.json | 47 + .../micromark-util-html-tag-name/readme.md | 193 + .../dev/index.d.ts | 21 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 38 + .../index.d.ts | 21 + .../index.d.ts.map | 1 + .../index.js | 33 + .../license | 22 + .../package.json | 58 + .../readme.md | 187 + .../micromark-util-resolve-all/index.d.ts | 22 + .../micromark-util-resolve-all/index.d.ts.map | 1 + .../micromark-util-resolve-all/index.js | 32 + .../micromark-util-resolve-all/license | 22 + .../micromark-util-resolve-all/package.json | 48 + .../micromark-util-resolve-all/readme.md | 238 ++ .../dev/index.d.ts | 36 + .../dev/index.d.ts.map | 1 + .../micromark-util-sanitize-uri/dev/index.js | 124 + .../micromark-util-sanitize-uri/index.d.ts | 36 + .../index.d.ts.map | 1 + .../micromark-util-sanitize-uri/index.js | 107 + .../micromark-util-sanitize-uri/license | 22 + .../micromark-util-sanitize-uri/package.json | 59 + .../micromark-util-sanitize-uri/readme.md | 214 + .../micromark-util-subtokenize/dev/index.d.ts | 12 + .../dev/index.d.ts.map | 1 + .../micromark-util-subtokenize/dev/index.js | 272 ++ .../micromark-util-subtokenize/index.d.ts | 12 + .../micromark-util-subtokenize/index.d.ts.map | 1 + .../micromark-util-subtokenize/index.js | 222 + .../micromark-util-subtokenize/license | 22 + .../micromark-util-subtokenize/package.json | 60 + .../micromark-util-subtokenize/readme.md | 181 + node_modules/micromark-util-symbol/license | 22 + .../micromark-util-symbol/package.json | 43 + node_modules/micromark-util-symbol/readme.md | 168 + node_modules/micromark-util-types/index.d.ts | 1294 ++++++ node_modules/micromark-util-types/index.js | 2 + node_modules/micromark-util-types/license | 22 + .../micromark-util-types/package.json | 71 + node_modules/micromark-util-types/readme.md | 151 + node_modules/micromark/dev/index.d.ts | 82 + node_modules/micromark/dev/index.d.ts.map | 1 + node_modules/micromark/dev/index.js | 68 + node_modules/micromark/dev/stream.d.ts | 35 + node_modules/micromark/dev/stream.d.ts.map | 1 + node_modules/micromark/dev/stream.js | 270 ++ node_modules/micromark/index.d.ts | 82 + node_modules/micromark/index.d.ts.map | 1 + node_modules/micromark/index.js | 60 + node_modules/micromark/license | 22 + node_modules/micromark/package.json | 100 + node_modules/micromark/readme.md | 491 +++ node_modules/micromark/stream.d.ts | 35 + node_modules/micromark/stream.d.ts.map | 1 + node_modules/micromark/stream.js | 256 ++ node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 454 ++ node_modules/minimatch/package.json | 82 + node_modules/minimist/.eslintrc | 29 + node_modules/minimist/.github/FUNDING.yml | 12 + node_modules/minimist/.nycrc | 14 + node_modules/minimist/CHANGELOG.md | 298 ++ node_modules/minimist/LICENSE | 18 + node_modules/minimist/README.md | 121 + node_modules/minimist/example/parse.js | 4 + node_modules/minimist/index.js | 263 ++ node_modules/minimist/package.json | 75 + node_modules/minimist/test/all_bool.js | 34 + node_modules/minimist/test/bool.js | 177 + node_modules/minimist/test/dash.js | 43 + node_modules/minimist/test/default_bool.js | 37 + node_modules/minimist/test/dotted.js | 24 + node_modules/minimist/test/kv_short.js | 32 + node_modules/minimist/test/long.js | 33 + node_modules/minimist/test/num.js | 38 + node_modules/minimist/test/parse.js | 209 + node_modules/minimist/test/parse_modified.js | 11 + node_modules/minimist/test/proto.js | 64 + node_modules/minimist/test/short.js | 69 + node_modules/minimist/test/stop_early.js | 17 + node_modules/minimist/test/unknown.js | 104 + node_modules/minimist/test/whitespace.js | 10 + node_modules/minipass/LICENSE | 15 + node_modules/minipass/README.md | 825 ++++ node_modules/minipass/package.json | 82 + node_modules/ms/index.js | 162 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 38 + node_modules/ms/readme.md | 59 + .../package-json-from-dist/LICENSE.md | 63 + node_modules/package-json-from-dist/README.md | 110 + .../package-json-from-dist/package.json | 68 + node_modules/parse-entities/index.d.ts | 126 + node_modules/parse-entities/index.js | 3 + node_modules/parse-entities/license | 22 + node_modules/parse-entities/package.json | 91 + node_modules/parse-entities/readme.md | 266 ++ node_modules/path-key/index.d.ts | 40 + node_modules/path-key/index.js | 16 + node_modules/path-key/license | 9 + node_modules/path-key/package.json | 39 + node_modules/path-key/readme.md | 61 + node_modules/path-scurry/LICENSE.md | 55 + node_modules/path-scurry/README.md | 636 +++ node_modules/path-scurry/package.json | 89 + node_modules/punycode.js/LICENSE-MIT.txt | 20 + node_modules/punycode.js/README.md | 148 + node_modules/punycode.js/package.json | 58 + node_modules/punycode.js/punycode.es6.js | 444 ++ node_modules/punycode.js/punycode.js | 443 ++ node_modules/run-con/.circleci/config.yml | 7 + node_modules/run-con/.github/FUNDING.yml | 3 + node_modules/run-con/.github/dependabot.yml | 9 + .../run-con/.github/workflows/coverage.yml | 37 + .../run-con/.github/workflows/dependabot.yml | 44 + .../run-con/.github/workflows/issuehunt.yml | 33 + node_modules/run-con/LICENSE.APACHE2 | 15 + node_modules/run-con/LICENSE.BSD | 26 + node_modules/run-con/LICENSE.MIT | 24 + node_modules/run-con/README.md | 239 ++ node_modules/run-con/browser.js | 7 + node_modules/run-con/cli.js | 4 + node_modules/run-con/index.js | 53 + node_modules/run-con/package.json | 29 + node_modules/run-con/renovate.json | 6 + node_modules/shebang-command/index.js | 19 + node_modules/shebang-command/license | 9 + node_modules/shebang-command/package.json | 34 + node_modules/shebang-command/readme.md | 34 + node_modules/shebang-regex/index.d.ts | 22 + node_modules/shebang-regex/index.js | 2 + node_modules/shebang-regex/license | 9 + node_modules/shebang-regex/package.json | 35 + node_modules/shebang-regex/readme.md | 33 + node_modules/signal-exit/LICENSE.txt | 16 + node_modules/signal-exit/README.md | 74 + node_modules/signal-exit/package.json | 106 + node_modules/smol-toml/LICENSE | 24 + node_modules/smol-toml/README.md | 192 + node_modules/smol-toml/package.json | 53 + node_modules/string-width-cjs/index.d.ts | 29 + node_modules/string-width-cjs/index.js | 47 + node_modules/string-width-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.d.ts | 23 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 50 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/strip-ansi/index.d.ts | 17 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 54 + .../node_modules/strip-ansi/readme.md | 46 + node_modules/string-width-cjs/package.json | 56 + node_modules/string-width-cjs/readme.md | 50 + node_modules/string-width/index.d.ts | 29 + node_modules/string-width/index.js | 54 + node_modules/string-width/license | 9 + node_modules/string-width/package.json | 59 + node_modules/string-width/readme.md | 67 + node_modules/strip-ansi-cjs/index.d.ts | 17 + node_modules/strip-ansi-cjs/index.js | 4 + node_modules/strip-ansi-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + node_modules/strip-ansi-cjs/package.json | 54 + node_modules/strip-ansi-cjs/readme.md | 46 + node_modules/strip-ansi/index.d.ts | 15 + node_modules/strip-ansi/index.js | 14 + node_modules/strip-ansi/license | 9 + node_modules/strip-ansi/package.json | 57 + node_modules/strip-ansi/readme.md | 41 + node_modules/strip-json-comments/index.d.ts | 36 + node_modules/strip-json-comments/index.js | 77 + node_modules/strip-json-comments/license | 9 + node_modules/strip-json-comments/package.json | 47 + node_modules/strip-json-comments/readme.md | 78 + node_modules/uc.micro/LICENSE.txt | 20 + node_modules/uc.micro/README.md | 14 + node_modules/uc.micro/categories/Cc/regex.mjs | 1 + node_modules/uc.micro/categories/Cf/regex.mjs | 1 + node_modules/uc.micro/categories/P/regex.mjs | 1 + node_modules/uc.micro/categories/S/regex.mjs | 1 + node_modules/uc.micro/categories/Z/regex.mjs | 1 + node_modules/uc.micro/index.mjs | 8 + node_modules/uc.micro/package.json | 37 + .../uc.micro/properties/Any/regex.mjs | 1 + node_modules/which/CHANGELOG.md | 166 + node_modules/which/LICENSE | 15 + node_modules/which/README.md | 54 + node_modules/which/package.json | 43 + node_modules/which/which.js | 125 + node_modules/wrap-ansi-cjs/index.js | 216 + node_modules/wrap-ansi-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + .../node_modules/ansi-styles/index.d.ts | 345 ++ .../node_modules/ansi-styles/index.js | 163 + .../node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 56 + .../node_modules/ansi-styles/readme.md | 152 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.d.ts | 23 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 50 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/string-width/index.d.ts | 29 + .../node_modules/string-width/index.js | 47 + .../node_modules/string-width/license | 9 + .../node_modules/string-width/package.json | 56 + .../node_modules/string-width/readme.md | 50 + .../node_modules/strip-ansi/index.d.ts | 17 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 54 + .../node_modules/strip-ansi/readme.md | 46 + node_modules/wrap-ansi-cjs/package.json | 62 + node_modules/wrap-ansi-cjs/readme.md | 91 + node_modules/wrap-ansi/index.d.ts | 41 + node_modules/wrap-ansi/index.js | 214 + node_modules/wrap-ansi/license | 9 + node_modules/wrap-ansi/package.json | 69 + node_modules/wrap-ansi/readme.md | 91 + package-lock.json | 1420 +++++++ package.json | 5 + poetry.lock | 2 +- pyiceberg/table/__init__.py | 9 +- pyiceberg/table/upsert_util.py | 20 +- pyproject.toml | 2 +- tests/table/test_upsert.py | 62 +- 842 files changed, 105850 insertions(+), 45 deletions(-) create mode 120000 node_modules/.bin/glob create mode 120000 node_modules/.bin/js-yaml create mode 120000 node_modules/.bin/katex create mode 120000 node_modules/.bin/markdown-it create mode 120000 node_modules/.bin/markdownlint create mode 120000 node_modules/.bin/node-which create mode 120000 node_modules/.bin/run-con create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@isaacs/cliui/LICENSE.txt create mode 100644 node_modules/@isaacs/cliui/README.md create mode 100644 node_modules/@isaacs/cliui/index.mjs create mode 100644 node_modules/@isaacs/cliui/package.json create mode 100644 node_modules/@pkgjs/parseargs/.editorconfig create mode 100644 node_modules/@pkgjs/parseargs/CHANGELOG.md create mode 100644 node_modules/@pkgjs/parseargs/LICENSE create mode 100644 node_modules/@pkgjs/parseargs/README.md create mode 100644 node_modules/@pkgjs/parseargs/examples/is-default-value.js create mode 100644 node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js create mode 100644 node_modules/@pkgjs/parseargs/examples/negate.js create mode 100644 node_modules/@pkgjs/parseargs/examples/no-repeated-options.js create mode 100644 node_modules/@pkgjs/parseargs/examples/ordered-options.mjs create mode 100644 node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js create mode 100644 node_modules/@pkgjs/parseargs/index.js create mode 100644 node_modules/@pkgjs/parseargs/internal/errors.js create mode 100644 node_modules/@pkgjs/parseargs/internal/primordials.js create mode 100644 node_modules/@pkgjs/parseargs/internal/util.js create mode 100644 node_modules/@pkgjs/parseargs/internal/validators.js create mode 100644 node_modules/@pkgjs/parseargs/package.json create mode 100644 node_modules/@pkgjs/parseargs/utils.js create mode 100644 node_modules/@types/debug/LICENSE create mode 100644 node_modules/@types/debug/README.md create mode 100644 node_modules/@types/debug/index.d.ts create mode 100644 node_modules/@types/debug/package.json create mode 100644 node_modules/@types/katex/LICENSE create mode 100644 node_modules/@types/katex/README.md create mode 100644 node_modules/@types/katex/contrib/auto-render.d.ts create mode 100644 node_modules/@types/katex/index.d.ts create mode 100644 node_modules/@types/katex/package.json create mode 100644 node_modules/@types/ms/LICENSE create mode 100644 node_modules/@types/ms/README.md create mode 100644 node_modules/@types/ms/index.d.ts create mode 100644 node_modules/@types/ms/package.json create mode 100644 node_modules/@types/unist/LICENSE create mode 100644 node_modules/@types/unist/README.md create mode 100644 node_modules/@types/unist/index.d.ts create mode 100644 node_modules/@types/unist/package.json create mode 100644 node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/ansi-regex/index.js create mode 100644 node_modules/ansi-regex/license create mode 100644 node_modules/ansi-regex/package.json create mode 100644 node_modules/ansi-regex/readme.md create mode 100644 node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/ansi-styles/index.js create mode 100644 node_modules/ansi-styles/license create mode 100644 node_modules/ansi-styles/package.json create mode 100644 node_modules/ansi-styles/readme.md create mode 100644 node_modules/argparse/CHANGELOG.md create mode 100644 node_modules/argparse/LICENSE create mode 100644 node_modules/argparse/README.md create mode 100644 node_modules/argparse/argparse.js create mode 100644 node_modules/argparse/package.json create mode 100644 node_modules/balanced-match/.github/FUNDING.yml create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/brace-expansion/.github/FUNDING.yml create mode 100644 node_modules/brace-expansion/LICENSE create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/character-entities-legacy/index.d.ts create mode 100644 node_modules/character-entities-legacy/index.js create mode 100644 node_modules/character-entities-legacy/license create mode 100644 node_modules/character-entities-legacy/package.json create mode 100644 node_modules/character-entities-legacy/readme.md create mode 100644 node_modules/character-entities/index.d.ts create mode 100644 node_modules/character-entities/index.js create mode 100644 node_modules/character-entities/license create mode 100644 node_modules/character-entities/package.json create mode 100644 node_modules/character-entities/readme.md create mode 100644 node_modules/character-reference-invalid/index.d.ts create mode 100644 node_modules/character-reference-invalid/index.js create mode 100644 node_modules/character-reference-invalid/license create mode 100644 node_modules/character-reference-invalid/package.json create mode 100644 node_modules/character-reference-invalid/readme.md create mode 100644 node_modules/color-convert/CHANGELOG.md create mode 100644 node_modules/color-convert/LICENSE create mode 100644 node_modules/color-convert/README.md create mode 100644 node_modules/color-convert/conversions.js create mode 100644 node_modules/color-convert/index.js create mode 100644 node_modules/color-convert/package.json create mode 100644 node_modules/color-convert/route.js create mode 100644 node_modules/color-name/LICENSE create mode 100644 node_modules/color-name/README.md create mode 100644 node_modules/color-name/index.js create mode 100644 node_modules/color-name/package.json create mode 100644 node_modules/commander/LICENSE create mode 100644 node_modules/commander/Readme.md create mode 100644 node_modules/commander/esm.mjs create mode 100644 node_modules/commander/index.js create mode 100644 node_modules/commander/package-support.json create mode 100644 node_modules/commander/package.json create mode 100644 node_modules/commander/typings/esm.d.mts create mode 100644 node_modules/commander/typings/index.d.ts create mode 100644 node_modules/cross-spawn/LICENSE create mode 100644 node_modules/cross-spawn/README.md create mode 100644 node_modules/cross-spawn/index.js create mode 100644 node_modules/cross-spawn/package.json create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/common.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/decode-named-character-reference/index.d.ts create mode 100644 node_modules/decode-named-character-reference/index.dom.d.ts create mode 100644 node_modules/decode-named-character-reference/index.dom.js create mode 100644 node_modules/decode-named-character-reference/index.js create mode 100644 node_modules/decode-named-character-reference/license create mode 100644 node_modules/decode-named-character-reference/package.json create mode 100644 node_modules/decode-named-character-reference/readme.md create mode 100644 node_modules/deep-extend/CHANGELOG.md create mode 100644 node_modules/deep-extend/LICENSE create mode 100644 node_modules/deep-extend/README.md create mode 100644 node_modules/deep-extend/index.js create mode 100644 node_modules/deep-extend/package.json create mode 100644 node_modules/dequal/index.d.ts create mode 100644 node_modules/dequal/license create mode 100644 node_modules/dequal/lite/index.d.ts create mode 100644 node_modules/dequal/lite/index.js create mode 100644 node_modules/dequal/lite/index.min.js create mode 100644 node_modules/dequal/lite/index.mjs create mode 100644 node_modules/dequal/package.json create mode 100644 node_modules/dequal/readme.md create mode 100644 node_modules/devlop/license create mode 100644 node_modules/devlop/package.json create mode 100644 node_modules/devlop/readme.md create mode 100644 node_modules/eastasianwidth/README.md create mode 100644 node_modules/eastasianwidth/eastasianwidth.js create mode 100644 node_modules/eastasianwidth/package.json create mode 100644 node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/emoji-regex/README.md create mode 100644 node_modules/emoji-regex/RGI_Emoji.d.ts create mode 100644 node_modules/emoji-regex/RGI_Emoji.js create mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.d.ts create mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.js create mode 100644 node_modules/emoji-regex/es2015/index.d.ts create mode 100644 node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/emoji-regex/es2015/text.d.ts create mode 100644 node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/emoji-regex/index.js create mode 100644 node_modules/emoji-regex/package.json create mode 100644 node_modules/emoji-regex/text.d.ts create mode 100644 node_modules/emoji-regex/text.js create mode 100644 node_modules/entities/LICENSE create mode 100644 node_modules/entities/package.json create mode 100644 node_modules/entities/readme.md create mode 100644 node_modules/foreground-child/LICENSE create mode 100644 node_modules/foreground-child/README.md create mode 100644 node_modules/foreground-child/package.json create mode 100644 node_modules/glob/LICENSE create mode 100644 node_modules/glob/README.md create mode 100644 node_modules/glob/package.json create mode 100644 node_modules/ignore/LICENSE-MIT create mode 100644 node_modules/ignore/README.md create mode 100644 node_modules/ignore/index.d.ts create mode 100644 node_modules/ignore/index.js create mode 100644 node_modules/ignore/legacy.js create mode 100644 node_modules/ignore/package.json create mode 100644 node_modules/ini/LICENSE create mode 100644 node_modules/ini/README.md create mode 100644 node_modules/ini/package.json create mode 100644 node_modules/is-alphabetical/index.d.ts create mode 100644 node_modules/is-alphabetical/index.js create mode 100644 node_modules/is-alphabetical/license create mode 100644 node_modules/is-alphabetical/package.json create mode 100644 node_modules/is-alphabetical/readme.md create mode 100644 node_modules/is-alphanumerical/index.d.ts create mode 100644 node_modules/is-alphanumerical/index.js create mode 100644 node_modules/is-alphanumerical/license create mode 100644 node_modules/is-alphanumerical/package.json create mode 100644 node_modules/is-alphanumerical/readme.md create mode 100644 node_modules/is-decimal/index.d.ts create mode 100644 node_modules/is-decimal/index.js create mode 100644 node_modules/is-decimal/license create mode 100644 node_modules/is-decimal/package.json create mode 100644 node_modules/is-decimal/readme.md create mode 100644 node_modules/is-fullwidth-code-point/index.d.ts create mode 100644 node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/is-hexadecimal/index.d.ts create mode 100644 node_modules/is-hexadecimal/index.js create mode 100644 node_modules/is-hexadecimal/license create mode 100644 node_modules/is-hexadecimal/package.json create mode 100644 node_modules/is-hexadecimal/readme.md create mode 100644 node_modules/isexe/.npmignore create mode 100644 node_modules/isexe/LICENSE create mode 100644 node_modules/isexe/README.md create mode 100644 node_modules/isexe/index.js create mode 100644 node_modules/isexe/mode.js create mode 100644 node_modules/isexe/package.json create mode 100644 node_modules/isexe/test/basic.js create mode 100644 node_modules/isexe/windows.js create mode 100644 node_modules/jackspeak/LICENSE.md create mode 100644 node_modules/jackspeak/README.md create mode 100644 node_modules/jackspeak/package.json create mode 100644 node_modules/js-yaml/CHANGELOG.md create mode 100644 node_modules/js-yaml/LICENSE create mode 100644 node_modules/js-yaml/README.md create mode 100644 node_modules/js-yaml/index.js create mode 100644 node_modules/js-yaml/package.json create mode 100644 node_modules/jsonc-parser/CHANGELOG.md create mode 100644 node_modules/jsonc-parser/LICENSE.md create mode 100644 node_modules/jsonc-parser/README.md create mode 100644 node_modules/jsonc-parser/SECURITY.md create mode 100644 node_modules/jsonc-parser/package.json create mode 100644 node_modules/jsonpointer/LICENSE.md create mode 100644 node_modules/jsonpointer/README.md create mode 100644 node_modules/jsonpointer/jsonpointer.d.ts create mode 100644 node_modules/jsonpointer/jsonpointer.js create mode 100644 node_modules/jsonpointer/package.json create mode 100644 node_modules/katex/LICENSE create mode 100644 node_modules/katex/README.md create mode 100755 node_modules/katex/cli.js create mode 100644 node_modules/katex/contrib/auto-render/README.md create mode 100644 node_modules/katex/contrib/auto-render/auto-render.js create mode 100644 node_modules/katex/contrib/auto-render/index.html create mode 100644 node_modules/katex/contrib/auto-render/splitAtDelimiters.js create mode 100644 node_modules/katex/contrib/auto-render/test/auto-render-spec.js create mode 100644 node_modules/katex/contrib/copy-tex/README.md create mode 100644 node_modules/katex/contrib/copy-tex/copy-tex.js create mode 100644 node_modules/katex/contrib/copy-tex/index.html create mode 100644 node_modules/katex/contrib/copy-tex/katex2tex.js create mode 100644 node_modules/katex/contrib/mathtex-script-type/README.md create mode 100644 node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js create mode 100644 node_modules/katex/contrib/mhchem/README.md create mode 100644 node_modules/katex/contrib/mhchem/mhchem.js create mode 100644 node_modules/katex/contrib/render-a11y-string/render-a11y-string.js create mode 100644 node_modules/katex/contrib/render-a11y-string/test/render-a11y-string-spec.js create mode 100644 node_modules/katex/katex.js create mode 100644 node_modules/katex/node_modules/commander/LICENSE create mode 100644 node_modules/katex/node_modules/commander/Readme.md create mode 100644 node_modules/katex/node_modules/commander/esm.mjs create mode 100644 node_modules/katex/node_modules/commander/index.js create mode 100644 node_modules/katex/node_modules/commander/package-support.json create mode 100644 node_modules/katex/node_modules/commander/package.json create mode 100644 node_modules/katex/node_modules/commander/typings/index.d.ts create mode 100644 node_modules/katex/package.json create mode 100644 node_modules/katex/src/Lexer.js create mode 100644 node_modules/katex/src/MacroExpander.js create mode 100644 node_modules/katex/src/Namespace.js create mode 100644 node_modules/katex/src/Options.js create mode 100644 node_modules/katex/src/ParseError.js create mode 100644 node_modules/katex/src/Parser.js create mode 100644 node_modules/katex/src/Settings.js create mode 100644 node_modules/katex/src/SourceLocation.js create mode 100644 node_modules/katex/src/Style.js create mode 100644 node_modules/katex/src/Token.js create mode 100644 node_modules/katex/src/buildCommon.js create mode 100644 node_modules/katex/src/buildHTML.js create mode 100644 node_modules/katex/src/buildMathML.js create mode 100644 node_modules/katex/src/buildTree.js create mode 100644 node_modules/katex/src/defineEnvironment.js create mode 100644 node_modules/katex/src/defineFunction.js create mode 100644 node_modules/katex/src/defineMacro.js create mode 100644 node_modules/katex/src/delimiter.js create mode 100644 node_modules/katex/src/domTree.js create mode 100644 node_modules/katex/src/environments.js create mode 100644 node_modules/katex/src/environments/array.js create mode 100644 node_modules/katex/src/environments/cd.js create mode 100644 node_modules/katex/src/fontMetrics.js create mode 100644 node_modules/katex/src/fontMetricsData.js create mode 100644 node_modules/katex/src/fonts/Makefile create mode 100644 node_modules/katex/src/fonts/default.cfg create mode 100755 node_modules/katex/src/fonts/generate_fonts.py create mode 100755 node_modules/katex/src/fonts/makeBlacker create mode 100755 node_modules/katex/src/fonts/makeFF create mode 100644 node_modules/katex/src/fonts/xbbold.mf create mode 100644 node_modules/katex/src/functions.js create mode 100644 node_modules/katex/src/functions/accent.js create mode 100644 node_modules/katex/src/functions/accentunder.js create mode 100644 node_modules/katex/src/functions/arrow.js create mode 100644 node_modules/katex/src/functions/char.js create mode 100644 node_modules/katex/src/functions/color.js create mode 100644 node_modules/katex/src/functions/cr.js create mode 100644 node_modules/katex/src/functions/def.js create mode 100644 node_modules/katex/src/functions/delimsizing.js create mode 100644 node_modules/katex/src/functions/enclose.js create mode 100644 node_modules/katex/src/functions/environment.js create mode 100644 node_modules/katex/src/functions/font.js create mode 100644 node_modules/katex/src/functions/genfrac.js create mode 100644 node_modules/katex/src/functions/hbox.js create mode 100644 node_modules/katex/src/functions/horizBrace.js create mode 100644 node_modules/katex/src/functions/href.js create mode 100644 node_modules/katex/src/functions/html.js create mode 100644 node_modules/katex/src/functions/htmlmathml.js create mode 100644 node_modules/katex/src/functions/includegraphics.js create mode 100644 node_modules/katex/src/functions/kern.js create mode 100644 node_modules/katex/src/functions/lap.js create mode 100644 node_modules/katex/src/functions/math.js create mode 100644 node_modules/katex/src/functions/mathchoice.js create mode 100644 node_modules/katex/src/functions/mclass.js create mode 100644 node_modules/katex/src/functions/op.js create mode 100644 node_modules/katex/src/functions/operatorname.js create mode 100644 node_modules/katex/src/functions/ordgroup.js create mode 100644 node_modules/katex/src/functions/overline.js create mode 100644 node_modules/katex/src/functions/phantom.js create mode 100644 node_modules/katex/src/functions/pmb.js create mode 100644 node_modules/katex/src/functions/raisebox.js create mode 100644 node_modules/katex/src/functions/relax.js create mode 100644 node_modules/katex/src/functions/rule.js create mode 100644 node_modules/katex/src/functions/sizing.js create mode 100644 node_modules/katex/src/functions/smash.js create mode 100644 node_modules/katex/src/functions/sqrt.js create mode 100644 node_modules/katex/src/functions/styling.js create mode 100644 node_modules/katex/src/functions/supsub.js create mode 100644 node_modules/katex/src/functions/symbolsOp.js create mode 100644 node_modules/katex/src/functions/symbolsOrd.js create mode 100644 node_modules/katex/src/functions/symbolsSpacing.js create mode 100644 node_modules/katex/src/functions/tag.js create mode 100644 node_modules/katex/src/functions/text.js create mode 100644 node_modules/katex/src/functions/underline.js create mode 100644 node_modules/katex/src/functions/utils/assembleSupSub.js create mode 100644 node_modules/katex/src/functions/vcenter.js create mode 100644 node_modules/katex/src/functions/verb.js create mode 100644 node_modules/katex/src/macros.js create mode 100644 node_modules/katex/src/mathMLTree.js create mode 100644 node_modules/katex/src/metrics/README.md create mode 100755 node_modules/katex/src/metrics/extract_tfms.py create mode 100755 node_modules/katex/src/metrics/extract_ttfs.py create mode 100755 node_modules/katex/src/metrics/format_json.py create mode 100755 node_modules/katex/src/metrics/mapping.pl create mode 100644 node_modules/katex/src/metrics/parse_tfm.py create mode 100644 node_modules/katex/src/parseNode.js create mode 100644 node_modules/katex/src/parseTree.js create mode 100644 node_modules/katex/src/spacingData.js create mode 100644 node_modules/katex/src/stretchy.js create mode 100644 node_modules/katex/src/styles/fonts.scss create mode 100644 node_modules/katex/src/styles/katex.scss create mode 100644 node_modules/katex/src/svgGeometry.js create mode 100644 node_modules/katex/src/symbols.js create mode 100644 node_modules/katex/src/tree.js create mode 100644 node_modules/katex/src/types.js create mode 100644 node_modules/katex/src/unicodeAccents.js create mode 100644 node_modules/katex/src/unicodeScripts.js create mode 100644 node_modules/katex/src/unicodeSupOrSub.js create mode 100644 node_modules/katex/src/unicodeSymbols.js create mode 100644 node_modules/katex/src/units.js create mode 100644 node_modules/katex/src/utils.js create mode 100644 node_modules/katex/src/wide-character.js create mode 100644 node_modules/katex/types/katex.d.ts create mode 100644 node_modules/linkify-it/LICENSE create mode 100644 node_modules/linkify-it/README.md create mode 100644 node_modules/linkify-it/index.mjs create mode 100644 node_modules/linkify-it/package.json create mode 100644 node_modules/lru-cache/LICENSE create mode 100644 node_modules/lru-cache/README.md create mode 100644 node_modules/lru-cache/package.json create mode 100644 node_modules/markdown-it/LICENSE create mode 100644 node_modules/markdown-it/README.md create mode 100644 node_modules/markdown-it/index.mjs create mode 100644 node_modules/markdown-it/package.json create mode 100644 node_modules/markdownlint-cli/LICENSE create mode 100644 node_modules/markdownlint-cli/README.md create mode 100755 node_modules/markdownlint-cli/markdownlint.js create mode 100644 node_modules/markdownlint-cli/package.json create mode 100644 node_modules/markdownlint/CHANGELOG.md create mode 100644 node_modules/markdownlint/CONTRIBUTING.md create mode 100644 node_modules/markdownlint/LICENSE create mode 100644 node_modules/markdownlint/README.md create mode 100644 node_modules/markdownlint/doc/CustomRules.md create mode 100644 node_modules/markdownlint/doc/Prettier.md create mode 100644 node_modules/markdownlint/doc/ReleaseProcess.md create mode 100644 node_modules/markdownlint/doc/Rules.md create mode 100644 node_modules/markdownlint/doc/md001.md create mode 100644 node_modules/markdownlint/doc/md003.md create mode 100644 node_modules/markdownlint/doc/md004.md create mode 100644 node_modules/markdownlint/doc/md005.md create mode 100644 node_modules/markdownlint/doc/md007.md create mode 100644 node_modules/markdownlint/doc/md009.md create mode 100644 node_modules/markdownlint/doc/md010.md create mode 100644 node_modules/markdownlint/doc/md011.md create mode 100644 node_modules/markdownlint/doc/md012.md create mode 100644 node_modules/markdownlint/doc/md013.md create mode 100644 node_modules/markdownlint/doc/md014.md create mode 100644 node_modules/markdownlint/doc/md018.md create mode 100644 node_modules/markdownlint/doc/md019.md create mode 100644 node_modules/markdownlint/doc/md020.md create mode 100644 node_modules/markdownlint/doc/md021.md create mode 100644 node_modules/markdownlint/doc/md022.md create mode 100644 node_modules/markdownlint/doc/md023.md create mode 100644 node_modules/markdownlint/doc/md024.md create mode 100644 node_modules/markdownlint/doc/md025.md create mode 100644 node_modules/markdownlint/doc/md026.md create mode 100644 node_modules/markdownlint/doc/md027.md create mode 100644 node_modules/markdownlint/doc/md028.md create mode 100644 node_modules/markdownlint/doc/md029.md create mode 100644 node_modules/markdownlint/doc/md030.md create mode 100644 node_modules/markdownlint/doc/md031.md create mode 100644 node_modules/markdownlint/doc/md032.md create mode 100644 node_modules/markdownlint/doc/md033.md create mode 100644 node_modules/markdownlint/doc/md034.md create mode 100644 node_modules/markdownlint/doc/md035.md create mode 100644 node_modules/markdownlint/doc/md036.md create mode 100644 node_modules/markdownlint/doc/md037.md create mode 100644 node_modules/markdownlint/doc/md038.md create mode 100644 node_modules/markdownlint/doc/md039.md create mode 100644 node_modules/markdownlint/doc/md040.md create mode 100644 node_modules/markdownlint/doc/md041.md create mode 100644 node_modules/markdownlint/doc/md042.md create mode 100644 node_modules/markdownlint/doc/md043.md create mode 100644 node_modules/markdownlint/doc/md044.md create mode 100644 node_modules/markdownlint/doc/md045.md create mode 100644 node_modules/markdownlint/doc/md046.md create mode 100644 node_modules/markdownlint/doc/md047.md create mode 100644 node_modules/markdownlint/doc/md048.md create mode 100644 node_modules/markdownlint/doc/md049.md create mode 100644 node_modules/markdownlint/doc/md050.md create mode 100644 node_modules/markdownlint/doc/md051.md create mode 100644 node_modules/markdownlint/doc/md052.md create mode 100644 node_modules/markdownlint/doc/md053.md create mode 100644 node_modules/markdownlint/doc/md054.md create mode 100644 node_modules/markdownlint/doc/md055.md create mode 100644 node_modules/markdownlint/doc/md056.md create mode 100644 node_modules/markdownlint/doc/md058.md create mode 100644 node_modules/markdownlint/helpers/LICENSE create mode 100644 node_modules/markdownlint/helpers/README.md create mode 100644 node_modules/markdownlint/helpers/helpers.cjs create mode 100644 node_modules/markdownlint/helpers/micromark-helpers.cjs create mode 100644 node_modules/markdownlint/helpers/package.json create mode 100644 node_modules/markdownlint/helpers/shared.cjs create mode 100644 node_modules/markdownlint/package.json create mode 100644 node_modules/markdownlint/schema/.markdownlint.jsonc create mode 100644 node_modules/markdownlint/schema/.markdownlint.yaml create mode 100644 node_modules/markdownlint/schema/ValidatingConfiguration.md create mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema-strict.json create mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema.json create mode 100644 node_modules/markdownlint/style/all.json create mode 100644 node_modules/markdownlint/style/cirosantilli.json create mode 100644 node_modules/markdownlint/style/prettier.json create mode 100644 node_modules/markdownlint/style/relaxed.json create mode 100644 node_modules/mdurl/LICENSE create mode 100644 node_modules/mdurl/README.md create mode 100644 node_modules/mdurl/index.mjs create mode 100644 node_modules/mdurl/package.json create mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts create mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts.map create mode 100644 node_modules/micromark-core-commonmark/dev/index.js create mode 100644 node_modules/micromark-core-commonmark/index.d.ts create mode 100644 node_modules/micromark-core-commonmark/index.d.ts.map create mode 100644 node_modules/micromark-core-commonmark/index.js create mode 100644 node_modules/micromark-core-commonmark/license create mode 100644 node_modules/micromark-core-commonmark/package.json create mode 100644 node_modules/micromark-core-commonmark/readme.md create mode 100644 node_modules/micromark-extension-directive/dev/index.d.ts create mode 100644 node_modules/micromark-extension-directive/dev/index.js create mode 100644 node_modules/micromark-extension-directive/index.d.ts create mode 100644 node_modules/micromark-extension-directive/index.js create mode 100644 node_modules/micromark-extension-directive/license create mode 100644 node_modules/micromark-extension-directive/package.json create mode 100644 node_modules/micromark-extension-directive/readme.md create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.js create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.js create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/license create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/package.json create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/readme.md create mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.js create mode 100644 node_modules/micromark-extension-gfm-footnote/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-footnote/index.js create mode 100644 node_modules/micromark-extension-gfm-footnote/license create mode 100644 node_modules/micromark-extension-gfm-footnote/package.json create mode 100644 node_modules/micromark-extension-gfm-footnote/readme.md create mode 100644 node_modules/micromark-extension-gfm-table/dev/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-table/dev/index.js create mode 100644 node_modules/micromark-extension-gfm-table/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-table/index.js create mode 100644 node_modules/micromark-extension-gfm-table/license create mode 100644 node_modules/micromark-extension-gfm-table/package.json create mode 100644 node_modules/micromark-extension-gfm-table/readme.md create mode 100644 node_modules/micromark-extension-math/dev/index.d.ts create mode 100644 node_modules/micromark-extension-math/dev/index.js create mode 100644 node_modules/micromark-extension-math/index.d.ts create mode 100644 node_modules/micromark-extension-math/index.js create mode 100644 node_modules/micromark-extension-math/license create mode 100644 node_modules/micromark-extension-math/package.json create mode 100644 node_modules/micromark-extension-math/readme.md create mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts create mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-destination/dev/index.js create mode 100644 node_modules/micromark-factory-destination/index.d.ts create mode 100644 node_modules/micromark-factory-destination/index.d.ts.map create mode 100644 node_modules/micromark-factory-destination/index.js create mode 100644 node_modules/micromark-factory-destination/license create mode 100644 node_modules/micromark-factory-destination/package.json create mode 100644 node_modules/micromark-factory-destination/readme.md create mode 100644 node_modules/micromark-factory-label/dev/index.d.ts create mode 100644 node_modules/micromark-factory-label/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-label/dev/index.js create mode 100644 node_modules/micromark-factory-label/index.d.ts create mode 100644 node_modules/micromark-factory-label/index.d.ts.map create mode 100644 node_modules/micromark-factory-label/index.js create mode 100644 node_modules/micromark-factory-label/license create mode 100644 node_modules/micromark-factory-label/package.json create mode 100644 node_modules/micromark-factory-label/readme.md create mode 100644 node_modules/micromark-factory-space/dev/index.d.ts create mode 100644 node_modules/micromark-factory-space/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-space/dev/index.js create mode 100644 node_modules/micromark-factory-space/index.d.ts create mode 100644 node_modules/micromark-factory-space/index.d.ts.map create mode 100644 node_modules/micromark-factory-space/index.js create mode 100644 node_modules/micromark-factory-space/license create mode 100644 node_modules/micromark-factory-space/package.json create mode 100644 node_modules/micromark-factory-space/readme.md create mode 100644 node_modules/micromark-factory-title/dev/index.d.ts create mode 100644 node_modules/micromark-factory-title/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-title/dev/index.js create mode 100644 node_modules/micromark-factory-title/index.d.ts create mode 100644 node_modules/micromark-factory-title/index.d.ts.map create mode 100644 node_modules/micromark-factory-title/index.js create mode 100644 node_modules/micromark-factory-title/license create mode 100644 node_modules/micromark-factory-title/package.json create mode 100644 node_modules/micromark-factory-title/readme.md create mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts create mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-whitespace/dev/index.js create mode 100644 node_modules/micromark-factory-whitespace/index.d.ts create mode 100644 node_modules/micromark-factory-whitespace/index.d.ts.map create mode 100644 node_modules/micromark-factory-whitespace/index.js create mode 100644 node_modules/micromark-factory-whitespace/license create mode 100644 node_modules/micromark-factory-whitespace/package.json create mode 100644 node_modules/micromark-factory-whitespace/readme.md create mode 100644 node_modules/micromark-util-character/dev/index.d.ts create mode 100644 node_modules/micromark-util-character/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-character/dev/index.js create mode 100644 node_modules/micromark-util-character/index.d.ts create mode 100644 node_modules/micromark-util-character/index.d.ts.map create mode 100644 node_modules/micromark-util-character/index.js create mode 100644 node_modules/micromark-util-character/license create mode 100644 node_modules/micromark-util-character/package.json create mode 100644 node_modules/micromark-util-character/readme.md create mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts create mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-chunked/dev/index.js create mode 100644 node_modules/micromark-util-chunked/index.d.ts create mode 100644 node_modules/micromark-util-chunked/index.d.ts.map create mode 100644 node_modules/micromark-util-chunked/index.js create mode 100644 node_modules/micromark-util-chunked/license create mode 100644 node_modules/micromark-util-chunked/package.json create mode 100644 node_modules/micromark-util-chunked/readme.md create mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts create mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-classify-character/dev/index.js create mode 100644 node_modules/micromark-util-classify-character/index.d.ts create mode 100644 node_modules/micromark-util-classify-character/index.d.ts.map create mode 100644 node_modules/micromark-util-classify-character/index.js create mode 100644 node_modules/micromark-util-classify-character/license create mode 100644 node_modules/micromark-util-classify-character/package.json create mode 100644 node_modules/micromark-util-classify-character/readme.md create mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts create mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts.map create mode 100644 node_modules/micromark-util-combine-extensions/index.js create mode 100644 node_modules/micromark-util-combine-extensions/license create mode 100644 node_modules/micromark-util-combine-extensions/package.json create mode 100644 node_modules/micromark-util-combine-extensions/readme.md create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.js create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.js create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/license create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/package.json create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/readme.md create mode 100644 node_modules/micromark-util-encode/index.d.ts create mode 100644 node_modules/micromark-util-encode/index.d.ts.map create mode 100644 node_modules/micromark-util-encode/index.js create mode 100644 node_modules/micromark-util-encode/license create mode 100644 node_modules/micromark-util-encode/package.json create mode 100644 node_modules/micromark-util-encode/readme.md create mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts create mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts.map create mode 100644 node_modules/micromark-util-html-tag-name/index.js create mode 100644 node_modules/micromark-util-html-tag-name/license create mode 100644 node_modules/micromark-util-html-tag-name/package.json create mode 100644 node_modules/micromark-util-html-tag-name/readme.md create mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts create mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.js create mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts create mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts.map create mode 100644 node_modules/micromark-util-normalize-identifier/index.js create mode 100644 node_modules/micromark-util-normalize-identifier/license create mode 100644 node_modules/micromark-util-normalize-identifier/package.json create mode 100644 node_modules/micromark-util-normalize-identifier/readme.md create mode 100644 node_modules/micromark-util-resolve-all/index.d.ts create mode 100644 node_modules/micromark-util-resolve-all/index.d.ts.map create mode 100644 node_modules/micromark-util-resolve-all/index.js create mode 100644 node_modules/micromark-util-resolve-all/license create mode 100644 node_modules/micromark-util-resolve-all/package.json create mode 100644 node_modules/micromark-util-resolve-all/readme.md create mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts create mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.js create mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts create mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts.map create mode 100644 node_modules/micromark-util-sanitize-uri/index.js create mode 100644 node_modules/micromark-util-sanitize-uri/license create mode 100644 node_modules/micromark-util-sanitize-uri/package.json create mode 100644 node_modules/micromark-util-sanitize-uri/readme.md create mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts create mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-subtokenize/dev/index.js create mode 100644 node_modules/micromark-util-subtokenize/index.d.ts create mode 100644 node_modules/micromark-util-subtokenize/index.d.ts.map create mode 100644 node_modules/micromark-util-subtokenize/index.js create mode 100644 node_modules/micromark-util-subtokenize/license create mode 100644 node_modules/micromark-util-subtokenize/package.json create mode 100644 node_modules/micromark-util-subtokenize/readme.md create mode 100644 node_modules/micromark-util-symbol/license create mode 100644 node_modules/micromark-util-symbol/package.json create mode 100644 node_modules/micromark-util-symbol/readme.md create mode 100644 node_modules/micromark-util-types/index.d.ts create mode 100644 node_modules/micromark-util-types/index.js create mode 100644 node_modules/micromark-util-types/license create mode 100644 node_modules/micromark-util-types/package.json create mode 100644 node_modules/micromark-util-types/readme.md create mode 100644 node_modules/micromark/dev/index.d.ts create mode 100644 node_modules/micromark/dev/index.d.ts.map create mode 100644 node_modules/micromark/dev/index.js create mode 100644 node_modules/micromark/dev/stream.d.ts create mode 100644 node_modules/micromark/dev/stream.d.ts.map create mode 100644 node_modules/micromark/dev/stream.js create mode 100644 node_modules/micromark/index.d.ts create mode 100644 node_modules/micromark/index.d.ts.map create mode 100644 node_modules/micromark/index.js create mode 100644 node_modules/micromark/license create mode 100644 node_modules/micromark/package.json create mode 100644 node_modules/micromark/readme.md create mode 100644 node_modules/micromark/stream.d.ts create mode 100644 node_modules/micromark/stream.d.ts.map create mode 100644 node_modules/micromark/stream.js create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/minimist/.eslintrc create mode 100644 node_modules/minimist/.github/FUNDING.yml create mode 100644 node_modules/minimist/.nycrc create mode 100644 node_modules/minimist/CHANGELOG.md create mode 100644 node_modules/minimist/LICENSE create mode 100644 node_modules/minimist/README.md create mode 100644 node_modules/minimist/example/parse.js create mode 100644 node_modules/minimist/index.js create mode 100644 node_modules/minimist/package.json create mode 100644 node_modules/minimist/test/all_bool.js create mode 100644 node_modules/minimist/test/bool.js create mode 100644 node_modules/minimist/test/dash.js create mode 100644 node_modules/minimist/test/default_bool.js create mode 100644 node_modules/minimist/test/dotted.js create mode 100644 node_modules/minimist/test/kv_short.js create mode 100644 node_modules/minimist/test/long.js create mode 100644 node_modules/minimist/test/num.js create mode 100644 node_modules/minimist/test/parse.js create mode 100644 node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/minimist/test/proto.js create mode 100644 node_modules/minimist/test/short.js create mode 100644 node_modules/minimist/test/stop_early.js create mode 100644 node_modules/minimist/test/unknown.js create mode 100644 node_modules/minimist/test/whitespace.js create mode 100644 node_modules/minipass/LICENSE create mode 100644 node_modules/minipass/README.md create mode 100644 node_modules/minipass/package.json create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/package-json-from-dist/LICENSE.md create mode 100644 node_modules/package-json-from-dist/README.md create mode 100644 node_modules/package-json-from-dist/package.json create mode 100644 node_modules/parse-entities/index.d.ts create mode 100644 node_modules/parse-entities/index.js create mode 100644 node_modules/parse-entities/license create mode 100644 node_modules/parse-entities/package.json create mode 100644 node_modules/parse-entities/readme.md create mode 100644 node_modules/path-key/index.d.ts create mode 100644 node_modules/path-key/index.js create mode 100644 node_modules/path-key/license create mode 100644 node_modules/path-key/package.json create mode 100644 node_modules/path-key/readme.md create mode 100644 node_modules/path-scurry/LICENSE.md create mode 100644 node_modules/path-scurry/README.md create mode 100644 node_modules/path-scurry/package.json create mode 100644 node_modules/punycode.js/LICENSE-MIT.txt create mode 100644 node_modules/punycode.js/README.md create mode 100644 node_modules/punycode.js/package.json create mode 100644 node_modules/punycode.js/punycode.es6.js create mode 100644 node_modules/punycode.js/punycode.js create mode 100644 node_modules/run-con/.circleci/config.yml create mode 100644 node_modules/run-con/.github/FUNDING.yml create mode 100644 node_modules/run-con/.github/dependabot.yml create mode 100644 node_modules/run-con/.github/workflows/coverage.yml create mode 100644 node_modules/run-con/.github/workflows/dependabot.yml create mode 100644 node_modules/run-con/.github/workflows/issuehunt.yml create mode 100644 node_modules/run-con/LICENSE.APACHE2 create mode 100644 node_modules/run-con/LICENSE.BSD create mode 100644 node_modules/run-con/LICENSE.MIT create mode 100644 node_modules/run-con/README.md create mode 100644 node_modules/run-con/browser.js create mode 100755 node_modules/run-con/cli.js create mode 100644 node_modules/run-con/index.js create mode 100644 node_modules/run-con/package.json create mode 100644 node_modules/run-con/renovate.json create mode 100644 node_modules/shebang-command/index.js create mode 100644 node_modules/shebang-command/license create mode 100644 node_modules/shebang-command/package.json create mode 100644 node_modules/shebang-command/readme.md create mode 100644 node_modules/shebang-regex/index.d.ts create mode 100644 node_modules/shebang-regex/index.js create mode 100644 node_modules/shebang-regex/license create mode 100644 node_modules/shebang-regex/package.json create mode 100644 node_modules/shebang-regex/readme.md create mode 100644 node_modules/signal-exit/LICENSE.txt create mode 100644 node_modules/signal-exit/README.md create mode 100644 node_modules/signal-exit/package.json create mode 100644 node_modules/smol-toml/LICENSE create mode 100644 node_modules/smol-toml/README.md create mode 100644 node_modules/smol-toml/package.json create mode 100644 node_modules/string-width-cjs/index.d.ts create mode 100644 node_modules/string-width-cjs/index.js create mode 100644 node_modules/string-width-cjs/license create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/README.md create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/package.json create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/text.js create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.js create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/license create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/package.json create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/readme.md create mode 100644 node_modules/string-width-cjs/package.json create mode 100644 node_modules/string-width-cjs/readme.md create mode 100644 node_modules/string-width/index.d.ts create mode 100644 node_modules/string-width/index.js create mode 100644 node_modules/string-width/license create mode 100644 node_modules/string-width/package.json create mode 100644 node_modules/string-width/readme.md create mode 100644 node_modules/strip-ansi-cjs/index.d.ts create mode 100644 node_modules/strip-ansi-cjs/index.js create mode 100644 node_modules/strip-ansi-cjs/license create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/strip-ansi-cjs/package.json create mode 100644 node_modules/strip-ansi-cjs/readme.md create mode 100644 node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/strip-ansi/index.js create mode 100644 node_modules/strip-ansi/license create mode 100644 node_modules/strip-ansi/package.json create mode 100644 node_modules/strip-ansi/readme.md create mode 100644 node_modules/strip-json-comments/index.d.ts create mode 100644 node_modules/strip-json-comments/index.js create mode 100644 node_modules/strip-json-comments/license create mode 100644 node_modules/strip-json-comments/package.json create mode 100644 node_modules/strip-json-comments/readme.md create mode 100644 node_modules/uc.micro/LICENSE.txt create mode 100644 node_modules/uc.micro/README.md create mode 100644 node_modules/uc.micro/categories/Cc/regex.mjs create mode 100644 node_modules/uc.micro/categories/Cf/regex.mjs create mode 100644 node_modules/uc.micro/categories/P/regex.mjs create mode 100644 node_modules/uc.micro/categories/S/regex.mjs create mode 100644 node_modules/uc.micro/categories/Z/regex.mjs create mode 100644 node_modules/uc.micro/index.mjs create mode 100644 node_modules/uc.micro/package.json create mode 100644 node_modules/uc.micro/properties/Any/regex.mjs create mode 100644 node_modules/which/CHANGELOG.md create mode 100644 node_modules/which/LICENSE create mode 100644 node_modules/which/README.md create mode 100644 node_modules/which/package.json create mode 100644 node_modules/which/which.js create mode 100755 node_modules/wrap-ansi-cjs/index.js create mode 100644 node_modules/wrap-ansi-cjs/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md create mode 100644 node_modules/wrap-ansi-cjs/package.json create mode 100644 node_modules/wrap-ansi-cjs/readme.md create mode 100644 node_modules/wrap-ansi/index.d.ts create mode 100755 node_modules/wrap-ansi/index.js create mode 100644 node_modules/wrap-ansi/license create mode 100644 node_modules/wrap-ansi/package.json create mode 100644 node_modules/wrap-ansi/readme.md create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index 7043f0e7d4..10f45797b7 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,6 @@ htmlcov pyiceberg/avro/decoder_fast.c pyiceberg/avro/*.html pyiceberg/avro/*.so + +# node modules +node_modules/ \ No newline at end of file diff --git a/node_modules/.bin/glob b/node_modules/.bin/glob new file mode 120000 index 0000000000..85c9c1db30 --- /dev/null +++ b/node_modules/.bin/glob @@ -0,0 +1 @@ +../glob/dist/esm/bin.mjs \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml new file mode 120000 index 0000000000..9dbd010d47 --- /dev/null +++ b/node_modules/.bin/js-yaml @@ -0,0 +1 @@ +../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/katex b/node_modules/.bin/katex new file mode 120000 index 0000000000..891ac1324e --- /dev/null +++ b/node_modules/.bin/katex @@ -0,0 +1 @@ +../katex/cli.js \ No newline at end of file diff --git a/node_modules/.bin/markdown-it b/node_modules/.bin/markdown-it new file mode 120000 index 0000000000..8a641084ea --- /dev/null +++ b/node_modules/.bin/markdown-it @@ -0,0 +1 @@ +../markdown-it/bin/markdown-it.mjs \ No newline at end of file diff --git a/node_modules/.bin/markdownlint b/node_modules/.bin/markdownlint new file mode 120000 index 0000000000..f2b1093a66 --- /dev/null +++ b/node_modules/.bin/markdownlint @@ -0,0 +1 @@ +../markdownlint-cli/markdownlint.js \ No newline at end of file diff --git a/node_modules/.bin/node-which b/node_modules/.bin/node-which new file mode 120000 index 0000000000..6f8415ec58 --- /dev/null +++ b/node_modules/.bin/node-which @@ -0,0 +1 @@ +../which/bin/node-which \ No newline at end of file diff --git a/node_modules/.bin/run-con b/node_modules/.bin/run-con new file mode 120000 index 0000000000..85da8da1e2 --- /dev/null +++ b/node_modules/.bin/run-con @@ -0,0 +1 @@ +../run-con/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000000..acdb98746d --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,1415 @@ +{ + "name": "iceberg-python", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/katex": { + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", + "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", + "license": "MIT", + "dependencies": { + "markdown-it": "14.1.0", + "micromark": "4.0.1", + "micromark-core-commonmark": "2.0.2", + "micromark-extension-directive": "3.0.2", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.0", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli": { + "version": "0.44.0", + "resolved": "git+ssh://git@github.com/igorshubovych/markdownlint-cli.git#586c3ea3f51230da42bab657c6a32e9e66c364f0", + "license": "MIT", + "dependencies": { + "commander": "~13.1.0", + "glob": "~10.4.5", + "ignore": "~7.0.3", + "js-yaml": "~4.1.0", + "jsonc-parser": "~3.3.1", + "jsonpointer": "~5.0.1", + "markdownlint": "~0.37.4", + "minimatch": "~9.0.5", + "run-con": "~1.3.2", + "smol-toml": "~1.3.1" + }, + "bin": { + "markdownlint": "markdownlint.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", + "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-con": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", + "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~4.1.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + }, + "bin": { + "run-con": "cli.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smol-toml": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", + "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/node_modules/@isaacs/cliui/LICENSE.txt b/node_modules/@isaacs/cliui/LICENSE.txt new file mode 100644 index 0000000000..c7e27478a3 --- /dev/null +++ b/node_modules/@isaacs/cliui/LICENSE.txt @@ -0,0 +1,14 @@ +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/@isaacs/cliui/README.md b/node_modules/@isaacs/cliui/README.md new file mode 100644 index 0000000000..488064267d --- /dev/null +++ b/node_modules/@isaacs/cliui/README.md @@ -0,0 +1,143 @@ +# @isaacs/cliui + +Temporary fork of [cliui](http://npm.im/cliui). + +![ci](https://github.com/yargs/cliui/workflows/ci/badge.svg) +[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui) +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) +![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/cliui) + +easily create complex multi-column command-line-interfaces. + +## Example + +```js +const ui = require('cliui')() + +ui.div('Usage: $0 [command] [options]') + +ui.div({ + text: 'Options:', + padding: [2, 0, 1, 0] +}) + +ui.div( + { + text: "-f, --file", + width: 20, + padding: [0, 4, 0, 4] + }, + { + text: "the file to load." + + chalk.green("(if this description is long it wraps).") + , + width: 20 + }, + { + text: chalk.red("[required]"), + align: 'right' + } +) + +console.log(ui.toString()) +``` + +## Deno/ESM Support + +As of `v7` `cliui` supports [Deno](https://github.com/denoland/deno) and +[ESM](https://nodejs.org/api/esm.html#esm_ecmascript_modules): + +```typescript +import cliui from "https://deno.land/x/cliui/deno.ts"; + +const ui = cliui({}) + +ui.div('Usage: $0 [command] [options]') + +ui.div({ + text: 'Options:', + padding: [2, 0, 1, 0] +}) + +ui.div({ + text: "-f, --file", + width: 20, + padding: [0, 4, 0, 4] +}) + +console.log(ui.toString()) +``` + + + +## Layout DSL + +cliui exposes a simple layout DSL: + +If you create a single `ui.div`, passing a string rather than an +object: + +* `\n`: characters will be interpreted as new rows. +* `\t`: characters will be interpreted as new columns. +* `\s`: characters will be interpreted as padding. + +**as an example...** + +```js +var ui = require('./')({ + width: 60 +}) + +ui.div( + 'Usage: node ./bin/foo.js\n' + + ' \t provide a regex\n' + + ' \t provide a glob\t [required]' +) + +console.log(ui.toString()) +``` + +**will output:** + +```shell +Usage: node ./bin/foo.js + provide a regex + provide a glob [required] +``` + +## Methods + +```js +cliui = require('cliui') +``` + +### cliui({width: integer}) + +Specify the maximum width of the UI being generated. +If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`. + +### cliui({wrap: boolean}) + +Enable or disable the wrapping of text in a column. + +### cliui.div(column, column, column) + +Create a row with any number of columns, a column +can either be a string, or an object with the following +options: + +* **text:** some text to place in the column. +* **width:** the width of a column. +* **align:** alignment, `right` or `center`. +* **padding:** `[top, right, bottom, left]`. +* **border:** should a border be placed around the div? + +### cliui.span(column, column, column) + +Similar to `div`, except the next row will be appended without +a new line being created. + +### cliui.resetOutput() + +Resets the UI elements of the current cliui instance, maintaining the values +set for `width` and `wrap`. diff --git a/node_modules/@isaacs/cliui/index.mjs b/node_modules/@isaacs/cliui/index.mjs new file mode 100644 index 0000000000..5177519af3 --- /dev/null +++ b/node_modules/@isaacs/cliui/index.mjs @@ -0,0 +1,14 @@ +// Bootstrap cliui with ESM dependencies: +import { cliui } from './build/lib/index.js' + +import stringWidth from 'string-width' +import stripAnsi from 'strip-ansi' +import wrap from 'wrap-ansi' + +export default function ui (opts) { + return cliui(opts, { + stringWidth, + stripAnsi, + wrap + }) +} diff --git a/node_modules/@isaacs/cliui/package.json b/node_modules/@isaacs/cliui/package.json new file mode 100644 index 0000000000..7a952532de --- /dev/null +++ b/node_modules/@isaacs/cliui/package.json @@ -0,0 +1,86 @@ +{ + "name": "@isaacs/cliui", + "version": "8.0.2", + "description": "easily create complex multi-column command-line-interfaces", + "main": "build/index.cjs", + "exports": { + ".": [ + { + "import": "./index.mjs", + "require": "./build/index.cjs" + }, + "./build/index.cjs" + ] + }, + "type": "module", + "module": "./index.mjs", + "scripts": { + "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'", + "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'", + "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", + "test": "c8 mocha ./test/*.cjs", + "test:esm": "c8 mocha ./test/**/*.mjs", + "postest": "check", + "coverage": "c8 report --check-coverage", + "precompile": "rimraf build", + "compile": "tsc", + "postcompile": "npm run build:cjs", + "build:cjs": "rollup -c", + "prepare": "npm run compile" + }, + "repository": "yargs/cliui", + "standard": { + "ignore": [ + "**/example/**" + ], + "globals": [ + "it" + ] + }, + "keywords": [ + "cli", + "command-line", + "layout", + "design", + "console", + "wrap", + "table" + ], + "author": "Ben Coe ", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "devDependencies": { + "@types/node": "^14.0.27", + "@typescript-eslint/eslint-plugin": "^4.0.0", + "@typescript-eslint/parser": "^4.0.0", + "c8": "^7.3.0", + "chai": "^4.2.0", + "chalk": "^4.1.0", + "cross-env": "^7.0.2", + "eslint": "^7.6.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0", + "gts": "^3.0.0", + "mocha": "^10.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.23.1", + "rollup-plugin-ts": "^3.0.2", + "standardx": "^7.0.0", + "typescript": "^4.0.0" + }, + "files": [ + "build", + "index.mjs", + "!*.d.ts" + ], + "engines": { + "node": ">=12" + } +} diff --git a/node_modules/@pkgjs/parseargs/.editorconfig b/node_modules/@pkgjs/parseargs/.editorconfig new file mode 100644 index 0000000000..b140163905 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/.editorconfig @@ -0,0 +1,14 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Copied from Node.js to ease compatibility in PR. +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/node_modules/@pkgjs/parseargs/CHANGELOG.md b/node_modules/@pkgjs/parseargs/CHANGELOG.md new file mode 100644 index 0000000000..2adc7d3273 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/CHANGELOG.md @@ -0,0 +1,147 @@ +# Changelog + +## [0.11.0](https://github.com/pkgjs/parseargs/compare/v0.10.0...v0.11.0) (2022-10-08) + + +### Features + +* add `default` option parameter ([#142](https://github.com/pkgjs/parseargs/issues/142)) ([cd20847](https://github.com/pkgjs/parseargs/commit/cd20847a00b2f556aa9c085ac83b942c60868ec1)) + +## [0.10.0](https://github.com/pkgjs/parseargs/compare/v0.9.1...v0.10.0) (2022-07-21) + + +### Features + +* add parsed meta-data to returned properties ([#129](https://github.com/pkgjs/parseargs/issues/129)) ([91bfb4d](https://github.com/pkgjs/parseargs/commit/91bfb4d3f7b6937efab1b27c91c45d1205f1497e)) + +## [0.9.1](https://github.com/pkgjs/parseargs/compare/v0.9.0...v0.9.1) (2022-06-20) + + +### Bug Fixes + +* **runtime:** support node 14+ ([#135](https://github.com/pkgjs/parseargs/issues/135)) ([6a1c5a6](https://github.com/pkgjs/parseargs/commit/6a1c5a6f7cadf2f035e004027e2742e3c4ce554b)) + +## [0.9.0](https://github.com/pkgjs/parseargs/compare/v0.8.0...v0.9.0) (2022-05-23) + + +### ⚠ BREAKING CHANGES + +* drop handling of electron arguments (#121) + +### Code Refactoring + +* drop handling of electron arguments ([#121](https://github.com/pkgjs/parseargs/issues/121)) ([a2ffd53](https://github.com/pkgjs/parseargs/commit/a2ffd537c244a062371522b955acb45a404fc9f2)) + +## [0.8.0](https://github.com/pkgjs/parseargs/compare/v0.7.1...v0.8.0) (2022-05-16) + + +### ⚠ BREAKING CHANGES + +* switch type:string option arguments to greedy, but with error for suspect cases in strict mode (#88) +* positionals now opt-in when strict:true (#116) +* create result.values with null prototype (#111) + +### Features + +* create result.values with null prototype ([#111](https://github.com/pkgjs/parseargs/issues/111)) ([9d539c3](https://github.com/pkgjs/parseargs/commit/9d539c3d57f269c160e74e0656ad4fa84ff92ec2)) +* positionals now opt-in when strict:true ([#116](https://github.com/pkgjs/parseargs/issues/116)) ([3643338](https://github.com/pkgjs/parseargs/commit/364333826b746e8a7dc5505b4b22fd19ac51df3b)) +* switch type:string option arguments to greedy, but with error for suspect cases in strict mode ([#88](https://github.com/pkgjs/parseargs/issues/88)) ([c2b5e72](https://github.com/pkgjs/parseargs/commit/c2b5e72161991dfdc535909f1327cc9b970fe7e8)) + +### [0.7.1](https://github.com/pkgjs/parseargs/compare/v0.7.0...v0.7.1) (2022-04-15) + + +### Bug Fixes + +* resist pollution ([#106](https://github.com/pkgjs/parseargs/issues/106)) ([ecf2dec](https://github.com/pkgjs/parseargs/commit/ecf2dece0a9f2a76d789384d5d71c68ffe64022a)) + +## [0.7.0](https://github.com/pkgjs/parseargs/compare/v0.6.0...v0.7.0) (2022-04-13) + + +### Features + +* Add strict mode to parser ([#74](https://github.com/pkgjs/parseargs/issues/74)) ([8267d02](https://github.com/pkgjs/parseargs/commit/8267d02083a87b8b8a71fcce08348d1e031ea91c)) + +## [0.6.0](https://github.com/pkgjs/parseargs/compare/v0.5.0...v0.6.0) (2022-04-11) + + +### ⚠ BREAKING CHANGES + +* rework results to remove redundant `flags` property and store value true for boolean options (#83) +* switch to existing ERR_INVALID_ARG_VALUE (#97) + +### Code Refactoring + +* rework results to remove redundant `flags` property and store value true for boolean options ([#83](https://github.com/pkgjs/parseargs/issues/83)) ([be153db](https://github.com/pkgjs/parseargs/commit/be153dbed1d488cb7b6e27df92f601ba7337713d)) +* switch to existing ERR_INVALID_ARG_VALUE ([#97](https://github.com/pkgjs/parseargs/issues/97)) ([084a23f](https://github.com/pkgjs/parseargs/commit/084a23f9fde2da030b159edb1c2385f24579ce40)) + +## [0.5.0](https://github.com/pkgjs/parseargs/compare/v0.4.0...v0.5.0) (2022-04-10) + + +### ⚠ BREAKING CHANGES + +* Require type to be specified for each supplied option (#95) + +### Features + +* Require type to be specified for each supplied option ([#95](https://github.com/pkgjs/parseargs/issues/95)) ([02cd018](https://github.com/pkgjs/parseargs/commit/02cd01885b8aaa59f2db8308f2d4479e64340068)) + +## [0.4.0](https://github.com/pkgjs/parseargs/compare/v0.3.0...v0.4.0) (2022-03-12) + + +### ⚠ BREAKING CHANGES + +* parsing, revisit short option groups, add support for combined short and value (#75) +* restructure configuration to take options bag (#63) + +### Code Refactoring + +* parsing, revisit short option groups, add support for combined short and value ([#75](https://github.com/pkgjs/parseargs/issues/75)) ([a92600f](https://github.com/pkgjs/parseargs/commit/a92600fa6c214508ab1e016fa55879a314f541af)) +* restructure configuration to take options bag ([#63](https://github.com/pkgjs/parseargs/issues/63)) ([b412095](https://github.com/pkgjs/parseargs/commit/b4120957d90e809ee8b607b06e747d3e6a6b213e)) + +## [0.3.0](https://github.com/pkgjs/parseargs/compare/v0.2.0...v0.3.0) (2022-02-06) + + +### Features + +* **parser:** support short-option groups ([#59](https://github.com/pkgjs/parseargs/issues/59)) ([882067b](https://github.com/pkgjs/parseargs/commit/882067bc2d7cbc6b796f8e5a079a99bc99d4e6ba)) + +## [0.2.0](https://github.com/pkgjs/parseargs/compare/v0.1.1...v0.2.0) (2022-02-05) + + +### Features + +* basic support for shorts ([#50](https://github.com/pkgjs/parseargs/issues/50)) ([a2f36d7](https://github.com/pkgjs/parseargs/commit/a2f36d7da4145af1c92f76806b7fe2baf6beeceb)) + + +### Bug Fixes + +* always store value for a=b ([#43](https://github.com/pkgjs/parseargs/issues/43)) ([a85e8dc](https://github.com/pkgjs/parseargs/commit/a85e8dc06379fd2696ee195cc625de8fac6aee42)) +* support single dash as positional ([#49](https://github.com/pkgjs/parseargs/issues/49)) ([d795bf8](https://github.com/pkgjs/parseargs/commit/d795bf877d068fd67aec381f30b30b63f97109ad)) + +### [0.1.1](https://github.com/pkgjs/parseargs/compare/v0.1.0...v0.1.1) (2022-01-25) + + +### Bug Fixes + +* only use arrays in results for multiples ([#42](https://github.com/pkgjs/parseargs/issues/42)) ([c357584](https://github.com/pkgjs/parseargs/commit/c357584847912506319ed34a0840080116f4fd65)) + +## 0.1.0 (2022-01-22) + + +### Features + +* expand scenarios covered by default arguments for environments ([#20](https://github.com/pkgjs/parseargs/issues/20)) ([582ada7](https://github.com/pkgjs/parseargs/commit/582ada7be0eca3a73d6e0bd016e7ace43449fa4c)) +* update readme and include contributing guidelines ([8edd6fc](https://github.com/pkgjs/parseargs/commit/8edd6fc863cd705f6fac732724159ebe8065a2b0)) + + +### Bug Fixes + +* do not strip excess leading dashes on long option names ([#21](https://github.com/pkgjs/parseargs/issues/21)) ([f848590](https://github.com/pkgjs/parseargs/commit/f848590ebf3249ed5979ff47e003fa6e1a8ec5c0)) +* name & readme ([3f057c1](https://github.com/pkgjs/parseargs/commit/3f057c1b158a1bdbe878c64b57460c58e56e465f)) +* package.json values ([9bac300](https://github.com/pkgjs/parseargs/commit/9bac300e00cd76c77076bf9e75e44f8929512da9)) +* update readme name ([957d8d9](https://github.com/pkgjs/parseargs/commit/957d8d96e1dcb48297c0a14345d44c0123b2883e)) + + +### Build System + +* first release as minor ([421c6e2](https://github.com/pkgjs/parseargs/commit/421c6e2569a8668ad14fac5a5af5be60479a7571)) diff --git a/node_modules/@pkgjs/parseargs/LICENSE b/node_modules/@pkgjs/parseargs/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/node_modules/@pkgjs/parseargs/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/@pkgjs/parseargs/README.md b/node_modules/@pkgjs/parseargs/README.md new file mode 100644 index 0000000000..0a041927e8 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/README.md @@ -0,0 +1,413 @@ + +# parseArgs + +[![Coverage][coverage-image]][coverage-url] + +Polyfill of `util.parseArgs()` + +## `util.parseArgs([config])` + + + +> Stability: 1 - Experimental + +* `config` {Object} Used to provide arguments for parsing and to configure + the parser. `config` supports the following properties: + * `args` {string\[]} array of argument strings. **Default:** `process.argv` + with `execPath` and `filename` removed. + * `options` {Object} Used to describe arguments known to the parser. + Keys of `options` are the long names of options and values are an + {Object} accepting the following properties: + * `type` {string} Type of argument, which must be either `boolean` or `string`. + * `multiple` {boolean} Whether this option can be provided multiple + times. If `true`, all values will be collected in an array. If + `false`, values for the option are last-wins. **Default:** `false`. + * `short` {string} A single character alias for the option. + * `default` {string | boolean | string\[] | boolean\[]} The default option + value when it is not set by args. It must be of the same type as the + the `type` property. When `multiple` is `true`, it must be an array. + * `strict` {boolean} Should an error be thrown when unknown arguments + are encountered, or when arguments are passed that do not match the + `type` configured in `options`. + **Default:** `true`. + * `allowPositionals` {boolean} Whether this command accepts positional + arguments. + **Default:** `false` if `strict` is `true`, otherwise `true`. + * `tokens` {boolean} Return the parsed tokens. This is useful for extending + the built-in behavior, from adding additional checks through to reprocessing + the tokens in different ways. + **Default:** `false`. + +* Returns: {Object} The parsed command line arguments: + * `values` {Object} A mapping of parsed option names with their {string} + or {boolean} values. + * `positionals` {string\[]} Positional arguments. + * `tokens` {Object\[] | undefined} See [parseArgs tokens](#parseargs-tokens) + section. Only returned if `config` includes `tokens: true`. + +Provides a higher level API for command-line argument parsing than interacting +with `process.argv` directly. Takes a specification for the expected arguments +and returns a structured object with the parsed options and positionals. + +```mjs +import { parseArgs } from 'node:util'; +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); +// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] +``` + +```cjs +const { parseArgs } = require('node:util'); +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); +// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] +``` + +`util.parseArgs` is experimental and behavior may change. Join the +conversation in [pkgjs/parseargs][] to contribute to the design. + +### `parseArgs` `tokens` + +Detailed parse information is available for adding custom behaviours by +specifying `tokens: true` in the configuration. +The returned tokens have properties describing: + +* all tokens + * `kind` {string} One of 'option', 'positional', or 'option-terminator'. + * `index` {number} Index of element in `args` containing token. So the + source argument for a token is `args[token.index]`. +* option tokens + * `name` {string} Long name of option. + * `rawName` {string} How option used in args, like `-f` of `--foo`. + * `value` {string | undefined} Option value specified in args. + Undefined for boolean options. + * `inlineValue` {boolean | undefined} Whether option value specified inline, + like `--foo=bar`. +* positional tokens + * `value` {string} The value of the positional argument in args (i.e. `args[index]`). +* option-terminator token + +The returned tokens are in the order encountered in the input args. Options +that appear more than once in args produce a token for each use. Short option +groups like `-xy` expand to a token for each option. So `-xxx` produces +three tokens. + +For example to use the returned tokens to add support for a negated option +like `--no-color`, the tokens can be reprocessed to change the value stored +for the negated option. + +```mjs +import { parseArgs } from 'node:util'; + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); +``` + +```cjs +const { parseArgs } = require('node:util'); + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); +``` + +Example usage showing negated options, and when an option is used +multiple ways then last one wins. + +```console +$ node negate.js +{ logfile: 'default.log', color: undefined } +$ node negate.js --no-logfile --no-color +{ logfile: false, color: false } +$ node negate.js --logfile=test.log --color +{ logfile: 'test.log', color: true } +$ node negate.js --no-logfile --logfile=test.log --color --no-color +{ logfile: 'test.log', color: false } +``` + +----- + + +## Table of Contents +- [`util.parseArgs([config])`](#utilparseargsconfig) +- [Scope](#scope) +- [Version Matchups](#version-matchups) +- [🚀 Getting Started](#-getting-started) +- [🙌 Contributing](#-contributing) +- [💡 `process.mainArgs` Proposal](#-processmainargs-proposal) + - [Implementation:](#implementation) +- [📃 Examples](#-examples) +- [F.A.Qs](#faqs) +- [Links & Resources](#links--resources) + +----- + +## Scope + +It is already possible to build great arg parsing modules on top of what Node.js provides; the prickly API is abstracted away by these modules. Thus, process.parseArgs() is not necessarily intended for library authors; it is intended for developers of simple CLI tools, ad-hoc scripts, deployed Node.js applications, and learning materials. + +It is exceedingly difficult to provide an API which would both be friendly to these Node.js users while being extensible enough for libraries to build upon. We chose to prioritize these use cases because these are currently not well-served by Node.js' API. + +---- + +## Version Matchups + +| Node.js | @pkgjs/parseArgs | +| -- | -- | +| [v18.3.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [v0.9.1](https://github.com/pkgjs/parseargs/tree/v0.9.1#utilparseargsconfig) | +| [v16.17.0](https://nodejs.org/dist/latest-v16.x/docs/api/util.html#utilparseargsconfig), [v18.7.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [0.10.0](https://github.com/pkgjs/parseargs/tree/v0.10.0#utilparseargsconfig) | + +---- + +## 🚀 Getting Started + +1. **Install dependencies.** + + ```bash + npm install + ``` + +2. **Open the index.js file and start editing!** + +3. **Test your code by calling parseArgs through our test file** + + ```bash + npm test + ``` + +---- + +## 🙌 Contributing + +Any person who wants to contribute to the initiative is welcome! Please first read the [Contributing Guide](CONTRIBUTING.md) + +Additionally, reading the [`Examples w/ Output`](#-examples-w-output) section of this document will be the best way to familiarize yourself with the target expected behavior for parseArgs() once it is fully implemented. + +This package was implemented using [tape](https://www.npmjs.com/package/tape) as its test harness. + +---- + +## 💡 `process.mainArgs` Proposal + +> Note: This can be moved forward independently of the `util.parseArgs()` proposal/work. + +### Implementation: + +```javascript +process.mainArgs = process.argv.slice(process._exec ? 1 : 2) +``` + +---- + +## 📃 Examples + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// specify the options that may be used +const options = { + foo: { type: 'string'}, + bar: { type: 'boolean' }, +}; +const args = ['--foo=a', '--bar']; +const { values, positionals } = parseArgs({ args, options }); +// values = { foo: 'a', bar: true } +// positionals = [] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// type:string & multiple +const options = { + foo: { + type: 'string', + multiple: true, + }, +}; +const args = ['--foo=a', '--foo', 'b']; +const { values, positionals } = parseArgs({ args, options }); +// values = { foo: [ 'a', 'b' ] } +// positionals = [] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// shorts +const options = { + foo: { + short: 'f', + type: 'boolean' + }, +}; +const args = ['-f', 'b']; +const { values, positionals } = parseArgs({ args, options, allowPositionals: true }); +// values = { foo: true } +// positionals = ['b'] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// unconfigured +const options = {}; +const args = ['-f', '--foo=a', '--bar', 'b']; +const { values, positionals } = parseArgs({ strict: false, args, options, allowPositionals: true }); +// values = { f: true, foo: 'a', bar: true } +// positionals = ['b'] +``` + +---- + +## F.A.Qs + +- Is `cmd --foo=bar baz` the same as `cmd baz --foo=bar`? + - yes +- Does the parser execute a function? + - no +- Does the parser execute one of several functions, depending on input? + - no +- Can subcommands take options that are distinct from the main command? + - no +- Does it output generated help when no options match? + - no +- Does it generated short usage? Like: `usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]` + - no (no usage/help at all) +- Does the user provide the long usage text? For each option? For the whole command? + - no +- Do subcommands (if implemented) have their own usage output? + - no +- Does usage print if the user runs `cmd --help`? + - no +- Does it set `process.exitCode`? + - no +- Does usage print to stderr or stdout? + - N/A +- Does it check types? (Say, specify that an option is a boolean, number, etc.) + - no +- Can an option have more than one type? (string or false, for example) + - no +- Can the user define a type? (Say, `type: path` to call `path.resolve()` on the argument.) + - no +- Does a `--foo=0o22` mean 0, 22, 18, or "0o22"? + - `"0o22"` +- Does it coerce types? + - no +- Does `--no-foo` coerce to `--foo=false`? For all options? Only boolean options? + - no, it sets `{values:{'no-foo': true}}` +- Is `--foo` the same as `--foo=true`? Only for known booleans? Only at the end? + - no, they are not the same. There is no special handling of `true` as a value so it is just another string. +- Does it read environment variables? Ie, is `FOO=1 cmd` the same as `cmd --foo=1`? + - no +- Do unknown arguments raise an error? Are they parsed? Are they treated as positional arguments? + - no, they are parsed, not treated as positionals +- Does `--` signal the end of options? + - yes +- Is `--` included as a positional? + - no +- Is `program -- foo` the same as `program foo`? + - yes, both store `{positionals:['foo']}` +- Does the API specify whether a `--` was present/relevant? + - no +- Is `-bar` the same as `--bar`? + - no, `-bar` is a short option or options, with expansion logic that follows the + [Utility Syntax Guidelines in POSIX.1-2017](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). `-bar` expands to `-b`, `-a`, `-r`. +- Is `---foo` the same as `--foo`? + - no + - the first is a long option named `'-foo'` + - the second is a long option named `'foo'` +- Is `-` a positional? ie, `bash some-test.sh | tap -` + - yes + +## Links & Resources + +* [Initial Tooling Issue](https://github.com/nodejs/tooling/issues/19) +* [Initial Proposal](https://github.com/nodejs/node/pull/35015) +* [parseArgs Proposal](https://github.com/nodejs/node/pull/42675) + +[coverage-image]: https://img.shields.io/nycrc/pkgjs/parseargs +[coverage-url]: https://github.com/pkgjs/parseargs/blob/main/.nycrc +[pkgjs/parseargs]: https://github.com/pkgjs/parseargs diff --git a/node_modules/@pkgjs/parseargs/examples/is-default-value.js b/node_modules/@pkgjs/parseargs/examples/is-default-value.js new file mode 100644 index 0000000000..0a67972b71 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/is-default-value.js @@ -0,0 +1,25 @@ +'use strict'; + +// This example shows how to understand if a default value is used or not. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + file: { short: 'f', type: 'string', default: 'FOO' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const isFileDefault = !tokens.some((token) => token.kind === 'option' && + token.name === 'file' +); + +console.log(values); +console.log(`Is the file option [${values.file}] the default value? ${isFileDefault}`); + +// Try the following: +// node is-default-value.js +// node is-default-value.js -f FILE +// node is-default-value.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js new file mode 100644 index 0000000000..943e643ee9 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js @@ -0,0 +1,35 @@ +'use strict'; + +// This is an example of using tokens to add a custom behaviour. +// +// Require the use of `=` for long options and values by blocking +// the use of space separated values. +// So allow `--foo=bar`, and not allow `--foo bar`. +// +// Note: this is not a common behaviour, most CLIs allow both forms. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + file: { short: 'f', type: 'string' }, + log: { type: 'string' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const badToken = tokens.find((token) => token.kind === 'option' && + token.value != null && + token.rawName.startsWith('--') && + !token.inlineValue +); +if (badToken) { + throw new Error(`Option value for '${badToken.rawName}' must be inline, like '${badToken.rawName}=VALUE'`); +} + +console.log(values); + +// Try the following: +// node limit-long-syntax.js -f FILE --log=LOG +// node limit-long-syntax.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/negate.js b/node_modules/@pkgjs/parseargs/examples/negate.js new file mode 100644 index 0000000000..b6634690a4 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/negate.js @@ -0,0 +1,43 @@ +'use strict'; + +// This example is used in the documentation. + +// How might I add my own support for --no-foo? + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); + +// Try the following: +// node negate.js +// node negate.js --no-logfile --no-color +// negate.js --logfile=test.log --color +// node negate.js --no-logfile --logfile=test.log --color --no-color diff --git a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js new file mode 100644 index 0000000000..0c324688af --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js @@ -0,0 +1,31 @@ +'use strict'; + +// This is an example of using tokens to add a custom behaviour. +// +// Throw an error if an option is used more than once. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + ding: { type: 'boolean', short: 'd' }, + beep: { type: 'boolean', short: 'b' } +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +const seenBefore = new Set(); +tokens.forEach((token) => { + if (token.kind !== 'option') return; + if (seenBefore.has(token.name)) { + throw new Error(`option '${token.name}' used multiple times`); + } + seenBefore.add(token.name); +}); + +console.log(values); + +// Try the following: +// node no-repeated-options --ding --beep +// node no-repeated-options --beep -b +// node no-repeated-options -ddd diff --git a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs new file mode 100644 index 0000000000..8ab7367b8b --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs @@ -0,0 +1,41 @@ +// This is an example of using tokens to add a custom behaviour. +// +// This adds a option order check so that --some-unstable-option +// may only be used after --enable-experimental-options +// +// Note: this is not a common behaviour, the order of different options +// does not usually matter. + +import { parseArgs } from '../index.js'; + +function findTokenIndex(tokens, target) { + return tokens.findIndex((token) => token.kind === 'option' && + token.name === target + ); +} + +const experimentalName = 'enable-experimental-options'; +const unstableName = 'some-unstable-option'; + +const options = { + [experimentalName]: { type: 'boolean' }, + [unstableName]: { type: 'boolean' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const experimentalIndex = findTokenIndex(tokens, experimentalName); +const unstableIndex = findTokenIndex(tokens, unstableName); +if (unstableIndex !== -1 && + ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) { + throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`); +} + +console.log(values); + +/* eslint-disable max-len */ +// Try the following: +// node ordered-options.mjs +// node ordered-options.mjs --some-unstable-option +// node ordered-options.mjs --some-unstable-option --enable-experimental-options +// node ordered-options.mjs --enable-experimental-options --some-unstable-option diff --git a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js new file mode 100644 index 0000000000..eff04c2a60 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js @@ -0,0 +1,26 @@ +'use strict'; + +// This example is used in the documentation. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); + +// Try the following: +// node simple-hard-coded.js diff --git a/node_modules/@pkgjs/parseargs/index.js b/node_modules/@pkgjs/parseargs/index.js new file mode 100644 index 0000000000..b1004c7b72 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/index.js @@ -0,0 +1,396 @@ +'use strict'; + +const { + ArrayPrototypeForEach, + ArrayPrototypeIncludes, + ArrayPrototypeMap, + ArrayPrototypePush, + ArrayPrototypePushApply, + ArrayPrototypeShift, + ArrayPrototypeSlice, + ArrayPrototypeUnshiftApply, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIndexOf, + StringPrototypeSlice, + StringPrototypeStartsWith, +} = require('./internal/primordials'); + +const { + validateArray, + validateBoolean, + validateBooleanArray, + validateObject, + validateString, + validateStringArray, + validateUnion, +} = require('./internal/validators'); + +const { + kEmptyObject, +} = require('./internal/util'); + +const { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +} = require('./utils'); + +const { + codes: { + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + }, +} = require('./internal/errors'); + +function getMainArgs() { + // Work out where to slice process.argv for user supplied arguments. + + // Check node options for scenarios where user CLI args follow executable. + const execArgv = process.execArgv; + if (ArrayPrototypeIncludes(execArgv, '-e') || + ArrayPrototypeIncludes(execArgv, '--eval') || + ArrayPrototypeIncludes(execArgv, '-p') || + ArrayPrototypeIncludes(execArgv, '--print')) { + return ArrayPrototypeSlice(process.argv, 1); + } + + // Normally first two arguments are executable and script, then CLI arguments + return ArrayPrototypeSlice(process.argv, 2); +} + +/** + * In strict mode, throw for possible usage errors like --foo --bar + * + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionLikeValue(token) { + if (!token.inlineValue && isOptionLikeValue(token.value)) { + // Only show short example if user used short option. + const example = StringPrototypeStartsWith(token.rawName, '--') ? + `'${token.rawName}=-XYZ'` : + `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`; + const errorMessage = `Option '${token.rawName}' argument is ambiguous. +Did you forget to specify the option argument for '${token.rawName}'? +To specify an option argument starting with a dash use ${example}.`; + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage); + } +} + +/** + * In strict mode, throw for usage errors. + * + * @param {object} config - from config passed to parseArgs + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionUsage(config, token) { + if (!ObjectHasOwn(config.options, token.name)) { + throw new ERR_PARSE_ARGS_UNKNOWN_OPTION( + token.rawName, config.allowPositionals); + } + + const short = optionsGetOwn(config.options, token.name, 'short'); + const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`; + const type = optionsGetOwn(config.options, token.name, 'type'); + if (type === 'string' && typeof token.value !== 'string') { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} ' argument missing`); + } + // (Idiomatic test for undefined||null, expecting undefined.) + if (type === 'boolean' && token.value != null) { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`); + } +} + + +/** + * Store the option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string|undefined} optionValue - value from user args + * @param {object} options - option configs, from parseArgs({ options }) + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeOption(longOption, optionValue, options, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + // We store based on the option value rather than option type, + // preserving the users intent for author to deal with. + const newValue = optionValue ?? true; + if (optionsGetOwn(options, longOption, 'multiple')) { + // Always store value in array, including for boolean. + // values[longOption] starts out not present, + // first value is added as new array [newValue], + // subsequent values are pushed to existing array. + // (note: values has null prototype, so simpler usage) + if (values[longOption]) { + ArrayPrototypePush(values[longOption], newValue); + } else { + values[longOption] = [newValue]; + } + } else { + values[longOption] = newValue; + } +} + +/** + * Store the default option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string + * | boolean + * | string[] + * | boolean[]} optionValue - default value from option config + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeDefaultOption(longOption, optionValue, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + values[longOption] = optionValue; +} + +/** + * Process args and turn into identified tokens: + * - option (along with value, if any) + * - positional + * - option-terminator + * + * @param {string[]} args - from parseArgs({ args }) or mainArgs + * @param {object} options - option configs, from parseArgs({ options }) + */ +function argsToTokens(args, options) { + const tokens = []; + let index = -1; + let groupCount = 0; + + const remainingArgs = ArrayPrototypeSlice(args); + while (remainingArgs.length > 0) { + const arg = ArrayPrototypeShift(remainingArgs); + const nextArg = remainingArgs[0]; + if (groupCount > 0) + groupCount--; + else + index++; + + // Check if `arg` is an options terminator. + // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html + if (arg === '--') { + // Everything after a bare '--' is considered a positional argument. + ArrayPrototypePush(tokens, { kind: 'option-terminator', index }); + ArrayPrototypePushApply( + tokens, ArrayPrototypeMap(remainingArgs, (arg) => { + return { kind: 'positional', index: ++index, value: arg }; + }) + ); + break; // Finished processing args, leave while loop. + } + + if (isLoneShortOption(arg)) { + // e.g. '-f' + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '-f', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isShortOptionGroup(arg, options)) { + // Expand -fXzy to -f -X -z -y + const expanded = []; + for (let index = 1; index < arg.length; index++) { + const shortOption = StringPrototypeCharAt(arg, index); + const longOption = findLongOptionForShort(shortOption, options); + if (optionsGetOwn(options, longOption, 'type') !== 'string' || + index === arg.length - 1) { + // Boolean option, or last short in group. Well formed. + ArrayPrototypePush(expanded, `-${shortOption}`); + } else { + // String option in middle. Yuck. + // Expand -abfFILE to -a -b -fFILE + ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`); + break; // finished short group + } + } + ArrayPrototypeUnshiftApply(remainingArgs, expanded); + groupCount = expanded.length; + continue; + } + + if (isShortOptionAndValue(arg, options)) { + // e.g. -fFILE + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + const value = StringPrototypeSlice(arg, 2); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `-${shortOption}`, + index, value, inlineValue: true }); + continue; + } + + if (isLoneLongOption(arg)) { + // e.g. '--foo' + const longOption = StringPrototypeSlice(arg, 2); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '--foo', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isLongOptionAndValue(arg)) { + // e.g. --foo=bar + const equalIndex = StringPrototypeIndexOf(arg, '='); + const longOption = StringPrototypeSlice(arg, 2, equalIndex); + const value = StringPrototypeSlice(arg, equalIndex + 1); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `--${longOption}`, + index, value, inlineValue: true }); + continue; + } + + ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg }); + } + + return tokens; +} + +const parseArgs = (config = kEmptyObject) => { + const args = objectGetOwn(config, 'args') ?? getMainArgs(); + const strict = objectGetOwn(config, 'strict') ?? true; + const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict; + const returnTokens = objectGetOwn(config, 'tokens') ?? false; + const options = objectGetOwn(config, 'options') ?? { __proto__: null }; + // Bundle these up for passing to strict-mode checks. + const parseConfig = { args, strict, options, allowPositionals }; + + // Validate input configuration. + validateArray(args, 'args'); + validateBoolean(strict, 'strict'); + validateBoolean(allowPositionals, 'allowPositionals'); + validateBoolean(returnTokens, 'tokens'); + validateObject(options, 'options'); + ArrayPrototypeForEach( + ObjectEntries(options), + ({ 0: longOption, 1: optionConfig }) => { + validateObject(optionConfig, `options.${longOption}`); + + // type is required + const optionType = objectGetOwn(optionConfig, 'type'); + validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']); + + if (ObjectHasOwn(optionConfig, 'short')) { + const shortOption = optionConfig.short; + validateString(shortOption, `options.${longOption}.short`); + if (shortOption.length !== 1) { + throw new ERR_INVALID_ARG_VALUE( + `options.${longOption}.short`, + shortOption, + 'must be a single character' + ); + } + } + + const multipleOption = objectGetOwn(optionConfig, 'multiple'); + if (ObjectHasOwn(optionConfig, 'multiple')) { + validateBoolean(multipleOption, `options.${longOption}.multiple`); + } + + const defaultValue = objectGetOwn(optionConfig, 'default'); + if (defaultValue !== undefined) { + let validator; + switch (optionType) { + case 'string': + validator = multipleOption ? validateStringArray : validateString; + break; + + case 'boolean': + validator = multipleOption ? validateBooleanArray : validateBoolean; + break; + } + validator(defaultValue, `options.${longOption}.default`); + } + } + ); + + // Phase 1: identify tokens + const tokens = argsToTokens(args, options); + + // Phase 2: process tokens into parsed option values and positionals + const result = { + values: { __proto__: null }, + positionals: [], + }; + if (returnTokens) { + result.tokens = tokens; + } + ArrayPrototypeForEach(tokens, (token) => { + if (token.kind === 'option') { + if (strict) { + checkOptionUsage(parseConfig, token); + checkOptionLikeValue(token); + } + storeOption(token.name, token.value, options, result.values); + } else if (token.kind === 'positional') { + if (!allowPositionals) { + throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value); + } + ArrayPrototypePush(result.positionals, token.value); + } + }); + + // Phase 3: fill in default values for missing args + ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption, + 1: optionConfig }) => { + const mustSetDefault = useDefaultValueOption(longOption, + optionConfig, + result.values); + if (mustSetDefault) { + storeDefaultOption(longOption, + objectGetOwn(optionConfig, 'default'), + result.values); + } + }); + + + return result; +}; + +module.exports = { + parseArgs, +}; diff --git a/node_modules/@pkgjs/parseargs/internal/errors.js b/node_modules/@pkgjs/parseargs/internal/errors.js new file mode 100644 index 0000000000..e1b237b5b1 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/errors.js @@ -0,0 +1,47 @@ +'use strict'; + +class ERR_INVALID_ARG_TYPE extends TypeError { + constructor(name, expected, actual) { + super(`${name} must be ${expected} got ${actual}`); + this.code = 'ERR_INVALID_ARG_TYPE'; + } +} + +class ERR_INVALID_ARG_VALUE extends TypeError { + constructor(arg1, arg2, expected) { + super(`The property ${arg1} ${expected}. Received '${arg2}'`); + this.code = 'ERR_INVALID_ARG_VALUE'; + } +} + +class ERR_PARSE_ARGS_INVALID_OPTION_VALUE extends Error { + constructor(message) { + super(message); + this.code = 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE'; + } +} + +class ERR_PARSE_ARGS_UNKNOWN_OPTION extends Error { + constructor(option, allowPositionals) { + const suggestDashDash = allowPositionals ? `. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- ${JSON.stringify(option)}` : ''; + super(`Unknown option '${option}'${suggestDashDash}`); + this.code = 'ERR_PARSE_ARGS_UNKNOWN_OPTION'; + } +} + +class ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL extends Error { + constructor(positional) { + super(`Unexpected argument '${positional}'. This command does not take positional arguments`); + this.code = 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL'; + } +} + +module.exports = { + codes: { + ERR_INVALID_ARG_TYPE, + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + } +}; diff --git a/node_modules/@pkgjs/parseargs/internal/primordials.js b/node_modules/@pkgjs/parseargs/internal/primordials.js new file mode 100644 index 0000000000..63e23ab117 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/primordials.js @@ -0,0 +1,393 @@ +/* +This file is copied from https://github.com/nodejs/node/blob/v14.19.3/lib/internal/per_context/primordials.js +under the following license: + +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +*/ + +'use strict'; + +/* eslint-disable node-core/prefer-primordials */ + +// This file subclasses and stores the JS builtins that come from the VM +// so that Node.js's builtin modules do not need to later look these up from +// the global proxy, which can be mutated by users. + +// Use of primordials have sometimes a dramatic impact on performance, please +// benchmark all changes made in performance-sensitive areas of the codebase. +// See: https://github.com/nodejs/node/pull/38248 + +const primordials = {}; + +const { + defineProperty: ReflectDefineProperty, + getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor, + ownKeys: ReflectOwnKeys, +} = Reflect; + +// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`. +// It is using `bind.bind(call)` to avoid using `Function.prototype.bind` +// and `Function.prototype.call` after it may have been mutated by users. +const { apply, bind, call } = Function.prototype; +const uncurryThis = bind.bind(call); +primordials.uncurryThis = uncurryThis; + +// `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`. +// It is using `bind.bind(apply)` to avoid using `Function.prototype.bind` +// and `Function.prototype.apply` after it may have been mutated by users. +const applyBind = bind.bind(apply); +primordials.applyBind = applyBind; + +// Methods that accept a variable number of arguments, and thus it's useful to +// also create `${prefix}${key}Apply`, which uses `Function.prototype.apply`, +// instead of `Function.prototype.call`, and thus doesn't require iterator +// destructuring. +const varargsMethods = [ + // 'ArrayPrototypeConcat' is omitted, because it performs the spread + // on its own for arrays and array-likes with a truthy + // @@isConcatSpreadable symbol property. + 'ArrayOf', + 'ArrayPrototypePush', + 'ArrayPrototypeUnshift', + // 'FunctionPrototypeCall' is omitted, since there's 'ReflectApply' + // and 'FunctionPrototypeApply'. + 'MathHypot', + 'MathMax', + 'MathMin', + 'StringPrototypeConcat', + 'TypedArrayOf', +]; + +function getNewKey(key) { + return typeof key === 'symbol' ? + `Symbol${key.description[7].toUpperCase()}${key.description.slice(8)}` : + `${key[0].toUpperCase()}${key.slice(1)}`; +} + +function copyAccessor(dest, prefix, key, { enumerable, get, set }) { + ReflectDefineProperty(dest, `${prefix}Get${key}`, { + value: uncurryThis(get), + enumerable + }); + if (set !== undefined) { + ReflectDefineProperty(dest, `${prefix}Set${key}`, { + value: uncurryThis(set), + enumerable + }); + } +} + +function copyPropsRenamed(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + // `src` is bound as the `this` so that the static `this` points + // to the object it was defined on, + // e.g.: `ArrayOfApply` gets a `this` of `Array`: + value: applyBind(desc.value, src), + }); + } + } + } +} + +function copyPropsRenamedBound(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const { value } = desc; + if (typeof value === 'function') { + desc.value = value.bind(src); + } + + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + value: applyBind(value, src), + }); + } + } + } +} + +function copyPrototype(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const { value } = desc; + if (typeof value === 'function') { + desc.value = uncurryThis(value); + } + + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + value: applyBind(value), + }); + } + } + } +} + +// Create copies of configurable value properties of the global object +[ + 'Proxy', + 'globalThis', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + primordials[name] = globalThis[name]; +}); + +// Create copies of URI handling functions +[ + decodeURI, + decodeURIComponent, + encodeURI, + encodeURIComponent, +].forEach((fn) => { + primordials[fn.name] = fn; +}); + +// Create copies of the namespace objects +[ + 'JSON', + 'Math', + 'Proxy', + 'Reflect', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + copyPropsRenamed(global[name], primordials, name); +}); + +// Create copies of intrinsic objects +[ + 'Array', + 'ArrayBuffer', + 'BigInt', + 'BigInt64Array', + 'BigUint64Array', + 'Boolean', + 'DataView', + 'Date', + 'Error', + 'EvalError', + 'Float32Array', + 'Float64Array', + 'Function', + 'Int16Array', + 'Int32Array', + 'Int8Array', + 'Map', + 'Number', + 'Object', + 'RangeError', + 'ReferenceError', + 'RegExp', + 'Set', + 'String', + 'Symbol', + 'SyntaxError', + 'TypeError', + 'URIError', + 'Uint16Array', + 'Uint32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'WeakMap', + 'WeakSet', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + const original = global[name]; + primordials[name] = original; + copyPropsRenamed(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +// Create copies of intrinsic objects that require a valid `this` to call +// static methods. +// Refs: https://www.ecma-international.org/ecma-262/#sec-promise.all +[ + 'Promise', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + const original = global[name]; + primordials[name] = original; + copyPropsRenamedBound(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +// Create copies of abstract intrinsic objects that are not directly exposed +// on the global object. +// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object +[ + { name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) }, + { name: 'ArrayIterator', original: { + prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()), + } }, + { name: 'StringIterator', original: { + prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()), + } }, +].forEach(({ name, original }) => { + primordials[name] = original; + // The static %TypedArray% methods require a valid `this`, but can't be bound, + // as they need a subclass constructor as the receiver: + copyPrototype(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +/* eslint-enable node-core/prefer-primordials */ + +const { + ArrayPrototypeForEach, + FunctionPrototypeCall, + Map, + ObjectFreeze, + ObjectSetPrototypeOf, + Set, + SymbolIterator, + WeakMap, + WeakSet, +} = primordials; + +// Because these functions are used by `makeSafe`, which is exposed +// on the `primordials` object, it's important to use const references +// to the primordials that they use: +const createSafeIterator = (factory, next) => { + class SafeIterator { + constructor(iterable) { + this._iterator = factory(iterable); + } + next() { + return next(this._iterator); + } + [SymbolIterator]() { + return this; + } + } + ObjectSetPrototypeOf(SafeIterator.prototype, null); + ObjectFreeze(SafeIterator.prototype); + ObjectFreeze(SafeIterator); + return SafeIterator; +}; + +primordials.SafeArrayIterator = createSafeIterator( + primordials.ArrayPrototypeSymbolIterator, + primordials.ArrayIteratorPrototypeNext +); +primordials.SafeStringIterator = createSafeIterator( + primordials.StringPrototypeSymbolIterator, + primordials.StringIteratorPrototypeNext +); + +const copyProps = (src, dest) => { + ArrayPrototypeForEach(ReflectOwnKeys(src), (key) => { + if (!ReflectGetOwnPropertyDescriptor(dest, key)) { + ReflectDefineProperty( + dest, + key, + ReflectGetOwnPropertyDescriptor(src, key)); + } + }); +}; + +const makeSafe = (unsafe, safe) => { + if (SymbolIterator in unsafe.prototype) { + const dummy = new unsafe(); + let next; // We can reuse the same `next` method. + + ArrayPrototypeForEach(ReflectOwnKeys(unsafe.prototype), (key) => { + if (!ReflectGetOwnPropertyDescriptor(safe.prototype, key)) { + const desc = ReflectGetOwnPropertyDescriptor(unsafe.prototype, key); + if ( + typeof desc.value === 'function' && + desc.value.length === 0 && + SymbolIterator in (FunctionPrototypeCall(desc.value, dummy) ?? {}) + ) { + const createIterator = uncurryThis(desc.value); + next = next ?? uncurryThis(createIterator(dummy).next); + const SafeIterator = createSafeIterator(createIterator, next); + desc.value = function() { + return new SafeIterator(this); + }; + } + ReflectDefineProperty(safe.prototype, key, desc); + } + }); + } else { + copyProps(unsafe.prototype, safe.prototype); + } + copyProps(unsafe, safe); + + ObjectSetPrototypeOf(safe.prototype, null); + ObjectFreeze(safe.prototype); + ObjectFreeze(safe); + return safe; +}; +primordials.makeSafe = makeSafe; + +// Subclass the constructors because we need to use their prototype +// methods later. +// Defining the `constructor` is necessary here to avoid the default +// constructor which uses the user-mutable `%ArrayIteratorPrototype%.next`. +primordials.SafeMap = makeSafe( + Map, + class SafeMap extends Map { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeWeakMap = makeSafe( + WeakMap, + class SafeWeakMap extends WeakMap { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeSet = makeSafe( + Set, + class SafeSet extends Set { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeWeakSet = makeSafe( + WeakSet, + class SafeWeakSet extends WeakSet { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); + +ObjectSetPrototypeOf(primordials, null); +ObjectFreeze(primordials); + +module.exports = primordials; diff --git a/node_modules/@pkgjs/parseargs/internal/util.js b/node_modules/@pkgjs/parseargs/internal/util.js new file mode 100644 index 0000000000..b9b8fe5b8d --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/util.js @@ -0,0 +1,14 @@ +'use strict'; + +// This is a placeholder for util.js in node.js land. + +const { + ObjectCreate, + ObjectFreeze, +} = require('./primordials'); + +const kEmptyObject = ObjectFreeze(ObjectCreate(null)); + +module.exports = { + kEmptyObject, +}; diff --git a/node_modules/@pkgjs/parseargs/internal/validators.js b/node_modules/@pkgjs/parseargs/internal/validators.js new file mode 100644 index 0000000000..b5ac4fb501 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/validators.js @@ -0,0 +1,89 @@ +'use strict'; + +// This file is a proxy of the original file located at: +// https://github.com/nodejs/node/blob/main/lib/internal/validators.js +// Every addition or modification to this file must be evaluated +// during the PR review. + +const { + ArrayIsArray, + ArrayPrototypeIncludes, + ArrayPrototypeJoin, +} = require('./primordials'); + +const { + codes: { + ERR_INVALID_ARG_TYPE + } +} = require('./errors'); + +function validateString(value, name) { + if (typeof value !== 'string') { + throw new ERR_INVALID_ARG_TYPE(name, 'String', value); + } +} + +function validateUnion(value, name, union) { + if (!ArrayPrototypeIncludes(union, value)) { + throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value); + } +} + +function validateBoolean(value, name) { + if (typeof value !== 'boolean') { + throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value); + } +} + +function validateArray(value, name) { + if (!ArrayIsArray(value)) { + throw new ERR_INVALID_ARG_TYPE(name, 'Array', value); + } +} + +function validateStringArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateString(value[i], `${name}[${i}]`); + } +} + +function validateBooleanArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateBoolean(value[i], `${name}[${i}]`); + } +} + +/** + * @param {unknown} value + * @param {string} name + * @param {{ + * allowArray?: boolean, + * allowFunction?: boolean, + * nullable?: boolean + * }} [options] + */ +function validateObject(value, name, options) { + const useDefaultOptions = options == null; + const allowArray = useDefaultOptions ? false : options.allowArray; + const allowFunction = useDefaultOptions ? false : options.allowFunction; + const nullable = useDefaultOptions ? false : options.nullable; + if ((!nullable && value === null) || + (!allowArray && ArrayIsArray(value)) || + (typeof value !== 'object' && ( + !allowFunction || typeof value !== 'function' + ))) { + throw new ERR_INVALID_ARG_TYPE(name, 'Object', value); + } +} + +module.exports = { + validateArray, + validateObject, + validateString, + validateStringArray, + validateUnion, + validateBoolean, + validateBooleanArray, +}; diff --git a/node_modules/@pkgjs/parseargs/package.json b/node_modules/@pkgjs/parseargs/package.json new file mode 100644 index 0000000000..0bcc05c0d4 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/package.json @@ -0,0 +1,36 @@ +{ + "name": "@pkgjs/parseargs", + "version": "0.11.0", + "description": "Polyfill of future proposal for `util.parseArgs()`", + "engines": { + "node": ">=14" + }, + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "scripts": { + "coverage": "c8 --check-coverage tape 'test/*.js'", + "test": "c8 tape 'test/*.js'", + "posttest": "eslint .", + "fix": "npm run posttest -- --fix" + }, + "repository": { + "type": "git", + "url": "git@github.com:pkgjs/parseargs.git" + }, + "keywords": [], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/pkgjs/parseargs/issues" + }, + "homepage": "https://github.com/pkgjs/parseargs#readme", + "devDependencies": { + "c8": "^7.10.0", + "eslint": "^8.2.0", + "eslint-plugin-node-core": "iansu/eslint-plugin-node-core", + "tape": "^5.2.2" + } +} diff --git a/node_modules/@pkgjs/parseargs/utils.js b/node_modules/@pkgjs/parseargs/utils.js new file mode 100644 index 0000000000..d7f420a233 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/utils.js @@ -0,0 +1,198 @@ +'use strict'; + +const { + ArrayPrototypeFind, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIncludes, + StringPrototypeStartsWith, +} = require('./internal/primordials'); + +const { + validateObject, +} = require('./internal/validators'); + +// These are internal utilities to make the parsing logic easier to read, and +// add lots of detail for the curious. They are in a separate file to allow +// unit testing, although that is not essential (this could be rolled into +// main file and just tested implicitly via API). +// +// These routines are for internal use, not for export to client. + +/** + * Return the named property, but only if it is an own property. + */ +function objectGetOwn(obj, prop) { + if (ObjectHasOwn(obj, prop)) + return obj[prop]; +} + +/** + * Return the named options property, but only if it is an own property. + */ +function optionsGetOwn(options, longOption, prop) { + if (ObjectHasOwn(options, longOption)) + return objectGetOwn(options[longOption], prop); +} + +/** + * Determines if the argument may be used as an option value. + * @example + * isOptionValue('V') // returns true + * isOptionValue('-v') // returns true (greedy) + * isOptionValue('--foo') // returns true (greedy) + * isOptionValue(undefined) // returns false + */ +function isOptionValue(value) { + if (value == null) return false; + + // Open Group Utility Conventions are that an option-argument + // is the argument after the option, and may start with a dash. + return true; // greedy! +} + +/** + * Detect whether there is possible confusion and user may have omitted + * the option argument, like `--port --verbose` when `port` of type:string. + * In strict mode we throw errors if value is option-like. + */ +function isOptionLikeValue(value) { + if (value == null) return false; + + return value.length > 1 && StringPrototypeCharAt(value, 0) === '-'; +} + +/** + * Determines if `arg` is just a short option. + * @example '-f' + */ +function isLoneShortOption(arg) { + return arg.length === 2 && + StringPrototypeCharAt(arg, 0) === '-' && + StringPrototypeCharAt(arg, 1) !== '-'; +} + +/** + * Determines if `arg` is a lone long option. + * @example + * isLoneLongOption('a') // returns false + * isLoneLongOption('-a') // returns false + * isLoneLongOption('--foo') // returns true + * isLoneLongOption('--foo=bar') // returns false + */ +function isLoneLongOption(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + !StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a long option and value in the same argument. + * @example + * isLongOptionAndValue('--foo') // returns false + * isLongOptionAndValue('--foo=bar') // returns true + */ +function isLongOptionAndValue(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a short option group. + * + * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). + * One or more options without option-arguments, followed by at most one + * option that takes an option-argument, should be accepted when grouped + * behind one '-' delimiter. + * @example + * isShortOptionGroup('-a', {}) // returns false + * isShortOptionGroup('-ab', {}) // returns true + * // -fb is an option and a value, not a short option group + * isShortOptionGroup('-fb', { + * options: { f: { type: 'string' } } + * }) // returns false + * isShortOptionGroup('-bf', { + * options: { f: { type: 'string' } } + * }) // returns true + * // -bfb is an edge case, return true and caller sorts it out + * isShortOptionGroup('-bfb', { + * options: { f: { type: 'string' } } + * }) // returns true + */ +function isShortOptionGroup(arg, options) { + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const firstShort = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(firstShort, options); + return optionsGetOwn(options, longOption, 'type') !== 'string'; +} + +/** + * Determine if arg is a short string option followed by its value. + * @example + * isShortOptionAndValue('-a', {}); // returns false + * isShortOptionAndValue('-ab', {}); // returns false + * isShortOptionAndValue('-fFILE', { + * options: { foo: { short: 'f', type: 'string' }} + * }) // returns true + */ +function isShortOptionAndValue(arg, options) { + validateObject(options, 'options'); + + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + return optionsGetOwn(options, longOption, 'type') === 'string'; +} + +/** + * Find the long option associated with a short option. Looks for a configured + * `short` and returns the short option itself if a long option is not found. + * @example + * findLongOptionForShort('a', {}) // returns 'a' + * findLongOptionForShort('b', { + * options: { bar: { short: 'b' } } + * }) // returns 'bar' + */ +function findLongOptionForShort(shortOption, options) { + validateObject(options, 'options'); + const longOptionEntry = ArrayPrototypeFind( + ObjectEntries(options), + ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption + ); + return longOptionEntry?.[0] ?? shortOption; +} + +/** + * Check if the given option includes a default value + * and that option has not been set by the input args. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {object} optionConfig - the option configuration properties + * @param {object} values - option values returned in `values` by parseArgs + */ +function useDefaultValueOption(longOption, optionConfig, values) { + return objectGetOwn(optionConfig, 'default') !== undefined && + values[longOption] === undefined; +} + +module.exports = { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +}; diff --git a/node_modules/@types/debug/LICENSE b/node_modules/@types/debug/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/debug/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/debug/README.md b/node_modules/@types/debug/README.md new file mode 100644 index 0000000000..e9563de5c1 --- /dev/null +++ b/node_modules/@types/debug/README.md @@ -0,0 +1,69 @@ +# Installation +> `npm install --save @types/debug` + +# Summary +This package contains type definitions for debug (https://github.com/debug-js/debug). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug/index.d.ts) +````ts +declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; + +export = debug; +export as namespace debug; + +declare namespace debug { + interface Debug { + (namespace: string): Debugger; + coerce: (val: any) => any; + disable: () => string; + enable: (namespaces: string) => void; + enabled: (namespaces: string) => boolean; + formatArgs: (this: Debugger, args: any[]) => void; + log: (...args: any[]) => any; + selectColor: (namespace: string) => string | number; + humanize: typeof import("ms"); + + names: RegExp[]; + skips: RegExp[]; + + formatters: Formatters; + + inspectOpts?: { + hideDate?: boolean | number | null; + colors?: boolean | number | null; + depth?: boolean | number | null; + showHidden?: boolean | number | null; + }; + } + + type IDebug = Debug; + + interface Formatters { + [formatter: string]: (v: any) => string; + } + + type IDebugger = Debugger; + + interface Debugger { + (formatter: any, ...args: any[]): void; + + color: string; + diff: number; + enabled: boolean; + log: (...args: any[]) => any; + namespace: string; + destroy: () => boolean; + extend: (namespace: string, delimiter?: string) => Debugger; + } +} + +```` + +### Additional Details + * Last updated: Thu, 09 Nov 2023 03:06:57 GMT + * Dependencies: [@types/ms](https://npmjs.com/package/@types/ms) + +# Credits +These definitions were written by [Seon-Wook Park](https://github.com/swook), [Gal Talmor](https://github.com/galtalmor), [John McLaughlin](https://github.com/zamb3zi), [Brasten Sager](https://github.com/brasten), [Nicolas Penin](https://github.com/npenin), [Kristian Brünn](https://github.com/kristianmitk), and [Caleb Gregory](https://github.com/calebgregory). diff --git a/node_modules/@types/debug/index.d.ts b/node_modules/@types/debug/index.d.ts new file mode 100644 index 0000000000..3778eb8dbc --- /dev/null +++ b/node_modules/@types/debug/index.d.ts @@ -0,0 +1,50 @@ +declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; + +export = debug; +export as namespace debug; + +declare namespace debug { + interface Debug { + (namespace: string): Debugger; + coerce: (val: any) => any; + disable: () => string; + enable: (namespaces: string) => void; + enabled: (namespaces: string) => boolean; + formatArgs: (this: Debugger, args: any[]) => void; + log: (...args: any[]) => any; + selectColor: (namespace: string) => string | number; + humanize: typeof import("ms"); + + names: RegExp[]; + skips: RegExp[]; + + formatters: Formatters; + + inspectOpts?: { + hideDate?: boolean | number | null; + colors?: boolean | number | null; + depth?: boolean | number | null; + showHidden?: boolean | number | null; + }; + } + + type IDebug = Debug; + + interface Formatters { + [formatter: string]: (v: any) => string; + } + + type IDebugger = Debugger; + + interface Debugger { + (formatter: any, ...args: any[]): void; + + color: string; + diff: number; + enabled: boolean; + log: (...args: any[]) => any; + namespace: string; + destroy: () => boolean; + extend: (namespace: string, delimiter?: string) => Debugger; + } +} diff --git a/node_modules/@types/debug/package.json b/node_modules/@types/debug/package.json new file mode 100644 index 0000000000..9127e48fe6 --- /dev/null +++ b/node_modules/@types/debug/package.json @@ -0,0 +1,57 @@ +{ + "name": "@types/debug", + "version": "4.1.12", + "description": "TypeScript definitions for debug", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug", + "license": "MIT", + "contributors": [ + { + "name": "Seon-Wook Park", + "githubUsername": "swook", + "url": "https://github.com/swook" + }, + { + "name": "Gal Talmor", + "githubUsername": "galtalmor", + "url": "https://github.com/galtalmor" + }, + { + "name": "John McLaughlin", + "githubUsername": "zamb3zi", + "url": "https://github.com/zamb3zi" + }, + { + "name": "Brasten Sager", + "githubUsername": "brasten", + "url": "https://github.com/brasten" + }, + { + "name": "Nicolas Penin", + "githubUsername": "npenin", + "url": "https://github.com/npenin" + }, + { + "name": "Kristian Brünn", + "githubUsername": "kristianmitk", + "url": "https://github.com/kristianmitk" + }, + { + "name": "Caleb Gregory", + "githubUsername": "calebgregory", + "url": "https://github.com/calebgregory" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/debug" + }, + "scripts": {}, + "dependencies": { + "@types/ms": "*" + }, + "typesPublisherContentHash": "1053110a8e5e302f35fb57f45389304fa5a4f53bb8982b76b8065bcfd7083731", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/node_modules/@types/katex/LICENSE b/node_modules/@types/katex/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/katex/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/katex/README.md b/node_modules/@types/katex/README.md new file mode 100644 index 0000000000..bdaeab425b --- /dev/null +++ b/node_modules/@types/katex/README.md @@ -0,0 +1,15 @@ +# Installation +> `npm install --save @types/katex` + +# Summary +This package contains type definitions for katex (http://khan.github.io/KaTeX/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex. + +### Additional Details + * Last updated: Mon, 20 Nov 2023 23:36:24 GMT + * Dependencies: none + +# Credits +These definitions were written by [Michael Randolph](https://github.com/mrand01), [Kevin Nguyen](https://github.com/knguyen0125), [bLue](https://github.com/dreamerblue), [Sebastian Weigand](https://github.com/s-weigand), [sapphi-red](https://github.com/sapphi-red), and [Stefaans](https://github.com/Stefaans). diff --git a/node_modules/@types/katex/contrib/auto-render.d.ts b/node_modules/@types/katex/contrib/auto-render.d.ts new file mode 100644 index 0000000000..86db5d3b98 --- /dev/null +++ b/node_modules/@types/katex/contrib/auto-render.d.ts @@ -0,0 +1,67 @@ +import { KatexOptions } from "../index.js"; + +declare namespace renderMathInElement { + interface RenderMathInElementSpecificOptionsDelimiters { + /** + * A string which starts the math expression (i.e. the left delimiter) + */ + left: string; + /** + * A string which ends the math expression (i.e. the right delimiter) + */ + right: string; + /** + * A boolean of whether the math in the expression should be rendered in display mode or not + */ + display: boolean; + } + + interface RenderMathInElementSpecificOptions { + /** + * A list of delimiters to look for math + * + * @default [ + * {left: "$$", right: "$$", display: true}, + * {left: "\\(", right: "\\)", display: false}, + * {left: "\\[", right: "\\]", display: true} + * ] + */ + delimiters?: readonly RenderMathInElementSpecificOptionsDelimiters[] | undefined; + /** + * A list of DOM node types to ignore when recursing through + * + * @default ["script", "noscript", "style", "textarea", "pre", "code"] + */ + ignoredTags?: ReadonlyArray | undefined; + /** + * A list of DOM node class names to ignore when recursing through + * + * @default [] + */ + ignoredClasses?: string[] | undefined; + + /** + * A callback method returning a message and an error stack in case of an critical error during rendering + * @param msg Message generated by KaTeX + * @param err Caught error + * + * @default console.error + */ + errorCallback?(msg: string, err: Error): void; + } + + /** + * renderMathInElement options contain KaTeX render options and renderMathInElement specific options + */ + type RenderMathInElementOptions = KatexOptions & RenderMathInElementSpecificOptions; +} + +/** + * Auto-render TeX expressions in HTML element + * @param elem HTML element to auto-render + * @param options Render options + */ +declare function renderMathInElement(elem: HTMLElement, options?: renderMathInElement.RenderMathInElementOptions): void; + +export = renderMathInElement; +export as namespace renderMathInElement; diff --git a/node_modules/@types/katex/index.d.ts b/node_modules/@types/katex/index.d.ts new file mode 100644 index 0000000000..59ec21f757 --- /dev/null +++ b/node_modules/@types/katex/index.d.ts @@ -0,0 +1,151 @@ +export interface TrustContext { + command: string; + url: string; + protocol: string; +} + +/** Documentation: https://katex.org/docs/options.html */ +export interface KatexOptions { + /** + * If `true`, math will be rendered in display mode + * (math in display style and center math on page) + * + * If `false`, math will be rendered in inline mode + * @default false + */ + displayMode?: boolean | undefined; + /** + * Determines the markup language of the output. The valid choices are: + * - `html`: Outputs KaTeX in HTML only. + * - `mathml`: Outputs KaTeX in MathML only. + * - `htmlAndMathml`: Outputs HTML for visual rendering + * and includes MathML for accessibility. + * + * @default 'htmlAndMathml' + */ + output?: "html" | "mathml" | "htmlAndMathml" | undefined; + /** + * If `true`, display math has \tags rendered on the left + * instead of the right, like \usepackage[leqno]{amsmath} in LaTeX. + * + * @default false + */ + leqno?: boolean | undefined; + /** + * If `true`, display math renders flush left with a 2em left margin, + * like \documentclass[fleqn] in LaTeX with the amsmath package. + * + * @default false + */ + fleqn?: boolean | undefined; + /** + * If `true`, KaTeX will throw a `ParseError` when + * it encounters an unsupported command or invalid LaTex + * + * If `false`, KaTeX will render unsupported commands as + * text, and render invalid LaTeX as its source code with + * hover text giving the error, in color given by errorColor + * @default true + */ + throwOnError?: boolean | undefined; + /** + * A Color string given in format `#XXX` or `#XXXXXX` + */ + errorColor?: string | undefined; + /** + * A collection of custom macros. + * + * See `src/macros.js` for its usage + */ + macros?: any; + /** + * Specifies a minimum thickness, in ems, for fraction lines, + * \sqrt top lines, {array} vertical lines, \hline, \hdashline, + * \underline, \overline, and the borders of \fbox, \boxed, and + * \fcolorbox. + */ + minRuleThickness?: number | undefined; + /** + * If `true`, `\color` will work like LaTeX's `\textcolor` + * and takes 2 arguments + * + * If `false`, `\color` will work like LaTeX's `\color` + * and takes 1 argument + * + * In both cases, `\textcolor` works as in LaTeX + * + * @default false + */ + colorIsTextColor?: boolean | undefined; + /** + * All user-specified sizes will be caped to `maxSize` ems + * + * If set to Infinity, users can make elements and space + * arbitrarily large + * + * @default Infinity + */ + maxSize?: number | undefined; + /** + * Limit the number of macro expansions to specified number + * + * If set to `Infinity`, marco expander will try to fully expand + * as in LaTex + * + * @default 1000 + */ + maxExpand?: number | undefined; + /** + * If `false` or `"ignore"`, allow features that make + * writing in LaTex convenient but not supported by LaTex + * + * If `true` or `"error"`, throw an error for such transgressions + * + * If `"warn"`, warn about behavior via `console.warn` + * + * @default "warn" + */ + strict?: boolean | string | Function | undefined; + /** + * If `false` (do not trust input), prevent any commands that could enable adverse behavior, rendering them instead in errorColor. + * + * If `true` (trust input), allow all such commands. + * + * @default false + */ + trust?: boolean | ((context: TrustContext) => boolean) | undefined; + /** + * Place KaTeX code in the global group. + * + * @default false + */ + globalGroup?: boolean | undefined; +} + +/** + * KaTeX error, usually during parsing. + */ +export class ParseError implements Error { + constructor(message: string, lexer: any, position: number); + + name: string; + message: string; + position: number; +} + +/** + * Renders a TeX expression into the specified DOM element + * @param tex A TeX expression + * @param element The DOM element to render into + * @param options KaTeX options + */ +export function render(tex: string, element: HTMLElement, options?: KatexOptions): void; + +/** + * Renders a TeX expression into an HTML string + * @param tex A TeX expression + * @param options KaTeX options + */ +export function renderToString(tex: string, options?: KatexOptions): string; + +export as namespace katex; diff --git a/node_modules/@types/katex/package.json b/node_modules/@types/katex/package.json new file mode 100644 index 0000000000..0128c544e1 --- /dev/null +++ b/node_modules/@types/katex/package.json @@ -0,0 +1,50 @@ +{ + "name": "@types/katex", + "version": "0.16.7", + "description": "TypeScript definitions for katex", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex", + "license": "MIT", + "contributors": [ + { + "name": "Michael Randolph", + "githubUsername": "mrand01", + "url": "https://github.com/mrand01" + }, + { + "name": "Kevin Nguyen", + "githubUsername": "knguyen0125", + "url": "https://github.com/knguyen0125" + }, + { + "name": "bLue", + "githubUsername": "dreamerblue", + "url": "https://github.com/dreamerblue" + }, + { + "name": "Sebastian Weigand", + "githubUsername": "s-weigand", + "url": "https://github.com/s-weigand" + }, + { + "name": "sapphi-red", + "githubUsername": "sapphi-red", + "url": "https://github.com/sapphi-red" + }, + { + "name": "Stefaans", + "githubUsername": "Stefaans", + "url": "https://github.com/Stefaans" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/katex" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "5e09618b84fb6154b3cd4956ffc16513292057ac5cbfc7e16676474d3cecf13a", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/node_modules/@types/ms/LICENSE b/node_modules/@types/ms/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/ms/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/ms/README.md b/node_modules/@types/ms/README.md new file mode 100644 index 0000000000..1152869e50 --- /dev/null +++ b/node_modules/@types/ms/README.md @@ -0,0 +1,82 @@ +# Installation +> `npm install --save @types/ms` + +# Summary +This package contains type definitions for ms (https://github.com/vercel/ms). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms/index.d.ts) +````ts +/** + * Short/Long format for `value`. + * + * @param {Number} value + * @param {{long: boolean}} options + * @return {String} + */ +declare function ms(value: number, options?: { long: boolean }): string; + +/** + * Parse the given `value` and return milliseconds. + * + * @param {ms.StringValue} value + * @return {Number} + */ +declare function ms(value: ms.StringValue): number; + +declare namespace ms { + // Unit, UnitAnyCase, and StringValue are backported from ms@3 + // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts + + type Unit = + | "Years" + | "Year" + | "Yrs" + | "Yr" + | "Y" + | "Weeks" + | "Week" + | "W" + | "Days" + | "Day" + | "D" + | "Hours" + | "Hour" + | "Hrs" + | "Hr" + | "H" + | "Minutes" + | "Minute" + | "Mins" + | "Min" + | "M" + | "Seconds" + | "Second" + | "Secs" + | "Sec" + | "s" + | "Milliseconds" + | "Millisecond" + | "Msecs" + | "Msec" + | "Ms"; + + type UnitAnyCase = Unit | Uppercase | Lowercase; + + type StringValue = + | `${number}` + | `${number}${UnitAnyCase}` + | `${number} ${UnitAnyCase}`; +} + +export = ms; + +```` + +### Additional Details + * Last updated: Thu, 16 Jan 2025 21:02:45 GMT + * Dependencies: none + +# Credits +These definitions were written by [Zhiyuan Wang](https://github.com/danny8002). diff --git a/node_modules/@types/ms/index.d.ts b/node_modules/@types/ms/index.d.ts new file mode 100644 index 0000000000..b1b1f5159a --- /dev/null +++ b/node_modules/@types/ms/index.d.ts @@ -0,0 +1,63 @@ +/** + * Short/Long format for `value`. + * + * @param {Number} value + * @param {{long: boolean}} options + * @return {String} + */ +declare function ms(value: number, options?: { long: boolean }): string; + +/** + * Parse the given `value` and return milliseconds. + * + * @param {ms.StringValue} value + * @return {Number} + */ +declare function ms(value: ms.StringValue): number; + +declare namespace ms { + // Unit, UnitAnyCase, and StringValue are backported from ms@3 + // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts + + type Unit = + | "Years" + | "Year" + | "Yrs" + | "Yr" + | "Y" + | "Weeks" + | "Week" + | "W" + | "Days" + | "Day" + | "D" + | "Hours" + | "Hour" + | "Hrs" + | "Hr" + | "H" + | "Minutes" + | "Minute" + | "Mins" + | "Min" + | "M" + | "Seconds" + | "Second" + | "Secs" + | "Sec" + | "s" + | "Milliseconds" + | "Millisecond" + | "Msecs" + | "Msec" + | "Ms"; + + type UnitAnyCase = Unit | Uppercase | Lowercase; + + type StringValue = + | `${number}` + | `${number}${UnitAnyCase}` + | `${number} ${UnitAnyCase}`; +} + +export = ms; diff --git a/node_modules/@types/ms/package.json b/node_modules/@types/ms/package.json new file mode 100644 index 0000000000..0f547d02ca --- /dev/null +++ b/node_modules/@types/ms/package.json @@ -0,0 +1,26 @@ +{ + "name": "@types/ms", + "version": "2.1.0", + "description": "TypeScript definitions for ms", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms", + "license": "MIT", + "contributors": [ + { + "name": "Zhiyuan Wang", + "githubUsername": "danny8002", + "url": "https://github.com/danny8002" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/ms" + }, + "scripts": {}, + "dependencies": {}, + "peerDependencies": {}, + "typesPublisherContentHash": "2c8651ce1714fdc6bcbc0f262c93a790f1d127fb1c2dc8edbb583decef56fd39", + "typeScriptVersion": "5.0" +} \ No newline at end of file diff --git a/node_modules/@types/unist/LICENSE b/node_modules/@types/unist/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/unist/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/unist/README.md b/node_modules/@types/unist/README.md new file mode 100644 index 0000000000..b038f89e90 --- /dev/null +++ b/node_modules/@types/unist/README.md @@ -0,0 +1,122 @@ +# Installation +> `npm install --save @types/unist` + +# Summary +This package contains type definitions for unist (https://github.com/syntax-tree/unist). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2/index.d.ts) +````ts +/** + * Syntactic units in unist syntax trees are called nodes. + * + * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. + */ +export interface Node { + /** + * The variant of a node. + */ + type: string; + + /** + * Information from the ecosystem. + */ + data?: TData | undefined; + + /** + * Location of a node in a source document. + * Must not be present if a node is generated. + */ + position?: Position | undefined; +} + +/** + * Information associated by the ecosystem with the node. + * Space is guaranteed to never be specified by unist or specifications + * implementing unist. + */ +export interface Data { + [key: string]: unknown; +} + +/** + * Location of a node in a source file. + */ +export interface Position { + /** + * Place of the first character of the parsed source region. + */ + start: Point; + + /** + * Place of the first character after the parsed source region. + */ + end: Point; + + /** + * Start column at each index (plus start line) in the source region, + * for elements that span multiple lines. + */ + indent?: number[] | undefined; +} + +/** + * One place in a source file. + */ +export interface Point { + /** + * Line in a source file (1-indexed integer). + */ + line: number; + + /** + * Column in a source file (1-indexed integer). + */ + column: number; + /** + * Character in a source file (0-indexed integer). + */ + offset?: number | undefined; +} + +/** + * Util for extracting type of {@link Node.data} + * + * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. + * + * @example `NodeData>` -> `{ key: string }` + */ +export type NodeData> = TNode extends Node ? TData : never; + +/** + * Nodes containing other nodes. + * + * @typeParam ChildNode Node item of {@link Parent.children} + */ +export interface Parent = Node, TData extends object = NodeData> + extends Node +{ + /** + * List representing the children of a node. + */ + children: ChildNode[]; +} + +/** + * Nodes containing a value. + * + * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node + */ +export interface Literal extends Node { + value: Value; +} + +```` + +### Additional Details + * Last updated: Thu, 15 Aug 2024 02:18:53 GMT + * Dependencies: none + +# Credits +These definitions were written by [bizen241](https://github.com/bizen241), [Jun Lu](https://github.com/lujun2), [Hernan Rajchert](https://github.com/hrajchert), [Titus Wormer](https://github.com/wooorm), [Junyoung Choi](https://github.com/rokt33r), [Ben Moon](https://github.com/GuiltyDolphin), and [JounQin](https://github.com/JounQin). diff --git a/node_modules/@types/unist/index.d.ts b/node_modules/@types/unist/index.d.ts new file mode 100644 index 0000000000..b019d389d1 --- /dev/null +++ b/node_modules/@types/unist/index.d.ts @@ -0,0 +1,103 @@ +/** + * Syntactic units in unist syntax trees are called nodes. + * + * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. + */ +export interface Node { + /** + * The variant of a node. + */ + type: string; + + /** + * Information from the ecosystem. + */ + data?: TData | undefined; + + /** + * Location of a node in a source document. + * Must not be present if a node is generated. + */ + position?: Position | undefined; +} + +/** + * Information associated by the ecosystem with the node. + * Space is guaranteed to never be specified by unist or specifications + * implementing unist. + */ +export interface Data { + [key: string]: unknown; +} + +/** + * Location of a node in a source file. + */ +export interface Position { + /** + * Place of the first character of the parsed source region. + */ + start: Point; + + /** + * Place of the first character after the parsed source region. + */ + end: Point; + + /** + * Start column at each index (plus start line) in the source region, + * for elements that span multiple lines. + */ + indent?: number[] | undefined; +} + +/** + * One place in a source file. + */ +export interface Point { + /** + * Line in a source file (1-indexed integer). + */ + line: number; + + /** + * Column in a source file (1-indexed integer). + */ + column: number; + /** + * Character in a source file (0-indexed integer). + */ + offset?: number | undefined; +} + +/** + * Util for extracting type of {@link Node.data} + * + * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. + * + * @example `NodeData>` -> `{ key: string }` + */ +export type NodeData> = TNode extends Node ? TData : never; + +/** + * Nodes containing other nodes. + * + * @typeParam ChildNode Node item of {@link Parent.children} + */ +export interface Parent = Node, TData extends object = NodeData> + extends Node +{ + /** + * List representing the children of a node. + */ + children: ChildNode[]; +} + +/** + * Nodes containing a value. + * + * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node + */ +export interface Literal extends Node { + value: Value; +} diff --git a/node_modules/@types/unist/package.json b/node_modules/@types/unist/package.json new file mode 100644 index 0000000000..01cb5b0d4e --- /dev/null +++ b/node_modules/@types/unist/package.json @@ -0,0 +1,55 @@ +{ + "name": "@types/unist", + "version": "2.0.11", + "description": "TypeScript definitions for unist", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist", + "license": "MIT", + "contributors": [ + { + "name": "bizen241", + "githubUsername": "bizen241", + "url": "https://github.com/bizen241" + }, + { + "name": "Jun Lu", + "githubUsername": "lujun2", + "url": "https://github.com/lujun2" + }, + { + "name": "Hernan Rajchert", + "githubUsername": "hrajchert", + "url": "https://github.com/hrajchert" + }, + { + "name": "Titus Wormer", + "githubUsername": "wooorm", + "url": "https://github.com/wooorm" + }, + { + "name": "Junyoung Choi", + "githubUsername": "rokt33r", + "url": "https://github.com/rokt33r" + }, + { + "name": "Ben Moon", + "githubUsername": "GuiltyDolphin", + "url": "https://github.com/GuiltyDolphin" + }, + { + "name": "JounQin", + "githubUsername": "JounQin", + "url": "https://github.com/JounQin" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/unist" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "6e36525a6db49ae5517fe0751796ca8f6c65099098415046d4f1ad6c2ef1a33c", + "typeScriptVersion": "4.8" +} \ No newline at end of file diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..7d562e9ca9 --- /dev/null +++ b/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,33 @@ +export type Options = { + /** + Match only the first ANSI escape. + + @default false + */ + readonly onlyFirst: boolean; +}; + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex from 'ansi-regex'; + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +export default function ansiRegex(options?: Options): RegExp; diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..ddfdba39a7 --- /dev/null +++ b/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +export default function ansiRegex({onlyFirst = false} = {}) { + // Valid string terminator sequences are BEL, ESC\, and 0x9c + const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)'; + const pattern = [ + `[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))', + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +} diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..49f3f61021 --- /dev/null +++ b/node_modules/ansi-regex/package.json @@ -0,0 +1,61 @@ +{ + "name": "ansi-regex", + "version": "6.1.0", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "funding": "https://github.com/chalk/ansi-regex?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "types": "./index.d.ts", + "sideEffects": false, + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ansi-escapes": "^5.0.0", + "ava": "^3.15.0", + "tsd": "^0.21.0", + "xo": "^0.54.2" + } +} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..1e91ee10f5 --- /dev/null +++ b/node_modules/ansi-regex/readme.md @@ -0,0 +1,60 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + +## Install + +```sh +npm install ansi-regex +``` + +## Usage + +```js +import ansiRegex from 'ansi-regex'; + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`\ +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) diff --git a/node_modules/ansi-styles/index.d.ts b/node_modules/ansi-styles/index.d.ts new file mode 100644 index 0000000000..58f133abe9 --- /dev/null +++ b/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,236 @@ +export interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; +} + +export interface ColorBase { + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + + ansi(code: number): string; + + ansi256(code: number): string; + + ansi16m(red: number, green: number, blue: number): string; +} + +export interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Make text overline. + + Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash. + */ + readonly overline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; +} + +export interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; +} + +export interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; +} + +export interface ConvertColor { + /** + Convert from the RGB color space to the ANSI 256 color space. + + @param red - (`0...255`) + @param green - (`0...255`) + @param blue - (`0...255`) + */ + rgbToAnsi256(red: number, green: number, blue: number): number; + + /** + Convert from the RGB HEX color space to the RGB color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToRgb(hex: string): [red: number, green: number, blue: number]; + + /** + Convert from the RGB HEX color space to the ANSI 256 color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToAnsi256(hex: string): number; + + /** + Convert from the ANSI 256 color space to the ANSI 16 color space. + + @param code - A number representing the ANSI 256 color. + */ + ansi256ToAnsi(code: number): number; + + /** + Convert from the RGB color space to the ANSI 16 color space. + + @param red - (`0...255`) + @param green - (`0...255`) + @param blue - (`0...255`) + */ + rgbToAnsi(red: number, green: number, blue: number): number; + + /** + Convert from the RGB HEX color space to the ANSI 16 color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToAnsi(hex: string): number; +} + +/** +Basic modifier names. +*/ +export type ModifierName = keyof Modifier; + +/** +Basic foreground color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type ForegroundColorName = keyof ForegroundColor; + +/** +Basic background color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type BackgroundColorName = keyof BackgroundColor; + +/** +Basic color names. The combination of foreground and background color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type ColorName = ForegroundColorName | BackgroundColorName; + +/** +Basic modifier names. +*/ +export const modifierNames: readonly ModifierName[]; + +/** +Basic foreground color names. +*/ +export const foregroundColorNames: readonly ForegroundColorName[]; + +/** +Basic background color names. +*/ +export const backgroundColorNames: readonly BackgroundColorName[]; + +/* +Basic color names. The combination of foreground and background color names. +*/ +export const colorNames: readonly ColorName[]; + +declare const ansiStyles: { + readonly modifier: Modifier; + readonly color: ColorBase & ForegroundColor; + readonly bgColor: ColorBase & BackgroundColor; + readonly codes: ReadonlyMap; +} & ForegroundColor & BackgroundColor & Modifier & ConvertColor; + +export default ansiStyles; diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js new file mode 100644 index 0000000000..d7bede44b7 --- /dev/null +++ b/node_modules/ansi-styles/index.js @@ -0,0 +1,223 @@ +const ANSI_BACKGROUND_OFFSET = 10; + +const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`; + +const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`; + +const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`; + +const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + overline: [53, 55], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29], + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + gray: [90, 39], // Alias of `blackBright` + grey: [90, 39], // Alias of `blackBright` + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39], + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgGray: [100, 49], // Alias of `bgBlackBright` + bgGrey: [100, 49], // Alias of `bgBlackBright` + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49], + }, +}; + +export const modifierNames = Object.keys(styles.modifier); +export const foregroundColorNames = Object.keys(styles.color); +export const backgroundColorNames = Object.keys(styles.bgColor); +export const colorNames = [...foregroundColorNames, ...backgroundColorNames]; + +function assembleStyles() { + const codes = new Map(); + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m`, + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false, + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false, + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = wrapAnsi16(); + styles.color.ansi256 = wrapAnsi256(); + styles.color.ansi16m = wrapAnsi16m(); + styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET); + styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); + styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); + + // From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js + Object.defineProperties(styles, { + rgbToAnsi256: { + value: (red, green, blue) => { + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (red === green && green === blue) { + if (red < 8) { + return 16; + } + + if (red > 248) { + return 231; + } + + return Math.round(((red - 8) / 247) * 24) + 232; + } + + return 16 + + (36 * Math.round(red / 255 * 5)) + + (6 * Math.round(green / 255 * 5)) + + Math.round(blue / 255 * 5); + }, + enumerable: false, + }, + hexToRgb: { + value: hex => { + const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16)); + if (!matches) { + return [0, 0, 0]; + } + + let [colorString] = matches; + + if (colorString.length === 3) { + colorString = [...colorString].map(character => character + character).join(''); + } + + const integer = Number.parseInt(colorString, 16); + + return [ + /* eslint-disable no-bitwise */ + (integer >> 16) & 0xFF, + (integer >> 8) & 0xFF, + integer & 0xFF, + /* eslint-enable no-bitwise */ + ]; + }, + enumerable: false, + }, + hexToAnsi256: { + value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)), + enumerable: false, + }, + ansi256ToAnsi: { + value: code => { + if (code < 8) { + return 30 + code; + } + + if (code < 16) { + return 90 + (code - 8); + } + + let red; + let green; + let blue; + + if (code >= 232) { + red = (((code - 232) * 10) + 8) / 255; + green = red; + blue = red; + } else { + code -= 16; + + const remainder = code % 36; + + red = Math.floor(code / 36) / 5; + green = Math.floor(remainder / 6) / 5; + blue = (remainder % 6) / 5; + } + + const value = Math.max(red, green, blue) * 2; + + if (value === 0) { + return 30; + } + + // eslint-disable-next-line no-bitwise + let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red)); + + if (value === 2) { + result += 60; + } + + return result; + }, + enumerable: false, + }, + rgbToAnsi: { + value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), + enumerable: false, + }, + hexToAnsi: { + value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), + enumerable: false, + }, + }); + + return styles; +} + +const ansiStyles = assembleStyles(); + +export default ansiStyles; diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json new file mode 100644 index 0000000000..6cd3ca5bf9 --- /dev/null +++ b/node_modules/ansi-styles/package.json @@ -0,0 +1,54 @@ +{ + "name": "ansi-styles", + "version": "6.2.1", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "devDependencies": { + "ava": "^3.15.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.19.0", + "xo": "^0.47.0" + } +} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000000..6d04183f0c --- /dev/null +++ b/node_modules/ansi-styles/readme.md @@ -0,0 +1,173 @@ +# ansi-styles + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + +![](screenshot.png) + +## Install + +```sh +npm install ansi-styles +``` + +## Usage + +```js +import styles from 'ansi-styles'; + +console.log(`${styles.green.open}Hello world!${styles.green.close}`); + + +// Color conversion between 256/truecolor +// NOTE: When converting from truecolor to 256 colors, the original color +// may be degraded to fit the new color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`) +console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`) +console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`) +``` + +## API + +### `open` and `close` + +Each style has an `open` and `close` property. + +### `modifierNames`, `foregroundColorNames`, `backgroundColorNames`, and `colorNames` + +All supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`. + +This can be useful if you need to validate input: + +```js +import {modifierNames, foregroundColorNames} from 'ansi-styles'; + +console.log(modifierNames.includes('bold')); +//=> true + +console.log(foregroundColorNames.includes('pink')); +//=> false +``` + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `overline` *Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.* +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `styles.modifier` +- `styles.color` +- `styles.bgColor` + +###### Example + +```js +import styles from 'ansi-styles'; + +console.log(styles.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `styles.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +import styles from 'ansi-styles'; + +console.log(styles.codes.get(36)); +//=> 39 +``` + +## 16 / 256 / 16 million (TrueColor) support + +`ansi-styles` allows converting between various color formats and ANSI escapes, with support for 16, 256 and [16 million colors](https://gist.github.com/XVilka/8346728). + +The following color spaces are supported: + +- `rgb` +- `hex` +- `ansi256` +- `ansi` + +To use these, call the associated conversion function with the intended output, for example: + +```js +import styles from 'ansi-styles'; + +styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code +styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code + +styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code +styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code + +styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code +styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md new file mode 100644 index 0000000000..dc39ed6952 --- /dev/null +++ b/node_modules/argparse/CHANGELOG.md @@ -0,0 +1,216 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [2.0.1] - 2020-08-29 +### Fixed +- Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150. + + +## [2.0.0] - 2020-08-14 +### Changed +- Full rewrite. Now port from python 3.9.0 & more precise following. + See [doc](./doc) for difference and migration info. +- node.js 10+ required +- Removed most of local docs in favour of original ones. + + +## [1.0.10] - 2018-02-15 +### Fixed +- Use .concat instead of + for arrays, #122. + + +## [1.0.9] - 2016-09-29 +### Changed +- Rerelease after 1.0.8 - deps cleanup. + + +## [1.0.8] - 2016-09-29 +### Changed +- Maintenance (deps bump, fix node 6.5+ tests, coverage report). + + +## [1.0.7] - 2016-03-17 +### Changed +- Teach `addArgument` to accept string arg names. #97, @tomxtobin. + + +## [1.0.6] - 2016-02-06 +### Changed +- Maintenance: moved to eslint & updated CS. + + +## [1.0.5] - 2016-02-05 +### Changed +- Removed lodash dependency to significantly reduce install size. + Thanks to @mourner. + + +## [1.0.4] - 2016-01-17 +### Changed +- Maintenance: lodash update to 4.0.0. + + +## [1.0.3] - 2015-10-27 +### Fixed +- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. + + +## [1.0.2] - 2015-03-22 +### Changed +- Relaxed lodash version dependency. + + +## [1.0.1] - 2015-02-20 +### Changed +- Changed dependencies to be compatible with ancient nodejs. + + +## [1.0.0] - 2015-02-19 +### Changed +- Maintenance release. +- Replaced `underscore` with `lodash`. +- Bumped version to 1.0.0 to better reflect semver meaning. +- HISTORY.md -> CHANGELOG.md + + +## [0.1.16] - 2013-12-01 +### Changed +- Maintenance release. Updated dependencies and docs. + + +## [0.1.15] - 2013-05-13 +### Fixed +- Fixed #55, @trebor89 + + +## [0.1.14] - 2013-05-12 +### Fixed +- Fixed #62, @maxtaco + + +## [0.1.13] - 2013-04-08 +### Changed +- Added `.npmignore` to reduce package size + + +## [0.1.12] - 2013-02-10 +### Fixed +- Fixed conflictHandler (#46), @hpaulj + + +## [0.1.11] - 2013-02-07 +### Added +- Added 70+ tests (ported from python), @hpaulj +- Added conflictHandler, @applepicke +- Added fromfilePrefixChar, @hpaulj + +### Fixed +- Multiple bugfixes, @hpaulj + + +## [0.1.10] - 2012-12-30 +### Added +- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) + support, thanks to @hpaulj + +### Fixed +- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj + + +## [0.1.9] - 2012-12-27 +### Fixed +- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj +- Fixed default value behavior with `*` positionals, thanks to @hpaulj +- Improve `getDefault()` behavior, thanks to @hpaulj +- Improve negative argument parsing, thanks to @hpaulj + + +## [0.1.8] - 2012-12-01 +### Fixed +- Fixed parser parents (issue #19), thanks to @hpaulj +- Fixed negative argument parse (issue #20), thanks to @hpaulj + + +## [0.1.7] - 2012-10-14 +### Fixed +- Fixed 'choices' argument parse (issue #16) +- Fixed stderr output (issue #15) + + +## [0.1.6] - 2012-09-09 +### Fixed +- Fixed check for conflict of options (thanks to @tomxtobin) + + +## [0.1.5] - 2012-09-03 +### Fixed +- Fix parser #setDefaults method (thanks to @tomxtobin) + + +## [0.1.4] - 2012-07-30 +### Fixed +- Fixed pseudo-argument support (thanks to @CGamesPlay) +- Fixed addHelp default (should be true), if not set (thanks to @benblank) + + +## [0.1.3] - 2012-06-27 +### Fixed +- Fixed formatter api name: Formatter -> HelpFormatter + + +## [0.1.2] - 2012-05-29 +### Fixed +- Removed excess whitespace in help +- Fixed error reporting, when parcer with subcommands + called with empty arguments + +### Added +- Added basic tests + + +## [0.1.1] - 2012-05-23 +### Fixed +- Fixed line wrapping in help formatter +- Added better error reporting on invalid arguments + + +## [0.1.0] - 2012-05-16 +### Added +- First release. + + +[2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0 +[1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10 +[1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9 +[1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8 +[1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7 +[1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6 +[1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5 +[1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4 +[1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0 +[0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16 +[0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15 +[0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14 +[0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13 +[0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12 +[0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11 +[0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10 +[0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9 +[0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8 +[0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7 +[0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6 +[0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5 +[0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4 +[0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3 +[0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2 +[0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1 +[0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0 diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE new file mode 100644 index 0000000000..66a3ac80d7 --- /dev/null +++ b/node_modules/argparse/LICENSE @@ -0,0 +1,254 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md new file mode 100644 index 0000000000..550b5c9b7b --- /dev/null +++ b/node_modules/argparse/README.md @@ -0,0 +1,84 @@ +argparse +======== + +[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) +[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) + +CLI arguments parser for node.js, with [sub-commands](https://docs.python.org/3.9/library/argparse.html#sub-commands) support. Port of python's [argparse](http://docs.python.org/dev/library/argparse.html) (version [3.9.0](https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py)). + +**Difference with original.** + +- JS has no keyword arguments support. + - Pass options instead: `new ArgumentParser({ description: 'example', add_help: true })`. +- JS has no python's types `int`, `float`, ... + - Use string-typed names: `.add_argument('-b', { type: 'int', help: 'help' })`. +- `%r` format specifier uses `require('util').inspect()`. + +More details in [doc](./doc). + + +Example +------- + +`test.js` file: + +```javascript +#!/usr/bin/env node +'use strict'; + +const { ArgumentParser } = require('argparse'); +const { version } = require('./package.json'); + +const parser = new ArgumentParser({ + description: 'Argparse example' +}); + +parser.add_argument('-v', '--version', { action: 'version', version }); +parser.add_argument('-f', '--foo', { help: 'foo bar' }); +parser.add_argument('-b', '--bar', { help: 'bar foo' }); +parser.add_argument('--baz', { help: 'baz bar' }); + +console.dir(parser.parse_args()); +``` + +Display help: + +``` +$ ./test.js -h +usage: test.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] + +Argparse example + +optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -f FOO, --foo FOO foo bar + -b BAR, --bar BAR bar foo + --baz BAZ baz bar +``` + +Parse arguments: + +``` +$ ./test.js -f=3 --bar=4 --baz 5 +{ foo: '3', bar: '4', baz: '5' } +``` + + +API docs +-------- + +Since this is a port with minimal divergence, there's no separate documentation. +Use original one instead, with notes about difference. + +1. [Original doc](https://docs.python.org/3.9/library/argparse.html). +2. [Original tutorial](https://docs.python.org/3.9/howto/argparse.html). +3. [Difference with python](./doc). + + +argparse for enterprise +----------------------- + +Available as part of the Tidelift Subscription + +The maintainers of argparse and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-argparse?utm_source=npm-argparse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/argparse.js b/node_modules/argparse/argparse.js new file mode 100644 index 0000000000..2b8c8c6317 --- /dev/null +++ b/node_modules/argparse/argparse.js @@ -0,0 +1,3707 @@ +// Port of python's argparse module, version 3.9.0: +// https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py + +'use strict' + +// Copyright (C) 2010-2020 Python Software Foundation. +// Copyright (C) 2020 argparse.js authors + +/* + * Command-line parsing library + * + * This module is an optparse-inspired command-line parsing library that: + * + * - handles both optional and positional arguments + * - produces highly informative usage messages + * - supports parsers that dispatch to sub-parsers + * + * The following is a simple usage example that sums integers from the + * command-line and writes the result to a file:: + * + * parser = argparse.ArgumentParser( + * description='sum the integers at the command line') + * parser.add_argument( + * 'integers', metavar='int', nargs='+', type=int, + * help='an integer to be summed') + * parser.add_argument( + * '--log', default=sys.stdout, type=argparse.FileType('w'), + * help='the file where the sum should be written') + * args = parser.parse_args() + * args.log.write('%s' % sum(args.integers)) + * args.log.close() + * + * The module contains the following public classes: + * + * - ArgumentParser -- The main entry point for command-line parsing. As the + * example above shows, the add_argument() method is used to populate + * the parser with actions for optional and positional arguments. Then + * the parse_args() method is invoked to convert the args at the + * command-line into an object with attributes. + * + * - ArgumentError -- The exception raised by ArgumentParser objects when + * there are errors with the parser's actions. Errors raised while + * parsing the command-line are caught by ArgumentParser and emitted + * as command-line messages. + * + * - FileType -- A factory for defining types of files to be created. As the + * example above shows, instances of FileType are typically passed as + * the type= argument of add_argument() calls. + * + * - Action -- The base class for parser actions. Typically actions are + * selected by passing strings like 'store_true' or 'append_const' to + * the action= argument of add_argument(). However, for greater + * customization of ArgumentParser actions, subclasses of Action may + * be defined and passed as the action= argument. + * + * - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, + * ArgumentDefaultsHelpFormatter -- Formatter classes which + * may be passed as the formatter_class= argument to the + * ArgumentParser constructor. HelpFormatter is the default, + * RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser + * not to change the formatting for help text, and + * ArgumentDefaultsHelpFormatter adds information about argument defaults + * to the help. + * + * All other classes in this module are considered implementation details. + * (Also note that HelpFormatter and RawDescriptionHelpFormatter are only + * considered public as object names -- the API of the formatter objects is + * still considered an implementation detail.) + */ + +const SUPPRESS = '==SUPPRESS==' + +const OPTIONAL = '?' +const ZERO_OR_MORE = '*' +const ONE_OR_MORE = '+' +const PARSER = 'A...' +const REMAINDER = '...' +const _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args' + + +// ================================== +// Utility functions used for porting +// ================================== +const assert = require('assert') +const util = require('util') +const fs = require('fs') +const sub = require('./lib/sub') +const path = require('path') +const repr = util.inspect + +function get_argv() { + // omit first argument (which is assumed to be interpreter - `node`, `coffee`, `ts-node`, etc.) + return process.argv.slice(1) +} + +function get_terminal_size() { + return { + columns: +process.env.COLUMNS || process.stdout.columns || 80 + } +} + +function hasattr(object, name) { + return Object.prototype.hasOwnProperty.call(object, name) +} + +function getattr(object, name, value) { + return hasattr(object, name) ? object[name] : value +} + +function setattr(object, name, value) { + object[name] = value +} + +function setdefault(object, name, value) { + if (!hasattr(object, name)) object[name] = value + return object[name] +} + +function delattr(object, name) { + delete object[name] +} + +function range(from, to, step=1) { + // range(10) is equivalent to range(0, 10) + if (arguments.length === 1) [ to, from ] = [ from, 0 ] + if (typeof from !== 'number' || typeof to !== 'number' || typeof step !== 'number') { + throw new TypeError('argument cannot be interpreted as an integer') + } + if (step === 0) throw new TypeError('range() arg 3 must not be zero') + + let result = [] + if (step > 0) { + for (let i = from; i < to; i += step) result.push(i) + } else { + for (let i = from; i > to; i += step) result.push(i) + } + return result +} + +function splitlines(str, keepends = false) { + let result + if (!keepends) { + result = str.split(/\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/) + } else { + result = [] + let parts = str.split(/(\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029])/) + for (let i = 0; i < parts.length; i += 2) { + result.push(parts[i] + (i + 1 < parts.length ? parts[i + 1] : '')) + } + } + if (!result[result.length - 1]) result.pop() + return result +} + +function _string_lstrip(string, prefix_chars) { + let idx = 0 + while (idx < string.length && prefix_chars.includes(string[idx])) idx++ + return idx ? string.slice(idx) : string +} + +function _string_split(string, sep, maxsplit) { + let result = string.split(sep) + if (result.length > maxsplit) { + result = result.slice(0, maxsplit).concat([ result.slice(maxsplit).join(sep) ]) + } + return result +} + +function _array_equal(array1, array2) { + if (array1.length !== array2.length) return false + for (let i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) return false + } + return true +} + +function _array_remove(array, item) { + let idx = array.indexOf(item) + if (idx === -1) throw new TypeError(sub('%r not in list', item)) + array.splice(idx, 1) +} + +// normalize choices to array; +// this isn't required in python because `in` and `map` operators work with anything, +// but in js dealing with multiple types here is too clunky +function _choices_to_array(choices) { + if (choices === undefined) { + return [] + } else if (Array.isArray(choices)) { + return choices + } else if (choices !== null && typeof choices[Symbol.iterator] === 'function') { + return Array.from(choices) + } else if (typeof choices === 'object' && choices !== null) { + return Object.keys(choices) + } else { + throw new Error(sub('invalid choices value: %r', choices)) + } +} + +// decorator that allows a class to be called without new +function _callable(cls) { + let result = { // object is needed for inferred class name + [cls.name]: function (...args) { + let this_class = new.target === result || !new.target + return Reflect.construct(cls, args, this_class ? cls : new.target) + } + } + result[cls.name].prototype = cls.prototype + // fix default tag for toString, e.g. [object Action] instead of [object Object] + cls.prototype[Symbol.toStringTag] = cls.name + return result[cls.name] +} + +function _alias(object, from, to) { + try { + let name = object.constructor.name + Object.defineProperty(object, from, { + value: util.deprecate(object[to], sub('%s.%s() is renamed to %s.%s()', + name, from, name, to)), + enumerable: false + }) + } catch {} +} + +// decorator that allows snake_case class methods to be called with camelCase and vice versa +function _camelcase_alias(_class) { + for (let name of Object.getOwnPropertyNames(_class.prototype)) { + let camelcase = name.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) + if (camelcase !== name) _alias(_class.prototype, camelcase, name) + } + return _class +} + +function _to_legacy_name(key) { + key = key.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) + if (key === 'default') key = 'defaultValue' + if (key === 'const') key = 'constant' + return key +} + +function _to_new_name(key) { + if (key === 'defaultValue') key = 'default' + if (key === 'constant') key = 'const' + key = key.replace(/[A-Z]/g, c => '_' + c.toLowerCase()) + return key +} + +// parse options +let no_default = Symbol('no_default_value') +function _parse_opts(args, descriptor) { + function get_name() { + let stack = new Error().stack.split('\n') + .map(x => x.match(/^ at (.*) \(.*\)$/)) + .filter(Boolean) + .map(m => m[1]) + .map(fn => fn.match(/[^ .]*$/)[0]) + + if (stack.length && stack[0] === get_name.name) stack.shift() + if (stack.length && stack[0] === _parse_opts.name) stack.shift() + return stack.length ? stack[0] : '' + } + + args = Array.from(args) + let kwargs = {} + let result = [] + let last_opt = args.length && args[args.length - 1] + + if (typeof last_opt === 'object' && last_opt !== null && !Array.isArray(last_opt) && + (!last_opt.constructor || last_opt.constructor.name === 'Object')) { + kwargs = Object.assign({}, args.pop()) + } + + // LEGACY (v1 compatibility): camelcase + let renames = [] + for (let key of Object.keys(descriptor)) { + let old_name = _to_legacy_name(key) + if (old_name !== key && (old_name in kwargs)) { + if (key in kwargs) { + // default and defaultValue specified at the same time, happens often in old tests + //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) + } else { + kwargs[key] = kwargs[old_name] + } + renames.push([ old_name, key ]) + delete kwargs[old_name] + } + } + if (renames.length) { + let name = get_name() + deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', + name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) + } + // end + + let missing_positionals = [] + let positional_count = args.length + + for (let [ key, def ] of Object.entries(descriptor)) { + if (key[0] === '*') { + if (key.length > 0 && key[1] === '*') { + // LEGACY (v1 compatibility): camelcase + let renames = [] + for (let key of Object.keys(kwargs)) { + let new_name = _to_new_name(key) + if (new_name !== key && (key in kwargs)) { + if (new_name in kwargs) { + // default and defaultValue specified at the same time, happens often in old tests + //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), new_name)) + } else { + kwargs[new_name] = kwargs[key] + } + renames.push([ key, new_name ]) + delete kwargs[key] + } + } + if (renames.length) { + let name = get_name() + deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', + name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) + } + // end + result.push(kwargs) + kwargs = {} + } else { + result.push(args) + args = [] + } + } else if (key in kwargs && args.length > 0) { + throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) + } else if (key in kwargs) { + result.push(kwargs[key]) + delete kwargs[key] + } else if (args.length > 0) { + result.push(args.shift()) + } else if (def !== no_default) { + result.push(def) + } else { + missing_positionals.push(key) + } + } + + if (Object.keys(kwargs).length) { + throw new TypeError(sub('%s() got an unexpected keyword argument %r', + get_name(), Object.keys(kwargs)[0])) + } + + if (args.length) { + let from = Object.entries(descriptor).filter(([ k, v ]) => k[0] !== '*' && v !== no_default).length + let to = Object.entries(descriptor).filter(([ k ]) => k[0] !== '*').length + throw new TypeError(sub('%s() takes %s positional argument%s but %s %s given', + get_name(), + from === to ? sub('from %s to %s', from, to) : to, + from === to && to === 1 ? '' : 's', + positional_count, + positional_count === 1 ? 'was' : 'were')) + } + + if (missing_positionals.length) { + let strs = missing_positionals.map(repr) + if (strs.length > 1) strs[strs.length - 1] = 'and ' + strs[strs.length - 1] + let str_joined = strs.join(strs.length === 2 ? '' : ', ') + throw new TypeError(sub('%s() missing %i required positional argument%s: %s', + get_name(), strs.length, strs.length === 1 ? '' : 's', str_joined)) + } + + return result +} + +let _deprecations = {} +function deprecate(id, string) { + _deprecations[id] = _deprecations[id] || util.deprecate(() => {}, string) + _deprecations[id]() +} + + +// ============================= +// Utility functions and classes +// ============================= +function _AttributeHolder(cls = Object) { + /* + * Abstract base class that provides __repr__. + * + * The __repr__ method returns a string in the format:: + * ClassName(attr=name, attr=name, ...) + * The attributes are determined either by a class-level attribute, + * '_kwarg_names', or by inspecting the instance __dict__. + */ + + return class _AttributeHolder extends cls { + [util.inspect.custom]() { + let type_name = this.constructor.name + let arg_strings = [] + let star_args = {} + for (let arg of this._get_args()) { + arg_strings.push(repr(arg)) + } + for (let [ name, value ] of this._get_kwargs()) { + if (/^[a-z_][a-z0-9_$]*$/i.test(name)) { + arg_strings.push(sub('%s=%r', name, value)) + } else { + star_args[name] = value + } + } + if (Object.keys(star_args).length) { + arg_strings.push(sub('**%s', repr(star_args))) + } + return sub('%s(%s)', type_name, arg_strings.join(', ')) + } + + toString() { + return this[util.inspect.custom]() + } + + _get_kwargs() { + return Object.entries(this) + } + + _get_args() { + return [] + } + } +} + + +function _copy_items(items) { + if (items === undefined) { + return [] + } + return items.slice(0) +} + + +// =============== +// Formatting Help +// =============== +const HelpFormatter = _camelcase_alias(_callable(class HelpFormatter { + /* + * Formatter for generating usage messages and argument help strings. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + constructor() { + let [ + prog, + indent_increment, + max_help_position, + width + ] = _parse_opts(arguments, { + prog: no_default, + indent_increment: 2, + max_help_position: 24, + width: undefined + }) + + // default setting for width + if (width === undefined) { + width = get_terminal_size().columns + width -= 2 + } + + this._prog = prog + this._indent_increment = indent_increment + this._max_help_position = Math.min(max_help_position, + Math.max(width - 20, indent_increment * 2)) + this._width = width + + this._current_indent = 0 + this._level = 0 + this._action_max_length = 0 + + this._root_section = this._Section(this, undefined) + this._current_section = this._root_section + + this._whitespace_matcher = /[ \t\n\r\f\v]+/g // equivalent to python /\s+/ with ASCII flag + this._long_break_matcher = /\n\n\n+/g + } + + // =============================== + // Section and indentation methods + // =============================== + _indent() { + this._current_indent += this._indent_increment + this._level += 1 + } + + _dedent() { + this._current_indent -= this._indent_increment + assert(this._current_indent >= 0, 'Indent decreased below 0.') + this._level -= 1 + } + + _add_item(func, args) { + this._current_section.items.push([ func, args ]) + } + + // ======================== + // Message building methods + // ======================== + start_section(heading) { + this._indent() + let section = this._Section(this, this._current_section, heading) + this._add_item(section.format_help.bind(section), []) + this._current_section = section + } + + end_section() { + this._current_section = this._current_section.parent + this._dedent() + } + + add_text(text) { + if (text !== SUPPRESS && text !== undefined) { + this._add_item(this._format_text.bind(this), [text]) + } + } + + add_usage(usage, actions, groups, prefix = undefined) { + if (usage !== SUPPRESS) { + let args = [ usage, actions, groups, prefix ] + this._add_item(this._format_usage.bind(this), args) + } + } + + add_argument(action) { + if (action.help !== SUPPRESS) { + + // find all invocations + let invocations = [this._format_action_invocation(action)] + for (let subaction of this._iter_indented_subactions(action)) { + invocations.push(this._format_action_invocation(subaction)) + } + + // update the maximum item length + let invocation_length = Math.max(...invocations.map(invocation => invocation.length)) + let action_length = invocation_length + this._current_indent + this._action_max_length = Math.max(this._action_max_length, + action_length) + + // add the item to the list + this._add_item(this._format_action.bind(this), [action]) + } + } + + add_arguments(actions) { + for (let action of actions) { + this.add_argument(action) + } + } + + // ======================= + // Help-formatting methods + // ======================= + format_help() { + let help = this._root_section.format_help() + if (help) { + help = help.replace(this._long_break_matcher, '\n\n') + help = help.replace(/^\n+|\n+$/g, '') + '\n' + } + return help + } + + _join_parts(part_strings) { + return part_strings.filter(part => part && part !== SUPPRESS).join('') + } + + _format_usage(usage, actions, groups, prefix) { + if (prefix === undefined) { + prefix = 'usage: ' + } + + // if usage is specified, use that + if (usage !== undefined) { + usage = sub(usage, { prog: this._prog }) + + // if no optionals or positionals are available, usage is just prog + } else if (usage === undefined && !actions.length) { + usage = sub('%(prog)s', { prog: this._prog }) + + // if optionals and positionals are available, calculate usage + } else if (usage === undefined) { + let prog = sub('%(prog)s', { prog: this._prog }) + + // split optionals from positionals + let optionals = [] + let positionals = [] + for (let action of actions) { + if (action.option_strings.length) { + optionals.push(action) + } else { + positionals.push(action) + } + } + + // build full usage string + let action_usage = this._format_actions_usage([].concat(optionals).concat(positionals), groups) + usage = [ prog, action_usage ].map(String).join(' ') + + // wrap the usage parts if it's too long + let text_width = this._width - this._current_indent + if (prefix.length + usage.length > text_width) { + + // break usage into wrappable parts + let part_regexp = /\(.*?\)+(?=\s|$)|\[.*?\]+(?=\s|$)|\S+/g + let opt_usage = this._format_actions_usage(optionals, groups) + let pos_usage = this._format_actions_usage(positionals, groups) + let opt_parts = opt_usage.match(part_regexp) || [] + let pos_parts = pos_usage.match(part_regexp) || [] + assert(opt_parts.join(' ') === opt_usage) + assert(pos_parts.join(' ') === pos_usage) + + // helper for wrapping lines + let get_lines = (parts, indent, prefix = undefined) => { + let lines = [] + let line = [] + let line_len + if (prefix !== undefined) { + line_len = prefix.length - 1 + } else { + line_len = indent.length - 1 + } + for (let part of parts) { + if (line_len + 1 + part.length > text_width && line) { + lines.push(indent + line.join(' ')) + line = [] + line_len = indent.length - 1 + } + line.push(part) + line_len += part.length + 1 + } + if (line.length) { + lines.push(indent + line.join(' ')) + } + if (prefix !== undefined) { + lines[0] = lines[0].slice(indent.length) + } + return lines + } + + let lines + + // if prog is short, follow it with optionals or positionals + if (prefix.length + prog.length <= 0.75 * text_width) { + let indent = ' '.repeat(prefix.length + prog.length + 1) + if (opt_parts.length) { + lines = get_lines([prog].concat(opt_parts), indent, prefix) + lines = lines.concat(get_lines(pos_parts, indent)) + } else if (pos_parts.length) { + lines = get_lines([prog].concat(pos_parts), indent, prefix) + } else { + lines = [prog] + } + + // if prog is long, put it on its own line + } else { + let indent = ' '.repeat(prefix.length) + let parts = [].concat(opt_parts).concat(pos_parts) + lines = get_lines(parts, indent) + if (lines.length > 1) { + lines = [] + lines = lines.concat(get_lines(opt_parts, indent)) + lines = lines.concat(get_lines(pos_parts, indent)) + } + lines = [prog].concat(lines) + } + + // join lines into usage + usage = lines.join('\n') + } + } + + // prefix with 'usage:' + return sub('%s%s\n\n', prefix, usage) + } + + _format_actions_usage(actions, groups) { + // find group indices and identify actions in groups + let group_actions = new Set() + let inserts = {} + for (let group of groups) { + let start = actions.indexOf(group._group_actions[0]) + if (start === -1) { + continue + } else { + let end = start + group._group_actions.length + if (_array_equal(actions.slice(start, end), group._group_actions)) { + for (let action of group._group_actions) { + group_actions.add(action) + } + if (!group.required) { + if (start in inserts) { + inserts[start] += ' [' + } else { + inserts[start] = '[' + } + if (end in inserts) { + inserts[end] += ']' + } else { + inserts[end] = ']' + } + } else { + if (start in inserts) { + inserts[start] += ' (' + } else { + inserts[start] = '(' + } + if (end in inserts) { + inserts[end] += ')' + } else { + inserts[end] = ')' + } + } + for (let i of range(start + 1, end)) { + inserts[i] = '|' + } + } + } + } + + // collect all actions format strings + let parts = [] + for (let [ i, action ] of Object.entries(actions)) { + + // suppressed arguments are marked with None + // remove | separators for suppressed arguments + if (action.help === SUPPRESS) { + parts.push(undefined) + if (inserts[+i] === '|') { + delete inserts[+i] + } else if (inserts[+i + 1] === '|') { + delete inserts[+i + 1] + } + + // produce all arg strings + } else if (!action.option_strings.length) { + let default_value = this._get_default_metavar_for_positional(action) + let part = this._format_args(action, default_value) + + // if it's in a group, strip the outer [] + if (group_actions.has(action)) { + if (part[0] === '[' && part[part.length - 1] === ']') { + part = part.slice(1, -1) + } + } + + // add the action string to the list + parts.push(part) + + // produce the first way to invoke the option in brackets + } else { + let option_string = action.option_strings[0] + let part + + // if the Optional doesn't take a value, format is: + // -s or --long + if (action.nargs === 0) { + part = action.format_usage() + + // if the Optional takes a value, format is: + // -s ARGS or --long ARGS + } else { + let default_value = this._get_default_metavar_for_optional(action) + let args_string = this._format_args(action, default_value) + part = sub('%s %s', option_string, args_string) + } + + // make it look optional if it's not required or in a group + if (!action.required && !group_actions.has(action)) { + part = sub('[%s]', part) + } + + // add the action string to the list + parts.push(part) + } + } + + // insert things at the necessary indices + for (let i of Object.keys(inserts).map(Number).sort((a, b) => b - a)) { + parts.splice(+i, 0, inserts[+i]) + } + + // join all the action items with spaces + let text = parts.filter(Boolean).join(' ') + + // clean up separators for mutually exclusive groups + text = text.replace(/([\[(]) /g, '$1') + text = text.replace(/ ([\])])/g, '$1') + text = text.replace(/[\[(] *[\])]/g, '') + text = text.replace(/\(([^|]*)\)/g, '$1', text) + text = text.trim() + + // return the text + return text + } + + _format_text(text) { + if (text.includes('%(prog)')) { + text = sub(text, { prog: this._prog }) + } + let text_width = Math.max(this._width - this._current_indent, 11) + let indent = ' '.repeat(this._current_indent) + return this._fill_text(text, text_width, indent) + '\n\n' + } + + _format_action(action) { + // determine the required width and the entry label + let help_position = Math.min(this._action_max_length + 2, + this._max_help_position) + let help_width = Math.max(this._width - help_position, 11) + let action_width = help_position - this._current_indent - 2 + let action_header = this._format_action_invocation(action) + let indent_first + + // no help; start on same line and add a final newline + if (!action.help) { + let tup = [ this._current_indent, '', action_header ] + action_header = sub('%*s%s\n', ...tup) + + // short action name; start on the same line and pad two spaces + } else if (action_header.length <= action_width) { + let tup = [ this._current_indent, '', action_width, action_header ] + action_header = sub('%*s%-*s ', ...tup) + indent_first = 0 + + // long action name; start on the next line + } else { + let tup = [ this._current_indent, '', action_header ] + action_header = sub('%*s%s\n', ...tup) + indent_first = help_position + } + + // collect the pieces of the action help + let parts = [action_header] + + // if there was help for the action, add lines of help text + if (action.help) { + let help_text = this._expand_help(action) + let help_lines = this._split_lines(help_text, help_width) + parts.push(sub('%*s%s\n', indent_first, '', help_lines[0])) + for (let line of help_lines.slice(1)) { + parts.push(sub('%*s%s\n', help_position, '', line)) + } + + // or add a newline if the description doesn't end with one + } else if (!action_header.endsWith('\n')) { + parts.push('\n') + } + + // if there are any sub-actions, add their help as well + for (let subaction of this._iter_indented_subactions(action)) { + parts.push(this._format_action(subaction)) + } + + // return a single string + return this._join_parts(parts) + } + + _format_action_invocation(action) { + if (!action.option_strings.length) { + let default_value = this._get_default_metavar_for_positional(action) + let metavar = this._metavar_formatter(action, default_value)(1)[0] + return metavar + + } else { + let parts = [] + + // if the Optional doesn't take a value, format is: + // -s, --long + if (action.nargs === 0) { + parts = parts.concat(action.option_strings) + + // if the Optional takes a value, format is: + // -s ARGS, --long ARGS + } else { + let default_value = this._get_default_metavar_for_optional(action) + let args_string = this._format_args(action, default_value) + for (let option_string of action.option_strings) { + parts.push(sub('%s %s', option_string, args_string)) + } + } + + return parts.join(', ') + } + } + + _metavar_formatter(action, default_metavar) { + let result + if (action.metavar !== undefined) { + result = action.metavar + } else if (action.choices !== undefined) { + let choice_strs = _choices_to_array(action.choices).map(String) + result = sub('{%s}', choice_strs.join(',')) + } else { + result = default_metavar + } + + function format(tuple_size) { + if (Array.isArray(result)) { + return result + } else { + return Array(tuple_size).fill(result) + } + } + return format + } + + _format_args(action, default_metavar) { + let get_metavar = this._metavar_formatter(action, default_metavar) + let result + if (action.nargs === undefined) { + result = sub('%s', ...get_metavar(1)) + } else if (action.nargs === OPTIONAL) { + result = sub('[%s]', ...get_metavar(1)) + } else if (action.nargs === ZERO_OR_MORE) { + let metavar = get_metavar(1) + if (metavar.length === 2) { + result = sub('[%s [%s ...]]', ...metavar) + } else { + result = sub('[%s ...]', ...metavar) + } + } else if (action.nargs === ONE_OR_MORE) { + result = sub('%s [%s ...]', ...get_metavar(2)) + } else if (action.nargs === REMAINDER) { + result = '...' + } else if (action.nargs === PARSER) { + result = sub('%s ...', ...get_metavar(1)) + } else if (action.nargs === SUPPRESS) { + result = '' + } else { + let formats + try { + formats = range(action.nargs).map(() => '%s') + } catch (err) { + throw new TypeError('invalid nargs value') + } + result = sub(formats.join(' '), ...get_metavar(action.nargs)) + } + return result + } + + _expand_help(action) { + let params = Object.assign({ prog: this._prog }, action) + for (let name of Object.keys(params)) { + if (params[name] === SUPPRESS) { + delete params[name] + } + } + for (let name of Object.keys(params)) { + if (params[name] && params[name].name) { + params[name] = params[name].name + } + } + if (params.choices !== undefined) { + let choices_str = _choices_to_array(params.choices).map(String).join(', ') + params.choices = choices_str + } + // LEGACY (v1 compatibility): camelcase + for (let key of Object.keys(params)) { + let old_name = _to_legacy_name(key) + if (old_name !== key) { + params[old_name] = params[key] + } + } + // end + return sub(this._get_help_string(action), params) + } + + * _iter_indented_subactions(action) { + if (typeof action._get_subactions === 'function') { + this._indent() + yield* action._get_subactions() + this._dedent() + } + } + + _split_lines(text, width) { + text = text.replace(this._whitespace_matcher, ' ').trim() + // The textwrap module is used only for formatting help. + // Delay its import for speeding up the common usage of argparse. + let textwrap = require('./lib/textwrap') + return textwrap.wrap(text, { width }) + } + + _fill_text(text, width, indent) { + text = text.replace(this._whitespace_matcher, ' ').trim() + let textwrap = require('./lib/textwrap') + return textwrap.fill(text, { width, + initial_indent: indent, + subsequent_indent: indent }) + } + + _get_help_string(action) { + return action.help + } + + _get_default_metavar_for_optional(action) { + return action.dest.toUpperCase() + } + + _get_default_metavar_for_positional(action) { + return action.dest + } +})) + +HelpFormatter.prototype._Section = _callable(class _Section { + + constructor(formatter, parent, heading = undefined) { + this.formatter = formatter + this.parent = parent + this.heading = heading + this.items = [] + } + + format_help() { + // format the indented section + if (this.parent !== undefined) { + this.formatter._indent() + } + let item_help = this.formatter._join_parts(this.items.map(([ func, args ]) => func.apply(null, args))) + if (this.parent !== undefined) { + this.formatter._dedent() + } + + // return nothing if the section was empty + if (!item_help) { + return '' + } + + // add the heading if the section was non-empty + let heading + if (this.heading !== SUPPRESS && this.heading !== undefined) { + let current_indent = this.formatter._current_indent + heading = sub('%*s%s:\n', current_indent, '', this.heading) + } else { + heading = '' + } + + // join the section-initial newline, the heading and the help + return this.formatter._join_parts(['\n', heading, item_help, '\n']) + } +}) + + +const RawDescriptionHelpFormatter = _camelcase_alias(_callable(class RawDescriptionHelpFormatter extends HelpFormatter { + /* + * Help message formatter which retains any formatting in descriptions. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _fill_text(text, width, indent) { + return splitlines(text, true).map(line => indent + line).join('') + } +})) + + +const RawTextHelpFormatter = _camelcase_alias(_callable(class RawTextHelpFormatter extends RawDescriptionHelpFormatter { + /* + * Help message formatter which retains formatting of all help text. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _split_lines(text/*, width*/) { + return splitlines(text) + } +})) + + +const ArgumentDefaultsHelpFormatter = _camelcase_alias(_callable(class ArgumentDefaultsHelpFormatter extends HelpFormatter { + /* + * Help message formatter which adds default values to argument help. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _get_help_string(action) { + let help = action.help + // LEGACY (v1 compatibility): additional check for defaultValue needed + if (!action.help.includes('%(default)') && !action.help.includes('%(defaultValue)')) { + if (action.default !== SUPPRESS) { + let defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] + if (action.option_strings.length || defaulting_nargs.includes(action.nargs)) { + help += ' (default: %(default)s)' + } + } + } + return help + } +})) + + +const MetavarTypeHelpFormatter = _camelcase_alias(_callable(class MetavarTypeHelpFormatter extends HelpFormatter { + /* + * Help message formatter which uses the argument 'type' as the default + * metavar value (instead of the argument 'dest') + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _get_default_metavar_for_optional(action) { + return typeof action.type === 'function' ? action.type.name : action.type + } + + _get_default_metavar_for_positional(action) { + return typeof action.type === 'function' ? action.type.name : action.type + } +})) + + +// ===================== +// Options and Arguments +// ===================== +function _get_action_name(argument) { + if (argument === undefined) { + return undefined + } else if (argument.option_strings.length) { + return argument.option_strings.join('/') + } else if (![ undefined, SUPPRESS ].includes(argument.metavar)) { + return argument.metavar + } else if (![ undefined, SUPPRESS ].includes(argument.dest)) { + return argument.dest + } else { + return undefined + } +} + + +const ArgumentError = _callable(class ArgumentError extends Error { + /* + * An error from creating or using an argument (optional or positional). + * + * The string value of this exception is the message, augmented with + * information about the argument that caused it. + */ + + constructor(argument, message) { + super() + this.name = 'ArgumentError' + this._argument_name = _get_action_name(argument) + this._message = message + this.message = this.str() + } + + str() { + let format + if (this._argument_name === undefined) { + format = '%(message)s' + } else { + format = 'argument %(argument_name)s: %(message)s' + } + return sub(format, { message: this._message, + argument_name: this._argument_name }) + } +}) + + +const ArgumentTypeError = _callable(class ArgumentTypeError extends Error { + /* + * An error from trying to convert a command line string to a type. + */ + + constructor(message) { + super(message) + this.name = 'ArgumentTypeError' + } +}) + + +// ============== +// Action classes +// ============== +const Action = _camelcase_alias(_callable(class Action extends _AttributeHolder(Function) { + /* + * Information about how to convert command line strings to Python objects. + * + * Action objects are used by an ArgumentParser to represent the information + * needed to parse a single argument from one or more strings from the + * command line. The keyword arguments to the Action constructor are also + * all attributes of Action instances. + * + * Keyword Arguments: + * + * - option_strings -- A list of command-line option strings which + * should be associated with this action. + * + * - dest -- The name of the attribute to hold the created object(s) + * + * - nargs -- The number of command-line arguments that should be + * consumed. By default, one argument will be consumed and a single + * value will be produced. Other values include: + * - N (an integer) consumes N arguments (and produces a list) + * - '?' consumes zero or one arguments + * - '*' consumes zero or more arguments (and produces a list) + * - '+' consumes one or more arguments (and produces a list) + * Note that the difference between the default and nargs=1 is that + * with the default, a single value will be produced, while with + * nargs=1, a list containing a single value will be produced. + * + * - const -- The value to be produced if the option is specified and the + * option uses an action that takes no values. + * + * - default -- The value to be produced if the option is not specified. + * + * - type -- A callable that accepts a single string argument, and + * returns the converted value. The standard Python types str, int, + * float, and complex are useful examples of such callables. If None, + * str is used. + * + * - choices -- A container of values that should be allowed. If not None, + * after a command-line argument has been converted to the appropriate + * type, an exception will be raised if it is not a member of this + * collection. + * + * - required -- True if the action must always be specified at the + * command line. This is only meaningful for optional command-line + * arguments. + * + * - help -- The help string describing the argument. + * + * - metavar -- The name to be used for the option's argument with the + * help string. If None, the 'dest' value will be used as the name. + */ + + constructor() { + let [ + option_strings, + dest, + nargs, + const_value, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + nargs: undefined, + const: undefined, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + // when this class is called as a function, redirect it to .call() method of itself + super('return arguments.callee.call.apply(arguments.callee, arguments)') + + this.option_strings = option_strings + this.dest = dest + this.nargs = nargs + this.const = const_value + this.default = default_value + this.type = type + this.choices = choices + this.required = required + this.help = help + this.metavar = metavar + } + + _get_kwargs() { + let names = [ + 'option_strings', + 'dest', + 'nargs', + 'const', + 'default', + 'type', + 'choices', + 'help', + 'metavar' + ] + return names.map(name => [ name, getattr(this, name) ]) + } + + format_usage() { + return this.option_strings[0] + } + + call(/*parser, namespace, values, option_string = undefined*/) { + throw new Error('.call() not defined') + } +})) + + +const BooleanOptionalAction = _camelcase_alias(_callable(class BooleanOptionalAction extends Action { + + constructor() { + let [ + option_strings, + dest, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + let _option_strings = [] + for (let option_string of option_strings) { + _option_strings.push(option_string) + + if (option_string.startsWith('--')) { + option_string = '--no-' + option_string.slice(2) + _option_strings.push(option_string) + } + } + + if (help !== undefined && default_value !== undefined) { + help += ` (default: ${default_value})` + } + + super({ + option_strings: _option_strings, + dest, + nargs: 0, + default: default_value, + type, + choices, + required, + help, + metavar + }) + } + + call(parser, namespace, values, option_string = undefined) { + if (this.option_strings.includes(option_string)) { + setattr(namespace, this.dest, !option_string.startsWith('--no-')) + } + } + + format_usage() { + return this.option_strings.join(' | ') + } +})) + + +const _StoreAction = _callable(class _StoreAction extends Action { + + constructor() { + let [ + option_strings, + dest, + nargs, + const_value, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + nargs: undefined, + const: undefined, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + if (nargs === 0) { + throw new TypeError('nargs for store actions must be != 0; if you ' + + 'have nothing to store, actions such as store ' + + 'true or store const may be more appropriate') + } + if (const_value !== undefined && nargs !== OPTIONAL) { + throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) + } + super({ + option_strings, + dest, + nargs, + const: const_value, + default: default_value, + type, + choices, + required, + help, + metavar + }) + } + + call(parser, namespace, values/*, option_string = undefined*/) { + setattr(namespace, this.dest, values) + } +}) + + +const _StoreConstAction = _callable(class _StoreConstAction extends Action { + + constructor() { + let [ + option_strings, + dest, + const_value, + default_value, + required, + help + //, metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + const: no_default, + default: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + super({ + option_strings, + dest, + nargs: 0, + const: const_value, + default: default_value, + required, + help + }) + } + + call(parser, namespace/*, values, option_string = undefined*/) { + setattr(namespace, this.dest, this.const) + } +}) + + +const _StoreTrueAction = _callable(class _StoreTrueAction extends _StoreConstAction { + + constructor() { + let [ + option_strings, + dest, + default_value, + required, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: false, + required: false, + help: undefined + }) + + super({ + option_strings, + dest, + const: true, + default: default_value, + required, + help + }) + } +}) + + +const _StoreFalseAction = _callable(class _StoreFalseAction extends _StoreConstAction { + + constructor() { + let [ + option_strings, + dest, + default_value, + required, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: true, + required: false, + help: undefined + }) + + super({ + option_strings, + dest, + const: false, + default: default_value, + required, + help + }) + } +}) + + +const _AppendAction = _callable(class _AppendAction extends Action { + + constructor() { + let [ + option_strings, + dest, + nargs, + const_value, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + nargs: undefined, + const: undefined, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + if (nargs === 0) { + throw new TypeError('nargs for append actions must be != 0; if arg ' + + 'strings are not supplying the value to append, ' + + 'the append const action may be more appropriate') + } + if (const_value !== undefined && nargs !== OPTIONAL) { + throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) + } + super({ + option_strings, + dest, + nargs, + const: const_value, + default: default_value, + type, + choices, + required, + help, + metavar + }) + } + + call(parser, namespace, values/*, option_string = undefined*/) { + let items = getattr(namespace, this.dest, undefined) + items = _copy_items(items) + items.push(values) + setattr(namespace, this.dest, items) + } +}) + + +const _AppendConstAction = _callable(class _AppendConstAction extends Action { + + constructor() { + let [ + option_strings, + dest, + const_value, + default_value, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + const: no_default, + default: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + super({ + option_strings, + dest, + nargs: 0, + const: const_value, + default: default_value, + required, + help, + metavar + }) + } + + call(parser, namespace/*, values, option_string = undefined*/) { + let items = getattr(namespace, this.dest, undefined) + items = _copy_items(items) + items.push(this.const) + setattr(namespace, this.dest, items) + } +}) + + +const _CountAction = _callable(class _CountAction extends Action { + + constructor() { + let [ + option_strings, + dest, + default_value, + required, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: undefined, + required: false, + help: undefined + }) + + super({ + option_strings, + dest, + nargs: 0, + default: default_value, + required, + help + }) + } + + call(parser, namespace/*, values, option_string = undefined*/) { + let count = getattr(namespace, this.dest, undefined) + if (count === undefined) { + count = 0 + } + setattr(namespace, this.dest, count + 1) + } +}) + + +const _HelpAction = _callable(class _HelpAction extends Action { + + constructor() { + let [ + option_strings, + dest, + default_value, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: SUPPRESS, + default: SUPPRESS, + help: undefined + }) + + super({ + option_strings, + dest, + default: default_value, + nargs: 0, + help + }) + } + + call(parser/*, namespace, values, option_string = undefined*/) { + parser.print_help() + parser.exit() + } +}) + + +const _VersionAction = _callable(class _VersionAction extends Action { + + constructor() { + let [ + option_strings, + version, + dest, + default_value, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + version: undefined, + dest: SUPPRESS, + default: SUPPRESS, + help: "show program's version number and exit" + }) + + super({ + option_strings, + dest, + default: default_value, + nargs: 0, + help + }) + this.version = version + } + + call(parser/*, namespace, values, option_string = undefined*/) { + let version = this.version + if (version === undefined) { + version = parser.version + } + let formatter = parser._get_formatter() + formatter.add_text(version) + parser._print_message(formatter.format_help(), process.stdout) + parser.exit() + } +}) + + +const _SubParsersAction = _camelcase_alias(_callable(class _SubParsersAction extends Action { + + constructor() { + let [ + option_strings, + prog, + parser_class, + dest, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + prog: no_default, + parser_class: no_default, + dest: SUPPRESS, + required: false, + help: undefined, + metavar: undefined + }) + + let name_parser_map = {} + + super({ + option_strings, + dest, + nargs: PARSER, + choices: name_parser_map, + required, + help, + metavar + }) + + this._prog_prefix = prog + this._parser_class = parser_class + this._name_parser_map = name_parser_map + this._choices_actions = [] + } + + add_parser() { + let [ + name, + kwargs + ] = _parse_opts(arguments, { + name: no_default, + '**kwargs': no_default + }) + + // set prog from the existing prefix + if (kwargs.prog === undefined) { + kwargs.prog = sub('%s %s', this._prog_prefix, name) + } + + let aliases = getattr(kwargs, 'aliases', []) + delete kwargs.aliases + + // create a pseudo-action to hold the choice help + if ('help' in kwargs) { + let help = kwargs.help + delete kwargs.help + let choice_action = this._ChoicesPseudoAction(name, aliases, help) + this._choices_actions.push(choice_action) + } + + // create the parser and add it to the map + let parser = new this._parser_class(kwargs) + this._name_parser_map[name] = parser + + // make parser available under aliases also + for (let alias of aliases) { + this._name_parser_map[alias] = parser + } + + return parser + } + + _get_subactions() { + return this._choices_actions + } + + call(parser, namespace, values/*, option_string = undefined*/) { + let parser_name = values[0] + let arg_strings = values.slice(1) + + // set the parser name if requested + if (this.dest !== SUPPRESS) { + setattr(namespace, this.dest, parser_name) + } + + // select the parser + if (hasattr(this._name_parser_map, parser_name)) { + parser = this._name_parser_map[parser_name] + } else { + let args = {parser_name, + choices: this._name_parser_map.join(', ')} + let msg = sub('unknown parser %(parser_name)r (choices: %(choices)s)', args) + throw new ArgumentError(this, msg) + } + + // parse all the remaining options into the namespace + // store any unrecognized options on the object, so that the top + // level parser can decide what to do with them + + // In case this subparser defines new defaults, we parse them + // in a new namespace object and then update the original + // namespace for the relevant parts. + let subnamespace + [ subnamespace, arg_strings ] = parser.parse_known_args(arg_strings, undefined) + for (let [ key, value ] of Object.entries(subnamespace)) { + setattr(namespace, key, value) + } + + if (arg_strings.length) { + setdefault(namespace, _UNRECOGNIZED_ARGS_ATTR, []) + getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).push(...arg_strings) + } + } +})) + + +_SubParsersAction.prototype._ChoicesPseudoAction = _callable(class _ChoicesPseudoAction extends Action { + constructor(name, aliases, help) { + let metavar = name, dest = name + if (aliases.length) { + metavar += sub(' (%s)', aliases.join(', ')) + } + super({ option_strings: [], dest, help, metavar }) + } +}) + + +const _ExtendAction = _callable(class _ExtendAction extends _AppendAction { + call(parser, namespace, values/*, option_string = undefined*/) { + let items = getattr(namespace, this.dest, undefined) + items = _copy_items(items) + items = items.concat(values) + setattr(namespace, this.dest, items) + } +}) + + +// ============== +// Type classes +// ============== +const FileType = _callable(class FileType extends Function { + /* + * Factory for creating file object types + * + * Instances of FileType are typically passed as type= arguments to the + * ArgumentParser add_argument() method. + * + * Keyword Arguments: + * - mode -- A string indicating how the file is to be opened. Accepts the + * same values as the builtin open() function. + * - bufsize -- The file's desired buffer size. Accepts the same values as + * the builtin open() function. + * - encoding -- The file's encoding. Accepts the same values as the + * builtin open() function. + * - errors -- A string indicating how encoding and decoding errors are to + * be handled. Accepts the same value as the builtin open() function. + */ + + constructor() { + let [ + flags, + encoding, + mode, + autoClose, + emitClose, + start, + end, + highWaterMark, + fs + ] = _parse_opts(arguments, { + flags: 'r', + encoding: undefined, + mode: undefined, // 0o666 + autoClose: undefined, // true + emitClose: undefined, // false + start: undefined, // 0 + end: undefined, // Infinity + highWaterMark: undefined, // 64 * 1024 + fs: undefined + }) + + // when this class is called as a function, redirect it to .call() method of itself + super('return arguments.callee.call.apply(arguments.callee, arguments)') + + Object.defineProperty(this, 'name', { + get() { + return sub('FileType(%r)', flags) + } + }) + this._flags = flags + this._options = {} + if (encoding !== undefined) this._options.encoding = encoding + if (mode !== undefined) this._options.mode = mode + if (autoClose !== undefined) this._options.autoClose = autoClose + if (emitClose !== undefined) this._options.emitClose = emitClose + if (start !== undefined) this._options.start = start + if (end !== undefined) this._options.end = end + if (highWaterMark !== undefined) this._options.highWaterMark = highWaterMark + if (fs !== undefined) this._options.fs = fs + } + + call(string) { + // the special argument "-" means sys.std{in,out} + if (string === '-') { + if (this._flags.includes('r')) { + return process.stdin + } else if (this._flags.includes('w')) { + return process.stdout + } else { + let msg = sub('argument "-" with mode %r', this._flags) + throw new TypeError(msg) + } + } + + // all other arguments are used as file names + let fd + try { + fd = fs.openSync(string, this._flags, this._options.mode) + } catch (e) { + let args = { filename: string, error: e.message } + let message = "can't open '%(filename)s': %(error)s" + throw new ArgumentTypeError(sub(message, args)) + } + + let options = Object.assign({ fd, flags: this._flags }, this._options) + if (this._flags.includes('r')) { + return fs.createReadStream(undefined, options) + } else if (this._flags.includes('w')) { + return fs.createWriteStream(undefined, options) + } else { + let msg = sub('argument "%s" with mode %r', string, this._flags) + throw new TypeError(msg) + } + } + + [util.inspect.custom]() { + let args = [ this._flags ] + let kwargs = Object.entries(this._options).map(([ k, v ]) => { + if (k === 'mode') v = { value: v, [util.inspect.custom]() { return '0o' + this.value.toString(8) } } + return [ k, v ] + }) + let args_str = [] + .concat(args.filter(arg => arg !== -1).map(repr)) + .concat(kwargs.filter(([/*kw*/, arg]) => arg !== undefined) + .map(([kw, arg]) => sub('%s=%r', kw, arg))) + .join(', ') + return sub('%s(%s)', this.constructor.name, args_str) + } + + toString() { + return this[util.inspect.custom]() + } +}) + +// =========================== +// Optional and Positional Parsing +// =========================== +const Namespace = _callable(class Namespace extends _AttributeHolder() { + /* + * Simple object for storing attributes. + * + * Implements equality by attribute names and values, and provides a simple + * string representation. + */ + + constructor(options = {}) { + super() + Object.assign(this, options) + } +}) + +// unset string tag to mimic plain object +Namespace.prototype[Symbol.toStringTag] = undefined + + +const _ActionsContainer = _camelcase_alias(_callable(class _ActionsContainer { + + constructor() { + let [ + description, + prefix_chars, + argument_default, + conflict_handler + ] = _parse_opts(arguments, { + description: no_default, + prefix_chars: no_default, + argument_default: no_default, + conflict_handler: no_default + }) + + this.description = description + this.argument_default = argument_default + this.prefix_chars = prefix_chars + this.conflict_handler = conflict_handler + + // set up registries + this._registries = {} + + // register actions + this.register('action', undefined, _StoreAction) + this.register('action', 'store', _StoreAction) + this.register('action', 'store_const', _StoreConstAction) + this.register('action', 'store_true', _StoreTrueAction) + this.register('action', 'store_false', _StoreFalseAction) + this.register('action', 'append', _AppendAction) + this.register('action', 'append_const', _AppendConstAction) + this.register('action', 'count', _CountAction) + this.register('action', 'help', _HelpAction) + this.register('action', 'version', _VersionAction) + this.register('action', 'parsers', _SubParsersAction) + this.register('action', 'extend', _ExtendAction) + // LEGACY (v1 compatibility): camelcase variants + ;[ 'storeConst', 'storeTrue', 'storeFalse', 'appendConst' ].forEach(old_name => { + let new_name = _to_new_name(old_name) + this.register('action', old_name, util.deprecate(this._registry_get('action', new_name), + sub('{action: "%s"} is renamed to {action: "%s"}', old_name, new_name))) + }) + // end + + // raise an exception if the conflict handler is invalid + this._get_handler() + + // action storage + this._actions = [] + this._option_string_actions = {} + + // groups + this._action_groups = [] + this._mutually_exclusive_groups = [] + + // defaults storage + this._defaults = {} + + // determines whether an "option" looks like a negative number + this._negative_number_matcher = /^-\d+$|^-\d*\.\d+$/ + + // whether or not there are any optionals that look like negative + // numbers -- uses a list so it can be shared and edited + this._has_negative_number_optionals = [] + } + + // ==================== + // Registration methods + // ==================== + register(registry_name, value, object) { + let registry = setdefault(this._registries, registry_name, {}) + registry[value] = object + } + + _registry_get(registry_name, value, default_value = undefined) { + return getattr(this._registries[registry_name], value, default_value) + } + + // ================================== + // Namespace default accessor methods + // ================================== + set_defaults(kwargs) { + Object.assign(this._defaults, kwargs) + + // if these defaults match any existing arguments, replace + // the previous default on the object with the new one + for (let action of this._actions) { + if (action.dest in kwargs) { + action.default = kwargs[action.dest] + } + } + } + + get_default(dest) { + for (let action of this._actions) { + if (action.dest === dest && action.default !== undefined) { + return action.default + } + } + return this._defaults[dest] + } + + + // ======================= + // Adding argument actions + // ======================= + add_argument() { + /* + * add_argument(dest, ..., name=value, ...) + * add_argument(option_string, option_string, ..., name=value, ...) + */ + let [ + args, + kwargs + ] = _parse_opts(arguments, { + '*args': no_default, + '**kwargs': no_default + }) + // LEGACY (v1 compatibility), old-style add_argument([ args ], { options }) + if (args.length === 1 && Array.isArray(args[0])) { + args = args[0] + deprecate('argument-array', + sub('use add_argument(%(args)s, {...}) instead of add_argument([ %(args)s ], { ... })', { + args: args.map(repr).join(', ') + })) + } + // end + + // if no positional args are supplied or only one is supplied and + // it doesn't look like an option string, parse a positional + // argument + let chars = this.prefix_chars + if (!args.length || args.length === 1 && !chars.includes(args[0][0])) { + if (args.length && 'dest' in kwargs) { + throw new TypeError('dest supplied twice for positional argument') + } + kwargs = this._get_positional_kwargs(...args, kwargs) + + // otherwise, we're adding an optional argument + } else { + kwargs = this._get_optional_kwargs(...args, kwargs) + } + + // if no default was supplied, use the parser-level default + if (!('default' in kwargs)) { + let dest = kwargs.dest + if (dest in this._defaults) { + kwargs.default = this._defaults[dest] + } else if (this.argument_default !== undefined) { + kwargs.default = this.argument_default + } + } + + // create the action object, and add it to the parser + let action_class = this._pop_action_class(kwargs) + if (typeof action_class !== 'function') { + throw new TypeError(sub('unknown action "%s"', action_class)) + } + // eslint-disable-next-line new-cap + let action = new action_class(kwargs) + + // raise an error if the action type is not callable + let type_func = this._registry_get('type', action.type, action.type) + if (typeof type_func !== 'function') { + throw new TypeError(sub('%r is not callable', type_func)) + } + + if (type_func === FileType) { + throw new TypeError(sub('%r is a FileType class object, instance of it' + + ' must be passed', type_func)) + } + + // raise an error if the metavar does not match the type + if ('_get_formatter' in this) { + try { + this._get_formatter()._format_args(action, undefined) + } catch (err) { + // check for 'invalid nargs value' is an artifact of TypeError and ValueError in js being the same + if (err instanceof TypeError && err.message !== 'invalid nargs value') { + throw new TypeError('length of metavar tuple does not match nargs') + } else { + throw err + } + } + } + + return this._add_action(action) + } + + add_argument_group() { + let group = _ArgumentGroup(this, ...arguments) + this._action_groups.push(group) + return group + } + + add_mutually_exclusive_group() { + // eslint-disable-next-line no-use-before-define + let group = _MutuallyExclusiveGroup(this, ...arguments) + this._mutually_exclusive_groups.push(group) + return group + } + + _add_action(action) { + // resolve any conflicts + this._check_conflict(action) + + // add to actions list + this._actions.push(action) + action.container = this + + // index the action by any option strings it has + for (let option_string of action.option_strings) { + this._option_string_actions[option_string] = action + } + + // set the flag if any option strings look like negative numbers + for (let option_string of action.option_strings) { + if (this._negative_number_matcher.test(option_string)) { + if (!this._has_negative_number_optionals.length) { + this._has_negative_number_optionals.push(true) + } + } + } + + // return the created action + return action + } + + _remove_action(action) { + _array_remove(this._actions, action) + } + + _add_container_actions(container) { + // collect groups by titles + let title_group_map = {} + for (let group of this._action_groups) { + if (group.title in title_group_map) { + let msg = 'cannot merge actions - two groups are named %r' + throw new TypeError(sub(msg, group.title)) + } + title_group_map[group.title] = group + } + + // map each action to its group + let group_map = new Map() + for (let group of container._action_groups) { + + // if a group with the title exists, use that, otherwise + // create a new group matching the container's group + if (!(group.title in title_group_map)) { + title_group_map[group.title] = this.add_argument_group({ + title: group.title, + description: group.description, + conflict_handler: group.conflict_handler + }) + } + + // map the actions to their new group + for (let action of group._group_actions) { + group_map.set(action, title_group_map[group.title]) + } + } + + // add container's mutually exclusive groups + // NOTE: if add_mutually_exclusive_group ever gains title= and + // description= then this code will need to be expanded as above + for (let group of container._mutually_exclusive_groups) { + let mutex_group = this.add_mutually_exclusive_group({ + required: group.required + }) + + // map the actions to their new mutex group + for (let action of group._group_actions) { + group_map.set(action, mutex_group) + } + } + + // add all actions to this container or their group + for (let action of container._actions) { + group_map.get(action)._add_action(action) + } + } + + _get_positional_kwargs() { + let [ + dest, + kwargs + ] = _parse_opts(arguments, { + dest: no_default, + '**kwargs': no_default + }) + + // make sure required is not specified + if ('required' in kwargs) { + let msg = "'required' is an invalid argument for positionals" + throw new TypeError(msg) + } + + // mark positional arguments as required if at least one is + // always required + if (![OPTIONAL, ZERO_OR_MORE].includes(kwargs.nargs)) { + kwargs.required = true + } + if (kwargs.nargs === ZERO_OR_MORE && !('default' in kwargs)) { + kwargs.required = true + } + + // return the keyword arguments with no option strings + return Object.assign(kwargs, { dest, option_strings: [] }) + } + + _get_optional_kwargs() { + let [ + args, + kwargs + ] = _parse_opts(arguments, { + '*args': no_default, + '**kwargs': no_default + }) + + // determine short and long option strings + let option_strings = [] + let long_option_strings = [] + let option_string + for (option_string of args) { + // error on strings that don't start with an appropriate prefix + if (!this.prefix_chars.includes(option_string[0])) { + let args = {option: option_string, + prefix_chars: this.prefix_chars} + let msg = 'invalid option string %(option)r: ' + + 'must start with a character %(prefix_chars)r' + throw new TypeError(sub(msg, args)) + } + + // strings starting with two prefix characters are long options + option_strings.push(option_string) + if (option_string.length > 1 && this.prefix_chars.includes(option_string[1])) { + long_option_strings.push(option_string) + } + } + + // infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + let dest = kwargs.dest + delete kwargs.dest + if (dest === undefined) { + let dest_option_string + if (long_option_strings.length) { + dest_option_string = long_option_strings[0] + } else { + dest_option_string = option_strings[0] + } + dest = _string_lstrip(dest_option_string, this.prefix_chars) + if (!dest) { + let msg = 'dest= is required for options like %r' + throw new TypeError(sub(msg, option_string)) + } + dest = dest.replace(/-/g, '_') + } + + // return the updated keyword arguments + return Object.assign(kwargs, { dest, option_strings }) + } + + _pop_action_class(kwargs, default_value = undefined) { + let action = getattr(kwargs, 'action', default_value) + delete kwargs.action + return this._registry_get('action', action, action) + } + + _get_handler() { + // determine function from conflict handler string + let handler_func_name = sub('_handle_conflict_%s', this.conflict_handler) + if (typeof this[handler_func_name] === 'function') { + return this[handler_func_name] + } else { + let msg = 'invalid conflict_resolution value: %r' + throw new TypeError(sub(msg, this.conflict_handler)) + } + } + + _check_conflict(action) { + + // find all options that conflict with this option + let confl_optionals = [] + for (let option_string of action.option_strings) { + if (hasattr(this._option_string_actions, option_string)) { + let confl_optional = this._option_string_actions[option_string] + confl_optionals.push([ option_string, confl_optional ]) + } + } + + // resolve any conflicts + if (confl_optionals.length) { + let conflict_handler = this._get_handler() + conflict_handler.call(this, action, confl_optionals) + } + } + + _handle_conflict_error(action, conflicting_actions) { + let message = conflicting_actions.length === 1 ? + 'conflicting option string: %s' : + 'conflicting option strings: %s' + let conflict_string = conflicting_actions.map(([ option_string/*, action*/ ]) => option_string).join(', ') + throw new ArgumentError(action, sub(message, conflict_string)) + } + + _handle_conflict_resolve(action, conflicting_actions) { + + // remove all conflicting options + for (let [ option_string, action ] of conflicting_actions) { + + // remove the conflicting option + _array_remove(action.option_strings, option_string) + delete this._option_string_actions[option_string] + + // if the option now has no option string, remove it from the + // container holding it + if (!action.option_strings.length) { + action.container._remove_action(action) + } + } + } +})) + + +const _ArgumentGroup = _callable(class _ArgumentGroup extends _ActionsContainer { + + constructor() { + let [ + container, + title, + description, + kwargs + ] = _parse_opts(arguments, { + container: no_default, + title: undefined, + description: undefined, + '**kwargs': no_default + }) + + // add any missing keyword arguments by checking the container + setdefault(kwargs, 'conflict_handler', container.conflict_handler) + setdefault(kwargs, 'prefix_chars', container.prefix_chars) + setdefault(kwargs, 'argument_default', container.argument_default) + super(Object.assign({ description }, kwargs)) + + // group attributes + this.title = title + this._group_actions = [] + + // share most attributes with the container + this._registries = container._registries + this._actions = container._actions + this._option_string_actions = container._option_string_actions + this._defaults = container._defaults + this._has_negative_number_optionals = + container._has_negative_number_optionals + this._mutually_exclusive_groups = container._mutually_exclusive_groups + } + + _add_action(action) { + action = super._add_action(action) + this._group_actions.push(action) + return action + } + + _remove_action(action) { + super._remove_action(action) + _array_remove(this._group_actions, action) + } +}) + + +const _MutuallyExclusiveGroup = _callable(class _MutuallyExclusiveGroup extends _ArgumentGroup { + + constructor() { + let [ + container, + required + ] = _parse_opts(arguments, { + container: no_default, + required: false + }) + + super(container) + this.required = required + this._container = container + } + + _add_action(action) { + if (action.required) { + let msg = 'mutually exclusive arguments must be optional' + throw new TypeError(msg) + } + action = this._container._add_action(action) + this._group_actions.push(action) + return action + } + + _remove_action(action) { + this._container._remove_action(action) + _array_remove(this._group_actions, action) + } +}) + + +const ArgumentParser = _camelcase_alias(_callable(class ArgumentParser extends _AttributeHolder(_ActionsContainer) { + /* + * Object for parsing command line strings into Python objects. + * + * Keyword Arguments: + * - prog -- The name of the program (default: sys.argv[0]) + * - usage -- A usage message (default: auto-generated from arguments) + * - description -- A description of what the program does + * - epilog -- Text following the argument descriptions + * - parents -- Parsers whose arguments should be copied into this one + * - formatter_class -- HelpFormatter class for printing help messages + * - prefix_chars -- Characters that prefix optional arguments + * - fromfile_prefix_chars -- Characters that prefix files containing + * additional arguments + * - argument_default -- The default value for all arguments + * - conflict_handler -- String indicating how to handle conflicts + * - add_help -- Add a -h/-help option + * - allow_abbrev -- Allow long options to be abbreviated unambiguously + * - exit_on_error -- Determines whether or not ArgumentParser exits with + * error info when an error occurs + */ + + constructor() { + let [ + prog, + usage, + description, + epilog, + parents, + formatter_class, + prefix_chars, + fromfile_prefix_chars, + argument_default, + conflict_handler, + add_help, + allow_abbrev, + exit_on_error, + debug, // LEGACY (v1 compatibility), debug mode + version // LEGACY (v1 compatibility), version + ] = _parse_opts(arguments, { + prog: undefined, + usage: undefined, + description: undefined, + epilog: undefined, + parents: [], + formatter_class: HelpFormatter, + prefix_chars: '-', + fromfile_prefix_chars: undefined, + argument_default: undefined, + conflict_handler: 'error', + add_help: true, + allow_abbrev: true, + exit_on_error: true, + debug: undefined, // LEGACY (v1 compatibility), debug mode + version: undefined // LEGACY (v1 compatibility), version + }) + + // LEGACY (v1 compatibility) + if (debug !== undefined) { + deprecate('debug', + 'The "debug" argument to ArgumentParser is deprecated. Please ' + + 'override ArgumentParser.exit function instead.' + ) + } + + if (version !== undefined) { + deprecate('version', + 'The "version" argument to ArgumentParser is deprecated. Please use ' + + "add_argument(..., { action: 'version', version: 'N', ... }) instead." + ) + } + // end + + super({ + description, + prefix_chars, + argument_default, + conflict_handler + }) + + // default setting for prog + if (prog === undefined) { + prog = path.basename(get_argv()[0] || '') + } + + this.prog = prog + this.usage = usage + this.epilog = epilog + this.formatter_class = formatter_class + this.fromfile_prefix_chars = fromfile_prefix_chars + this.add_help = add_help + this.allow_abbrev = allow_abbrev + this.exit_on_error = exit_on_error + // LEGACY (v1 compatibility), debug mode + this.debug = debug + // end + + this._positionals = this.add_argument_group('positional arguments') + this._optionals = this.add_argument_group('optional arguments') + this._subparsers = undefined + + // register types + function identity(string) { + return string + } + this.register('type', undefined, identity) + this.register('type', null, identity) + this.register('type', 'auto', identity) + this.register('type', 'int', function (x) { + let result = Number(x) + if (!Number.isInteger(result)) { + throw new TypeError(sub('could not convert string to int: %r', x)) + } + return result + }) + this.register('type', 'float', function (x) { + let result = Number(x) + if (isNaN(result)) { + throw new TypeError(sub('could not convert string to float: %r', x)) + } + return result + }) + this.register('type', 'str', String) + // LEGACY (v1 compatibility): custom types + this.register('type', 'string', + util.deprecate(String, 'use {type:"str"} or {type:String} instead of {type:"string"}')) + // end + + // add help argument if necessary + // (using explicit default to override global argument_default) + let default_prefix = prefix_chars.includes('-') ? '-' : prefix_chars[0] + if (this.add_help) { + this.add_argument( + default_prefix + 'h', + default_prefix.repeat(2) + 'help', + { + action: 'help', + default: SUPPRESS, + help: 'show this help message and exit' + } + ) + } + // LEGACY (v1 compatibility), version + if (version) { + this.add_argument( + default_prefix + 'v', + default_prefix.repeat(2) + 'version', + { + action: 'version', + default: SUPPRESS, + version: this.version, + help: "show program's version number and exit" + } + ) + } + // end + + // add parent arguments and defaults + for (let parent of parents) { + this._add_container_actions(parent) + Object.assign(this._defaults, parent._defaults) + } + } + + // ======================= + // Pretty __repr__ methods + // ======================= + _get_kwargs() { + let names = [ + 'prog', + 'usage', + 'description', + 'formatter_class', + 'conflict_handler', + 'add_help' + ] + return names.map(name => [ name, getattr(this, name) ]) + } + + // ================================== + // Optional/Positional adding methods + // ================================== + add_subparsers() { + let [ + kwargs + ] = _parse_opts(arguments, { + '**kwargs': no_default + }) + + if (this._subparsers !== undefined) { + this.error('cannot have multiple subparser arguments') + } + + // add the parser class to the arguments if it's not present + setdefault(kwargs, 'parser_class', this.constructor) + + if ('title' in kwargs || 'description' in kwargs) { + let title = getattr(kwargs, 'title', 'subcommands') + let description = getattr(kwargs, 'description', undefined) + delete kwargs.title + delete kwargs.description + this._subparsers = this.add_argument_group(title, description) + } else { + this._subparsers = this._positionals + } + + // prog defaults to the usage message of this parser, skipping + // optional arguments and with no "usage:" prefix + if (kwargs.prog === undefined) { + let formatter = this._get_formatter() + let positionals = this._get_positional_actions() + let groups = this._mutually_exclusive_groups + formatter.add_usage(this.usage, positionals, groups, '') + kwargs.prog = formatter.format_help().trim() + } + + // create the parsers action and add it to the positionals list + let parsers_class = this._pop_action_class(kwargs, 'parsers') + // eslint-disable-next-line new-cap + let action = new parsers_class(Object.assign({ option_strings: [] }, kwargs)) + this._subparsers._add_action(action) + + // return the created parsers action + return action + } + + _add_action(action) { + if (action.option_strings.length) { + this._optionals._add_action(action) + } else { + this._positionals._add_action(action) + } + return action + } + + _get_optional_actions() { + return this._actions.filter(action => action.option_strings.length) + } + + _get_positional_actions() { + return this._actions.filter(action => !action.option_strings.length) + } + + // ===================================== + // Command line argument parsing methods + // ===================================== + parse_args(args = undefined, namespace = undefined) { + let argv + [ args, argv ] = this.parse_known_args(args, namespace) + if (argv && argv.length > 0) { + let msg = 'unrecognized arguments: %s' + this.error(sub(msg, argv.join(' '))) + } + return args + } + + parse_known_args(args = undefined, namespace = undefined) { + if (args === undefined) { + args = get_argv().slice(1) + } + + // default Namespace built from parser defaults + if (namespace === undefined) { + namespace = new Namespace() + } + + // add any action defaults that aren't present + for (let action of this._actions) { + if (action.dest !== SUPPRESS) { + if (!hasattr(namespace, action.dest)) { + if (action.default !== SUPPRESS) { + setattr(namespace, action.dest, action.default) + } + } + } + } + + // add any parser defaults that aren't present + for (let dest of Object.keys(this._defaults)) { + if (!hasattr(namespace, dest)) { + setattr(namespace, dest, this._defaults[dest]) + } + } + + // parse the arguments and exit if there are any errors + if (this.exit_on_error) { + try { + [ namespace, args ] = this._parse_known_args(args, namespace) + } catch (err) { + if (err instanceof ArgumentError) { + this.error(err.message) + } else { + throw err + } + } + } else { + [ namespace, args ] = this._parse_known_args(args, namespace) + } + + if (hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) { + args = args.concat(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) + delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) + } + + return [ namespace, args ] + } + + _parse_known_args(arg_strings, namespace) { + // replace arg strings that are file references + if (this.fromfile_prefix_chars !== undefined) { + arg_strings = this._read_args_from_files(arg_strings) + } + + // map all mutually exclusive arguments to the other arguments + // they can't occur with + let action_conflicts = new Map() + for (let mutex_group of this._mutually_exclusive_groups) { + let group_actions = mutex_group._group_actions + for (let [ i, mutex_action ] of Object.entries(mutex_group._group_actions)) { + let conflicts = action_conflicts.get(mutex_action) || [] + conflicts = conflicts.concat(group_actions.slice(0, +i)) + conflicts = conflicts.concat(group_actions.slice(+i + 1)) + action_conflicts.set(mutex_action, conflicts) + } + } + + // find all option indices, and determine the arg_string_pattern + // which has an 'O' if there is an option at an index, + // an 'A' if there is an argument, or a '-' if there is a '--' + let option_string_indices = {} + let arg_string_pattern_parts = [] + let arg_strings_iter = Object.entries(arg_strings)[Symbol.iterator]() + for (let [ i, arg_string ] of arg_strings_iter) { + + // all args after -- are non-options + if (arg_string === '--') { + arg_string_pattern_parts.push('-') + for ([ i, arg_string ] of arg_strings_iter) { + arg_string_pattern_parts.push('A') + } + + // otherwise, add the arg to the arg strings + // and note the index if it was an option + } else { + let option_tuple = this._parse_optional(arg_string) + let pattern + if (option_tuple === undefined) { + pattern = 'A' + } else { + option_string_indices[i] = option_tuple + pattern = 'O' + } + arg_string_pattern_parts.push(pattern) + } + } + + // join the pieces together to form the pattern + let arg_strings_pattern = arg_string_pattern_parts.join('') + + // converts arg strings to the appropriate and then takes the action + let seen_actions = new Set() + let seen_non_default_actions = new Set() + let extras + + let take_action = (action, argument_strings, option_string = undefined) => { + seen_actions.add(action) + let argument_values = this._get_values(action, argument_strings) + + // error if this argument is not allowed with other previously + // seen arguments, assuming that actions that use the default + // value don't really count as "present" + if (argument_values !== action.default) { + seen_non_default_actions.add(action) + for (let conflict_action of action_conflicts.get(action) || []) { + if (seen_non_default_actions.has(conflict_action)) { + let msg = 'not allowed with argument %s' + let action_name = _get_action_name(conflict_action) + throw new ArgumentError(action, sub(msg, action_name)) + } + } + } + + // take the action if we didn't receive a SUPPRESS value + // (e.g. from a default) + if (argument_values !== SUPPRESS) { + action(this, namespace, argument_values, option_string) + } + } + + // function to convert arg_strings into an optional action + let consume_optional = start_index => { + + // get the optional identified at this index + let option_tuple = option_string_indices[start_index] + let [ action, option_string, explicit_arg ] = option_tuple + + // identify additional optionals in the same arg string + // (e.g. -xyz is the same as -x -y -z if no args are required) + let action_tuples = [] + let stop + for (;;) { + + // if we found no optional action, skip it + if (action === undefined) { + extras.push(arg_strings[start_index]) + return start_index + 1 + } + + // if there is an explicit argument, try to match the + // optional's string arguments to only this + if (explicit_arg !== undefined) { + let arg_count = this._match_argument(action, 'A') + + // if the action is a single-dash option and takes no + // arguments, try to parse more single-dash options out + // of the tail of the option string + let chars = this.prefix_chars + if (arg_count === 0 && !chars.includes(option_string[1])) { + action_tuples.push([ action, [], option_string ]) + let char = option_string[0] + option_string = char + explicit_arg[0] + let new_explicit_arg = explicit_arg.slice(1) || undefined + let optionals_map = this._option_string_actions + if (hasattr(optionals_map, option_string)) { + action = optionals_map[option_string] + explicit_arg = new_explicit_arg + } else { + let msg = 'ignored explicit argument %r' + throw new ArgumentError(action, sub(msg, explicit_arg)) + } + + // if the action expect exactly one argument, we've + // successfully matched the option; exit the loop + } else if (arg_count === 1) { + stop = start_index + 1 + let args = [ explicit_arg ] + action_tuples.push([ action, args, option_string ]) + break + + // error if a double-dash option did not use the + // explicit argument + } else { + let msg = 'ignored explicit argument %r' + throw new ArgumentError(action, sub(msg, explicit_arg)) + } + + // if there is no explicit argument, try to match the + // optional's string arguments with the following strings + // if successful, exit the loop + } else { + let start = start_index + 1 + let selected_patterns = arg_strings_pattern.slice(start) + let arg_count = this._match_argument(action, selected_patterns) + stop = start + arg_count + let args = arg_strings.slice(start, stop) + action_tuples.push([ action, args, option_string ]) + break + } + } + + // add the Optional to the list and return the index at which + // the Optional's string args stopped + assert(action_tuples.length) + for (let [ action, args, option_string ] of action_tuples) { + take_action(action, args, option_string) + } + return stop + } + + // the list of Positionals left to be parsed; this is modified + // by consume_positionals() + let positionals = this._get_positional_actions() + + // function to convert arg_strings into positional actions + let consume_positionals = start_index => { + // match as many Positionals as possible + let selected_pattern = arg_strings_pattern.slice(start_index) + let arg_counts = this._match_arguments_partial(positionals, selected_pattern) + + // slice off the appropriate arg strings for each Positional + // and add the Positional and its args to the list + for (let i = 0; i < positionals.length && i < arg_counts.length; i++) { + let action = positionals[i] + let arg_count = arg_counts[i] + let args = arg_strings.slice(start_index, start_index + arg_count) + start_index += arg_count + take_action(action, args) + } + + // slice off the Positionals that we just parsed and return the + // index at which the Positionals' string args stopped + positionals = positionals.slice(arg_counts.length) + return start_index + } + + // consume Positionals and Optionals alternately, until we have + // passed the last option string + extras = [] + let start_index = 0 + let max_option_string_index = Math.max(-1, ...Object.keys(option_string_indices).map(Number)) + while (start_index <= max_option_string_index) { + + // consume any Positionals preceding the next option + let next_option_string_index = Math.min( + // eslint-disable-next-line no-loop-func + ...Object.keys(option_string_indices).map(Number).filter(index => index >= start_index) + ) + if (start_index !== next_option_string_index) { + let positionals_end_index = consume_positionals(start_index) + + // only try to parse the next optional if we didn't consume + // the option string during the positionals parsing + if (positionals_end_index > start_index) { + start_index = positionals_end_index + continue + } else { + start_index = positionals_end_index + } + } + + // if we consumed all the positionals we could and we're not + // at the index of an option string, there were extra arguments + if (!(start_index in option_string_indices)) { + let strings = arg_strings.slice(start_index, next_option_string_index) + extras = extras.concat(strings) + start_index = next_option_string_index + } + + // consume the next optional and any arguments for it + start_index = consume_optional(start_index) + } + + // consume any positionals following the last Optional + let stop_index = consume_positionals(start_index) + + // if we didn't consume all the argument strings, there were extras + extras = extras.concat(arg_strings.slice(stop_index)) + + // make sure all required actions were present and also convert + // action defaults which were not given as arguments + let required_actions = [] + for (let action of this._actions) { + if (!seen_actions.has(action)) { + if (action.required) { + required_actions.push(_get_action_name(action)) + } else { + // Convert action default now instead of doing it before + // parsing arguments to avoid calling convert functions + // twice (which may fail) if the argument was given, but + // only if it was defined already in the namespace + if (action.default !== undefined && + typeof action.default === 'string' && + hasattr(namespace, action.dest) && + action.default === getattr(namespace, action.dest)) { + setattr(namespace, action.dest, + this._get_value(action, action.default)) + } + } + } + } + + if (required_actions.length) { + this.error(sub('the following arguments are required: %s', + required_actions.join(', '))) + } + + // make sure all required groups had one option present + for (let group of this._mutually_exclusive_groups) { + if (group.required) { + let no_actions_used = true + for (let action of group._group_actions) { + if (seen_non_default_actions.has(action)) { + no_actions_used = false + break + } + } + + // if no actions were used, report the error + if (no_actions_used) { + let names = group._group_actions + .filter(action => action.help !== SUPPRESS) + .map(action => _get_action_name(action)) + let msg = 'one of the arguments %s is required' + this.error(sub(msg, names.join(' '))) + } + } + } + + // return the updated namespace and the extra arguments + return [ namespace, extras ] + } + + _read_args_from_files(arg_strings) { + // expand arguments referencing files + let new_arg_strings = [] + for (let arg_string of arg_strings) { + + // for regular arguments, just add them back into the list + if (!arg_string || !this.fromfile_prefix_chars.includes(arg_string[0])) { + new_arg_strings.push(arg_string) + + // replace arguments referencing files with the file content + } else { + try { + let args_file = fs.readFileSync(arg_string.slice(1), 'utf8') + let arg_strings = [] + for (let arg_line of splitlines(args_file)) { + for (let arg of this.convert_arg_line_to_args(arg_line)) { + arg_strings.push(arg) + } + } + arg_strings = this._read_args_from_files(arg_strings) + new_arg_strings = new_arg_strings.concat(arg_strings) + } catch (err) { + this.error(err.message) + } + } + } + + // return the modified argument list + return new_arg_strings + } + + convert_arg_line_to_args(arg_line) { + return [arg_line] + } + + _match_argument(action, arg_strings_pattern) { + // match the pattern for this action to the arg strings + let nargs_pattern = this._get_nargs_pattern(action) + let match = arg_strings_pattern.match(new RegExp('^' + nargs_pattern)) + + // raise an exception if we weren't able to find a match + if (match === null) { + let nargs_errors = { + undefined: 'expected one argument', + [OPTIONAL]: 'expected at most one argument', + [ONE_OR_MORE]: 'expected at least one argument' + } + let msg = nargs_errors[action.nargs] + if (msg === undefined) { + msg = sub(action.nargs === 1 ? 'expected %s argument' : 'expected %s arguments', action.nargs) + } + throw new ArgumentError(action, msg) + } + + // return the number of arguments matched + return match[1].length + } + + _match_arguments_partial(actions, arg_strings_pattern) { + // progressively shorten the actions list by slicing off the + // final actions until we find a match + let result = [] + for (let i of range(actions.length, 0, -1)) { + let actions_slice = actions.slice(0, i) + let pattern = actions_slice.map(action => this._get_nargs_pattern(action)).join('') + let match = arg_strings_pattern.match(new RegExp('^' + pattern)) + if (match !== null) { + result = result.concat(match.slice(1).map(string => string.length)) + break + } + } + + // return the list of arg string counts + return result + } + + _parse_optional(arg_string) { + // if it's an empty string, it was meant to be a positional + if (!arg_string) { + return undefined + } + + // if it doesn't start with a prefix, it was meant to be positional + if (!this.prefix_chars.includes(arg_string[0])) { + return undefined + } + + // if the option string is present in the parser, return the action + if (arg_string in this._option_string_actions) { + let action = this._option_string_actions[arg_string] + return [ action, arg_string, undefined ] + } + + // if it's just a single character, it was meant to be positional + if (arg_string.length === 1) { + return undefined + } + + // if the option string before the "=" is present, return the action + if (arg_string.includes('=')) { + let [ option_string, explicit_arg ] = _string_split(arg_string, '=', 1) + if (option_string in this._option_string_actions) { + let action = this._option_string_actions[option_string] + return [ action, option_string, explicit_arg ] + } + } + + // search through all possible prefixes of the option string + // and all actions in the parser for possible interpretations + let option_tuples = this._get_option_tuples(arg_string) + + // if multiple actions match, the option string was ambiguous + if (option_tuples.length > 1) { + let options = option_tuples.map(([ /*action*/, option_string/*, explicit_arg*/ ]) => option_string).join(', ') + let args = {option: arg_string, matches: options} + let msg = 'ambiguous option: %(option)s could match %(matches)s' + this.error(sub(msg, args)) + + // if exactly one action matched, this segmentation is good, + // so return the parsed action + } else if (option_tuples.length === 1) { + let [ option_tuple ] = option_tuples + return option_tuple + } + + // if it was not found as an option, but it looks like a negative + // number, it was meant to be positional + // unless there are negative-number-like options + if (this._negative_number_matcher.test(arg_string)) { + if (!this._has_negative_number_optionals.length) { + return undefined + } + } + + // if it contains a space, it was meant to be a positional + if (arg_string.includes(' ')) { + return undefined + } + + // it was meant to be an optional but there is no such option + // in this parser (though it might be a valid option in a subparser) + return [ undefined, arg_string, undefined ] + } + + _get_option_tuples(option_string) { + let result = [] + + // option strings starting with two prefix characters are only + // split at the '=' + let chars = this.prefix_chars + if (chars.includes(option_string[0]) && chars.includes(option_string[1])) { + if (this.allow_abbrev) { + let option_prefix, explicit_arg + if (option_string.includes('=')) { + [ option_prefix, explicit_arg ] = _string_split(option_string, '=', 1) + } else { + option_prefix = option_string + explicit_arg = undefined + } + for (let option_string of Object.keys(this._option_string_actions)) { + if (option_string.startsWith(option_prefix)) { + let action = this._option_string_actions[option_string] + let tup = [ action, option_string, explicit_arg ] + result.push(tup) + } + } + } + + // single character options can be concatenated with their arguments + // but multiple character options always have to have their argument + // separate + } else if (chars.includes(option_string[0]) && !chars.includes(option_string[1])) { + let option_prefix = option_string + let explicit_arg = undefined + let short_option_prefix = option_string.slice(0, 2) + let short_explicit_arg = option_string.slice(2) + + for (let option_string of Object.keys(this._option_string_actions)) { + if (option_string === short_option_prefix) { + let action = this._option_string_actions[option_string] + let tup = [ action, option_string, short_explicit_arg ] + result.push(tup) + } else if (option_string.startsWith(option_prefix)) { + let action = this._option_string_actions[option_string] + let tup = [ action, option_string, explicit_arg ] + result.push(tup) + } + } + + // shouldn't ever get here + } else { + this.error(sub('unexpected option string: %s', option_string)) + } + + // return the collected option tuples + return result + } + + _get_nargs_pattern(action) { + // in all examples below, we have to allow for '--' args + // which are represented as '-' in the pattern + let nargs = action.nargs + let nargs_pattern + + // the default (None) is assumed to be a single argument + if (nargs === undefined) { + nargs_pattern = '(-*A-*)' + + // allow zero or one arguments + } else if (nargs === OPTIONAL) { + nargs_pattern = '(-*A?-*)' + + // allow zero or more arguments + } else if (nargs === ZERO_OR_MORE) { + nargs_pattern = '(-*[A-]*)' + + // allow one or more arguments + } else if (nargs === ONE_OR_MORE) { + nargs_pattern = '(-*A[A-]*)' + + // allow any number of options or arguments + } else if (nargs === REMAINDER) { + nargs_pattern = '([-AO]*)' + + // allow one argument followed by any number of options or arguments + } else if (nargs === PARSER) { + nargs_pattern = '(-*A[-AO]*)' + + // suppress action, like nargs=0 + } else if (nargs === SUPPRESS) { + nargs_pattern = '(-*-*)' + + // all others should be integers + } else { + nargs_pattern = sub('(-*%s-*)', 'A'.repeat(nargs).split('').join('-*')) + } + + // if this is an optional action, -- is not allowed + if (action.option_strings.length) { + nargs_pattern = nargs_pattern.replace(/-\*/g, '') + nargs_pattern = nargs_pattern.replace(/-/g, '') + } + + // return the pattern + return nargs_pattern + } + + // ======================== + // Alt command line argument parsing, allowing free intermix + // ======================== + + parse_intermixed_args(args = undefined, namespace = undefined) { + let argv + [ args, argv ] = this.parse_known_intermixed_args(args, namespace) + if (argv.length) { + let msg = 'unrecognized arguments: %s' + this.error(sub(msg, argv.join(' '))) + } + return args + } + + parse_known_intermixed_args(args = undefined, namespace = undefined) { + // returns a namespace and list of extras + // + // positional can be freely intermixed with optionals. optionals are + // first parsed with all positional arguments deactivated. The 'extras' + // are then parsed. If the parser definition is incompatible with the + // intermixed assumptions (e.g. use of REMAINDER, subparsers) a + // TypeError is raised. + // + // positionals are 'deactivated' by setting nargs and default to + // SUPPRESS. This blocks the addition of that positional to the + // namespace + + let extras + let positionals = this._get_positional_actions() + let a = positionals.filter(action => [ PARSER, REMAINDER ].includes(action.nargs)) + if (a.length) { + throw new TypeError(sub('parse_intermixed_args: positional arg' + + ' with nargs=%s', a[0].nargs)) + } + + for (let group of this._mutually_exclusive_groups) { + for (let action of group._group_actions) { + if (positionals.includes(action)) { + throw new TypeError('parse_intermixed_args: positional in' + + ' mutuallyExclusiveGroup') + } + } + } + + let save_usage + try { + save_usage = this.usage + let remaining_args + try { + if (this.usage === undefined) { + // capture the full usage for use in error messages + this.usage = this.format_usage().slice(7) + } + for (let action of positionals) { + // deactivate positionals + action.save_nargs = action.nargs + // action.nargs = 0 + action.nargs = SUPPRESS + action.save_default = action.default + action.default = SUPPRESS + } + [ namespace, remaining_args ] = this.parse_known_args(args, + namespace) + for (let action of positionals) { + // remove the empty positional values from namespace + let attr = getattr(namespace, action.dest) + if (Array.isArray(attr) && attr.length === 0) { + // eslint-disable-next-line no-console + console.warn(sub('Do not expect %s in %s', action.dest, namespace)) + delattr(namespace, action.dest) + } + } + } finally { + // restore nargs and usage before exiting + for (let action of positionals) { + action.nargs = action.save_nargs + action.default = action.save_default + } + } + let optionals = this._get_optional_actions() + try { + // parse positionals. optionals aren't normally required, but + // they could be, so make sure they aren't. + for (let action of optionals) { + action.save_required = action.required + action.required = false + } + for (let group of this._mutually_exclusive_groups) { + group.save_required = group.required + group.required = false + } + [ namespace, extras ] = this.parse_known_args(remaining_args, + namespace) + } finally { + // restore parser values before exiting + for (let action of optionals) { + action.required = action.save_required + } + for (let group of this._mutually_exclusive_groups) { + group.required = group.save_required + } + } + } finally { + this.usage = save_usage + } + return [ namespace, extras ] + } + + // ======================== + // Value conversion methods + // ======================== + _get_values(action, arg_strings) { + // for everything but PARSER, REMAINDER args, strip out first '--' + if (![PARSER, REMAINDER].includes(action.nargs)) { + try { + _array_remove(arg_strings, '--') + } catch (err) {} + } + + let value + // optional argument produces a default when not present + if (!arg_strings.length && action.nargs === OPTIONAL) { + if (action.option_strings.length) { + value = action.const + } else { + value = action.default + } + if (typeof value === 'string') { + value = this._get_value(action, value) + this._check_value(action, value) + } + + // when nargs='*' on a positional, if there were no command-line + // args, use the default if it is anything other than None + } else if (!arg_strings.length && action.nargs === ZERO_OR_MORE && + !action.option_strings.length) { + if (action.default !== undefined) { + value = action.default + } else { + value = arg_strings + } + this._check_value(action, value) + + // single argument or optional argument produces a single value + } else if (arg_strings.length === 1 && [undefined, OPTIONAL].includes(action.nargs)) { + let arg_string = arg_strings[0] + value = this._get_value(action, arg_string) + this._check_value(action, value) + + // REMAINDER arguments convert all values, checking none + } else if (action.nargs === REMAINDER) { + value = arg_strings.map(v => this._get_value(action, v)) + + // PARSER arguments convert all values, but check only the first + } else if (action.nargs === PARSER) { + value = arg_strings.map(v => this._get_value(action, v)) + this._check_value(action, value[0]) + + // SUPPRESS argument does not put anything in the namespace + } else if (action.nargs === SUPPRESS) { + value = SUPPRESS + + // all other types of nargs produce a list + } else { + value = arg_strings.map(v => this._get_value(action, v)) + for (let v of value) { + this._check_value(action, v) + } + } + + // return the converted value + return value + } + + _get_value(action, arg_string) { + let type_func = this._registry_get('type', action.type, action.type) + if (typeof type_func !== 'function') { + let msg = '%r is not callable' + throw new ArgumentError(action, sub(msg, type_func)) + } + + // convert the value to the appropriate type + let result + try { + try { + result = type_func(arg_string) + } catch (err) { + // Dear TC39, why would you ever consider making es6 classes not callable? + // We had one universal interface, [[Call]], which worked for anything + // (with familiar this-instanceof guard for classes). Now we have two. + if (err instanceof TypeError && + /Class constructor .* cannot be invoked without 'new'/.test(err.message)) { + // eslint-disable-next-line new-cap + result = new type_func(arg_string) + } else { + throw err + } + } + + } catch (err) { + // ArgumentTypeErrors indicate errors + if (err instanceof ArgumentTypeError) { + //let name = getattr(action.type, 'name', repr(action.type)) + let msg = err.message + throw new ArgumentError(action, msg) + + // TypeErrors or ValueErrors also indicate errors + } else if (err instanceof TypeError) { + let name = getattr(action.type, 'name', repr(action.type)) + let args = {type: name, value: arg_string} + let msg = 'invalid %(type)s value: %(value)r' + throw new ArgumentError(action, sub(msg, args)) + } else { + throw err + } + } + + // return the converted value + return result + } + + _check_value(action, value) { + // converted value must be one of the choices (if specified) + if (action.choices !== undefined && !_choices_to_array(action.choices).includes(value)) { + let args = {value, + choices: _choices_to_array(action.choices).map(repr).join(', ')} + let msg = 'invalid choice: %(value)r (choose from %(choices)s)' + throw new ArgumentError(action, sub(msg, args)) + } + } + + // ======================= + // Help-formatting methods + // ======================= + format_usage() { + let formatter = this._get_formatter() + formatter.add_usage(this.usage, this._actions, + this._mutually_exclusive_groups) + return formatter.format_help() + } + + format_help() { + let formatter = this._get_formatter() + + // usage + formatter.add_usage(this.usage, this._actions, + this._mutually_exclusive_groups) + + // description + formatter.add_text(this.description) + + // positionals, optionals and user-defined groups + for (let action_group of this._action_groups) { + formatter.start_section(action_group.title) + formatter.add_text(action_group.description) + formatter.add_arguments(action_group._group_actions) + formatter.end_section() + } + + // epilog + formatter.add_text(this.epilog) + + // determine help from format above + return formatter.format_help() + } + + _get_formatter() { + // eslint-disable-next-line new-cap + return new this.formatter_class({ prog: this.prog }) + } + + // ===================== + // Help-printing methods + // ===================== + print_usage(file = undefined) { + if (file === undefined) file = process.stdout + this._print_message(this.format_usage(), file) + } + + print_help(file = undefined) { + if (file === undefined) file = process.stdout + this._print_message(this.format_help(), file) + } + + _print_message(message, file = undefined) { + if (message) { + if (file === undefined) file = process.stderr + file.write(message) + } + } + + // =============== + // Exiting methods + // =============== + exit(status = 0, message = undefined) { + if (message) { + this._print_message(message, process.stderr) + } + process.exit(status) + } + + error(message) { + /* + * error(message: string) + * + * Prints a usage message incorporating the message to stderr and + * exits. + * + * If you override this in a subclass, it should not return -- it + * should either exit or raise an exception. + */ + + // LEGACY (v1 compatibility), debug mode + if (this.debug === true) throw new Error(message) + // end + this.print_usage(process.stderr) + let args = {prog: this.prog, message: message} + this.exit(2, sub('%(prog)s: error: %(message)s\n', args)) + } +})) + + +module.exports = { + ArgumentParser, + ArgumentError, + ArgumentTypeError, + BooleanOptionalAction, + FileType, + HelpFormatter, + ArgumentDefaultsHelpFormatter, + RawDescriptionHelpFormatter, + RawTextHelpFormatter, + MetavarTypeHelpFormatter, + Namespace, + Action, + ONE_OR_MORE, + OPTIONAL, + PARSER, + REMAINDER, + SUPPRESS, + ZERO_OR_MORE +} + +// LEGACY (v1 compatibility), Const alias +Object.defineProperty(module.exports, 'Const', { + get() { + let result = {} + Object.entries({ ONE_OR_MORE, OPTIONAL, PARSER, REMAINDER, SUPPRESS, ZERO_OR_MORE }).forEach(([ n, v ]) => { + Object.defineProperty(result, n, { + get() { + deprecate(n, sub('use argparse.%s instead of argparse.Const.%s', n, n)) + return v + } + }) + }) + Object.entries({ _UNRECOGNIZED_ARGS_ATTR }).forEach(([ n, v ]) => { + Object.defineProperty(result, n, { + get() { + deprecate(n, sub('argparse.Const.%s is an internal symbol and will no longer be available', n)) + return v + } + }) + }) + return result + }, + enumerable: false +}) +// end diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json new file mode 100644 index 0000000000..647d2aff18 --- /dev/null +++ b/node_modules/argparse/package.json @@ -0,0 +1,31 @@ +{ + "name": "argparse", + "description": "CLI arguments parser. Native port of python's argparse.", + "version": "2.0.1", + "keywords": [ + "cli", + "parser", + "argparse", + "option", + "args" + ], + "main": "argparse.js", + "files": [ + "argparse.js", + "lib/" + ], + "license": "Python-2.0", + "repository": "nodeca/argparse", + "scripts": { + "lint": "eslint .", + "test": "npm run lint && nyc mocha", + "coverage": "npm run test && nyc report --reporter html" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.11.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "eslint": "^7.5.0", + "mocha": "^8.0.1", + "nyc": "^15.1.0" + } +} diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml new file mode 100644 index 0000000000..cea8b16e9e --- /dev/null +++ b/node_modules/balanced-match/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/balanced-match" +patreon: juliangruber diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000000..2cdc8e4148 --- /dev/null +++ b/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md new file mode 100644 index 0000000000..d2a48b6b49 --- /dev/null +++ b/node_modules/balanced-match/README.md @@ -0,0 +1,97 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js new file mode 100644 index 0000000000..c67a64608d --- /dev/null +++ b/node_modules/balanced-match/index.js @@ -0,0 +1,62 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + if(a===b) { + return [ai, bi]; + } + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json new file mode 100644 index 0000000000..ce6073e040 --- /dev/null +++ b/node_modules/balanced-match/package.json @@ -0,0 +1,48 @@ +{ + "name": "balanced-match", + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "version": "1.0.2", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "main": "index.js", + "scripts": { + "test": "tape test/test.js", + "bench": "matcha test/bench.js" + }, + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/brace-expansion/.github/FUNDING.yml b/node_modules/brace-expansion/.github/FUNDING.yml new file mode 100644 index 0000000000..79d1eafcec --- /dev/null +++ b/node_modules/brace-expansion/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/brace-expansion" +patreon: juliangruber diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE new file mode 100644 index 0000000000..de3226673c --- /dev/null +++ b/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 0000000000..e55c583dd0 --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,135 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 0000000000..4af9ddee46 --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,203 @@ +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m) return [str]; + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + if (/\$$/.test(m.pre)) { + for (var k = 0; k < post.length; k++) { + var expansion = pre+ '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } else { + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = []; + + for (var j = 0; j < n.length; j++) { + N.push.apply(N, expand(n[j], false)); + } + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + } + + return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 0000000000..7097d41e39 --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,46 @@ +{ + "name": "brace-expansion", + "description": "Brace expansion as known from sh/bash", + "version": "2.0.1", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "main": "index.js", + "scripts": { + "test": "tape test/*.js", + "gentest": "bash test/generate.sh", + "bench": "matcha test/perf/bench.js" + }, + "dependencies": { + "balanced-match": "^1.0.0" + }, + "devDependencies": { + "@c4312/matcha": "^1.3.1", + "tape": "^4.6.0" + }, + "keywords": [], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/character-entities-legacy/index.d.ts b/node_modules/character-entities-legacy/index.d.ts new file mode 100644 index 0000000000..2d567ecc0f --- /dev/null +++ b/node_modules/character-entities-legacy/index.d.ts @@ -0,0 +1,6 @@ +/** + * List of legacy HTML named character references that don’t need a trailing semicolon. + * + * @type {Array} + */ +export const characterEntitiesLegacy: Array diff --git a/node_modules/character-entities-legacy/index.js b/node_modules/character-entities-legacy/index.js new file mode 100644 index 0000000000..678d6a7034 --- /dev/null +++ b/node_modules/character-entities-legacy/index.js @@ -0,0 +1,113 @@ +/** + * List of legacy HTML named character references that don’t need a trailing semicolon. + * + * @type {Array} + */ +export const characterEntitiesLegacy = [ + 'AElig', + 'AMP', + 'Aacute', + 'Acirc', + 'Agrave', + 'Aring', + 'Atilde', + 'Auml', + 'COPY', + 'Ccedil', + 'ETH', + 'Eacute', + 'Ecirc', + 'Egrave', + 'Euml', + 'GT', + 'Iacute', + 'Icirc', + 'Igrave', + 'Iuml', + 'LT', + 'Ntilde', + 'Oacute', + 'Ocirc', + 'Ograve', + 'Oslash', + 'Otilde', + 'Ouml', + 'QUOT', + 'REG', + 'THORN', + 'Uacute', + 'Ucirc', + 'Ugrave', + 'Uuml', + 'Yacute', + 'aacute', + 'acirc', + 'acute', + 'aelig', + 'agrave', + 'amp', + 'aring', + 'atilde', + 'auml', + 'brvbar', + 'ccedil', + 'cedil', + 'cent', + 'copy', + 'curren', + 'deg', + 'divide', + 'eacute', + 'ecirc', + 'egrave', + 'eth', + 'euml', + 'frac12', + 'frac14', + 'frac34', + 'gt', + 'iacute', + 'icirc', + 'iexcl', + 'igrave', + 'iquest', + 'iuml', + 'laquo', + 'lt', + 'macr', + 'micro', + 'middot', + 'nbsp', + 'not', + 'ntilde', + 'oacute', + 'ocirc', + 'ograve', + 'ordf', + 'ordm', + 'oslash', + 'otilde', + 'ouml', + 'para', + 'plusmn', + 'pound', + 'quot', + 'raquo', + 'reg', + 'sect', + 'shy', + 'sup1', + 'sup2', + 'sup3', + 'szlig', + 'thorn', + 'times', + 'uacute', + 'ucirc', + 'ugrave', + 'uml', + 'uuml', + 'yacute', + 'yen', + 'yuml' +] diff --git a/node_modules/character-entities-legacy/license b/node_modules/character-entities-legacy/license new file mode 100644 index 0000000000..32e7a3d93c --- /dev/null +++ b/node_modules/character-entities-legacy/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities-legacy/package.json b/node_modules/character-entities-legacy/package.json new file mode 100644 index 0000000000..6f6805616c --- /dev/null +++ b/node_modules/character-entities-legacy/package.json @@ -0,0 +1,77 @@ +{ + "name": "character-entities-legacy", + "version": "3.0.0", + "description": "List of legacy HTML named character references that don’t need a trailing semicolon", + "license": "MIT", + "keywords": [ + "html", + "entity", + "entities", + "character", + "reference", + "name" + ], + "repository": "wooorm/character-entities-legacy", + "bugs": "https://github.com/wooorm/character-entities-legacy/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "bail": "^2.0.0", + "c8": "^7.0.0", + "concat-stream": "^2.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.45.0" + }, + "scripts": { + "generate": "node build", + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run generate && npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/character-entities-legacy/readme.md b/node_modules/character-entities-legacy/readme.md new file mode 100644 index 0000000000..9c1765faf6 --- /dev/null +++ b/node_modules/character-entities-legacy/readme.md @@ -0,0 +1,157 @@ +# character-entities-legacy + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +List of legacy HTML named character references that don’t need a trailing +semicolon. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`characterEntitiesLegacy`](#characterentitieslegacy) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a list of certain named character references, that due to legacy +reasons, don’t need a trailing semicolon in HTML. +For example, `©` is perfectly fine for `©`! + +## When should I use this? + +Maybe when you’re writing an HTML parser or minifier, but otherwise probably +never! +Even then, it might be better to use [`parse-entities`][parse-entities] or +[`stringify-entities`][stringify-entities]. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install character-entities-legacy +``` + +In Deno with [Skypack][]: + +```js +import {characterEntitiesLegacy} from 'https://cdn.skypack.dev/character-entities-legacy@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {characterEntitiesLegacy} from 'character-entities-legacy' + +console.log(characterEntitiesLegacy.includes('copy')) // => true +console.log(characterEntitiesLegacy.includes('frac34')) // => true +console.log(characterEntitiesLegacy.includes('sup1')) // => true +``` + +## API + +This package exports the following identifiers: `characterEntitiesLegacy`. +There is no default export. + +### `characterEntitiesLegacy` + +List of (case sensitive) legacy character entity names. +[`wooorm/character-entities`][character-entities] holds their decoded values. +See [`whatwg/html`][html] for more info. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) + — parse (decode) character references +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — serialize (encode) character references +* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) + — info on character entities +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — info on HTML4 character entities +* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) + — info on invalid numeric character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/character-entities-legacy/workflows/main/badge.svg + +[build]: https://github.com/wooorm/character-entities-legacy/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities-legacy.svg + +[coverage]: https://codecov.io/github/wooorm/character-entities-legacy + +[downloads-badge]: https://img.shields.io/npm/dm/character-entities-legacy.svg + +[downloads]: https://www.npmjs.com/package/character-entities-legacy + +[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities-legacy.svg + +[size]: https://bundlephobia.com/result?p=character-entities-legacy + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[html]: https://github.com/whatwg/html-build/blob/HEAD/entities/json-entities-legacy.inc + +[parse-entities]: https://github.com/wooorm/parse-entities + +[stringify-entities]: https://github.com/wooorm/stringify-entities + +[character-entities]: https://github.com/wooorm/character-entities diff --git a/node_modules/character-entities/index.d.ts b/node_modules/character-entities/index.d.ts new file mode 100644 index 0000000000..aa7e651aaf --- /dev/null +++ b/node_modules/character-entities/index.d.ts @@ -0,0 +1,6 @@ +/** + * Map of named character references. + * + * @type {Record} + */ +export const characterEntities: Record diff --git a/node_modules/character-entities/index.js b/node_modules/character-entities/index.js new file mode 100644 index 0000000000..9222e7a7fe --- /dev/null +++ b/node_modules/character-entities/index.js @@ -0,0 +1,2132 @@ +/** + * Map of named character references. + * + * @type {Record} + */ +export const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} diff --git a/node_modules/character-entities/license b/node_modules/character-entities/license new file mode 100644 index 0000000000..32e7a3d93c --- /dev/null +++ b/node_modules/character-entities/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities/package.json b/node_modules/character-entities/package.json new file mode 100644 index 0000000000..30f6a53963 --- /dev/null +++ b/node_modules/character-entities/package.json @@ -0,0 +1,78 @@ +{ + "name": "character-entities", + "version": "2.0.2", + "description": "Map of named character references", + "license": "MIT", + "keywords": [ + "html", + "entity", + "entities", + "character", + "reference", + "name", + "replacement" + ], + "repository": "wooorm/character-entities", + "bugs": "https://github.com/wooorm/character-entities/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "bail": "^2.0.0", + "c8": "^7.0.0", + "concat-stream": "^2.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.50.0" + }, + "scripts": { + "generate": "node build", + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run generate && npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/character-entities/readme.md b/node_modules/character-entities/readme.md new file mode 100644 index 0000000000..16889ca142 --- /dev/null +++ b/node_modules/character-entities/readme.md @@ -0,0 +1,152 @@ +# character-entities + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Map of named character references. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [characterEntities](#characterentities) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a map of named character references in HTML (latest) to the characters +they represent. + +## When should I use this? + +Maybe when you’re writing an HTML parser or minifier, but otherwise probably +never! +Even then, it might be better to use [`parse-entities`][parse-entities] or +[`stringify-entities`][stringify-entities]. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, 16.0+, 18.0+), install with [npm][]: + +```sh +npm install character-entities +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {characterEntities} from 'https://esm.sh/character-entities@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {characterEntities} from 'character-entities' + +console.log(characterEntities.AElig) // => 'Æ' +console.log(characterEntities.aelig) // => 'æ' +console.log(characterEntities.amp) // => '&' +``` + +## API + +This package exports the identifier `characterEntities`. +There is no default export. + +### characterEntities + +Mapping between (case-sensitive) character entity names to replacements. +See [`html.spec.whatwg.org`][html] for more info. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, 16.0+, and 18.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) + — parse (decode) character references +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — serialize (encode) character references +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — info on named character references in HTML 4 +* [`character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) + — info on invalid numeric character references +* [`character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) + — info on legacy named character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/character-entities/workflows/main/badge.svg + +[build]: https://github.com/wooorm/character-entities/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities.svg + +[coverage]: https://codecov.io/github/wooorm/character-entities + +[downloads-badge]: https://img.shields.io/npm/dm/character-entities.svg + +[downloads]: https://www.npmjs.com/package/character-entities + +[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities.svg + +[size]: https://bundlephobia.com/result?p=character-entities + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[parse-entities]: https://github.com/wooorm/parse-entities + +[stringify-entities]: https://github.com/wooorm/stringify-entities + +[html]: https://html.spec.whatwg.org/multipage/syntax.html#named-character-references diff --git a/node_modules/character-reference-invalid/index.d.ts b/node_modules/character-reference-invalid/index.d.ts new file mode 100644 index 0000000000..800115adbf --- /dev/null +++ b/node_modules/character-reference-invalid/index.d.ts @@ -0,0 +1,6 @@ +/** + * Map of invalid numeric character references to their replacements, according to HTML. + * + * @type {Record} + */ +export const characterReferenceInvalid: Record diff --git a/node_modules/character-reference-invalid/index.js b/node_modules/character-reference-invalid/index.js new file mode 100644 index 0000000000..3fd48c5d7c --- /dev/null +++ b/node_modules/character-reference-invalid/index.js @@ -0,0 +1,35 @@ +/** + * Map of invalid numeric character references to their replacements, according to HTML. + * + * @type {Record} + */ +export const characterReferenceInvalid = { + 0: '�', + 128: '€', + 130: '‚', + 131: 'ƒ', + 132: '„', + 133: '…', + 134: '†', + 135: '‡', + 136: 'ˆ', + 137: '‰', + 138: 'Š', + 139: '‹', + 140: 'Œ', + 142: 'Ž', + 145: '‘', + 146: '’', + 147: '“', + 148: '”', + 149: '•', + 150: '–', + 151: '—', + 152: '˜', + 153: '™', + 154: 'š', + 155: '›', + 156: 'œ', + 158: 'ž', + 159: 'Ÿ' +} diff --git a/node_modules/character-reference-invalid/license b/node_modules/character-reference-invalid/license new file mode 100644 index 0000000000..32e7a3d93c --- /dev/null +++ b/node_modules/character-reference-invalid/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-reference-invalid/package.json b/node_modules/character-reference-invalid/package.json new file mode 100644 index 0000000000..b133319c35 --- /dev/null +++ b/node_modules/character-reference-invalid/package.json @@ -0,0 +1,83 @@ +{ + "name": "character-reference-invalid", + "version": "2.0.1", + "description": "Map of invalid numeric character references to their replacements, according to HTML", + "license": "MIT", + "keywords": [ + "html", + "entity", + "numeric", + "character", + "reference", + "replacement", + "invalid", + "name" + ], + "repository": "wooorm/character-reference-invalid", + "bugs": "https://github.com/wooorm/character-reference-invalid/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "bail": "^2.0.0", + "c8": "^7.0.0", + "concat-stream": "^2.0.0", + "hast-util-select": "^5.0.0", + "hast-util-to-string": "^2.0.0", + "prettier": "^2.0.0", + "rehype-parse": "^8.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "unified": "^10.0.0", + "xo": "^0.45.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "generate": "node build", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run generate && npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/character-reference-invalid/readme.md b/node_modules/character-reference-invalid/readme.md new file mode 100644 index 0000000000..2190876940 --- /dev/null +++ b/node_modules/character-reference-invalid/readme.md @@ -0,0 +1,156 @@ +# character-reference-invalid + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Map of invalid numeric character references to their replacements, according to +HTML. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`characterReferenceInvalid`](#characterreferenceinvalid) +* [Source](#source) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a map from the [HTML spec][source] of C1 ASCII/Unicode control +characters (which are disallowed by HTML) to the characters those code points +would have in Windows 1252. +For example, U+0080 (Padding Character) maps to `€`, because that’s used for +0x80 in Windows 1252. + +## When should I use this? + +Probably never, unless you’re dealing with parsing HTML or similar XML-like +things, or in a place where Unicode is not the primary encoding (it is in most +places). + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install character-reference-invalid +``` + +In Deno with [Skypack][]: + +```js +import {characterReferenceInvalid} from 'https://cdn.skypack.dev/character-reference-invalid@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {characterReferenceInvalid} from 'character-reference-invalid' + +console.log(characterReferenceInvalid[0x80]) // => '€' +console.log(characterReferenceInvalid[0x89]) // => '‰' +console.log(characterReferenceInvalid[0x99]) // => '™' +``` + +## API + +This package exports the following identifiers: `characterReferenceInvalid`. +There is no default export. + +### `characterReferenceInvalid` + +`Record` — mapping between invalid numeric character reference +codes to replacements characters. + +## Source + +See [`html.spec.whatwg.org`][source]. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) + — HTML character entity info +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — HTML 4 character entity info +* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) + — legacy character entity info +* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) + — parse HTML character references +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — serialize HTML character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/character-reference-invalid/workflows/main/badge.svg + +[build]: https://github.com/wooorm/character-reference-invalid/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-reference-invalid.svg + +[coverage]: https://codecov.io/github/wooorm/character-reference-invalid + +[downloads-badge]: https://img.shields.io/npm/dm/character-reference-invalid.svg + +[downloads]: https://www.npmjs.com/package/character-reference-invalid + +[size-badge]: https://img.shields.io/bundlephobia/minzip/character-reference-invalid.svg + +[size]: https://bundlephobia.com/result?p=character-reference-invalid + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[source]: https://html.spec.whatwg.org/multipage/parsing.html#table-charref-overrides diff --git a/node_modules/color-convert/CHANGELOG.md b/node_modules/color-convert/CHANGELOG.md new file mode 100644 index 0000000000..0a7bce4fd5 --- /dev/null +++ b/node_modules/color-convert/CHANGELOG.md @@ -0,0 +1,54 @@ +# 1.0.0 - 2016-01-07 + +- Removed: unused speed test +- Added: Automatic routing between previously unsupported conversions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `convert()` class +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: all functions to lookup dictionary +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: `ansi` to `ansi256` +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Fixed: argument grouping for functions requiring only one argument +([#27](https://github.com/Qix-/color-convert/pull/27)) + +# 0.6.0 - 2015-07-23 + +- Added: methods to handle +[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: + - rgb2ansi16 + - rgb2ansi + - hsl2ansi16 + - hsl2ansi + - hsv2ansi16 + - hsv2ansi + - hwb2ansi16 + - hwb2ansi + - cmyk2ansi16 + - cmyk2ansi + - keyword2ansi16 + - keyword2ansi + - ansi162rgb + - ansi162hsl + - ansi162hsv + - ansi162hwb + - ansi162cmyk + - ansi162keyword + - ansi2rgb + - ansi2hsl + - ansi2hsv + - ansi2hwb + - ansi2cmyk + - ansi2keyword +([#18](https://github.com/harthur/color-convert/pull/18)) + +# 0.5.3 - 2015-06-02 + +- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` +([#15](https://github.com/harthur/color-convert/issues/15)) + +--- + +Check out commit logs for older releases diff --git a/node_modules/color-convert/LICENSE b/node_modules/color-convert/LICENSE new file mode 100644 index 0000000000..5b4c386f92 --- /dev/null +++ b/node_modules/color-convert/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011-2016 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/color-convert/README.md b/node_modules/color-convert/README.md new file mode 100644 index 0000000000..d4b08fc369 --- /dev/null +++ b/node_modules/color-convert/README.md @@ -0,0 +1,68 @@ +# color-convert + +[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert) + +Color-convert is a color conversion library for JavaScript and node. +It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest): + +```js +var convert = require('color-convert'); + +convert.rgb.hsl(140, 200, 100); // [96, 48, 59] +convert.keyword.rgb('blue'); // [0, 0, 255] + +var rgbChannels = convert.rgb.channels; // 3 +var cmykChannels = convert.cmyk.channels; // 4 +var ansiChannels = convert.ansi16.channels; // 1 +``` + +# Install + +```console +$ npm install color-convert +``` + +# API + +Simply get the property of the _from_ and _to_ conversion that you're looking for. + +All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function. + +All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha). + +```js +var convert = require('color-convert'); + +// Hex to LAB +convert.hex.lab('DEADBF'); // [ 76, 21, -2 ] +convert.hex.lab.raw('DEADBF'); // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ] + +// RGB to CMYK +convert.rgb.cmyk(167, 255, 4); // [ 35, 0, 98, 0 ] +convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ] +``` + +### Arrays +All functions that accept multiple arguments also support passing an array. + +Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.) + +```js +var convert = require('color-convert'); + +convert.rgb.hex(123, 45, 67); // '7B2D43' +convert.rgb.hex([123, 45, 67]); // '7B2D43' +``` + +## Routing + +Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex). + +Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js). + +# Contribute + +If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request. + +# License +Copyright © 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE). diff --git a/node_modules/color-convert/conversions.js b/node_modules/color-convert/conversions.js new file mode 100644 index 0000000000..2657f265c9 --- /dev/null +++ b/node_modules/color-convert/conversions.js @@ -0,0 +1,839 @@ +/* MIT license */ +/* eslint-disable no-mixed-operators */ +const cssKeywords = require('color-name'); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +const reverseKeywords = {}; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; +} + +const convert = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +module.exports = convert; + +// Hide .channels and .labels properties +for (const model of Object.keys(convert)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + const {channels, labels} = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); +} + +convert.rgb.hsl = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + const l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; + + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +function comparativeDistance(x, y) { + /* + See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + */ + return ( + ((x[0] - y[0]) ** 2) + + ((x[1] - y[1]) ** 2) + + ((x[2] - y[2]) ** 2) + ); +} + +convert.rgb.keyword = function (rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + let currentClosestDistance = Infinity; + let currentClosestKeyword; + + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + + // Compute comparative distance + const distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + + // Assume sRGB + r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); + g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); + b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); + + const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + const t1 = 2 * l - t2; + + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - (s * f)); + const t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + + // Wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + const n = wh + f * (v - wh); // Linear interpolation + + let r; + let g; + let b; + /* eslint-disable max-statements-per-line,no-multi-spaces */ + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + /* eslint-enable max-statements-per-line,no-multi-spaces */ + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // Assume sRGB + r = r > 0.0031308 + ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + const c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + let ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // Optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + const ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + let color = args % 10; + + // Handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + const mult = (~~(args > 50) + 1) * 0.5; + const r = ((color & 1) * mult) * 255; + const g = (((color >> 1) & 1) * mult) * 255; + const b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // Handle greyscale + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + const integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + let colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(char => { + return char + char; + }).join(''); + } + + const integer = parseInt(colorString, 16); + const r = (integer >> 16) & 0xFF; + const g = (integer >> 8) & 0xFF; + const b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = (max - min); + let grayscale; + let hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; + + const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); + + let f = 0; + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; + + const c = s * v; + let f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + const pure = [0, 0, 0]; + const hi = (h % 1) * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + + /* eslint-disable max-statements-per-line */ + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + /* eslint-enable max-statements-per-line */ + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const v = c + g * (1.0 - c); + let f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const l = g * (1.0 - c) + 0.5 * c; + let s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hsv = convert.gray.hsl; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + const val = Math.round(gray[0] / 100 * 255) & 0xFF; + const integer = (val << 16) + (val << 8) + val; + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; diff --git a/node_modules/color-convert/index.js b/node_modules/color-convert/index.js new file mode 100644 index 0000000000..b648e5737b --- /dev/null +++ b/node_modules/color-convert/index.js @@ -0,0 +1,81 @@ +const conversions = require('./conversions'); +const route = require('./route'); + +const convert = {}; + +const models = Object.keys(conversions); + +function wrapRaw(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + return fn(args); + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + const result = fn(args); + + // We're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(fromModel => { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + const routes = route(fromModel); + const routeModels = Object.keys(routes); + + routeModels.forEach(toModel => { + const fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +module.exports = convert; diff --git a/node_modules/color-convert/package.json b/node_modules/color-convert/package.json new file mode 100644 index 0000000000..6e48000c7c --- /dev/null +++ b/node_modules/color-convert/package.json @@ -0,0 +1,48 @@ +{ + "name": "color-convert", + "description": "Plain color conversion functions", + "version": "2.0.1", + "author": "Heather Arthur ", + "license": "MIT", + "repository": "Qix-/color-convert", + "scripts": { + "pretest": "xo", + "test": "node test/basic.js" + }, + "engines": { + "node": ">=7.0.0" + }, + "keywords": [ + "color", + "colour", + "convert", + "converter", + "conversion", + "rgb", + "hsl", + "hsv", + "hwb", + "cmyk", + "ansi", + "ansi16" + ], + "files": [ + "index.js", + "conversions.js", + "route.js" + ], + "xo": { + "rules": { + "default-case": 0, + "no-inline-comments": 0, + "operator-linebreak": 0 + } + }, + "devDependencies": { + "chalk": "^2.4.2", + "xo": "^0.24.0" + }, + "dependencies": { + "color-name": "~1.1.4" + } +} diff --git a/node_modules/color-convert/route.js b/node_modules/color-convert/route.js new file mode 100644 index 0000000000..1a08521b5a --- /dev/null +++ b/node_modules/color-convert/route.js @@ -0,0 +1,97 @@ +const conversions = require('./conversions'); + +/* + This function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + const graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + const models = Object.keys(conversions); + + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; // Unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions[current]); + + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions[graph[toModel].parent][toModel]; + + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +module.exports = function (fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; + + if (node.parent === null) { + // No possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + diff --git a/node_modules/color-name/LICENSE b/node_modules/color-name/LICENSE new file mode 100644 index 0000000000..c6b1001254 --- /dev/null +++ b/node_modules/color-name/LICENSE @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/color-name/README.md b/node_modules/color-name/README.md new file mode 100644 index 0000000000..932b979176 --- /dev/null +++ b/node_modules/color-name/README.md @@ -0,0 +1,11 @@ +A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. + +[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) + + +```js +var colors = require('color-name'); +colors.red //[255,0,0] +``` + + diff --git a/node_modules/color-name/index.js b/node_modules/color-name/index.js new file mode 100644 index 0000000000..b7c198a6f3 --- /dev/null +++ b/node_modules/color-name/index.js @@ -0,0 +1,152 @@ +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; diff --git a/node_modules/color-name/package.json b/node_modules/color-name/package.json new file mode 100644 index 0000000000..782dd82878 --- /dev/null +++ b/node_modules/color-name/package.json @@ -0,0 +1,28 @@ +{ + "name": "color-name", + "version": "1.1.4", + "description": "A list of color names and its values", + "main": "index.js", + "files": [ + "index.js" + ], + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:colorjs/color-name.git" + }, + "keywords": [ + "color-name", + "color", + "color-keyword", + "keyword" + ], + "author": "DY ", + "license": "MIT", + "bugs": { + "url": "https://github.com/colorjs/color-name/issues" + }, + "homepage": "https://github.com/colorjs/color-name" +} diff --git a/node_modules/commander/LICENSE b/node_modules/commander/LICENSE new file mode 100644 index 0000000000..10f997ab10 --- /dev/null +++ b/node_modules/commander/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/commander/Readme.md b/node_modules/commander/Readme.md new file mode 100644 index 0000000000..ca6fb27fff --- /dev/null +++ b/node_modules/commander/Readme.md @@ -0,0 +1,1149 @@ +# Commander.js + +[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22) +[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) +[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) +[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) + +The complete solution for [node.js](http://nodejs.org) command-line interfaces. + +Read this in other languages: English | [简体中文](./Readme_zh-CN.md) + +- [Commander.js](#commanderjs) + - [Installation](#installation) + - [Quick Start](#quick-start) + - [Declaring _program_ variable](#declaring-program-variable) + - [Options](#options) + - [Common option types, boolean and value](#common-option-types-boolean-and-value) + - [Default option value](#default-option-value) + - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue) + - [Required option](#required-option) + - [Variadic option](#variadic-option) + - [Version option](#version-option) + - [More configuration](#more-configuration) + - [Custom option processing](#custom-option-processing) + - [Commands](#commands) + - [Command-arguments](#command-arguments) + - [More configuration](#more-configuration-1) + - [Custom argument processing](#custom-argument-processing) + - [Action handler](#action-handler) + - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands) + - [Life cycle hooks](#life-cycle-hooks) + - [Automated help](#automated-help) + - [Custom help](#custom-help) + - [Display help after errors](#display-help-after-errors) + - [Display help from code](#display-help-from-code) + - [.name](#name) + - [.usage](#usage) + - [.description and .summary](#description-and-summary) + - [.helpOption(flags, description)](#helpoptionflags-description) + - [.helpCommand()](#helpcommand) + - [More configuration](#more-configuration-2) + - [Custom event listeners](#custom-event-listeners) + - [Bits and pieces](#bits-and-pieces) + - [.parse() and .parseAsync()](#parse-and-parseasync) + - [Parsing Configuration](#parsing-configuration) + - [Legacy options as properties](#legacy-options-as-properties) + - [TypeScript](#typescript) + - [createCommand()](#createcommand) + - [Node options such as `--harmony`](#node-options-such-as---harmony) + - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands) + - [npm run-script](#npm-run-script) + - [Display error](#display-error) + - [Override exit and output handling](#override-exit-and-output-handling) + - [Additional documentation](#additional-documentation) + - [Support](#support) + - [Commander for enterprise](#commander-for-enterprise) + +For information about terms used in this document see: [terminology](./docs/terminology.md) + +## Installation + +```sh +npm install commander +``` + +## Quick Start + +You write code to describe your command line interface. +Commander looks after parsing the arguments into options and command-arguments, +displays usage errors for problems, and implements a help system. + +Commander is strict and displays an error for unrecognised options. +The two most used option types are a boolean option, and an option which takes its value from the following argument. + +Example file: [split.js](./examples/split.js) + +```js +const { program } = require('commander'); + +program + .option('--first') + .option('-s, --separator ') + .argument(''); + +program.parse(); + +const options = program.opts(); +const limit = options.first ? 1 : undefined; +console.log(program.args[0].split(options.separator, limit)); +``` + +```console +$ node split.js -s / --fits a/b/c +error: unknown option '--fits' +(Did you mean --first?) +$ node split.js -s / --first a/b/c +[ 'a' ] +``` + +Here is a more complete program using a subcommand and with descriptions for the help. In a multi-command program, you have an action handler for each command (or stand-alone executables for the commands). + +Example file: [string-util.js](./examples/string-util.js) + +```js +const { Command } = require('commander'); +const program = new Command(); + +program + .name('string-util') + .description('CLI to some JavaScript string utilities') + .version('0.8.0'); + +program.command('split') + .description('Split a string into substrings and display as an array') + .argument('', 'string to split') + .option('--first', 'display just the first substring') + .option('-s, --separator ', 'separator character', ',') + .action((str, options) => { + const limit = options.first ? 1 : undefined; + console.log(str.split(options.separator, limit)); + }); + +program.parse(); +``` + +```console +$ node string-util.js help split +Usage: string-util split [options] + +Split a string into substrings and display as an array. + +Arguments: + string string to split + +Options: + --first display just the first substring + -s, --separator separator character (default: ",") + -h, --help display help for command + +$ node string-util.js split --separator=/ a/b/c +[ 'a', 'b', 'c' ] +``` + +More samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. + +## Declaring _program_ variable + +Commander exports a global object which is convenient for quick programs. +This is used in the examples in this README for brevity. + +```js +// CommonJS (.cjs) +const { program } = require('commander'); +``` + +For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. + +```js +// CommonJS (.cjs) +const { Command } = require('commander'); +const program = new Command(); +``` + +```js +// ECMAScript (.mjs) +import { Command } from 'commander'; +const program = new Command(); +``` + +```ts +// TypeScript (.ts) +import { Command } from 'commander'; +const program = new Command(); +``` + +## Options + +Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). To allow a wider range of short-ish flags than just +single characters, you may also have two long options. Examples: + +```js +program + .option('-p, --port ', 'server port number') + .option('--trace', 'add extra debugging output') + .option('--ws, --workspace ', 'use a custom workspace') +``` + +The parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler. + +Multi-word options such as "--template-engine" are camel-cased, becoming `program.opts().templateEngine` etc. + +An option and its option-argument can be separated by a space, or combined into the same argument. The option-argument can follow the short option directly or follow an `=` for a long option. + +```sh +serve -p 80 +serve -p80 +serve --port 80 +serve --port=80 +``` + +You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted. + +By default, options on the command line are not positional, and can be specified before or after other arguments. + +There are additional related routines for when `.opts()` is not enough: + +- `.optsWithGlobals()` returns merged local and global option values +- `.getOptionValue()` and `.setOptionValue()` work with a single option value +- `.getOptionValueSource()` and `.setOptionValueWithSource()` include where the option value came from + +### Common option types, boolean and value + +The two most used option types are a boolean option, and an option which takes its value +from the following argument (declared with angle brackets like `--expect `). Both are `undefined` unless specified on command line. + +Example file: [options-common.js](./examples/options-common.js) + +```js +program + .option('-d, --debug', 'output extra debugging') + .option('-s, --small', 'small pizza size') + .option('-p, --pizza-type ', 'flavour of pizza'); + +program.parse(process.argv); + +const options = program.opts(); +if (options.debug) console.log(options); +console.log('pizza details:'); +if (options.small) console.log('- small pizza size'); +if (options.pizzaType) console.log(`- ${options.pizzaType}`); +``` + +```console +$ pizza-options -p +error: option '-p, --pizza-type ' argument missing +$ pizza-options -d -s -p vegetarian +{ debug: true, small: true, pizzaType: 'vegetarian' } +pizza details: +- small pizza size +- vegetarian +$ pizza-options --pizza-type=cheese +pizza details: +- cheese +``` + +Multiple boolean short options may be combined following the dash, and may be followed by a single short option taking a value. +For example `-d -s -p cheese` may be written as `-ds -p cheese` or even `-dsp cheese`. + +Options with an expected option-argument are greedy and will consume the following argument whatever the value. +So `--id -xyz` reads `-xyz` as the option-argument. + +`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`. + +### Default option value + +You can specify a default value for an option. + +Example file: [options-defaults.js](./examples/options-defaults.js) + +```js +program + .option('-c, --cheese ', 'add the specified type of cheese', 'blue'); + +program.parse(); + +console.log(`cheese: ${program.opts().cheese}`); +``` + +```console +$ pizza-options +cheese: blue +$ pizza-options --cheese stilton +cheese: stilton +``` + +### Other option types, negatable boolean and boolean|value + +You can define a boolean option long name with a leading `no-` to set the option value to false when used. +Defined alone this also makes the option true by default. + +If you define `--foo` first, adding `--no-foo` does not change the default value from what it would +otherwise be. + +Example file: [options-negatable.js](./examples/options-negatable.js) + +```js +program + .option('--no-sauce', 'Remove sauce') + .option('--cheese ', 'cheese flavour', 'mozzarella') + .option('--no-cheese', 'plain with no cheese') + .parse(); + +const options = program.opts(); +const sauceStr = options.sauce ? 'sauce' : 'no sauce'; +const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`; +console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); +``` + +```console +$ pizza-options +You ordered a pizza with sauce and mozzarella cheese +$ pizza-options --sauce +error: unknown option '--sauce' +$ pizza-options --cheese=blue +You ordered a pizza with sauce and blue cheese +$ pizza-options --no-sauce --no-cheese +You ordered a pizza with no sauce and no cheese +``` + +You can specify an option which may be used as a boolean option but may optionally take an option-argument +(declared with square brackets like `--optional [value]`). + +Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js) + +```js +program + .option('-c, --cheese [type]', 'Add cheese with optional type'); + +program.parse(process.argv); + +const options = program.opts(); +if (options.cheese === undefined) console.log('no cheese'); +else if (options.cheese === true) console.log('add cheese'); +else console.log(`add cheese type ${options.cheese}`); +``` + +```console +$ pizza-options +no cheese +$ pizza-options --cheese +add cheese +$ pizza-options --cheese mozzarella +add cheese type mozzarella +``` + +Options with an optional option-argument are not greedy and will ignore arguments starting with a dash. +So `id` behaves as a boolean option for `--id -5`, but you can use a combined form if needed like `--id=-5`. + +For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). + +### Required option + +You may specify a required (mandatory) option using `.requiredOption()`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option()` in format, taking flags and description, and optional default value or custom processing. + +Example file: [options-required.js](./examples/options-required.js) + +```js +program + .requiredOption('-c, --cheese ', 'pizza must have cheese'); + +program.parse(); +``` + +```console +$ pizza +error: required option '-c, --cheese ' not specified +``` + +### Variadic option + +You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you +can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments +are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value +is specified in the same argument as the option then no further values are read. + +Example file: [options-variadic.js](./examples/options-variadic.js) + +```js +program + .option('-n, --number ', 'specify numbers') + .option('-l, --letter [letters...]', 'specify letters'); + +program.parse(); + +console.log('Options: ', program.opts()); +console.log('Remaining arguments: ', program.args); +``` + +```console +$ collect -n 1 2 3 --letter a b c +Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] } +Remaining arguments: [] +$ collect --letter=A -n80 operand +Options: { number: [ '80' ], letter: [ 'A' ] } +Remaining arguments: [ 'operand' ] +$ collect --letter -n 1 -n 2 3 -- operand +Options: { number: [ '1', '2', '3' ], letter: true } +Remaining arguments: [ 'operand' ] +``` + +For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). + +### Version option + +The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. + +```js +program.version('0.0.1'); +``` + +```console +$ ./examples/pizza -V +0.0.1 +``` + +You may change the flags and description by passing additional parameters to the `version` method, using +the same syntax for flags as the `option` method. + +```js +program.version('0.0.1', '-v, --vers', 'output the current version'); +``` + +### More configuration + +You can add most options using the `.option()` method, but there are some additional features available +by constructing an `Option` explicitly for less common cases. + +Example files: [options-extra.js](./examples/options-extra.js), [options-env.js](./examples/options-env.js), [options-conflicts.js](./examples/options-conflicts.js), [options-implies.js](./examples/options-implies.js) + +```js +program + .addOption(new Option('-s, --secret').hideHelp()) + .addOption(new Option('-t, --timeout ', 'timeout in seconds').default(60, 'one minute')) + .addOption(new Option('-d, --drink ', 'drink size').choices(['small', 'medium', 'large'])) + .addOption(new Option('-p, --port ', 'port number').env('PORT')) + .addOption(new Option('--donate [amount]', 'optional donation in dollars').preset('20').argParser(parseFloat)) + .addOption(new Option('--disable-server', 'disables the server').conflicts('port')) + .addOption(new Option('--free-drink', 'small drink included free ').implies({ drink: 'small' })); +``` + +```console +$ extra --help +Usage: help [options] + +Options: + -t, --timeout timeout in seconds (default: one minute) + -d, --drink drink cup size (choices: "small", "medium", "large") + -p, --port port number (env: PORT) + --donate [amount] optional donation in dollars (preset: "20") + --disable-server disables the server + --free-drink small drink included free + -h, --help display help for command + +$ extra --drink huge +error: option '-d, --drink ' argument 'huge' is invalid. Allowed choices are small, medium, large. + +$ PORT=80 extra --donate --free-drink +Options: { timeout: 60, donate: 20, port: '80', freeDrink: true, drink: 'small' } + +$ extra --disable-server --port 8000 +error: option '--disable-server' cannot be used with option '-p, --port ' +``` + +Specify a required (mandatory) option using the `Option` method `.makeOptionMandatory()`. This matches the `Command` method [.requiredOption()](#required-option). + +### Custom option processing + +You may specify a function to do custom processing of option-arguments. The callback function receives two parameters, +the user specified option-argument and the previous value for the option. It returns the new value for the option. + +This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing. + +You can optionally specify the default/starting value for the option after the function parameter. + +Example file: [options-custom-processing.js](./examples/options-custom-processing.js) + +```js +function myParseInt(value, dummyPrevious) { + // parseInt takes a string and a radix + const parsedValue = parseInt(value, 10); + if (isNaN(parsedValue)) { + throw new commander.InvalidArgumentError('Not a number.'); + } + return parsedValue; +} + +function increaseVerbosity(dummyValue, previous) { + return previous + 1; +} + +function collect(value, previous) { + return previous.concat([value]); +} + +function commaSeparatedList(value, dummyPrevious) { + return value.split(','); +} + +program + .option('-f, --float ', 'float argument', parseFloat) + .option('-i, --integer ', 'integer argument', myParseInt) + .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) + .option('-c, --collect ', 'repeatable value', collect, []) + .option('-l, --list ', 'comma separated list', commaSeparatedList) +; + +program.parse(); + +const options = program.opts(); +if (options.float !== undefined) console.log(`float: ${options.float}`); +if (options.integer !== undefined) console.log(`integer: ${options.integer}`); +if (options.verbose > 0) console.log(`verbosity: ${options.verbose}`); +if (options.collect.length > 0) console.log(options.collect); +if (options.list !== undefined) console.log(options.list); +``` + +```console +$ custom -f 1e2 +float: 100 +$ custom --integer 2 +integer: 2 +$ custom -v -v -v +verbose: 3 +$ custom -c a -c b -c c +[ 'a', 'b', 'c' ] +$ custom --list x,y,z +[ 'x', 'y', 'z' ] +``` + +## Commands + +You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)). + +In the first parameter to `.command()` you specify the command name. You may append the command-arguments after the command name, or specify them separately using `.argument()`. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`. + +You can use `.addCommand()` to add an already configured subcommand to the program. + +For example: + +```js +// Command implemented using action handler (description is supplied separately to `.command`) +// Returns new command for configuring. +program + .command('clone [destination]') + .description('clone a repository into a newly created directory') + .action((source, destination) => { + console.log('clone command called'); + }); + +// Command implemented using stand-alone executable file, indicated by adding description as second parameter to `.command`. +// Returns `this` for adding more commands. +program + .command('start ', 'start named service') + .command('stop [service]', 'stop named service, or all if no name supplied'); + +// Command prepared separately. +// Returns `this` for adding more commands. +program + .addCommand(build.makeBuildCommand()); +``` + +Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will +remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other +subcommand is specified ([example](./examples/defaultCommand.js)). + +You can add alternative names for a command with `.alias()`. ([example](./examples/alias.js)) + +`.command()` automatically copies the inherited settings from the parent command to the newly created subcommand. This is only done during creation, any later setting changes to the parent are not inherited. + +For safety, `.addCommand()` does not automatically copy the inherited settings from the parent command. There is a helper routine `.copyInheritedSettings()` for copying the settings when they are wanted. + +### Command-arguments + +For subcommands, you can specify the argument syntax in the call to `.command()` (as shown above). This +is the only method usable for subcommands implemented using a stand-alone executable, but for other subcommands +you can instead use the following method. + +To configure a command, you can use `.argument()` to specify each expected command-argument. +You supply the argument name and an optional description. The argument may be `` or `[optional]`. +You can specify a default value for an optional command-argument. + +Example file: [argument.js](./examples/argument.js) + +```js +program + .version('0.1.0') + .argument('', 'user to login') + .argument('[password]', 'password for user, if required', 'no password given') + .action((username, password) => { + console.log('username:', username); + console.log('password:', password); + }); +``` + + The last argument of a command can be variadic, and only the last argument. To make an argument variadic you + append `...` to the argument name. A variadic argument is passed to the action handler as an array. For example: + +```js +program + .version('0.1.0') + .command('rmdir') + .argument('') + .action(function (dirs) { + dirs.forEach((dir) => { + console.log('rmdir %s', dir); + }); + }); +``` + +There is a convenience method to add multiple arguments at once, but without descriptions: + +```js +program + .arguments(' '); +``` + +#### More configuration + +There are some additional features available by constructing an `Argument` explicitly for less common cases. + +Example file: [arguments-extra.js](./examples/arguments-extra.js) + +```js +program + .addArgument(new commander.Argument('', 'drink cup size').choices(['small', 'medium', 'large'])) + .addArgument(new commander.Argument('[timeout]', 'timeout in seconds').default(60, 'one minute')) +``` + +#### Custom argument processing + +You may specify a function to do custom processing of command-arguments (like for option-arguments). +The callback function receives two parameters, the user specified command-argument and the previous value for the argument. +It returns the new value for the argument. + +The processed argument values are passed to the action handler, and saved as `.processedArgs`. + +You can optionally specify the default/starting value for the argument after the function parameter. + +Example file: [arguments-custom-processing.js](./examples/arguments-custom-processing.js) + +```js +program + .command('add') + .argument('', 'integer argument', myParseInt) + .argument('[second]', 'integer argument', myParseInt, 1000) + .action((first, second) => { + console.log(`${first} + ${second} = ${first + second}`); + }) +; +``` + +### Action handler + +The action handler gets passed a parameter for each command-argument you declared, and two additional parameters +which are the parsed options and the command object itself. + +Example file: [thank.js](./examples/thank.js) + +```js +program + .argument('') + .option('-t, --title ', 'title to use before name') + .option('-d, --debug', 'display some debugging') + .action((name, options, command) => { + if (options.debug) { + console.error('Called %s with options %o', command.name(), options); + } + const title = options.title ? `${options.title} ` : ''; + console.log(`Thank-you ${title}${name}`); + }); +``` + +If you prefer, you can work with the command directly and skip declaring the parameters for the action handler. The `this` keyword is set to the running command and can be used from a function expression (but not from an arrow function). + +Example file: [action-this.js](./examples/action-this.js) + +```js +program + .command('serve') + .argument(' +``` + +## Use + +```js +import {decodeNamedCharacterReference} from 'decode-named-character-reference' + +decodeNamedCharacterReference('amp') //=> '&' +``` + +## API + +This package exports the following identifier: `decodeNamedCharacterReference`. +There is no default export. + +### `decodeNamedCharacterReference(value)` + +Again, use [`parse-entities`][parse-entities]. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`parse-entities`][parse-entities] + — parse (decode) HTML character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/decode-named-character-reference/workflows/main/badge.svg + +[build]: https://github.com/wooorm/decode-named-character-reference/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/decode-named-character-reference.svg + +[coverage]: https://codecov.io/github/wooorm/decode-named-character-reference + +[downloads-badge]: https://img.shields.io/npm/dm/decode-named-character-reference.svg + +[downloads]: https://www.npmjs.com/package/decode-named-character-reference + +[size-badge]: https://img.shields.io/bundlephobia/minzip/decode-named-character-reference.svg + +[size]: https://bundlephobia.com/result?p=decode-named-character-reference + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[parse-entities]: https://github.com/wooorm/parse-entities diff --git a/node_modules/deep-extend/CHANGELOG.md b/node_modules/deep-extend/CHANGELOG.md new file mode 100644 index 0000000000..dd13ec1311 --- /dev/null +++ b/node_modules/deep-extend/CHANGELOG.md @@ -0,0 +1,46 @@ +Changelog +========= + +v0.6.0 +------ + +- Updated "devDependencies" versions to fix vulnerability alerts +- Dropped support of io.js and node.js v0.12.x and lower since new versions of + "devDependencies" couldn't work with those old node.js versions + (minimal supported version of node.js now is v4.0.0) + +v0.5.1 +------ + +- Fix prototype pollution vulnerability (thanks to @mwakerman for the PR) +- Avoid using deprecated Buffer API (thanks to @ChALkeR for the PR) + +v0.5.0 +------ + +- Auto-testing provided by Travis CI; +- Support older Node.JS versions (`v0.11.x` and `v0.10.x`); +- Removed tests files from npm package. + +v0.4.2 +------ + +- Fix for `null` as an argument. + +v0.4.1 +------ + +- Removed test code from npm package + ([see pull request #21](https://github.com/unclechu/node-deep-extend/pull/21)); +- Increased minimal version of Node from `0.4.0` to `0.12.0` + (because can't run tests on lesser version anyway). + +v0.4.0 +------ + +- **WARNING!** Broken backward compatibility with `v0.3.x`; +- Fixed bug with extending arrays instead of cloning; +- Deep cloning for arrays; +- Check for own property; +- Fixed some documentation issues; +- Strict JS mode. diff --git a/node_modules/deep-extend/LICENSE b/node_modules/deep-extend/LICENSE new file mode 100644 index 0000000000..5c58916f2f --- /dev/null +++ b/node_modules/deep-extend/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018, Viacheslav Lotsmanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/deep-extend/README.md b/node_modules/deep-extend/README.md new file mode 100644 index 0000000000..67c7fc0859 --- /dev/null +++ b/node_modules/deep-extend/README.md @@ -0,0 +1,91 @@ +Deep Extend +=========== + +Recursive object extending. + +[![Build Status](https://api.travis-ci.org/unclechu/node-deep-extend.svg?branch=master)](https://travis-ci.org/unclechu/node-deep-extend) + +[![NPM](https://nodei.co/npm/deep-extend.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/deep-extend/) + +Install +------- + +```bash +$ npm install deep-extend +``` + +Usage +----- + +```javascript +var deepExtend = require('deep-extend'); +var obj1 = { + a: 1, + b: 2, + d: { + a: 1, + b: [], + c: { test1: 123, test2: 321 } + }, + f: 5, + g: 123, + i: 321, + j: [1, 2] +}; +var obj2 = { + b: 3, + c: 5, + d: { + b: { first: 'one', second: 'two' }, + c: { test2: 222 } + }, + e: { one: 1, two: 2 }, + f: [], + g: (void 0), + h: /abc/g, + i: null, + j: [3, 4] +}; + +deepExtend(obj1, obj2); + +console.log(obj1); +/* +{ a: 1, + b: 3, + d: + { a: 1, + b: { first: 'one', second: 'two' }, + c: { test1: 123, test2: 222 } }, + f: [], + g: undefined, + c: 5, + e: { one: 1, two: 2 }, + h: /abc/g, + i: null, + j: [3, 4] } +*/ +``` + +Unit testing +------------ + +```bash +$ npm test +``` + +Changelog +--------- + +[CHANGELOG.md](./CHANGELOG.md) + +Any issues? +----------- + +Please, report about issues +[here](https://github.com/unclechu/node-deep-extend/issues). + +License +------- + +[MIT](./LICENSE) diff --git a/node_modules/deep-extend/index.js b/node_modules/deep-extend/index.js new file mode 100644 index 0000000000..762d81e954 --- /dev/null +++ b/node_modules/deep-extend/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/deep-extend'); diff --git a/node_modules/deep-extend/package.json b/node_modules/deep-extend/package.json new file mode 100644 index 0000000000..5f2195ff93 --- /dev/null +++ b/node_modules/deep-extend/package.json @@ -0,0 +1,62 @@ +{ + "name": "deep-extend", + "description": "Recursive object extending", + "license": "MIT", + "version": "0.6.0", + "homepage": "https://github.com/unclechu/node-deep-extend", + "keywords": [ + "deep-extend", + "extend", + "deep", + "recursive", + "xtend", + "clone", + "merge", + "json" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.githubusercontent.com/unclechu/node-deep-extend/master/LICENSE" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/unclechu/node-deep-extend.git" + }, + "author": "Viacheslav Lotsmanov ", + "bugs": "https://github.com/unclechu/node-deep-extend/issues", + "contributors": [ + { + "name": "Romain Prieto", + "url": "https://github.com/rprieto" + }, + { + "name": "Max Maximov", + "url": "https://github.com/maxmaximov" + }, + { + "name": "Marshall Bowers", + "url": "https://github.com/maxdeviant" + }, + { + "name": "Misha Wakerman", + "url": "https://github.com/mwakerman" + } + ], + "main": "lib/deep-extend.js", + "engines": { + "node": ">=4.0.0" + }, + "scripts": { + "test": "./node_modules/.bin/mocha" + }, + "devDependencies": { + "mocha": "5.2.0", + "should": "13.2.1" + }, + "files": [ + "index.js", + "lib/" + ] +} diff --git a/node_modules/dequal/index.d.ts b/node_modules/dequal/index.d.ts new file mode 100644 index 0000000000..a9aea5d506 --- /dev/null +++ b/node_modules/dequal/index.d.ts @@ -0,0 +1 @@ +export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/license b/node_modules/dequal/license new file mode 100644 index 0000000000..a3f96f8284 --- /dev/null +++ b/node_modules/dequal/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/dequal/lite/index.d.ts b/node_modules/dequal/lite/index.d.ts new file mode 100644 index 0000000000..a9aea5d506 --- /dev/null +++ b/node_modules/dequal/lite/index.d.ts @@ -0,0 +1 @@ +export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.js b/node_modules/dequal/lite/index.js new file mode 100644 index 0000000000..ac3eb6b870 --- /dev/null +++ b/node_modules/dequal/lite/index.js @@ -0,0 +1,31 @@ +var has = Object.prototype.hasOwnProperty; + +function dequal(foo, bar) { + var ctor, len; + if (foo === bar) return true; + + if (foo && bar && (ctor=foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + + if (ctor === Array) { + if ((len=foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])); + } + return len === -1; + } + + if (!ctor || typeof foo === 'object') { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + + return foo !== foo && bar !== bar; +} + +exports.dequal = dequal; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.min.js b/node_modules/dequal/lite/index.min.js new file mode 100644 index 0000000000..2eaa55fd06 --- /dev/null +++ b/node_modules/dequal/lite/index.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dequal={})}(this,(function(e){var t=Object.prototype.hasOwnProperty;e.dequal=function e(r,n){var o,i;if(r===n)return!0;if(r&&n&&(o=r.constructor)===n.constructor){if(o===Date)return r.getTime()===n.getTime();if(o===RegExp)return r.toString()===n.toString();if(o===Array){if((i=r.length)===n.length)for(;i--&&e(r[i],n[i]););return-1===i}if(!o||"object"==typeof r){for(o in i=0,r){if(t.call(r,o)&&++i&&!t.call(n,o))return!1;if(!(o in n)||!e(r[o],n[o]))return!1}return Object.keys(n).length===i}}return r!=r&&n!=n}})); \ No newline at end of file diff --git a/node_modules/dequal/lite/index.mjs b/node_modules/dequal/lite/index.mjs new file mode 100644 index 0000000000..5820d674f8 --- /dev/null +++ b/node_modules/dequal/lite/index.mjs @@ -0,0 +1,29 @@ +var has = Object.prototype.hasOwnProperty; + +export function dequal(foo, bar) { + var ctor, len; + if (foo === bar) return true; + + if (foo && bar && (ctor=foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + + if (ctor === Array) { + if ((len=foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])); + } + return len === -1; + } + + if (!ctor || typeof foo === 'object') { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + + return foo !== foo && bar !== bar; +} diff --git a/node_modules/dequal/package.json b/node_modules/dequal/package.json new file mode 100644 index 0000000000..df1cb29cb2 --- /dev/null +++ b/node_modules/dequal/package.json @@ -0,0 +1,57 @@ +{ + "name": "dequal", + "version": "2.0.3", + "repository": "lukeed/dequal", + "description": "A tiny (304B to 489B) utility for check for deep equality", + "unpkg": "dist/index.min.js", + "module": "dist/index.mjs", + "main": "dist/index.js", + "types": "index.d.ts", + "license": "MIT", + "author": { + "name": "Luke Edwards", + "email": "luke.edwards05@gmail.com", + "url": "https://lukeed.com" + }, + "engines": { + "node": ">=6" + }, + "scripts": { + "build": "bundt", + "pretest": "npm run build", + "postbuild": "echo \"lite\" | xargs -n1 cp -v index.d.ts", + "test": "uvu -r esm test" + }, + "files": [ + "*.d.ts", + "dist", + "lite" + ], + "exports": { + ".": { + "types": "./index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./lite": { + "types": "./index.d.ts", + "import": "./lite/index.mjs", + "require": "./lite/index.js" + }, + "./package.json": "./package.json" + }, + "modes": { + "lite": "src/lite.js", + "default": "src/index.js" + }, + "keywords": [ + "deep", + "deep-equal", + "equality" + ], + "devDependencies": { + "bundt": "1.0.2", + "esm": "3.2.25", + "uvu": "0.3.2" + } +} diff --git a/node_modules/dequal/readme.md b/node_modules/dequal/readme.md new file mode 100644 index 0000000000..e3341ef475 --- /dev/null +++ b/node_modules/dequal/readme.md @@ -0,0 +1,112 @@ +# dequal [![CI](https://github.com/lukeed/dequal/workflows/CI/badge.svg)](https://github.com/lukeed/dequal/actions) + +> A tiny (304B to 489B) utility to check for deep equality + +This module supports comparison of all types, including `Function`, `RegExp`, `Date`, `Set`, `Map`, `TypedArray`s, `DataView`, `null`, `undefined`, and `NaN` values. Complex values (eg, Objects, Arrays, Sets, Maps, etc) are traversed recursively. + +> **Important:** +> * key order **within Objects** does not matter +> * value order **within Arrays** _does_ matter +> * values **within Sets and Maps** use value equality +> * keys **within Maps** use value equality + + +## Install + +``` +$ npm install --save dequal +``` + +## Modes + +There are two "versions" of `dequal` available: + +#### `dequal` +> **Size (gzip):** 489 bytes
+> **Availability:** [CommonJS](https://unpkg.com/dequal/dist/index.js), [ES Module](https://unpkg.com/dequal/dist/index.mjs), [UMD](https://unpkg.com/dequal/dist/index.min.js) + +#### `dequal/lite` +> **Size (gzip):** 304 bytes
+> **Availability:** [CommonJS](https://unpkg.com/dequal/lite/index.js), [ES Module](https://unpkg.com/dequal/lite/index.mjs) + +| | IE9+ | Number | String | Date | RegExp | Object | Array | Class | Set | Map | ArrayBuffer | [TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects) | [DataView](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) | +|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +| `dequal` | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| `dequal/lite` | :+1: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | + +> **Note:** Table scrolls horizontally! + +## Usage + +```js +import { dequal } from 'dequal'; + +dequal(1, 1); //=> true +dequal({}, {}); //=> true +dequal('foo', 'foo'); //=> true +dequal([1, 2, 3], [1, 2, 3]); //=> true +dequal(dequal, dequal); //=> true +dequal(/foo/, /foo/); //=> true +dequal(null, null); //=> true +dequal(NaN, NaN); //=> true +dequal([], []); //=> true +dequal( + [{ a:1 }, [{ b:{ c:[1] } }]], + [{ a:1 }, [{ b:{ c:[1] } }]] +); //=> true + +dequal(1, '1'); //=> false +dequal(null, undefined); //=> false +dequal({ a:1, b:[2,3] }, { a:1, b:[2,5] }); //=> false +dequal(/foo/i, /bar/g); //=> false +``` + +## API + +### dequal(foo, bar) +Returns: `Boolean` + +Both `foo` and `bar` can be of any type.
+A `Boolean` is returned indicating if the two were deeply equal. + + +## Benchmarks + +> Running Node v10.13.0 + +The benchmarks can be found in the [`/bench`](/bench) directory. They are separated into two categories: + +* `basic` – compares an object comprised of `String`, `Number`, `Date`, `Array`, and `Object` values. +* `complex` – like `basic`, but adds `RegExp`, `Map`, `Set`, and `Uint8Array` values. + +> **Note:** Only candidates that pass validation step(s) are listed.
For example, `fast-deep-equal/es6` handles `Set` and `Map` values, but uses _referential equality_ while those listed use _value equality_. + +``` +Load times: + assert 0.109ms + util 0.006ms + fast-deep-equal 0.479ms + lodash/isequal 22.826ms + nano-equal 0.417ms + dequal 0.396ms + dequal/lite 0.264ms + +Benchmark :: basic + assert.deepStrictEqual x 325,262 ops/sec ±0.57% (94 runs sampled) + util.isDeepStrictEqual x 318,812 ops/sec ±0.87% (94 runs sampled) + fast-deep-equal x 1,332,393 ops/sec ±0.36% (93 runs sampled) + lodash.isEqual x 269,129 ops/sec ±0.59% (95 runs sampled) + nano-equal x 1,122,053 ops/sec ±0.36% (96 runs sampled) + dequal/lite x 1,700,972 ops/sec ±0.31% (94 runs sampled) + dequal x 1,698,972 ops/sec ±0.63% (97 runs sampled) + +Benchmark :: complex + assert.deepStrictEqual x 124,518 ops/sec ±0.64% (96 runs sampled) + util.isDeepStrictEqual x 125,113 ops/sec ±0.24% (96 runs sampled) + lodash.isEqual x 58,677 ops/sec ±0.49% (96 runs sampled) + dequal x 345,386 ops/sec ±0.27% (96 runs sampled) +``` + +## License + +MIT © [Luke Edwards](https://lukeed.com) diff --git a/node_modules/devlop/license b/node_modules/devlop/license new file mode 100644 index 0000000000..de5a7bba71 --- /dev/null +++ b/node_modules/devlop/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2023 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/devlop/package.json b/node_modules/devlop/package.json new file mode 100644 index 0000000000..8319d8d58a --- /dev/null +++ b/node_modules/devlop/package.json @@ -0,0 +1,80 @@ +{ + "name": "devlop", + "version": "1.1.0", + "description": "Do things in development and nothing otherwise", + "license": "MIT", + "keywords": [ + "assert", + "deprecate", + "develop", + "development" + ], + "repository": "wooorm/devlop", + "bugs": "https://github.com/wooorm/devlop/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "exports": { + "types": "./lib/development.d.ts", + "development": "./lib/development.js", + "default": "./lib/default.js" + }, + "files": [ + "lib/" + ], + "dependencies": { + "dequal": "^2.0.0" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-terser": "^0.4.3", + "@types/node": "^20.0.0", + "c8": "^8.0.0", + "esbuild": "^0.18.0", + "prettier": "^2.0.0", + "remark-cli": "^11.0.0", + "remark-preset-wooorm": "^9.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.54.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api-development": "node --conditions development test-development.js", + "test-api-default": "node test-default.js", + "test-api": "npm run test-api-development && npm run test-api-default", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "prettier": true + } +} diff --git a/node_modules/devlop/readme.md b/node_modules/devlop/readme.md new file mode 100644 index 0000000000..d90be19130 --- /dev/null +++ b/node_modules/devlop/readme.md @@ -0,0 +1,360 @@ +# devlop + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Some tools to make developing easier while not including code in production. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`deprecate(fn, message[, code])`](#deprecatefn-message-code) + * [`equal(actual, expected[, message])`](#equalactual-expected-message) + * [`ok(value[, message])`](#okvalue-message) + * [`unreachable(message?)`](#unreachablemessage) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package lets you do things in development that are free in production. +It contains useful `assert` functions and a `deprecate` function that are +useful when developing JavaScript packages while being small in production. + +If you know Rust, you might know how nice having a +[`debug_assert!`][rust-debug-assert] is. +This is that, and a bit more. +For more on why they’re nice, see +[“Rust’s Two Kinds of ‘Assert’ Make for Better Code”][rust-two-kinds] + +## When should I use this? + +Many JavaScript programs do not use assertions at all (perhaps because they’re +typed and so assume type safety) or include lots of code to throw errors when +users do weird things (weighing down production code). +This package hopes to improve the sitation by making assertions free and +deprecations cheap. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install devlop +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {deprecate, equal, ok, unreachable} from 'https://esm.sh/devlop@1' +// For development code: +// import {deprecate, equal, ok} from 'https://esm.sh/devlop@1?conditions=development' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say we have a small ponyfill for the ES5 `String#includes` function. +It’s deprecated, because folks can use `String#includes` nowadays. +It’s nicely typed so users should be able to figure out what to pass but we +include assertions to show nicer errors when they get it wrong. + +`example/string-includes.js`: + +```js +import {deprecate, ok} from 'devlop' + +export const stringIncludes = deprecate( + includes, + 'Since ES5, please use `String#includes` itself.' +) + +/** + * @deprecated + * Since ES5, please use `String#includes` itself. + * @param {string} value + * Value to search in. + * @param {string} search + * Value to search for. + * @param {number | undefined} [position=0] + * Position to search from (default: `0`). + * @returns {boolean} + * Whether the searched for value exists in the searched value after position. + */ +function includes(value, search, position) { + ok(typeof value === 'string', 'expected string for `value`') + ok(typeof search === 'string', 'expected string for `search`') + ok(position === undefined || typeof position === 'number', 'expected number') + ok( + position === undefined || + (typeof position === 'number' && + !(/* #__PURE__ */ Number.isNaN(position))), + 'expected number' + ) + // eslint-disable-next-line unicorn/prefer-includes + return value.indexOf(search, position || 0) !== -1 +} +``` + +`example/index.js`: + +```js +import {stringIncludes} from './example-includes.js' + +console.log(stringIncludes('blue whale', 'dolphin')) //=> false +console.log(stringIncludes('blue whale', 'whale')) //=> true +``` + +Say we’d bundle that in development with [`esbuild`][esbuild] and check the +gzip size ([`gzip-size-cli`][gzip-size-cli]), we’d get 1.02 kB of code: + +```sh +$ esbuild example/index.js --bundle --conditions=development --format=esm --minify --target=es2022 | gzip-size +1.02 kB +``` + +But because `devlop` is light in production we’d get: + +```sh +$ esbuild example/index.js --bundle --format=esm --minify --target=es2022 | gzip-size +169 B +``` + +The bundle looks as follows: + +```js +function u(n){return n}var r=u(c,"Since ES5, please use `String#includes` itself.");function c(n,t,e){return n.indexOf(t,e||0)!==-1}console.log(r("blue whale","dolphin"));console.log(r("blue whale","whale")); +``` + +It depends a bit on which bundler and minifier you use how small the code is: +esbuild keeps the unused message parameter to the `deprecate` function around +and does not know `Number.isNaN` can be dropped without a `/* #__PURE__ */` +annotation. + +[`rollup`][rollup] with [`@rollup/plugin-node-resolve`][node-resolve] +and [`@rollup/plugin-terser`][terser] performs even better: + +```sh +$ rollup example/index.js -p node-resolve -p terser | gzip-size +118 B +``` + +The bundle looks as follows: + +```js +const l=function(l,e,o){return-1!==l.indexOf(e,o||0)};console.log(l("blue whale","dolphin")),console.log(l("blue whale","whale")); +``` + +Rollup doesn’t need the `/* #__PURE__ */` comment either! + +## API + +This package exports the identifiers [`deprecate`][api-deprecate], +[`equal`][api-equal], [`ok`][api-ok], and [`unreachable`][api-unreachable]. +There is no default export. + +The export map supports the [`development` condition][node-condition]. +Run `node --conditions development module.js` to get dev code. +Without this condition, no-ops are loaded. + +### `deprecate(fn, message[, code])` + +Wrap a function or class to show a deprecation message when first called. + +> 👉 **Important**: only shows a message when the `development` condition is +> used, does nothing in production. + +When the resulting wrapped `fn` is called, emits a warning once to +`console.error` (`stderr`). +If a code is given, one warning message will be emitted in total per code. + +###### Parameters + +* `fn` (`Function`) + — function or class +* `message` (`string`) + — message explaining deprecation +* `code` (`string`, optional) + — deprecation identifier (optional); deprecation messages will be generated + only once per code + +###### Returns + +Wrapped `fn`. + +### `equal(actual, expected[, message])` + +Assert deep strict equivalence. + +> 👉 **Important**: only asserts when the `development` condition is used, does +> nothing in production. + +###### Parameters + +* `actual` (`unknown`) + — value +* `expected` (`unknown`) + — baseline +* `message` (`Error` or `string`, default: `'Expected values to be deeply + equal'`) + — message for assertion error + +###### Returns + +Nothing (`undefined`). + +###### Throws + +Throws (`AssertionError`) when `actual` is not deep strict equal to `expected`. + +### `ok(value[, message])` + +Assert if `value` is truthy. + +> 👉 **Important**: only asserts when the `development` condition is used, does +> nothing in production. + +###### Parameters + +* `actual` (`unknown`) + — value to assert +* `message` (`Error` or `string`, default: `'Expected value to be truthy'`) + — message for assertion error + +###### Returns + +Nothing (`undefined`). + +###### Throws + +Throws (`AssertionError`) when `value` is falsey. + +### `unreachable(message?)` + +Assert that a code path never happens. + +> 👉 **Important**: only asserts when the `development` condition is used, +> does nothing in production. + +###### Parameters + +* `message` (`Error` or `string`, default: `'Unreachable'`) + — message for assertion error + +###### Returns + +Never (`never`). + +###### Throws + +Throws (`AssertionError`), always. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +This project is compatible with maintained versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, `devlop@^1`, +compatible with Node.js 16. + +## Security + +This package is safe. + +## Related + +* [`babel-plugin-unassert`](https://github.com/unassert-js/babel-plugin-unassert) + — encourage reliable programming with assertions while compiling them away + in production (can remove arbitrary `assert` modules, works regardless of + conditions, so has to be configured by the end user) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/devlop/workflows/main/badge.svg + +[build]: https://github.com/wooorm/devlop/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/devlop.svg + +[coverage]: https://codecov.io/github/wooorm/devlop + +[downloads-badge]: https://img.shields.io/npm/dm/devlop.svg + +[downloads]: https://www.npmjs.com/package/devlop + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=devlop + +[size]: https://bundlejs.com/?q=devlop + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[node-condition]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[rust-debug-assert]: https://doc.rust-lang.org/std/macro.debug_assert.html + +[rust-two-kinds]: https://tratt.net/laurie/blog/2023/rusts_two_kinds_of_assert_make_for_better_code.html + +[esbuild]: https://esbuild.github.io + +[gzip-size-cli]: https://github.com/sindresorhus/gzip-size-cli/tree/main + +[rollup]: https://rollupjs.org + +[node-resolve]: https://github.com/rollup/plugins/tree/master/packages/node-resolve + +[terser]: https://github.com/rollup/plugins/tree/master/packages/terser#readme + +[api-deprecate]: #deprecatefn-message-code + +[api-equal]: #equalactual-expected-message + +[api-ok]: #okvalue-message + +[api-unreachable]: #unreachablemessage diff --git a/node_modules/eastasianwidth/README.md b/node_modules/eastasianwidth/README.md new file mode 100644 index 0000000000..a8b71ee54d --- /dev/null +++ b/node_modules/eastasianwidth/README.md @@ -0,0 +1,32 @@ +# East Asian Width + +Get [East Asian Width](http://www.unicode.org/reports/tr11/) from a character. + +'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural). + +Original Code is [東アジアの文字幅 (East Asian Width) の判定 - 中途](http://d.hatena.ne.jp/takenspc/20111126#1322252878). + +## Install + + $ npm install eastasianwidth + +## Usage + + var eaw = require('eastasianwidth'); + console.log(eaw.eastAsianWidth('₩')) // 'F' + console.log(eaw.eastAsianWidth('。')) // 'H' + console.log(eaw.eastAsianWidth('뀀')) // 'W' + console.log(eaw.eastAsianWidth('a')) // 'Na' + console.log(eaw.eastAsianWidth('①')) // 'A' + console.log(eaw.eastAsianWidth('ف')) // 'N' + + console.log(eaw.characterLength('₩')) // 2 + console.log(eaw.characterLength('。')) // 1 + console.log(eaw.characterLength('뀀')) // 2 + console.log(eaw.characterLength('a')) // 1 + console.log(eaw.characterLength('①')) // 2 + console.log(eaw.characterLength('ف')) // 1 + + console.log(eaw.length('あいうえお')) // 10 + console.log(eaw.length('abcdefg')) // 7 + console.log(eaw.length('¢₩。ᅵㄅ뀀¢⟭a⊙①بف')) // 19 diff --git a/node_modules/eastasianwidth/eastasianwidth.js b/node_modules/eastasianwidth/eastasianwidth.js new file mode 100644 index 0000000000..7d0aa0f6ec --- /dev/null +++ b/node_modules/eastasianwidth/eastasianwidth.js @@ -0,0 +1,311 @@ +var eaw = {}; + +if ('undefined' == typeof module) { + window.eastasianwidth = eaw; +} else { + module.exports = eaw; +} + +eaw.eastAsianWidth = function(character) { + var x = character.charCodeAt(0); + var y = (character.length == 2) ? character.charCodeAt(1) : 0; + var codePoint = x; + if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { + x &= 0x3FF; + y &= 0x3FF; + codePoint = (x << 10) | y; + codePoint += 0x10000; + } + + if ((0x3000 == codePoint) || + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { + return 'F'; + } + if ((0x20A9 == codePoint) || + (0xFF61 <= codePoint && codePoint <= 0xFFBE) || + (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || + (0xFFCA <= codePoint && codePoint <= 0xFFCF) || + (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || + (0xFFDA <= codePoint && codePoint <= 0xFFDC) || + (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { + return 'H'; + } + if ((0x1100 <= codePoint && codePoint <= 0x115F) || + (0x11A3 <= codePoint && codePoint <= 0x11A7) || + (0x11FA <= codePoint && codePoint <= 0x11FF) || + (0x2329 <= codePoint && codePoint <= 0x232A) || + (0x2E80 <= codePoint && codePoint <= 0x2E99) || + (0x2E9B <= codePoint && codePoint <= 0x2EF3) || + (0x2F00 <= codePoint && codePoint <= 0x2FD5) || + (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || + (0x3001 <= codePoint && codePoint <= 0x303E) || + (0x3041 <= codePoint && codePoint <= 0x3096) || + (0x3099 <= codePoint && codePoint <= 0x30FF) || + (0x3105 <= codePoint && codePoint <= 0x312D) || + (0x3131 <= codePoint && codePoint <= 0x318E) || + (0x3190 <= codePoint && codePoint <= 0x31BA) || + (0x31C0 <= codePoint && codePoint <= 0x31E3) || + (0x31F0 <= codePoint && codePoint <= 0x321E) || + (0x3220 <= codePoint && codePoint <= 0x3247) || + (0x3250 <= codePoint && codePoint <= 0x32FE) || + (0x3300 <= codePoint && codePoint <= 0x4DBF) || + (0x4E00 <= codePoint && codePoint <= 0xA48C) || + (0xA490 <= codePoint && codePoint <= 0xA4C6) || + (0xA960 <= codePoint && codePoint <= 0xA97C) || + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || + (0xD7CB <= codePoint && codePoint <= 0xD7FB) || + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + (0xFE30 <= codePoint && codePoint <= 0xFE52) || + (0xFE54 <= codePoint && codePoint <= 0xFE66) || + (0xFE68 <= codePoint && codePoint <= 0xFE6B) || + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + (0x1F200 <= codePoint && codePoint <= 0x1F202) || + (0x1F210 <= codePoint && codePoint <= 0x1F23A) || + (0x1F240 <= codePoint && codePoint <= 0x1F248) || + (0x1F250 <= codePoint && codePoint <= 0x1F251) || + (0x20000 <= codePoint && codePoint <= 0x2F73F) || + (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || + (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { + return 'W'; + } + if ((0x0020 <= codePoint && codePoint <= 0x007E) || + (0x00A2 <= codePoint && codePoint <= 0x00A3) || + (0x00A5 <= codePoint && codePoint <= 0x00A6) || + (0x00AC == codePoint) || + (0x00AF == codePoint) || + (0x27E6 <= codePoint && codePoint <= 0x27ED) || + (0x2985 <= codePoint && codePoint <= 0x2986)) { + return 'Na'; + } + if ((0x00A1 == codePoint) || + (0x00A4 == codePoint) || + (0x00A7 <= codePoint && codePoint <= 0x00A8) || + (0x00AA == codePoint) || + (0x00AD <= codePoint && codePoint <= 0x00AE) || + (0x00B0 <= codePoint && codePoint <= 0x00B4) || + (0x00B6 <= codePoint && codePoint <= 0x00BA) || + (0x00BC <= codePoint && codePoint <= 0x00BF) || + (0x00C6 == codePoint) || + (0x00D0 == codePoint) || + (0x00D7 <= codePoint && codePoint <= 0x00D8) || + (0x00DE <= codePoint && codePoint <= 0x00E1) || + (0x00E6 == codePoint) || + (0x00E8 <= codePoint && codePoint <= 0x00EA) || + (0x00EC <= codePoint && codePoint <= 0x00ED) || + (0x00F0 == codePoint) || + (0x00F2 <= codePoint && codePoint <= 0x00F3) || + (0x00F7 <= codePoint && codePoint <= 0x00FA) || + (0x00FC == codePoint) || + (0x00FE == codePoint) || + (0x0101 == codePoint) || + (0x0111 == codePoint) || + (0x0113 == codePoint) || + (0x011B == codePoint) || + (0x0126 <= codePoint && codePoint <= 0x0127) || + (0x012B == codePoint) || + (0x0131 <= codePoint && codePoint <= 0x0133) || + (0x0138 == codePoint) || + (0x013F <= codePoint && codePoint <= 0x0142) || + (0x0144 == codePoint) || + (0x0148 <= codePoint && codePoint <= 0x014B) || + (0x014D == codePoint) || + (0x0152 <= codePoint && codePoint <= 0x0153) || + (0x0166 <= codePoint && codePoint <= 0x0167) || + (0x016B == codePoint) || + (0x01CE == codePoint) || + (0x01D0 == codePoint) || + (0x01D2 == codePoint) || + (0x01D4 == codePoint) || + (0x01D6 == codePoint) || + (0x01D8 == codePoint) || + (0x01DA == codePoint) || + (0x01DC == codePoint) || + (0x0251 == codePoint) || + (0x0261 == codePoint) || + (0x02C4 == codePoint) || + (0x02C7 == codePoint) || + (0x02C9 <= codePoint && codePoint <= 0x02CB) || + (0x02CD == codePoint) || + (0x02D0 == codePoint) || + (0x02D8 <= codePoint && codePoint <= 0x02DB) || + (0x02DD == codePoint) || + (0x02DF == codePoint) || + (0x0300 <= codePoint && codePoint <= 0x036F) || + (0x0391 <= codePoint && codePoint <= 0x03A1) || + (0x03A3 <= codePoint && codePoint <= 0x03A9) || + (0x03B1 <= codePoint && codePoint <= 0x03C1) || + (0x03C3 <= codePoint && codePoint <= 0x03C9) || + (0x0401 == codePoint) || + (0x0410 <= codePoint && codePoint <= 0x044F) || + (0x0451 == codePoint) || + (0x2010 == codePoint) || + (0x2013 <= codePoint && codePoint <= 0x2016) || + (0x2018 <= codePoint && codePoint <= 0x2019) || + (0x201C <= codePoint && codePoint <= 0x201D) || + (0x2020 <= codePoint && codePoint <= 0x2022) || + (0x2024 <= codePoint && codePoint <= 0x2027) || + (0x2030 == codePoint) || + (0x2032 <= codePoint && codePoint <= 0x2033) || + (0x2035 == codePoint) || + (0x203B == codePoint) || + (0x203E == codePoint) || + (0x2074 == codePoint) || + (0x207F == codePoint) || + (0x2081 <= codePoint && codePoint <= 0x2084) || + (0x20AC == codePoint) || + (0x2103 == codePoint) || + (0x2105 == codePoint) || + (0x2109 == codePoint) || + (0x2113 == codePoint) || + (0x2116 == codePoint) || + (0x2121 <= codePoint && codePoint <= 0x2122) || + (0x2126 == codePoint) || + (0x212B == codePoint) || + (0x2153 <= codePoint && codePoint <= 0x2154) || + (0x215B <= codePoint && codePoint <= 0x215E) || + (0x2160 <= codePoint && codePoint <= 0x216B) || + (0x2170 <= codePoint && codePoint <= 0x2179) || + (0x2189 == codePoint) || + (0x2190 <= codePoint && codePoint <= 0x2199) || + (0x21B8 <= codePoint && codePoint <= 0x21B9) || + (0x21D2 == codePoint) || + (0x21D4 == codePoint) || + (0x21E7 == codePoint) || + (0x2200 == codePoint) || + (0x2202 <= codePoint && codePoint <= 0x2203) || + (0x2207 <= codePoint && codePoint <= 0x2208) || + (0x220B == codePoint) || + (0x220F == codePoint) || + (0x2211 == codePoint) || + (0x2215 == codePoint) || + (0x221A == codePoint) || + (0x221D <= codePoint && codePoint <= 0x2220) || + (0x2223 == codePoint) || + (0x2225 == codePoint) || + (0x2227 <= codePoint && codePoint <= 0x222C) || + (0x222E == codePoint) || + (0x2234 <= codePoint && codePoint <= 0x2237) || + (0x223C <= codePoint && codePoint <= 0x223D) || + (0x2248 == codePoint) || + (0x224C == codePoint) || + (0x2252 == codePoint) || + (0x2260 <= codePoint && codePoint <= 0x2261) || + (0x2264 <= codePoint && codePoint <= 0x2267) || + (0x226A <= codePoint && codePoint <= 0x226B) || + (0x226E <= codePoint && codePoint <= 0x226F) || + (0x2282 <= codePoint && codePoint <= 0x2283) || + (0x2286 <= codePoint && codePoint <= 0x2287) || + (0x2295 == codePoint) || + (0x2299 == codePoint) || + (0x22A5 == codePoint) || + (0x22BF == codePoint) || + (0x2312 == codePoint) || + (0x2460 <= codePoint && codePoint <= 0x24E9) || + (0x24EB <= codePoint && codePoint <= 0x254B) || + (0x2550 <= codePoint && codePoint <= 0x2573) || + (0x2580 <= codePoint && codePoint <= 0x258F) || + (0x2592 <= codePoint && codePoint <= 0x2595) || + (0x25A0 <= codePoint && codePoint <= 0x25A1) || + (0x25A3 <= codePoint && codePoint <= 0x25A9) || + (0x25B2 <= codePoint && codePoint <= 0x25B3) || + (0x25B6 <= codePoint && codePoint <= 0x25B7) || + (0x25BC <= codePoint && codePoint <= 0x25BD) || + (0x25C0 <= codePoint && codePoint <= 0x25C1) || + (0x25C6 <= codePoint && codePoint <= 0x25C8) || + (0x25CB == codePoint) || + (0x25CE <= codePoint && codePoint <= 0x25D1) || + (0x25E2 <= codePoint && codePoint <= 0x25E5) || + (0x25EF == codePoint) || + (0x2605 <= codePoint && codePoint <= 0x2606) || + (0x2609 == codePoint) || + (0x260E <= codePoint && codePoint <= 0x260F) || + (0x2614 <= codePoint && codePoint <= 0x2615) || + (0x261C == codePoint) || + (0x261E == codePoint) || + (0x2640 == codePoint) || + (0x2642 == codePoint) || + (0x2660 <= codePoint && codePoint <= 0x2661) || + (0x2663 <= codePoint && codePoint <= 0x2665) || + (0x2667 <= codePoint && codePoint <= 0x266A) || + (0x266C <= codePoint && codePoint <= 0x266D) || + (0x266F == codePoint) || + (0x269E <= codePoint && codePoint <= 0x269F) || + (0x26BE <= codePoint && codePoint <= 0x26BF) || + (0x26C4 <= codePoint && codePoint <= 0x26CD) || + (0x26CF <= codePoint && codePoint <= 0x26E1) || + (0x26E3 == codePoint) || + (0x26E8 <= codePoint && codePoint <= 0x26FF) || + (0x273D == codePoint) || + (0x2757 == codePoint) || + (0x2776 <= codePoint && codePoint <= 0x277F) || + (0x2B55 <= codePoint && codePoint <= 0x2B59) || + (0x3248 <= codePoint && codePoint <= 0x324F) || + (0xE000 <= codePoint && codePoint <= 0xF8FF) || + (0xFE00 <= codePoint && codePoint <= 0xFE0F) || + (0xFFFD == codePoint) || + (0x1F100 <= codePoint && codePoint <= 0x1F10A) || + (0x1F110 <= codePoint && codePoint <= 0x1F12D) || + (0x1F130 <= codePoint && codePoint <= 0x1F169) || + (0x1F170 <= codePoint && codePoint <= 0x1F19A) || + (0xE0100 <= codePoint && codePoint <= 0xE01EF) || + (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || + (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { + return 'A'; + } + + return 'N'; +}; + +eaw.characterLength = function(character) { + var code = this.eastAsianWidth(character); + if (code == 'F' || code == 'W' || code == 'A') { + return 2; + } else { + return 1; + } +}; + +// Split a string considering surrogate-pairs. +function stringToArray(string) { + return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; +} + +eaw.length = function(string) { + var characters = stringToArray(string); + var len = 0; + for (var i = 0; i < characters.length; i++) { + len = len + this.characterLength(characters[i]); + } + return len; +}; + +eaw.slice = function(text, start, end) { + textLen = eaw.length(text) + start = start ? start : 0; + end = end ? end : 1; + if (start < 0) { + start = textLen + start; + } + if (end < 0) { + end = textLen + end; + } + var result = ''; + var eawLen = 0; + var chars = stringToArray(text); + for (var i = 0; i < chars.length; i++) { + var char = chars[i]; + var charLen = eaw.length(char); + if (eawLen >= start - (charLen == 2 ? 1 : 0)) { + if (eawLen + charLen <= end) { + result += char; + } else { + break; + } + } + eawLen += charLen; + } + return result; +}; diff --git a/node_modules/eastasianwidth/package.json b/node_modules/eastasianwidth/package.json new file mode 100644 index 0000000000..cb7ac6ab3b --- /dev/null +++ b/node_modules/eastasianwidth/package.json @@ -0,0 +1,18 @@ +{ + "name": "eastasianwidth", + "version": "0.2.0", + "description": "Get East Asian Width from a character.", + "main": "eastasianwidth.js", + "files": [ + "eastasianwidth.js" + ], + "scripts": { + "test": "mocha" + }, + "repository": "git://github.com/komagata/eastasianwidth.git", + "author": "Masaki Komagata", + "license": "MIT", + "devDependencies": { + "mocha": "~1.9.0" + } +} diff --git a/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/emoji-regex/README.md b/node_modules/emoji-regex/README.md new file mode 100644 index 0000000000..6d63082740 --- /dev/null +++ b/node_modules/emoji-regex/README.md @@ -0,0 +1,137 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=main)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols and sequences (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [Unicode data](https://github.com/node-unicode/node-unicode-data). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex/RGI_Emoji.js'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +## Regular expression flavors + +The package comes with three distinct regular expressions: + +```js +// This is the recommended regular expression to use. It matches all +// emoji recommended for general interchange, as defined via the +// `RGI_Emoji` property in the Unicode Standard. +// https://unicode.org/reports/tr51/#def_rgi_set +// When in doubt, use this! +const emojiRegexRGI = require('emoji-regex/RGI_Emoji.js'); + +// This is the old regular expression, prior to `RGI_Emoji` being +// standardized. In addition to all `RGI_Emoji` sequences, it matches +// some emoji you probably don’t want to match (such as emoji component +// symbols that are not meant to be used separately). +const emojiRegex = require('emoji-regex/index.js'); + +// This regular expression matches even more emoji than the previous +// one, including emoji that render as text instead of icons (i.e. +// emoji that are not `Emoji_Presentation` symbols and that aren’t +// forced to render as emoji by a variation selector). +const emojiRegexText = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegexRGI = require('emoji-regex/es2015/RGI_Emoji.js'); +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## For maintainers + +### How to update emoji-regex after new Unicode Standard releases + +1. Update the Unicode data dependency in `package.json` by running the following commands: + + ```sh + # Example: updating from Unicode v12 to Unicode v13. + npm uninstall @unicode/unicode-12.0.0 + npm install @unicode/unicode-13.0.0 --save-dev + ```` + +1. Generate the new output: + + ```sh + npm run build + ``` + +1. Verify that tests still pass: + + ```sh + npm test + ``` + +1. Send a pull request with the changes, and get it reviewed & merged. + +1. On the `main` branch, bump the emoji-regex version number in `package.json`: + + ```sh + npm version patch -m 'Release v%s' + ``` + + Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). + + Note that this produces a Git commit + tag. + +1. Push the release commit and tag: + + ```sh + git push + ``` + + Our CI then automatically publishes the new release to npm. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/emoji-regex/RGI_Emoji.d.ts b/node_modules/emoji-regex/RGI_Emoji.d.ts new file mode 100644 index 0000000000..89a651fb33 --- /dev/null +++ b/node_modules/emoji-regex/RGI_Emoji.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/RGI_Emoji' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/RGI_Emoji.js b/node_modules/emoji-regex/RGI_Emoji.js new file mode 100644 index 0000000000..3fbe924100 --- /dev/null +++ b/node_modules/emoji-regex/RGI_Emoji.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g; +}; diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts new file mode 100644 index 0000000000..bf0f154b15 --- /dev/null +++ b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015/RGI_Emoji' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.js b/node_modules/emoji-regex/es2015/RGI_Emoji.js new file mode 100644 index 0000000000..ecf32f1779 --- /dev/null +++ b/node_modules/emoji-regex/es2015/RGI_Emoji.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu; +}; diff --git a/node_modules/emoji-regex/es2015/index.d.ts b/node_modules/emoji-regex/es2015/index.d.ts new file mode 100644 index 0000000000..823dfa6532 --- /dev/null +++ b/node_modules/emoji-regex/es2015/index.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/index.js b/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 0000000000..1a4fc8d0dc --- /dev/null +++ b/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/emoji-regex/es2015/text.d.ts b/node_modules/emoji-regex/es2015/text.d.ts new file mode 100644 index 0000000000..ccc2f9adca --- /dev/null +++ b/node_modules/emoji-regex/es2015/text.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/text.js b/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 0000000000..8e9f985758 --- /dev/null +++ b/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu; +}; diff --git a/node_modules/emoji-regex/index.d.ts b/node_modules/emoji-regex/index.d.ts new file mode 100644 index 0000000000..8f235c9a73 --- /dev/null +++ b/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/index.js b/node_modules/emoji-regex/index.js new file mode 100644 index 0000000000..c0490d4c95 --- /dev/null +++ b/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/emoji-regex/package.json b/node_modules/emoji-regex/package.json new file mode 100644 index 0000000000..eac892a16a --- /dev/null +++ b/node_modules/emoji-regex/package.json @@ -0,0 +1,52 @@ +{ + "name": "emoji-regex", + "version": "9.2.2", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "RGI_Emoji.js", + "RGI_Emoji.d.ts", + "text.js", + "text.d.ts", + "es2015" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.4.4", + "@babel/core": "^7.4.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/preset-env": "^7.4.4", + "@unicode/unicode-13.0.0": "^1.0.3", + "mocha": "^6.1.4", + "regexgen": "^1.3.0" + } +} diff --git a/node_modules/emoji-regex/text.d.ts b/node_modules/emoji-regex/text.d.ts new file mode 100644 index 0000000000..c3a0125451 --- /dev/null +++ b/node_modules/emoji-regex/text.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/text.js b/node_modules/emoji-regex/text.js new file mode 100644 index 0000000000..9bc63ce747 --- /dev/null +++ b/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g; +}; diff --git a/node_modules/entities/LICENSE b/node_modules/entities/LICENSE new file mode 100644 index 0000000000..c464f863ea --- /dev/null +++ b/node_modules/entities/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/entities/package.json b/node_modules/entities/package.json new file mode 100644 index 0000000000..2e857f8cf5 --- /dev/null +++ b/node_modules/entities/package.json @@ -0,0 +1,90 @@ +{ + "name": "entities", + "version": "4.5.0", + "description": "Encode & decode XML and HTML entities with ease & speed", + "author": "Felix Boehm ", + "funding": "https://github.com/fb55/entities?sponsor=1", + "sideEffects": false, + "keywords": [ + "entity", + "decoding", + "encoding", + "html", + "xml", + "html entities" + ], + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + ".": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "./lib/decode.js": { + "require": "./lib/decode.js", + "import": "./lib/esm/decode.js" + }, + "./lib/escape.js": { + "require": "./lib/escape.js", + "import": "./lib/esm/escape.js" + } + }, + "files": [ + "lib/**/*" + ], + "engines": { + "node": ">=0.12" + }, + "devDependencies": { + "@types/jest": "^28.1.8", + "@types/node": "^18.15.11", + "@typescript-eslint/eslint-plugin": "^5.58.0", + "@typescript-eslint/parser": "^5.58.0", + "eslint": "^8.38.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-node": "^11.1.0", + "jest": "^28.1.3", + "prettier": "^2.8.7", + "ts-jest": "^28.0.8", + "typedoc": "^0.24.1", + "typescript": "^5.0.4" + }, + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint .", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/entities/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "build:docs": "typedoc --hideGenerator src/index.ts", + "build:trie": "ts-node scripts/write-decode-map.ts", + "build:encode-trie": "ts-node scripts/write-encode-map.ts", + "prepare": "npm run build" + }, + "repository": { + "type": "git", + "url": "git://github.com/fb55/entities.git" + }, + "license": "BSD-2-Clause", + "jest": { + "preset": "ts-jest", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "prettier": { + "tabWidth": 4, + "proseWrap": "always" + } +} diff --git a/node_modules/entities/readme.md b/node_modules/entities/readme.md new file mode 100644 index 0000000000..731d90c68f --- /dev/null +++ b/node_modules/entities/readme.md @@ -0,0 +1,122 @@ +# entities [![NPM version](https://img.shields.io/npm/v/entities.svg)](https://npmjs.org/package/entities) [![Downloads](https://img.shields.io/npm/dm/entities.svg)](https://npmjs.org/package/entities) [![Node.js CI](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml) + +Encode & decode HTML & XML entities with ease & speed. + +## Features + +- 😇 Tried and true: `entities` is used by many popular libraries; eg. + [`htmlparser2`](https://github.com/fb55/htmlparser2), the official + [AWS SDK](https://github.com/aws/aws-sdk-js-v3) and + [`commonmark`](https://github.com/commonmark/commonmark.js) use it to + process HTML entities. +- ⚡️ Fast: `entities` is the fastest library for decoding HTML entities (as + of April 2022); see [performance](#performance). +- 🎛 Configurable: Get an output tailored for your needs. You are fine with + UTF8? That'll save you some bytes. Prefer to only have ASCII characters? We + can do that as well! + +## How to… + +### …install `entities` + + npm install entities + +### …use `entities` + +```javascript +const entities = require("entities"); + +// Encoding +entities.escapeUTF8("& ü"); // "&#38; ü" +entities.encodeXML("& ü"); // "&#38; ü" +entities.encodeHTML("& ü"); // "&#38; ü" + +// Decoding +entities.decodeXML("asdf & ÿ ü '"); // "asdf & ÿ ü '" +entities.decodeHTML("asdf & ÿ ü '"); // "asdf & ÿ ü '" +``` + +## Performance + +This is how `entities` compares to other libraries on a very basic benchmark +(see `scripts/benchmark.ts`, for 10,000,000 iterations; **lower is better**): + +| Library | Version | `decode` perf | `encode` perf | `escape` perf | +| -------------- | ------- | ------------- | ------------- | ------------- | +| entities | `3.0.1` | 1.418s | 6.786s | 2.196s | +| html-entities | `2.3.2` | 2.530s | 6.829s | 2.415s | +| he | `1.2.0` | 5.800s | 24.237s | 3.624s | +| parse-entities | `3.0.0` | 9.660s | N/A | N/A | + +--- + +## FAQ + +> What methods should I actually use to encode my documents? + +If your target supports UTF-8, the `escapeUTF8` method is going to be your best +choice. Otherwise, use either `encodeHTML` or `encodeXML` based on whether +you're dealing with an HTML or an XML document. + +You can have a look at the options for the `encode` and `decode` methods to see +everything you can configure. + +> When should I use strict decoding? + +When strict decoding, entities not terminated with a semicolon will be ignored. +This is helpful for decoding entities in legacy environments. + +> Why should I use `entities` instead of alternative modules? + +As of April 2022, `entities` is a bit faster than other modules. Still, this is +not a very differentiated space and other modules can catch up. + +**More importantly**, you might already have `entities` in your dependency graph +(as a dependency of eg. `cheerio`, or `htmlparser2`), and including it directly +might not even increase your bundle size. The same is true for other entity +libraries, so have a look through your `node_modules` directory! + +> Does `entities` support tree shaking? + +Yes! `entities` ships as both a CommonJS and a ES module. Note that for best +results, you should not use the `encode` and `decode` functions, as they wrap +around a number of other functions, all of which will remain in the bundle. +Instead, use the functions that you need directly. + +--- + +## Acknowledgements + +This library wouldn't be possible without the work of these individuals. Thanks +to + +- [@mathiasbynens](https://github.com/mathiasbynens) for his explanations + about character encodings, and his library `he`, which was one of the + inspirations for `entities` +- [@inikulin](https://github.com/inikulin) for his work on optimized tries for + decoding HTML entities for the `parse5` project +- [@mdevils](https://github.com/mdevils) for taking on the challenge of + producing a quick entity library with his `html-entities` library. + `entities` would be quite a bit slower if there wasn't any competition. + Right now `entities` is on top, but we'll see how long that lasts! + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). Tidelift will +coordinate the fix and disclosure. + +## `entities` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `entities` and thousands of other packages are working with +Tidelift to deliver commercial support and maintenance for the open source +dependencies you use to build your applications. Save time, reduce risk, and +improve code health, while paying the maintainers of the exact dependencies you +use. +[Learn more.](https://tidelift.com/subscription/pkg/npm-entities?utm_source=npm-entities&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/foreground-child/LICENSE b/node_modules/foreground-child/LICENSE new file mode 100644 index 0000000000..2d80720fe6 --- /dev/null +++ b/node_modules/foreground-child/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/foreground-child/README.md b/node_modules/foreground-child/README.md new file mode 100644 index 0000000000..477ca57178 --- /dev/null +++ b/node_modules/foreground-child/README.md @@ -0,0 +1,128 @@ +# foreground-child + +Run a child as if it's the foreground process. Give it stdio. Exit +when it exits. + +Mostly this module is here to support some use cases around +wrapping child processes for test coverage and such. But it's +also generally useful any time you want one program to execute +another as if it's the "main" process, for example, if a program +takes a `--cmd` argument to execute in some way. + +## USAGE + +```js +import { foregroundChild } from 'foreground-child' +// hybrid module, this also works: +// const { foregroundChild } = require('foreground-child') + +// cats out this file +const child = foregroundChild('cat', [__filename]) + +// At this point, it's best to just do nothing else. +// return or whatever. +// If the child gets a signal, or just exits, then this +// parent process will exit in the same way. +``` + +You can provide custom spawn options by passing an object after +the program and arguments: + +```js +const child = foregroundChild(`cat ${__filename}`, { shell: true }) +``` + +A callback can optionally be provided, if you want to perform an +action before your foreground-child exits: + +```js +const child = foregroundChild('cat', [__filename], spawnOptions, () => { + doSomeActions() +}) +``` + +The callback can return a Promise in order to perform +asynchronous actions. If the callback does not return a promise, +then it must complete its actions within a single JavaScript +tick. + +```js +const child = foregroundChild('cat', [__filename], async () => { + await doSomeAsyncActions() +}) +``` + +If the callback throws or rejects, then it will be unhandled, and +node will exit in error. + +If the callback returns a string value, then that will be used as +the signal to exit the parent process. If it returns a number, +then that number will be used as the parent exit status code. If +it returns boolean `false`, then the parent process will not be +terminated. If it returns `undefined`, then it will exit with the +same signal/code as the child process. + +## Caveats + +The "normal" standard IO file descriptors (0, 1, and 2 for stdin, +stdout, and stderr respectively) are shared with the child process. +Additionally, if there is an IPC channel set up in the parent, then +messages are proxied to the child on file descriptor 3. + +In Node, it's possible to also map arbitrary file descriptors +into a child process. In these cases, foreground-child will not +map the file descriptors into the child. If file descriptors 0, +1, or 2 are used for the IPC channel, then strange behavior may +happen (like printing IPC messages to stderr, for example). + +Note that a SIGKILL will always kill the parent process, but +will not proxy the signal to the child process, because SIGKILL +cannot be caught. In order to address this, a special "watchdog" +child process is spawned which will send a SIGKILL to the child +process if it does not terminate within half a second after the +watchdog receives a SIGHUP due to its parent terminating. + +On Windows, issuing a `process.kill(process.pid, signal)` with a +fatal termination signal may cause the process to exit with a `1` +status code rather than reporting the signal properly. This +module tries to do the right thing, but on Windows systems, you +may see that incorrect result. There is as far as I'm aware no +workaround for this. + +## util: `foreground-child/proxy-signals` + +If you just want to proxy the signals to a child process that the +main process receives, you can use the `proxy-signals` export +from this package. + +```js +import { proxySignals } from 'foreground-child/proxy-signals' + +const childProcess = spawn('command', ['some', 'args']) +proxySignals(childProcess) +``` + +Now, any fatal signal received by the current process will be +proxied to the child process. + +It doesn't go in the other direction; ie, signals sent to the +child process will not affect the parent. For that, listen to the +child `exit` or `close` events, and handle them appropriately. + +## util: `foreground-child/watchdog` + +If you are spawning a child process, and want to ensure that it +isn't left dangling if the parent process exits, you can use the +watchdog utility exported by this module. + +```js +import { watchdog } from 'foreground-child/watchdog' + +const childProcess = spawn('command', ['some', 'args']) +const watchdogProcess = watchdog(childProcess) + +// watchdogProcess is a reference to the process monitoring the +// parent and child. There's usually no reason to do anything +// with it, as it's silent and will terminate +// automatically when it's no longer needed. +``` diff --git a/node_modules/foreground-child/package.json b/node_modules/foreground-child/package.json new file mode 100644 index 0000000000..980b7e85d1 --- /dev/null +++ b/node_modules/foreground-child/package.json @@ -0,0 +1,111 @@ +{ + "name": "foreground-child", + "version": "3.3.0", + "description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./watchdog": { + "import": { + "source": "./src/watchdog.ts", + "types": "./dist/esm/watchdog.d.ts", + "default": "./dist/esm/watchdog.js" + }, + "require": { + "source": "./src/watchdog.ts", + "types": "./dist/commonjs/watchdog.d.ts", + "default": "./dist/commonjs/watchdog.js" + } + }, + "./proxy-signals": { + "import": { + "source": "./src/proxy-signals.ts", + "types": "./dist/esm/proxy-signals.d.ts", + "default": "./dist/esm/proxy-signals.js" + }, + "require": { + "source": "./src/proxy-signals.ts", + "types": "./dist/commonjs/proxy-signals.d.ts", + "default": "./dist/commonjs/proxy-signals.js" + } + }, + "./package.json": "./package.json", + ".": { + "import": { + "source": "./src/index.ts", + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "source": "./src/index.ts", + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "tap": { + "typecheck": true + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tapjs/foreground-child.git" + }, + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "devDependencies": { + "@types/cross-spawn": "^6.0.2", + "@types/node": "^18.15.11", + "@types/tap": "^15.0.8", + "prettier": "^3.3.2", + "tap": "^19.2.5", + "tshy": "^1.15.1", + "typedoc": "^0.24.2", + "typescript": "^5.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "tshy": { + "exports": { + "./watchdog": "./src/watchdog.ts", + "./proxy-signals": "./src/proxy-signals.ts", + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "type": "module" +} diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE new file mode 100644 index 0000000000..ec7df93329 --- /dev/null +++ b/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md new file mode 100644 index 0000000000..023cd77968 --- /dev/null +++ b/node_modules/glob/README.md @@ -0,0 +1,1265 @@ +# Glob + +Match files using the patterns the shell uses. + +The most correct and second fastest glob implementation in +JavaScript. (See **Comparison to Other JavaScript Glob +Implementations** at the bottom of this readme.) + +![a fun cartoon logo made of glob characters](https://github.com/isaacs/node-glob/raw/main/logo/glob.png) + +## Usage + +Install with npm + +``` +npm i glob +``` + +**Note** the npm package name is _not_ `node-glob` that's a +different thing that was abandoned years ago. Just `glob`. + +```js +// load using import +import { glob, globSync, globStream, globStreamSync, Glob } from 'glob' +// or using commonjs, that's fine, too +const { + glob, + globSync, + globStream, + globStreamSync, + Glob, +} = require('glob') + +// the main glob() and globSync() resolve/return array of filenames + +// all js files, but don't look in node_modules +const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' }) + +// pass in a signal to cancel the glob walk +const stopAfter100ms = await glob('**/*.css', { + signal: AbortSignal.timeout(100), +}) + +// multiple patterns supported as well +const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}']) + +// but of course you can do that with the glob pattern also +// the sync function is the same, just returns a string[] instead +// of Promise +const imagesAlt = globSync('{css,public}/*.{png,jpeg}') + +// you can also stream them, this is a Minipass stream +const filesStream = globStream(['**/*.dat', 'logs/**/*.log']) + +// construct a Glob object if you wanna do it that way, which +// allows for much faster walks if you have to look in the same +// folder multiple times. +const g = new Glob('**/foo', {}) +// glob objects are async iterators, can also do globIterate() or +// g.iterate(), same deal +for await (const file of g) { + console.log('found a foo file:', file) +} +// pass a glob as the glob options to reuse its settings and caches +const g2 = new Glob('**/bar', g) +// sync iteration works as well +for (const file of g2) { + console.log('found a bar file:', file) +} + +// you can also pass withFileTypes: true to get Path objects +// these are like a Dirent, but with some more added powers +// check out http://npm.im/path-scurry for more info on their API +const g3 = new Glob('**/baz/**', { withFileTypes: true }) +g3.stream().on('data', path => { + console.log( + 'got a path object', + path.fullpath(), + path.isDirectory(), + path.readdirSync().map(e => e.name), + ) +}) + +// if you use stat:true and withFileTypes, you can sort results +// by things like modified time, filter by permission mode, etc. +// All Stats fields will be available in that case. Slightly +// slower, though. +// For example: +const results = await glob('**', { stat: true, withFileTypes: true }) + +const timeSortedFiles = results + .sort((a, b) => a.mtimeMs - b.mtimeMs) + .map(path => path.fullpath()) + +const groupReadableFiles = results + .filter(path => path.mode & 0o040) + .map(path => path.fullpath()) + +// custom ignores can be done like this, for example by saying +// you'll ignore all markdown files, and all folders named 'docs' +const customIgnoreResults = await glob('**', { + ignore: { + ignored: p => /\.md$/.test(p.name), + childrenIgnored: p => p.isNamed('docs'), + }, +}) + +// another fun use case, only return files with the same name as +// their parent folder, plus either `.ts` or `.js` +const folderNamedModules = await glob('**/*.{ts,js}', { + ignore: { + ignored: p => { + const pp = p.parent + return !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js')) + }, + }, +}) + +// find all files edited in the last hour, to do this, we ignore +// all of them that are more than an hour old +const newFiles = await glob('**', { + // need stat so we have mtime + stat: true, + // only want the files, not the dirs + nodir: true, + ignore: { + ignored: p => { + return new Date() - p.mtime > 60 * 60 * 1000 + }, + // could add similar childrenIgnored here as well, but + // directory mtime is inconsistent across platforms, so + // probably better not to, unless you know the system + // tracks this reliably. + }, +}) +``` + +**Note** Glob patterns should always use `/` as a path separator, +even on Windows systems, as `\` is used to escape glob +characters. If you wish to use `\` as a path separator _instead +of_ using it as an escape character on Windows platforms, you may +set `windowsPathsNoEscape:true` in the options. In this mode, +special glob characters cannot be escaped, making it impossible +to match a literal `*` `?` and so on in filenames. + +## Command Line Interface + +``` +$ glob -h + +Usage: + glob [options] [ [ ...]] + +Expand the positional glob expression arguments into any matching file system +paths found. + + -c --cmd= + Run the command provided, passing the glob expression + matches as arguments. + + -A --all By default, the glob cli command will not expand any + arguments that are an exact match to a file on disk. + + This prevents double-expanding, in case the shell + expands an argument whose filename is a glob + expression. + + For example, if 'app/*.ts' would match 'app/[id].ts', + then on Windows powershell or cmd.exe, 'glob app/*.ts' + will expand to 'app/[id].ts', as expected. However, in + posix shells such as bash or zsh, the shell will first + expand 'app/*.ts' to a list of filenames. Then glob + will look for a file matching 'app/[id].ts' (ie, + 'app/i.ts' or 'app/d.ts'), which is unexpected. + + Setting '--all' prevents this behavior, causing glob to + treat ALL patterns as glob expressions to be expanded, + even if they are an exact match to a file on disk. + + When setting this option, be sure to enquote arguments + so that the shell will not expand them prior to passing + them to the glob command process. + + -a --absolute Expand to absolute paths + -d --dot-relative Prepend './' on relative matches + -m --mark Append a / on any directories matched + -x --posix Always resolve to posix style paths, using '/' as the + directory separator, even on Windows. Drive letter + absolute matches on Windows will be expanded to their + full resolved UNC maths, eg instead of 'C:\foo\bar', it + will expand to '//?/C:/foo/bar'. + + -f --follow Follow symlinked directories when expanding '**' + -R --realpath Call 'fs.realpath' on all of the results. In the case + of an entry that cannot be resolved, the entry is + omitted. This incurs a slight performance penalty, of + course, because of the added system calls. + + -s --stat Call 'fs.lstat' on all entries, whether required or not + to determine if it's a valid match. + + -b --match-base Perform a basename-only match if the pattern does not + contain any slash characters. That is, '*.js' would be + treated as equivalent to '**/*.js', matching js files + in all directories. + + --dot Allow patterns to match files/directories that start + with '.', even if the pattern does not start with '.' + + --nobrace Do not expand {...} patterns + --nocase Perform a case-insensitive match. This defaults to + 'true' on macOS and Windows platforms, and false on all + others. + + Note: 'nocase' should only be explicitly set when it is + known that the filesystem's case sensitivity differs + from the platform default. If set 'true' on + case-insensitive file systems, then the walk may return + more or less results than expected. + + --nodir Do not match directories, only files. + + Note: to *only* match directories, append a '/' at the + end of the pattern. + + --noext Do not expand extglob patterns, such as '+(a|b)' + --noglobstar Do not expand '**' against multiple path portions. Ie, + treat it as a normal '*' instead. + + --windows-path-no-escape + Use '\' as a path separator *only*, and *never* as an + escape character. If set, all '\' characters are + replaced with '/' in the pattern. + + -D --max-depth= Maximum depth to traverse from the current working + directory + + -C --cwd= Current working directory to execute/match in + -r --root= A string path resolved against the 'cwd', which is used + as the starting point for absolute patterns that start + with '/' (but not drive letters or UNC paths on + Windows). + + Note that this *doesn't* necessarily limit the walk to + the 'root' directory, and doesn't affect the cwd + starting point for non-absolute patterns. A pattern + containing '..' will still be able to traverse out of + the root directory, if it is not an actual root + directory on the filesystem, and any non-absolute + patterns will still be matched in the 'cwd'. + + To start absolute and non-absolute patterns in the same + path, you can use '--root=' to set it to the empty + string. However, be aware that on Windows systems, a + pattern like 'x:/*' or '//host/share/*' will *always* + start in the 'x:/' or '//host/share/' directory, + regardless of the --root setting. + + --platform= Defaults to the value of 'process.platform' if + available, or 'linux' if not. Setting --platform=win32 + on non-Windows systems may cause strange behavior! + + -i --ignore= + Glob patterns to ignore Can be set multiple times + -v --debug Output a huge amount of noisy debug information about + patterns as they are parsed and used to match files. + + -h --help Show this usage information +``` + +## `glob(pattern: string | string[], options?: GlobOptions) => Promise` + +Perform an asynchronous glob search for the pattern(s) specified. +Returns +[Path](https://isaacs.github.io/path-scurry/classes/PathBase) +objects if the `withFileTypes` option is set to `true`. See below +for full options field desciptions. + +## `globSync(pattern: string | string[], options?: GlobOptions) => string[] | Path[]` + +Synchronous form of `glob()`. + +Alias: `glob.sync()` + +## `globIterate(pattern: string | string[], options?: GlobOptions) => AsyncGenerator` + +Return an async iterator for walking glob pattern matches. + +Alias: `glob.iterate()` + +## `globIterateSync(pattern: string | string[], options?: GlobOptions) => Generator` + +Return a sync iterator for walking glob pattern matches. + +Alias: `glob.iterate.sync()`, `glob.sync.iterate()` + +## `globStream(pattern: string | string[], options?: GlobOptions) => Minipass` + +Return a stream that emits all the strings or `Path` objects and +then emits `end` when completed. + +Alias: `glob.stream()` + +## `globStreamSync(pattern: string | string[], options?: GlobOptions) => Minipass` + +Syncronous form of `globStream()`. Will read all the matches as +fast as you consume them, even all in a single tick if you +consume them immediately, but will still respond to backpressure +if they're not consumed immediately. + +Alias: `glob.stream.sync()`, `glob.sync.stream()` + +## `hasMagic(pattern: string | string[], options?: GlobOptions) => boolean` + +Returns `true` if the provided pattern contains any "magic" glob +characters, given the options provided. + +Brace expansion is not considered "magic" unless the +`magicalBraces` option is set, as brace expansion just turns one +string into an array of strings. So a pattern like `'x{a,b}y'` +would return `false`, because `'xay'` and `'xby'` both do not +contain any magic glob characters, and it's treated the same as +if you had called it on `['xay', 'xby']`. When +`magicalBraces:true` is in the options, brace expansion _is_ +treated as a pattern having magic. + +## `escape(pattern: string, options?: GlobOptions) => string` + +Escape all magic characters in a glob pattern, so that it will +only ever match literal strings + +If the `windowsPathsNoEscape` option is used, then characters are +escaped by wrapping in `[]`, because a magic character wrapped in +a character class can only be satisfied by that exact character. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +## `unescape(pattern: string, options?: GlobOptions) => string` + +Un-escape a glob string that may contain some escaped characters. + +If the `windowsPathsNoEscape` option is used, then square-brace +escapes are removed, but not backslash escapes. For example, it +will turn the string `'[*]'` into `*`, but it will not turn +`'\\*'` into `'*'`, because `\` is a path separator in +`windowsPathsNoEscape` mode. + +When `windowsPathsNoEscape` is not set, then both brace escapes +and backslash escapes are removed. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +## Class `Glob` + +An object that can perform glob pattern traversals. + +### `const g = new Glob(pattern: string | string[], options: GlobOptions)` + +Options object is required. + +See full options descriptions below. + +Note that a previous `Glob` object can be passed as the +`GlobOptions` to another `Glob` instantiation to re-use settings +and caches with a new pattern. + +Traversal functions can be called multiple times to run the walk +again. + +### `g.stream()` + +Stream results asynchronously, + +### `g.streamSync()` + +Stream results synchronously. + +### `g.iterate()` + +Default async iteration function. Returns an AsyncGenerator that +iterates over the results. + +### `g.iterateSync()` + +Default sync iteration function. Returns a Generator that +iterates over the results. + +### `g.walk()` + +Returns a Promise that resolves to the results array. + +### `g.walkSync()` + +Returns a results array. + +### Properties + +All options are stored as properties on the `Glob` object. + +- `opts` The options provided to the constructor. +- `patterns` An array of parsed immutable `Pattern` objects. + +## Options + +Exported as `GlobOptions` TypeScript interface. A `GlobOptions` +object may be provided to any of the exported methods, and must +be provided to the `Glob` constructor. + +All options are optional, boolean, and false by default, unless +otherwise noted. + +All resolved options are added to the Glob object as properties. + +If you are running many `glob` operations, you can pass a Glob +object as the `options` argument to a subsequent operation to +share the previously loaded cache. + +- `cwd` String path or `file://` string or URL object. The + current working directory in which to search. Defaults to + `process.cwd()`. See also: "Windows, CWDs, Drive Letters, and + UNC Paths", below. + + This option may be either a string path or a `file://` URL + object or string. + +- `root` A string path resolved against the `cwd` option, which + is used as the starting point for absolute patterns that start + with `/`, (but not drive letters or UNC paths on Windows). + + Note that this _doesn't_ necessarily limit the walk to the + `root` directory, and doesn't affect the cwd starting point for + non-absolute patterns. A pattern containing `..` will still be + able to traverse out of the root directory, if it is not an + actual root directory on the filesystem, and any non-absolute + patterns will be matched in the `cwd`. For example, the + pattern `/../*` with `{root:'/some/path'}` will return all + files in `/some`, not all files in `/some/path`. The pattern + `*` with `{root:'/some/path'}` will return all the entries in + the cwd, not the entries in `/some/path`. + + To start absolute and non-absolute patterns in the same + path, you can use `{root:''}`. However, be aware that on + Windows systems, a pattern like `x:/*` or `//host/share/*` will + _always_ start in the `x:/` or `//host/share` directory, + regardless of the `root` setting. + +- `windowsPathsNoEscape` Use `\\` as a path separator _only_, and + _never_ as an escape character. If set, all `\\` characters are + replaced with `/` in the pattern. + + Note that this makes it **impossible** to match against paths + containing literal glob pattern characters, but allows matching + with patterns constructed using `path.join()` and + `path.resolve()` on Windows platforms, mimicking the (buggy!) + behavior of Glob v7 and before on Windows. Please use with + caution, and be mindful of [the caveat below about Windows + paths](#windows). (For legacy reasons, this is also set if + `allowWindowsEscape` is set to the exact value `false`.) + +- `dot` Include `.dot` files in normal matches and `globstar` + matches. Note that an explicit dot in a portion of the pattern + will always match dot files. + +- `magicalBraces` Treat brace expansion like `{a,b}` as a "magic" + pattern. Has no effect if {@link nobrace} is set. + + Only has effect on the {@link hasMagic} function, no effect on + glob pattern matching itself. + +- `dotRelative` Prepend all relative path strings with `./` (or + `.\` on Windows). + + Without this option, returned relative paths are "bare", so + instead of returning `'./foo/bar'`, they are returned as + `'foo/bar'`. + + Relative patterns starting with `'../'` are not prepended with + `./`, even if this option is set. + +- `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. + +- `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. + +- `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) + +- `noext` Do not match "extglob" patterns such as `+(a|b)`. + +- `nocase` Perform a case-insensitive match. This defaults to + `true` on macOS and Windows systems, and `false` on all others. + + **Note** `nocase` should only be explicitly set when it is + known that the filesystem's case sensitivity differs from the + platform default. If set `true` on case-sensitive file + systems, or `false` on case-insensitive file systems, then the + walk may return more or less results than expected. + +- `maxDepth` Specify a number to limit the depth of the directory + traversal to this many levels below the `cwd`. + +- `matchBase` Perform a basename-only match if the pattern does + not contain any slash characters. That is, `*.js` would be + treated as equivalent to `**/*.js`, matching all js files in + all directories. + +- `nodir` Do not match directories, only files. (Note: to match + _only_ directories, put a `/` at the end of the pattern.) + + Note: when `follow` and `nodir` are both set, then symbolic + links to directories are also omitted. + +- `stat` Call `lstat()` on all entries, whether required or not + to determine whether it's a valid match. When used with + `withFileTypes`, this means that matches will include data such + as modified time, permissions, and so on. Note that this will + incur a performance cost due to the added system calls. + +- `ignore` string or string[], or an object with `ignore` and + `ignoreChildren` methods. + + If a string or string[] is provided, then this is treated as a + glob pattern or array of glob patterns to exclude from matches. + To ignore all children within a directory, as well as the entry + itself, append `'/**'` to the ignore pattern. + + **Note** `ignore` patterns are _always_ in `dot:true` mode, + regardless of any other settings. + + If an object is provided that has `ignored(path)` and/or + `childrenIgnored(path)` methods, then these methods will be + called to determine whether any Path is a match or if its + children should be traversed, respectively. + +- `follow` Follow symlinked directories when expanding `**` + patterns. This can result in a lot of duplicate references in + the presence of cyclic links, and make performance quite bad. + + By default, a `**` in a pattern will follow 1 symbolic link if + it is not the first item in the pattern, or none if it is the + first item in the pattern, following the same behavior as Bash. + + Note: when `follow` and `nodir` are both set, then symbolic + links to directories are also omitted. + +- `realpath` Set to true to call `fs.realpath` on all of the + results. In the case of an entry that cannot be resolved, the + entry is omitted. This incurs a slight performance penalty, of + course, because of the added system calls. + +- `absolute` Set to true to always receive absolute paths for + matched files. Set to `false` to always receive relative paths + for matched files. + + By default, when this option is not set, absolute paths are + returned for patterns that are absolute, and otherwise paths + are returned that are relative to the `cwd` setting. + + This does _not_ make an extra system call to get the realpath, + it only does string path resolution. + + `absolute` may not be used along with `withFileTypes`. + +- `posix` Set to true to use `/` as the path separator in + returned results. On posix systems, this has no effect. On + Windows systems, this will return `/` delimited path results, + and absolute paths will be returned in their full resolved UNC + path form, eg insted of `'C:\\foo\\bar'`, it will return + `//?/C:/foo/bar`. + +- `platform` Defaults to value of `process.platform` if + available, or `'linux'` if not. Setting `platform:'win32'` on + non-Windows systems may cause strange behavior. + +- `withFileTypes` Return [PathScurry](http://npm.im/path-scurry) + `Path` objects instead of strings. These are similar to a + NodeJS `Dirent` object, but with additional methods and + properties. + + `withFileTypes` may not be used along with `absolute`. + +- `signal` An AbortSignal which will cancel the Glob walk when + triggered. + +- `fs` An override object to pass in custom filesystem methods. + See [PathScurry docs](http://npm.im/path-scurry) for what can + be overridden. + +- `scurry` A [PathScurry](http://npm.im/path-scurry) object used + to traverse the file system. If the `nocase` option is set + explicitly, then any provided `scurry` object must match this + setting. + +- `includeChildMatches` boolean, default `true`. Do not match any + children of any matches. For example, the pattern `**\/foo` + would match `a/foo`, but not `a/foo/b/foo` in this mode. + + This is especially useful for cases like "find all + `node_modules` folders, but not the ones in `node_modules`". + + In order to support this, the `Ignore` implementation must + support an `add(pattern: string)` method. If using the default + `Ignore` class, then this is fine, but if this is set to + `false`, and a custom `Ignore` is provided that does not have + an `add()` method, then it will throw an error. + + **Caveat** It _only_ ignores matches that would be a descendant + of a previous match, and only if that descendant is matched + _after_ the ancestor is encountered. Since the file system walk + happens in indeterminate order, it's possible that a match will + already be added before its ancestor, if multiple or braced + patterns are used. + + For example: + + ```js + const results = await glob( + [ + // likely to match first, since it's just a stat + 'a/b/c/d/e/f', + + // this pattern is more complicated! It must to various readdir() + // calls and test the results against a regular expression, and that + // is certainly going to take a little bit longer. + // + // So, later on, it encounters a match at 'a/b/c/d/e', but it's too + // late to ignore a/b/c/d/e/f, because it's already been emitted. + 'a/[bdf]/?/[a-z]/*', + ], + { includeChildMatches: false }, + ) + ``` + + It's best to only set this to `false` if you can be reasonably + sure that no components of the pattern will potentially match + one another's file system descendants, or if the occasional + included child entry will not cause problems. + +## Glob Primer + +Much more information about glob pattern expansion can be found +by running `man bash` and searching for `Pattern Matching`. + +"Globs" are the patterns you type when you do stuff like `ls +*.js` on the command line, or put `build/*` in a `.gitignore` +file. + +Before parsing the path part patterns, braced sections are +expanded into a set. Braced sections start with `{` and end with +`}`, with 2 or more comma-delimited sections within. Braced +sections may contain slash characters, so `a{/b/c,bcd}` would +expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in +a path portion. With the exception of `**`, none of these match +path separators (ie, `/` on all platforms, and `\` on Windows). + +- `*` Matches 0 or more characters in a single path portion. + When alone in a path portion, it must match at least 1 + character. If `dot:true` is not specified, then `*` will not + match against a `.` character at the start of a path portion. +- `?` Matches 1 character. If `dot:true` is not specified, then + `?` will not match against a `.` character at the start of a + path portion. +- `[...]` Matches a range of characters, similar to a RegExp + range. If the first character of the range is `!` or `^` then + it matches any character not in the range. If the first + character is `]`, then it will be considered the same as `\]`, + rather than the end of the character class. +- `!(pattern|pattern|pattern)` Matches anything that does not + match any of the patterns provided. May _not_ contain `/` + characters. Similar to `*`, if alone in a path portion, then + the path portion must have at least one character. +- `?(pattern|pattern|pattern)` Matches zero or one occurrence of + the patterns provided. May _not_ contain `/` characters. +- `+(pattern|pattern|pattern)` Matches one or more occurrences of + the patterns provided. May _not_ contain `/` characters. +- `*(a|b|c)` Matches zero or more occurrences of the patterns + provided. May _not_ contain `/` characters. +- `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided. May _not_ contain `/` characters. +- `**` If a "globstar" is alone in a path portion, then it + matches zero or more directories and subdirectories searching + for matches. It does not crawl symlinked directories, unless + `{follow:true}` is passed in the options object. A pattern + like `a/b/**` will only match `a/b` if it is a directory. + Follows 1 symbolic link if not the first item in the pattern, + or 0 if it is the first item, unless `follow:true` is set, in + which case it follows all symbolic links. + +`[:class:]` patterns are supported by this implementation, but +`[=c=]` and `[.symbol.]` style class patterns are not. + +### Dots + +If a file or directory path portion has a `.` as the first +character, then it will not match any glob pattern unless that +pattern's corresponding path part also has a `.` as its first +character. + +For example, the pattern `a/.*/c` would match the file at +`a/.b/c`. However the pattern `a/*/c` would not, because `*` does +not start with a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has +no slashes in it, then it will seek for any file anywhere in the +tree with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. +This differs from the shell, where the pattern itself is +returned. For example: + +```sh +$ echo a*s*d*f +a*s*d*f +``` + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a +worthwhile goal, some discrepancies exist between node-glob and +other implementations, and are intentional. + +The double-star character `**` is supported by default, unless +the `noglobstar` flag is set. This is supported in the manner of +bsdglob and bash 5, where `**` only has special significance if +it is the only thing in a path part. That is, `a/**/b` will match +`a/x/y/b`, but `a/**b` will not. + +Note that symlinked directories are not traversed as part of a +`**`, though their contents may match against subsequent portions +of the pattern. This prevents infinite loops and duplicates and +the like. You can force glob to traverse symlinks with `**` by +setting `{follow:true}` in the options. + +There is no equivalent of the `nonull` option. A pattern that +does not find any matches simply resolves to nothing. (An empty +array, immediately ended stream, etc.) + +If brace expansion is not disabled, then it is performed before +any other interpretation of the glob pattern. Thus, a pattern +like `+(a|{b),c)}`, which would not be valid in bash or zsh, is +expanded **first** into the set of `+(a|b)` and `+(a|c)`, and +those patterns are checked for validity. Since those two are +valid, matching proceeds. + +The character class patterns `[:class:]` (posix standard named +classes) style class patterns are supported and unicode-aware, +but `[=c=]` (locale-specific character collation weight), and +`[.symbol.]` (collating symbol), are not. + +### Repeated Slashes + +Unlike Bash and zsh, repeated `/` are always coalesced into a +single path separator. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if +it started with a `#` character, or a "negated" pattern if it +started with a `!` character. + +These options were deprecated in version 5, and removed in +version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only +`/` characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will +always be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto +the root setting using `path.join`. On windows, this will by +default result in `/foo/*` matching `C:\foo\bar.txt`. + +To automatically coerce all `\` characters to `/` in pattern +strings, **thus making it impossible to escape literal glob +characters**, you may set the `windowsPathsNoEscape` option to +`true`. + +### Windows, CWDs, Drive Letters, and UNC Paths + +On posix systems, when a pattern starts with `/`, any `cwd` +option is ignored, and the traversal starts at `/`, plus any +non-magic path portions specified in the pattern. + +On Windows systems, the behavior is similar, but the concept of +an "absolute path" is somewhat more involved. + +#### UNC Paths + +A UNC path may be used as the start of a pattern on Windows +platforms. For example, a pattern like: `//?/x:/*` will return +all file entries in the root of the `x:` drive. A pattern like +`//ComputerName/Share/*` will return all files in the associated +share. + +UNC path roots are always compared case insensitively. + +#### Drive Letters + +A pattern starting with a drive letter, like `c:/*`, will search +in that drive, regardless of any `cwd` option provided. + +If the pattern starts with `/`, and is not a UNC path, and there +is an explicit `cwd` option set with a drive letter, then the +drive letter in the `cwd` is used as the root of the directory +traversal. + +For example, `glob('/tmp', { cwd: 'c:/any/thing' })` will return +`['c:/tmp']` as the result. + +If an explicit `cwd` option is not provided, and the pattern +starts with `/`, then the traversal will run on the root of the +drive provided as the `cwd` option. (That is, it is the result of +`path.resolve('/')`.) + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race +conditions, since it relies on directory walking. + +As a result, it is possible that a file that exists when glob +looks for it may have been deleted or modified by the time it +returns the result. + +By design, this implementation caches all readdir calls that it +makes, in order to cut down on system overhead. However, this +also makes it even more susceptible to races, especially if the +cache object is reused between glob calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast +majority of operations, this is never a problem. + +### See Also: + +- `man sh` +- `man bash` [Pattern + Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) +- `man 3 fnmatch` +- `man 5 gitignore` +- [minimatch documentation](https://github.com/isaacs/minimatch) + +## Glob Logo + +Glob's logo was created by [Tanya +Brassie](http://tanyabrassie.com/). Logo files can be found +[here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons +Attribution-ShareAlike 4.0 International +License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a +test. + +Patches that fail tests or reduce performance will be rejected. + +```sh +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# run the benchmarks +npm run bench + +# to profile javascript +npm run prof +``` + +## Comparison to Other JavaScript Glob Implementations + +**tl;dr** + +- If you want glob matching that is as faithful as possible to + Bash pattern expansion semantics, and as fast as possible + within that constraint, _use this module_. +- If you are reasonably sure that the patterns you will encounter + are relatively simple, and want the absolutely fastest glob + matcher out there, _use [fast-glob](http://npm.im/fast-glob)_. +- If you are reasonably sure that the patterns you will encounter + are relatively simple, and want the convenience of + automatically respecting `.gitignore` files, _use + [globby](http://npm.im/globby)_. + +There are some other glob matcher libraries on npm, but these +three are (in my opinion, as of 2023) the best. + +--- + +**full explanation** + +Every library reflects a set of opinions and priorities in the +trade-offs it makes. Other than this library, I can personally +recommend both [globby](http://npm.im/globby) and +[fast-glob](http://npm.im/fast-glob), though they differ in their +benefits and drawbacks. + +Both have very nice APIs and are reasonably fast. + +`fast-glob` is, as far as I am aware, the fastest glob +implementation in JavaScript today. However, there are many +cases where the choices that `fast-glob` makes in pursuit of +speed mean that its results differ from the results returned by +Bash and other sh-like shells, which may be surprising. + +In my testing, `fast-glob` is around 10-20% faster than this +module when walking over 200k files nested 4 directories +deep[1](#fn-webscale). However, there are some inconsistencies +with Bash matching behavior that this module does not suffer +from: + +- `**` only matches files, not directories +- `..` path portions are not handled unless they appear at the + start of the pattern +- `./!()` will not match any files that _start_ with + ``, even if they do not match ``. For + example, `!(9).txt` will not match `9999.txt`. +- Some brace patterns in the middle of a pattern will result in + failing to find certain matches. +- Extglob patterns are allowed to contain `/` characters. + +Globby exhibits all of the same pattern semantics as fast-glob, +(as it is a wrapper around fast-glob) and is slightly slower than +node-glob (by about 10-20% in the benchmark test set, or in other +words, anywhere from 20-50% slower than fast-glob). However, it +adds some API conveniences that may be worth the costs. + +- Support for `.gitignore` and other ignore files. +- Support for negated globs (ie, patterns starting with `!` + rather than using a separate `ignore` option). + +The priority of this module is "correctness" in the sense of +performing a glob pattern expansion as faithfully as possible to +the behavior of Bash and other sh-like shells, with as much speed +as possible. + +Note that prior versions of `node-glob` are _not_ on this list. +Former versions of this module are far too slow for any cases +where performance matters at all, and were designed with APIs +that are extremely dated by current JavaScript standards. + +--- + +[1]: In the cases where this module +returns results and `fast-glob` doesn't, it's even faster, of +course. + +![lumpy space princess saying 'oh my GLOB'](https://github.com/isaacs/node-glob/raw/main/oh-my-glob.gif) + +### Benchmark Results + +First number is time, smaller is better. + +Second number is the count of results returned. + +``` +--- pattern: '**' --- +~~ sync ~~ +node fast-glob sync 0m0.598s 200364 +node globby sync 0m0.765s 200364 +node current globSync mjs 0m0.683s 222656 +node current glob syncStream 0m0.649s 222656 +~~ async ~~ +node fast-glob async 0m0.350s 200364 +node globby async 0m0.509s 200364 +node current glob async mjs 0m0.463s 222656 +node current glob stream 0m0.411s 222656 + +--- pattern: '**/..' --- +~~ sync ~~ +node fast-glob sync 0m0.486s 0 +node globby sync 0m0.769s 200364 +node current globSync mjs 0m0.564s 2242 +node current glob syncStream 0m0.583s 2242 +~~ async ~~ +node fast-glob async 0m0.283s 0 +node globby async 0m0.512s 200364 +node current glob async mjs 0m0.299s 2242 +node current glob stream 0m0.312s 2242 + +--- pattern: './**/0/**/0/**/0/**/0/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.490s 10 +node globby sync 0m0.517s 10 +node current globSync mjs 0m0.540s 10 +node current glob syncStream 0m0.550s 10 +~~ async ~~ +node fast-glob async 0m0.290s 10 +node globby async 0m0.296s 10 +node current glob async mjs 0m0.278s 10 +node current glob stream 0m0.302s 10 + +--- pattern: './**/[01]/**/[12]/**/[23]/**/[45]/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.500s 160 +node globby sync 0m0.528s 160 +node current globSync mjs 0m0.556s 160 +node current glob syncStream 0m0.573s 160 +~~ async ~~ +node fast-glob async 0m0.283s 160 +node globby async 0m0.301s 160 +node current glob async mjs 0m0.306s 160 +node current glob stream 0m0.322s 160 + +--- pattern: './**/0/**/0/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.502s 5230 +node globby sync 0m0.527s 5230 +node current globSync mjs 0m0.544s 5230 +node current glob syncStream 0m0.557s 5230 +~~ async ~~ +node fast-glob async 0m0.285s 5230 +node globby async 0m0.305s 5230 +node current glob async mjs 0m0.304s 5230 +node current glob stream 0m0.310s 5230 + +--- pattern: '**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.580s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.685s 200023 +node current glob syncStream 0m0.649s 200023 +~~ async ~~ +node fast-glob async 0m0.349s 200023 +node globby async 0m0.509s 200023 +node current glob async mjs 0m0.427s 200023 +node current glob stream 0m0.388s 200023 + +--- pattern: '{**/*.txt,**/?/**/*.txt,**/?/**/?/**/*.txt,**/?/**/?/**/?/**/*.txt,**/?/**/?/**/?/**/?/**/*.txt}' --- +~~ sync ~~ +node fast-glob sync 0m0.589s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.716s 200023 +node current glob syncStream 0m0.684s 200023 +~~ async ~~ +node fast-glob async 0m0.351s 200023 +node globby async 0m0.518s 200023 +node current glob async mjs 0m0.462s 200023 +node current glob stream 0m0.468s 200023 + +--- pattern: '**/5555/0000/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.496s 1000 +node globby sync 0m0.519s 1000 +node current globSync mjs 0m0.539s 1000 +node current glob syncStream 0m0.567s 1000 +~~ async ~~ +node fast-glob async 0m0.285s 1000 +node globby async 0m0.299s 1000 +node current glob async mjs 0m0.305s 1000 +node current glob stream 0m0.301s 1000 + +--- pattern: './**/0/**/../[01]/**/0/../**/0/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.484s 0 +node globby sync 0m0.507s 0 +node current globSync mjs 0m0.577s 4880 +node current glob syncStream 0m0.586s 4880 +~~ async ~~ +node fast-glob async 0m0.280s 0 +node globby async 0m0.298s 0 +node current glob async mjs 0m0.327s 4880 +node current glob stream 0m0.324s 4880 + +--- pattern: '**/????/????/????/????/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.547s 100000 +node globby sync 0m0.673s 100000 +node current globSync mjs 0m0.626s 100000 +node current glob syncStream 0m0.618s 100000 +~~ async ~~ +node fast-glob async 0m0.315s 100000 +node globby async 0m0.414s 100000 +node current glob async mjs 0m0.366s 100000 +node current glob stream 0m0.345s 100000 + +--- pattern: './{**/?{/**/?{/**/?{/**/?,,,,},,,,},,,,},,,}/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.588s 100000 +node globby sync 0m0.670s 100000 +node current globSync mjs 0m0.717s 200023 +node current glob syncStream 0m0.687s 200023 +~~ async ~~ +node fast-glob async 0m0.343s 100000 +node globby async 0m0.418s 100000 +node current glob async mjs 0m0.519s 200023 +node current glob stream 0m0.451s 200023 + +--- pattern: '**/!(0|9).txt' --- +~~ sync ~~ +node fast-glob sync 0m0.573s 160023 +node globby sync 0m0.731s 160023 +node current globSync mjs 0m0.680s 180023 +node current glob syncStream 0m0.659s 180023 +~~ async ~~ +node fast-glob async 0m0.345s 160023 +node globby async 0m0.476s 160023 +node current glob async mjs 0m0.427s 180023 +node current glob stream 0m0.388s 180023 + +--- pattern: './{*/**/../{*/**/../{*/**/../{*/**/../{*/**,,,,},,,,},,,,},,,,},,,,}/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.483s 0 +node globby sync 0m0.512s 0 +node current globSync mjs 0m0.811s 200023 +node current glob syncStream 0m0.773s 200023 +~~ async ~~ +node fast-glob async 0m0.280s 0 +node globby async 0m0.299s 0 +node current glob async mjs 0m0.617s 200023 +node current glob stream 0m0.568s 200023 + +--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.485s 0 +node globby sync 0m0.507s 0 +node current globSync mjs 0m0.759s 200023 +node current glob syncStream 0m0.740s 200023 +~~ async ~~ +node fast-glob async 0m0.281s 0 +node globby async 0m0.297s 0 +node current glob async mjs 0m0.544s 200023 +node current glob stream 0m0.464s 200023 + +--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.486s 0 +node globby sync 0m0.513s 0 +node current globSync mjs 0m0.734s 200023 +node current glob syncStream 0m0.696s 200023 +~~ async ~~ +node fast-glob async 0m0.286s 0 +node globby async 0m0.296s 0 +node current glob async mjs 0m0.506s 200023 +node current glob stream 0m0.483s 200023 + +--- pattern: './0/**/../1/**/../2/**/../3/**/../4/**/../5/**/../6/**/../7/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.060s 0 +node globby sync 0m0.074s 0 +node current globSync mjs 0m0.067s 0 +node current glob syncStream 0m0.066s 0 +~~ async ~~ +node fast-glob async 0m0.060s 0 +node globby async 0m0.075s 0 +node current glob async mjs 0m0.066s 0 +node current glob stream 0m0.067s 0 + +--- pattern: './**/?/**/?/**/?/**/?/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.568s 100000 +node globby sync 0m0.651s 100000 +node current globSync mjs 0m0.619s 100000 +node current glob syncStream 0m0.617s 100000 +~~ async ~~ +node fast-glob async 0m0.332s 100000 +node globby async 0m0.409s 100000 +node current glob async mjs 0m0.372s 100000 +node current glob stream 0m0.351s 100000 + +--- pattern: '**/*/**/*/**/*/**/*/**' --- +~~ sync ~~ +node fast-glob sync 0m0.603s 200113 +node globby sync 0m0.798s 200113 +node current globSync mjs 0m0.730s 222137 +node current glob syncStream 0m0.693s 222137 +~~ async ~~ +node fast-glob async 0m0.356s 200113 +node globby async 0m0.525s 200113 +node current glob async mjs 0m0.508s 222137 +node current glob stream 0m0.455s 222137 + +--- pattern: './**/*/**/*/**/*/**/*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.622s 200000 +node globby sync 0m0.792s 200000 +node current globSync mjs 0m0.722s 200000 +node current glob syncStream 0m0.695s 200000 +~~ async ~~ +node fast-glob async 0m0.369s 200000 +node globby async 0m0.527s 200000 +node current glob async mjs 0m0.502s 200000 +node current glob stream 0m0.481s 200000 + +--- pattern: '**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.588s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.684s 200023 +node current glob syncStream 0m0.658s 200023 +~~ async ~~ +node fast-glob async 0m0.352s 200023 +node globby async 0m0.516s 200023 +node current glob async mjs 0m0.432s 200023 +node current glob stream 0m0.384s 200023 + +--- pattern: './**/**/**/**/**/**/**/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.589s 200023 +node globby sync 0m0.766s 200023 +node current globSync mjs 0m0.682s 200023 +node current glob syncStream 0m0.652s 200023 +~~ async ~~ +node fast-glob async 0m0.352s 200023 +node globby async 0m0.523s 200023 +node current glob async mjs 0m0.436s 200023 +node current glob stream 0m0.380s 200023 + +--- pattern: '**/*/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.592s 200023 +node globby sync 0m0.776s 200023 +node current globSync mjs 0m0.691s 200023 +node current glob syncStream 0m0.659s 200023 +~~ async ~~ +node fast-glob async 0m0.357s 200023 +node globby async 0m0.513s 200023 +node current glob async mjs 0m0.471s 200023 +node current glob stream 0m0.424s 200023 + +--- pattern: '**/*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.585s 200023 +node globby sync 0m0.766s 200023 +node current globSync mjs 0m0.694s 200023 +node current glob syncStream 0m0.664s 200023 +~~ async ~~ +node fast-glob async 0m0.350s 200023 +node globby async 0m0.514s 200023 +node current glob async mjs 0m0.472s 200023 +node current glob stream 0m0.424s 200023 + +--- pattern: '**/[0-9]/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.544s 100000 +node globby sync 0m0.636s 100000 +node current globSync mjs 0m0.626s 100000 +node current glob syncStream 0m0.621s 100000 +~~ async ~~ +node fast-glob async 0m0.322s 100000 +node globby async 0m0.404s 100000 +node current glob async mjs 0m0.360s 100000 +node current glob stream 0m0.352s 100000 +``` diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json new file mode 100644 index 0000000000..6d4893b5f3 --- /dev/null +++ b/node_modules/glob/package.json @@ -0,0 +1,99 @@ +{ + "author": "Isaac Z. Schlueter (https://blog.izs.me/)", + "publishConfig": { + "tag": "legacy-v10" + }, + "name": "glob", + "description": "the most correct and second fastest glob implementation in JavaScript", + "version": "10.4.5", + "type": "module", + "tshy": { + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "bin": "./dist/esm/bin.mjs", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts", + "prepublish": "npm run benchclean", + "profclean": "rm -f v8.log profile.txt", + "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts", + "prebench": "npm run prepare", + "bench": "bash benchmark.sh", + "preprof": "npm run prepare", + "prof": "bash prof.sh", + "benchclean": "node benchclean.cjs" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "devDependencies": { + "@types/node": "^20.11.30", + "memfs": "^3.4.13", + "mkdirp": "^3.0.1", + "prettier": "^3.2.5", + "rimraf": "^5.0.7", + "sync-content": "^1.0.2", + "tap": "^19.0.0", + "tshy": "^1.14.0", + "typedoc": "^0.25.12" + }, + "tap": { + "before": "test/00-setup.ts" + }, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "module": "./dist/esm/index.js" +} diff --git a/node_modules/ignore/LICENSE-MIT b/node_modules/ignore/LICENSE-MIT new file mode 100644 index 0000000000..825533e337 --- /dev/null +++ b/node_modules/ignore/LICENSE-MIT @@ -0,0 +1,21 @@ +Copyright (c) 2013 Kael Zhang , contributors +http://kael.me/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/ignore/README.md b/node_modules/ignore/README.md new file mode 100644 index 0000000000..4e99471113 --- /dev/null +++ b/node_modules/ignore/README.md @@ -0,0 +1,452 @@ +| Linux / MacOS / Windows | Coverage | Downloads | +| ----------------------- | -------- | --------- | +| [![build][bb]][bl] | [![coverage][cb]][cl] | [![downloads][db]][dl] | + +[bb]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml/badge.svg +[bl]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml + +[cb]: https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg +[cl]: https://codecov.io/gh/kaelzhang/node-ignore + +[db]: http://img.shields.io/npm/dm/ignore.svg +[dl]: https://www.npmjs.org/package/ignore + +# ignore + +`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the [.gitignore spec 2.22.1](http://git-scm.com/docs/gitignore). + +`ignore` is used by eslint, gitbook and [many others](https://www.npmjs.com/browse/depended/ignore). + +Pay **ATTENTION** that [`minimatch`](https://www.npmjs.org/package/minimatch) (which used by `fstream-ignore`) does not follow the gitignore spec. + +To filter filenames according to a .gitignore file, I recommend this npm package, `ignore`. + +To parse an `.npmignore` file, you should use `minimatch`, because an `.npmignore` file is parsed by npm using `minimatch` and it does not work in the .gitignore way. + +### Tested on + +`ignore` is fully tested, and has more than **five hundreds** of unit tests. + +- Linux + Node: `0.8` - `7.x` +- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor. + +Actually, `ignore` does not rely on any versions of node specially. + +Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md). + +## Table Of Main Contents + +- [Usage](#usage) +- [`Pathname` Conventions](#pathname-conventions) +- See Also: + - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules. +- [Upgrade Guide](#upgrade-guide) + +## Install + +```sh +npm i ignore +``` + +## Usage + +```js +import ignore from 'ignore' +const ig = ignore().add(['.abc/*', '!.abc/d/']) +``` + +### Filter the given paths + +```js +const paths = [ + '.abc/a.js', // filtered out + '.abc/d/e.js' // included +] + +ig.filter(paths) // ['.abc/d/e.js'] +ig.ignores('.abc/a.js') // true +``` + +### As the filter function + +```js +paths.filter(ig.createFilter()); // ['.abc/d/e.js'] +``` + +### Win32 paths will be handled + +```js +ig.filter(['.abc\\a.js', '.abc\\d\\e.js']) +// if the code above runs on windows, the result will be +// ['.abc\\d\\e.js'] +``` + +## Why another ignore? + +- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family. + +- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so + - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations. + - `ignore` don't cares about sub-modules of git projects. + +- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as: + - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'. + - '`**/foo`' should match '`foo`' anywhere. + - Prevent re-including a file if a parent directory of that file is excluded. + - Handle trailing whitespaces: + - `'a '`(one space) should not match `'a '`(two spaces). + - `'a \ '` matches `'a '` + - All test cases are verified with the result of `git check-ignore`. + +# Methods + +## .add(pattern: string | Ignore): this +## .add(patterns: Array): this +## .add({pattern: string, mark?: string}): this since 7.0.0 + +- **pattern** `string | Ignore` An ignore pattern string, or the `Ignore` instance +- **patterns** `Array` Array of ignore patterns. +- **mark?** `string` Pattern mark, which is used to associate the pattern with a certain marker, such as the line no of the `.gitignore` file. Actually it could be an arbitrary string and is optional. + +Adds a rule or several rules to the current manager. + +Returns `this` + +Notice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename. + +```js +ignore().add('#abc').ignores('#abc') // false +ignore().add('\\#abc').ignores('#abc') // true +``` + +`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file: + +```js +ignore() +.add(fs.readFileSync(filenameOfGitignore).toString()) +.filter(filenames) +``` + +`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance. + +## .ignores(pathname: [Pathname](#pathname-conventions)): boolean + +> new in 3.2.0 + +Returns `Boolean` whether `pathname` should be ignored. + +```js +ig.ignores('.abc/a.js') // true +``` + +Please **PAY ATTENTION** that `.ignores()` is **NOT** equivalent to `git check-ignore` although in most cases they return equivalent results. + +However, for the purposes of imitating the behavior of `git check-ignore`, please use `.checkIgnore()` instead. + +### `Pathname` Conventions: + +#### 1. `Pathname` should be a `path.relative()`d pathname + +`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory, + +```js +// WRONG, an error will be thrown +ig.ignores('./abc') + +// WRONG, for it will never happen, and an error will be thrown +// If the gitignore rule locates at the root directory, +// `'/abc'` should be changed to `'abc'`. +// ``` +// path.relative('/', '/abc') -> 'abc' +// ``` +ig.ignores('/abc') + +// WRONG, that it is an absolute path on Windows, an error will be thrown +ig.ignores('C:\\abc') + +// Right +ig.ignores('abc') + +// Right +ig.ignores(path.join('./abc')) // path.join('./abc') -> 'abc' +``` + +In other words, each `Pathname` here should be a relative path to the directory of the gitignore rules. + +Suppose the dir structure is: + +``` +/path/to/your/repo + |-- a + | |-- a.js + | + |-- .b + | + |-- .c + |-- .DS_store +``` + +Then the `paths` might be like this: + +```js +[ + 'a/a.js' + '.b', + '.c/.DS_store' +] +``` + +#### 2. filenames and dirnames + +`node-ignore` does NO `fs.stat` during path matching, so `node-ignore` treats +- `foo` as a file +- **`foo/` as a directory** + +For the example below: + +```js +// First, we add a ignore pattern to ignore a directory +ig.add('config/') + +// `ig` does NOT know if 'config', in the real world, +// is a normal file, directory or something. + +ig.ignores('config') +// `ig` treats `config` as a file, so it returns `false` + +ig.ignores('config/') +// returns `true` +``` + +Specially for people who develop some library based on `node-ignore`, it is important to understand that. + +Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory: + +```js +import glob from 'glob' + +glob('**', { + // Adds a / character to directory matches. + mark: true +}, (err, files) => { + if (err) { + return console.error(err) + } + + let filtered = ignore().add(patterns).filter(files) + console.log(filtered) +}) +``` + + +## .filter(paths: Array<Pathname>): Array<Pathname> + +```ts +type Pathname = string +``` + +Filters the given array of pathnames, and returns the filtered array. + +- **paths** `Array.` The array of `pathname`s to be filtered. + +## .createFilter() + +Creates a filter function which could filter an array of paths with `Array.prototype.filter`. + +Returns `function(path)` the filter function. + +## .test(pathname: Pathname): TestResult + +> New in 5.0.0 + +Returns `TestResult` + +```ts +// Since 5.0.0 +interface TestResult { + ignored: boolean + // true if the `pathname` is finally unignored by some negative pattern + unignored: boolean + // The `IgnoreRule` which ignores the pathname + rule?: IgnoreRule +} + +// Since 7.0.0 +interface IgnoreRule { + // The original pattern + pattern: string + // Whether the pattern is a negative pattern + negative: boolean + // Which is used for other packages to build things upon `node-ignore` + mark?: string +} +``` + +- `{ignored: true, unignored: false}`: the `pathname` is ignored +- `{ignored: false, unignored: true}`: the `pathname` is unignored +- `{ignored: false, unignored: false}`: the `pathname` is never matched by any ignore rules. + +## .checkIgnore(target: string): TestResult + +> new in 7.0.0 + +Debugs gitignore / exclude files, which is equivalent to `git check-ignore -v`. Usually this method is used for other packages to implement the function of `git check-ignore -v` upon `node-ignore` + +- **target** `string` the target to test. + +Returns `TestResult` + +```js +ig.add({ + pattern: 'foo/*', + mark: '60' +}) + +const { + ignored, + rule +} = checkIgnore('foo/') + +if (ignored) { + console.log(`.gitignore:${result}:${rule.mark}:${rule.pattern} foo/`) +} + +// .gitignore:60:foo/* foo/ +``` + +Please pay attention that this method does not have a strong built-in cache mechanism. + +The purpose of introducing this method is to make it possible to implement the `git check-ignore` command in JavaScript based on `node-ignore`. + +So do not use this method in those situations where performance is extremely important. + +## static `isPathValid(pathname): boolean` since 5.0.0 + +Check whether the `pathname` is an valid `path.relative()`d path according to the [convention](#1-pathname-should-be-a-pathrelatived-pathname). + +This method is **NOT** used to check if an ignore pattern is valid. + +```js +import {isPathValid} from 'ignore' + +isPathValid('./foo') // false +``` + +## .addIgnoreFile(path) + +REMOVED in `3.x` for now. + +To upgrade `ignore@2.x` up to `3.x`, use + +```js +import fs from 'fs' + +if (fs.existsSync(filename)) { + ignore().add(fs.readFileSync(filename).toString()) +} +``` + +instead. + +## ignore(options) + +### `options.ignorecase` since 4.0.0 + +Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (the default value), otherwise case sensitive. + +```js +const ig = ignore({ + ignorecase: false +}) + +ig.add('*.png') + +ig.ignores('*.PNG') // false +``` + +### `options.ignoreCase?: boolean` since 5.2.0 + +Which is alternative to `options.ignoreCase` + +### `options.allowRelativePaths?: boolean` since 5.2.0 + +This option brings backward compatibility with projects which based on `ignore@4.x`. If `options.allowRelativePaths` is `true`, `ignore` will not check whether the given path to be tested is [`path.relative()`d](#pathname-conventions). + +However, passing a relative path, such as `'./foo'` or `'../foo'`, to test if it is ignored or not is not a good practise, which might lead to unexpected behavior + +```js +ignore({ + allowRelativePaths: true +}).ignores('../foo/bar.js') // And it will not throw +``` + +**** + +# Upgrade Guide + +## Upgrade 4.x -> 5.x + +Since `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, unless `options.allowRelative = true` is passed to the `Ignore` factory. + +While `ignore < 5.0.0` did not make sure what the return value was, as well as + +```ts +.ignores(pathname: Pathname): boolean + +.filter(pathnames: Array): Array + +.createFilter(): (pathname: Pathname) => boolean + +.test(pathname: Pathname): {ignored: boolean, unignored: boolean} +``` + +See the convention [here](#1-pathname-should-be-a-pathrelatived-pathname) for details. + +If there are invalid pathnames, the conversion and filtration should be done by users. + +```js +import {isPathValid} from 'ignore' // introduced in 5.0.0 + +const paths = [ + // invalid + ////////////////// + '', + false, + '../foo', + '.', + ////////////////// + + // valid + 'foo' +] +.filter(isPathValid) + +ig.filter(paths) +``` + +## Upgrade 3.x -> 4.x + +Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6: + +```js +var ignore = require('ignore/legacy') +``` + +## Upgrade 2.x -> 3.x + +- All `options` of 2.x are unnecessary and removed, so just remove them. +- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed. +- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details. + +**** + +# Collaborators + +- [@whitecolor](https://github.com/whitecolor) *Alex* +- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé* +- [@azproduction](https://github.com/azproduction) *Mikhail Davydov* +- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin* +- [@JanMattner](https://github.com/JanMattner) *Jan Mattner* +- [@ntwb](https://github.com/ntwb) *Stephen Edgar* +- [@kasperisager](https://github.com/kasperisager) *Kasper Isager* +- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders* diff --git a/node_modules/ignore/index.d.ts b/node_modules/ignore/index.d.ts new file mode 100644 index 0000000000..f6912595a3 --- /dev/null +++ b/node_modules/ignore/index.d.ts @@ -0,0 +1,81 @@ +type Pathname = string + +interface IgnoreRule { + pattern: string + mark?: string + negative: boolean +} + +interface TestResult { + ignored: boolean + unignored: boolean + rule?: IgnoreRule +} + +interface PatternParams { + pattern: string + mark?: string +} + +/** + * Creates new ignore manager. + */ +declare function ignore(options?: ignore.Options): ignore.Ignore +declare namespace ignore { + interface Ignore { + /** + * Adds one or several rules to the current manager. + * @param {string[]} patterns + * @returns IgnoreBase + */ + add( + patterns: string | Ignore | readonly (string | Ignore)[] | PatternParams + ): this + + /** + * Filters the given array of pathnames, and returns the filtered array. + * NOTICE that each path here should be a relative path to the root of your repository. + * @param paths the array of paths to be filtered. + * @returns The filtered array of paths + */ + filter(pathnames: readonly Pathname[]): Pathname[] + + /** + * Creates a filter function which could filter + * an array of paths with Array.prototype.filter. + */ + createFilter(): (pathname: Pathname) => boolean + + /** + * Returns Boolean whether pathname should be ignored. + * @param {string} pathname a path to check + * @returns boolean + */ + ignores(pathname: Pathname): boolean + + /** + * Returns whether pathname should be ignored or unignored + * @param {string} pathname a path to check + * @returns TestResult + */ + test(pathname: Pathname): TestResult + + /** + * Debugs ignore rules and returns the checking result, which is + * equivalent to `git check-ignore -v`. + * @returns TestResult + */ + checkIgnore(pathname: Pathname): TestResult + } + + interface Options { + ignorecase?: boolean + // For compatibility + ignoreCase?: boolean + allowRelativePaths?: boolean + } + + function isPathValid(pathname: string): boolean +} + +export = ignore diff --git a/node_modules/ignore/index.js b/node_modules/ignore/index.js new file mode 100644 index 0000000000..99aacbde04 --- /dev/null +++ b/node_modules/ignore/index.js @@ -0,0 +1,779 @@ +// A simple implementation of make-array +function makeArray (subject) { + return Array.isArray(subject) + ? subject + : [subject] +} + +const UNDEFINED = undefined +const EMPTY = '' +const SPACE = ' ' +const ESCAPE = '\\' +const REGEX_TEST_BLANK_LINE = /^\s+$/ +const REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/ +const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ +const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ +const REGEX_SPLITALL_CRLF = /\r?\n/g + +// Invalid: +// - /foo, +// - ./foo, +// - ../foo, +// - . +// - .. +// Valid: +// - .foo +const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ + +const REGEX_TEST_TRAILING_SLASH = /\/$/ + +const SLASH = '/' + +// Do not use ternary expression here, since "istanbul ignore next" is buggy +let TMP_KEY_IGNORE = 'node-ignore' +/* istanbul ignore else */ +if (typeof Symbol !== 'undefined') { + TMP_KEY_IGNORE = Symbol.for('node-ignore') +} +const KEY_IGNORE = TMP_KEY_IGNORE + +const define = (object, key, value) => { + Object.defineProperty(object, key, {value}) + return value +} + +const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g + +const RETURN_FALSE = () => false + +// Sanitize the range of a regular expression +// The cases are complicated, see test cases for details +const sanitizeRange = range => range.replace( + REGEX_REGEXP_RANGE, + (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) + ? match + // Invalid range (out of order) which is ok for gitignore rules but + // fatal for JavaScript regular expression, so eliminate it. + : EMPTY +) + +// See fixtures #59 +const cleanRangeBackSlash = slashes => { + const {length} = slashes + return slashes.slice(0, length - length % 2) +} + +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` + +// '`foo/`' should not continue with the '`..`' +const REPLACERS = [ + + [ + // Remove BOM + // TODO: + // Other similar zero-width characters? + /^\uFEFF/, + () => EMPTY + ], + + // > Trailing spaces are ignored unless they are quoted with backslash ("\") + [ + // (a\ ) -> (a ) + // (a ) -> (a) + // (a ) -> (a) + // (a \ ) -> (a ) + /((?:\\\\)*?)(\\?\s+)$/, + (_, m1, m2) => m1 + ( + m2.indexOf('\\') === 0 + ? SPACE + : EMPTY + ) + ], + + // Replace (\ ) with ' ' + // (\ ) -> ' ' + // (\\ ) -> '\\ ' + // (\\\ ) -> '\\ ' + [ + /(\\+?)\s/g, + (_, m1) => { + const {length} = m1 + return m1.slice(0, length - length % 2) + SPACE + } + ], + + // Escape metacharacters + // which is written down by users but means special for regular expressions. + + // > There are 12 characters with special meanings: + // > - the backslash \, + // > - the caret ^, + // > - the dollar sign $, + // > - the period or dot ., + // > - the vertical bar or pipe symbol |, + // > - the question mark ?, + // > - the asterisk or star *, + // > - the plus sign +, + // > - the opening parenthesis (, + // > - the closing parenthesis ), + // > - and the opening square bracket [, + // > - the opening curly brace {, + // > These special characters are often called "metacharacters". + [ + /[\\$.|*+(){^]/g, + match => `\\${match}` + ], + + [ + // > a question mark (?) matches a single character + /(?!\\)\?/g, + () => '[^/]' + ], + + // leading slash + [ + + // > A leading slash matches the beginning of the pathname. + // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". + // A leading slash matches the beginning of the pathname + /^\//, + () => '^' + ], + + // replace special metacharacter slash after the leading slash + [ + /\//g, + () => '\\/' + ], + + [ + // > A leading "**" followed by a slash means match in all directories. + // > For example, "**/foo" matches file or directory "foo" anywhere, + // > the same as pattern "foo". + // > "**/foo/bar" matches file or directory "bar" anywhere that is directly + // > under directory "foo". + // Notice that the '*'s have been replaced as '\\*' + /^\^*\\\*\\\*\\\//, + + // '**/foo' <-> 'foo' + () => '^(?:.*\\/)?' + ], + + // starting + [ + // there will be no leading '/' + // (which has been replaced by section "leading slash") + // If starts with '**', adding a '^' to the regular expression also works + /^(?=[^^])/, + function startingReplacer () { + // If has a slash `/` at the beginning or middle + return !/\/(?!$)/.test(this) + // > Prior to 2.22.1 + // > If the pattern does not contain a slash /, + // > Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, + // git also treats it as a shell glob pattern + + // After 2.22.1 (compatible but clearer) + // > If there is a separator at the beginning or middle (or both) + // > of the pattern, then the pattern is relative to the directory + // > level of the particular .gitignore file itself. + // > Otherwise the pattern may also match at any level below + // > the .gitignore level. + ? '(?:^|\\/)' + + // > Otherwise, Git treats the pattern as a shell glob suitable for + // > consumption by fnmatch(3) + : '^' + } + ], + + // two globstars + [ + // Use lookahead assertions so that we could match more than one `'/**'` + /\\\/\\\*\\\*(?=\\\/|$)/g, + + // Zero, one or several directories + // should not use '*', or it will be replaced by the next replacer + + // Check if it is not the last `'/**'` + (_, index, str) => index + 6 < str.length + + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches + // > zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' + + // case: /** + // > A trailing `"/**"` matches everything inside. + + // #21: everything inside but it should not include the current folder + : '\\/.+' + ], + + // normal intermediate wildcards + [ + // Never replace escaped '*' + // ignore rule '\*' will match the path '*' + + // 'abc.*/' -> go + // 'abc.*' -> skip this rule, + // coz trailing single wildcard will be handed by [trailing wildcard] + /(^|[^\\]+)(\\\*)+(?=.+)/g, + + // '*.js' matches '.js' + // '*.js' doesn't match 'abc' + (_, p1, p2) => { + // 1. + // > An asterisk "*" matches anything except a slash. + // 2. + // > Other consecutive asterisks are considered regular asterisks + // > and will match according to the previous rules. + const unescaped = p2.replace(/\\\*/g, '[^\\/]*') + return p1 + unescaped + } + ], + + [ + // unescape, revert step 3 except for back slash + // For example, if a user escape a '\\*', + // after step 3, the result will be '\\\\\\*' + /\\\\\\(?=[$.|*+(){^])/g, + () => ESCAPE + ], + + [ + // '\\\\' -> '\\' + /\\\\/g, + () => ESCAPE + ], + + [ + // > The range notation, e.g. [a-zA-Z], + // > can be used to match one of the characters in a range. + + // `\` is escaped by step 3 + /(\\)?\[([^\]/]*?)(\\*)($|\])/g, + (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE + // '\\[bar]' -> '\\\\[bar\\]' + ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` + : close === ']' + ? endEscape.length % 2 === 0 + // A normal case, and it is a range notation + // '[bar]' + // '[bar\\\\]' + ? `[${sanitizeRange(range)}${endEscape}]` + // Invalid range notaton + // '[bar\\]' -> '[bar\\\\]' + : '[]' + : '[]' + ], + + // ending + [ + // 'js' will not match 'js.' + // 'ab' will not match 'abc' + /(?:[^*])$/, + + // WTF! + // https://git-scm.com/docs/gitignore + // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) + // which re-fixes #24, #38 + + // > If there is a separator at the end of the pattern then the pattern + // > will only match directories, otherwise the pattern can match both + // > files and directories. + + // 'js*' will not match 'a.js' + // 'js/' will not match 'a.js' + // 'js' will match 'a.js' and 'a.js/' + match => /\/$/.test(match) + // foo/ will not match 'foo' + ? `${match}$` + // foo matches 'foo' and 'foo/' + : `${match}(?=$|\\/$)` + ] +] + +const REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/ +const MODE_IGNORE = 'regex' +const MODE_CHECK_IGNORE = 'checkRegex' +const UNDERSCORE = '_' + +const TRAILING_WILD_CARD_REPLACERS = { + [MODE_IGNORE] (_, p1) { + const prefix = p1 + // '\^': + // '/*' does not match EMPTY + // '/*' does not match everything + + // '\\\/': + // 'abc/*' does not match 'abc/' + ? `${p1}[^/]+` + + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*' + + return `${prefix}(?=$|\\/$)` + }, + + [MODE_CHECK_IGNORE] (_, p1) { + // When doing `git check-ignore` + const prefix = p1 + // '\\\/': + // 'abc/*' DOES match 'abc/' ! + ? `${p1}[^/]*` + + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*' + + return `${prefix}(?=$|\\/$)` + } +} + +// @param {pattern} +const makeRegexPrefix = pattern => REPLACERS.reduce( + (prev, [matcher, replacer]) => + prev.replace(matcher, replacer.bind(pattern)), + pattern +) + +const isString = subject => typeof subject === 'string' + +// > A blank line matches no files, so it can serve as a separator for readability. +const checkPattern = pattern => pattern + && isString(pattern) + && !REGEX_TEST_BLANK_LINE.test(pattern) + && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) + + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0 + +const splitPattern = pattern => pattern +.split(REGEX_SPLITALL_CRLF) +.filter(Boolean) + +class IgnoreRule { + constructor ( + pattern, + mark, + body, + ignoreCase, + negative, + prefix + ) { + this.pattern = pattern + this.mark = mark + this.negative = negative + + define(this, 'body', body) + define(this, 'ignoreCase', ignoreCase) + define(this, 'regexPrefix', prefix) + } + + get regex () { + const key = UNDERSCORE + MODE_IGNORE + + if (this[key]) { + return this[key] + } + + return this._make(MODE_IGNORE, key) + } + + get checkRegex () { + const key = UNDERSCORE + MODE_CHECK_IGNORE + + if (this[key]) { + return this[key] + } + + return this._make(MODE_CHECK_IGNORE, key) + } + + _make (mode, key) { + const str = this.regexPrefix.replace( + REGEX_REPLACE_TRAILING_WILDCARD, + + // It does not need to bind pattern + TRAILING_WILD_CARD_REPLACERS[mode] + ) + + const regex = this.ignoreCase + ? new RegExp(str, 'i') + : new RegExp(str) + + return define(this, key, regex) + } +} + +const createRule = ({ + pattern, + mark +}, ignoreCase) => { + let negative = false + let body = pattern + + // > An optional prefix "!" which negates the pattern; + if (body.indexOf('!') === 0) { + negative = true + body = body.substr(1) + } + + body = body + // > Put a backslash ("\") in front of the first "!" for patterns that + // > begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that + // > begin with a hash. + .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#') + + const regexPrefix = makeRegexPrefix(body) + + return new IgnoreRule( + pattern, + mark, + body, + ignoreCase, + negative, + regexPrefix + ) +} + +class RuleManager { + constructor (ignoreCase) { + this._ignoreCase = ignoreCase + this._rules = [] + } + + _add (pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules._rules) + this._added = true + return + } + + if (isString(pattern)) { + pattern = { + pattern + } + } + + if (checkPattern(pattern.pattern)) { + const rule = createRule(pattern, this._ignoreCase) + this._added = true + this._rules.push(rule) + } + } + + // @param {Array | string | Ignore} pattern + add (pattern) { + this._added = false + + makeArray( + isString(pattern) + ? splitPattern(pattern) + : pattern + ).forEach(this._add, this) + + return this._added + } + + // Test one single path without recursively checking parent directories + // + // - checkUnignored `boolean` whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. + // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` + + // @returns {TestResult} true if a file is ignored + test (path, checkUnignored, mode) { + let ignored = false + let unignored = false + let matchedRule + + this._rules.forEach(rule => { + const {negative} = rule + + // | ignored : unignored + // -------- | --------------------------------------- + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X + + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen + if ( + unignored === negative && ignored !== unignored + || negative && !ignored && !unignored && !checkUnignored + ) { + return + } + + const matched = rule[mode].test(path) + + if (!matched) { + return + } + + ignored = !negative + unignored = negative + + matchedRule = negative + ? UNDEFINED + : rule + }) + + const ret = { + ignored, + unignored + } + + if (matchedRule) { + ret.rule = matchedRule + } + + return ret + } +} + +const throwError = (message, Ctor) => { + throw new Ctor(message) +} + +const checkPath = (path, originalPath, doThrow) => { + if (!isString(path)) { + return doThrow( + `path must be a string, but got \`${originalPath}\``, + TypeError + ) + } + + // We don't know if we should ignore EMPTY, so throw + if (!path) { + return doThrow(`path must not be empty`, TypeError) + } + + // Check if it is a relative path + if (checkPath.isNotRelative(path)) { + const r = '`path.relative()`d' + return doThrow( + `path should be a ${r} string, but got "${originalPath}"`, + RangeError + ) + } + + return true +} + +const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path) + +checkPath.isNotRelative = isNotRelative + +// On windows, the following function will be replaced +/* istanbul ignore next */ +checkPath.convert = p => p + + +class Ignore { + constructor ({ + ignorecase = true, + ignoreCase = ignorecase, + allowRelativePaths = false + } = {}) { + define(this, KEY_IGNORE, true) + + this._rules = new RuleManager(ignoreCase) + this._strictPathCheck = !allowRelativePaths + this._initCache() + } + + _initCache () { + // A cache for the result of `.ignores()` + this._ignoreCache = Object.create(null) + + // A cache for the result of `.test()` + this._testCache = Object.create(null) + } + + add (pattern) { + if (this._rules.add(pattern)) { + // Some rules have just added to the ignore, + // making the behavior changed, + // so we need to re-initialize the result cache + this._initCache() + } + + return this + } + + // legacy + addPattern (pattern) { + return this.add(pattern) + } + + // @returns {TestResult} + _test (originalPath, cache, checkUnignored, slices) { + const path = originalPath + // Supports nullable path + && checkPath.convert(originalPath) + + checkPath( + path, + originalPath, + this._strictPathCheck + ? throwError + : RETURN_FALSE + ) + + return this._t(path, cache, checkUnignored, slices) + } + + checkIgnore (path) { + // If the path doest not end with a slash, `.ignores()` is much equivalent + // to `git check-ignore` + if (!REGEX_TEST_TRAILING_SLASH.test(path)) { + return this.test(path) + } + + const slices = path.split(SLASH).filter(Boolean) + slices.pop() + + if (slices.length) { + const parent = this._t( + slices.join(SLASH) + SLASH, + this._testCache, + true, + slices + ) + + if (parent.ignored) { + return parent + } + } + + return this._rules.test(path, false, MODE_CHECK_IGNORE) + } + + _t ( + // The path to be tested + path, + + // The cache for the result of a certain checking + cache, + + // Whether should check if the path is unignored + checkUnignored, + + // The path slices + slices + ) { + if (path in cache) { + return cache[path] + } + + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH).filter(Boolean) + } + + slices.pop() + + // If the path has no parent directory, just test it + if (!slices.length) { + return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE) + } + + const parent = this._t( + slices.join(SLASH) + SLASH, + cache, + checkUnignored, + slices + ) + + // If the path contains a parent directory, check the parent first + return cache[path] = parent.ignored + // > It is not possible to re-include a file if a parent directory of + // > that file is excluded. + ? parent + : this._rules.test(path, checkUnignored, MODE_IGNORE) + } + + ignores (path) { + return this._test(path, this._ignoreCache, false).ignored + } + + createFilter () { + return path => !this.ignores(path) + } + + filter (paths) { + return makeArray(paths).filter(this.createFilter()) + } + + // @returns {TestResult} + test (path) { + return this._test(path, this._testCache, true) + } +} + +const factory = options => new Ignore(options) + +const isPathValid = path => + checkPath(path && checkPath.convert(path), path, RETURN_FALSE) + + +// Windows +// -------------------------------------------------------------- +/* istanbul ignore next */ +if ( + // Detect `process` so that it can run in browsers. + typeof process !== 'undefined' + && ( + process.env && process.env.IGNORE_TEST_WIN32 + || process.platform === 'win32' + ) +) { + /* eslint no-control-regex: "off" */ + const makePosix = str => /^\\\\\?\\/.test(str) + || /["<>|\u0000-\u001F]+/u.test(str) + ? str + : str.replace(/\\/g, '/') + + checkPath.convert = makePosix + + // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' + // 'd:\\foo' + const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i + checkPath.isNotRelative = path => + REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) + || isNotRelative(path) +} + +// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// + +module.exports = factory + +// Although it is an anti-pattern, +// it is still widely misused by a lot of libraries in github +// Ref: https://github.com/search?q=ignore.default%28%29&type=code +factory.default = factory + +module.exports.isPathValid = isPathValid diff --git a/node_modules/ignore/legacy.js b/node_modules/ignore/legacy.js new file mode 100644 index 0000000000..fe9d3a242b --- /dev/null +++ b/node_modules/ignore/legacy.js @@ -0,0 +1,673 @@ +"use strict"; + +var _TRAILING_WILD_CARD_R; +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +// A simple implementation of make-array +function makeArray(subject) { + return Array.isArray(subject) ? subject : [subject]; +} +var UNDEFINED = undefined; +var EMPTY = ''; +var SPACE = ' '; +var ESCAPE = '\\'; +var REGEX_TEST_BLANK_LINE = /^\s+$/; +var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; +var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; +var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; +var REGEX_SPLITALL_CRLF = /\r?\n/g; + +// Invalid: +// - /foo, +// - ./foo, +// - ../foo, +// - . +// - .. +// Valid: +// - .foo +var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; +var REGEX_TEST_TRAILING_SLASH = /\/$/; +var SLASH = '/'; + +// Do not use ternary expression here, since "istanbul ignore next" is buggy +var TMP_KEY_IGNORE = 'node-ignore'; +/* istanbul ignore else */ +if (typeof Symbol !== 'undefined') { + TMP_KEY_IGNORE = Symbol["for"]('node-ignore'); +} +var KEY_IGNORE = TMP_KEY_IGNORE; +var define = function define(object, key, value) { + Object.defineProperty(object, key, { + value: value + }); + return value; +}; +var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; +var RETURN_FALSE = function RETURN_FALSE() { + return false; +}; + +// Sanitize the range of a regular expression +// The cases are complicated, see test cases for details +var sanitizeRange = function sanitizeRange(range) { + return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) { + return from.charCodeAt(0) <= to.charCodeAt(0) ? match + // Invalid range (out of order) which is ok for gitignore rules but + // fatal for JavaScript regular expression, so eliminate it. + : EMPTY; + }); +}; + +// See fixtures #59 +var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) { + var length = slashes.length; + return slashes.slice(0, length - length % 2); +}; + +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` + +// '`foo/`' should not continue with the '`..`' +var REPLACERS = [[ +// Remove BOM +// TODO: +// Other similar zero-width characters? +/^\uFEFF/, function () { + return EMPTY; +}], +// > Trailing spaces are ignored unless they are quoted with backslash ("\") +[ +// (a\ ) -> (a ) +// (a ) -> (a) +// (a ) -> (a) +// (a \ ) -> (a ) +/((?:\\\\)*?)(\\?\s+)$/, function (_, m1, m2) { + return m1 + (m2.indexOf('\\') === 0 ? SPACE : EMPTY); +}], +// Replace (\ ) with ' ' +// (\ ) -> ' ' +// (\\ ) -> '\\ ' +// (\\\ ) -> '\\ ' +[/(\\+?)\s/g, function (_, m1) { + var length = m1.length; + return m1.slice(0, length - length % 2) + SPACE; +}], +// Escape metacharacters +// which is written down by users but means special for regular expressions. + +// > There are 12 characters with special meanings: +// > - the backslash \, +// > - the caret ^, +// > - the dollar sign $, +// > - the period or dot ., +// > - the vertical bar or pipe symbol |, +// > - the question mark ?, +// > - the asterisk or star *, +// > - the plus sign +, +// > - the opening parenthesis (, +// > - the closing parenthesis ), +// > - and the opening square bracket [, +// > - the opening curly brace {, +// > These special characters are often called "metacharacters". +[/[\\$.|*+(){^]/g, function (match) { + return "\\".concat(match); +}], [ +// > a question mark (?) matches a single character +/(?!\\)\?/g, function () { + return '[^/]'; +}], +// leading slash +[ +// > A leading slash matches the beginning of the pathname. +// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". +// A leading slash matches the beginning of the pathname +/^\//, function () { + return '^'; +}], +// replace special metacharacter slash after the leading slash +[/\//g, function () { + return '\\/'; +}], [ +// > A leading "**" followed by a slash means match in all directories. +// > For example, "**/foo" matches file or directory "foo" anywhere, +// > the same as pattern "foo". +// > "**/foo/bar" matches file or directory "bar" anywhere that is directly +// > under directory "foo". +// Notice that the '*'s have been replaced as '\\*' +/^\^*\\\*\\\*\\\//, +// '**/foo' <-> 'foo' +function () { + return '^(?:.*\\/)?'; +}], +// starting +[ +// there will be no leading '/' +// (which has been replaced by section "leading slash") +// If starts with '**', adding a '^' to the regular expression also works +/^(?=[^^])/, function startingReplacer() { + // If has a slash `/` at the beginning or middle + return !/\/(?!$)/.test(this) + // > Prior to 2.22.1 + // > If the pattern does not contain a slash /, + // > Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, + // git also treats it as a shell glob pattern + + // After 2.22.1 (compatible but clearer) + // > If there is a separator at the beginning or middle (or both) + // > of the pattern, then the pattern is relative to the directory + // > level of the particular .gitignore file itself. + // > Otherwise the pattern may also match at any level below + // > the .gitignore level. + ? '(?:^|\\/)' + + // > Otherwise, Git treats the pattern as a shell glob suitable for + // > consumption by fnmatch(3) + : '^'; +}], +// two globstars +[ +// Use lookahead assertions so that we could match more than one `'/**'` +/\\\/\\\*\\\*(?=\\\/|$)/g, +// Zero, one or several directories +// should not use '*', or it will be replaced by the next replacer + +// Check if it is not the last `'/**'` +function (_, index, str) { + return index + 6 < str.length + + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches + // > zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' + + // case: /** + // > A trailing `"/**"` matches everything inside. + + // #21: everything inside but it should not include the current folder + : '\\/.+'; +}], +// normal intermediate wildcards +[ +// Never replace escaped '*' +// ignore rule '\*' will match the path '*' + +// 'abc.*/' -> go +// 'abc.*' -> skip this rule, +// coz trailing single wildcard will be handed by [trailing wildcard] +/(^|[^\\]+)(\\\*)+(?=.+)/g, +// '*.js' matches '.js' +// '*.js' doesn't match 'abc' +function (_, p1, p2) { + // 1. + // > An asterisk "*" matches anything except a slash. + // 2. + // > Other consecutive asterisks are considered regular asterisks + // > and will match according to the previous rules. + var unescaped = p2.replace(/\\\*/g, '[^\\/]*'); + return p1 + unescaped; +}], [ +// unescape, revert step 3 except for back slash +// For example, if a user escape a '\\*', +// after step 3, the result will be '\\\\\\*' +/\\\\\\(?=[$.|*+(){^])/g, function () { + return ESCAPE; +}], [ +// '\\\\' -> '\\' +/\\\\/g, function () { + return ESCAPE; +}], [ +// > The range notation, e.g. [a-zA-Z], +// > can be used to match one of the characters in a range. + +// `\` is escaped by step 3 +/(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) { + return leadEscape === ESCAPE + // '\\[bar]' -> '\\\\[bar\\]' + ? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0 + // A normal case, and it is a range notation + // '[bar]' + // '[bar\\\\]' + ? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton + // '[bar\\]' -> '[bar\\\\]' + : '[]' : '[]'; +}], +// ending +[ +// 'js' will not match 'js.' +// 'ab' will not match 'abc' +/(?:[^*])$/, +// WTF! +// https://git-scm.com/docs/gitignore +// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) +// which re-fixes #24, #38 + +// > If there is a separator at the end of the pattern then the pattern +// > will only match directories, otherwise the pattern can match both +// > files and directories. + +// 'js*' will not match 'a.js' +// 'js/' will not match 'a.js' +// 'js' will match 'a.js' and 'a.js/' +function (match) { + return /\/$/.test(match) + // foo/ will not match 'foo' + ? "".concat(match, "$") // foo matches 'foo' and 'foo/' + : "".concat(match, "(?=$|\\/$)"); +}]]; +var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/; +var MODE_IGNORE = 'regex'; +var MODE_CHECK_IGNORE = 'checkRegex'; +var UNDERSCORE = '_'; +var TRAILING_WILD_CARD_REPLACERS = (_TRAILING_WILD_CARD_R = {}, _defineProperty(_TRAILING_WILD_CARD_R, MODE_IGNORE, function (_, p1) { + var prefix = p1 + // '\^': + // '/*' does not match EMPTY + // '/*' does not match everything + + // '\\\/': + // 'abc/*' does not match 'abc/' + ? "".concat(p1, "[^/]+") // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*'; + return "".concat(prefix, "(?=$|\\/$)"); +}), _defineProperty(_TRAILING_WILD_CARD_R, MODE_CHECK_IGNORE, function (_, p1) { + // When doing `git check-ignore` + var prefix = p1 + // '\\\/': + // 'abc/*' DOES match 'abc/' ! + ? "".concat(p1, "[^/]*") // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*'; + return "".concat(prefix, "(?=$|\\/$)"); +}), _TRAILING_WILD_CARD_R); + +// @param {pattern} +var makeRegexPrefix = function makeRegexPrefix(pattern) { + return REPLACERS.reduce(function (prev, _ref) { + var _ref2 = _slicedToArray(_ref, 2), + matcher = _ref2[0], + replacer = _ref2[1]; + return prev.replace(matcher, replacer.bind(pattern)); + }, pattern); +}; +var isString = function isString(subject) { + return typeof subject === 'string'; +}; + +// > A blank line matches no files, so it can serve as a separator for readability. +var checkPattern = function checkPattern(pattern) { + return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) + + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0; +}; +var splitPattern = function splitPattern(pattern) { + return pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean); +}; +var IgnoreRule = /*#__PURE__*/function () { + function IgnoreRule(pattern, mark, body, ignoreCase, negative, prefix) { + _classCallCheck(this, IgnoreRule); + this.pattern = pattern; + this.mark = mark; + this.negative = negative; + define(this, 'body', body); + define(this, 'ignoreCase', ignoreCase); + define(this, 'regexPrefix', prefix); + } + _createClass(IgnoreRule, [{ + key: "regex", + get: function get() { + var key = UNDERSCORE + MODE_IGNORE; + if (this[key]) { + return this[key]; + } + return this._make(MODE_IGNORE, key); + } + }, { + key: "checkRegex", + get: function get() { + var key = UNDERSCORE + MODE_CHECK_IGNORE; + if (this[key]) { + return this[key]; + } + return this._make(MODE_CHECK_IGNORE, key); + } + }, { + key: "_make", + value: function _make(mode, key) { + var str = this.regexPrefix.replace(REGEX_REPLACE_TRAILING_WILDCARD, + // It does not need to bind pattern + TRAILING_WILD_CARD_REPLACERS[mode]); + var regex = this.ignoreCase ? new RegExp(str, 'i') : new RegExp(str); + return define(this, key, regex); + } + }]); + return IgnoreRule; +}(); +var createRule = function createRule(_ref3, ignoreCase) { + var pattern = _ref3.pattern, + mark = _ref3.mark; + var negative = false; + var body = pattern; + + // > An optional prefix "!" which negates the pattern; + if (body.indexOf('!') === 0) { + negative = true; + body = body.substr(1); + } + body = body + // > Put a backslash ("\") in front of the first "!" for patterns that + // > begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that + // > begin with a hash. + .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); + var regexPrefix = makeRegexPrefix(body); + return new IgnoreRule(pattern, mark, body, ignoreCase, negative, regexPrefix); +}; +var RuleManager = /*#__PURE__*/function () { + function RuleManager(ignoreCase) { + _classCallCheck(this, RuleManager); + this._ignoreCase = ignoreCase; + this._rules = []; + } + _createClass(RuleManager, [{ + key: "_add", + value: function _add(pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules._rules); + this._added = true; + return; + } + if (isString(pattern)) { + pattern = { + pattern: pattern + }; + } + if (checkPattern(pattern.pattern)) { + var rule = createRule(pattern, this._ignoreCase); + this._added = true; + this._rules.push(rule); + } + } + + // @param {Array | string | Ignore} pattern + }, { + key: "add", + value: function add(pattern) { + this._added = false; + makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._add, this); + return this._added; + } + + // Test one single path without recursively checking parent directories + // + // - checkUnignored `boolean` whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. + // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` + + // @returns {TestResult} true if a file is ignored + }, { + key: "test", + value: function test(path, checkUnignored, mode) { + var ignored = false; + var unignored = false; + var matchedRule; + this._rules.forEach(function (rule) { + var negative = rule.negative; + + // | ignored : unignored + // -------- | --------------------------------------- + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X + + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen + if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { + return; + } + var matched = rule[mode].test(path); + if (!matched) { + return; + } + ignored = !negative; + unignored = negative; + matchedRule = negative ? UNDEFINED : rule; + }); + var ret = { + ignored: ignored, + unignored: unignored + }; + if (matchedRule) { + ret.rule = matchedRule; + } + return ret; + } + }]); + return RuleManager; +}(); +var throwError = function throwError(message, Ctor) { + throw new Ctor(message); +}; +var checkPath = function checkPath(path, originalPath, doThrow) { + if (!isString(path)) { + return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError); + } + + // We don't know if we should ignore EMPTY, so throw + if (!path) { + return doThrow("path must not be empty", TypeError); + } + + // Check if it is a relative path + if (checkPath.isNotRelative(path)) { + var r = '`path.relative()`d'; + return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError); + } + return true; +}; +var isNotRelative = function isNotRelative(path) { + return REGEX_TEST_INVALID_PATH.test(path); +}; +checkPath.isNotRelative = isNotRelative; + +// On windows, the following function will be replaced +/* istanbul ignore next */ +checkPath.convert = function (p) { + return p; +}; +var Ignore = /*#__PURE__*/function () { + function Ignore() { + var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref4$ignorecase = _ref4.ignorecase, + ignorecase = _ref4$ignorecase === void 0 ? true : _ref4$ignorecase, + _ref4$ignoreCase = _ref4.ignoreCase, + ignoreCase = _ref4$ignoreCase === void 0 ? ignorecase : _ref4$ignoreCase, + _ref4$allowRelativePa = _ref4.allowRelativePaths, + allowRelativePaths = _ref4$allowRelativePa === void 0 ? false : _ref4$allowRelativePa; + _classCallCheck(this, Ignore); + define(this, KEY_IGNORE, true); + this._rules = new RuleManager(ignoreCase); + this._strictPathCheck = !allowRelativePaths; + this._initCache(); + } + _createClass(Ignore, [{ + key: "_initCache", + value: function _initCache() { + // A cache for the result of `.ignores()` + this._ignoreCache = Object.create(null); + + // A cache for the result of `.test()` + this._testCache = Object.create(null); + } + }, { + key: "add", + value: function add(pattern) { + if (this._rules.add(pattern)) { + // Some rules have just added to the ignore, + // making the behavior changed, + // so we need to re-initialize the result cache + this._initCache(); + } + return this; + } + + // legacy + }, { + key: "addPattern", + value: function addPattern(pattern) { + return this.add(pattern); + } + + // @returns {TestResult} + }, { + key: "_test", + value: function _test(originalPath, cache, checkUnignored, slices) { + var path = originalPath + // Supports nullable path + && checkPath.convert(originalPath); + checkPath(path, originalPath, this._strictPathCheck ? throwError : RETURN_FALSE); + return this._t(path, cache, checkUnignored, slices); + } + }, { + key: "checkIgnore", + value: function checkIgnore(path) { + // If the path doest not end with a slash, `.ignores()` is much equivalent + // to `git check-ignore` + if (!REGEX_TEST_TRAILING_SLASH.test(path)) { + return this.test(path); + } + var slices = path.split(SLASH).filter(Boolean); + slices.pop(); + if (slices.length) { + var parent = this._t(slices.join(SLASH) + SLASH, this._testCache, true, slices); + if (parent.ignored) { + return parent; + } + } + return this._rules.test(path, false, MODE_CHECK_IGNORE); + } + }, { + key: "_t", + value: function _t( + // The path to be tested + path, + // The cache for the result of a certain checking + cache, + // Whether should check if the path is unignored + checkUnignored, + // The path slices + slices) { + if (path in cache) { + return cache[path]; + } + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH).filter(Boolean); + } + slices.pop(); + + // If the path has no parent directory, just test it + if (!slices.length) { + return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE); + } + var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices); + + // If the path contains a parent directory, check the parent first + return cache[path] = parent.ignored + // > It is not possible to re-include a file if a parent directory of + // > that file is excluded. + ? parent : this._rules.test(path, checkUnignored, MODE_IGNORE); + } + }, { + key: "ignores", + value: function ignores(path) { + return this._test(path, this._ignoreCache, false).ignored; + } + }, { + key: "createFilter", + value: function createFilter() { + var _this = this; + return function (path) { + return !_this.ignores(path); + }; + } + }, { + key: "filter", + value: function filter(paths) { + return makeArray(paths).filter(this.createFilter()); + } + + // @returns {TestResult} + }, { + key: "test", + value: function test(path) { + return this._test(path, this._testCache, true); + } + }]); + return Ignore; +}(); +var factory = function factory(options) { + return new Ignore(options); +}; +var isPathValid = function isPathValid(path) { + return checkPath(path && checkPath.convert(path), path, RETURN_FALSE); +}; + +// Windows +// -------------------------------------------------------------- +/* istanbul ignore next */ +if ( +// Detect `process` so that it can run in browsers. +typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) { + /* eslint no-control-regex: "off" */ + var makePosix = function makePosix(str) { + return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/'); + }; + checkPath.convert = makePosix; + + // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' + // 'd:\\foo' + var REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; + checkPath.isNotRelative = function (path) { + return REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path); + }; +} + +// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// + +module.exports = factory; + +// Although it is an anti-pattern, +// it is still widely misused by a lot of libraries in github +// Ref: https://github.com/search?q=ignore.default%28%29&type=code +factory["default"] = factory; +module.exports.isPathValid = isPathValid; diff --git a/node_modules/ignore/package.json b/node_modules/ignore/package.json new file mode 100644 index 0000000000..b0608c32e8 --- /dev/null +++ b/node_modules/ignore/package.json @@ -0,0 +1,88 @@ +{ + "name": "ignore", + "version": "7.0.3", + "description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.", + "types": "index.d.ts", + "files": [ + "legacy.js", + "index.js", + "index.d.ts", + "LICENSE-MIT" + ], + "scripts": { + "prepublishOnly": "npm run build", + "build": "babel -o legacy.js index.js", + + "==================== linting ======================": "", + "lint": "eslint .", + + "===================== import ======================": "", + "ts": "npm run test:ts && npm run test:16", + "test:ts": "ts-node ./test/import/simple.ts", + "test:16": "npm run test:ts:16 && npm run test:cjs:16 && npm run test:mjs:16", + "test:ts:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.ts && tsc ./test/import/simple.ts --lib ES6 --moduleResolution Node16 --module Node16 && node ./test/import/simple.js", + "test:cjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.cjs", + "test:mjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.mjs && babel -o ./test/import/simple-mjs.js ./test/import/simple.mjs && node ./test/import/simple-mjs.js", + + "===================== cases =======================": "", + "test:cases": "npm run tap test/*.test.js -- --coverage", + "tap": "tap --reporter classic", + + "===================== debug =======================": "", + "test:git": "npm run tap test/git-check-ignore.test.js", + "test:ignore": "npm run tap test/ignore.test.js", + "test:ignore:only": "IGNORE_ONLY_IGNORES=1 npm run tap test/ignore.test.js", + "test:others": "npm run tap test/others.test.js", + "test:no-coverage": "npm run tap test/*.test.js -- --no-check-coverage", + + "test": "npm run lint && npm run ts && npm run build && npm run test:cases", + "test:win32": "IGNORE_TEST_WIN32=1 npm run test", + "report": "tap --coverage-report=html" + }, + "repository": { + "type": "git", + "url": "git@github.com:kaelzhang/node-ignore.git" + }, + "keywords": [ + "ignore", + ".gitignore", + "gitignore", + "npmignore", + "rules", + "manager", + "filter", + "regexp", + "regex", + "fnmatch", + "glob", + "asterisks", + "regular-expression" + ], + "author": "kael", + "license": "MIT", + "bugs": { + "url": "https://github.com/kaelzhang/node-ignore/issues" + }, + "devDependencies": { + "@babel/cli": "^7.22.9", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@typescript-eslint/eslint-plugin": "^8.19.1", + "codecov": "^3.8.3", + "debug": "^4.3.4", + "eslint": "^8.46.0", + "eslint-config-ostai": "^3.0.0", + "eslint-plugin-import": "^2.28.0", + "mkdirp": "^3.0.1", + "pre-suf": "^1.1.1", + "rimraf": "^6.0.1", + "spawn-sync": "^2.0.0", + "tap": "^16.3.9", + "tmp": "0.2.3", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" + }, + "engines": { + "node": ">= 4" + } +} diff --git a/node_modules/ini/LICENSE b/node_modules/ini/LICENSE new file mode 100644 index 0000000000..19129e315f --- /dev/null +++ b/node_modules/ini/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/ini/README.md b/node_modules/ini/README.md new file mode 100644 index 0000000000..c6eee0052a --- /dev/null +++ b/node_modules/ini/README.md @@ -0,0 +1,180 @@ + +An INI format parser & serializer. + +## Note + +- Sections are treated as nested objects. + +- Section-less items are treated as globals. + +## Usage + +Consider an INI file such as the following: + +```ini +; This comment is being ignored +scope = global + +[database] +user = dbuser +password = dbpassword +database = use_this_database + +[paths.default] +datadir = /var/lib/data +array[] = first value +array[] = second value +array[] = third value +``` + +You can **read**, **modify** and **write** it like so: + +```js +import { writeFile , readFile } from 'node:fs/promises' +import { stringify , parse } from 'ini' + +// Read INI file as text + +let text = await readFile(`./Original.ini`,{ + encoding : 'utf-8' +}) + +// Parse text data to object + +const config = parse(text) + +// Modify data object + +config.scope = 'local' +config.database.database = 'use_another_database' +config.paths.default.tmpdir = '/tmp' +delete config.paths.default.datadir +config.paths.default.array.push('fourth value') + +// Stringify data object + +text = stringify(config,{ + section : 'section' +}) + +// Write INI file as text + +await writeFile(`./Modified.ini`,text) +``` + +The written file will contain the following: + +```ini +[section] +scope=local +[section.database] +user=dbuser +password=dbpassword +database=use_another_database +[section.paths.default] +tmpdir=/tmp +array[]=first value +array[]=second value +array[]=third value +array[]=fourth value +``` + +## API + +### Parse + +Attempts to turn the given INI string into a nested data object. + +```js +// You can also use `decode` +const object = parse(``) +``` + +### Stringify + +Encodes the given data object as an INI formatted string. + +```js +// You can also use `encode` +stringify(object,{ + + /** + * Whether to insert spaces before & after `=` + * + * Disabled by default to have better + * compatibility with old picky parsers. + */ + + whitespace : false , + + /** + * Whether to align the `=` character for each section. + * -> Also enables the `whitespace` option + */ + + align : false , + + /** + * Identifier to use for global items + * and to prepend to all other sections. + */ + + section , + + /** + * Whether to sort all sections & their keys alphabetically. + */ + + sort : false , + + /** + * Whether to insert a newline after each section header. + * + * The TOSHIBA & FlashAir parser require this format. + */ + + newline : false , + + /** + * Which platforms line-endings should be used. + * + * win32 -> CR+LF + * other -> LF + * + * Default is the current platform + */ + + platform , + + /** + * Whether to append `[]` to array keys. + * + * Some parsers treat duplicate names by themselves as arrays + */ + + bracketedArray : true + +}) +``` + +*For backwards compatibility any string passed as the* +*options parameter is treated as the `section` option.* + +```js +stringify(object,'section') +``` + +### Un / Escape + +Turn the given string into a safe to +use key or value in your INI file. + +```js +safe(`"unsafe string"`) // -> \"unsafe string\" +``` + +Or reverse the process with: + +```js +unsafe(`\\"safe string\\"`) // -> "safe string" +``` diff --git a/node_modules/ini/package.json b/node_modules/ini/package.json new file mode 100644 index 0000000000..67aa927825 --- /dev/null +++ b/node_modules/ini/package.json @@ -0,0 +1,45 @@ +{ + "author": "GitHub Inc.", + "name": "ini", + "description": "An ini encoder/decoder for node", + "version": "4.1.3", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/ini.git" + }, + "main": "lib/ini.js", + "scripts": { + "eslint": "eslint", + "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"", + "lintfix": "npm run lint -- --fix", + "test": "tap", + "snap": "tap", + "posttest": "npm run lint", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force" + }, + "devDependencies": { + "@npmcli/eslint-config": "^4.0.0", + "@npmcli/template-oss": "4.22.0", + "tap": "^16.0.1" + }, + "license": "ISC", + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "4.22.0", + "publish": "true" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] + } +} diff --git a/node_modules/is-alphabetical/index.d.ts b/node_modules/is-alphabetical/index.d.ts new file mode 100644 index 0000000000..ceee1c6113 --- /dev/null +++ b/node_modules/is-alphabetical/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is alphabetical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphabetical. + */ +export function isAlphabetical(character: string | number): boolean diff --git a/node_modules/is-alphabetical/index.js b/node_modules/is-alphabetical/index.js new file mode 100644 index 0000000000..f71156a48b --- /dev/null +++ b/node_modules/is-alphabetical/index.js @@ -0,0 +1,16 @@ +/** + * Check if the given character code, or the character code at the first + * character, is alphabetical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphabetical. + */ +export function isAlphabetical(character) { + const code = + typeof character === 'string' ? character.charCodeAt(0) : character + + return ( + (code >= 97 && code <= 122) /* a-z */ || + (code >= 65 && code <= 90) /* A-Z */ + ) +} diff --git a/node_modules/is-alphabetical/license b/node_modules/is-alphabetical/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-alphabetical/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphabetical/package.json b/node_modules/is-alphabetical/package.json new file mode 100644 index 0000000000..c274f30d20 --- /dev/null +++ b/node_modules/is-alphabetical/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-alphabetical", + "version": "2.0.1", + "description": "Check if a character is alphabetical", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "alphabetical" + ], + "repository": "wooorm/is-alphabetical", + "bugs": "https://github.com/wooorm/is-alphabetical/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-alphabetical/readme.md b/node_modules/is-alphabetical/readme.md new file mode 100644 index 0000000000..8c83eb6016 --- /dev/null +++ b/node_modules/is-alphabetical/readme.md @@ -0,0 +1,141 @@ +# is-alphabetical + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is alphabetical. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isAlphabetical(character|code)`](#isalphabeticalcharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is ASCII alphabetical: +matching `[a-z]`, case insensitive. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-alphabetical +``` + +In Deno with [Skypack][]: + +```js +import {isAlphabetical} from 'https://cdn.skypack.dev/is-alphabetical@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isAlphabetical} from 'is-alphabetical' + +isAlphabetical('a') // => true +isAlphabetical('B') // => true +isAlphabetical('0') // => false +isAlphabetical('💩') // => false +``` + +## API + +This package exports the following identifier: `isAlphabetical`. +There is no default export. + +### `isAlphabetical(character|code)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is alphabetical. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) +* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) +* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphanumerical) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-alphabetical/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-alphabetical/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphabetical.svg + +[coverage]: https://codecov.io/github/wooorm/is-alphabetical + +[downloads-badge]: https://img.shields.io/npm/dm/is-alphabetical.svg + +[downloads]: https://www.npmjs.com/package/is-alphabetical + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphabetical.svg + +[size]: https://bundlephobia.com/result?p=is-alphabetical + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-alphanumerical/index.d.ts b/node_modules/is-alphanumerical/index.d.ts new file mode 100644 index 0000000000..3fed2bd3fa --- /dev/null +++ b/node_modules/is-alphanumerical/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is alphanumerical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphanumerical. + */ +export function isAlphanumerical(character: string | number): boolean diff --git a/node_modules/is-alphanumerical/index.js b/node_modules/is-alphanumerical/index.js new file mode 100644 index 0000000000..10188f360d --- /dev/null +++ b/node_modules/is-alphanumerical/index.js @@ -0,0 +1,13 @@ +import {isAlphabetical} from 'is-alphabetical' +import {isDecimal} from 'is-decimal' + +/** + * Check if the given character code, or the character code at the first + * character, is alphanumerical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphanumerical. + */ +export function isAlphanumerical(character) { + return isAlphabetical(character) || isDecimal(character) +} diff --git a/node_modules/is-alphanumerical/license b/node_modules/is-alphanumerical/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-alphanumerical/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphanumerical/package.json b/node_modules/is-alphanumerical/package.json new file mode 100644 index 0000000000..2689af5d07 --- /dev/null +++ b/node_modules/is-alphanumerical/package.json @@ -0,0 +1,79 @@ +{ + "name": "is-alphanumerical", + "version": "2.0.1", + "description": "Check if a character is alphanumerical", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "alphabetical", + "numerical", + "alphanumerical" + ], + "repository": "wooorm/is-alphanumerical", + "bugs": "https://github.com/wooorm/is-alphanumerical/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-alphanumerical/readme.md b/node_modules/is-alphanumerical/readme.md new file mode 100644 index 0000000000..cacd9a6422 --- /dev/null +++ b/node_modules/is-alphanumerical/readme.md @@ -0,0 +1,142 @@ +# is-alphanumerical + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is alphanumerical. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isAlphanumerical(character)`](#isalphanumericalcharacter) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is ASCII alphanumerical: +it matches `[a-zA-Z0-9]`. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-alphanumerical +``` + +In Deno with [Skypack][]: + +```js +import {isAlphanumerical} from 'https://cdn.skypack.dev/is-alphanumerical@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isAlphanumerical} from 'is-alphanumerical' + +isAlphanumerical('a') // => true +isAlphanumerical('Z') // => true +isAlphanumerical('0') // => true +isAlphanumerical(' ') // => false +isAlphanumerical('💩') // => false +``` + +## API + +This package exports the following identifier: `isAlphanumerical`. +There is no default export. + +### `isAlphanumerical(character)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is alphanumerical. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) +* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-alphanumerical/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-alphanumerical/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphanumerical.svg + +[coverage]: https://codecov.io/github/wooorm/is-alphanumerical + +[downloads-badge]: https://img.shields.io/npm/dm/is-alphanumerical.svg + +[downloads]: https://www.npmjs.com/package/is-alphanumerical + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphanumerical.svg + +[size]: https://bundlephobia.com/result?p=is-alphanumerical + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-decimal/index.d.ts b/node_modules/is-decimal/index.d.ts new file mode 100644 index 0000000000..5f162a7145 --- /dev/null +++ b/node_modules/is-decimal/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is decimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is a decimal + */ +export function isDecimal(character: string | number): boolean diff --git a/node_modules/is-decimal/index.js b/node_modules/is-decimal/index.js new file mode 100644 index 0000000000..4fe00ff751 --- /dev/null +++ b/node_modules/is-decimal/index.js @@ -0,0 +1,13 @@ +/** + * Check if the given character code, or the character code at the first + * character, is decimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is a decimal + */ +export function isDecimal(character) { + const code = + typeof character === 'string' ? character.charCodeAt(0) : character + + return code >= 48 && code <= 57 /* 0-9 */ +} diff --git a/node_modules/is-decimal/license b/node_modules/is-decimal/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-decimal/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-decimal/package.json b/node_modules/is-decimal/package.json new file mode 100644 index 0000000000..c0a593994b --- /dev/null +++ b/node_modules/is-decimal/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-decimal", + "version": "2.0.1", + "description": "Check if a character is decimal", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "decimal" + ], + "repository": "wooorm/is-decimal", + "bugs": "https://github.com/wooorm/is-decimal/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-decimal/readme.md b/node_modules/is-decimal/readme.md new file mode 100644 index 0000000000..1595537c08 --- /dev/null +++ b/node_modules/is-decimal/readme.md @@ -0,0 +1,139 @@ +# is-decimal + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is a decimal. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isDecimal(character|code)`](#isdecimalcharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is an ASCII decimal. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-decimal +``` + +In Deno with [Skypack][]: + +```js +import {isDecimal} from 'https://cdn.skypack.dev/is-decimal@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isDecimal} from 'is-decimal' + +isDecimal('0') // => true +isDecimal('9') // => true +isDecimal('a') // => false +isDecimal('💩') // => false +``` + +## API + +This package exports the following identifiers: `isDecimal`. +There is no default export. + +### `isDecimal(character|code)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is decimal. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-decimal/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-decimal/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-decimal.svg + +[coverage]: https://codecov.io/github/wooorm/is-decimal + +[downloads-badge]: https://img.shields.io/npm/dm/is-decimal.svg + +[downloads]: https://www.npmjs.com/package/is-decimal + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-decimal.svg + +[size]: https://bundlephobia.com/result?p=is-decimal + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-fullwidth-code-point/index.d.ts b/node_modules/is-fullwidth-code-point/index.d.ts new file mode 100644 index 0000000000..729d202051 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.d.ts @@ -0,0 +1,17 @@ +/** +Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms). + +@param codePoint - The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + +@example +``` +import isFullwidthCodePoint from 'is-fullwidth-code-point'; + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` +*/ +export default function isFullwidthCodePoint(codePoint: number): boolean; diff --git a/node_modules/is-fullwidth-code-point/index.js b/node_modules/is-fullwidth-code-point/index.js new file mode 100644 index 0000000000..671f97f760 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.js @@ -0,0 +1,50 @@ +/* eslint-disable yoda */ +'use strict'; + +const isFullwidthCodePoint = codePoint => { + if (Number.isNaN(codePoint)) { + return false; + } + + // Code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + codePoint >= 0x1100 && ( + codePoint <= 0x115F || // Hangul Jamo + codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET + codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= codePoint && codePoint <= 0x4DBF) || + // CJK Unified Ideographs .. Yi Radicals + (0x4E00 <= codePoint && codePoint <= 0xA4C6) || + // Hangul Jamo Extended-A + (0xA960 <= codePoint && codePoint <= 0xA97C) || + // Hangul Syllables + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + // CJK Compatibility Ideographs + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + // Vertical Forms + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + // CJK Compatibility Forms .. Small Form Variants + (0xFE30 <= codePoint && codePoint <= 0xFE6B) || + // Halfwidth and Fullwidth Forms + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || + // Kana Supplement + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + // Enclosed Ideographic Supplement + (0x1F200 <= codePoint && codePoint <= 0x1F251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= codePoint && codePoint <= 0x3FFFD) + ) + ) { + return true; + } + + return false; +}; + +module.exports = isFullwidthCodePoint; +module.exports.default = isFullwidthCodePoint; diff --git a/node_modules/is-fullwidth-code-point/license b/node_modules/is-fullwidth-code-point/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-fullwidth-code-point/package.json b/node_modules/is-fullwidth-code-point/package.json new file mode 100644 index 0000000000..2137e888fa --- /dev/null +++ b/node_modules/is-fullwidth-code-point/package.json @@ -0,0 +1,42 @@ +{ + "name": "is-fullwidth-code-point", + "version": "3.0.0", + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "license": "MIT", + "repository": "sindresorhus/is-fullwidth-code-point", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "string", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "devDependencies": { + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" + } +} diff --git a/node_modules/is-fullwidth-code-point/readme.md b/node_modules/is-fullwidth-code-point/readme.md new file mode 100644 index 0000000000..4236bba980 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/readme.md @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` + + +## API + +### isFullwidthCodePoint(codePoint) + +#### codePoint + +Type: `number` + +The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/is-hexadecimal/index.d.ts b/node_modules/is-hexadecimal/index.d.ts new file mode 100644 index 0000000000..1199b32aa8 --- /dev/null +++ b/node_modules/is-hexadecimal/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is hexadecimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is hexadecimal + */ +export function isHexadecimal(character: string | number): boolean diff --git a/node_modules/is-hexadecimal/index.js b/node_modules/is-hexadecimal/index.js new file mode 100644 index 0000000000..2eda39fbef --- /dev/null +++ b/node_modules/is-hexadecimal/index.js @@ -0,0 +1,17 @@ +/** + * Check if the given character code, or the character code at the first + * character, is hexadecimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is hexadecimal + */ +export function isHexadecimal(character) { + const code = + typeof character === 'string' ? character.charCodeAt(0) : character + + return ( + (code >= 97 /* a */ && code <= 102) /* z */ || + (code >= 65 /* A */ && code <= 70) /* Z */ || + (code >= 48 /* A */ && code <= 57) /* Z */ + ) +} diff --git a/node_modules/is-hexadecimal/license b/node_modules/is-hexadecimal/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-hexadecimal/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-hexadecimal/package.json b/node_modules/is-hexadecimal/package.json new file mode 100644 index 0000000000..e88ab44727 --- /dev/null +++ b/node_modules/is-hexadecimal/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-hexadecimal", + "version": "2.0.1", + "description": "Check if a character is hexadecimal", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "hexadecimal" + ], + "repository": "wooorm/is-hexadecimal", + "bugs": "https://github.com/wooorm/is-hexadecimal/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-hexadecimal/readme.md b/node_modules/is-hexadecimal/readme.md new file mode 100644 index 0000000000..a857ecd909 --- /dev/null +++ b/node_modules/is-hexadecimal/readme.md @@ -0,0 +1,141 @@ +# is-hexadecimal + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is hexadecimal. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isHexadecimal(character|code)`](#ishexadecimalcharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is a white space character: +whether it matches `[a-f0-9]`, case insensitive. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-hexadecimal +``` + +In Deno with [Skypack][]: + +```js +import {isHexadecimal} from 'https://cdn.skypack.dev/is-hexadecimal@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isHexadecimal} from 'is-hexadecimal' + +isHexadecimal('a') // => true +isHexadecimal('0') // => true +isHexadecimal('G') // => false +isHexadecimal('💩') // => false +``` + +## API + +This package exports the following identifier: `isHexadecimal`. +There is no default export. + +### `isHexadecimal(character|code)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is isHexadecimal. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-hexadecimal/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-hexadecimal/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-hexadecimal.svg + +[coverage]: https://codecov.io/github/wooorm/is-hexadecimal + +[downloads-badge]: https://img.shields.io/npm/dm/is-hexadecimal.svg + +[downloads]: https://www.npmjs.com/package/is-hexadecimal + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-hexadecimal.svg + +[size]: https://bundlephobia.com/result?p=is-hexadecimal + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/isexe/.npmignore b/node_modules/isexe/.npmignore new file mode 100644 index 0000000000..c1cb757acf --- /dev/null +++ b/node_modules/isexe/.npmignore @@ -0,0 +1,2 @@ +.nyc_output/ +coverage/ diff --git a/node_modules/isexe/LICENSE b/node_modules/isexe/LICENSE new file mode 100644 index 0000000000..19129e315f --- /dev/null +++ b/node_modules/isexe/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/isexe/README.md b/node_modules/isexe/README.md new file mode 100644 index 0000000000..35769e8440 --- /dev/null +++ b/node_modules/isexe/README.md @@ -0,0 +1,51 @@ +# isexe + +Minimal module to check if a file is executable, and a normal file. + +Uses `fs.stat` and tests against the `PATHEXT` environment variable on +Windows. + +## USAGE + +```javascript +var isexe = require('isexe') +isexe('some-file-name', function (err, isExe) { + if (err) { + console.error('probably file does not exist or something', err) + } else if (isExe) { + console.error('this thing can be run') + } else { + console.error('cannot be run') + } +}) + +// same thing but synchronous, throws errors +var isExe = isexe.sync('some-file-name') + +// treat errors as just "not executable" +isexe('maybe-missing-file', { ignoreErrors: true }, callback) +var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) +``` + +## API + +### `isexe(path, [options], [callback])` + +Check if the path is executable. If no callback provided, and a +global `Promise` object is available, then a Promise will be returned. + +Will raise whatever errors may be raised by `fs.stat`, unless +`options.ignoreErrors` is set to true. + +### `isexe.sync(path, [options])` + +Same as `isexe` but returns the value and throws any errors raised. + +### Options + +* `ignoreErrors` Treat all errors as "no, this is not executable", but + don't raise them. +* `uid` Number to use as the user id +* `gid` Number to use as the group id +* `pathExt` List of path extensions to use instead of `PATHEXT` + environment variable on Windows. diff --git a/node_modules/isexe/index.js b/node_modules/isexe/index.js new file mode 100644 index 0000000000..553fb32b11 --- /dev/null +++ b/node_modules/isexe/index.js @@ -0,0 +1,57 @@ +var fs = require('fs') +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = require('./windows.js') +} else { + core = require('./mode.js') +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} diff --git a/node_modules/isexe/mode.js b/node_modules/isexe/mode.js new file mode 100644 index 0000000000..1995ea4a06 --- /dev/null +++ b/node_modules/isexe/mode.js @@ -0,0 +1,41 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} diff --git a/node_modules/isexe/package.json b/node_modules/isexe/package.json new file mode 100644 index 0000000000..e452689442 --- /dev/null +++ b/node_modules/isexe/package.json @@ -0,0 +1,31 @@ +{ + "name": "isexe", + "version": "2.0.0", + "description": "Minimal module to check if a file is executable.", + "main": "index.js", + "directories": { + "test": "test" + }, + "devDependencies": { + "mkdirp": "^0.5.1", + "rimraf": "^2.5.0", + "tap": "^10.3.0" + }, + "scripts": { + "test": "tap test/*.js --100", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --all; git push origin --tags" + }, + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/isexe.git" + }, + "keywords": [], + "bugs": { + "url": "https://github.com/isaacs/isexe/issues" + }, + "homepage": "https://github.com/isaacs/isexe#readme" +} diff --git a/node_modules/isexe/test/basic.js b/node_modules/isexe/test/basic.js new file mode 100644 index 0000000000..d926df64b9 --- /dev/null +++ b/node_modules/isexe/test/basic.js @@ -0,0 +1,221 @@ +var t = require('tap') +var fs = require('fs') +var path = require('path') +var fixture = path.resolve(__dirname, 'fixtures') +var meow = fixture + '/meow.cat' +var mine = fixture + '/mine.cat' +var ours = fixture + '/ours.cat' +var fail = fixture + '/fail.false' +var noent = fixture + '/enoent.exe' +var mkdirp = require('mkdirp') +var rimraf = require('rimraf') + +var isWindows = process.platform === 'win32' +var hasAccess = typeof fs.access === 'function' +var winSkip = isWindows && 'windows' +var accessSkip = !hasAccess && 'no fs.access function' +var hasPromise = typeof Promise === 'function' +var promiseSkip = !hasPromise && 'no global Promise' + +function reset () { + delete require.cache[require.resolve('../')] + return require('../') +} + +t.test('setup fixtures', function (t) { + rimraf.sync(fixture) + mkdirp.sync(fixture) + fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') + fs.chmodSync(meow, parseInt('0755', 8)) + fs.writeFileSync(fail, '#!/usr/bin/env false\n') + fs.chmodSync(fail, parseInt('0644', 8)) + fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') + fs.chmodSync(mine, parseInt('0744', 8)) + fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') + fs.chmodSync(ours, parseInt('0754', 8)) + t.end() +}) + +t.test('promise', { skip: promiseSkip }, function (t) { + var isexe = reset() + t.test('meow async', function (t) { + isexe(meow).then(function (is) { + t.ok(is) + t.end() + }) + }) + t.test('fail async', function (t) { + isexe(fail).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.test('noent async', function (t) { + isexe(noent).catch(function (er) { + t.ok(er) + t.end() + }) + }) + t.test('noent ignore async', function (t) { + isexe(noent, { ignoreErrors: true }).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.end() +}) + +t.test('no promise', function (t) { + global.Promise = null + var isexe = reset() + t.throws('try to meow a promise', function () { + isexe(meow) + }) + t.end() +}) + +t.test('access', { skip: accessSkip || winSkip }, function (t) { + runTest(t) +}) + +t.test('mode', { skip: winSkip }, function (t) { + delete fs.access + delete fs.accessSync + var isexe = reset() + t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) + t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) + runTest(t) +}) + +t.test('windows', function (t) { + global.TESTING_WINDOWS = true + var pathExt = '.EXE;.CAT;.CMD;.COM' + t.test('pathExt option', function (t) { + runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) + }) + t.test('pathExt env', function (t) { + process.env.PATHEXT = pathExt + runTest(t) + }) + t.test('no pathExt', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: '', skipFail: true }) + }) + t.test('pathext with empty entry', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: ';' + pathExt, skipFail: true }) + }) + t.end() +}) + +t.test('cleanup', function (t) { + rimraf.sync(fixture) + t.end() +}) + +function runTest (t, options) { + var isexe = reset() + + var optionsIgnore = Object.create(options || {}) + optionsIgnore.ignoreErrors = true + + if (!options || !options.skipFail) { + t.notOk(isexe.sync(fail, options)) + } + t.notOk(isexe.sync(noent, optionsIgnore)) + if (!options) { + t.ok(isexe.sync(meow)) + } else { + t.ok(isexe.sync(meow, options)) + } + + t.ok(isexe.sync(mine, options)) + t.ok(isexe.sync(ours, options)) + t.throws(function () { + isexe.sync(noent, options) + }) + + t.test('meow async', function (t) { + if (!options) { + isexe(meow, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } else { + isexe(meow, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } + }) + + t.test('mine async', function (t) { + isexe(mine, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + t.test('ours async', function (t) { + isexe(ours, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + if (!options || !options.skipFail) { + t.test('fail async', function (t) { + isexe(fail, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + } + + t.test('noent async', function (t) { + isexe(noent, options, function (er, is) { + t.ok(er) + t.notOk(is) + t.end() + }) + }) + + t.test('noent ignore async', function (t) { + isexe(noent, optionsIgnore, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.test('directory is not executable', function (t) { + isexe(__dirname, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.end() +} diff --git a/node_modules/isexe/windows.js b/node_modules/isexe/windows.js new file mode 100644 index 0000000000..34996734d8 --- /dev/null +++ b/node_modules/isexe/windows.js @@ -0,0 +1,42 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} diff --git a/node_modules/jackspeak/LICENSE.md b/node_modules/jackspeak/LICENSE.md new file mode 100644 index 0000000000..8cb5cc6e61 --- /dev/null +++ b/node_modules/jackspeak/LICENSE.md @@ -0,0 +1,55 @@ +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +**_As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim._** diff --git a/node_modules/jackspeak/README.md b/node_modules/jackspeak/README.md new file mode 100644 index 0000000000..4ffea4b321 --- /dev/null +++ b/node_modules/jackspeak/README.md @@ -0,0 +1,357 @@ +# jackspeak + +A very strict and proper argument parser. + +Validate string, boolean, and number options, from the command +line and the environment. + +Call the `jack` method with a config object, and then chain +methods off of it. + +At the end, call the `.parse()` method, and you'll get an object +with `positionals` and `values` members. + +Any unrecognized configs or invalid values will throw an error. + +As long as you define configs using object literals, types will +be properly inferred and TypeScript will know what kinds of +things you got. + +If you give it a prefix for environment variables, then defaults +will be read from the environment, and parsed values written back +to it, so you can easily pass configs through to child processes. + +Automatically generates a `usage`/`help` banner by calling the +`.usage()` method. + +Unless otherwise noted, all methods return the object itself. + +## USAGE + +```js +import { jack } from 'jackspeak' +// this works too: +// const { jack } = require('jackspeak') + +const { positionals, values } = jack({ envPrefix: 'FOO' }) + .flag({ + asdf: { description: 'sets the asfd flag', short: 'a', default: true }, + 'no-asdf': { description: 'unsets the asdf flag', short: 'A' }, + foo: { description: 'another boolean', short: 'f' }, + }) + .optList({ + 'ip-addrs': { + description: 'addresses to ip things', + delim: ',', // defaults to '\n' + default: ['127.0.0.1'], + }, + }) + .parse([ + 'some', + 'positional', + '--ip-addrs', + '192.168.0.1', + '--ip-addrs', + '1.1.1.1', + 'args', + '--foo', // sets the foo flag + '-A', // short for --no-asdf, sets asdf flag to false + ]) + +console.log(process.env.FOO_ASDF) // '0' +console.log(process.env.FOO_FOO) // '1' +console.log(values) // { +// 'ip-addrs': ['192.168.0.1', '1.1.1.1'], +// foo: true, +// asdf: false, +// } +console.log(process.env.FOO_IP_ADDRS) // '192.168.0.1,1.1.1.1' +console.log(positionals) // ['some', 'positional', 'args'] +``` + +## `jack(options: JackOptions = {}) => Jack` + +Returns a `Jack` object that can be used to chain and add +field definitions. The other methods (apart from `validate()`, +`parse()`, and `usage()` obviously) return the same Jack object, +updated with the new types, so they can be chained together as +shown in the code examples. + +Options: + +- `allowPositionals` Defaults to true. Set to `false` to not + allow any positional arguments. + +- `envPrefix` Set to a string to write configs to and read + configs from the environment. For example, if set to `MY_APP` + then the `foo-bar` config will default based on the value of + `env.MY_APP_FOO_BAR` and will write back to that when parsed. + + Boolean values are written as `'1'` and `'0'`, and will be + treated as `true` if they're `'1'` or false otherwise. + + Number values are written with their `toString()` + representation. + + Strings are just strings. + + Any value with `multiple: true` will be represented in the + environment split by a delimiter, which defaults to `\n`. + +- `env` The place to read/write environment variables. Defaults + to `process.env`. + +- `usage` A short usage string to print at the top of the help + banner. + +- `stopAtPositional` Boolean, default false. Stop parsing opts + and flags at the first positional argument. This is useful if + you want to pass certain options to subcommands, like some + programs do, so you can stop parsing and pass the positionals + to the subcommand to parse. + +- `stopAtPositionalTest` Conditional `stopAtPositional`. Provide + a function that takes a positional argument string and returns + boolean. If it returns `true`, then parsing will stop. Useful + when _some_ subcommands should parse the rest of the command + line options, and others should not. + +### `Jack.heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6)` + +Define a short string heading, used in the `usage()` output. + +Indentation of the heading and subsequent description/config +usage entries (up until the next heading) is set by the heading +level. + +If the first usage item defined is a heading, it is always +treated as level 1, regardless of the argument provided. + +Headings level 1 and 2 will have a line of padding underneath +them. Headings level 3 through 6 will not. + +### `Jack.description(text: string, { pre?: boolean } = {})` + +Define a long string description, used in the `usage()` output. + +If the `pre` option is set to `true`, then whitespace will not be +normalized. However, if any line is too long for the width +allotted, it will still be wrapped. + +## Option Definitions + +Configs are defined by calling the appropriate field definition +method with an object where the keys are the long option name, +and the value defines the config. + +Options: + +- `type` Only needed for the `addFields` method, as the others + set it implicitly. Can be `'string'`, `'boolean'`, or + `'number'`. +- `multiple` Only needed for the `addFields` method, as the + others set it implicitly. Set to `true` to define an array + type. This means that it can be set on the CLI multiple times, + set as an array in the `values` + and it is represented in the environment as a delimited string. +- `short` A one-character shorthand for the option. +- `description` Some words to describe what this option is and + why you'd set it. +- `hint` (Only relevant for non-boolean types) The thing to show + in the usage output, like `--option=` +- `validate` A function that returns false (or throws) if an + option value is invalid. +- `validOptions` An array of strings or numbers that define the + valid values that can be set. This is not allowed on `boolean` + (flag) options. May be used along with a `validate()` method. +- `default` A default value for the field. Note that this may be + overridden by an environment variable, if present. + +### `Jack.flag({ [option: string]: definition, ... })` + +Define one or more boolean fields. + +Boolean options may be set to `false` by using a +`--no-${optionName}` argument, which will be implicitly created +if it's not defined to be something else. + +If a boolean option named `no-${optionName}` with the same +`multiple` setting is in the configuration, then that will be +treated as a negating flag. + +### `Jack.flagList({ [option: string]: definition, ... })` + +Define one or more boolean array fields. + +### `Jack.num({ [option: string]: definition, ... })` + +Define one or more number fields. These will be set in the +environment as a stringified number, and included in the `values` +object as a number. + +### `Jack.numList({ [option: string]: definition, ... })` + +Define one or more number list fields. These will be set in the +environment as a delimited set of stringified numbers, and +included in the `values` as a number array. + +### `Jack.opt({ [option: string]: definition, ... })` + +Define one or more string option fields. + +### `Jack.optList({ [option: string]: definition, ... })` + +Define one or more string list fields. + +### `Jack.addFields({ [option: string]: definition, ... })` + +Define one or more fields of any type. Note that `type` and +`multiple` must be set explicitly on each definition when using +this method. + +## Actions + +Use these methods on a Jack object that's already had its config +fields defined. + +### `Jack.parse(args: string[] = process.argv): { positionals: string[], values: OptionsResults }` + +Parse the arguments list, write to the environment if `envPrefix` +is set, and returned the parsed values and remaining positional +arguments. + +### `Jack.validate(o: any): asserts o is OptionsResults` + +Throws an error if the object provided is not a valid result set, +for the configurations defined thusfar. + +### `Jack.usage(): string` + +Returns the compiled `usage` string, with all option descriptions +and heading/description text, wrapped to the appropriate width +for the terminal. + +### `Jack.setConfigValues(options: OptionsResults, src?: string)` + +Validate the `options` argument, and set the default value for +each field that appears in the options. + +Values provided will be overridden by environment variables or +command line arguments. + +### `Jack.usageMarkdown(): string` + +Returns the compiled `usage` string, with all option descriptions +and heading/description text, but as markdown instead of +formatted for a terminal, for generating HTML documentation for +your CLI. + +## Some Example Code + +Also see [the examples +folder](https://github.com/isaacs/jackspeak/tree/master/examples) + +```js +import { jack } from 'jackspeak' + +const j = jack({ + // Optional + // This will be auto-generated from the descriptions if not supplied + // top level usage line, printed by -h + // will be auto-generated if not specified + usage: 'foo [options] ', +}) + .heading('The best Foo that ever Fooed') + .description( + ` + Executes all the files and interprets their output as + TAP formatted test result data. + + To parse TAP data from stdin, specify "-" as a filename. + `, + ) + + // flags don't take a value, they're boolean on or off, and can be + // turned off by prefixing with `--no-` + // so this adds support for -b to mean --bail, or -B to mean --no-bail + .flag({ + flag: { + // specify a short value if you like. this must be a single char + short: 'f', + // description is optional as well. + description: `Make the flags wave`, + // default value for flags is 'false', unless you change it + default: true, + }, + 'no-flag': { + // you can can always negate a flag with `--no-flag` + // specifying a negate option will let you define a short + // single-char option for negation. + short: 'F', + description: `Do not wave the flags`, + }, + }) + + // Options that take a value are specified with `opt()` + .opt({ + reporter: { + short: 'R', + description: 'the style of report to display', + }, + }) + + // if you want a number, say so, and jackspeak will enforce it + .num({ + jobs: { + short: 'j', + description: 'how many jobs to run in parallel', + default: 1, + }, + }) + + // A list is an option that can be specified multiple times, + // to expand into an array of all the settings. Normal opts + // will just give you the last value specified. + .optList({ + 'node-arg': {}, + }) + + // a flagList is an array of booleans, so `-ddd` is [true, true, true] + // count the `true` values to treat it as a counter. + .flagList({ + debug: { short: 'd' }, + }) + + // opts take a value, and is set to the string in the results + // you can combine multiple short-form flags together, but + // an opt will end the combine chain, posix-style. So, + // -bofilename would be like --bail --output-file=filename + .opt({ + 'output-file': { + short: 'o', + // optional: make it -o in the help output insead of -o + hint: 'file', + description: `Send the raw output to the specified file.`, + }, + }) + +// now we can parse argv like this: +const { values, positionals } = j.parse(process.argv) + +// or decide to show the usage banner +console.log(j.usage()) + +// or validate an object config we got from somewhere else +try { + j.validate(someConfig) +} catch (er) { + console.error('someConfig is not valid!', er) +} +``` + +## Name + +The inspiration for this module is [yargs](http://npm.im/yargs), which +is pirate talk themed. Yargs has all the features, and is infinitely +flexible. "Jackspeak" is the slang of the royal navy. This module +does not have all the features. It is declarative and rigid by design. diff --git a/node_modules/jackspeak/package.json b/node_modules/jackspeak/package.json new file mode 100644 index 0000000000..51eaabdf35 --- /dev/null +++ b/node_modules/jackspeak/package.json @@ -0,0 +1,95 @@ +{ + "name": "jackspeak", + "publishConfig": { + "tag": "v3-legacy" + }, + "version": "3.4.3", + "description": "A very strict and proper argument parser.", + "tshy": { + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.js" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "type": "module", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "build-examples": "for i in examples/*.js ; do node $i -h > ${i/.js/.txt}; done", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "license": "BlueOak-1.0.0", + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/node": "^20.7.0", + "@types/pkgjs__parseargs": "^0.10.1", + "prettier": "^3.2.5", + "tap": "^18.8.0", + "tshy": "^1.14.0", + "typedoc": "^0.25.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/jackspeak.git" + }, + "keywords": [ + "argument", + "parser", + "args", + "option", + "flag", + "cli", + "command", + "line", + "parse", + "parsing" + ], + "author": "Isaac Z. Schlueter ", + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } +} diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 0000000000..ff2375e055 --- /dev/null +++ b/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,616 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [4.1.0] - 2021-04-15 +### Added +- Types are now exported as `yaml.types.XXX`. +- Every type now has `options` property with original arguments kept as they were + (see `yaml.types.int.options` as an example). + +### Changed +- `Schema.extend()` now keeps old type order in case of conflicts + (e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`). + + +## [4.0.0] - 2021-01-03 +### Changed +- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes. +- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are + moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package. +- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump` + instead which are all now safe by default. +- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use + `yaml.DEFAULT_SCHEMA` instead. +- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead. +- `!!binary` now always mapped to `Uint8Array` on load. +- Reduced nesting of `/lib` folder. +- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal, + `0o1234` is octal, `1:23` is parsed as string instead of base60). +- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557. +- Line and column in exceptions are now formatted as `(X:Y)` instead of + `at line X, column Y` (also present in compact format), #332. +- Code snippet created in exceptions now contains multiple lines with line numbers. +- `dump()` now serializes `undefined` as `null` in collections and removes keys with + `undefined` in mappings, #571. +- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null. +- Custom tags starting with `!` are now dumped as `!tag` instead of `!`, #576. +- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258. + +### Added +- Added `.mjs` (es modules) support. +- Added `quotingType` and `forceQuotes` options for dumper to configure + string literal style, #290, #529. +- Added `styles: { '!!null': 'empty' }` option for dumper + (serializes `{ foo: null }` as "`foo: `"), #570. +- Added `replacer` option (similar to option in JSON.stringify), #339. +- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385. + +### Fixed +- Astral characters are no longer encoded by `dump()`, #587. +- "duplicate mapping key" exception now points at the correct column, #452. +- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception + instead of producing null, #321. +- `__proto__` key no longer overrides object prototype, #164. +- Removed `bower.json`. +- Tags are now url-decoded in `load()` and url-encoded in `dump()` + (previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed). +- Anchors now work correctly with empty nodes, #301. +- Fix incorrect parsing of invalid block mapping syntax, #418. +- Throw an error if block sequence/mapping indent contains a tab, #80. + + +## [3.14.1] - 2020-12-07 +### Security +- Fix possible code execution in (already unsafe) `.load()` (in &anchor). + + +## [3.14.0] - 2020-05-22 +### Changed +- Support `safe/loadAll(input, options)` variant of call. +- CI: drop outdated nodejs versions. +- Dev deps bump. + +### Fixed +- Quote `=` in plain scalars #519. +- Check the node type for `!` tag in case user manually specifies it. +- Verify that there are no null-bytes in input. +- Fix wrong quote position when writing condensed flow, #526. + + +## [3.13.1] - 2019-04-05 +### Security +- Fix possible code execution in (already unsafe) `.load()`, #480. + + +## [3.13.0] - 2019-03-20 +### Security +- Security fix: `safeLoad()` can hang when arrays with nested refs + used as key. Now throws exception for nested arrays. #475. + + +## [3.12.2] - 2019-02-26 +### Fixed +- Fix `noArrayIndent` option for root level, #468. + + +## [3.12.1] - 2019-01-05 +### Added +- Added `noArrayIndent` option, #432. + + +## [3.12.0] - 2018-06-02 +### Changed +- Support arrow functions without a block statement, #421. + + +## [3.11.0] - 2018-03-05 +### Added +- Add arrow functions suport for `!!js/function`. + +### Fixed +- Fix dump in bin/octal/hex formats for negative integers, #399. + + +## [3.10.0] - 2017-09-10 +### Fixed +- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. +- Dump astrals as codepoints instead of surrogate pair, #368. + + +## [3.9.1] - 2017-07-08 +### Fixed +- Ensure stack is present for custom errors in node 7.+, #351. + + +## [3.9.0] - 2017-07-08 +### Added +- Add `condenseFlow` option (to create pretty URL query params), #346. + +### Fixed +- Support array return from safeLoadAll/loadAll, #350. + + +## [3.8.4] - 2017-05-08 +### Fixed +- Dumper: prevent space after dash for arrays that wrap, #343. + + +## [3.8.3] - 2017-04-05 +### Fixed +- Should not allow numbers to begin and end with underscore, #335. + + +## [3.8.2] - 2017-03-02 +### Fixed +- Fix `!!float 123` (integers) parse, #333. +- Don't allow leading zeros in floats (except 0, 0.xxx). +- Allow positive exponent without sign in floats. + + +## [3.8.1] - 2017-02-07 +### Changed +- Maintenance: update browserified build. + + +## [3.8.0] - 2017-02-07 +### Fixed +- Fix reported position for `duplicated mapping key` errors. + Now points to block start instead of block end. + (#243, thanks to @shockey). + + +## [3.7.0] - 2016-11-12 +### Added +- Support polymorphism for tags (#300, thanks to @monken). + +### Fixed +- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). + + +## [3.6.1] - 2016-05-11 +### Fixed +- Fix output cut on a pipe, #286. + + +## [3.6.0] - 2016-04-16 +### Fixed +- Dumper rewrite, fix multiple bugs with trailing `\n`. + Big thanks to @aepsilon! +- Loader: fix leading/trailing newlines in block scalars, @aepsilon. + + +## [3.5.5] - 2016-03-17 +### Fixed +- Date parse fix: don't allow dates with on digit in month and day, #268. + + +## [3.5.4] - 2016-03-09 +### Added +- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. + + +## [3.5.3] - 2016-02-11 +### Changed +- Maintenance release. + + +## [3.5.2] - 2016-01-11 +### Changed +- Maintenance: missed comma in bower config. + + +## [3.5.1] - 2016-01-11 +### Changed +- Removed `inherit` dependency, #239. +- Better browserify workaround for esprima load. +- Demo rewrite. + + +## [3.5.0] - 2016-01-10 +### Fixed +- Dumper. Fold strings only, #217. +- Dumper. `norefs` option, to clone linked objects, #229. +- Loader. Throw a warning for duplicate keys, #166. +- Improved browserify support (mark `esprima` & `Buffer` excluded). + + +## [3.4.6] - 2015-11-26 +### Changed +- Use standalone `inherit` to keep browserified files clear. + + +## [3.4.5] - 2015-11-23 +### Added +- Added `lineWidth` option to dumper. + + +## [3.4.4] - 2015-11-21 +### Fixed +- Fixed floats dump (missed dot for scientific format), #220. +- Allow non-printable characters inside quoted scalars, #192. + + +## [3.4.3] - 2015-10-10 +### Changed +- Maintenance release - deps bump (esprima, argparse). + + +## [3.4.2] - 2015-09-09 +### Fixed +- Fixed serialization of duplicated entries in sequences, #205. + Thanks to @vogelsgesang. + + +## [3.4.1] - 2015-09-05 +### Fixed +- Fixed stacktrace handling in generated errors, for browsers (FF/IE). + + +## [3.4.0] - 2015-08-23 +### Changed +- Don't throw on warnings anymore. Use `onWarning` option to catch. +- Throw error on unknown tags (was warning before). +- Reworked internals of error class. + +### Fixed +- Fixed multiline keys dump, #197. Thanks to @tcr. +- Fixed heading line breaks in some scalars (regression). + + +## [3.3.1] - 2015-05-13 +### Added +- Added `.sortKeys` dumper option, thanks to @rjmunro. + +### Fixed +- Fixed astral characters support, #191. + + +## [3.3.0] - 2015-04-26 +### Changed +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +## [3.2.7] - 2015-02-19 +### Changed +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +## [3.2.6] - 2015-02-07 +### Fixed +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +## [3.2.5] - 2014-12-28 +### Fixed +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +## [3.2.4] - 2014-12-19 +### Fixed +- Fixed resolving of !!null tag on an empty node. + + +## [3.2.3] - 2014-11-08 +### Fixed +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +## [3.2.2] - 2014-09-07 +### Fixed +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +## [3.2.1] - 2014-08-24 +### Fixed +- Nothig new. Just fix npm publish error. + + +## [3.2.0] - 2014-08-24 +### Added +- Added input piping support to CLI. + +### Fixed +- Fixed typo, that could cause hand on initial indent (#139). + + +## [3.1.0] - 2014-07-07 +### Changed +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. + Others are not affected. +- Even if the input string has no trailing line break character, + it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +## [3.0.2] - 2014-02-27 +### Fixed +- Fixed bug: "constructor" string parsed as `null`. + + +## [3.0.1] - 2013-12-22 +### Fixed +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +## [3.0.0] - 2013-12-16 +### Changed +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended + behaviour for node. + + +## [2.1.3] - 2013-10-16 +### Fixed +- Fix wrong loading of empty block scalars. + + +## [2.1.2] - 2013-10-07 +### Fixed +- Fix unwanted line breaks in folded scalars. + + +## [2.1.1] - 2013-10-02 +### Fixed +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +## [2.1.0] - 2013-06-05 +### Added +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), + JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Add `skipInvalid` dumper option. + +### Changed +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` + and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Use `safeLoad` for `require` extension. + +### Fixed +- Bug fix: export `NIL` constant from the public interface. + + +## [2.0.5] - 2013-04-26 +### Security +- Close security issue in !!js/function constructor. + Big thanks to @nealpoole for security audit. + + +## [2.0.4] - 2013-04-08 +### Changed +- Updated .npmignore to reduce package size + + +## [2.0.3] - 2013-02-26 +### Fixed +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +## [2.0.2] - 2013-02-15 +### Fixed +- Fixed input validation: tabs are printable characters. + + +## [2.0.1] - 2013-02-09 +### Fixed +- Fixed error, when options not passed to function cass + + +## [2.0.0] - 2013-02-09 +### Changed +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +## [1.0.3] - 2012-11-05 +### Fixed +- Fixed utf-8 files loading. + + +## [1.0.2] - 2012-08-02 +### Fixed +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +## [1.0.1] - 2012-07-07 +### Fixed +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +## [1.0.0] - 2012-07-01 +### Changed +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. + Fixes #42. +- `require(filename)` now returns a single document and throws an Error if + file contains more than one document. +- CLI was merged back from js-yaml.bin + + +## [0.3.7] - 2012-02-28 +### Fixed +- Fix export of `addConstructor()`. Closes #39. + + +## [0.3.6] - 2012-02-22 +### Changed +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch + +### Fixed +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +## [0.3.5] - 2012-01-10 +### Fixed +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +## [0.3.4] - 2011-12-24 +### Fixed +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +## [0.3.3] - 2011-12-20 +### Added +- adds `compact` stringification of Errors. + +### Changed +- jsyaml executable moved to separate module. + + +## [0.3.2] - 2011-12-16 +### Added +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + +### Fixed +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. + + +## [0.3.1] - 2011-11-18 +### Added +- Added AMD support for browserified version. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. + +### Changed +- Wrapped browserified js-yaml into closure. + +### Fixed +- Fixed the resolvement of non-specific tags. Closes #17. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +## [0.3.0] - 2011-11-09 +### Added +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. + +### Fixed +- Removed JS.Class dependency. Closes #3. +- Fixed timestamp bug when fraction was given. + + +## [0.2.2] - 2011-11-06 +### Fixed +- Fixed crash on docs without ---. Closes #8. +- Fixed multiline string parse +- Fixed tests/comments for using array as key + + +## [0.2.1] - 2011-11-02 +### Fixed +- Fixed short file read (<4k). Closes #9. + + +## [0.2.0] - 2011-11-02 +### Changed +- First public release + + +[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0 +[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0 +[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 +[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 +[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 +[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 +[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 +[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 +[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 +[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 +[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 +[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 +[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 +[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 +[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 +[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 +[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 +[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 +[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 +[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 +[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 +[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 +[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 +[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 +[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 +[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 +[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 +[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 +[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 +[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 +[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 +[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 +[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 +[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 +[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 +[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 +[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 +[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 +[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 +[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 +[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 +[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 +[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 +[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 +[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 +[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 +[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 +[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 +[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 +[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 +[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 +[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 +[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 +[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 +[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 +[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 +[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 +[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 +[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 +[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 +[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 +[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 +[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 +[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE new file mode 100644 index 0000000000..09d3a29e93 --- /dev/null +++ b/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/js-yaml/README.md b/node_modules/js-yaml/README.md new file mode 100644 index 0000000000..3cbc4bd2dd --- /dev/null +++ b/node_modules/js-yaml/README.md @@ -0,0 +1,246 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[![CI](https://github.com/nodeca/js-yaml/workflows/CI/badge.svg?branch=master)](https://github.com/nodeca/js-yaml/actions) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [examples](https://github.com/nodeca/js-yaml/tree/master/examples) +for more info. + +``` javascript +const yaml = require('js-yaml'); +const fs = require('fs'); + +// Get document, or throw exception on error +try { + const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### load (string [ , options ]) + +Parses `string` as single YAML document. Returns either a +plain object, a string, a number, `null` or `undefined`, or throws `YAMLException` on error. By default, does +not support regexps, functions and undefined. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### loadAll (string [, iterator] [, options ]) + +Same as `load()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +const yaml = require('js-yaml'); + +yaml.loadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### dump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` _(default: -1)_ - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. Set `-1` for unlimited width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older + yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. +- `quotingType` _(`'` or `"`, default: `'`)_ - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. +- `forceQuotes` _(default: `false`)_ - if `true`, all non-key strings will be quoted even if they normally don't need to. +- `replacer` - callback `function (key, value)` called recursively on each key/value in source object (see `replacer` docs for `JSON.stringify`). + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null + "canonical" -> "~" + "lowercase" => "null" + "uppercase" -> "NULL" + "camelcase" -> "Null" + +!!int + "binary" -> "0b1", "0b101010", "0b1110001111010" + "octal" -> "0o1", "0o52", "0o16172" + "decimal" => "1", "42", "7290" + "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool + "lowercase" => "true", "false" + "uppercase" -> "TRUE", "FALSE" + "camelcase" -> "True", "False" + +!!float + "lowercase" => ".nan", '.inf' + "uppercase" -> ".NAN", '.INF' + "camelcase" -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +dump(object, { + 'styles': { + '!!null': 'canonical' // dump null as ~ + }, + 'sortKeys': true // sort object keys +}); +``` + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScript types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +See [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) for +extra types. + + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +js-yaml for enterprise +---------------------- + +Available as part of the Tidelift Subscription + +The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/js-yaml/index.js b/node_modules/js-yaml/index.js new file mode 100644 index 0000000000..bcb7eba7ad --- /dev/null +++ b/node_modules/js-yaml/index.js @@ -0,0 +1,47 @@ +'use strict'; + + +var loader = require('./lib/loader'); +var dumper = require('./lib/dumper'); + + +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} + + +module.exports.Type = require('./lib/type'); +module.exports.Schema = require('./lib/schema'); +module.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./lib/schema/json'); +module.exports.CORE_SCHEMA = require('./lib/schema/core'); +module.exports.DEFAULT_SCHEMA = require('./lib/schema/default'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.dump = dumper.dump; +module.exports.YAMLException = require('./lib/exception'); + +// Re-export all types in case user wants to create custom schema +module.exports.types = { + binary: require('./lib/type/binary'), + float: require('./lib/type/float'), + map: require('./lib/type/map'), + null: require('./lib/type/null'), + pairs: require('./lib/type/pairs'), + set: require('./lib/type/set'), + timestamp: require('./lib/type/timestamp'), + bool: require('./lib/type/bool'), + int: require('./lib/type/int'), + merge: require('./lib/type/merge'), + omap: require('./lib/type/omap'), + seq: require('./lib/type/seq'), + str: require('./lib/type/str') +}; + +// Removed functions from JS-YAML 3.0.x +module.exports.safeLoad = renamed('safeLoad', 'load'); +module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); +module.exports.safeDump = renamed('safeDump', 'dump'); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json new file mode 100644 index 0000000000..17574da805 --- /dev/null +++ b/node_modules/js-yaml/package.json @@ -0,0 +1,66 @@ +{ + "name": "js-yaml", + "version": "4.1.0", + "description": "YAML 1.2 parser and serializer", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "author": "Vladimir Zapparov ", + "contributors": [ + "Aleksey V Zapparov (http://www.ixti.net/)", + "Vitaly Puzrin (https://github.com/puzrin)", + "Martin Grenfell (http://got-ravings.blogspot.com)" + ], + "license": "MIT", + "repository": "nodeca/js-yaml", + "files": [ + "index.js", + "lib/", + "bin/", + "dist/" + ], + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "module": "./dist/js-yaml.mjs", + "exports": { + ".": { + "import": "./dist/js-yaml.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "lint": "eslint .", + "test": "npm run lint && mocha", + "coverage": "npm run lint && nyc mocha && nyc report --reporter html", + "demo": "npm run lint && node support/build_demo.js", + "gh-demo": "npm run demo && gh-pages -d demo -f", + "browserify": "rollup -c support/rollup.config.js", + "prepublishOnly": "npm run gh-demo" + }, + "unpkg": "dist/js-yaml.min.js", + "jsdelivr": "dist/js-yaml.min.js", + "dependencies": { + "argparse": "^2.0.1" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^2.8.0", + "gh-pages": "^3.1.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "rollup": "^2.34.1", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-terser": "^7.0.2", + "shelljs": "^0.8.4" + } +} diff --git a/node_modules/jsonc-parser/CHANGELOG.md b/node_modules/jsonc-parser/CHANGELOG.md new file mode 100644 index 0000000000..3414a3f1ff --- /dev/null +++ b/node_modules/jsonc-parser/CHANGELOG.md @@ -0,0 +1,76 @@ +3.3.0 2022-06-24 +================= +- `JSONVisitor.onObjectBegin` and `JSONVisitor.onArrayBegin` can now return `false` to instruct the visitor that no children should be visited. + + +3.2.0 2022-08-30 +================= +- update the version of the bundled Javascript files to `es2020`. +- include all `const enum` values in the bundled JavaScript files (`ScanError`, `SyntaxKind`, `ParseErrorCode`). + +3.1.0 2022-07-07 +================== + * added new API `FormattingOptions.keepLines` : It leaves the initial line positions in the formatting. + +3.0.0 2020-11-13 +================== + * fixed API spec for `parseTree`. Can return `undefine` for empty input. + * added new API `FormattingOptions.insertFinalNewline`. + + +2.3.0 2020-07-03 +================== + * new API `ModificationOptions.isArrayInsertion`: If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then `modify` will insert a new item at that location instead of overwriting its contents. + * `ModificationOptions.formattingOptions` is now optional. If not set, newly inserted content will not be formatted. + + +2.2.0 2019-10-25 +================== + * added `ParseOptions.allowEmptyContent`. Default is `false`. + * new API `getNodeType`: Returns the type of a value returned by parse. + * `parse`: Fix issue with empty property name + +2.1.0 2019-03-29 +================== + * `JSONScanner` and `JSONVisitor` return lineNumber / character. + +2.0.0 2018-04-12 +================== + * renamed `Node.columnOffset` to `Node.colonOffset` + * new API `getNodePath`: Gets the JSON path of the given JSON DOM node + * new API `findNodeAtOffset`: Finds the most inner node at the given offset. If `includeRightBound` is set, also finds nodes that end at the given offset. + +1.0.3 2018-03-07 +================== + * provide ems modules + +1.0.2 2018-03-05 +================== + * added the `visit.onComment` API, reported when comments are allowed. + * added the `ParseErrorCode.InvalidCommentToken` enum value, reported when comments are disallowed. + +1.0.1 +================== + * added the `format` API: computes edits to format a JSON document. + * added the `modify` API: computes edits to insert, remove or replace a property or value in a JSON document. + * added the `allyEdits` API: applies edits to a document + +1.0.0 +================== + * remove nls dependency (remove `getParseErrorMessage`) + +0.4.2 / 2017-05-05 +================== + * added `ParseError.offset` & `ParseError.length` + +0.4.1 / 2017-04-02 +================== + * added `ParseOptions.allowTrailingComma` + +0.4.0 / 2017-02-23 +================== + * fix for `getLocation`. Now `getLocation` inside an object will always return a property from inside that property. Can be empty string if the object has no properties or if the offset is before a actual property `{ "a": { | }} will return location ['a', ' ']` + +0.3.0 / 2017-01-17 +================== + * Updating to typescript 2.0 \ No newline at end of file diff --git a/node_modules/jsonc-parser/LICENSE.md b/node_modules/jsonc-parser/LICENSE.md new file mode 100644 index 0000000000..1c65de1db3 --- /dev/null +++ b/node_modules/jsonc-parser/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/jsonc-parser/README.md b/node_modules/jsonc-parser/README.md new file mode 100644 index 0000000000..d569b7064f --- /dev/null +++ b/node_modules/jsonc-parser/README.md @@ -0,0 +1,364 @@ +# jsonc-parser +Scanner and parser for JSON with comments. + +[![npm Package](https://img.shields.io/npm/v/jsonc-parser.svg?style=flat-square)](https://www.npmjs.org/package/jsonc-parser) +[![NPM Downloads](https://img.shields.io/npm/dm/jsonc-parser.svg)](https://npmjs.org/package/jsonc-parser) +[![Build Status](https://github.com/microsoft/node-jsonc-parser/workflows/Tests/badge.svg)](https://github.com/microsoft/node-jsonc-parser/workflows/Tests) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +Why? +---- +JSONC is JSON with JavaScript style comments. This node module provides a scanner and fault tolerant parser that can process JSONC but is also useful for standard JSON. + - the *scanner* tokenizes the input string into tokens and token offsets + - the *visit* function implements a 'SAX' style parser with callbacks for the encountered properties and values. + - the *parseTree* function computes a hierarchical DOM with offsets representing the encountered properties and values. + - the *parse* function evaluates the JavaScript object represented by JSON string in a fault tolerant fashion. + - the *getLocation* API returns a location object that describes the property or value located at a given offset in a JSON document. + - the *findNodeAtLocation* API finds the node at a given location path in a JSON DOM. + - the *format* API computes edits to format a JSON document. + - the *modify* API computes edits to insert, remove or replace a property or value in a JSON document. + - the *applyEdits* API applies edits to a document. + +Installation +------------ + +``` +npm install --save jsonc-parser +``` + +API +--- + +### Scanner: +```typescript + +/** + * Creates a JSON scanner on the given text. + * If ignoreTrivia is set, whitespaces or comments are ignored. + */ +export function createScanner(text: string, ignoreTrivia: boolean = false): JSONScanner; + +/** + * The scanner object, representing a JSON scanner at a position in the input string. + */ +export interface JSONScanner { + /** + * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token. + */ + setPosition(pos: number): any; + /** + * Read the next token. Returns the token code. + */ + scan(): SyntaxKind; + /** + * Returns the zero-based current scan position, which is after the last read token. + */ + getPosition(): number; + /** + * Returns the last read token. + */ + getToken(): SyntaxKind; + /** + * Returns the last read token value. The value for strings is the decoded string content. For numbers it's of type number, for boolean it's true or false. + */ + getTokenValue(): string; + /** + * The zero-based start offset of the last read token. + */ + getTokenOffset(): number; + /** + * The length of the last read token. + */ + getTokenLength(): number; + /** + * The zero-based start line number of the last read token. + */ + getTokenStartLine(): number; + /** + * The zero-based start character (column) of the last read token. + */ + getTokenStartCharacter(): number; + /** + * An error code of the last scan. + */ + getTokenError(): ScanError; +} +``` + +### Parser: +```typescript + +export interface ParseOptions { + disallowComments?: boolean; + allowTrailingComma?: boolean; + allowEmptyContent?: boolean; +} +/** + * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. + * Therefore always check the errors list to find out if the input was valid. + */ +export declare function parse(text: string, errors?: {error: ParseErrorCode;}[], options?: ParseOptions): any; + +/** + * Parses the given text and invokes the visitor functions for each object, array and literal reached. + */ +export declare function visit(text: string, visitor: JSONVisitor, options?: ParseOptions): any; + +/** + * Visitor called by {@linkcode visit} when parsing JSON. + * + * The visitor functions have the following common parameters: + * - `offset`: Global offset within the JSON document, starting at 0 + * - `startLine`: Line number, starting at 0 + * - `startCharacter`: Start character (column) within the current line, starting at 0 + * + * Additionally some functions have a `pathSupplier` parameter which can be used to obtain the + * current `JSONPath` within the document. + */ +export interface JSONVisitor { + /** + * Invoked when an open brace is encountered and an object is started. The offset and length represent the location of the open brace. + * When `false` is returned, the array items will not be visited. + */ + onObjectBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; + + /** + * Invoked when a property is encountered. The offset and length represent the location of the property name. + * The `JSONPath` created by the `pathSupplier` refers to the enclosing JSON object, it does not include the + * property name yet. + */ + onObjectProperty?: (property: string, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; + /** + * Invoked when a closing brace is encountered and an object is completed. The offset and length represent the location of the closing brace. + */ + onObjectEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * Invoked when an open bracket is encountered. The offset and length represent the location of the open bracket. + * When `false` is returned, the array items will not be visited.* + */ + onArrayBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; + /** + * Invoked when a closing bracket is encountered. The offset and length represent the location of the closing bracket. + */ + onArrayEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * Invoked when a literal value is encountered. The offset and length represent the location of the literal value. + */ + onLiteralValue?: (value: any, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; + /** + * Invoked when a comma or colon separator is encountered. The offset and length represent the location of the separator. + */ + onSeparator?: (character: string, offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * When comments are allowed, invoked when a line or block comment is encountered. The offset and length represent the location of the comment. + */ + onComment?: (offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * Invoked on an error. + */ + onError?: (error: ParseErrorCode, offset: number, length: number, startLine: number, startCharacter: number) => void; +} + +/** + * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. + */ +export declare function parseTree(text: string, errors?: ParseError[], options?: ParseOptions): Node | undefined; + +export declare type NodeType = "object" | "array" | "property" | "string" | "number" | "boolean" | "null"; +export interface Node { + type: NodeType; + value?: any; + offset: number; + length: number; + colonOffset?: number; + parent?: Node; + children?: Node[]; +} + +``` + +### Utilities: +```typescript +/** + * Takes JSON with JavaScript-style comments and remove + * them. Optionally replaces every none-newline character + * of comments with a replaceCharacter + */ +export declare function stripComments(text: string, replaceCh?: string): string; + +/** + * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index. + */ +export declare function getLocation(text: string, position: number): Location; + +/** + * A {@linkcode JSONPath} segment. Either a string representing an object property name + * or a number (starting at 0) for array indices. + */ +export declare type Segment = string | number; +export declare type JSONPath = Segment[]; +export interface Location { + /** + * The previous property key or literal value (string, number, boolean or null) or undefined. + */ + previousNode?: Node; + /** + * The path describing the location in the JSON document. The path consists of a sequence strings + * representing an object property or numbers for array indices. + */ + path: JSONPath; + /** + * Matches the locations path against a pattern consisting of strings (for properties) and numbers (for array indices). + * '*' will match a single segment, of any property name or index. + * '**' will match a sequence of segments or no segment, of any property name or index. + */ + matches: (patterns: JSONPath) => boolean; + /** + * If set, the location's offset is at a property key. + */ + isAtPropertyKey: boolean; +} + +/** + * Finds the node at the given path in a JSON DOM. + */ +export function findNodeAtLocation(root: Node, path: JSONPath): Node | undefined; + +/** + * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset. + */ +export function findNodeAtOffset(root: Node, offset: number, includeRightBound?: boolean) : Node | undefined; + +/** + * Gets the JSON path of the given JSON DOM node + */ +export function getNodePath(node: Node): JSONPath; + +/** + * Evaluates the JavaScript object of the given JSON DOM node + */ +export function getNodeValue(node: Node): any; + +/** + * Computes the edit operations needed to format a JSON document. + * + * @param documentText The input text + * @param range The range to format or `undefined` to format the full content + * @param options The formatting options + * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}. + * To apply the edit operations to the input, use {@linkcode applyEdits}. + */ +export function format(documentText: string, range: Range, options: FormattingOptions): EditResult; + +/** + * Computes the edit operations needed to modify a value in the JSON document. + * + * @param documentText The input text + * @param path The path of the value to change. The path represents either to the document root, a property or an array item. + * If the path points to an non-existing property or item, it will be created. + * @param value The new value for the specified property or item. If the value is undefined, + * the property or item will be removed. + * @param options Options + * @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}. + * To apply the edit operations to the input, use {@linkcode applyEdits}. + */ +export function modify(text: string, path: JSONPath, value: any, options: ModificationOptions): EditResult; + +/** + * Applies edits to an input string. + * @param text The input text + * @param edits Edit operations following the format described in {@linkcode EditResult}. + * @returns The text with the applied edits. + * @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}. + */ +export function applyEdits(text: string, edits: EditResult): string; + +/** + * An edit result describes a textual edit operation. It is the result of a {@linkcode format} and {@linkcode modify} operation. + * It consist of one or more edits describing insertions, replacements or removals of text segments. + * * The offsets of the edits refer to the original state of the document. + * * No two edits change or remove the same range of text in the original document. + * * Multiple edits can have the same offset if they are multiple inserts, or an insert followed by a remove or replace. + * * The order in the array defines which edit is applied first. + * To apply an edit result use {@linkcode applyEdits}. + * In general multiple EditResults must not be concatenated because they might impact each other, producing incorrect or malformed JSON data. + */ +export type EditResult = Edit[]; + +/** + * Represents a text modification + */ +export interface Edit { + /** + * The start offset of the modification. + */ + offset: number; + /** + * The length of the modification. Must not be negative. Empty length represents an *insert*. + */ + length: number; + /** + * The new content. Empty content represents a *remove*. + */ + content: string; +} + +/** + * A text range in the document +*/ +export interface Range { + /** + * The start offset of the range. + */ + offset: number; + /** + * The length of the range. Must not be negative. + */ + length: number; +} + +/** + * Options used by {@linkcode format} when computing the formatting edit operations + */ +export interface FormattingOptions { + /** + * If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent? + */ + tabSize: number; + /** + * Is indentation based on spaces? + */ + insertSpaces: boolean; + /** + * The default 'end of line' character + */ + eol: string; +} + +/** + * Options used by {@linkcode modify} when computing the modification edit operations + */ +export interface ModificationOptions { + /** + * Formatting options. If undefined, the newly inserted code will be inserted unformatted. + */ + formattingOptions?: FormattingOptions; + /** + * Default false. If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then + * {@linkcode modify} will insert a new item at that location instead of overwriting its contents. + */ + isArrayInsertion?: boolean; + /** + * Optional function to define the insertion index given an existing list of properties. + */ + getInsertionIndex?: (properties: string[]) => number; +} +``` + + +License +------- + +(MIT License) + +Copyright 2018, Microsoft diff --git a/node_modules/jsonc-parser/SECURITY.md b/node_modules/jsonc-parser/SECURITY.md new file mode 100644 index 0000000000..f7b89984f0 --- /dev/null +++ b/node_modules/jsonc-parser/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). + + \ No newline at end of file diff --git a/node_modules/jsonc-parser/package.json b/node_modules/jsonc-parser/package.json new file mode 100644 index 0000000000..6536a20b66 --- /dev/null +++ b/node_modules/jsonc-parser/package.json @@ -0,0 +1,37 @@ +{ + "name": "jsonc-parser", + "version": "3.3.1", + "description": "Scanner and parser for JSON with comments.", + "main": "./lib/umd/main.js", + "typings": "./lib/umd/main.d.ts", + "module": "./lib/esm/main.js", + "author": "Microsoft Corporation", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/node-jsonc-parser" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/microsoft/node-jsonc-parser/issues" + }, + "devDependencies": { + "@types/mocha": "^10.0.7", + "@types/node": "^18.x", + "@typescript-eslint/eslint-plugin": "^7.13.1", + "@typescript-eslint/parser": "^7.13.1", + "eslint": "^8.57.0", + "mocha": "^10.4.0", + "rimraf": "^5.0.7", + "typescript": "^5.4.2" + }, + "scripts": { + "prepack": "npm run clean && npm run compile-esm && npm run test && npm run remove-sourcemap-refs", + "compile": "tsc -p ./src && npm run lint", + "compile-esm": "tsc -p ./src/tsconfig.esm.json", + "remove-sourcemap-refs": "node ./build/remove-sourcemap-refs.js", + "clean": "rimraf lib", + "watch": "tsc -w -p ./src", + "test": "npm run compile && mocha ./lib/umd/test", + "lint": "eslint src/**/*.ts" + } +} diff --git a/node_modules/jsonpointer/LICENSE.md b/node_modules/jsonpointer/LICENSE.md new file mode 100644 index 0000000000..ac32f5dfdd --- /dev/null +++ b/node_modules/jsonpointer/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/jsonpointer/README.md b/node_modules/jsonpointer/README.md new file mode 100644 index 0000000000..81c1c3960d --- /dev/null +++ b/node_modules/jsonpointer/README.md @@ -0,0 +1,45 @@ +# JSON Pointer for Node.js + +This is an implementation of [JSON Pointer](https://tools.ietf.org/html/rfc6901). + +## CLI + +Looking to filter JSON from the command line? Check out [jsonpointer-cli](https://github.com/joeyespo/jsonpointer-cli). + +## Usage +```javascript +var jsonpointer = require('jsonpointer'); +var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]}; + +jsonpointer.get(obj, '/foo'); // returns 1 +jsonpointer.get(obj, '/bar/baz'); // returns 2 +jsonpointer.get(obj, '/qux/0'); // returns 3 +jsonpointer.get(obj, '/qux/1'); // returns 4 +jsonpointer.get(obj, '/qux/2'); // returns 5 +jsonpointer.get(obj, '/quo'); // returns undefined + +jsonpointer.set(obj, '/foo', 6); // sets obj.foo = 6; +jsonpointer.set(obj, '/qux/-', 6) // sets obj.qux = [3, 4, 5, 6] + +var pointer = jsonpointer.compile('/foo') +pointer.get(obj) // returns 1 +pointer.set(obj, 1) // sets obj.foo = 1 +``` + +## Testing + + $ npm test + All tests pass. + $ + +[![Node.js CI](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml/badge.svg)](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml) + +## Author + +(c) 2011-2021 Jan Lehnardt & Marc Bachmann + +Thanks to all contributors. + +## License + +MIT License. diff --git a/node_modules/jsonpointer/jsonpointer.d.ts b/node_modules/jsonpointer/jsonpointer.d.ts new file mode 100644 index 0000000000..705bebca0a --- /dev/null +++ b/node_modules/jsonpointer/jsonpointer.d.ts @@ -0,0 +1,35 @@ +interface JSONPointer { + /** + * Looks up a JSON pointer in an object + */ + get(object: Object): any; + + + /** + * Set a value for a JSON pointer on object + */ + set(object: Object, value: any): void; +} + + +declare namespace JSONPointer { + /** + * Looks up a JSON pointer in an object + */ + function get(object: Object, pointer: string): any; + + + /** + * Set a value for a JSON pointer on object + */ + function set(object: Object, pointer: string, value: any): void; + + + /** + * Builds a JSONPointer instance from a pointer value. + */ + function compile(pointer: string): JSONPointer; +} + + +export = JSONPointer; diff --git a/node_modules/jsonpointer/jsonpointer.js b/node_modules/jsonpointer/jsonpointer.js new file mode 100644 index 0000000000..dad907d763 --- /dev/null +++ b/node_modules/jsonpointer/jsonpointer.js @@ -0,0 +1,100 @@ +var hasExcape = /~/ +var escapeMatcher = /~[01]/g +function escapeReplacer (m) { + switch (m) { + case '~1': return '/' + case '~0': return '~' + } + throw new Error('Invalid tilde escape: ' + m) +} + +function untilde (str) { + if (!hasExcape.test(str)) return str + return str.replace(escapeMatcher, escapeReplacer) +} + +function setter (obj, pointer, value) { + var part + var hasNextPart + + for (var p = 1, len = pointer.length; p < len;) { + if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj + + part = untilde(pointer[p++]) + hasNextPart = len > p + + if (typeof obj[part] === 'undefined') { + // support setting of /- + if (Array.isArray(obj) && part === '-') { + part = obj.length + } + + // support nested objects/array when setting values + if (hasNextPart) { + if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] + else obj[part] = {} + } + } + + if (!hasNextPart) break + obj = obj[part] + } + + var oldValue = obj[part] + if (value === undefined) delete obj[part] + else obj[part] = value + return oldValue +} + +function compilePointer (pointer) { + if (typeof pointer === 'string') { + pointer = pointer.split('/') + if (pointer[0] === '') return pointer + throw new Error('Invalid JSON pointer.') + } else if (Array.isArray(pointer)) { + for (const part of pointer) { + if (typeof part !== 'string' && typeof part !== 'number') { + throw new Error('Invalid JSON pointer. Must be of type string or number.') + } + } + return pointer + } + + throw new Error('Invalid JSON pointer.') +} + +function get (obj, pointer) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + var len = pointer.length + if (len === 1) return obj + + for (var p = 1; p < len;) { + obj = obj[untilde(pointer[p++])] + if (len === p) return obj + if (typeof obj !== 'object' || obj === null) return undefined + } +} + +function set (obj, pointer, value) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') + return setter(obj, pointer, value) +} + +function compile (pointer) { + var compiled = compilePointer(pointer) + return { + get: function (object) { + return get(object, compiled) + }, + set: function (object, value) { + return set(object, compiled, value) + } + } +} + +exports.get = get +exports.set = set +exports.compile = compile diff --git a/node_modules/jsonpointer/package.json b/node_modules/jsonpointer/package.json new file mode 100644 index 0000000000..a832ba9fc4 --- /dev/null +++ b/node_modules/jsonpointer/package.json @@ -0,0 +1,48 @@ +{ + "name": "jsonpointer", + "description": "Simple JSON Addressing.", + "tags": [ + "util", + "simple", + "util", + "utility" + ], + "version": "5.0.1", + "author": "Jan Lehnardt ", + "contributors": [ + "Joe Hildebrand ", + "Marc Bachmann " + ], + "repository": { + "type": "git", + "url": "https://github.com/janl/node-jsonpointer.git" + }, + "bugs": { + "url": "http://github.com/janl/node-jsonpointer/issues" + }, + "engines": { + "node": ">=0.10.0" + }, + "main": "./jsonpointer", + "typings": "jsonpointer.d.ts", + "files": [ + "jsonpointer.js", + "jsonpointer.d.ts" + ], + "scripts": { + "test": "npm run test:standard && npm run test:all", + "test:standard": "standard", + "test:all": "node test.js", + "semantic-release": "semantic-release pre && npm publish && semantic-release post" + }, + "license": "MIT", + "devDependencies": { + "semantic-release": "^18.0.0", + "standard": "^16.0.4" + }, + "standard": { + "ignore": [ + "test.js" + ] + } +} diff --git a/node_modules/katex/LICENSE b/node_modules/katex/LICENSE new file mode 100644 index 0000000000..37c6433e3b --- /dev/null +++ b/node_modules/katex/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2020 Khan Academy and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/katex/README.md b/node_modules/katex/README.md new file mode 100644 index 0000000000..09e86f575a --- /dev/null +++ b/node_modules/katex/README.md @@ -0,0 +1,125 @@ +

+ + + KaTeX + +

+ +[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) +[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) +[![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI) +[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/main/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) +[![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) +![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX) +[![Financial Contributors on Open Collective](https://opencollective.com/katex/all/badge.svg?label=financial+contributors)](https://opencollective.com/katex) + +KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. + + * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](https://www.intmath.com/cg5/katex-mathjax-comparison.php). + * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. + * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. + * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. + +KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 11. + +KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). + +Try out KaTeX [on the demo page](https://katex.org/#demo)! + +## Getting started + +### Starter template + +```html + + + + + + + + + + + + + ... + +``` + +You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. + +For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). + +### API + +Call `katex.render` to render a TeX expression directly into a DOM element. +For example: + +```js +katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { + throwOnError: false +}); +``` + +Call `katex.renderToString` to generate an HTML string of the rendered math, +e.g., for server-side rendering. For example: + +```js +var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { + throwOnError: false +}); +// '...' +``` + +Make sure to include the CSS and font files in both cases. +If you are doing all rendering on the server, there is no need to include the +JavaScript on the client. + +The examples above use the `throwOnError: false` option, which renders invalid +inputs as the TeX source code in red (by default), with the error message as +hover text. For other available options, see the +[API documentation](https://katex.org/docs/api.html), +[options documentation](https://katex.org/docs/options.html), and +[handling errors documentation](https://katex.org/docs/error.html). + +## Demo and Documentation + +Learn more about using KaTeX [on the website](https://katex.org)! + +## Contributors + +### Code Contributors + +This project exists thanks to all the people who contribute code. If you'd like to help, see [our guide to contributing code](CONTRIBUTING.md). +Code contributors + +### Financial Contributors + +Become a financial contributor and help us sustain our community. + +#### Individuals + +Contribute on Open Collective + +#### Organizations + +Support this project with your organization. Your logo will show up here with a link to your website. + +Organization 1 +Organization 2 +Organization 3 +Organization 4 +Organization 5 +Organization 6 +Organization 7 +Organization 8 +Organization 9 +Organization 10 + +## License + +KaTeX is licensed under the [MIT License](https://opensource.org/licenses/MIT). diff --git a/node_modules/katex/cli.js b/node_modules/katex/cli.js new file mode 100755 index 0000000000..20f6237b32 --- /dev/null +++ b/node_modules/katex/cli.js @@ -0,0 +1,112 @@ +#!/usr/bin/env node +// Simple CLI for KaTeX. +// Reads TeX from stdin, outputs HTML to stdout. +// To run this from the repository, you must first build KaTeX by running +// `yarn` and `yarn build`. + +/* eslint no-console:0 */ + +let katex; +try { + katex = require("./"); +} catch (e) { + console.error( + "KaTeX could not import, likely because dist/katex.js is missing."); + console.error("Please run 'yarn' and 'yarn build' before running"); + console.error("cli.js from the KaTeX repository."); + console.error(); + throw e; +} +const {version} = require("./package.json"); +const fs = require("fs"); + +const program = require("commander").version(version); +for (const prop in katex.SETTINGS_SCHEMA) { + if (katex.SETTINGS_SCHEMA.hasOwnProperty(prop)) { + const opt = katex.SETTINGS_SCHEMA[prop]; + if (opt.cli !== false) { + program.option(opt.cli || "--" + prop, opt.cliDescription || + opt.description, opt.cliProcessor, opt.cliDefault); + } + } +} +program.option("-f, --macro-file ", + "Read macro definitions, one per line, from the given file.") + .option("-i, --input ", "Read LaTeX input from the given file.") + .option("-o, --output ", "Write html output to the given file."); + +let options; + +function readMacros() { + if (options.macroFile) { + fs.readFile(options.macroFile, "utf-8", function(err, data) { + if (err) {throw err;} + splitMacros(data.toString().split('\n')); + }); + } else { + splitMacros([]); + } +} + +function splitMacros(macroStrings) { + // Override macros from macro file (if any) + // with macros from command line (if any) + macroStrings = macroStrings.concat(options.macro); + + const macros = {}; + + for (const m of macroStrings) { + const i = m.search(":"); + if (i !== -1) { + macros[m.substring(0, i).trim()] = m.substring(i + 1).trim(); + } + } + + options.macros = macros; + readInput(); +} + +function readInput() { + let input = ""; + + if (options.input) { + fs.readFile(options.input, "utf-8", function(err, data) { + if (err) {throw err;} + input = data.toString(); + writeOutput(input); + }); + } else { + process.stdin.on("data", function(chunk) { + input += chunk.toString(); + }); + + process.stdin.on("end", function() { + writeOutput(input); + }); + } +} + +function writeOutput(input) { + // --format specifies the KaTeX output + const outputFile = options.output; + options.output = options.format; + + const output = katex.renderToString(input, options) + "\n"; + + if (outputFile) { + fs.writeFile(outputFile, output, function(err) { + if (err) { + return console.log(err); + } + }); + } else { + console.log(output); + } +} + +if (require.main !== module) { + module.exports = program; +} else { + options = program.parse(process.argv).opts(); + readMacros(); +} diff --git a/node_modules/katex/contrib/auto-render/README.md b/node_modules/katex/contrib/auto-render/README.md new file mode 100644 index 0000000000..ea793f1c09 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/README.md @@ -0,0 +1,8 @@ +# Auto-render extension + +This is an extension to automatically render all of the math inside of text. It +searches all of the text nodes in a given element for the given delimiters, and +renders the math in place. + +See [Auto-render extension documentation](https://katex.org/docs/autorender.html) +for more information. diff --git a/node_modules/katex/contrib/auto-render/auto-render.js b/node_modules/katex/contrib/auto-render/auto-render.js new file mode 100644 index 0000000000..eceee5b980 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/auto-render.js @@ -0,0 +1,142 @@ +/* eslint no-console:0 */ + +import katex from "katex"; +import splitAtDelimiters from "./splitAtDelimiters"; + +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ +const renderMathInText = function(text, optionsCopy) { + const data = splitAtDelimiters(text, optionsCopy.delimiters); + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + const fragment = document.createDocumentFragment(); + + for (let i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + const span = document.createElement("span"); + let math = data[i].data; + // Override any display mode defined in the settings with that + // defined by the text itself + optionsCopy.displayMode = data[i].display; + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + katex.render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof katex.ParseError)) { + throw e; + } + optionsCopy.errorCallback( + "KaTeX auto-render: Failed to parse `" + data[i].data + + "` with ", + e + ); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + fragment.appendChild(span); + } + } + + return fragment; +}; + +const renderElem = function(elem, optionsCopy) { + for (let i = 0; i < elem.childNodes.length; i++) { + const childNode = elem.childNodes[i]; + if (childNode.nodeType === 3) { + // Text node + // Concatenate all sibling text nodes. + // Webkit browsers split very large text nodes into smaller ones, + // so the delimiters may be split across different nodes. + let textContentConcat = childNode.textContent; + let sibling = childNode.nextSibling; + let nSiblings = 0; + while (sibling && (sibling.nodeType === Node.TEXT_NODE)) { + textContentConcat += sibling.textContent; + sibling = sibling.nextSibling; + nSiblings++; + } + const frag = renderMathInText(textContentConcat, optionsCopy); + if (frag) { + // Remove extra text nodes + for (let j = 0; j < nSiblings; j++) { + childNode.nextSibling.remove(); + } + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } else { + // If the concatenated text does not contain math + // the siblings will not either + i += nSiblings; + } + } else if (childNode.nodeType === 1) { + // Element node + const className = ' ' + childNode.className + ' '; + const shouldRender = optionsCopy.ignoredTags.indexOf( + childNode.nodeName.toLowerCase()) === -1 && + optionsCopy.ignoredClasses.every( + x => className.indexOf(' ' + x + ' ') === -1); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + } + // Otherwise, it's something else, and ignore it. + } +}; + +const renderMathInElement = function(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + const optionsCopy = {}; + + // Object.assign(optionsCopy, option) + for (const option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } + + // default options + optionsCopy.delimiters = optionsCopy.delimiters || [ + {left: "$$", right: "$$", display: true}, + {left: "\\(", right: "\\)", display: false}, + // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + + // Render AMS environments even if outside $$…$$ delimiters. + {left: "\\begin{equation}", right: "\\end{equation}", display: true}, + {left: "\\begin{align}", right: "\\end{align}", display: true}, + {left: "\\begin{alignat}", right: "\\end{alignat}", display: true}, + {left: "\\begin{gather}", right: "\\end{gather}", display: true}, + {left: "\\begin{CD}", right: "\\end{CD}", display: true}, + + {left: "\\[", right: "\\]", display: true}, + ]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || [ + "script", "noscript", "style", "textarea", "pre", "code", "option", + ]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; + + // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + optionsCopy.macros = optionsCopy.macros || {}; + + renderElem(elem, optionsCopy); +}; + +export default renderMathInElement; diff --git a/node_modules/katex/contrib/auto-render/index.html b/node_modules/katex/contrib/auto-render/index.html new file mode 100644 index 0000000000..d0849b5c45 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/index.html @@ -0,0 +1,56 @@ + + + + + + Auto-render test + + + + + +
+ This is some text $math \frac12$ other text $\unsupported$ + + Other node \[ \text{displaymath} \frac{1}{2} \] blah $$ \int_2^3 $$ + + and some more text \(and math\) blah. And $math with a + \$ sign$. +
+        Stuff in a $pre tag$
+      
+

An AMS environment without $$…$$ delimiters.

+

\begin{equation} \begin{split} a &=b+c\\ &=e+f \end{split} \end{equation}

+
+ + + diff --git a/node_modules/katex/contrib/auto-render/splitAtDelimiters.js b/node_modules/katex/contrib/auto-render/splitAtDelimiters.js new file mode 100644 index 0000000000..21b59030a5 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/splitAtDelimiters.js @@ -0,0 +1,85 @@ +/* eslint no-constant-condition:0 */ +const findEndOfMath = function(delimiter, text, startIndex) { + // Adapted from + // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx + let index = startIndex; + let braceLevel = 0; + + const delimLength = delimiter.length; + + while (index < text.length) { + const character = text[index]; + + if (braceLevel <= 0 && + text.slice(index, index + delimLength) === delimiter) { + return index; + } else if (character === "\\") { + index++; + } else if (character === "{") { + braceLevel++; + } else if (character === "}") { + braceLevel--; + } + + index++; + } + + return -1; +}; + +const escapeRegex = function(string) { + return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); +}; + +const amsRegex = /^\\begin{/; + +const splitAtDelimiters = function(text, delimiters) { + let index; + const data = []; + + const regexLeft = new RegExp( + "(" + delimiters.map((x) => escapeRegex(x.left)).join("|") + ")" + ); + + while (true) { + index = text.search(regexLeft); + if (index === -1) { + break; + } + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index), + }); + text = text.slice(index); // now text starts with delimiter + } + // ... so this always succeeds: + const i = delimiters.findIndex((delim) => text.startsWith(delim.left)); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + if (index === -1) { + break; + } + const rawData = text.slice(0, index + delimiters[i].right.length); + const math = amsRegex.test(rawData) + ? rawData + : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData, + display: delimiters[i].display, + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text, + }); + } + + return data; +}; + +export default splitAtDelimiters; diff --git a/node_modules/katex/contrib/auto-render/test/auto-render-spec.js b/node_modules/katex/contrib/auto-render/test/auto-render-spec.js new file mode 100644 index 0000000000..e4038b59aa --- /dev/null +++ b/node_modules/katex/contrib/auto-render/test/auto-render-spec.js @@ -0,0 +1,363 @@ +/** + * @jest-environment jsdom + */ +import splitAtDelimiters from "../splitAtDelimiters"; +import renderMathInElement from "../auto-render"; + +beforeEach(function() { + expect.extend({ + toSplitInto: function(actual, result, delimiters) { + const message = { + pass: true, + message: () => "'" + actual + "' split correctly", + }; + + const split = + splitAtDelimiters(actual, delimiters); + + if (split.length !== result.length) { + message.pass = false; + message.message = () => "Different number of splits: " + + split.length + " vs. " + result.length + " (" + + JSON.stringify(split) + " vs. " + + JSON.stringify(result) + ")"; + return message; + } + + for (let i = 0; i < split.length; i++) { + const real = split[i]; + const correct = result[i]; + + let good = true; + let diff; + + if (real.type !== correct.type) { + good = false; + diff = "type"; + } else if (real.data !== correct.data) { + good = false; + diff = "data"; + } else if (real.display !== correct.display) { + good = false; + diff = "display"; + } + + if (!good) { + message.pass = false; + message.message = () => "Difference at split " + + (i + 1) + ": " + JSON.stringify(real) + + " vs. " + JSON.stringify(correct) + + " (" + diff + " differs)"; + break; + } + } + + return message; + }, + }); +}); + +describe("A delimiter splitter", function() { + it("doesn't split when there are no delimiters", function() { + expect("hello").toSplitInto( + [ + {type: "text", data: "hello"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("doesn't create a math node with only one left delimiter", function() { + expect("hello ( world").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "text", data: "( world"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("doesn't split when there's only a right delimiter", function() { + expect("hello ) world").toSplitInto( + [ + {type: "text", data: "hello ) world"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("splits when there are both delimiters", function() { + expect("hello ( world ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("splits on multi-character delimiters", function() { + expect("hello [[ world ]] boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "[[ world ]]", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "[[", right: "]]", display: false}, + ]); + expect("hello \\begin{equation} world \\end{equation} boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: "\\begin{equation} world \\end{equation}", + rawData: "\\begin{equation} world \\end{equation}", + display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "\\begin{equation}", right: "\\end{equation}", + display: false}, + ]); + }); + + it("splits multiple times", function() { + expect("hello ( world ) boo ( more ) stuff").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo "}, + {type: "math", data: " more ", + rawData: "( more )", display: false}, + {type: "text", data: " stuff"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("leaves the ending when there's only a left delimiter", function() { + expect("hello ( world ) boo ( left").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo "}, + {type: "text", data: "( left"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("doesn't split when close delimiters are in {}s", function() { + expect("hello ( world { ) } ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world { ) } ", + rawData: "( world { ) } )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + + expect("hello ( world { { } ) } ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world { { } ) } ", + rawData: "( world { { } ) } )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("correctly processes sequences of $..$", function() { + expect("$hello$$world$$boo$").toSplitInto( + [ + {type: "math", data: "hello", + rawData: "$hello$", display: false}, + {type: "math", data: "world", + rawData: "$world$", display: false}, + {type: "math", data: "boo", + rawData: "$boo$", display: false}, + ], + [ + {left: "$", right: "$", display: false}, + ]); + }); + + it("doesn't split at escaped delimiters", function() { + expect("hello ( world \\) ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world \\) ", + rawData: "( world \\) )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + + /* TODO(emily): make this work maybe? + expect("hello \\( ( world ) boo").toSplitInto( + "(", ")", + [ + {type: "text", data: "hello \\( "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo"}, + ]); + */ + }); + + it("splits when the right and left delimiters are the same", function() { + expect("hello $ world $ boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "$ world $", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "$", right: "$", display: false}, + ]); + }); + + it("ignores \\$", function() { + expect("$x = \\$5$").toSplitInto( + [ + {type: "math", data: "x = \\$5", + rawData: "$x = \\$5$", display: false}, + ], + [ + {left: "$", right: "$", display: false}, + ]); + }); + + it("remembers which delimiters are display-mode", function() { + const startData = "hello ( world ) boo"; + + expect(splitAtDelimiters(startData, + [{left:"(", right:")", display:true}])).toEqual( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: true}, + {type: "text", data: " boo"}, + ]); + }); + + it("handles nested delimiters irrespective of order", function() { + expect(splitAtDelimiters("$\\fbox{\\(hi\\)}$", + [ + {left:"\\(", right:"\\)", display:false}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "\\fbox{\\(hi\\)}", + rawData: "$\\fbox{\\(hi\\)}$", display: false}, + ]); + expect(splitAtDelimiters("\\(\\fbox{$hi$}\\)", + [ + {left:"\\(", right:"\\)", display:false}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "\\fbox{$hi$}", + rawData: "\\(\\fbox{$hi$}\\)", display: false}, + ]); + }); + + it("handles a mix of $ and $$", function() { + expect(splitAtDelimiters("$hello$world$$boo$$", + [ + {left:"$$", right:"$$", display:true}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "hello", + rawData: "$hello$", display: false}, + {type: "text", data: "world"}, + {type: "math", data: "boo", + rawData: "$$boo$$", display: true}, + ]); + expect(splitAtDelimiters("$hello$$world$$$boo$$", + [ + {left:"$$", right:"$$", display:true}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "hello", + rawData: "$hello$", display: false}, + {type: "math", data: "world", + rawData: "$world$", display: false}, + {type: "math", data: "boo", + rawData: "$$boo$$", display: true}, + ]); + }); +}); + +describe("Pre-process callback", function() { + it("replace `-squared` with `^2 `", function() { + const el1 = document.createElement('div'); + el1.textContent = 'Circle equation: $x-squared + y-squared = r-squared$.'; + const el2 = document.createElement('div'); + el2.textContent = 'Circle equation: $x^2 + y^2 = r^2$.'; + const delimiters = [{left: "$", right: "$", display: false}]; + renderMathInElement(el1, { + delimiters, + preProcess: math => math.replace(/-squared/g, '^2'), + }); + renderMathInElement(el2, {delimiters}); + expect(el1.innerHTML).toEqual(el2.innerHTML); + }); +}); + +describe("Parse adjacent text nodes", function() { + it("parse adjacent text nodes with math", function() { + const textNodes = ['\\[', + 'x^2 + y^2 = r^2', + '\\]']; + const el = document.createElement('div'); + for (let i = 0; i < textNodes.length; i++) { + const txt = document.createTextNode(textNodes[i]); + el.appendChild(txt); + } + const el2 = document.createElement('div'); + const txt = document.createTextNode(textNodes.join('')); + el2.appendChild(txt); + const delimiters = [{left: "\\[", right: "\\]", display: true}]; + renderMathInElement(el, {delimiters}); + renderMathInElement(el2, {delimiters}); + expect(el).toStrictEqual(el2); + }); + + it("parse adjacent text nodes without math", function() { + const textNodes = ['Lorem ipsum dolor', + 'sit amet', + 'consectetur adipiscing elit']; + const el = document.createElement('div'); + for (let i = 0; i < textNodes.length; i++) { + const txt = document.createTextNode(textNodes[i]); + el.appendChild(txt); + } + const el2 = document.createElement('div'); + for (let i = 0; i < textNodes.length; i++) { + const txt = document.createTextNode(textNodes[i]); + el2.appendChild(txt); + } + const delimiters = [{left: "\\[", right: "\\]", display: true}]; + renderMathInElement(el, {delimiters}); + expect(el).toStrictEqual(el2); + }); +}); diff --git a/node_modules/katex/contrib/copy-tex/README.md b/node_modules/katex/contrib/copy-tex/README.md new file mode 100644 index 0000000000..614c796f0d --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/README.md @@ -0,0 +1,39 @@ +# Copy-tex extension + +This extension modifies the copy/paste behavior in any browser supporting the +[Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent) +so that, when selecting and copying KaTeX-rendered elements, the text +content of the resulting clipboard renders KaTeX elements as their LaTeX source +surrounded by specified delimiters. (The HTML content of the resulting +clipboard remains the selected HTML content, as it normally would.) +The default delimiters are `$...$` for inline math and `$$...$$` for display +math, but you can easy switch them to e.g. `\(...\)` and `\[...\]` by +modifying `copyDelimiters` in [the source code](copy-tex.js). +Note that a selection containing part of a KaTeX formula gets extended to +include the entire KaTeX formula. + +## Usage + +This extension isn't part of KaTeX proper, so the script should be separately +included in the page. + +```html + +``` + +(Note that, as of KaTeX 0.16.0, there is no longer a corresponding CSS file.) + +See [index.html](index.html) for an example. +(To run this example from a clone of the repository, run `yarn start` +in the root KaTeX directory, and then visit +http://localhost:7936/contrib/copy-tex/index.html +with your web browser.) + +If you want to build your own custom copy handler based on this one, +copy the `copy-tex.js` into your codebase and replace the `require` +statement with `require('katex/contrib/copy-tex/katex2tex.js')`. + +ECMAScript module is also available: +```html + +``` diff --git a/node_modules/katex/contrib/copy-tex/copy-tex.js b/node_modules/katex/contrib/copy-tex/copy-tex.js new file mode 100644 index 0000000000..79c91d5953 --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/copy-tex.js @@ -0,0 +1,51 @@ +// @flow + +import katexReplaceWithTex from './katex2tex'; + +// Return
element containing node, or null if not found. +function closestKatex(node: Node): ?Element { + // If node is a Text Node, for example, go up to containing Element, + // where we can apply the `closest` method. + const element: ?Element = + (node instanceof Element ? node : node.parentElement); + return element && element.closest('.katex'); +} + +// Global copy handler to modify behavior on/within .katex elements. +document.addEventListener('copy', function(event: ClipboardEvent) { + const selection = window.getSelection(); + if (selection.isCollapsed || !event.clipboardData) { + return; // default action OK if selection is empty or unchangeable + } + const clipboardData = event.clipboardData; + const range = selection.getRangeAt(0); + + // When start point is within a formula, expand to entire formula. + const startKatex = closestKatex(range.startContainer); + if (startKatex) { + range.setStartBefore(startKatex); + } + + // Similarly, when end point is within a formula, expand to entire formula. + const endKatex = closestKatex(range.endContainer); + if (endKatex) { + range.setEndAfter(endKatex); + } + + const fragment = range.cloneContents(); + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } + + const htmlContents = Array.prototype.map.call(fragment.childNodes, + (el) => (el instanceof Text ? el.textContent : el.outerHTML) + ).join(''); + + // Preserve usual HTML copy/paste behavior. + clipboardData.setData('text/html', htmlContents); + // Rewrite plain-text version. + clipboardData.setData('text/plain', + katexReplaceWithTex(fragment).textContent); + // Prevent normal copy handling. + event.preventDefault(); +}); diff --git a/node_modules/katex/contrib/copy-tex/index.html b/node_modules/katex/contrib/copy-tex/index.html new file mode 100644 index 0000000000..fa59d27326 --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/index.html @@ -0,0 +1,38 @@ + + + + + + Copy-tex test + + + + + + +

Copy-tex test

+

Try copy/pasting some of the text below!

+

+ Here is some \(\KaTeX\) math: $$ x^2+y^2=z^2 $$ + The variables are \(x\), \(y\), and \(z\), + which are all in \(\mathbb{R}^+\). + Q.E.D. +

+ + + diff --git a/node_modules/katex/contrib/copy-tex/katex2tex.js b/node_modules/katex/contrib/copy-tex/katex2tex.js new file mode 100644 index 0000000000..927003ca30 --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/katex2tex.js @@ -0,0 +1,61 @@ +// @flow + +export interface CopyDelimiters { + inline: [string, string], + display: [string, string], +} + +// Set these to how you want inline and display math to be delimited. +export const defaultCopyDelimiters: CopyDelimiters = { + inline: ['$', '$'], // alternative: ['\(', '\)'] + display: ['$$', '$$'], // alternative: ['\[', '\]'] +}; + +// Replace .katex elements with their TeX source ( element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. +export function katexReplaceWithTex( + fragment: DocumentFragment, + copyDelimiters: CopyDelimiters = defaultCopyDelimiters +): DocumentFragment { + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + for (let i = 0; i < katexHtml.length; i++) { + const element = katexHtml[i]; + if (element.remove) { + element.remove(); + } else if (element.parentNode) { + element.parentNode.removeChild(element); + } + } + // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + const katexMathml = fragment.querySelectorAll('.katex-mathml'); + for (let i = 0; i < katexMathml.length; i++) { + const element = katexMathml[i]; + const texSource = element.querySelector('annotation'); + if (texSource) { + if (element.replaceWith) { + element.replaceWith(texSource); + } else if (element.parentNode) { + element.parentNode.replaceChild(texSource, element); + } + texSource.innerHTML = copyDelimiters.inline[0] + + texSource.innerHTML + copyDelimiters.inline[1]; + } + } + // Switch display math to display delimiters. + const displays = fragment.querySelectorAll('.katex-display annotation'); + for (let i = 0; i < displays.length; i++) { + const element = displays[i]; + element.innerHTML = copyDelimiters.display[0] + + element.innerHTML.substr(copyDelimiters.inline[0].length, + element.innerHTML.length - copyDelimiters.inline[0].length + - copyDelimiters.inline[1].length) + + copyDelimiters.display[1]; + } + return fragment; +} + +export default katexReplaceWithTex; diff --git a/node_modules/katex/contrib/mathtex-script-type/README.md b/node_modules/katex/contrib/mathtex-script-type/README.md new file mode 100644 index 0000000000..39b6dfc064 --- /dev/null +++ b/node_modules/katex/contrib/mathtex-script-type/README.md @@ -0,0 +1,38 @@ +# `math/tex` Custom Script Type Extension + +This is an extension to automatically display code inside `script` tags with `type=math/tex` using KaTeX. +This script type is commonly used by MathJax, so this can be used to support compatibility with MathJax. + +### Usage + +This extension isn't part of KaTeX proper, so the script should be separately +included in the page, in addition to KaTeX. + +Load the extension by adding the following line to your HTML file. + +```html + +``` +You can download the script and use it locally, or from a local KaTeX installation instead. + +For example, in the following simple page, we first load KaTeX as usual. +Then, in the body, we use a `math/tex` script to typeset the equation `x+\sqrt{1-x^2}`. + + +```html + + + + + + + + + + + +``` + +ECMAScript module is also available: +```html + diff --git a/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js b/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js new file mode 100644 index 0000000000..592b201952 --- /dev/null +++ b/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js @@ -0,0 +1,22 @@ +import katex from "katex"; + +let scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function(script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + const display = + (script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null); + + const katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", + display ? "equation" : "inline-equation"); + try { + katex.render(script.text, katexElement, {displayMode: display}); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + script.parentNode.replaceChild(katexElement, script); +}); diff --git a/node_modules/katex/contrib/mhchem/README.md b/node_modules/katex/contrib/mhchem/README.md new file mode 100644 index 0000000000..515e5ce7e9 --- /dev/null +++ b/node_modules/katex/contrib/mhchem/README.md @@ -0,0 +1,23 @@ +# mhchem extension + +This extension adds to KaTeX the `\ce` and `\pu` functions from the [mhchem](https://mhchem.github.io/MathJax-mhchem/) package. + +### Usage + +This extension isn't part of core KaTeX, so the script should be separately included. Write the following line into the HTML page's ``. Place it *after* the line that calls `katex.js`, and if you make use of the [auto-render](https://katex.org/docs/autorender.html) extension, place it *before* the line that calls `auto-render.js`. + +```html + +``` + +If you remove the `defer` attribute from this tag, then you must also remove the `defer` attribute from the ` +``` + +And call it like so: + +```javascript +const options = { + "strings": { + "content": "Some Markdown to lint." + } +}; + +const results = globalThis.markdownlint.lintSync(options).toString(); +``` + +## Examples + +For ideas how to integrate `markdownlint` into your workflow, refer to the +following projects or one of the tools in the [Related section](#related): + +- [.NET Documentation][dot-net-doc] ([Search repository][dot-net-doc-search]) +- [ally.js][ally-js] ([Search repository][ally-js-search]) +- [Apache Airflow][airflow] ([Search repository][airflow-search]) +- [Boostnote][boostnote] ([Search repository][boostnote-search]) +- [CodiMD][codimd] ([Search repository][codimd-search]) +- [Electron][electron] ([Search repository][electron-search]) +- [ESLint][eslint] ([Search repository][eslint-search]) +- [Garden React Components][garden] ([Search repository][garden-search]) +- [MDN Web Docs][mdn] ([Search repository][mdn-search]) +- [MkDocs][mkdocs] ([Search repository][mkdocs-search]) +- [Mocha][mocha] ([Search repository][mocha-search]) +- [Pi-hole documentation][pi-hole] ([Search repository][pi-hole-search]) +- [Reactable][reactable] ([Search repository][reactable-search]) +- [V8][v8] ([Search repository][v8-search]) +- [webhint][webhint] ([Search repository][webhint-search]) +- [webpack][webpack] ([Search repository][webpack-search]) +- [WordPress][wordpress] ([Search repository][wordpress-search]) + +For more advanced integration scenarios: + +- [GitHub Docs content linter][content-linter] +- [GitHub's `markdownlint-github` repository][markdownlint-github] + +[ally-js]: https://allyjs.io/ +[ally-js-search]: https://github.com/medialize/ally.js/search?q=markdownlint +[airflow]: https://airflow.apache.org +[airflow-search]: https://github.com/apache/airflow/search?q=markdownlint +[boostnote]: https://boostnote.io/ +[boostnote-search]: https://github.com/BoostIO/Boostnote/search?q=markdownlint +[codimd]: https://github.com/hackmdio/codimd +[codimd-search]: https://github.com/hackmdio/codimd/search?q=markdownlint +[content-linter]: https://docs.github.com/en/contributing/collaborating-on-github-docs/using-the-content-linter +[dot-net-doc]: https://docs.microsoft.com/en-us/dotnet/ +[dot-net-doc-search]: https://github.com/dotnet/docs/search?q=markdownlint +[electron]: https://www.electronjs.org +[electron-search]: https://github.com/electron/electron/search?q=markdownlint +[eslint]: https://eslint.org/ +[eslint-search]: https://github.com/eslint/eslint/search?q=markdownlint +[garden]: https://zendeskgarden.github.io/react-components/ +[garden-search]: https://github.com/zendeskgarden/react-components/search?q=markdownlint +[markdownlint-github]: https://github.com/github/markdownlint-github +[mdn]: https://developer.mozilla.org/ +[mdn-search]: https://github.com/mdn/content/search?q=markdownlint +[mkdocs]: https://www.mkdocs.org/ +[mkdocs-search]: https://github.com/mkdocs/mkdocs/search?q=markdownlint +[mocha]: https://mochajs.org/ +[mocha-search]: https://github.com/mochajs/mocha/search?q=markdownlint +[pi-hole]: https://docs.pi-hole.net +[pi-hole-search]: https://github.com/pi-hole/docs/search?q=markdownlint +[reactable]: https://glittershark.github.io/reactable/ +[reactable-search]: https://github.com/glittershark/reactable/search?q=markdownlint +[v8]: https://v8.dev/ +[v8-search]: https://github.com/v8/v8.dev/search?q=markdownlint +[webhint]: https://webhint.io/ +[webhint-search]: https://github.com/webhintio/hint/search?q=markdownlint +[webpack]: https://webpack.js.org/ +[webpack-search]: https://github.com/webpack/webpack.js.org/search?q=markdownlint +[wordpress]: https://wordpress.org/gutenberg/ +[wordpress-search]: https://github.com/WordPress/gutenberg/search?q=markdownlint + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + +## Releasing + +See [ReleaseProcess.md](doc/ReleaseProcess.md) for more information. + +## History + +See [CHANGELOG.md](CHANGELOG.md). + +[npm-image]: https://img.shields.io/npm/v/markdownlint.svg +[npm-url]: https://www.npmjs.com/package/markdownlint +[license-image]: https://img.shields.io/npm/l/markdownlint.svg +[license-url]: https://opensource.org/licenses/MIT diff --git a/node_modules/markdownlint/doc/CustomRules.md b/node_modules/markdownlint/doc/CustomRules.md new file mode 100644 index 0000000000..8f696ac47e --- /dev/null +++ b/node_modules/markdownlint/doc/CustomRules.md @@ -0,0 +1,194 @@ +# Custom Rules + +In addition to its built-in rules, `markdownlint` lets you enhance the linting +experience by passing an array of custom rules using the [`options.customRules` +property][options-custom-rules]. Custom rules can do everything the built-in +rules can and are defined inline or imported from another package ([keyword +`markdownlint-rule` on npm][markdownlint-rule]). When defined by a file or +package, the export can be a single rule object (see below) or an array of them. +Custom rules can be disabled, enabled, and customized using the same syntax as +built-in rules. + +## Implementing Simple Rules + +For simple requirements like disallowing certain characters or patterns, +the community-developed +[markdownlint-rule-search-replace][markdownlint-rule-search-replace] +plug-in can be used. This plug-in allows anyone to create a set of simple +text-replacement rules without needing to write code. + +[markdownlint-rule-search-replace]: https://www.npmjs.com/package/markdownlint-rule-search-replace + +## Authoring + +Rules are defined by a name (or multiple names), a description, an optional link +to more information, one or more tags, and a function that implements the rule's +behavior. That function is called once for each file/string input and is passed +the parsed input and a function to log any violations. + +Custom rules can (should) operate on a structured set of tokens based on the +[`micromark`][micromark] `parser` (this is preferred). Alternatively, custom +rules can operate on a structured set of tokens based on the +[`markdown-it`][markdown-it] `parser` (legacy support). Finally, custom rules +can operate directly on text with the `none` `parser`. + +A simple rule implementation using the `micromark` parser to report a violation +for any use of blockquotes might look like: + +```javascript +/** @type {import("markdownlint").Rule} */ +module.exports = { + "names": [ "any-blockquote-micromark" ], + "description": "Rule that reports an error for any blockquote", + "information": new URL("https://example.com/rules/any-blockquote"), + "tags": [ "test" ], + "parser": "micromark", + "function": (params, onError) => { + const blockquotes = params.parsers.micromark.tokens + .filter((token) => token.type === "blockQuote"); + for (const blockquote of blockquotes) { + const lines = blockquote.endLine - blockquote.startLine + 1; + onError({ + "lineNumber": blockquote.startLine, + "detail": "Blockquote spans " + lines + " line(s).", + "context": params.lines[blockquote.startLine - 1] + }); + } + } +} +``` + +That same rule implemented using the `markdown-it` parser might look like: + +```javascript +/** @type {import("markdownlint").Rule} */ +module.exports = { + "names": [ "any-blockquote-markdown-it" ], + "description": "Rule that reports an error for any blockquote", + "information": new URL("https://example.com/rules/any-blockquote"), + "tags": [ "test" ], + "parser": "markdownit", + "function": (params, onError) => { + const blockquotes = params.parsers.markdownit.tokens + .filter((token) => token.type === "blockquote_open"); + for (const blockquote of blockquotes) { + const [ startIndex, endIndex ] = blockquote.map; + const lines = endIndex - startIndex; + onError({ + "lineNumber": blockquote.lineNumber, + "detail": "Blockquote spans " + lines + " line(s).", + "context": blockquote.line + }); + } + } +} +``` + +A rule is implemented as an `Object`: + +- `names` is a required `Array` of `String` values that identify the rule in + output messages and config. +- `description` is a required `String` value that describes the rule in output + messages. +- `information` is an optional (absolute) `URL` of a link to more information + about the rule. +- `tags` is a required `Array` of `String` values that groups related rules for + easier customization. +- `parser` is a required `String` value `"markdownit" | "micromark" | "none"` + that specifies the parser data used via `params.parsers` (see below). +- `asynchronous` is an optional `Boolean` value that indicates whether the rule + returns a `Promise` and runs asynchronously. +- `function` is a required `Function` that implements the rule and is passed two + parameters: + - `params` is an `Object` with properties that describe the content being + analyzed: + - `name` is a `String` that identifies the input file/string. + - `parsers` is an `Object` with properties corresponding to the value of + `parser` in the rule definition (see above). + - `markdownit` is an `Object` that provides access to output from the + [`markdown-it`][markdown-it] parser. + - `tokens` is an `Array` of [`markdown-it` `Token`s][markdown-it-token] + with added `line` and `lineNumber` properties. (This property was + previously on the `params` object.) + - `micromark` is an `Object` that provides access to output from the + [`micromark`][micromark] parser. + - `tokens` is an `Array` of [`MicromarkToken`][micromark-token] objects. + - Samples for both `tokens` are available via [test snapshots][tokens]. + - `lines` is an `Array` of `String` values corresponding to the lines of the + input file/string. + - `frontMatterLines` is an `Array` of `String` values corresponding to any + front matter (not present in `lines`). + - `config` is an `Object` corresponding to the rule's entry in + `options.config` (if present). + - `version` is a `String` that corresponds to the version of `markdownlint` + - `onError` is a function that takes a single `Object` parameter with one + required and four optional properties: + - `lineNumber` is a required `Number` specifying the 1-based line number of + the error. + - `detail` is an optional `String` with information about what caused the + error. + - `context` is an optional `String` with relevant text surrounding the error + location. + - `information` is an optional (absolute) `URL` of a link to override the + same-named value provided by the rule definition. (Uncommon) + - `range` is an optional `Array` with two `Number` values identifying the + 1-based column and length of the error. + - `fixInfo` is an optional `Object` with information about how to fix the + error (all properties are optional, but at least one of `deleteCount` and + `insertText` should be present; when applying a fix, the delete should be + performed before the insert): + - `lineNumber` is an optional `Number` specifying the 1-based line number + of the edit. + - `editColumn` is an optional `Number` specifying the 1-based column + number of the edit. + - `deleteCount` is an optional `Number` specifying the number of + characters to delete (the value `-1` is used to delete the line). + - `insertText` is an optional `String` specifying the text to insert. `\n` + is the platform-independent way to add a line break; line breaks should + be added at the beginning of a line instead of at the end. + +The collection of helper functions shared by the built-in rules is available for +use by custom rules in the [markdownlint-rule-helpers package][rule-helpers]. + +### Asynchronous Rules + +If a rule needs to perform asynchronous operations (such as fetching a network +resource), it can specify the value `true` for its `asynchronous` property. +Asynchronous rules should return a `Promise` from their `function` +implementation that is resolved when the rule completes. (The value passed to +`resolve(...)` is ignored.) Linting violations from asynchronous rules are +reported via the `onError` function just like for synchronous rules. + +**Note**: Asynchronous rules cannot be referenced in a synchronous calling +context (i.e., `import { lint } from "markdownlint/sync"`). Attempting to do so +throws an exception. + +## Examples + +- [Simple rules used by the project's test cases][test-rules] +- [Code for all `markdownlint` built-in rules][lib] +- [Complete example rule including npm configuration][extended-ascii] +- [Custom rules from the github/docs repository][github-docs] +- [Custom rules from the electron/lint-roller repository][electron] +- [Custom rules from the webhintio/hint repository][hint] + +## References + +- [CommonMark documentation and specification][commonmark] +- [`markdown-it` Markdown parser project page][markdown-it] + +[commonmark]: https://commonmark.org/ +[electron]: https://github.com/electron/lint-roller/tree/main/markdownlint-rules +[extended-ascii]: https://github.com/DavidAnson/markdownlint-rule-extended-ascii +[github-docs]: https://github.com/github/docs/tree/main/src/content-linter/lib/linting-rules +[hint]: https://github.com/webhintio/hint/blob/main/scripts/lint-markdown.js +[lib]: ../lib +[markdown-it]: https://github.com/markdown-it/markdown-it +[markdown-it-token]: https://markdown-it.github.io/markdown-it/#Token +[markdownlint-rule]: https://www.npmjs.com/search?q=keywords:markdownlint-rule +[micromark]: https://github.com/micromark/micromark +[micromark-token]: ../lib/markdownlint.d.mts +[rule-helpers]: https://www.npmjs.com/package/markdownlint-rule-helpers +[options-custom-rules]: ../README.md#optionscustomrules +[test-rules]: ../test/rules +[tokens]: ../test/snapshots/markdownlint-test-custom-rules.mjs.md diff --git a/node_modules/markdownlint/doc/Prettier.md b/node_modules/markdownlint/doc/Prettier.md new file mode 100644 index 0000000000..0ebde95d38 --- /dev/null +++ b/node_modules/markdownlint/doc/Prettier.md @@ -0,0 +1,27 @@ +# Using `markdownlint` with Prettier + +[`Prettier`](https://prettier.io) is a popular code formatter. +For the most part, Prettier works seamlessly with `markdownlint`. + +You can `extend` the [`prettier.json`](../style/prettier.json) style to disable +all `markdownlint` rules that overlap with Prettier. + +Other scenarios are documented below. + +## List item indentation + +The default settings of `markdownlint` and `Prettier` are compatible and don't +result in any linting violations. If `Prettier` is used with `--tab-width` set +to `4` (vs. `2`), the following `markdownlint` configuration can be used: + +```json +{ + "list-marker-space": { + "ul_multi": 3, + "ul_single": 3 + }, + "ul-indent": { + "indent": 4 + } +} +``` diff --git a/node_modules/markdownlint/doc/ReleaseProcess.md b/node_modules/markdownlint/doc/ReleaseProcess.md new file mode 100644 index 0000000000..05c7b70027 --- /dev/null +++ b/node_modules/markdownlint/doc/ReleaseProcess.md @@ -0,0 +1,20 @@ +# Release Process + +The `markdownlint` library has some related dependencies that are updated along +with it. To prevent possible regressions from having a widespread impact, these +releases are separated by a few days to provide an opportunity to find issues. + +1. [`markdownlint`][markdownlint] +2. [`markdownlint-cli2`][markdownlint-cli2] +3. [`markdownlint-cli2-action`][markdownlint-cli2-action] +4. [`vscode-markdownlint`][vscode-markdownlint] +5. [`markdownlint-cli`][markdownlint-cli] + +This sequence is not strict and may be adjusted based on the content of the +release and the scope of feature work in each dependency. + +[markdownlint]: https://github.com/DavidAnson/markdownlint +[markdownlint-cli2]: https://github.com/DavidAnson/markdownlint-cli2 +[markdownlint-cli2-action]: https://github.com/marketplace/actions/markdownlint-cli2-action +[vscode-markdownlint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint +[markdownlint-cli]: https://github.com/igorshubovych/markdownlint-cli diff --git a/node_modules/markdownlint/doc/Rules.md b/node_modules/markdownlint/doc/Rules.md new file mode 100644 index 0000000000..ded40d8aa3 --- /dev/null +++ b/node_modules/markdownlint/doc/Rules.md @@ -0,0 +1,2535 @@ +# Rules + +This document contains a description of all rules, what they are checking for, +as well as examples of documents that break the rule and corrected +versions of the examples. + + + +## `MD001` - Heading levels should only increment by one level at a time + +Tags: `headings` + +Aliases: `heading-increment` + +This rule is triggered when you skip heading levels in a Markdown document, for +example: + +```markdown +# Heading 1 + +### Heading 3 + +We skipped out a 2nd level heading in this document +``` + +When using multiple heading levels, nested headings should increase by only one +level at a time: + +```markdown +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +## Another Heading 2 + +### Another Heading 3 +``` + +Rationale: Headings represent the structure of a document and can be confusing +when skipped - especially for accessibility scenarios. More information: +. + + + +## `MD003` - Heading style + +Tags: `headings` + +Aliases: `heading-style` + +Parameters: + +- `style`: Heading style (`string`, default `consistent`, values `atx` / + `atx_closed` / `consistent` / `setext` / `setext_with_atx` / + `setext_with_atx_closed`) + +This rule is triggered when different heading styles are used in the same +document: + +```markdown +# ATX style H1 + +## Closed ATX style H2 ## + +Setext style H1 +=============== +``` + +To fix the issue, use consistent heading styles throughout the document: + +```markdown +# ATX style H1 + +## ATX style H2 +``` + +The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style +headings of level 3 or more in documents with setext-style headings (which only +support level 1 and 2 headings): + +```markdown +Setext style H1 +=============== + +Setext style H2 +--------------- + +### ATX style H3 +``` + +Note: The configured heading style can be a specific style to require (`atx`, +`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can +require that all heading styles match the first heading style via `consistent`. + +Note: The placement of a horizontal rule directly below a line of text can +trigger this rule by turning that text into a level 2 setext-style heading: + +```markdown +A line of text followed by a horizontal rule becomes a heading +--- +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD004` - Unordered list style + +Tags: `bullet`, `ul` + +Aliases: `ul-style` + +Parameters: + +- `style`: List style (`string`, default `consistent`, values `asterisk` / + `consistent` / `dash` / `plus` / `sublist`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for unordered +list items do not match the configured unordered list style: + +```markdown +* Item 1 ++ Item 2 +- Item 3 +``` + +To fix this issue, use the configured style for list items throughout the +document: + +```markdown +* Item 1 +* Item 2 +* Item 3 +``` + +The configured list style can ensure all list styling is a specific symbol +(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that +differs from its parent list (`sublist`), or ensure all list styles match the +first list style (`consistent`). + +For example, the following is valid for the `sublist` style because the +outer-most indent uses asterisk, the middle indent uses plus, and the inner-most +indent uses dash: + +```markdown +* Item 1 + + Item 2 + - Item 3 + + Item 4 +* Item 4 + + Item 5 +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD005` - Inconsistent indentation for list items at the same level + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `list-indent` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are parsed as being at the same level, +but don't have the same indentation: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * A misaligned item +``` + +Usually, this rule will be triggered because of a typo. Correct the indentation +for the list to fix it: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * Nested Item 3 +``` + +Sequentially-ordered list markers are usually left-aligned such that all items +have the same starting column: + +```markdown +... +8. Item +9. Item +10. Item +11. Item +... +``` + +This rule also supports right-alignment of list markers such that all items have +the same ending column: + +```markdown +... + 8. Item + 9. Item +10. Item +11. Item +... +``` + +Rationale: Violations of this rule can lead to improperly rendered content. + + + +## `MD007` - Unordered list indentation + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `ul-indent` + +Parameters: + +- `indent`: Spaces for indent (`integer`, default `2`) +- `start_indent`: Spaces for first level indent (when start_indented is set) + (`integer`, default `2`) +- `start_indented`: Whether to indent the first level of the list (`boolean`, + default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are not indented by the configured +number of spaces (default: 2). + +Example: + +```markdown +* List item + * Nested list item indented by 3 spaces +``` + +Corrected Example: + +```markdown +* List item + * Nested list item indented by 2 spaces +``` + +Note: This rule applies to a sublist only if its parent lists are all also +unordered (otherwise, extra indentation of ordered lists interferes with the +rule). + +The `start_indented` parameter allows the first level of lists to be indented by +the configured number of spaces rather than starting at zero. The `start_indent` +parameter allows the first level of lists to be indented by a different number +of spaces than the rest (ignored when `start_indented` is not set). + +Rationale: Indenting by 2 spaces allows the content of a nested list to be in +line with the start of the content of the parent list when a single space is +used after the list marker. Indenting by 4 spaces is consistent with code blocks +and simpler for editors to implement. Additionally, this can be a compatibility +issue for other Markdown parsers, which require 4-space indents. More +information: [Markdown Style Guide][markdown-style-guide]. + +Note: See [Prettier.md](Prettier.md) for compatibility information. + +[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists + + + +## `MD009` - Trailing spaces + +Tags: `whitespace` + +Aliases: `no-trailing-spaces` + +Parameters: + +- `br_spaces`: Spaces for line break (`integer`, default `2`) +- `list_item_empty_lines`: Allow spaces for empty lines in list items + (`boolean`, default `false`) +- `strict`: Include unnecessary breaks (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any lines that end with unexpected whitespace. To fix +this, remove the trailing space from the end of the line. + +Note: Trailing space is allowed in indented and fenced code blocks because some +languages require it. + +The `br_spaces` parameter allows an exception to this rule for a specific number +of trailing spaces, typically used to insert an explicit line break. The default +value allows 2 spaces to indicate a hard break (\
element). + +Note: You must set `br_spaces` to a value >= 2 for this parameter to take +effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing +spaces. + +By default, this rule will not trigger when the allowed number of spaces is +used, even when it doesn't create a hard break (for example, at the end of a +paragraph). To report such instances as well, set the `strict` parameter to +`true`. + +```markdown +Text text text +text[2 spaces] +``` + +Using spaces to indent blank lines inside a list item is usually not necessary, +but some parsers require it. Set the `list_item_empty_lines` parameter to `true` +to allow this (even when `strict` is `true`): + +```markdown +- list item text + [2 spaces] + list item text +``` + +Rationale: Except when being used to create a line break, trailing whitespace +has no purpose and does not affect the rendering of content. + + + +## `MD010` - Hard tabs + +Tags: `hard_tab`, `whitespace` + +Aliases: `no-hard-tabs` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default + `[]`) +- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered by any lines that contain hard tab characters instead +of using spaces for indentation. To fix this, replace any hard tab characters +with spaces instead. + +Example: + + + +```markdown +Some text + + * hard tab character used to indent the list item +``` + + + +Corrected example: + +```markdown +Some text + + * Spaces used to indent the list item instead +``` + +You have the option to exclude this rule for code blocks and spans. To do so, +set the `code_blocks` parameter to `false`. Code blocks and spans are included +by default since handling of tabs by Markdown tools can be inconsistent (e.g., +using 4 vs. 8 spaces). + +When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), +the `ignore_code_languages` parameter can be set to a list of languages that +should be ignored (i.e., hard tabs will be allowed, though not required). This +makes it easier for documents to include code for languages that require hard +tabs. + +By default, violations of this rule are fixed by replacing the tab with 1 space +character. To use a different number of spaces, set the `spaces_per_tab` +parameter to the desired value. + +Rationale: Hard tabs are often rendered inconsistently by different editors and +can be harder to work with than spaces. + + + +## `MD011` - Reversed link syntax + +Tags: `links` + +Aliases: `no-reversed-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when text that appears to be a link is encountered, but +where the syntax appears to have been reversed (the `[]` and `()` are +reversed): + +```markdown +(Incorrect link syntax)[https://www.example.com/] +``` + +To fix this, swap the `[]` and `()` around: + +```markdown +[Correct link syntax](https://www.example.com/) +``` + +Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style +footnotes do not trigger this rule: + +```markdown +For (example)[^1] +``` + +Rationale: Reversed links are not rendered as usable links. + + + +## `MD012` - Multiple consecutive blank lines + +Tags: `blank_lines`, `whitespace` + +Aliases: `no-multiple-blanks` + +Parameters: + +- `maximum`: Consecutive blank lines (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are multiple consecutive blank lines in the +document: + +```markdown +Some text here + + +Some more text here +``` + +To fix this, delete the offending lines: + +```markdown +Some text here + +Some more text here +``` + +Note: this rule will not be triggered if there are multiple consecutive blank +lines inside code blocks. + +Note: The `maximum` parameter can be used to configure the maximum number of +consecutive blank lines. + +Rationale: Except in a code block, blank lines serve no purpose and do not +affect the rendering of content. + + + +## `MD013` - Line length + +Tags: `line_length` + +Aliases: `line-length` + +Parameters: + +- `code_block_line_length`: Number of characters for code blocks (`integer`, + default `80`) +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `heading_line_length`: Number of characters for headings (`integer`, default + `80`) +- `headings`: Include headings (`boolean`, default `true`) +- `line_length`: Number of characters (`integer`, default `80`) +- `stern`: Stern length checking (`boolean`, default `false`) +- `strict`: Strict length checking (`boolean`, default `false`) +- `tables`: Include tables (`boolean`, default `true`) + +This rule is triggered when there are lines that are longer than the +configured `line_length` (default: 80 characters). To fix this, split the line +up into multiple lines. To set a different maximum length for headings, use +`heading_line_length`. To set a different maximum length for code blocks, use +`code_block_line_length` + +This rule has an exception when there is no whitespace beyond the configured +line length. This allows you to include items such as long URLs without being +forced to break them in the middle. To disable this exception, set the `strict` +parameter to `true` and an issue will be reported when any line is too long. To +warn for lines that are too long and could be fixed but allow long lines +without spaces, set the `stern` parameter to `true`. + +For example (assuming normal behavior): + +```markdown +IF THIS LINE IS THE MAXIMUM LENGTH +This line is okay because there are-no-spaces-beyond-that-length +This line is a violation because there are spaces beyond that length +This-line-is-okay-because-there-are-no-spaces-anywhere-within +``` + +In `strict` mode, the last three lines above are all violations. In `stern` +mode, the middle two lines above are both violations, but the last is okay. + +You have the option to exclude this rule for code blocks, tables, or headings. +To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. + +Code blocks are included in this rule by default since it is often a +requirement for document readability, and tentatively compatible with code +rules. Still, some languages do not lend themselves to short lines. + +Lines with link/image reference definitions and standalone lines (i.e., not part +of a paragraph) with only a link/image (possibly using (strong) emphasis) are +always exempted from this rule (even in `strict` mode) because there is often no +way to split such lines without breaking the URL. + +Rationale: Extremely long lines can be difficult to work with in some editors. +More information: . + + + +## `MD014` - Dollar signs used before commands without showing output + +Tags: `code` + +Aliases: `commands-show-output` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are code blocks showing shell commands to be +typed, and *all* of the shell commands are preceded by dollar signs ($): + + + +```markdown +$ ls +$ cat foo +$ less bar +``` + + + +The dollar signs are unnecessary in this situation, and should not be +included: + +```markdown +ls +cat foo +less bar +``` + +Showing output for commands preceded by dollar signs does not trigger this rule: + +```markdown +$ ls +foo bar +$ cat foo +Hello world +$ cat bar +baz +``` + +Because some commands do not produce output, it is not a violation if *some* +commands do not have output: + +```markdown +$ mkdir test +mkdir: created directory 'test' +$ ls test +``` + +Rationale: It is easier to copy/paste and less noisy if the dollar signs +are omitted when they are not needed. See + +for more information. + + + +## `MD018` - No space after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-missing-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing after the hash characters +in an atx style heading: + +```markdown +#Heading 1 + +##Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Violations of this rule can lead to improperly rendered content. + + + +## `MD019` - Multiple spaces after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-multiple-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in an atx style heading: + +```markdown +# Heading 1 + +## Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Extra space has no purpose and does not affect the rendering of +content. + + + +## `MD020` - No space inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-missing-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing inside the hash characters +in a closed atx style heading: + +```markdown +#Heading 1# + +##Heading 2## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading is missing spaces. + +Rationale: Violations of this rule can lead to improperly rendered content. + + + +## `MD021` - Multiple spaces inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-multiple-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in a closed atx style heading: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading contains multiple +spaces. + +Rationale: Extra space has no purpose and does not affect the rendering of +content. + + + +## `MD022` - Headings should be surrounded by blank lines + +Tags: `blank_lines`, `headings` + +Aliases: `blanks-around-headings` + +Parameters: + +- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) +- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when headings (any style) are either not preceded or not +followed by at least one blank line: + +```markdown +# Heading 1 +Some text + +Some more text +## Heading 2 +``` + +To fix this, ensure that all headings have a blank line both before and after +(except where the heading is at the beginning or end of the document): + +```markdown +# Heading 1 + +Some text + +Some more text + +## Heading 2 +``` + +The `lines_above` and `lines_below` parameters can be used to specify a +different number of blank lines (including `0`) above or below each heading. +If the value `-1` is used for either parameter, any number of blank lines is +allowed. To customize the number of lines above or below each heading level +individually, specify a `number[]` where values correspond to heading levels +1-6 (in order). + +Notes: If `lines_above` or `lines_below` are configured to require more than one +blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This +rule checks for *at least* as many blank lines as specified; any extra blank +lines are ignored. + +Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, +will not parse headings that don't have a blank line before, and will parse them +as regular text. + + + +## `MD023` - Headings must start at the beginning of the line + +Tags: `headings`, `spaces` + +Aliases: `heading-start-left` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a heading is indented by one or more spaces: + +```markdown +Some text + + # Indented heading +``` + +To fix this, ensure that all headings start at the beginning of the line: + +```markdown +Some text + +# Heading +``` + +Note that scenarios like block quotes "indent" the start of the line, so the +following is also correct: + +```markdown +> # Heading in Block Quote +``` + +Rationale: Headings that don't start at the beginning of the line will not be +parsed as headings, and will instead appear as regular text. + + + +## `MD024` - Multiple headings with the same content + +Tags: `headings` + +Aliases: `no-duplicate-heading` + +Parameters: + +- `siblings_only`: Only check sibling headings (`boolean`, default `false`) + +This rule is triggered if there are multiple headings in the document that have +the same text: + +```markdown +# Some text + +## Some text +``` + +To fix this, ensure that the content of each heading is different: + +```markdown +# Some text + +## Some more text +``` + +If the parameter `siblings_only` is set to `true`, duplication is allowed for +headings with different parents (as is common in changelogs): + +```markdown +# Change log + +## 1.0.0 + +### Features + +## 2.0.0 + +### Features +``` + +Rationale: Some Markdown parsers generate anchors for headings based on the +heading name; headings with the same content can cause problems with that. + + + +## `MD025` - Multiple top-level headings in the same document + +Tags: `headings` + +Aliases: `single-h1`, `single-title` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is triggered when a top-level heading is in use (the first line of +the file is an h1 heading), and more than one h1 heading is in use in the +document: + +```markdown +# Top level heading + +# Another top-level heading +``` + +To fix, structure your document so there is a single h1 heading that is +the title for the document. Subsequent headings must be +lower-level headings (h2, h3, etc.): + +```markdown +# Title + +## Heading + +## Another heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule treats +that as a top level heading and will report a violation for any subsequent +top-level headings. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: A top-level heading is an h1 on the first line of the file, and +serves as the title for the document. If this convention is in use, then there +can not be more than one title for the document, and the entire document should +be contained within this heading. + + + +## `MD026` - Trailing punctuation in heading + +Tags: `headings` + +Aliases: `no-trailing-punctuation` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any heading that has one of the specified normal or +full-width punctuation characters as the last character in the line: + +```markdown +# This is a heading. +``` + +To fix this, remove the trailing punctuation: + +```markdown +# This is a heading +``` + +Note: The `punctuation` parameter can be used to specify what characters count +as punctuation at the end of a heading. For example, you can change it to +`".,;:"` to allow headings that end with an exclamation point. `?` is +allowed by default because of how common it is in headings of FAQ-style +documents. Setting the `punctuation` parameter to `""` allows all characters - +and is equivalent to disabling the rule. + +Note: The trailing semicolon of [HTML entity references][html-entity-references] +like `©`, `©`, and `©` is ignored by this rule. + +Rationale: Headings are not meant to be full sentences. More information: +[Punctuation at the end of headers][end-punctuation]. + +[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers +[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references + + + +## `MD027` - Multiple spaces after blockquote symbol + +Tags: `blockquote`, `indentation`, `whitespace` + +Aliases: `no-multiple-space-blockquote` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when blockquotes have more than one space after the +blockquote (`>`) symbol: + +```markdown +> This is a blockquote with bad indentation +> there should only be one. +``` + +To fix, remove any extraneous space: + +```markdown +> This is a blockquote with correct +> indentation. +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD028` - Blank line inside blockquote + +Tags: `blockquote`, `whitespace` + +Aliases: `no-blanks-blockquote` + +This rule is triggered when two blockquote blocks are separated by nothing +except for a blank line: + +```markdown +> This is a blockquote +> which is immediately followed by + +> this blockquote. Unfortunately +> In some parsers, these are treated as the same blockquote. +``` + +To fix this, ensure that any blockquotes that are right next to each other +have some text in between: + +```markdown +> This is a blockquote. + +And Jimmy also said: + +> This too is a blockquote. +``` + +Alternatively, if they are supposed to be the same quote, then add the +blockquote symbol at the beginning of the blank line: + +```markdown +> This is a blockquote. +> +> This is the same blockquote. +``` + +Rationale: Some Markdown parsers will treat two blockquotes separated by one +or more blank lines as the same blockquote, while others will treat them as +separate blockquotes. + + + +## `MD029` - Ordered list item prefix + +Tags: `ol` + +Aliases: `ol-prefix` + +Parameters: + +- `style`: List style (`string`, default `one_or_ordered`, values `one` / + `one_or_ordered` / `ordered` / `zero`) + +This rule is triggered for ordered lists that do not either start with '1.' or +do not have a prefix that increases in numerical order (depending on the +configured style). The less-common pattern of using '0.' as a first prefix or +for all prefixes is also supported. + +Example valid list if the style is configured as 'one': + +```markdown +1. Do this. +1. Do that. +1. Done. +``` + +Examples of valid lists if the style is configured as 'ordered': + +```markdown +1. Do this. +2. Do that. +3. Done. +``` + +```markdown +0. Do this. +1. Do that. +2. Done. +``` + +All three examples are valid when the style is configured as 'one_or_ordered'. + +Example valid list if the style is configured as 'zero': + +```markdown +0. Do this. +0. Do that. +0. Done. +``` + +Example invalid list for all styles: + +```markdown +1. Do this. +3. Done. +``` + +This rule supports 0-prefixing ordered list items for uniform indentation: + +```markdown +... +08. Item +09. Item +10. Item +11. Item +... +``` + +Note: This rule will report violations for cases like the following where an +improperly-indented code block (or similar) appears between two list items and +"breaks" the list in two: + + + +~~~markdown +1. First list + +```text +Code block +``` + +1. Second list +~~~ + +The fix is to indent the code block so it becomes part of the preceding list +item as intended: + +~~~markdown +1. First list + + ```text + Code block + ``` + +2. Still first list +~~~ + + + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD030` - Spaces after list markers + +Tags: `ol`, `ul`, `whitespace` + +Aliases: `list-marker-space` + +Parameters: + +- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) +- `ol_single`: Spaces for single-line ordered list items (`integer`, default + `1`) +- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default + `1`) +- `ul_single`: Spaces for single-line unordered list items (`integer`, default + `1`) + +Fixable: Some violations can be fixed by tooling + +This rule checks for the number of spaces between a list marker (e.g. '`-`', +'`*`', '`+`' or '`1.`') and the text of the list item. + +The number of spaces checked for depends on the document style in use, but the +default is 1 space after any list marker: + +```markdown +* Foo +* Bar +* Baz + +1. Foo +1. Bar +1. Baz + +1. Foo + * Bar +1. Baz +``` + +A document style may change the number of spaces after unordered list items +and ordered list items independently, as well as based on whether the content +of every item in the list consists of a single paragraph or multiple +paragraphs (including sub-lists and code blocks). + +For example, the style guide at + +specifies that 1 space after the list marker should be used if every item in +the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered +and unordered lists respectively) if there are multiple paragraphs of content +inside the list: + +```markdown +* Foo +* Bar +* Baz +``` + +vs. + +```markdown +* Foo + + Second paragraph + +* Bar +``` + +or + +```markdown +1. Foo + + Second paragraph + +1. Bar +``` + +To fix this, ensure the correct number of spaces are used after the list marker +for your selected document style. + +Rationale: Violations of this rule can lead to improperly rendered content. + +Note: See [Prettier.md](Prettier.md) for compatibility information. + + + +## `MD031` - Fenced code blocks should be surrounded by blank lines + +Tags: `blank_lines`, `code` + +Aliases: `blanks-around-fences` + +Parameters: + +- `list_items`: Include list items (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when fenced code blocks are either not preceded or not +followed by a blank line: + +````markdown +Some text +``` +Code block +``` + +``` +Another code block +``` +Some more text +```` + +To fix this, ensure that all fenced code blocks have a blank line both before +and after (except where the block is at the beginning or end of the document): + +````markdown +Some text + +``` +Code block +``` + +``` +Another code block +``` + +Some more text +```` + +Set the `list_items` parameter to `false` to disable this rule for list items. +Disabling this behavior for lists can be useful if it is necessary to create a +[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. + +Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will +not parse fenced code blocks that don't have blank lines before and after them. + + + +## `MD032` - Lists should be surrounded by blank lines + +Tags: `blank_lines`, `bullet`, `ol`, `ul` + +Aliases: `blanks-around-lists` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when lists (of any kind) are either not preceded or not +followed by a blank line: + +```markdown +Some text +* List item +* List item + +1. List item +2. List item +*** +``` + +In the first case above, text immediately precedes the unordered list. In the +second case above, a thematic break immediately follows the ordered list. To fix +violations of this rule, ensure that all lists have a blank line both before and +after (except when the list is at the very beginning or end of the document): + +```markdown +Some text + +* List item +* List item + +1. List item +2. List item + +*** +``` + +Note that the following case is **not** a violation of this rule: + +```markdown +1. List item + More item 1 +2. List item +More item 2 +``` + +Although it is not indented, the text "More item 2" is referred to as a +[lazy continuation line][lazy-continuation] and considered part of the second +list item. + +Rationale: In addition to aesthetic reasons, some parsers, including kramdown, +will not parse lists that don't have blank lines before and after them. + +[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line + + + +## `MD033` - Inline HTML + +Tags: `html` + +Aliases: `no-inline-html` + +Parameters: + +- `allowed_elements`: Allowed elements (`string[]`, default `[]`) + +This rule is triggered whenever raw HTML is used in a Markdown document: + +```markdown +

Inline HTML heading

+``` + +To fix this, use 'pure' Markdown instead of including raw HTML: + +```markdown +# Markdown heading +``` + +Note: To allow specific HTML elements, use the `allowed_elements` parameter. + +Rationale: Raw HTML is allowed in Markdown, but this rule is included for +those who want their documents to only include "pure" Markdown, or for those +who are rendering Markdown documents into something other than HTML. + + + +## `MD034` - Bare URL used + +Tags: `links`, `url` + +Aliases: `no-bare-urls` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered whenever a URL or email address appears without +surrounding angle brackets: + +```markdown +For more info, visit https://www.example.com/ or email user@example.com. +``` + +To fix this, add angle brackets around the URL or email address: + +```markdown +For more info, visit or email . +``` + +If a URL or email address contains non-ASCII characters, it may be not be +handled as intended even when angle brackets are present. In such cases, +[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used +to comply with the required syntax for URL and email. + +Note: To include a bare URL or email without it being converted into a link, +wrap it in a code span: + +```markdown +Not a clickable link: `https://www.example.com` +``` + +Note: The following scenario does not trigger this rule because it could be a +shortcut link: + +```markdown +[https://www.example.com] +``` + +Note: The following syntax triggers this rule because the nested link could be +a shortcut link (which takes precedence): + +```markdown +[text [shortcut] text](https://example.com) +``` + +To avoid this, escape both inner brackets: + +```markdown +[link \[text\] link](https://example.com) +``` + +Rationale: Without angle brackets, a bare URL or email isn't converted into a +link by some Markdown parsers. + + + +## `MD035` - Horizontal rule style + +Tags: `hr` + +Aliases: `hr-style` + +Parameters: + +- `style`: Horizontal rule style (`string`, default `consistent`) + +This rule is triggered when inconsistent styles of horizontal rules are used +in the document: + +```markdown +--- + +- - - + +*** + +* * * + +**** +``` + +To fix this, use the same horizontal rule everywhere: + +```markdown +--- + +--- +``` + +The configured style can ensure all horizontal rules use a specific string or it +can ensure all horizontal rules match the first horizontal rule (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD036` - Emphasis used instead of a heading + +Tags: `emphasis`, `headings` + +Aliases: `no-emphasis-as-heading` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) + +This check looks for instances where emphasized (i.e. bold or italic) text is +used to separate sections, where a heading should be used instead: + +```markdown +**My document** + +Lorem ipsum dolor sit amet... + +_Another section_ + +Consectetur adipiscing elit, sed do eiusmod. +``` + +To fix this, use Markdown headings instead of emphasized text to denote +sections: + +```markdown +# My document + +Lorem ipsum dolor sit amet... + +## Another section + +Consectetur adipiscing elit, sed do eiusmod. +``` + +Note: This rule looks for single-line paragraphs that consist entirely +of emphasized text. It won't fire on emphasis used within regular text, +multi-line emphasized paragraphs, or paragraphs ending in punctuation +(normal or full-width). Similarly to rule MD026, you can configure what +characters are recognized as punctuation. + +Rationale: Using emphasis instead of a heading prevents tools from inferring +the structure of a document. More information: +. + + + +## `MD037` - Spaces inside emphasis markers + +Tags: `emphasis`, `whitespace` + +Aliases: `no-space-in-emphasis` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when emphasis markers (bold, italic) are used, but they +have spaces between the markers and the text: + +```markdown +Here is some ** bold ** text. + +Here is some * italic * text. + +Here is some more __ bold __ text. + +Here is some more _ italic _ text. +``` + +To fix this, remove the spaces around the emphasis markers: + +```markdown +Here is some **bold** text. + +Here is some *italic* text. + +Here is some more __bold__ text. + +Here is some more _italic_ text. +``` + +Rationale: Emphasis is only parsed as such when the asterisks/underscores +aren't surrounded by spaces. This rule attempts to detect where +they were surrounded by spaces, but it appears that emphasized text was +intended by the author. + + + +## `MD038` - Spaces inside code span elements + +Tags: `code`, `whitespace` + +Aliases: `no-space-in-code` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered for code span elements that have spaces adjacent to the +backticks: + +```markdown +`some text ` + +` some text` +``` + +To fix this, remove any spaces adjacent to the backticks: + +```markdown +`some text` +``` + +Note: A single leading and trailing space is allowed by the specification and +automatically trimmed (in order to allow for code spans that embed backticks): + +```markdown +`` `backticks` `` +``` + +Note: A single leading or trailing space is allowed if used to separate code +span markers from an embedded backtick (though the space is not trimmed): + +```markdown +`` ` embedded backtick`` +``` + +Rationale: Violations of this rule are usually unintentional and may lead to +improperly-rendered content. If spaces beside backticks are intentional, this +rule can be disabled for that line or file. + + + +## `MD039` - Spaces inside link text + +Tags: `links`, `whitespace` + +Aliases: `no-space-in-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on links that have spaces surrounding the link text: + +```markdown +[ a link ](https://www.example.com/) +``` + +To fix this, remove the spaces surrounding the link text: + +```markdown +[a link](https://www.example.com/) +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD040` - Fenced code blocks should have a language specified + +Tags: `code`, `language` + +Aliases: `fenced-code-language` + +Parameters: + +- `allowed_languages`: List of languages (`string[]`, default `[]`) +- `language_only`: Require language only (`boolean`, default `false`) + +This rule is triggered when fenced code blocks are used, but a language isn't +specified: + +````markdown +``` +#!/bin/bash +echo Hello world +``` +```` + +To fix this, add a language specifier to the code block: + +````markdown +```bash +#!/bin/bash +echo Hello world +``` +```` + +To display a code block without syntax highlighting, use: + +````markdown +```text +Plain text in a code block +``` +```` + +You can configure the `allowed_languages` parameter to specify a list of +languages code blocks could use. Languages are case sensitive. The default value +is `[]` which means any language specifier is valid. + +You can prevent extra data from being present in the info string of fenced code +blocks. To do so, set the `language_only` parameter to `true`. + + +Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: +`ruby startline=3`) will trigger this rule. + +Rationale: Specifying a language improves content rendering by using the +correct syntax highlighting for code. More information: +. + + + +## `MD041` - First line in a file should be a top-level heading + +Tags: `headings` + +Aliases: `first-line-h1`, `first-line-heading` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is intended to ensure documents have a title and is triggered when +the first line in the file isn't a top-level (h1) heading: + +```markdown +This is a file without a heading +``` + +To fix this, add a top-level heading to the beginning of the file: + +```markdown +# File with heading + +This is a file with a top-level heading +``` + +Because it is common for projects on GitHub to use an image for the heading of +`README.md` and that is not well-supported by Markdown, HTML headings are also +permitted by this rule. For example: + +```markdown +

+ +This is a file with a top-level HTML heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule will not +report a violation. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: The top-level heading often acts as the title of a document. More +information: . + + + +## `MD042` - No empty links + +Tags: `links` + +Aliases: `no-empty-links` + +This rule is triggered when an empty link is encountered: + +```markdown +[an empty link]() +``` + +To fix the violation, provide a destination for the link: + +```markdown +[a valid link](https://example.com/) +``` + +Empty fragments will trigger this rule: + +```markdown +[an empty fragment](#) +``` + +But non-empty fragments will not: + +```markdown +[a valid fragment](#fragment) +``` + +Rationale: Empty links do not lead anywhere and therefore don't function as +links. + + + +## `MD043` - Required heading structure + +Tags: `headings` + +Aliases: `required-headings` + +Parameters: + +- `headings`: List of headings (`string[]`, default `[]`) +- `match_case`: Match case of headings (`boolean`, default `false`) + +This rule is triggered when the headings in a file do not match the array of +headings passed to the rule. It can be used to enforce a standard heading +structure for a set of files. + +To require exactly the following structure: + +```markdown +# Head +## Item +### Detail +``` + +Set the `headings` parameter to: + +```json +[ + "# Head", + "## Item", + "### Detail" +] +``` + +To allow optional headings as with the following structure: + +```markdown +# Head +## Item +### Detail (optional) +## Foot +### Notes (optional) +``` + +Use the special value `"*"` meaning "zero or more unspecified headings" or the +special value `"+"` meaning "one or more unspecified headings" and set the +`headings` parameter to: + +```json +[ + "# Head", + "## Item", + "*", + "## Foot", + "*" +] +``` + +When an error is detected, this rule outputs the line number of the first +problematic heading (otherwise, it outputs the last line number of the file). + +Note that while the `headings` parameter uses the "## Text" ATX heading style +for simplicity, a file may use any supported heading style. + +By default, the case of headings in the document is not required to match that +of `headings`. To require that case match exactly, set the `match_case` +parameter to `true`. + +Rationale: Projects may wish to enforce a consistent document structure across +a set of similar content. + + + +## `MD044` - Proper names should have the correct capitalization + +Tags: `spelling` + +Aliases: `proper-names` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `html_elements`: Include HTML elements (`boolean`, default `true`) +- `names`: List of proper names (`string[]`, default `[]`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when any of the strings in the `names` array do not have +the specified capitalization. It can be used to enforce a standard letter case +for the names of projects and products. + +For example, the language "JavaScript" is usually written with both the 'J' and +'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To +enforce the proper capitalization, specify the desired letter case in the +`names` array: + +```json +[ + "JavaScript" +] +``` + +Sometimes a proper name is capitalized differently in certain contexts. In such +cases, add both forms to the `names` array: + +```json +[ + "GitHub", + "github.com" +] +``` + +Set the `code_blocks` parameter to `false` to disable this rule for code blocks +and spans. Set the `html_elements` parameter to `false` to disable this rule +for HTML elements and attributes (such as when using a proper name as part of +a path for `a`/`href` or `img`/`src`). + +Rationale: Incorrect capitalization of proper names is usually a mistake. + + + +## `MD045` - Images should have alternate text (alt text) + +Tags: `accessibility`, `images` + +Aliases: `no-alt-text` + +This rule is triggered when an image is missing alternate text (alt text) +information. + +Alternate text is commonly specified inline as: + +```markdown +![Alternate text](image.jpg) +``` + +Or with reference syntax as: + +```markdown +![Alternate text][ref] + +... + +[ref]: image.jpg "Optional title" +``` + +Or with HTML as: + +```html +Alternate text +``` + +Guidance for writing alternate text is available from the [W3C][w3c], +[Wikipedia][wikipedia], and [other locations][phase2technology]. + +Rationale: Alternate text is important for accessibility and describes the +content of an image for people who may not be able to see it. + +[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses +[w3c]: https://www.w3.org/WAI/alt/ +[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute + + + +## `MD046` - Code block style + +Tags: `code` + +Aliases: `code-block-style` + +Parameters: + +- `style`: Block style (`string`, default `consistent`, values `consistent` / + `fenced` / `indented`) + +This rule is triggered when unwanted or different code block styles are used in +the same document. + +In the default configuration this rule reports a violation for the following +document: + + + + Some text. + + # Indented code + + More text. + + ```ruby + # Fenced code + ``` + + More text. + + + +To fix violations of this rule, use a consistent style (either indenting or code +fences). + +The configured code block style can be specific (`fenced`, `indented`) or can +require all code blocks match the first code block (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD047` - Files should end with a single newline character + +Tags: `blank_lines` + +Aliases: `single-trailing-newline` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there is not a single newline character at the end +of a file. + +An example that triggers the rule: + +```markdown +# Heading + +This file ends without a newline.[EOF] +``` + +To fix the violation, add a newline character to the end of the file: + +```markdown +# Heading + +This file ends with a newline. +[EOF] +``` + +Rationale: Some programs have trouble with files that do not end with a newline. + +More information: [What's the point in adding a new line to the end of a +file?][stack-exchange] + +[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file + + + +## `MD048` - Code fence style + +Tags: `code` + +Aliases: `code-fence-style` + +Parameters: + +- `style`: Code fence style (`string`, default `consistent`, values `backtick` + / `consistent` / `tilde`) + +This rule is triggered when the symbols used in the document for fenced code +blocks do not match the configured code fence style: + +````markdown +```ruby +# Fenced code +``` + +~~~ruby +# Fenced code +~~~ +```` + +To fix this issue, use the configured code fence style throughout the +document: + +````markdown +```ruby +# Fenced code +``` + +```ruby +# Fenced code +``` +```` + +The configured code fence style can be a specific symbol to use (`backtick`, +`tilde`) or it can require all code fences match the first code fence +(`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD049` - Emphasis style + +Tags: `emphasis` + +Aliases: `emphasis-style` + +Parameters: + +- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for emphasis do not +match the configured emphasis style: + +```markdown +*Text* +_Text_ +``` + +To fix this issue, use the configured emphasis style throughout the document: + +```markdown +*Text* +*Text* +``` + +The configured emphasis style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all emphasis matches the first emphasis +(`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like_this_one. + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD050` - Strong style + +Tags: `emphasis` + +Aliases: `strong-style` + +Parameters: + +- `style`: Strong style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for strong do not +match the configured strong style: + +```markdown +**Text** +__Text__ +``` + +To fix this issue, use the configured strong style throughout the document: + +```markdown +**Text** +**Text** +``` + +The configured strong style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all strong matches the first strong (`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like__this__one. + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD051` - Link fragments should be valid + +Tags: `links` + +Aliases: `link-fragments` + +Parameters: + +- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a link fragment does not match any of the fragments +that are automatically generated for headings in a document: + +```markdown +# Heading Name + +[Link](#fragment) +``` + +To fix this issue, change the link fragment to reference an existing heading's +generated name (see below): + +```markdown +# Heading Name + +[Link](#heading-name) +``` + +For consistency, this rule requires fragments to exactly match the [GitHub +heading algorithm][github-heading-algorithm] which converts letters to +lowercase. Therefore, the following example is reported as a violation: + +```markdown +# Heading Name + +[Link](#Heading-Name) +``` + +To ignore case when comparing fragments with heading names, the `ignore_case` +parameter can be set to `true`. In this configuration, the previous example is +not reported as a violation. + +Alternatively, some platforms allow the syntax `{#named-anchor}` to be used +within a heading to provide a specific name (consisting of only lower-case +letters, numbers, `-`, and `_`): + +```markdown +# Heading Name {#custom-name} + +[Link](#custom-name) +``` + +Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` +attribute can be used to define a fragment: + +```markdown + + +[Link](#bookmark) +``` + +An `a` tag can be useful in scenarios where a heading is not appropriate or for +control over the text of the fragment identifier. + +This rule also recognizes the custom fragment syntax used by GitHub to highlight +[specific content in a document][github-linking-to-content]. + +For example, this link to line 20: + +```markdown +[Link](#L20) +``` + +And this link to content starting within line 19 running into line 21: + +```markdown +[Link](#L19C5-L21C11) +``` + +Rationale: [GitHub section links][github-section-links] are created +automatically for every heading when Markdown content is displayed on GitHub. +This makes it easy to link directly to different sections within a document. +However, section links change if headings are renamed or removed. This rule +helps identify broken section links within a document. + +Section links are **not** part of the CommonMark specification. This rule +enforces the [GitHub heading algorithm][github-heading-algorithm] which is: +convert heading to lowercase, remove punctuation, convert spaces to dashes, +append an incrementing integer as needed for uniqueness. + +[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links +[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb +[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown + + + +## `MD052` - Reference links and images should use a label that is defined + +Tags: `images`, `links` + +Aliases: `reference-links-images` + +Parameters: + +- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) + +Links and images in Markdown can provide the link destination or image source +at the time of use or can define it elsewhere and use a label for reference. +The reference format is convenient for keeping paragraph text clutter-free +and makes it easy to reuse the same URL in multiple places. + +There are three kinds of reference links and images: + +```markdown +Full: [text][label] +Collapsed: [label][] +Shortcut: [label] + +Full: ![text][image] +Collapsed: ![image][] +Shortcut: ![image] + +[label]: https://example.com/label +[image]: https://example.com/image +``` + +A link or image renders correctly when the corresponding label is defined, but +displays as text with brackets when the label is not present. By default, this +rule warns of undefined labels for "full" and "collapsed" reference syntax but +not for "shortcut" syntax because it is ambiguous. + +The text `[example]` could be a shortcut link or the text "example" in brackets, +so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set +the `include_shortcut` parameter to `true`. Note that doing so produces warnings +for *all* text in the document that *could* be a shortcut. If bracketed text is +intentional, brackets can be escaped with the `\` character: `\[example\]`. + + + +## `MD053` - Link and image reference definitions should be needed + +Tags: `images`, `links` + +Aliases: `link-image-reference-definitions` + +Parameters: + +- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source +at the time of use or can use a label to reference a definition elsewhere in +the document. The latter reference format is convenient for keeping paragraph +text clutter-free and makes it easy to reuse the same URL in multiple places. + +Because link and image reference definitions are located separately from +where they are used, there are two scenarios where a definition can be +unnecessary: + +1. If a label is not referenced by any link or image in a document, that + definition is unused and can be deleted. +2. If a label is defined multiple times in a document, the first definition is + used and the others can be deleted. + +This rule considers a reference definition to be used if any link or image +reference has the corresponding label. The "full", "collapsed", and "shortcut" +formats are all supported. + +If there are reference definitions that are deliberately unreferenced, they can +be ignored by setting the `ignored_definitions` parameter. The default value of +this parameter ignores the following convention for adding non-HTML comments to +Markdown: + +```markdown +[//]: # (This behaves like a comment) +``` + + + +## `MD054` - Link and image style + +Tags: `images`, `links` + +Aliases: `link-image-style` + +Parameters: + +- `autolink`: Allow autolinks (`boolean`, default `true`) +- `collapsed`: Allow collapsed reference links and images (`boolean`, default + `true`) +- `full`: Allow full reference links and images (`boolean`, default `true`) +- `inline`: Allow inline links and images (`boolean`, default `true`) +- `shortcut`: Allow shortcut reference links and images (`boolean`, default + `true`) +- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source at +the time of use or can use a label to reference a definition elsewhere in the +document. The three reference formats are convenient for keeping paragraph text +clutter-free and make it easy to reuse the same URL in multiple places. + +By default, this rule allows all link/image styles. + +Setting the `autolink` parameter to `false` disables autolinks: + +```markdown + +``` + +Setting the `inline` parameter to `false` disables inline links and images: + +```markdown +[link](https://example.com) + +![image](https://example.com) +``` + +Setting the `full` parameter to `false` disables full reference links and +images: + +```markdown +[link][url] + +![image][url] + +[url]: https://example.com +``` + +Setting the `collapsed` parameter to `false` disables collapsed reference links +and images: + +```markdown +[url][] + +![url][] + +[url]: https://example.com +``` + +Setting the `shortcut` parameter to `false` disables shortcut reference links +and images: + +```markdown +[url] + +![url] + +[url]: https://example.com +``` + +To fix violations of this rule, change the link or image to use an allowed +style. This rule can automatically fix violations when a link or image can be +converted to the `inline` style (preferred) or a link can be converted to the +`autolink` style (which does not support images and must be an absolute URL). +This rule does *not* fix scenarios that require converting a link or image to +the `full`, `collapsed`, or `shortcut` reference styles because that involves +naming the reference and determining where to insert it in the document. + +Setting the `url_inline` parameter to `false` prevents the use of inline links +with the same absolute URL text/destination and no title because such links can +be converted to autolinks: + +```markdown +[https://example.com](https://example.com) +``` + +To fix `url_inline` violations, use the simpler autolink syntax instead: + +```markdown + +``` + +Rationale: Consistent formatting makes it easier to understand a document. +Autolinks are concise, but appear as URLs which can be long and confusing. +Inline links and images can include descriptive text, but take up more space in +Markdown form. Reference links and images can be easier to read and manipulate +in Markdown form, but require a separate link reference definition. + + + +## `MD055` - Table pipe style + +Tags: `table` + +Aliases: `table-pipe-style` + +Parameters: + +- `style`: Table pipe style (`string`, default `consistent`, values + `consistent` / `leading_and_trailing` / `leading_only` / + `no_leading_or_trailing` / `trailing_only`) + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] +is inconsistent about its use of leading and trailing pipe characters (`|`). + +By default (`consistent` style), the header row of the first table in a document +is used to determine the style that is enforced for every table in the document. +A specific style can be used instead (`leading_and_trailing`, `leading_only`, +`no_leading_or_trailing`, `trailing_only`). + +This table's header row has leading and trailing pipes, but its delimiter row is +missing the trailing pipe and its first row of cells is missing the leading +pipe: + +```markdown +| Header | Header | +| ------ | ------ + Cell | Cell | +``` + +To fix these issues, make sure there is a pipe character at the beginning and +end of every row: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and may also +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table +``` + +Rationale: Some parsers have difficulty with tables that are missing their +leading or trailing pipe characters. The use of leading/trailing pipes can also +help provide visual clarity. + +[gfm-table-055]: https://github.github.com/gfm/#tables-extension- + + + +## `MD056` - Table column count + +Tags: `table` + +Aliases: `table-column-count` + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] +does not have the same number of cells in every row. + +This table's second data row has too few cells and its third data row has too +many cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | +| Cell | Cell | Cell | +``` + +To fix these issues, ensure every row has the same number of cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | Cell | +| Cell | Cell | +``` + +Note that a table's header row and its delimiter row must have the same number +of cells or it will not be recognized as a table (per specification). + +Rationale: Extra cells in a row are usually not shown, so their data is lost. +Missing cells in a row create holes in the table and suggest an omission. + +[gfm-table-056]: https://github.github.com/gfm/#tables-extension- + + + +## `MD058` - Tables should be surrounded by blank lines + +Tags: `table` + +Aliases: `blanks-around-tables` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when tables are either not preceded or not followed by a +blank line: + +```markdown +Some text +| Header | Header | +| ------ | ------ | +| Cell | Cell | +> Blockquote +``` + +To fix violations of this rule, ensure that all tables have a blank line both +before and after (except when the table is at the very beginning or end of the +document): + +```markdown +Some text + +| Header | Header | +| ------ | ------ | +| Cell | Cell | + +> Blockquote +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and will not +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table and the next line is blank + +Some text +``` + +Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse +tables that don't have blank lines before and after them. + + diff --git a/node_modules/markdownlint/doc/md001.md b/node_modules/markdownlint/doc/md001.md new file mode 100644 index 0000000000..72eff27136 --- /dev/null +++ b/node_modules/markdownlint/doc/md001.md @@ -0,0 +1,37 @@ +# `MD001` - Heading levels should only increment by one level at a time + +Tags: `headings` + +Aliases: `heading-increment` + +This rule is triggered when you skip heading levels in a Markdown document, for +example: + +```markdown +# Heading 1 + +### Heading 3 + +We skipped out a 2nd level heading in this document +``` + +When using multiple heading levels, nested headings should increase by only one +level at a time: + +```markdown +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +## Another Heading 2 + +### Another Heading 3 +``` + +Rationale: Headings represent the structure of a document and can be confusing +when skipped - especially for accessibility scenarios. More information: +. diff --git a/node_modules/markdownlint/doc/md003.md b/node_modules/markdownlint/doc/md003.md new file mode 100644 index 0000000000..82da87755a --- /dev/null +++ b/node_modules/markdownlint/doc/md003.md @@ -0,0 +1,59 @@ +# `MD003` - Heading style + +Tags: `headings` + +Aliases: `heading-style` + +Parameters: + +- `style`: Heading style (`string`, default `consistent`, values `atx` / + `atx_closed` / `consistent` / `setext` / `setext_with_atx` / + `setext_with_atx_closed`) + +This rule is triggered when different heading styles are used in the same +document: + +```markdown +# ATX style H1 + +## Closed ATX style H2 ## + +Setext style H1 +=============== +``` + +To fix the issue, use consistent heading styles throughout the document: + +```markdown +# ATX style H1 + +## ATX style H2 +``` + +The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style +headings of level 3 or more in documents with setext-style headings (which only +support level 1 and 2 headings): + +```markdown +Setext style H1 +=============== + +Setext style H2 +--------------- + +### ATX style H3 +``` + +Note: The configured heading style can be a specific style to require (`atx`, +`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can +require that all heading styles match the first heading style via `consistent`. + +Note: The placement of a horizontal rule directly below a line of text can +trigger this rule by turning that text into a level 2 setext-style heading: + +```markdown +A line of text followed by a horizontal rule becomes a heading +--- +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md004.md b/node_modules/markdownlint/doc/md004.md new file mode 100644 index 0000000000..fa1576b5ac --- /dev/null +++ b/node_modules/markdownlint/doc/md004.md @@ -0,0 +1,50 @@ +# `MD004` - Unordered list style + +Tags: `bullet`, `ul` + +Aliases: `ul-style` + +Parameters: + +- `style`: List style (`string`, default `consistent`, values `asterisk` / + `consistent` / `dash` / `plus` / `sublist`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for unordered +list items do not match the configured unordered list style: + +```markdown +* Item 1 ++ Item 2 +- Item 3 +``` + +To fix this issue, use the configured style for list items throughout the +document: + +```markdown +* Item 1 +* Item 2 +* Item 3 +``` + +The configured list style can ensure all list styling is a specific symbol +(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that +differs from its parent list (`sublist`), or ensure all list styles match the +first list style (`consistent`). + +For example, the following is valid for the `sublist` style because the +outer-most indent uses asterisk, the middle indent uses plus, and the inner-most +indent uses dash: + +```markdown +* Item 1 + + Item 2 + - Item 3 + + Item 4 +* Item 4 + + Item 5 +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md005.md b/node_modules/markdownlint/doc/md005.md new file mode 100644 index 0000000000..375b643886 --- /dev/null +++ b/node_modules/markdownlint/doc/md005.md @@ -0,0 +1,53 @@ +# `MD005` - Inconsistent indentation for list items at the same level + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `list-indent` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are parsed as being at the same level, +but don't have the same indentation: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * A misaligned item +``` + +Usually, this rule will be triggered because of a typo. Correct the indentation +for the list to fix it: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * Nested Item 3 +``` + +Sequentially-ordered list markers are usually left-aligned such that all items +have the same starting column: + +```markdown +... +8. Item +9. Item +10. Item +11. Item +... +``` + +This rule also supports right-alignment of list markers such that all items have +the same ending column: + +```markdown +... + 8. Item + 9. Item +10. Item +11. Item +... +``` + +Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md007.md b/node_modules/markdownlint/doc/md007.md new file mode 100644 index 0000000000..7dd7ed7165 --- /dev/null +++ b/node_modules/markdownlint/doc/md007.md @@ -0,0 +1,52 @@ +# `MD007` - Unordered list indentation + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `ul-indent` + +Parameters: + +- `indent`: Spaces for indent (`integer`, default `2`) +- `start_indent`: Spaces for first level indent (when start_indented is set) + (`integer`, default `2`) +- `start_indented`: Whether to indent the first level of the list (`boolean`, + default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are not indented by the configured +number of spaces (default: 2). + +Example: + +```markdown +* List item + * Nested list item indented by 3 spaces +``` + +Corrected Example: + +```markdown +* List item + * Nested list item indented by 2 spaces +``` + +Note: This rule applies to a sublist only if its parent lists are all also +unordered (otherwise, extra indentation of ordered lists interferes with the +rule). + +The `start_indented` parameter allows the first level of lists to be indented by +the configured number of spaces rather than starting at zero. The `start_indent` +parameter allows the first level of lists to be indented by a different number +of spaces than the rest (ignored when `start_indented` is not set). + +Rationale: Indenting by 2 spaces allows the content of a nested list to be in +line with the start of the content of the parent list when a single space is +used after the list marker. Indenting by 4 spaces is consistent with code blocks +and simpler for editors to implement. Additionally, this can be a compatibility +issue for other Markdown parsers, which require 4-space indents. More +information: [Markdown Style Guide][markdown-style-guide]. + +Note: See [Prettier.md](Prettier.md) for compatibility information. + +[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists diff --git a/node_modules/markdownlint/doc/md009.md b/node_modules/markdownlint/doc/md009.md new file mode 100644 index 0000000000..180008bc71 --- /dev/null +++ b/node_modules/markdownlint/doc/md009.md @@ -0,0 +1,51 @@ +# `MD009` - Trailing spaces + +Tags: `whitespace` + +Aliases: `no-trailing-spaces` + +Parameters: + +- `br_spaces`: Spaces for line break (`integer`, default `2`) +- `list_item_empty_lines`: Allow spaces for empty lines in list items + (`boolean`, default `false`) +- `strict`: Include unnecessary breaks (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any lines that end with unexpected whitespace. To fix +this, remove the trailing space from the end of the line. + +Note: Trailing space is allowed in indented and fenced code blocks because some +languages require it. + +The `br_spaces` parameter allows an exception to this rule for a specific number +of trailing spaces, typically used to insert an explicit line break. The default +value allows 2 spaces to indicate a hard break (\
element). + +Note: You must set `br_spaces` to a value >= 2 for this parameter to take +effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing +spaces. + +By default, this rule will not trigger when the allowed number of spaces is +used, even when it doesn't create a hard break (for example, at the end of a +paragraph). To report such instances as well, set the `strict` parameter to +`true`. + +```markdown +Text text text +text[2 spaces] +``` + +Using spaces to indent blank lines inside a list item is usually not necessary, +but some parsers require it. Set the `list_item_empty_lines` parameter to `true` +to allow this (even when `strict` is `true`): + +```markdown +- list item text + [2 spaces] + list item text +``` + +Rationale: Except when being used to create a line break, trailing whitespace +has no purpose and does not affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md010.md b/node_modules/markdownlint/doc/md010.md new file mode 100644 index 0000000000..95c0ce29f8 --- /dev/null +++ b/node_modules/markdownlint/doc/md010.md @@ -0,0 +1,56 @@ +# `MD010` - Hard tabs + +Tags: `hard_tab`, `whitespace` + +Aliases: `no-hard-tabs` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default + `[]`) +- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered by any lines that contain hard tab characters instead +of using spaces for indentation. To fix this, replace any hard tab characters +with spaces instead. + +Example: + + + +```markdown +Some text + + * hard tab character used to indent the list item +``` + + + +Corrected example: + +```markdown +Some text + + * Spaces used to indent the list item instead +``` + +You have the option to exclude this rule for code blocks and spans. To do so, +set the `code_blocks` parameter to `false`. Code blocks and spans are included +by default since handling of tabs by Markdown tools can be inconsistent (e.g., +using 4 vs. 8 spaces). + +When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), +the `ignore_code_languages` parameter can be set to a list of languages that +should be ignored (i.e., hard tabs will be allowed, though not required). This +makes it easier for documents to include code for languages that require hard +tabs. + +By default, violations of this rule are fixed by replacing the tab with 1 space +character. To use a different number of spaces, set the `spaces_per_tab` +parameter to the desired value. + +Rationale: Hard tabs are often rendered inconsistently by different editors and +can be harder to work with than spaces. diff --git a/node_modules/markdownlint/doc/md011.md b/node_modules/markdownlint/doc/md011.md new file mode 100644 index 0000000000..d574b34aa3 --- /dev/null +++ b/node_modules/markdownlint/doc/md011.md @@ -0,0 +1,30 @@ +# `MD011` - Reversed link syntax + +Tags: `links` + +Aliases: `no-reversed-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when text that appears to be a link is encountered, but +where the syntax appears to have been reversed (the `[]` and `()` are +reversed): + +```markdown +(Incorrect link syntax)[https://www.example.com/] +``` + +To fix this, swap the `[]` and `()` around: + +```markdown +[Correct link syntax](https://www.example.com/) +``` + +Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style +footnotes do not trigger this rule: + +```markdown +For (example)[^1] +``` + +Rationale: Reversed links are not rendered as usable links. diff --git a/node_modules/markdownlint/doc/md012.md b/node_modules/markdownlint/doc/md012.md new file mode 100644 index 0000000000..438c9fa643 --- /dev/null +++ b/node_modules/markdownlint/doc/md012.md @@ -0,0 +1,38 @@ +# `MD012` - Multiple consecutive blank lines + +Tags: `blank_lines`, `whitespace` + +Aliases: `no-multiple-blanks` + +Parameters: + +- `maximum`: Consecutive blank lines (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are multiple consecutive blank lines in the +document: + +```markdown +Some text here + + +Some more text here +``` + +To fix this, delete the offending lines: + +```markdown +Some text here + +Some more text here +``` + +Note: this rule will not be triggered if there are multiple consecutive blank +lines inside code blocks. + +Note: The `maximum` parameter can be used to configure the maximum number of +consecutive blank lines. + +Rationale: Except in a code block, blank lines serve no purpose and do not +affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md013.md b/node_modules/markdownlint/doc/md013.md new file mode 100644 index 0000000000..e4ac8ac123 --- /dev/null +++ b/node_modules/markdownlint/doc/md013.md @@ -0,0 +1,58 @@ +# `MD013` - Line length + +Tags: `line_length` + +Aliases: `line-length` + +Parameters: + +- `code_block_line_length`: Number of characters for code blocks (`integer`, + default `80`) +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `heading_line_length`: Number of characters for headings (`integer`, default + `80`) +- `headings`: Include headings (`boolean`, default `true`) +- `line_length`: Number of characters (`integer`, default `80`) +- `stern`: Stern length checking (`boolean`, default `false`) +- `strict`: Strict length checking (`boolean`, default `false`) +- `tables`: Include tables (`boolean`, default `true`) + +This rule is triggered when there are lines that are longer than the +configured `line_length` (default: 80 characters). To fix this, split the line +up into multiple lines. To set a different maximum length for headings, use +`heading_line_length`. To set a different maximum length for code blocks, use +`code_block_line_length` + +This rule has an exception when there is no whitespace beyond the configured +line length. This allows you to include items such as long URLs without being +forced to break them in the middle. To disable this exception, set the `strict` +parameter to `true` and an issue will be reported when any line is too long. To +warn for lines that are too long and could be fixed but allow long lines +without spaces, set the `stern` parameter to `true`. + +For example (assuming normal behavior): + +```markdown +IF THIS LINE IS THE MAXIMUM LENGTH +This line is okay because there are-no-spaces-beyond-that-length +This line is a violation because there are spaces beyond that length +This-line-is-okay-because-there-are-no-spaces-anywhere-within +``` + +In `strict` mode, the last three lines above are all violations. In `stern` +mode, the middle two lines above are both violations, but the last is okay. + +You have the option to exclude this rule for code blocks, tables, or headings. +To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. + +Code blocks are included in this rule by default since it is often a +requirement for document readability, and tentatively compatible with code +rules. Still, some languages do not lend themselves to short lines. + +Lines with link/image reference definitions and standalone lines (i.e., not part +of a paragraph) with only a link/image (possibly using (strong) emphasis) are +always exempted from this rule (even in `strict` mode) because there is often no +way to split such lines without breaking the URL. + +Rationale: Extremely long lines can be difficult to work with in some editors. +More information: . diff --git a/node_modules/markdownlint/doc/md014.md b/node_modules/markdownlint/doc/md014.md new file mode 100644 index 0000000000..0786dfa343 --- /dev/null +++ b/node_modules/markdownlint/doc/md014.md @@ -0,0 +1,54 @@ +# `MD014` - Dollar signs used before commands without showing output + +Tags: `code` + +Aliases: `commands-show-output` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are code blocks showing shell commands to be +typed, and *all* of the shell commands are preceded by dollar signs ($): + + + +```markdown +$ ls +$ cat foo +$ less bar +``` + + + +The dollar signs are unnecessary in this situation, and should not be +included: + +```markdown +ls +cat foo +less bar +``` + +Showing output for commands preceded by dollar signs does not trigger this rule: + +```markdown +$ ls +foo bar +$ cat foo +Hello world +$ cat bar +baz +``` + +Because some commands do not produce output, it is not a violation if *some* +commands do not have output: + +```markdown +$ mkdir test +mkdir: created directory 'test' +$ ls test +``` + +Rationale: It is easier to copy/paste and less noisy if the dollar signs +are omitted when they are not needed. See + +for more information. diff --git a/node_modules/markdownlint/doc/md018.md b/node_modules/markdownlint/doc/md018.md new file mode 100644 index 0000000000..870297a8aa --- /dev/null +++ b/node_modules/markdownlint/doc/md018.md @@ -0,0 +1,27 @@ +# `MD018` - No space after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-missing-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing after the hash characters +in an atx style heading: + +```markdown +#Heading 1 + +##Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md019.md b/node_modules/markdownlint/doc/md019.md new file mode 100644 index 0000000000..4bcb44f643 --- /dev/null +++ b/node_modules/markdownlint/doc/md019.md @@ -0,0 +1,28 @@ +# `MD019` - Multiple spaces after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-multiple-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in an atx style heading: + +```markdown +# Heading 1 + +## Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Extra space has no purpose and does not affect the rendering of +content. diff --git a/node_modules/markdownlint/doc/md020.md b/node_modules/markdownlint/doc/md020.md new file mode 100644 index 0000000000..f711b26036 --- /dev/null +++ b/node_modules/markdownlint/doc/md020.md @@ -0,0 +1,29 @@ +# `MD020` - No space inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-missing-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing inside the hash characters +in a closed atx style heading: + +```markdown +#Heading 1# + +##Heading 2## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading is missing spaces. + +Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md021.md b/node_modules/markdownlint/doc/md021.md new file mode 100644 index 0000000000..5aa99a615f --- /dev/null +++ b/node_modules/markdownlint/doc/md021.md @@ -0,0 +1,31 @@ +# `MD021` - Multiple spaces inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-multiple-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in a closed atx style heading: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading contains multiple +spaces. + +Rationale: Extra space has no purpose and does not affect the rendering of +content. diff --git a/node_modules/markdownlint/doc/md022.md b/node_modules/markdownlint/doc/md022.md new file mode 100644 index 0000000000..c05edcc05c --- /dev/null +++ b/node_modules/markdownlint/doc/md022.md @@ -0,0 +1,52 @@ +# `MD022` - Headings should be surrounded by blank lines + +Tags: `blank_lines`, `headings` + +Aliases: `blanks-around-headings` + +Parameters: + +- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) +- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when headings (any style) are either not preceded or not +followed by at least one blank line: + +```markdown +# Heading 1 +Some text + +Some more text +## Heading 2 +``` + +To fix this, ensure that all headings have a blank line both before and after +(except where the heading is at the beginning or end of the document): + +```markdown +# Heading 1 + +Some text + +Some more text + +## Heading 2 +``` + +The `lines_above` and `lines_below` parameters can be used to specify a +different number of blank lines (including `0`) above or below each heading. +If the value `-1` is used for either parameter, any number of blank lines is +allowed. To customize the number of lines above or below each heading level +individually, specify a `number[]` where values correspond to heading levels +1-6 (in order). + +Notes: If `lines_above` or `lines_below` are configured to require more than one +blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This +rule checks for *at least* as many blank lines as specified; any extra blank +lines are ignored. + +Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, +will not parse headings that don't have a blank line before, and will parse them +as regular text. diff --git a/node_modules/markdownlint/doc/md023.md b/node_modules/markdownlint/doc/md023.md new file mode 100644 index 0000000000..1644451b49 --- /dev/null +++ b/node_modules/markdownlint/doc/md023.md @@ -0,0 +1,33 @@ +# `MD023` - Headings must start at the beginning of the line + +Tags: `headings`, `spaces` + +Aliases: `heading-start-left` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a heading is indented by one or more spaces: + +```markdown +Some text + + # Indented heading +``` + +To fix this, ensure that all headings start at the beginning of the line: + +```markdown +Some text + +# Heading +``` + +Note that scenarios like block quotes "indent" the start of the line, so the +following is also correct: + +```markdown +> # Heading in Block Quote +``` + +Rationale: Headings that don't start at the beginning of the line will not be +parsed as headings, and will instead appear as regular text. diff --git a/node_modules/markdownlint/doc/md024.md b/node_modules/markdownlint/doc/md024.md new file mode 100644 index 0000000000..5c26c71201 --- /dev/null +++ b/node_modules/markdownlint/doc/md024.md @@ -0,0 +1,44 @@ +# `MD024` - Multiple headings with the same content + +Tags: `headings` + +Aliases: `no-duplicate-heading` + +Parameters: + +- `siblings_only`: Only check sibling headings (`boolean`, default `false`) + +This rule is triggered if there are multiple headings in the document that have +the same text: + +```markdown +# Some text + +## Some text +``` + +To fix this, ensure that the content of each heading is different: + +```markdown +# Some text + +## Some more text +``` + +If the parameter `siblings_only` is set to `true`, duplication is allowed for +headings with different parents (as is common in changelogs): + +```markdown +# Change log + +## 1.0.0 + +### Features + +## 2.0.0 + +### Features +``` + +Rationale: Some Markdown parsers generate anchors for headings based on the +heading name; headings with the same content can cause problems with that. diff --git a/node_modules/markdownlint/doc/md025.md b/node_modules/markdownlint/doc/md025.md new file mode 100644 index 0000000000..7c764b33d5 --- /dev/null +++ b/node_modules/markdownlint/doc/md025.md @@ -0,0 +1,49 @@ +# `MD025` - Multiple top-level headings in the same document + +Tags: `headings` + +Aliases: `single-h1`, `single-title` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is triggered when a top-level heading is in use (the first line of +the file is an h1 heading), and more than one h1 heading is in use in the +document: + +```markdown +# Top level heading + +# Another top-level heading +``` + +To fix, structure your document so there is a single h1 heading that is +the title for the document. Subsequent headings must be +lower-level headings (h2, h3, etc.): + +```markdown +# Title + +## Heading + +## Another heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule treats +that as a top level heading and will report a violation for any subsequent +top-level headings. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: A top-level heading is an h1 on the first line of the file, and +serves as the title for the document. If this convention is in use, then there +can not be more than one title for the document, and the entire document should +be contained within this heading. diff --git a/node_modules/markdownlint/doc/md026.md b/node_modules/markdownlint/doc/md026.md new file mode 100644 index 0000000000..cf7161cda7 --- /dev/null +++ b/node_modules/markdownlint/doc/md026.md @@ -0,0 +1,40 @@ +# `MD026` - Trailing punctuation in heading + +Tags: `headings` + +Aliases: `no-trailing-punctuation` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any heading that has one of the specified normal or +full-width punctuation characters as the last character in the line: + +```markdown +# This is a heading. +``` + +To fix this, remove the trailing punctuation: + +```markdown +# This is a heading +``` + +Note: The `punctuation` parameter can be used to specify what characters count +as punctuation at the end of a heading. For example, you can change it to +`".,;:"` to allow headings that end with an exclamation point. `?` is +allowed by default because of how common it is in headings of FAQ-style +documents. Setting the `punctuation` parameter to `""` allows all characters - +and is equivalent to disabling the rule. + +Note: The trailing semicolon of [HTML entity references][html-entity-references] +like `©`, `©`, and `©` is ignored by this rule. + +Rationale: Headings are not meant to be full sentences. More information: +[Punctuation at the end of headers][end-punctuation]. + +[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers +[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references diff --git a/node_modules/markdownlint/doc/md027.md b/node_modules/markdownlint/doc/md027.md new file mode 100644 index 0000000000..0b910992f4 --- /dev/null +++ b/node_modules/markdownlint/doc/md027.md @@ -0,0 +1,24 @@ +# `MD027` - Multiple spaces after blockquote symbol + +Tags: `blockquote`, `indentation`, `whitespace` + +Aliases: `no-multiple-space-blockquote` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when blockquotes have more than one space after the +blockquote (`>`) symbol: + +```markdown +> This is a blockquote with bad indentation +> there should only be one. +``` + +To fix, remove any extraneous space: + +```markdown +> This is a blockquote with correct +> indentation. +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md028.md b/node_modules/markdownlint/doc/md028.md new file mode 100644 index 0000000000..94972ed275 --- /dev/null +++ b/node_modules/markdownlint/doc/md028.md @@ -0,0 +1,40 @@ +# `MD028` - Blank line inside blockquote + +Tags: `blockquote`, `whitespace` + +Aliases: `no-blanks-blockquote` + +This rule is triggered when two blockquote blocks are separated by nothing +except for a blank line: + +```markdown +> This is a blockquote +> which is immediately followed by + +> this blockquote. Unfortunately +> In some parsers, these are treated as the same blockquote. +``` + +To fix this, ensure that any blockquotes that are right next to each other +have some text in between: + +```markdown +> This is a blockquote. + +And Jimmy also said: + +> This too is a blockquote. +``` + +Alternatively, if they are supposed to be the same quote, then add the +blockquote symbol at the beginning of the blank line: + +```markdown +> This is a blockquote. +> +> This is the same blockquote. +``` + +Rationale: Some Markdown parsers will treat two blockquotes separated by one +or more blank lines as the same blockquote, while others will treat them as +separate blockquotes. diff --git a/node_modules/markdownlint/doc/md029.md b/node_modules/markdownlint/doc/md029.md new file mode 100644 index 0000000000..1f00e7761c --- /dev/null +++ b/node_modules/markdownlint/doc/md029.md @@ -0,0 +1,98 @@ +# `MD029` - Ordered list item prefix + +Tags: `ol` + +Aliases: `ol-prefix` + +Parameters: + +- `style`: List style (`string`, default `one_or_ordered`, values `one` / + `one_or_ordered` / `ordered` / `zero`) + +This rule is triggered for ordered lists that do not either start with '1.' or +do not have a prefix that increases in numerical order (depending on the +configured style). The less-common pattern of using '0.' as a first prefix or +for all prefixes is also supported. + +Example valid list if the style is configured as 'one': + +```markdown +1. Do this. +1. Do that. +1. Done. +``` + +Examples of valid lists if the style is configured as 'ordered': + +```markdown +1. Do this. +2. Do that. +3. Done. +``` + +```markdown +0. Do this. +1. Do that. +2. Done. +``` + +All three examples are valid when the style is configured as 'one_or_ordered'. + +Example valid list if the style is configured as 'zero': + +```markdown +0. Do this. +0. Do that. +0. Done. +``` + +Example invalid list for all styles: + +```markdown +1. Do this. +3. Done. +``` + +This rule supports 0-prefixing ordered list items for uniform indentation: + +```markdown +... +08. Item +09. Item +10. Item +11. Item +... +``` + +Note: This rule will report violations for cases like the following where an +improperly-indented code block (or similar) appears between two list items and +"breaks" the list in two: + + + +~~~markdown +1. First list + +```text +Code block +``` + +1. Second list +~~~ + +The fix is to indent the code block so it becomes part of the preceding list +item as intended: + +~~~markdown +1. First list + + ```text + Code block + ``` + +2. Still first list +~~~ + + + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md030.md b/node_modules/markdownlint/doc/md030.md new file mode 100644 index 0000000000..59454d2983 --- /dev/null +++ b/node_modules/markdownlint/doc/md030.md @@ -0,0 +1,82 @@ +# `MD030` - Spaces after list markers + +Tags: `ol`, `ul`, `whitespace` + +Aliases: `list-marker-space` + +Parameters: + +- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) +- `ol_single`: Spaces for single-line ordered list items (`integer`, default + `1`) +- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default + `1`) +- `ul_single`: Spaces for single-line unordered list items (`integer`, default + `1`) + +Fixable: Some violations can be fixed by tooling + +This rule checks for the number of spaces between a list marker (e.g. '`-`', +'`*`', '`+`' or '`1.`') and the text of the list item. + +The number of spaces checked for depends on the document style in use, but the +default is 1 space after any list marker: + +```markdown +* Foo +* Bar +* Baz + +1. Foo +1. Bar +1. Baz + +1. Foo + * Bar +1. Baz +``` + +A document style may change the number of spaces after unordered list items +and ordered list items independently, as well as based on whether the content +of every item in the list consists of a single paragraph or multiple +paragraphs (including sub-lists and code blocks). + +For example, the style guide at + +specifies that 1 space after the list marker should be used if every item in +the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered +and unordered lists respectively) if there are multiple paragraphs of content +inside the list: + +```markdown +* Foo +* Bar +* Baz +``` + +vs. + +```markdown +* Foo + + Second paragraph + +* Bar +``` + +or + +```markdown +1. Foo + + Second paragraph + +1. Bar +``` + +To fix this, ensure the correct number of spaces are used after the list marker +for your selected document style. + +Rationale: Violations of this rule can lead to improperly rendered content. + +Note: See [Prettier.md](Prettier.md) for compatibility information. diff --git a/node_modules/markdownlint/doc/md031.md b/node_modules/markdownlint/doc/md031.md new file mode 100644 index 0000000000..9663e5da04 --- /dev/null +++ b/node_modules/markdownlint/doc/md031.md @@ -0,0 +1,50 @@ +# `MD031` - Fenced code blocks should be surrounded by blank lines + +Tags: `blank_lines`, `code` + +Aliases: `blanks-around-fences` + +Parameters: + +- `list_items`: Include list items (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when fenced code blocks are either not preceded or not +followed by a blank line: + +````markdown +Some text +``` +Code block +``` + +``` +Another code block +``` +Some more text +```` + +To fix this, ensure that all fenced code blocks have a blank line both before +and after (except where the block is at the beginning or end of the document): + +````markdown +Some text + +``` +Code block +``` + +``` +Another code block +``` + +Some more text +```` + +Set the `list_items` parameter to `false` to disable this rule for list items. +Disabling this behavior for lists can be useful if it is necessary to create a +[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. + +Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will +not parse fenced code blocks that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/doc/md032.md b/node_modules/markdownlint/doc/md032.md new file mode 100644 index 0000000000..41c8b41115 --- /dev/null +++ b/node_modules/markdownlint/doc/md032.md @@ -0,0 +1,55 @@ +# `MD032` - Lists should be surrounded by blank lines + +Tags: `blank_lines`, `bullet`, `ol`, `ul` + +Aliases: `blanks-around-lists` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when lists (of any kind) are either not preceded or not +followed by a blank line: + +```markdown +Some text +* List item +* List item + +1. List item +2. List item +*** +``` + +In the first case above, text immediately precedes the unordered list. In the +second case above, a thematic break immediately follows the ordered list. To fix +violations of this rule, ensure that all lists have a blank line both before and +after (except when the list is at the very beginning or end of the document): + +```markdown +Some text + +* List item +* List item + +1. List item +2. List item + +*** +``` + +Note that the following case is **not** a violation of this rule: + +```markdown +1. List item + More item 1 +2. List item +More item 2 +``` + +Although it is not indented, the text "More item 2" is referred to as a +[lazy continuation line][lazy-continuation] and considered part of the second +list item. + +Rationale: In addition to aesthetic reasons, some parsers, including kramdown, +will not parse lists that don't have blank lines before and after them. + +[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line diff --git a/node_modules/markdownlint/doc/md033.md b/node_modules/markdownlint/doc/md033.md new file mode 100644 index 0000000000..d2f5ddecb2 --- /dev/null +++ b/node_modules/markdownlint/doc/md033.md @@ -0,0 +1,27 @@ +# `MD033` - Inline HTML + +Tags: `html` + +Aliases: `no-inline-html` + +Parameters: + +- `allowed_elements`: Allowed elements (`string[]`, default `[]`) + +This rule is triggered whenever raw HTML is used in a Markdown document: + +```markdown +

Inline HTML heading

+``` + +To fix this, use 'pure' Markdown instead of including raw HTML: + +```markdown +# Markdown heading +``` + +Note: To allow specific HTML elements, use the `allowed_elements` parameter. + +Rationale: Raw HTML is allowed in Markdown, but this rule is included for +those who want their documents to only include "pure" Markdown, or for those +who are rendering Markdown documents into something other than HTML. diff --git a/node_modules/markdownlint/doc/md034.md b/node_modules/markdownlint/doc/md034.md new file mode 100644 index 0000000000..dc9c3cf618 --- /dev/null +++ b/node_modules/markdownlint/doc/md034.md @@ -0,0 +1,55 @@ +# `MD034` - Bare URL used + +Tags: `links`, `url` + +Aliases: `no-bare-urls` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered whenever a URL or email address appears without +surrounding angle brackets: + +```markdown +For more info, visit https://www.example.com/ or email user@example.com. +``` + +To fix this, add angle brackets around the URL or email address: + +```markdown +For more info, visit or email . +``` + +If a URL or email address contains non-ASCII characters, it may be not be +handled as intended even when angle brackets are present. In such cases, +[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used +to comply with the required syntax for URL and email. + +Note: To include a bare URL or email without it being converted into a link, +wrap it in a code span: + +```markdown +Not a clickable link: `https://www.example.com` +``` + +Note: The following scenario does not trigger this rule because it could be a +shortcut link: + +```markdown +[https://www.example.com] +``` + +Note: The following syntax triggers this rule because the nested link could be +a shortcut link (which takes precedence): + +```markdown +[text [shortcut] text](https://example.com) +``` + +To avoid this, escape both inner brackets: + +```markdown +[link \[text\] link](https://example.com) +``` + +Rationale: Without angle brackets, a bare URL or email isn't converted into a +link by some Markdown parsers. diff --git a/node_modules/markdownlint/doc/md035.md b/node_modules/markdownlint/doc/md035.md new file mode 100644 index 0000000000..ee74516cbc --- /dev/null +++ b/node_modules/markdownlint/doc/md035.md @@ -0,0 +1,37 @@ +# `MD035` - Horizontal rule style + +Tags: `hr` + +Aliases: `hr-style` + +Parameters: + +- `style`: Horizontal rule style (`string`, default `consistent`) + +This rule is triggered when inconsistent styles of horizontal rules are used +in the document: + +```markdown +--- + +- - - + +*** + +* * * + +**** +``` + +To fix this, use the same horizontal rule everywhere: + +```markdown +--- + +--- +``` + +The configured style can ensure all horizontal rules use a specific string or it +can ensure all horizontal rules match the first horizontal rule (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md036.md b/node_modules/markdownlint/doc/md036.md new file mode 100644 index 0000000000..1518904f79 --- /dev/null +++ b/node_modules/markdownlint/doc/md036.md @@ -0,0 +1,45 @@ +# `MD036` - Emphasis used instead of a heading + +Tags: `emphasis`, `headings` + +Aliases: `no-emphasis-as-heading` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) + +This check looks for instances where emphasized (i.e. bold or italic) text is +used to separate sections, where a heading should be used instead: + +```markdown +**My document** + +Lorem ipsum dolor sit amet... + +_Another section_ + +Consectetur adipiscing elit, sed do eiusmod. +``` + +To fix this, use Markdown headings instead of emphasized text to denote +sections: + +```markdown +# My document + +Lorem ipsum dolor sit amet... + +## Another section + +Consectetur adipiscing elit, sed do eiusmod. +``` + +Note: This rule looks for single-line paragraphs that consist entirely +of emphasized text. It won't fire on emphasis used within regular text, +multi-line emphasized paragraphs, or paragraphs ending in punctuation +(normal or full-width). Similarly to rule MD026, you can configure what +characters are recognized as punctuation. + +Rationale: Using emphasis instead of a heading prevents tools from inferring +the structure of a document. More information: +. diff --git a/node_modules/markdownlint/doc/md037.md b/node_modules/markdownlint/doc/md037.md new file mode 100644 index 0000000000..c96ba3caf6 --- /dev/null +++ b/node_modules/markdownlint/doc/md037.md @@ -0,0 +1,37 @@ +# `MD037` - Spaces inside emphasis markers + +Tags: `emphasis`, `whitespace` + +Aliases: `no-space-in-emphasis` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when emphasis markers (bold, italic) are used, but they +have spaces between the markers and the text: + +```markdown +Here is some ** bold ** text. + +Here is some * italic * text. + +Here is some more __ bold __ text. + +Here is some more _ italic _ text. +``` + +To fix this, remove the spaces around the emphasis markers: + +```markdown +Here is some **bold** text. + +Here is some *italic* text. + +Here is some more __bold__ text. + +Here is some more _italic_ text. +``` + +Rationale: Emphasis is only parsed as such when the asterisks/underscores +aren't surrounded by spaces. This rule attempts to detect where +they were surrounded by spaces, but it appears that emphasized text was +intended by the author. diff --git a/node_modules/markdownlint/doc/md038.md b/node_modules/markdownlint/doc/md038.md new file mode 100644 index 0000000000..86cf525961 --- /dev/null +++ b/node_modules/markdownlint/doc/md038.md @@ -0,0 +1,40 @@ +# `MD038` - Spaces inside code span elements + +Tags: `code`, `whitespace` + +Aliases: `no-space-in-code` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered for code span elements that have spaces adjacent to the +backticks: + +```markdown +`some text ` + +` some text` +``` + +To fix this, remove any spaces adjacent to the backticks: + +```markdown +`some text` +``` + +Note: A single leading and trailing space is allowed by the specification and +automatically trimmed (in order to allow for code spans that embed backticks): + +```markdown +`` `backticks` `` +``` + +Note: A single leading or trailing space is allowed if used to separate code +span markers from an embedded backtick (though the space is not trimmed): + +```markdown +`` ` embedded backtick`` +``` + +Rationale: Violations of this rule are usually unintentional and may lead to +improperly-rendered content. If spaces beside backticks are intentional, this +rule can be disabled for that line or file. diff --git a/node_modules/markdownlint/doc/md039.md b/node_modules/markdownlint/doc/md039.md new file mode 100644 index 0000000000..8e854cde2f --- /dev/null +++ b/node_modules/markdownlint/doc/md039.md @@ -0,0 +1,21 @@ +# `MD039` - Spaces inside link text + +Tags: `links`, `whitespace` + +Aliases: `no-space-in-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on links that have spaces surrounding the link text: + +```markdown +[ a link ](https://www.example.com/) +``` + +To fix this, remove the spaces surrounding the link text: + +```markdown +[a link](https://www.example.com/) +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md040.md b/node_modules/markdownlint/doc/md040.md new file mode 100644 index 0000000000..5272fc0986 --- /dev/null +++ b/node_modules/markdownlint/doc/md040.md @@ -0,0 +1,52 @@ +# `MD040` - Fenced code blocks should have a language specified + +Tags: `code`, `language` + +Aliases: `fenced-code-language` + +Parameters: + +- `allowed_languages`: List of languages (`string[]`, default `[]`) +- `language_only`: Require language only (`boolean`, default `false`) + +This rule is triggered when fenced code blocks are used, but a language isn't +specified: + +````markdown +``` +#!/bin/bash +echo Hello world +``` +```` + +To fix this, add a language specifier to the code block: + +````markdown +```bash +#!/bin/bash +echo Hello world +``` +```` + +To display a code block without syntax highlighting, use: + +````markdown +```text +Plain text in a code block +``` +```` + +You can configure the `allowed_languages` parameter to specify a list of +languages code blocks could use. Languages are case sensitive. The default value +is `[]` which means any language specifier is valid. + +You can prevent extra data from being present in the info string of fenced code +blocks. To do so, set the `language_only` parameter to `true`. + + +Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: +`ruby startline=3`) will trigger this rule. + +Rationale: Specifying a language improves content rendering by using the +correct syntax highlighting for code. More information: +. diff --git a/node_modules/markdownlint/doc/md041.md b/node_modules/markdownlint/doc/md041.md new file mode 100644 index 0000000000..5dfeee130e --- /dev/null +++ b/node_modules/markdownlint/doc/md041.md @@ -0,0 +1,49 @@ +# `MD041` - First line in a file should be a top-level heading + +Tags: `headings` + +Aliases: `first-line-h1`, `first-line-heading` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is intended to ensure documents have a title and is triggered when +the first line in the file isn't a top-level (h1) heading: + +```markdown +This is a file without a heading +``` + +To fix this, add a top-level heading to the beginning of the file: + +```markdown +# File with heading + +This is a file with a top-level heading +``` + +Because it is common for projects on GitHub to use an image for the heading of +`README.md` and that is not well-supported by Markdown, HTML headings are also +permitted by this rule. For example: + +```markdown +

+ +This is a file with a top-level HTML heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule will not +report a violation. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: The top-level heading often acts as the title of a document. More +information: . diff --git a/node_modules/markdownlint/doc/md042.md b/node_modules/markdownlint/doc/md042.md new file mode 100644 index 0000000000..df2026a3ce --- /dev/null +++ b/node_modules/markdownlint/doc/md042.md @@ -0,0 +1,32 @@ +# `MD042` - No empty links + +Tags: `links` + +Aliases: `no-empty-links` + +This rule is triggered when an empty link is encountered: + +```markdown +[an empty link]() +``` + +To fix the violation, provide a destination for the link: + +```markdown +[a valid link](https://example.com/) +``` + +Empty fragments will trigger this rule: + +```markdown +[an empty fragment](#) +``` + +But non-empty fragments will not: + +```markdown +[a valid fragment](#fragment) +``` + +Rationale: Empty links do not lead anywhere and therefore don't function as +links. diff --git a/node_modules/markdownlint/doc/md043.md b/node_modules/markdownlint/doc/md043.md new file mode 100644 index 0000000000..8d6267016a --- /dev/null +++ b/node_modules/markdownlint/doc/md043.md @@ -0,0 +1,69 @@ +# `MD043` - Required heading structure + +Tags: `headings` + +Aliases: `required-headings` + +Parameters: + +- `headings`: List of headings (`string[]`, default `[]`) +- `match_case`: Match case of headings (`boolean`, default `false`) + +This rule is triggered when the headings in a file do not match the array of +headings passed to the rule. It can be used to enforce a standard heading +structure for a set of files. + +To require exactly the following structure: + +```markdown +# Head +## Item +### Detail +``` + +Set the `headings` parameter to: + +```json +[ + "# Head", + "## Item", + "### Detail" +] +``` + +To allow optional headings as with the following structure: + +```markdown +# Head +## Item +### Detail (optional) +## Foot +### Notes (optional) +``` + +Use the special value `"*"` meaning "zero or more unspecified headings" or the +special value `"+"` meaning "one or more unspecified headings" and set the +`headings` parameter to: + +```json +[ + "# Head", + "## Item", + "*", + "## Foot", + "*" +] +``` + +When an error is detected, this rule outputs the line number of the first +problematic heading (otherwise, it outputs the last line number of the file). + +Note that while the `headings` parameter uses the "## Text" ATX heading style +for simplicity, a file may use any supported heading style. + +By default, the case of headings in the document is not required to match that +of `headings`. To require that case match exactly, set the `match_case` +parameter to `true`. + +Rationale: Projects may wish to enforce a consistent document structure across +a set of similar content. diff --git a/node_modules/markdownlint/doc/md044.md b/node_modules/markdownlint/doc/md044.md new file mode 100644 index 0000000000..e8f34e4804 --- /dev/null +++ b/node_modules/markdownlint/doc/md044.md @@ -0,0 +1,45 @@ +# `MD044` - Proper names should have the correct capitalization + +Tags: `spelling` + +Aliases: `proper-names` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `html_elements`: Include HTML elements (`boolean`, default `true`) +- `names`: List of proper names (`string[]`, default `[]`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when any of the strings in the `names` array do not have +the specified capitalization. It can be used to enforce a standard letter case +for the names of projects and products. + +For example, the language "JavaScript" is usually written with both the 'J' and +'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To +enforce the proper capitalization, specify the desired letter case in the +`names` array: + +```json +[ + "JavaScript" +] +``` + +Sometimes a proper name is capitalized differently in certain contexts. In such +cases, add both forms to the `names` array: + +```json +[ + "GitHub", + "github.com" +] +``` + +Set the `code_blocks` parameter to `false` to disable this rule for code blocks +and spans. Set the `html_elements` parameter to `false` to disable this rule +for HTML elements and attributes (such as when using a proper name as part of +a path for `a`/`href` or `img`/`src`). + +Rationale: Incorrect capitalization of proper names is usually a mistake. diff --git a/node_modules/markdownlint/doc/md045.md b/node_modules/markdownlint/doc/md045.md new file mode 100644 index 0000000000..5d214f6f29 --- /dev/null +++ b/node_modules/markdownlint/doc/md045.md @@ -0,0 +1,40 @@ +# `MD045` - Images should have alternate text (alt text) + +Tags: `accessibility`, `images` + +Aliases: `no-alt-text` + +This rule is triggered when an image is missing alternate text (alt text) +information. + +Alternate text is commonly specified inline as: + +```markdown +![Alternate text](image.jpg) +``` + +Or with reference syntax as: + +```markdown +![Alternate text][ref] + +... + +[ref]: image.jpg "Optional title" +``` + +Or with HTML as: + +```html +Alternate text +``` + +Guidance for writing alternate text is available from the [W3C][w3c], +[Wikipedia][wikipedia], and [other locations][phase2technology]. + +Rationale: Alternate text is important for accessibility and describes the +content of an image for people who may not be able to see it. + +[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses +[w3c]: https://www.w3.org/WAI/alt/ +[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute diff --git a/node_modules/markdownlint/doc/md046.md b/node_modules/markdownlint/doc/md046.md new file mode 100644 index 0000000000..25c9611b68 --- /dev/null +++ b/node_modules/markdownlint/doc/md046.md @@ -0,0 +1,40 @@ +# `MD046` - Code block style + +Tags: `code` + +Aliases: `code-block-style` + +Parameters: + +- `style`: Block style (`string`, default `consistent`, values `consistent` / + `fenced` / `indented`) + +This rule is triggered when unwanted or different code block styles are used in +the same document. + +In the default configuration this rule reports a violation for the following +document: + + + + Some text. + + # Indented code + + More text. + + ```ruby + # Fenced code + ``` + + More text. + + + +To fix violations of this rule, use a consistent style (either indenting or code +fences). + +The configured code block style can be specific (`fenced`, `indented`) or can +require all code blocks match the first code block (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md047.md b/node_modules/markdownlint/doc/md047.md new file mode 100644 index 0000000000..494937d057 --- /dev/null +++ b/node_modules/markdownlint/doc/md047.md @@ -0,0 +1,34 @@ +# `MD047` - Files should end with a single newline character + +Tags: `blank_lines` + +Aliases: `single-trailing-newline` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there is not a single newline character at the end +of a file. + +An example that triggers the rule: + +```markdown +# Heading + +This file ends without a newline.[EOF] +``` + +To fix the violation, add a newline character to the end of the file: + +```markdown +# Heading + +This file ends with a newline. +[EOF] +``` + +Rationale: Some programs have trouble with files that do not end with a newline. + +More information: [What's the point in adding a new line to the end of a +file?][stack-exchange] + +[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file diff --git a/node_modules/markdownlint/doc/md048.md b/node_modules/markdownlint/doc/md048.md new file mode 100644 index 0000000000..3776576019 --- /dev/null +++ b/node_modules/markdownlint/doc/md048.md @@ -0,0 +1,42 @@ +# `MD048` - Code fence style + +Tags: `code` + +Aliases: `code-fence-style` + +Parameters: + +- `style`: Code fence style (`string`, default `consistent`, values `backtick` + / `consistent` / `tilde`) + +This rule is triggered when the symbols used in the document for fenced code +blocks do not match the configured code fence style: + +````markdown +```ruby +# Fenced code +``` + +~~~ruby +# Fenced code +~~~ +```` + +To fix this issue, use the configured code fence style throughout the +document: + +````markdown +```ruby +# Fenced code +``` + +```ruby +# Fenced code +``` +```` + +The configured code fence style can be a specific symbol to use (`backtick`, +`tilde`) or it can require all code fences match the first code fence +(`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md049.md b/node_modules/markdownlint/doc/md049.md new file mode 100644 index 0000000000..e16316d3bb --- /dev/null +++ b/node_modules/markdownlint/doc/md049.md @@ -0,0 +1,36 @@ +# `MD049` - Emphasis style + +Tags: `emphasis` + +Aliases: `emphasis-style` + +Parameters: + +- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for emphasis do not +match the configured emphasis style: + +```markdown +*Text* +_Text_ +``` + +To fix this issue, use the configured emphasis style throughout the document: + +```markdown +*Text* +*Text* +``` + +The configured emphasis style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all emphasis matches the first emphasis +(`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like_this_one. + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md050.md b/node_modules/markdownlint/doc/md050.md new file mode 100644 index 0000000000..2f249c2c6c --- /dev/null +++ b/node_modules/markdownlint/doc/md050.md @@ -0,0 +1,35 @@ +# `MD050` - Strong style + +Tags: `emphasis` + +Aliases: `strong-style` + +Parameters: + +- `style`: Strong style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for strong do not +match the configured strong style: + +```markdown +**Text** +__Text__ +``` + +To fix this issue, use the configured strong style throughout the document: + +```markdown +**Text** +**Text** +``` + +The configured strong style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all strong matches the first strong (`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like__this__one. + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md051.md b/node_modules/markdownlint/doc/md051.md new file mode 100644 index 0000000000..947aba330f --- /dev/null +++ b/node_modules/markdownlint/doc/md051.md @@ -0,0 +1,95 @@ +# `MD051` - Link fragments should be valid + +Tags: `links` + +Aliases: `link-fragments` + +Parameters: + +- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a link fragment does not match any of the fragments +that are automatically generated for headings in a document: + +```markdown +# Heading Name + +[Link](#fragment) +``` + +To fix this issue, change the link fragment to reference an existing heading's +generated name (see below): + +```markdown +# Heading Name + +[Link](#heading-name) +``` + +For consistency, this rule requires fragments to exactly match the [GitHub +heading algorithm][github-heading-algorithm] which converts letters to +lowercase. Therefore, the following example is reported as a violation: + +```markdown +# Heading Name + +[Link](#Heading-Name) +``` + +To ignore case when comparing fragments with heading names, the `ignore_case` +parameter can be set to `true`. In this configuration, the previous example is +not reported as a violation. + +Alternatively, some platforms allow the syntax `{#named-anchor}` to be used +within a heading to provide a specific name (consisting of only lower-case +letters, numbers, `-`, and `_`): + +```markdown +# Heading Name {#custom-name} + +[Link](#custom-name) +``` + +Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` +attribute can be used to define a fragment: + +```markdown + + +[Link](#bookmark) +``` + +An `a` tag can be useful in scenarios where a heading is not appropriate or for +control over the text of the fragment identifier. + +This rule also recognizes the custom fragment syntax used by GitHub to highlight +[specific content in a document][github-linking-to-content]. + +For example, this link to line 20: + +```markdown +[Link](#L20) +``` + +And this link to content starting within line 19 running into line 21: + +```markdown +[Link](#L19C5-L21C11) +``` + +Rationale: [GitHub section links][github-section-links] are created +automatically for every heading when Markdown content is displayed on GitHub. +This makes it easy to link directly to different sections within a document. +However, section links change if headings are renamed or removed. This rule +helps identify broken section links within a document. + +Section links are **not** part of the CommonMark specification. This rule +enforces the [GitHub heading algorithm][github-heading-algorithm] which is: +convert heading to lowercase, remove punctuation, convert spaces to dashes, +append an incrementing integer as needed for uniqueness. + +[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links +[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb +[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown diff --git a/node_modules/markdownlint/doc/md052.md b/node_modules/markdownlint/doc/md052.md new file mode 100644 index 0000000000..994d98eefa --- /dev/null +++ b/node_modules/markdownlint/doc/md052.md @@ -0,0 +1,40 @@ +# `MD052` - Reference links and images should use a label that is defined + +Tags: `images`, `links` + +Aliases: `reference-links-images` + +Parameters: + +- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) + +Links and images in Markdown can provide the link destination or image source +at the time of use or can define it elsewhere and use a label for reference. +The reference format is convenient for keeping paragraph text clutter-free +and makes it easy to reuse the same URL in multiple places. + +There are three kinds of reference links and images: + +```markdown +Full: [text][label] +Collapsed: [label][] +Shortcut: [label] + +Full: ![text][image] +Collapsed: ![image][] +Shortcut: ![image] + +[label]: https://example.com/label +[image]: https://example.com/image +``` + +A link or image renders correctly when the corresponding label is defined, but +displays as text with brackets when the label is not present. By default, this +rule warns of undefined labels for "full" and "collapsed" reference syntax but +not for "shortcut" syntax because it is ambiguous. + +The text `[example]` could be a shortcut link or the text "example" in brackets, +so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set +the `include_shortcut` parameter to `true`. Note that doing so produces warnings +for *all* text in the document that *could* be a shortcut. If bracketed text is +intentional, brackets can be escaped with the `\` character: `\[example\]`. diff --git a/node_modules/markdownlint/doc/md053.md b/node_modules/markdownlint/doc/md053.md new file mode 100644 index 0000000000..7caf0290ce --- /dev/null +++ b/node_modules/markdownlint/doc/md053.md @@ -0,0 +1,38 @@ +# `MD053` - Link and image reference definitions should be needed + +Tags: `images`, `links` + +Aliases: `link-image-reference-definitions` + +Parameters: + +- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source +at the time of use or can use a label to reference a definition elsewhere in +the document. The latter reference format is convenient for keeping paragraph +text clutter-free and makes it easy to reuse the same URL in multiple places. + +Because link and image reference definitions are located separately from +where they are used, there are two scenarios where a definition can be +unnecessary: + +1. If a label is not referenced by any link or image in a document, that + definition is unused and can be deleted. +2. If a label is defined multiple times in a document, the first definition is + used and the others can be deleted. + +This rule considers a reference definition to be used if any link or image +reference has the corresponding label. The "full", "collapsed", and "shortcut" +formats are all supported. + +If there are reference definitions that are deliberately unreferenced, they can +be ignored by setting the `ignored_definitions` parameter. The default value of +this parameter ignores the following convention for adding non-HTML comments to +Markdown: + +```markdown +[//]: # (This behaves like a comment) +``` diff --git a/node_modules/markdownlint/doc/md054.md b/node_modules/markdownlint/doc/md054.md new file mode 100644 index 0000000000..01d661cd5e --- /dev/null +++ b/node_modules/markdownlint/doc/md054.md @@ -0,0 +1,100 @@ +# `MD054` - Link and image style + +Tags: `images`, `links` + +Aliases: `link-image-style` + +Parameters: + +- `autolink`: Allow autolinks (`boolean`, default `true`) +- `collapsed`: Allow collapsed reference links and images (`boolean`, default + `true`) +- `full`: Allow full reference links and images (`boolean`, default `true`) +- `inline`: Allow inline links and images (`boolean`, default `true`) +- `shortcut`: Allow shortcut reference links and images (`boolean`, default + `true`) +- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source at +the time of use or can use a label to reference a definition elsewhere in the +document. The three reference formats are convenient for keeping paragraph text +clutter-free and make it easy to reuse the same URL in multiple places. + +By default, this rule allows all link/image styles. + +Setting the `autolink` parameter to `false` disables autolinks: + +```markdown + +``` + +Setting the `inline` parameter to `false` disables inline links and images: + +```markdown +[link](https://example.com) + +![image](https://example.com) +``` + +Setting the `full` parameter to `false` disables full reference links and +images: + +```markdown +[link][url] + +![image][url] + +[url]: https://example.com +``` + +Setting the `collapsed` parameter to `false` disables collapsed reference links +and images: + +```markdown +[url][] + +![url][] + +[url]: https://example.com +``` + +Setting the `shortcut` parameter to `false` disables shortcut reference links +and images: + +```markdown +[url] + +![url] + +[url]: https://example.com +``` + +To fix violations of this rule, change the link or image to use an allowed +style. This rule can automatically fix violations when a link or image can be +converted to the `inline` style (preferred) or a link can be converted to the +`autolink` style (which does not support images and must be an absolute URL). +This rule does *not* fix scenarios that require converting a link or image to +the `full`, `collapsed`, or `shortcut` reference styles because that involves +naming the reference and determining where to insert it in the document. + +Setting the `url_inline` parameter to `false` prevents the use of inline links +with the same absolute URL text/destination and no title because such links can +be converted to autolinks: + +```markdown +[https://example.com](https://example.com) +``` + +To fix `url_inline` violations, use the simpler autolink syntax instead: + +```markdown + +``` + +Rationale: Consistent formatting makes it easier to understand a document. +Autolinks are concise, but appear as URLs which can be long and confusing. +Inline links and images can include descriptive text, but take up more space in +Markdown form. Reference links and images can be easier to read and manipulate +in Markdown form, but require a separate link reference definition. diff --git a/node_modules/markdownlint/doc/md055.md b/node_modules/markdownlint/doc/md055.md new file mode 100644 index 0000000000..9b6f7f086a --- /dev/null +++ b/node_modules/markdownlint/doc/md055.md @@ -0,0 +1,55 @@ +# `MD055` - Table pipe style + +Tags: `table` + +Aliases: `table-pipe-style` + +Parameters: + +- `style`: Table pipe style (`string`, default `consistent`, values + `consistent` / `leading_and_trailing` / `leading_only` / + `no_leading_or_trailing` / `trailing_only`) + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] +is inconsistent about its use of leading and trailing pipe characters (`|`). + +By default (`consistent` style), the header row of the first table in a document +is used to determine the style that is enforced for every table in the document. +A specific style can be used instead (`leading_and_trailing`, `leading_only`, +`no_leading_or_trailing`, `trailing_only`). + +This table's header row has leading and trailing pipes, but its delimiter row is +missing the trailing pipe and its first row of cells is missing the leading +pipe: + +```markdown +| Header | Header | +| ------ | ------ + Cell | Cell | +``` + +To fix these issues, make sure there is a pipe character at the beginning and +end of every row: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and may also +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table +``` + +Rationale: Some parsers have difficulty with tables that are missing their +leading or trailing pipe characters. The use of leading/trailing pipes can also +help provide visual clarity. + +[gfm-table-055]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md056.md b/node_modules/markdownlint/doc/md056.md new file mode 100644 index 0000000000..0fe87b522d --- /dev/null +++ b/node_modules/markdownlint/doc/md056.md @@ -0,0 +1,37 @@ +# `MD056` - Table column count + +Tags: `table` + +Aliases: `table-column-count` + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] +does not have the same number of cells in every row. + +This table's second data row has too few cells and its third data row has too +many cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | +| Cell | Cell | Cell | +``` + +To fix these issues, ensure every row has the same number of cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | Cell | +| Cell | Cell | +``` + +Note that a table's header row and its delimiter row must have the same number +of cells or it will not be recognized as a table (per specification). + +Rationale: Extra cells in a row are usually not shown, so their data is lost. +Missing cells in a row create holes in the table and suggest an omission. + +[gfm-table-056]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md058.md b/node_modules/markdownlint/doc/md058.md new file mode 100644 index 0000000000..8600751242 --- /dev/null +++ b/node_modules/markdownlint/doc/md058.md @@ -0,0 +1,48 @@ +# `MD058` - Tables should be surrounded by blank lines + +Tags: `table` + +Aliases: `blanks-around-tables` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when tables are either not preceded or not followed by a +blank line: + +```markdown +Some text +| Header | Header | +| ------ | ------ | +| Cell | Cell | +> Blockquote +``` + +To fix violations of this rule, ensure that all tables have a blank line both +before and after (except when the table is at the very beginning or end of the +document): + +```markdown +Some text + +| Header | Header | +| ------ | ------ | +| Cell | Cell | + +> Blockquote +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and will not +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table and the next line is blank + +Some text +``` + +Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse +tables that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/helpers/LICENSE b/node_modules/markdownlint/helpers/LICENSE new file mode 100644 index 0000000000..71ff07a3e3 --- /dev/null +++ b/node_modules/markdownlint/helpers/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) David Anson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/markdownlint/helpers/README.md b/node_modules/markdownlint/helpers/README.md new file mode 100644 index 0000000000..605df84a94 --- /dev/null +++ b/node_modules/markdownlint/helpers/README.md @@ -0,0 +1,29 @@ +# markdownlint-rule-helpers + +> A collection of `markdownlint` helper functions for custom rules + +## Overview + +The [Markdown][markdown] linter [`markdownlint`][markdownlint] offers a variety +of built-in validation [rules][rules] and supports the creation of [custom +rules][custom-rules]. The internal rules share various helper functions; this +package exposes those for reuse by custom rules. + +## API + +*Undocumented* - This package exports the internal functions as-is. The APIs +were not originally meant to be public, are not officially supported, and may +change from release to release. There are brief descriptive comments above each +function, but no [JSDoc][jsdoc] annotations. That said, some of what's here will +be useful to custom rule authors and may avoid duplicating code. + +## Tests + +*None* - The entire body of code is tested to 100% coverage by the core +`markdownlint` project, so there are no additional tests here. + +[custom-rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/CustomRules.md +[jsdoc]: https://en.m.wikipedia.org/wiki/JSDoc +[markdown]: https://en.wikipedia.org/wiki/Markdown +[markdownlint]: https://github.com/DavidAnson/markdownlint +[rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/Rules.md diff --git a/node_modules/markdownlint/helpers/helpers.cjs b/node_modules/markdownlint/helpers/helpers.cjs new file mode 100644 index 0000000000..6b42f0ab65 --- /dev/null +++ b/node_modules/markdownlint/helpers/helpers.cjs @@ -0,0 +1,542 @@ +// @ts-check + +"use strict"; + +const micromark = require("./micromark-helpers.cjs"); + +const { newLineRe, nextLinesRe } = require("./shared.cjs"); + +module.exports.newLineRe = newLineRe; +module.exports.nextLinesRe = nextLinesRe; + +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").RuleOnError} RuleOnError */ +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").RuleOnErrorFixInfo} RuleOnErrorFixInfo */ +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").MicromarkToken} MicromarkToken */ +// eslint-disable-next-line jsdoc/valid-types +/** @typedef {import("micromark-extension-gfm-footnote", { with: { "resolution-mode": "import" } })} */ +// eslint-disable-next-line jsdoc/valid-types +/** @typedef {import("../lib/micromark-types.d.mts", { with: { "resolution-mode": "import" } })} */ + +// Regular expression for matching common front matter (YAML and TOML) +// @ts-ignore +module.exports.frontMatterRe = + /((^---[^\S\r\n\u2028\u2029]*$[\s\S]+?^---\s*)|(^\+\+\+[^\S\r\n\u2028\u2029]*$[\s\S]+?^(\+\+\+|\.\.\.)\s*)|(^\{[^\S\r\n\u2028\u2029]*$[\s\S]+?^\}\s*))(\r\n|\r|\n|$)/m; + +// Regular expression for matching the start of inline disable/enable comments +const inlineCommentStartRe = + /()/gi; +module.exports.inlineCommentStartRe = inlineCommentStartRe; + +// Regular expression for identifying an HTML entity at the end of a line +module.exports.endOfLineHtmlEntityRe = + /&(?:#\d+|#[xX][\da-fA-F]+|[a-zA-Z]{2,31}|blk\d{2}|emsp1[34]|frac\d{2}|sup\d|there4);$/; + +// Regular expression for identifying a GitHub emoji code at the end of a line +module.exports.endOfLineGemojiCodeRe = + /:(?:[abmovx]|[-+]1|100|1234|(?:1st|2nd|3rd)_place_medal|8ball|clock\d{1,4}|e-mail|non-potable_water|o2|t-rex|u5272|u5408|u55b6|u6307|u6708|u6709|u6e80|u7121|u7533|u7981|u7a7a|[a-z]{2,15}2?|[a-z]{1,14}(?:_[a-z\d]{1,16})+):$/; + +// All punctuation characters (normal and full-width) +const allPunctuation = ".,;:!?。,;:!?"; +module.exports.allPunctuation = allPunctuation; + +// All punctuation characters without question mark (normal and full-width) +module.exports.allPunctuationNoQuestion = allPunctuation.replace(/[??]/gu, ""); + +/** + * Returns true iff the input is a Number. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is a Number. + */ +function isNumber(obj) { + return typeof obj === "number"; +} +module.exports.isNumber = isNumber; + +/** + * Returns true iff the input is a String. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is a String. + */ +function isString(obj) { + return typeof obj === "string"; +} +module.exports.isString = isString; + +/** + * Returns true iff the input String is empty. + * + * @param {string} str String of unknown length. + * @returns {boolean} True iff the input String is empty. + */ +function isEmptyString(str) { + return str.length === 0; +} +module.exports.isEmptyString = isEmptyString; + +/** + * Returns true iff the input is an Object. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is an Object. + */ +function isObject(obj) { + return !!obj && (typeof obj === "object") && !Array.isArray(obj); +} +module.exports.isObject = isObject; + +/** + * Returns true iff the input is a URL. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is a URL. + */ +function isUrl(obj) { + return !!obj && (Object.getPrototypeOf(obj) === URL.prototype); +} +module.exports.isUrl = isUrl; + +/** + * Clones the input if it is an Array. + * + * @param {Object} arr Object of unknown type. + * @returns {Object} Clone of obj iff obj is an Array. + */ +function cloneIfArray(arr) { + return Array.isArray(arr) ? [ ...arr ] : arr; +} +module.exports.cloneIfArray = cloneIfArray; + +/** + * Clones the input if it is a URL. + * + * @param {Object} url Object of unknown type. + * @returns {Object} Clone of obj iff obj is a URL. + */ +function cloneIfUrl(url) { + return isUrl(url) ? new URL(url) : url; +} +module.exports.cloneIfUrl = cloneIfUrl; + +/** + * Gets a Regular Expression for matching the specified HTML attribute. + * + * @param {string} name HTML attribute name. + * @returns {RegExp} Regular Expression for matching. + */ +module.exports.getHtmlAttributeRe = function getHtmlAttributeRe(name) { + return new RegExp(`\\s${name}\\s*=\\s*['"]?([^'"\\s>]*)`, "iu"); +}; + +/** + * Returns true iff the input line is blank (contains nothing, whitespace, or + * comments (unclosed start/end comments allowed)). + * + * @param {string} line Input line. + * @returns {boolean} True iff line is blank. + */ +function isBlankLine(line) { + const startComment = ""; + const removeComments = (s) => { + while (true) { + const start = s.indexOf(startComment); + const end = s.indexOf(endComment); + if ((end !== -1) && ((start === -1) || (end < start))) { + // Unmatched end comment is first + s = s.slice(end + endComment.length); + } else if ((start !== -1) && (end !== -1)) { + // Start comment is before end comment + s = s.slice(0, start) + s.slice(end + endComment.length); + } else if ((start !== -1) && (end === -1)) { + // Unmatched start comment is last + s = s.slice(0, start); + } else { + // No more comments to remove + return s; + } + } + }; + return ( + !line || + !line.trim() || + !removeComments(line).replace(/>/g, "").trim() + ); +} +module.exports.isBlankLine = isBlankLine; + +// Replaces the content of properly-formatted CommonMark comments with "." +// This preserves the line/column information for the rest of the document +// https://spec.commonmark.org/0.29/#html-blocks +// https://spec.commonmark.org/0.29/#html-comment +const htmlCommentBegin = ""; +const safeCommentCharacter = "."; +const startsWithPipeRe = /^ *\|/; +const notCrLfRe = /[^\r\n]/g; +const notSpaceCrLfRe = /[^ \r\n]/g; +const trailingSpaceRe = / +[\r\n]/g; +const replaceTrailingSpace = (s) => s.replace(notCrLfRe, safeCommentCharacter); +module.exports.clearHtmlCommentText = function clearHtmlCommentText(text) { + let i = 0; + while ((i = text.indexOf(htmlCommentBegin, i)) !== -1) { + const j = text.indexOf(htmlCommentEnd, i + 2); + if (j === -1) { + // Un-terminated comments are treated as text + break; + } + // If the comment has content... + if (j > i + htmlCommentBegin.length) { + const content = text.slice(i + htmlCommentBegin.length, j); + const lastLf = text.lastIndexOf("\n", i) + 1; + const preText = text.slice(lastLf, i); + const isBlock = preText.trim().length === 0; + const couldBeTable = startsWithPipeRe.test(preText); + const spansTableCells = couldBeTable && content.includes("\n"); + const isValid = + isBlock || + !( + spansTableCells || + content.startsWith(">") || + content.startsWith("->") || + content.endsWith("-") || + content.includes("--") + ); + // If a valid block/inline comment... + if (isValid) { + const clearedContent = content + .replace(notSpaceCrLfRe, safeCommentCharacter) + .replace(trailingSpaceRe, replaceTrailingSpace); + text = + text.slice(0, i + htmlCommentBegin.length) + + clearedContent + + text.slice(j); + } + } + i = j + htmlCommentEnd.length; + } + return text; +}; + +// Escapes a string for use in a RegExp +module.exports.escapeForRegExp = function escapeForRegExp(str) { + return str.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); +}; + +/** + * Adds ellipsis to the left/right/middle of the specified text. + * + * @param {string} text Text to ellipsify. + * @param {boolean} [start] True iff the start of the text is important. + * @param {boolean} [end] True iff the end of the text is important. + * @returns {string} Ellipsified text. + */ +function ellipsify(text, start, end) { + if (text.length <= 30) { + // Nothing to do + } else if (start && end) { + text = text.slice(0, 15) + "..." + text.slice(-15); + } else if (end) { + text = "..." + text.slice(-30); + } else { + text = text.slice(0, 30) + "..."; + } + return text; +} +module.exports.ellipsify = ellipsify; + +/** + * Adds a generic error object via the onError callback. + * + * @param {RuleOnError} onError RuleOnError instance. + * @param {number} lineNumber Line number. + * @param {string} [detail] Error details. + * @param {string} [context] Error context. + * @param {number[]} [range] Column and length of error. + * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. + * @returns {void} + */ +function addError(onError, lineNumber, detail, context, range, fixInfo) { + onError({ + lineNumber, + detail, + context, + range, + fixInfo + }); +} +module.exports.addError = addError; + +/** + * Adds an error object with details conditionally via the onError callback. + * + * @param {RuleOnError} onError RuleOnError instance. + * @param {number} lineNumber Line number. + * @param {Object} expected Expected value. + * @param {Object} actual Actual value. + * @param {string} [detail] Error details. + * @param {string} [context] Error context. + * @param {number[]} [range] Column and length of error. + * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. + * @returns {void} + */ +function addErrorDetailIf( + onError, lineNumber, expected, actual, detail, context, range, fixInfo) { + if (expected !== actual) { + addError( + onError, + lineNumber, + "Expected: " + expected + "; Actual: " + actual + + (detail ? "; " + detail : ""), + context, + range, + fixInfo); + } +} +module.exports.addErrorDetailIf = addErrorDetailIf; + +/** + * Adds an error object with context via the onError callback. + * + * @param {RuleOnError} onError RuleOnError instance. + * @param {number} lineNumber Line number. + * @param {string} context Error context. + * @param {boolean} [start] True iff the start of the text is important. + * @param {boolean} [end] True iff the end of the text is important. + * @param {number[]} [range] Column and length of error. + * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. + * @returns {void} + */ +function addErrorContext( + onError, lineNumber, context, start, end, range, fixInfo) { + context = ellipsify(context, start, end); + addError(onError, lineNumber, undefined, context, range, fixInfo); +} +module.exports.addErrorContext = addErrorContext; + +/** + * Defines a range within a file (start line/column to end line/column, subset of MicromarkToken). + * + * @typedef {Object} FileRange + * @property {number} startLine Start line (1-based). + * @property {number} startColumn Start column (1-based). + * @property {number} endLine End line (1-based). + * @property {number} endColumn End column (1-based). + */ + +/** + * Returns whether line/column A is less than or equal to line/column B. + * + * @param {number} lineA Line A. + * @param {number} columnA Column A. + * @param {number} lineB Line B. + * @param {number} columnB Column B. + * @returns {boolean} True iff A is less than or equal to B. + */ +const positionLessThanOrEqual = (lineA, columnA, lineB, columnB) => ( + (lineA < lineB) || + ((lineA === lineB) && (columnA <= columnB)) +); + +/** + * Returns whether two ranges (or MicromarkTokens) overlap anywhere. + * + * @param {FileRange|MicromarkToken} rangeA Range A. + * @param {FileRange|MicromarkToken} rangeB Range B. + * @returns {boolean} True iff the two ranges overlap. + */ +module.exports.hasOverlap = function hasOverlap(rangeA, rangeB) { + const lte = positionLessThanOrEqual(rangeA.startLine, rangeA.startColumn, rangeB.startLine, rangeB.startColumn); + const first = lte ? rangeA : rangeB; + const second = lte ? rangeB : rangeA; + return positionLessThanOrEqual(second.startLine, second.startColumn, first.endLine, first.endColumn); +}; + +// Determines if the front matter includes a title +module.exports.frontMatterHasTitle = + function frontMatterHasTitle(frontMatterLines, frontMatterTitlePattern) { + const ignoreFrontMatter = + (frontMatterTitlePattern !== undefined) && !frontMatterTitlePattern; + const frontMatterTitleRe = + new RegExp( + String(frontMatterTitlePattern || "^\\s*\"?title\"?\\s*[:=]"), + "i" + ); + return !ignoreFrontMatter && + frontMatterLines.some((line) => frontMatterTitleRe.test(line)); + }; + +/** + * Returns an object with information about reference links and images. + * + * @param {MicromarkToken[]} tokens Micromark tokens. + * @returns {Object} Reference link/image data. + */ +function getReferenceLinkImageData(tokens) { + const normalizeReference = (s) => s.toLowerCase().trim().replace(/\s+/g, " "); + const references = new Map(); + const shortcuts = new Map(); + const addReferenceToDictionary = (token, label, isShortcut) => { + const referenceDatum = [ + token.startLine - 1, + token.startColumn - 1, + token.text.length + ]; + const reference = normalizeReference(label); + const dictionary = isShortcut ? shortcuts : references; + const referenceData = dictionary.get(reference) || []; + referenceData.push(referenceDatum); + dictionary.set(reference, referenceData); + }; + const definitions = new Map(); + const definitionLineIndices = []; + const duplicateDefinitions = []; + const filteredTokens = + micromark.filterByTypes( + tokens, + [ + // definitionLineIndices + "definition", "gfmFootnoteDefinition", + // definitions and definitionLineIndices + "definitionLabelString", "gfmFootnoteDefinitionLabelString", + // references and shortcuts + "gfmFootnoteCall", "image", "link", + // undefined link labels + "undefinedReferenceCollapsed", "undefinedReferenceFull", "undefinedReferenceShortcut" + ] + ); + for (const token of filteredTokens) { + let labelPrefix = ""; + // eslint-disable-next-line default-case + switch (token.type) { + case "definition": + case "gfmFootnoteDefinition": + // definitionLineIndices + for (let i = token.startLine; i <= token.endLine; i++) { + definitionLineIndices.push(i - 1); + } + break; + case "gfmFootnoteDefinitionLabelString": + labelPrefix = "^"; + case "definitionLabelString": // eslint-disable-line no-fallthrough + { + // definitions and definitionLineIndices + const reference = normalizeReference(`${labelPrefix}${token.text}`); + if (definitions.has(reference)) { + duplicateDefinitions.push([ reference, token.startLine - 1 ]); + } else { + const parent = + micromark.getParentOfType(token, [ "definition" ]); + const destinationString = parent && + micromark.getDescendantsByType(parent, [ "definitionDestination", "definitionDestinationRaw", "definitionDestinationString" ])[0]?.text; + definitions.set( + reference, + [ token.startLine - 1, destinationString ] + ); + } + } + break; + case "gfmFootnoteCall": + case "image": + case "link": + { + // Identify if shortcut or full/collapsed + let isShortcut = (token.children.length === 1); + const isFullOrCollapsed = (token.children.length === 2) && !token.children.some((t) => t.type === "resource"); + const [ labelText ] = micromark.getDescendantsByType(token, [ "label", "labelText" ]); + const [ referenceString ] = micromark.getDescendantsByType(token, [ "reference", "referenceString" ]); + let label = labelText?.text; + // Identify if footnote + if (!isShortcut && !isFullOrCollapsed) { + const [ footnoteCallMarker, footnoteCallString ] = token.children.filter( + (t) => [ "gfmFootnoteCallMarker", "gfmFootnoteCallString" ].includes(t.type) + ); + if (footnoteCallMarker && footnoteCallString) { + label = `${footnoteCallMarker.text}${footnoteCallString.text}`; + isShortcut = true; + } + } + // Track link (handle shortcuts separately due to ambiguity in "text [text] text") + if (isShortcut || isFullOrCollapsed) { + addReferenceToDictionary(token, referenceString?.text || label, isShortcut); + } + } + break; + case "undefinedReferenceCollapsed": + case "undefinedReferenceFull": + case "undefinedReferenceShortcut": + { + const undefinedReference = micromark.getDescendantsByType(token, [ "undefinedReference" ])[0]; + const label = undefinedReference.children.map((t) => t.text).join(""); + const isShortcut = (token.type === "undefinedReferenceShortcut"); + addReferenceToDictionary(token, label, isShortcut); + } + break; + } + } + return { + references, + shortcuts, + definitions, + duplicateDefinitions, + definitionLineIndices + }; +} +module.exports.getReferenceLinkImageData = getReferenceLinkImageData; + +/** + * Gets the most common line ending, falling back to the platform default. + * + * @param {string} input Markdown content to analyze. + * @param {Object} [os] Node.js "os" module. + * @returns {string} Preferred line ending. + */ +function getPreferredLineEnding(input, os) { + let cr = 0; + let lf = 0; + let crlf = 0; + const endings = input.match(newLineRe) || []; + for (const ending of endings) { + // eslint-disable-next-line default-case + switch (ending) { + case "\r": + cr++; + break; + case "\n": + lf++; + break; + case "\r\n": + crlf++; + break; + } + } + let preferredLineEnding = null; + if (!cr && !lf && !crlf) { + preferredLineEnding = (os && os.EOL) || "\n"; + } else if ((lf >= crlf) && (lf >= cr)) { + preferredLineEnding = "\n"; + } else if (crlf >= cr) { + preferredLineEnding = "\r\n"; + } else { + preferredLineEnding = "\r"; + } + return preferredLineEnding; +} +module.exports.getPreferredLineEnding = getPreferredLineEnding; + +/** + * Expands a path with a tilde to an absolute path. + * + * @param {string} file Path that may begin with a tilde. + * @param {Object} os Node.js "os" module. + * @returns {string} Absolute path (or original path). + */ +function expandTildePath(file, os) { + const homedir = os && os.homedir && os.homedir(); + return homedir ? file.replace(/^~($|\/|\\)/, `${homedir}$1`) : file; +} +module.exports.expandTildePath = expandTildePath; diff --git a/node_modules/markdownlint/helpers/micromark-helpers.cjs b/node_modules/markdownlint/helpers/micromark-helpers.cjs new file mode 100644 index 0000000000..87e75cbe63 --- /dev/null +++ b/node_modules/markdownlint/helpers/micromark-helpers.cjs @@ -0,0 +1,301 @@ +// @ts-check + +"use strict"; + +const { flatTokensSymbol, htmlFlowSymbol } = require("./shared.cjs"); + +// eslint-disable-next-line jsdoc/valid-types +/** @typedef {import("micromark-util-types", { with: { "resolution-mode": "import" } }).TokenType} TokenType */ +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").MicromarkToken} Token */ + +/** + * Determines if a Micromark token is within an htmlFlow type. + * + * @param {Token} token Micromark token. + * @returns {boolean} True iff the token is within an htmlFlow type. + */ +function inHtmlFlow(token) { + return Boolean(token[htmlFlowSymbol]); +} + +/** + * Returns whether a token is an htmlFlow type containing an HTML comment. + * + * @param {Token} token Micromark token. + * @returns {boolean} True iff token is htmlFlow containing a comment. + */ +function isHtmlFlowComment(token) { + const { text, type } = token; + if ( + (type === "htmlFlow") && + text.startsWith("") + ) { + const comment = text.slice(4, -3); + return ( + !comment.startsWith(">") && + !comment.startsWith("->") && + !comment.endsWith("-") + // The following condition from the CommonMark specification is commented + // to avoid parsing HTML comments that include "--" because that is NOT a + // condition of the HTML specification. + // https://spec.commonmark.org/0.30/#raw-html + // https://html.spec.whatwg.org/multipage/syntax.html#comments + // && !comment.includes("--") + ); + } + return false; +} + +/** + * Adds a range of numbers to a set. + * + * @param {Set} set Set of numbers. + * @param {number} start Starting number. + * @param {number} end Ending number. + * @returns {void} + */ +function addRangeToSet(set, start, end) { + for (let i = start; i <= end; i++) { + set.add(i); + } +} + +/** + * @callback AllowedPredicate + * @param {Token} token Micromark token. + * @returns {boolean} True iff allowed. + */ + +/** + * @callback TransformPredicate + * @param {Token} token Micromark token. + * @returns {Token[]} Child tokens. + */ + +/** + * Filter a list of Micromark tokens by predicate. + * + * @param {Token[]} tokens Micromark tokens. + * @param {AllowedPredicate} allowed Allowed token predicate. + * @param {TransformPredicate} [transformChildren] Transform predicate. + * @returns {Token[]} Filtered tokens. + */ +function filterByPredicate(tokens, allowed, transformChildren) { + const result = []; + const queue = [ + { + "array": tokens, + "index": 0 + } + ]; + while (queue.length > 0) { + const current = queue[queue.length - 1]; + const { array, index } = current; + if (index < array.length) { + const token = array[current.index++]; + if (allowed(token)) { + result.push(token); + } + const { children } = token; + if (children.length > 0) { + const transformed = + transformChildren ? transformChildren(token) : children; + queue.push( + { + "array": transformed, + "index": 0 + } + ); + } + } else { + queue.pop(); + } + } + return result; +} + +/** + * Filter a list of Micromark tokens by type. + * + * @param {Token[]} tokens Micromark tokens. + * @param {TokenType[]} types Types to allow. + * @param {boolean} [htmlFlow] Whether to include htmlFlow content. + * @returns {Token[]} Filtered tokens. + */ +function filterByTypes(tokens, types, htmlFlow) { + const predicate = (token) => types.includes(token.type) && (htmlFlow || !inHtmlFlow(token)); + const flatTokens = tokens[flatTokensSymbol]; + if (flatTokens) { + return flatTokens.filter(predicate); + } + return filterByPredicate(tokens, predicate); +} + +/** + * Gets the blockquote prefix text (if any) for the specified line number. + * + * @param {Token[]} tokens Micromark tokens. + * @param {number} lineNumber Line number to examine. + * @param {number} [count] Number of times to repeat. + * @returns {string} Blockquote prefix text. + */ +function getBlockQuotePrefixText(tokens, lineNumber, count = 1) { + return filterByTypes(tokens, [ "blockQuotePrefix", "linePrefix" ]) + .filter((prefix) => prefix.startLine === lineNumber) + .map((prefix) => prefix.text) + .join("") + .trimEnd() + // eslint-disable-next-line unicorn/prefer-spread + .concat("\n") + .repeat(count); +}; + +/** + * Gets a list of nested Micromark token descendants by type path. + * + * @param {Token|Token[]} parent Micromark token parent or parents. + * @param {(TokenType|TokenType[])[]} typePath Micromark token type path. + * @returns {Token[]} Micromark token descendants. + */ +function getDescendantsByType(parent, typePath) { + let tokens = Array.isArray(parent) ? parent : [ parent ]; + for (const type of typePath) { + const predicate = (token) => Array.isArray(type) ? type.includes(token.type) : (type === token.type); + tokens = tokens.flatMap((t) => t.children.filter(predicate)); + } + return tokens; +} + +/** + * Gets the heading level of a Micromark heading tokan. + * + * @param {Token} heading Micromark heading token. + * @returns {number} Heading level. + */ +function getHeadingLevel(heading) { + let level = 1; + const headingSequence = heading.children.find( + (child) => [ "atxHeadingSequence", "setextHeadingLine" ].includes(child.type) + ); + // @ts-ignore + const { text } = headingSequence; + if (text[0] === "#") { + level = Math.min(text.length, 6); + } else if (text[0] === "-") { + level = 2; + } + return level; +} + +/** + * Gets the heading style of a Micromark heading tokan. + * + * @param {Token} heading Micromark heading token. + * @returns {"atx" | "atx_closed" | "setext"} Heading style. + */ +function getHeadingStyle(heading) { + if (heading.type === "setextHeading") { + return "setext"; + } + const atxHeadingSequenceLength = heading.children.filter( + (child) => child.type === "atxHeadingSequence" + ).length; + if (atxHeadingSequenceLength === 1) { + return "atx"; + } + return "atx_closed"; +} + +/** + * Gets the heading text of a Micromark heading token. + * + * @param {Token} heading Micromark heading token. + * @returns {string} Heading text. + */ +function getHeadingText(heading) { + const headingTexts = getDescendantsByType(heading, [ [ "atxHeadingText", "setextHeadingText" ] ]); + return headingTexts[0]?.text.replace(/[\r\n]+/g, " ") || ""; +} + +/** + * HTML tag information. + * + * @typedef {Object} HtmlTagInfo + * @property {boolean} close True iff close tag. + * @property {string} name Tag name. + */ + +/** + * Gets information about the tag in an HTML token. + * + * @param {Token} token Micromark token. + * @returns {HtmlTagInfo | null} HTML tag information. + */ +function getHtmlTagInfo(token) { + const htmlTagNameRe = /^<([^!>][^/\s>]*)/; + if (token.type === "htmlText") { + const match = htmlTagNameRe.exec(token.text); + if (match) { + const name = match[1]; + const close = name.startsWith("/"); + return { + close, + "name": close ? name.slice(1) : name + }; + } + } + return null; +} + +/** + * Gets the nearest parent of the specified type for a Micromark token. + * + * @param {Token} token Micromark token. + * @param {TokenType[]} types Types to allow. + * @returns {Token | null} Parent token. + */ +function getParentOfType(token, types) { + /** @type {Token | null} */ + let current = token; + while ((current = current.parent) && !types.includes(current.type)) { + // Empty + } + return current; +} + +/** + * Set containing token types that do not contain content. + * + * @type {Set} + */ +const nonContentTokens = new Set([ + "blockQuoteMarker", + "blockQuotePrefix", + "blockQuotePrefixWhitespace", + "lineEnding", + "lineEndingBlank", + "linePrefix", + "listItemIndent", + "undefinedReference", + "undefinedReferenceCollapsed", + "undefinedReferenceFull", + "undefinedReferenceShortcut" +]); + +module.exports = { + addRangeToSet, + filterByPredicate, + filterByTypes, + getBlockQuotePrefixText, + getDescendantsByType, + getHeadingLevel, + getHeadingStyle, + getHeadingText, + getHtmlTagInfo, + getParentOfType, + inHtmlFlow, + isHtmlFlowComment, + nonContentTokens +}; diff --git a/node_modules/markdownlint/helpers/package.json b/node_modules/markdownlint/helpers/package.json new file mode 100644 index 0000000000..a5ef55520a --- /dev/null +++ b/node_modules/markdownlint/helpers/package.json @@ -0,0 +1,26 @@ +{ + "name": "markdownlint-rule-helpers", + "version": "0.28.0", + "description": "A collection of markdownlint helper functions for custom rules", + "main": "./helpers.cjs", + "exports": { + ".": "./helpers.cjs", + "./micromark": "./micromark-helpers.cjs" + }, + "author": "David Anson (https://dlaa.me/)", + "license": "MIT", + "homepage": "https://github.com/DavidAnson/markdownlint", + "repository": { + "type": "git", + "url": "git+https://github.com/DavidAnson/markdownlint.git" + }, + "bugs": "https://github.com/DavidAnson/markdownlint/issues", + "funding": "https://github.com/sponsors/DavidAnson", + "engines": { + "node": ">=18" + }, + "keywords": [ + "markdownlint", + "markdownlint-rule" + ] +} diff --git a/node_modules/markdownlint/helpers/shared.cjs b/node_modules/markdownlint/helpers/shared.cjs new file mode 100644 index 0000000000..dfb38c313d --- /dev/null +++ b/node_modules/markdownlint/helpers/shared.cjs @@ -0,0 +1,16 @@ +// @ts-check + +"use strict"; + +// Symbol for identifing the flat tokens array from micromark parse +module.exports.flatTokensSymbol = Symbol("flat-tokens"); + +// Symbol for identifying the htmlFlow token from micromark parse +module.exports.htmlFlowSymbol = Symbol("html-flow"); + +// Regular expression for matching common newline characters +// See NEWLINES_RE in markdown-it/lib/rules_core/normalize.js +module.exports.newLineRe = /\r\n?|\n/g; + +// Regular expression for matching next lines +module.exports.nextLinesRe = /[\r\n][\s\S]*$/; diff --git a/node_modules/markdownlint/package.json b/node_modules/markdownlint/package.json new file mode 100644 index 0000000000..cee17b2634 --- /dev/null +++ b/node_modules/markdownlint/package.json @@ -0,0 +1,120 @@ +{ + "name": "markdownlint", + "version": "0.37.4", + "description": "A Node.js style checker and lint tool for Markdown/CommonMark files.", + "type": "module", + "exports": { + ".": "./lib/exports.mjs", + "./async": "./lib/exports-async.mjs", + "./promise": "./lib/exports-promise.mjs", + "./sync": "./lib/exports-sync.mjs", + "./helpers": "./helpers/helpers.cjs", + "./style/all": "./style/all.json", + "./style/cirosantilli": "./style/cirosantilli.json", + "./style/prettier": "./style/prettier.json", + "./style/relaxed": "./style/relaxed.json" + }, + "imports": { + "#node-imports": { + "markdownlint-imports-browser": "./lib/node-imports-browser.mjs", + "markdownlint-imports-node": "./lib/node-imports-node.mjs", + "browser": "./lib/node-imports-browser.mjs", + "default": "./lib/node-imports-node.mjs" + } + }, + "types": "./lib/types.d.mts", + "author": "David Anson (https://dlaa.me/)", + "license": "MIT", + "homepage": "https://github.com/DavidAnson/markdownlint", + "repository": { + "type": "git", + "url": "git+https://github.com/DavidAnson/markdownlint.git" + }, + "bugs": "https://github.com/DavidAnson/markdownlint/issues", + "funding": "https://github.com/sponsors/DavidAnson", + "scripts": { + "build-config": "npm run build-config-schema && npm run build-config-example", + "build-config-example": "node schema/build-config-example.mjs", + "build-config-schema": "node schema/build-config-schema.mjs", + "build-declaration": "tsc --allowJs --checkJs --declaration --emitDeclarationOnly --module nodenext --outDir dts --rootDir . --target es2015 lib/exports.mjs lib/exports-async.mjs lib/exports-promise.mjs lib/exports-sync.mjs lib/markdownlint.mjs lib/resolve-module.cjs && node scripts/index.mjs copy dts/lib/exports.d.mts lib/exports.d.mts && node scripts/index.mjs copy dts/lib/exports-async.d.mts lib/exports-async.d.mts && node scripts/index.mjs copy dts/lib/exports-promise.d.mts lib/exports-promise.d.mts && node scripts/index.mjs copy dts/lib/exports-sync.d.mts lib/exports-sync.d.mts && node scripts/index.mjs copy dts/lib/markdownlint.d.mts lib/markdownlint.d.mts && node scripts/index.mjs copy dts/lib/resolve-module.d.cts lib/resolve-module.d.cts && node scripts/index.mjs remove dts", + "build-demo": "node scripts/index.mjs copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && cd demo && webpack --no-stats", + "build-docs": "node doc-build/build-rules.mjs", + "build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2", + "ci": "npm-run-all --continue-on-error --parallel lint serial-config-docs serial-declaration-demo test-cover && git diff --exit-code", + "clone-test-repos-apache-airflow": "cd test-repos && git clone https://github.com/apache/airflow apache-airflow --depth 1 --no-tags --quiet", + "clone-test-repos-dotnet-docs": "cd test-repos && git clone https://github.com/dotnet/docs dotnet-docs --depth 1 --no-tags --quiet", + "clone-test-repos-electron-electron": "cd test-repos && git clone https://github.com/electron/electron electron-electron --depth 1 --no-tags --quiet && cd electron-electron && npm install --ignore-scripts @electron/lint-roller typescript@4", + "clone-test-repos-eslint-eslint": "cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet", + "clone-test-repos-mdn-content": "cd test-repos && git clone https://github.com/mdn/content mdn-content --depth 1 --no-tags --quiet", + "clone-test-repos-mkdocs-mkdocs": "cd test-repos && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet", + "clone-test-repos-mochajs-mocha": "cd test-repos && git clone https://github.com/mochajs/mocha mochajs-mocha --depth 1 --no-tags --quiet", + "clone-test-repos-pi-hole-docs": "cd test-repos && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet", + "clone-test-repos-v8-v8-dev": "cd test-repos && git clone https://github.com/v8/v8.dev v8-v8-dev --depth 1 --no-tags --quiet", + "clone-test-repos-webhintio-hint": "cd test-repos && git clone https://github.com/webhintio/hint webhintio-hint --depth 1 --no-tags --quiet", + "clone-test-repos-webpack-webpack-js-org": "cd test-repos && git clone https://github.com/webpack/webpack.js.org webpack-webpack-js-org --depth 1 --no-tags --quiet", + "clone-test-repos": "mkdir test-repos && cd test-repos && npm run clone-test-repos-apache-airflow && npm run clone-test-repos-dotnet-docs && npm run clone-test-repos-electron-electron && npm run clone-test-repos-eslint-eslint && npm run clone-test-repos-mdn-content && npm run clone-test-repos-mkdocs-mkdocs && npm run clone-test-repos-mochajs-mocha && npm run clone-test-repos-pi-hole-docs && npm run clone-test-repos-v8-v8-dev && npm run clone-test-repos-webhintio-hint && npm run clone-test-repos-webpack-webpack-js-org", + "declaration": "npm run build-declaration && npm run test-declaration", + "example": "cd example && node standalone.mjs && grunt markdownlint --force && gulp markdownlint", + "lint": "eslint --max-warnings 0", + "lint-test-repos": "ava --timeout=10m test/markdownlint-test-repos-*.mjs", + "serial-config-docs": "npm run build-config && npm run build-docs", + "serial-declaration-demo": "npm run build-declaration && npm-run-all --continue-on-error --parallel build-demo test-declaration", + "test": "ava --timeout=30s test/markdownlint-test.mjs test/markdownlint-test-config.mjs test/markdownlint-test-custom-rules.mjs test/markdownlint-test-fixes.mjs test/markdownlint-test-helpers.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-result-object.mjs test/markdownlint-test-scenarios.mjs test/resolve-module-test.mjs helpers/test.cjs", + "test-cover": "c8 --100 npm test", + "test-declaration": "cd example/typescript && tsc --module commonjs && tsc --module nodenext && node type-check.js", + "test-extra": "ava --timeout=10m test/markdownlint-test-extra-parse.mjs test/markdownlint-test-extra-type.mjs", + "update-snapshots": "ava --update-snapshots test/markdownlint-test-custom-rules.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-scenarios.mjs", + "update-snapshots-test-repos": "ava --timeout=10m --update-snapshots test/markdownlint-test-repos-*.mjs", + "upgrade": "npx --yes npm-check-updates --upgrade" + }, + "engines": { + "node": ">=18" + }, + "dependencies": { + "markdown-it": "14.1.0", + "micromark": "4.0.1", + "micromark-core-commonmark": "2.0.2", + "micromark-extension-directive": "3.0.2", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.0", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.1" + }, + "devDependencies": { + "@eslint/js": "9.18.0", + "@stylistic/eslint-plugin": "2.13.0", + "ajv": "8.17.1", + "ava": "6.2.0", + "c8": "10.1.3", + "character-entities": "2.0.2", + "eslint": "9.18.0", + "eslint-plugin-jsdoc": "50.6.1", + "eslint-plugin-n": "17.15.1", + "eslint-plugin-regexp": "2.7.0", + "eslint-plugin-unicorn": "56.0.1", + "gemoji": "8.1.0", + "globby": "14.0.2", + "js-yaml": "4.1.0", + "json-schema-to-typescript": "15.0.4", + "jsonc-parser": "3.3.1", + "markdown-it-for-inline": "2.0.1", + "markdown-it-sub": "2.0.0", + "markdown-it-sup": "2.0.0", + "markdownlint-rule-extended-ascii": "0.1.0", + "nano-spawn": "0.2.0", + "npm-run-all": "4.1.5", + "terser-webpack-plugin": "5.3.11", + "toml": "3.0.0", + "typescript": "5.7.3", + "webpack": "5.97.1", + "webpack-cli": "6.0.1" + }, + "keywords": [ + "markdown", + "lint", + "md", + "CommonMark", + "markdownlint" + ] +} diff --git a/node_modules/markdownlint/schema/.markdownlint.jsonc b/node_modules/markdownlint/schema/.markdownlint.jsonc new file mode 100644 index 0000000000..f0f2f93cff --- /dev/null +++ b/node_modules/markdownlint/schema/.markdownlint.jsonc @@ -0,0 +1,310 @@ +// Example markdownlint configuration with all properties set to their default value +{ + + // Default state for all rules + "default": true, + + // Path to configuration file to extend + "extends": null, + + // MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md + "MD001": true, + + // MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md + "MD003": { + // Heading style + "style": "consistent" + }, + + // MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md + "MD004": { + // List style + "style": "consistent" + }, + + // MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md + "MD005": true, + + // MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md + "MD007": { + // Spaces for indent + "indent": 2, + // Whether to indent the first level of the list + "start_indented": false, + // Spaces for first level indent (when start_indented is set) + "start_indent": 2 + }, + + // MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md + "MD009": { + // Spaces for line break + "br_spaces": 2, + // Allow spaces for empty lines in list items + "list_item_empty_lines": false, + // Include unnecessary breaks + "strict": false + }, + + // MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md + "MD010": { + // Include code blocks + "code_blocks": true, + // Fenced code languages to ignore + "ignore_code_languages": [], + // Number of spaces for each hard tab + "spaces_per_tab": 1 + }, + + // MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md + "MD011": true, + + // MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md + "MD012": { + // Consecutive blank lines + "maximum": 1 + }, + + // MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md + "MD013": { + // Number of characters + "line_length": 80, + // Number of characters for headings + "heading_line_length": 80, + // Number of characters for code blocks + "code_block_line_length": 80, + // Include code blocks + "code_blocks": true, + // Include tables + "tables": true, + // Include headings + "headings": true, + // Strict length checking + "strict": false, + // Stern length checking + "stern": false + }, + + // MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md + "MD014": true, + + // MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md + "MD018": true, + + // MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md + "MD019": true, + + // MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md + "MD020": true, + + // MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md + "MD021": true, + + // MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md + "MD022": { + // Blank lines above heading + "lines_above": 1, + // Blank lines below heading + "lines_below": 1 + }, + + // MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md + "MD023": true, + + // MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md + "MD024": { + // Only check sibling headings + "siblings_only": false + }, + + // MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md + "MD025": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md + "MD026": { + // Punctuation characters + "punctuation": ".,;:!。,;:!" + }, + + // MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md + "MD027": true, + + // MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md + "MD028": true, + + // MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md + "MD029": { + // List style + "style": "one_or_ordered" + }, + + // MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md + "MD030": { + // Spaces for single-line unordered list items + "ul_single": 1, + // Spaces for single-line ordered list items + "ol_single": 1, + // Spaces for multi-line unordered list items + "ul_multi": 1, + // Spaces for multi-line ordered list items + "ol_multi": 1 + }, + + // MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md + "MD031": { + // Include list items + "list_items": true + }, + + // MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md + "MD032": true, + + // MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md + "MD033": { + // Allowed elements + "allowed_elements": [] + }, + + // MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md + "MD034": true, + + // MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md + "MD035": { + // Horizontal rule style + "style": "consistent" + }, + + // MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md + "MD036": { + // Punctuation characters + "punctuation": ".,;:!?。,;:!?" + }, + + // MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md + "MD037": true, + + // MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md + "MD038": true, + + // MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md + "MD039": true, + + // MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md + "MD040": { + // List of languages + "allowed_languages": [], + // Require language only + "language_only": false + }, + + // MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md + "MD041": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md + "MD042": true, + + // MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md + "MD043": { + // List of headings + "headings": [], + // Match case of headings + "match_case": false + }, + + // MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md + "MD044": { + // List of proper names + "names": [], + // Include code blocks + "code_blocks": true, + // Include HTML elements + "html_elements": true + }, + + // MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md + "MD045": true, + + // MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md + "MD046": { + // Block style + "style": "consistent" + }, + + // MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md + "MD047": true, + + // MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md + "MD048": { + // Code fence style + "style": "consistent" + }, + + // MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md + "MD049": { + // Emphasis style + "style": "consistent" + }, + + // MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md + "MD050": { + // Strong style + "style": "consistent" + }, + + // MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md + "MD051": { + // Ignore case of fragments + "ignore_case": false + }, + + // MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md + "MD052": { + // Include shortcut syntax + "shortcut_syntax": false + }, + + // MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md + "MD053": { + // Ignored definitions + "ignored_definitions": [ + "//" + ] + }, + + // MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md + "MD054": { + // Allow autolinks + "autolink": true, + // Allow inline links and images + "inline": true, + // Allow full reference links and images + "full": true, + // Allow collapsed reference links and images + "collapsed": true, + // Allow shortcut reference links and images + "shortcut": true, + // Allow URLs as inline links + "url_inline": true + }, + + // MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md + "MD055": { + // Table pipe style + "style": "consistent" + }, + + // MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md + "MD056": true, + + // MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md + "MD058": true +} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/.markdownlint.yaml b/node_modules/markdownlint/schema/.markdownlint.yaml new file mode 100644 index 0000000000..6e71bfd133 --- /dev/null +++ b/node_modules/markdownlint/schema/.markdownlint.yaml @@ -0,0 +1,277 @@ +# Example markdownlint configuration with all properties set to their default value + +# Default state for all rules +default: true + +# Path to configuration file to extend +extends: null + +# MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md +MD001: true + +# MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md +MD003: + # Heading style + style: "consistent" + +# MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md +MD004: + # List style + style: "consistent" + +# MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md +MD005: true + +# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md +MD007: + # Spaces for indent + indent: 2 + # Whether to indent the first level of the list + start_indented: false + # Spaces for first level indent (when start_indented is set) + start_indent: 2 + +# MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md +MD010: + # Include code blocks + code_blocks: true + # Fenced code languages to ignore + ignore_code_languages: [] + # Number of spaces for each hard tab + spaces_per_tab: 1 + +# MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md +MD011: true + +# MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md +MD012: + # Consecutive blank lines + maximum: 1 + +# MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md +MD013: + # Number of characters + line_length: 80 + # Number of characters for headings + heading_line_length: 80 + # Number of characters for code blocks + code_block_line_length: 80 + # Include code blocks + code_blocks: true + # Include tables + tables: true + # Include headings + headings: true + # Strict length checking + strict: false + # Stern length checking + stern: false + +# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md +MD014: true + +# MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md +MD018: true + +# MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md +MD019: true + +# MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md +MD020: true + +# MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md +MD021: true + +# MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md +MD022: + # Blank lines above heading + lines_above: 1 + # Blank lines below heading + lines_below: 1 + +# MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md +MD023: true + +# MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md +MD024: + # Only check sibling headings + siblings_only: false + +# MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md +MD026: + # Punctuation characters + punctuation: ".,;:!。,;:!" + +# MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md +MD027: true + +# MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md +MD028: true + +# MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md +MD029: + # List style + style: "one_or_ordered" + +# MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md +MD031: + # Include list items + list_items: true + +# MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md +MD032: true + +# MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md +MD033: + # Allowed elements + allowed_elements: [] + +# MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md +MD034: true + +# MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md +MD035: + # Horizontal rule style + style: "consistent" + +# MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md +MD036: + # Punctuation characters + punctuation: ".,;:!?。,;:!?" + +# MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md +MD037: true + +# MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md +MD038: true + +# MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md +MD039: true + +# MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md +MD040: + # List of languages + allowed_languages: [] + # Require language only + language_only: false + +# MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md +MD042: true + +# MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md +MD043: + # List of headings + headings: [] + # Match case of headings + match_case: false + +# MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md +MD044: + # List of proper names + names: [] + # Include code blocks + code_blocks: true + # Include HTML elements + html_elements: true + +# MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md +MD045: true + +# MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md +MD046: + # Block style + style: "consistent" + +# MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md +MD047: true + +# MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md +MD048: + # Code fence style + style: "consistent" + +# MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md +MD049: + # Emphasis style + style: "consistent" + +# MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md +MD050: + # Strong style + style: "consistent" + +# MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md +MD051: + # Ignore case of fragments + ignore_case: false + +# MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md +MD052: + # Include shortcut syntax + shortcut_syntax: false + +# MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md +MD053: + # Ignored definitions + ignored_definitions: + - "//" + +# MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md +MD054: + # Allow autolinks + autolink: true + # Allow inline links and images + inline: true + # Allow full reference links and images + full: true + # Allow collapsed reference links and images + collapsed: true + # Allow shortcut reference links and images + shortcut: true + # Allow URLs as inline links + url_inline: true + +# MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md +MD055: + # Table pipe style + style: "consistent" + +# MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md +MD056: true + +# MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md +MD058: true diff --git a/node_modules/markdownlint/schema/ValidatingConfiguration.md b/node_modules/markdownlint/schema/ValidatingConfiguration.md new file mode 100644 index 0000000000..5d842c4981 --- /dev/null +++ b/node_modules/markdownlint/schema/ValidatingConfiguration.md @@ -0,0 +1,26 @@ +# Validating Configuration + +A [JSON Schema][json-schema] is provided to enable validating configuration +objects: [`markdownlint-config-schema.json`][markdownlint-config-schema]. + +Some editors automatically use a JSON Schema with files that reference it. For +example, a `.markdownlint.json` file with: + +```json +"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json" +``` + +A JSON Schema validator can be used to check configuration files like so: + +```bash +npx ajv-cli validate -s ./markdownlint/schema/markdownlint-config-schema.json -d "**/.markdownlint.{json,yaml}" --strict=false +``` + +By default, any rule name is valid because of custom rules. To allow only +built-in rules, use the +[`markdownlint-config-schema-strict.json`][markdownlint-config-schema-strict] +JSON Schema instead. + +[json-schema]: https://json-schema.org +[markdownlint-config-schema]: markdownlint-config-schema.json +[markdownlint-config-schema-strict]: markdownlint-config-schema-strict.json diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json b/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json new file mode 100644 index 0000000000..fe1692651e --- /dev/null +++ b/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json @@ -0,0 +1,1841 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema-strict.json", + "title": "markdownlint configuration schema", + "type": "object", + "properties": { + "$schema": { + "description": "JSON Schema URI (expected by some editors)", + "type": "string", + "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" + }, + "default": { + "description": "Default state for all rules", + "type": "boolean", + "default": true + }, + "extends": { + "description": "Path to configuration file to extend", + "type": [ + "string", + "null" + ], + "default": null + }, + "MD001": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "heading-increment": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "MD003": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "heading-style": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD004": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "ul-style": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD005": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "list-indent": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "MD007": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "ul-indent": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "MD009": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-trailing-spaces": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD010": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-hard-tabs": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD011": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "no-reversed-links": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "MD012": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-multiple-blanks": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD013": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "line-length": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD014": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "commands-show-output": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "MD018": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "no-missing-space-atx": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "MD019": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-atx": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "MD020": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "no-missing-space-closed-atx": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "MD021": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-closed-atx": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "MD022": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "blanks-around-headings": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD023": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "heading-start-left": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "MD024": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-duplicate-heading": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD025": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-title": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-h1": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD026": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "no-trailing-punctuation": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "MD027": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-blockquote": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "MD028": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "no-blanks-blockquote": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "MD029": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "ol-prefix": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "MD030": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "list-marker-space": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD031": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "blanks-around-fences": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD032": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "blanks-around-lists": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "MD033": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "no-inline-html": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "MD034": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "no-bare-urls": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "MD035": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "hr-style": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD036": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "no-emphasis-as-heading": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "MD037": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "no-space-in-emphasis": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "MD038": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "no-space-in-code": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "MD039": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "no-space-in-links": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "MD040": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "fenced-code-language": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD041": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-heading": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-h1": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD042": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "no-empty-links": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "MD043": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "required-headings": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD044": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "proper-names": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD045": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "no-alt-text": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "MD046": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-block-style": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD047": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "single-trailing-newline": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "MD048": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-fence-style": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD049": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "emphasis-style": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD050": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "strong-style": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD051": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "link-fragments": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD052": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "reference-links-images": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD053": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "link-image-reference-definitions": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "MD054": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "link-image-style": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD055": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "table-pipe-style": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD056": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "table-column-count": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "MD058": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "blanks-around-tables": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "headings": { + "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", + "type": "boolean", + "default": true + }, + "bullet": { + "description": "bullet : MD004, MD005, MD007, MD032", + "type": "boolean", + "default": true + }, + "ul": { + "description": "ul : MD004, MD005, MD007, MD030, MD032", + "type": "boolean", + "default": true + }, + "indentation": { + "description": "indentation : MD005, MD007, MD027", + "type": "boolean", + "default": true + }, + "whitespace": { + "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", + "type": "boolean", + "default": true + }, + "hard_tab": { + "description": "hard_tab : MD010", + "type": "boolean", + "default": true + }, + "links": { + "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "blank_lines": { + "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", + "type": "boolean", + "default": true + }, + "line_length": { + "description": "line_length : MD013", + "type": "boolean", + "default": true + }, + "code": { + "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", + "type": "boolean", + "default": true + }, + "atx": { + "description": "atx : MD018, MD019", + "type": "boolean", + "default": true + }, + "spaces": { + "description": "spaces : MD018, MD019, MD020, MD021, MD023", + "type": "boolean", + "default": true + }, + "atx_closed": { + "description": "atx_closed : MD020, MD021", + "type": "boolean", + "default": true + }, + "blockquote": { + "description": "blockquote : MD027, MD028", + "type": "boolean", + "default": true + }, + "ol": { + "description": "ol : MD029, MD030, MD032", + "type": "boolean", + "default": true + }, + "html": { + "description": "html : MD033", + "type": "boolean", + "default": true + }, + "url": { + "description": "url : MD034", + "type": "boolean", + "default": true + }, + "hr": { + "description": "hr : MD035", + "type": "boolean", + "default": true + }, + "emphasis": { + "description": "emphasis : MD036, MD037, MD049, MD050", + "type": "boolean", + "default": true + }, + "language": { + "description": "language : MD040", + "type": "boolean", + "default": true + }, + "spelling": { + "description": "spelling : MD044", + "type": "boolean", + "default": true + }, + "accessibility": { + "description": "accessibility : MD045", + "type": "boolean", + "default": true + }, + "images": { + "description": "images : MD045, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "table": { + "description": "table : MD055, MD056, MD058", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema.json b/node_modules/markdownlint/schema/markdownlint-config-schema.json new file mode 100644 index 0000000000..58005e01c7 --- /dev/null +++ b/node_modules/markdownlint/schema/markdownlint-config-schema.json @@ -0,0 +1,1846 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json", + "title": "markdownlint configuration schema", + "type": "object", + "properties": { + "$schema": { + "description": "JSON Schema URI (expected by some editors)", + "type": "string", + "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" + }, + "default": { + "description": "Default state for all rules", + "type": "boolean", + "default": true + }, + "extends": { + "description": "Path to configuration file to extend", + "type": [ + "string", + "null" + ], + "default": null + }, + "MD001": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "heading-increment": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "MD003": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "heading-style": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD004": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "ul-style": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD005": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "list-indent": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "MD007": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "ul-indent": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "MD009": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-trailing-spaces": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD010": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-hard-tabs": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD011": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "no-reversed-links": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "MD012": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-multiple-blanks": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD013": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "line-length": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD014": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "commands-show-output": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "MD018": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "no-missing-space-atx": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "MD019": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-atx": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "MD020": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "no-missing-space-closed-atx": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "MD021": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-closed-atx": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "MD022": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "blanks-around-headings": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD023": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "heading-start-left": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "MD024": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-duplicate-heading": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD025": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-title": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-h1": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD026": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "no-trailing-punctuation": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "MD027": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-blockquote": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "MD028": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "no-blanks-blockquote": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "MD029": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "ol-prefix": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "MD030": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "list-marker-space": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD031": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "blanks-around-fences": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD032": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "blanks-around-lists": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "MD033": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "no-inline-html": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "MD034": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "no-bare-urls": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "MD035": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "hr-style": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD036": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "no-emphasis-as-heading": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "MD037": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "no-space-in-emphasis": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "MD038": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "no-space-in-code": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "MD039": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "no-space-in-links": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "MD040": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "fenced-code-language": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD041": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-heading": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-h1": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD042": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "no-empty-links": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "MD043": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "required-headings": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD044": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "proper-names": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD045": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "no-alt-text": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "MD046": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-block-style": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD047": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "single-trailing-newline": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "MD048": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-fence-style": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD049": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "emphasis-style": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD050": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "strong-style": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD051": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "link-fragments": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD052": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "reference-links-images": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD053": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "link-image-reference-definitions": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "MD054": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "link-image-style": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD055": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "table-pipe-style": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD056": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "table-column-count": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "MD058": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "blanks-around-tables": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "headings": { + "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", + "type": "boolean", + "default": true + }, + "bullet": { + "description": "bullet : MD004, MD005, MD007, MD032", + "type": "boolean", + "default": true + }, + "ul": { + "description": "ul : MD004, MD005, MD007, MD030, MD032", + "type": "boolean", + "default": true + }, + "indentation": { + "description": "indentation : MD005, MD007, MD027", + "type": "boolean", + "default": true + }, + "whitespace": { + "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", + "type": "boolean", + "default": true + }, + "hard_tab": { + "description": "hard_tab : MD010", + "type": "boolean", + "default": true + }, + "links": { + "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "blank_lines": { + "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", + "type": "boolean", + "default": true + }, + "line_length": { + "description": "line_length : MD013", + "type": "boolean", + "default": true + }, + "code": { + "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", + "type": "boolean", + "default": true + }, + "atx": { + "description": "atx : MD018, MD019", + "type": "boolean", + "default": true + }, + "spaces": { + "description": "spaces : MD018, MD019, MD020, MD021, MD023", + "type": "boolean", + "default": true + }, + "atx_closed": { + "description": "atx_closed : MD020, MD021", + "type": "boolean", + "default": true + }, + "blockquote": { + "description": "blockquote : MD027, MD028", + "type": "boolean", + "default": true + }, + "ol": { + "description": "ol : MD029, MD030, MD032", + "type": "boolean", + "default": true + }, + "html": { + "description": "html : MD033", + "type": "boolean", + "default": true + }, + "url": { + "description": "url : MD034", + "type": "boolean", + "default": true + }, + "hr": { + "description": "hr : MD035", + "type": "boolean", + "default": true + }, + "emphasis": { + "description": "emphasis : MD036, MD037, MD049, MD050", + "type": "boolean", + "default": true + }, + "language": { + "description": "language : MD040", + "type": "boolean", + "default": true + }, + "spelling": { + "description": "spelling : MD044", + "type": "boolean", + "default": true + }, + "accessibility": { + "description": "accessibility : MD045", + "type": "boolean", + "default": true + }, + "images": { + "description": "images : MD045, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "table": { + "description": "table : MD055, MD056, MD058", + "type": "boolean", + "default": true + } + }, + "additionalProperties": { + "type": [ + "boolean", + "object" + ] + } +} \ No newline at end of file diff --git a/node_modules/markdownlint/style/all.json b/node_modules/markdownlint/style/all.json new file mode 100644 index 0000000000..edfdd6d736 --- /dev/null +++ b/node_modules/markdownlint/style/all.json @@ -0,0 +1,5 @@ +{ + "comment": "All rules", + + "default": true +} diff --git a/node_modules/markdownlint/style/cirosantilli.json b/node_modules/markdownlint/style/cirosantilli.json new file mode 100644 index 0000000000..609a3bfe16 --- /dev/null +++ b/node_modules/markdownlint/style/cirosantilli.json @@ -0,0 +1,22 @@ +{ + "comment": "Rules for the style guide at https://www.cirosantilli.com/markdown-style-guide/", + + "default": true, + "MD003": { + "style": "atx" + }, + "MD004": { + "style": "dash" + }, + "MD007": { + "indent": 4 + }, + "MD030": { + "ul_multi": 3, + "ol_multi": 2 + }, + "MD033": false, + "MD035": { + "style": "---" + } +} diff --git a/node_modules/markdownlint/style/prettier.json b/node_modules/markdownlint/style/prettier.json new file mode 100644 index 0000000000..29a24e6279 --- /dev/null +++ b/node_modules/markdownlint/style/prettier.json @@ -0,0 +1,27 @@ +{ + "comment": "Disables rules that may conflict with Prettier", + + "blanks-around-fences": false, + "blanks-around-headings": false, + "blanks-around-lists": false, + "code-fence-style": false, + "emphasis-style": false, + "heading-start-left": false, + "heading-style": false, + "hr-style": false, + "line-length": false, + "list-indent": false, + "list-marker-space": false, + "no-blanks-blockquote": false, + "no-hard-tabs": false, + "no-missing-space-atx": false, + "no-missing-space-closed-atx": false, + "no-multiple-blanks": false, + "no-multiple-space-atx": false, + "no-multiple-space-blockquote": false, + "no-multiple-space-closed-atx": false, + "no-trailing-spaces": false, + "ol-prefix": false, + "strong-style": false, + "ul-indent": false +} diff --git a/node_modules/markdownlint/style/relaxed.json b/node_modules/markdownlint/style/relaxed.json new file mode 100644 index 0000000000..1070b5982a --- /dev/null +++ b/node_modules/markdownlint/style/relaxed.json @@ -0,0 +1,12 @@ +{ + "comment": "Relaxed rules", + + "default": true, + "whitespace": false, + "line_length": false, + "ul-indent": false, + "no-inline-html": false, + "no-bare-urls": false, + "fenced-code-language": false, + "first-line-h1": false +} diff --git a/node_modules/mdurl/LICENSE b/node_modules/mdurl/LICENSE new file mode 100644 index 0000000000..3b2c7bfb15 --- /dev/null +++ b/node_modules/mdurl/LICENSE @@ -0,0 +1,45 @@ +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +.parse() is based on Joyent's node.js `url` code: + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/mdurl/README.md b/node_modules/mdurl/README.md new file mode 100644 index 0000000000..c7f9e959a0 --- /dev/null +++ b/node_modules/mdurl/README.md @@ -0,0 +1,102 @@ +# mdurl + +[![CI](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml) +[![NPM version](https://img.shields.io/npm/v/mdurl.svg?style=flat)](https://www.npmjs.org/package/mdurl) + +> URL utilities for [markdown-it](https://github.com/markdown-it/markdown-it) parser. + + +## API + +### .encode(str [, exclude, keepEncoded]) -> String + +Percent-encode a string, avoiding double encoding. Don't touch `/a-zA-Z0-9/` + +excluded chars + `/%[a-fA-F0-9]{2}/` (if not disabled). Broken surrorates are +replaced with `U+FFFD`. + +Params: + +- __str__ - input string. +- __exclude__ - optional, `;/?:@&=+$,-_.!~*'()#`. Additional chars to keep intact + (except `/a-zA-Z0-9/`). +- __keepEncoded__ - optional, `true`. By default it skips already encoded sequences + (`/%[a-fA-F0-9]{2}/`). If set to `false`, `%` will be encoded. + + +### encode.defaultChars, encode.componentChars + +You can use these constants as second argument to `encode` function. + + - `encode.defaultChars` is the same exclude set as in the standard `encodeURI()` function + - `encode.componentChars` is the same exclude set as in the `encodeURIComponent()` function + +For example, `encode('something', encode.componentChars, true)` is roughly the equivalent of +the `encodeURIComponent()` function (except `encode()` doesn't throw). + + +### .decode(str [, exclude]) -> String + +Decode percent-encoded string. Invalid percent-encoded sequences (e.g. `%2G`) +are left as is. Invalid UTF-8 characters are replaced with `U+FFFD`. + + +Params: + +- __str__ - input string. +- __exclude__ - set of characters to leave encoded, optional, `;/?:@&=+$,#`. + + +### decode.defaultChars, decode.componentChars + +You can use these constants as second argument to `decode` function. + + - `decode.defaultChars` is the same exclude set as in the standard `decodeURI()` function + - `decode.componentChars` is the same exclude set as in the `decodeURIComponent()` function + +For example, `decode('something', decode.defaultChars)` has the same behavior as +`decodeURI('something')` on a correctly encoded input. + + +### .parse(url, slashesDenoteHost) -> urlObs + +Parse url string. Similar to node's [url.parse](http://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost), but without any +normalizations and query string parse. + + - __url__ - input url (string) + - __slashesDenoteHost__ - if url starts with `//`, expect a hostname after it. Optional, `false`. + +Result (hash): + +- protocol +- slashes +- auth +- port +- hostname +- hash +- search +- pathname + +Difference with node's `url`: + +1. No leading slash in paths, e.g. in `url.parse('http://foo?bar')` pathname is + ``, not `/` +2. Backslashes are not replaced with slashes, so `http:\\example.org\` is + treated like a relative path +3. Trailing colon is treated like a part of the path, i.e. in + `http://example.org:foo` pathname is `:foo` +4. Nothing is URL-encoded in the resulting object, (in joyent/node some chars + in auth and paths are encoded) +5. `url.parse()` does not have `parseQueryString` argument +6. Removed extraneous result properties: `host`, `path`, `query`, etc., + which can be constructed using other parts of the url. + + +### .format(urlObject) + +Format an object previously obtained with `.parse()` function. Similar to node's +[url.format](http://nodejs.org/api/url.html#url_url_format_urlobj). + + +## License + +[MIT](https://github.com/markdown-it/mdurl/blob/master/LICENSE) diff --git a/node_modules/mdurl/index.mjs b/node_modules/mdurl/index.mjs new file mode 100644 index 0000000000..fd78c377f5 --- /dev/null +++ b/node_modules/mdurl/index.mjs @@ -0,0 +1,11 @@ +import decode from './lib/decode.mjs' +import encode from './lib/encode.mjs' +import format from './lib/format.mjs' +import parse from './lib/parse.mjs' + +export { + decode, + encode, + format, + parse +} diff --git a/node_modules/mdurl/package.json b/node_modules/mdurl/package.json new file mode 100644 index 0000000000..6e89bebc93 --- /dev/null +++ b/node_modules/mdurl/package.json @@ -0,0 +1,37 @@ +{ + "name": "mdurl", + "version": "2.0.0", + "description": "URL utilities for markdown-it", + "repository": "markdown-it/mdurl", + "license": "MIT", + "main": "build/index.cjs.js", + "module": "index.mjs", + "exports": { + ".": { + "require": "./build/index.cjs.js", + "import": "./index.mjs" + }, + "./*": { + "require": "./*", + "import": "./*" + } + }, + "scripts": { + "lint": "eslint .", + "build": "rollup -c", + "test": "npm run lint && npm run build && c8 --exclude build --exclude test -r text -r html -r lcov mocha", + "prepublishOnly": "npm run lint && npm run build" + }, + "files": [ + "index.mjs", + "lib/", + "build/" + ], + "devDependencies": { + "c8": "^8.0.1", + "eslint": "^8.54.0", + "eslint-config-standard": "^17.1.0", + "mocha": "^10.2.0", + "rollup": "^4.6.1" + } +} diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts b/node_modules/micromark-core-commonmark/dev/index.d.ts new file mode 100644 index 0000000000..bd832f665c --- /dev/null +++ b/node_modules/micromark-core-commonmark/dev/index.d.ts @@ -0,0 +1,23 @@ +export { attention } from "./lib/attention.js"; +export { autolink } from "./lib/autolink.js"; +export { blankLine } from "./lib/blank-line.js"; +export { blockQuote } from "./lib/block-quote.js"; +export { characterEscape } from "./lib/character-escape.js"; +export { characterReference } from "./lib/character-reference.js"; +export { codeFenced } from "./lib/code-fenced.js"; +export { codeIndented } from "./lib/code-indented.js"; +export { codeText } from "./lib/code-text.js"; +export { content } from "./lib/content.js"; +export { definition } from "./lib/definition.js"; +export { hardBreakEscape } from "./lib/hard-break-escape.js"; +export { headingAtx } from "./lib/heading-atx.js"; +export { htmlFlow } from "./lib/html-flow.js"; +export { htmlText } from "./lib/html-text.js"; +export { labelEnd } from "./lib/label-end.js"; +export { labelStartImage } from "./lib/label-start-image.js"; +export { labelStartLink } from "./lib/label-start-link.js"; +export { lineEnding } from "./lib/line-ending.js"; +export { list } from "./lib/list.js"; +export { setextUnderline } from "./lib/setext-underline.js"; +export { thematicBreak } from "./lib/thematic-break.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts.map b/node_modules/micromark-core-commonmark/dev/index.d.ts.map new file mode 100644 index 0000000000..ca7a93a9a2 --- /dev/null +++ b/node_modules/micromark-core-commonmark/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.js b/node_modules/micromark-core-commonmark/dev/index.js new file mode 100644 index 0000000000..f9143e0937 --- /dev/null +++ b/node_modules/micromark-core-commonmark/dev/index.js @@ -0,0 +1,22 @@ +export {attention} from './lib/attention.js' +export {autolink} from './lib/autolink.js' +export {blankLine} from './lib/blank-line.js' +export {blockQuote} from './lib/block-quote.js' +export {characterEscape} from './lib/character-escape.js' +export {characterReference} from './lib/character-reference.js' +export {codeFenced} from './lib/code-fenced.js' +export {codeIndented} from './lib/code-indented.js' +export {codeText} from './lib/code-text.js' +export {content} from './lib/content.js' +export {definition} from './lib/definition.js' +export {hardBreakEscape} from './lib/hard-break-escape.js' +export {headingAtx} from './lib/heading-atx.js' +export {htmlFlow} from './lib/html-flow.js' +export {htmlText} from './lib/html-text.js' +export {labelEnd} from './lib/label-end.js' +export {labelStartImage} from './lib/label-start-image.js' +export {labelStartLink} from './lib/label-start-link.js' +export {lineEnding} from './lib/line-ending.js' +export {list} from './lib/list.js' +export {setextUnderline} from './lib/setext-underline.js' +export {thematicBreak} from './lib/thematic-break.js' diff --git a/node_modules/micromark-core-commonmark/index.d.ts b/node_modules/micromark-core-commonmark/index.d.ts new file mode 100644 index 0000000000..bd832f665c --- /dev/null +++ b/node_modules/micromark-core-commonmark/index.d.ts @@ -0,0 +1,23 @@ +export { attention } from "./lib/attention.js"; +export { autolink } from "./lib/autolink.js"; +export { blankLine } from "./lib/blank-line.js"; +export { blockQuote } from "./lib/block-quote.js"; +export { characterEscape } from "./lib/character-escape.js"; +export { characterReference } from "./lib/character-reference.js"; +export { codeFenced } from "./lib/code-fenced.js"; +export { codeIndented } from "./lib/code-indented.js"; +export { codeText } from "./lib/code-text.js"; +export { content } from "./lib/content.js"; +export { definition } from "./lib/definition.js"; +export { hardBreakEscape } from "./lib/hard-break-escape.js"; +export { headingAtx } from "./lib/heading-atx.js"; +export { htmlFlow } from "./lib/html-flow.js"; +export { htmlText } from "./lib/html-text.js"; +export { labelEnd } from "./lib/label-end.js"; +export { labelStartImage } from "./lib/label-start-image.js"; +export { labelStartLink } from "./lib/label-start-link.js"; +export { lineEnding } from "./lib/line-ending.js"; +export { list } from "./lib/list.js"; +export { setextUnderline } from "./lib/setext-underline.js"; +export { thematicBreak } from "./lib/thematic-break.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.d.ts.map b/node_modules/micromark-core-commonmark/index.d.ts.map new file mode 100644 index 0000000000..ca7a93a9a2 --- /dev/null +++ b/node_modules/micromark-core-commonmark/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.js b/node_modules/micromark-core-commonmark/index.js new file mode 100644 index 0000000000..969b1cdf12 --- /dev/null +++ b/node_modules/micromark-core-commonmark/index.js @@ -0,0 +1,22 @@ +export { attention } from './lib/attention.js'; +export { autolink } from './lib/autolink.js'; +export { blankLine } from './lib/blank-line.js'; +export { blockQuote } from './lib/block-quote.js'; +export { characterEscape } from './lib/character-escape.js'; +export { characterReference } from './lib/character-reference.js'; +export { codeFenced } from './lib/code-fenced.js'; +export { codeIndented } from './lib/code-indented.js'; +export { codeText } from './lib/code-text.js'; +export { content } from './lib/content.js'; +export { definition } from './lib/definition.js'; +export { hardBreakEscape } from './lib/hard-break-escape.js'; +export { headingAtx } from './lib/heading-atx.js'; +export { htmlFlow } from './lib/html-flow.js'; +export { htmlText } from './lib/html-text.js'; +export { labelEnd } from './lib/label-end.js'; +export { labelStartImage } from './lib/label-start-image.js'; +export { labelStartLink } from './lib/label-start-link.js'; +export { lineEnding } from './lib/line-ending.js'; +export { list } from './lib/list.js'; +export { setextUnderline } from './lib/setext-underline.js'; +export { thematicBreak } from './lib/thematic-break.js'; \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/license b/node_modules/micromark-core-commonmark/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-core-commonmark/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-core-commonmark/package.json b/node_modules/micromark-core-commonmark/package.json new file mode 100644 index 0000000000..6e158168cc --- /dev/null +++ b/node_modules/micromark-core-commonmark/package.json @@ -0,0 +1,74 @@ +{ + "name": "micromark-core-commonmark", + "version": "2.0.2", + "description": "The CommonMark markdown constructs", + "license": "MIT", + "keywords": [ + "micromark", + "core", + "commonmark" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-core-commonmark", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "max-depth": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-core-commonmark/readme.md b/node_modules/micromark-core-commonmark/readme.md new file mode 100644 index 0000000000..5a47520de9 --- /dev/null +++ b/node_modules/micromark-core-commonmark/readme.md @@ -0,0 +1,171 @@ +# micromark-core-commonmark + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] constructs that make up the core of CommonMark. +Some of these can be [turned off][disable], but they are often essential to +markdown and weird things might happen. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes the default constructs. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-core-commonmark +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import * as core from 'https://esm.sh/micromark-core-commonmark@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {autolink} from 'micromark-core-commonmark' + +console.log(autolink) // Do things with `autolink`. +``` + +## API + +This module exports the following identifiers: `attention`, `autolink`, +`blankLine`, `blockQuote`, `characterEscape`, `characterReference`, +`codeFenced`, `codeIndented`, `codeText`, `content`, `definition`, +`hardBreakEscape`, `headingAtx`, `htmlFlow`, `htmlText`, `labelEnd`, +`labelStartImage`, `labelStartLink`, `lineEnding`, `list`, `setextUnderline`, +`thematicBreak`. +There is no default export. + +Each identifier refers to a [construct][]. + +See the code for more on the exported constructs. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-core-commonmark@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-core-commonmark.svg + +[downloads]: https://www.npmjs.com/package/micromark-core-commonmark + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-core-commonmark + +[bundle-size]: https://bundlejs.com/?q=micromark-core-commonmark + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[disable]: https://github.com/micromark/micromark#case-turn-off-constructs + +[construct]: https://github.com/micromark/micromark#constructs + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark diff --git a/node_modules/micromark-extension-directive/dev/index.d.ts b/node_modules/micromark-extension-directive/dev/index.d.ts new file mode 100644 index 0000000000..b5bac9fe47 --- /dev/null +++ b/node_modules/micromark-extension-directive/dev/index.d.ts @@ -0,0 +1,156 @@ +import type {CompileContext} from 'micromark-util-types' + +export {directive} from './lib/syntax.js' +export {directiveHtml} from './lib/html.js' + +/** + * Internal tuple representing an attribute. + */ +type AttributeTuple = [key: string, value: string] + +/** + * Directive attribute. + */ +interface Attributes { + /** + * Key to value. + */ + [key: string]: string +} + +/** + * Structure representing a directive. + */ +export interface Directive { + /** + * Private :) + */ + _fenceCount?: number | undefined + /** + * Object w/ HTML attributes. + */ + attributes?: Attributes | undefined + /** + * Compiled HTML content inside container directive. + */ + content?: string | undefined + /** + * Compiled HTML content that was in `[brackets]`. + */ + label?: string | undefined + /** + * Name of directive. + */ + name: string + /** + * Kind. + */ + type: 'containerDirective' | 'leafDirective' | 'textDirective' +} + +/** + * Handle a directive. + * + * @param this + * Current context. + * @param directive + * Directive. + * @returns + * Signal whether the directive was handled. + * + * Yield `false` to let the fallback (a special handle for `'*'`) handle it. + */ +export type Handle = ( + this: CompileContext, + directive: Directive +) => boolean | undefined + +/** + * Configuration. + * + * > 👉 **Note**: the special field `'*'` can be used to specify a fallback + * > handle to handle all otherwise unhandled directives. + */ +export interface HtmlOptions { + [name: string]: Handle +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + directiveAttributes?: Array + directiveStack?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + directiveContainer: 'directiveContainer' + directiveContainerAttributes: 'directiveContainerAttributes' + directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' + directiveContainerAttribute: 'directiveContainerAttribute' + directiveContainerAttributeId: 'directiveContainerAttributeId' + directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' + directiveContainerAttributeClass: 'directiveContainerAttributeClass' + directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' + directiveContainerAttributeName: 'directiveContainerAttributeName' + directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' + directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' + directiveContainerAttributeValue: 'directiveContainerAttributeValue' + directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' + directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' + directiveContainerContent: 'directiveContainerContent' + directiveContainerFence: 'directiveContainerFence' + directiveContainerLabel: 'directiveContainerLabel' + directiveContainerLabelMarker: 'directiveContainerLabelMarker' + directiveContainerLabelString: 'directiveContainerLabelString' + directiveContainerName: 'directiveContainerName' + directiveContainerSequence: 'directiveContainerSequence' + + directiveLeaf: 'directiveLeaf' + directiveLeafAttributes: 'directiveLeafAttributes' + directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' + directiveLeafAttribute: 'directiveLeafAttribute' + directiveLeafAttributeId: 'directiveLeafAttributeId' + directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' + directiveLeafAttributeClass: 'directiveLeafAttributeClass' + directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' + directiveLeafAttributeName: 'directiveLeafAttributeName' + directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' + directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' + directiveLeafAttributeValue: 'directiveLeafAttributeValue' + directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' + directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' + directiveLeafLabel: 'directiveLeafLabel' + directiveLeafLabelMarker: 'directiveLeafLabelMarker' + directiveLeafLabelString: 'directiveLeafLabelString' + directiveLeafName: 'directiveLeafName' + directiveLeafSequence: 'directiveLeafSequence' + + directiveText: 'directiveText' + directiveTextAttributes: 'directiveTextAttributes' + directiveTextAttributesMarker: 'directiveTextAttributesMarker' + directiveTextAttribute: 'directiveTextAttribute' + directiveTextAttributeId: 'directiveTextAttributeId' + directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' + directiveTextAttributeClass: 'directiveTextAttributeClass' + directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' + directiveTextAttributeName: 'directiveTextAttributeName' + directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' + directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' + directiveTextAttributeValue: 'directiveTextAttributeValue' + directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' + directiveTextAttributeValueData: 'directiveTextAttributeValueData' + directiveTextLabel: 'directiveTextLabel' + directiveTextLabelMarker: 'directiveTextLabelMarker' + directiveTextLabelString: 'directiveTextLabelString' + directiveTextMarker: 'directiveTextMarker' + directiveTextName: 'directiveTextName' + } +} diff --git a/node_modules/micromark-extension-directive/dev/index.js b/node_modules/micromark-extension-directive/dev/index.js new file mode 100644 index 0000000000..f290efe57b --- /dev/null +++ b/node_modules/micromark-extension-directive/dev/index.js @@ -0,0 +1,3 @@ +// Note: more types exported from `index.d.ts`. +export {directive} from './lib/syntax.js' +export {directiveHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-directive/index.d.ts b/node_modules/micromark-extension-directive/index.d.ts new file mode 100644 index 0000000000..b5bac9fe47 --- /dev/null +++ b/node_modules/micromark-extension-directive/index.d.ts @@ -0,0 +1,156 @@ +import type {CompileContext} from 'micromark-util-types' + +export {directive} from './lib/syntax.js' +export {directiveHtml} from './lib/html.js' + +/** + * Internal tuple representing an attribute. + */ +type AttributeTuple = [key: string, value: string] + +/** + * Directive attribute. + */ +interface Attributes { + /** + * Key to value. + */ + [key: string]: string +} + +/** + * Structure representing a directive. + */ +export interface Directive { + /** + * Private :) + */ + _fenceCount?: number | undefined + /** + * Object w/ HTML attributes. + */ + attributes?: Attributes | undefined + /** + * Compiled HTML content inside container directive. + */ + content?: string | undefined + /** + * Compiled HTML content that was in `[brackets]`. + */ + label?: string | undefined + /** + * Name of directive. + */ + name: string + /** + * Kind. + */ + type: 'containerDirective' | 'leafDirective' | 'textDirective' +} + +/** + * Handle a directive. + * + * @param this + * Current context. + * @param directive + * Directive. + * @returns + * Signal whether the directive was handled. + * + * Yield `false` to let the fallback (a special handle for `'*'`) handle it. + */ +export type Handle = ( + this: CompileContext, + directive: Directive +) => boolean | undefined + +/** + * Configuration. + * + * > 👉 **Note**: the special field `'*'` can be used to specify a fallback + * > handle to handle all otherwise unhandled directives. + */ +export interface HtmlOptions { + [name: string]: Handle +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + directiveAttributes?: Array + directiveStack?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + directiveContainer: 'directiveContainer' + directiveContainerAttributes: 'directiveContainerAttributes' + directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' + directiveContainerAttribute: 'directiveContainerAttribute' + directiveContainerAttributeId: 'directiveContainerAttributeId' + directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' + directiveContainerAttributeClass: 'directiveContainerAttributeClass' + directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' + directiveContainerAttributeName: 'directiveContainerAttributeName' + directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' + directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' + directiveContainerAttributeValue: 'directiveContainerAttributeValue' + directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' + directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' + directiveContainerContent: 'directiveContainerContent' + directiveContainerFence: 'directiveContainerFence' + directiveContainerLabel: 'directiveContainerLabel' + directiveContainerLabelMarker: 'directiveContainerLabelMarker' + directiveContainerLabelString: 'directiveContainerLabelString' + directiveContainerName: 'directiveContainerName' + directiveContainerSequence: 'directiveContainerSequence' + + directiveLeaf: 'directiveLeaf' + directiveLeafAttributes: 'directiveLeafAttributes' + directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' + directiveLeafAttribute: 'directiveLeafAttribute' + directiveLeafAttributeId: 'directiveLeafAttributeId' + directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' + directiveLeafAttributeClass: 'directiveLeafAttributeClass' + directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' + directiveLeafAttributeName: 'directiveLeafAttributeName' + directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' + directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' + directiveLeafAttributeValue: 'directiveLeafAttributeValue' + directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' + directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' + directiveLeafLabel: 'directiveLeafLabel' + directiveLeafLabelMarker: 'directiveLeafLabelMarker' + directiveLeafLabelString: 'directiveLeafLabelString' + directiveLeafName: 'directiveLeafName' + directiveLeafSequence: 'directiveLeafSequence' + + directiveText: 'directiveText' + directiveTextAttributes: 'directiveTextAttributes' + directiveTextAttributesMarker: 'directiveTextAttributesMarker' + directiveTextAttribute: 'directiveTextAttribute' + directiveTextAttributeId: 'directiveTextAttributeId' + directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' + directiveTextAttributeClass: 'directiveTextAttributeClass' + directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' + directiveTextAttributeName: 'directiveTextAttributeName' + directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' + directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' + directiveTextAttributeValue: 'directiveTextAttributeValue' + directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' + directiveTextAttributeValueData: 'directiveTextAttributeValueData' + directiveTextLabel: 'directiveTextLabel' + directiveTextLabelMarker: 'directiveTextLabelMarker' + directiveTextLabelString: 'directiveTextLabelString' + directiveTextMarker: 'directiveTextMarker' + directiveTextName: 'directiveTextName' + } +} diff --git a/node_modules/micromark-extension-directive/index.js b/node_modules/micromark-extension-directive/index.js new file mode 100644 index 0000000000..47666d68ef --- /dev/null +++ b/node_modules/micromark-extension-directive/index.js @@ -0,0 +1,3 @@ +// Note: more types exported from `index.d.ts`. +export { directive } from './lib/syntax.js'; +export { directiveHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-directive/license b/node_modules/micromark-extension-directive/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-directive/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-directive/package.json b/node_modules/micromark-extension-directive/package.json new file mode 100644 index 0000000000..3e4b8ffdaf --- /dev/null +++ b/node_modules/micromark-extension-directive/package.json @@ -0,0 +1,127 @@ +{ + "name": "micromark-extension-directive", + "version": "3.0.2", + "description": "micromark extension to support generic directives (`:cite[smith04]`)", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "generic", + "directive", + "container", + "extension", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-directive", + "bugs": "https://github.com/micromark/micromark-extension-directive/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "c8": "^10.0.0", + "html-void-elements": "^3.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.59.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "overrides": [ + { + "files": [ + "**/*.d.ts" + ], + "rules": { + "@typescript-eslint/array-type": [ + "error", + { + "default": "generic" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": true + } + ], + "@typescript-eslint/consistent-indexed-object-style": [ + "error", + "index-signature" + ], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface" + ] + } + } + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "max-params": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off" + } + } +} diff --git a/node_modules/micromark-extension-directive/readme.md b/node_modules/micromark-extension-directive/readme.md new file mode 100644 index 0000000000..f333822e26 --- /dev/null +++ b/node_modules/micromark-extension-directive/readme.md @@ -0,0 +1,424 @@ +# micromark-extension-directive + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support [directives][prop] (`:cite[smith04]` and +such). + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`directive()`](#directive) + * [`directiveHtml(options?)`](#directivehtmloptions) + * [`Directive`](#directive-1) + * [`Handle`](#handle) + * [`HtmlOptions`](#htmloptions) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains two extensions that add support for directive syntax in +markdown to [`micromark`][micromark]. + +## When to use this + +This project is useful when you want to solve the need for an infinite number +of potential extensions to markdown in a single markdown-esque way. + +You can use these extensions when you are working with [`micromark`][micromark] +already. + +When you need a syntax tree, you can combine this package with +[`mdast-util-directive`][mdast-util-directive]. + +All these packages are used [`remark-directive`][remark-directive], which +focusses on making it easier to transform content by abstracting these +internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +[npm][]: + +```sh +npm install micromark-extension-directive +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {directive, directiveHtml} from 'https://esm.sh/micromark-extension-directive@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say our document `example.md` contains: + +```markdown +A lovely language know as :abbr[HTML]{title="HyperText Markup Language"}. +``` + +…and our module `example.js` looks as follows: + +```js +/** + * @import {Handle} from 'micromark-extension-directive' + * @import {CompileContext} from 'micromark-util-types' + */ + +import fs from 'node:fs/promises' +import {micromark} from 'micromark' +import {directive, directiveHtml} from 'micromark-extension-directive' + +const output = micromark(await fs.readFile('example.md'), { + extensions: [directive()], + htmlExtensions: [directiveHtml({abbr})] +}) + +console.log(output) + +/** + * @this {CompileContext} + * @type {Handle} + * @returns {undefined} + */ +function abbr(d) { + if (d.type !== 'textDirective') return false + + this.tag('') + this.raw(d.label || '') + this.tag('') +} +``` + +…now running `node example.js` yields: + +```html +

A lovely language know as HTML.

+``` + +## API + +This package exports the identifiers [`directive`][api-directive] and +[`directiveHtml`][api-directive-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `directive()` + +Create an extension for `micromark` to enable directive syntax. + +###### Returns + +Extension for `micromark` that can be passed in `extensions`, to enable +directive syntax ([`Extension`][micromark-extension]). + +### `directiveHtml(options?)` + +Create an extension for `micromark` to support directives when serializing to +HTML. + +> 👉 **Note**: this uses KaTeX to render math. + +###### Parameters + +* `options` ([`HtmlOptions`][api-html-options], default: `{}`) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions`, to +support directives when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +### `Directive` + +Structure representing a directive (TypeScript type). + +###### Fields + +* `type` (`'containerDirective'`, `'leafDirective'`, or `'textDirective'`) + — kind +* `name` (`string`) + — name of directive +* `label` (`string` or `undefined`) + — compiled HTML content that was in `[brackets]` +* `attributes` (`Record` or `undefined`) + — object w/ HTML attributes +* `content` (`string` or `undefined`) + — compiled HTML content inside container directive + +### `Handle` + +Handle a directive (TypeScript type). + +###### Parameters + +* `this` ([`CompileContext`][micromark-compile-context]) + — current context +* `directive` ([`Directive`][api-directive-type]) + — directive + +###### Returns + +Signal whether the directive was handled (`boolean`, default: `true`). +Yield `false` to let the fallback (a special handle for `'*'`) handle it. + +### `HtmlOptions` + +Configuration (TypeScript type). + +> 👉 **Note**: the special field `'*'` can be used to specify a fallback handle +> to handle all otherwise unhandled directives. + +###### Type + +```ts +type HtmlOptions = Record +``` + +## Authoring + +When authoring markdown with directives, keep in mind that they don’t work in +most places. +On your own site it can be great! + +## HTML + +You can define how directives are turned into HTML. +If directives are not handled, they do not emit anything. + +## CSS + +How to display directives is left as an exercise for the reader. + +## Syntax + +The syntax looks like this: + +```markdown +Directives in text can form with a single colon, such as :cite[smith04]. +Their syntax is `:name[label]{attributes}`. + +Leafs (block without content) can form by using two colons: + +::youtube[Video of a cat in a box]{vid=01ab2cd3efg} + +Their syntax is `::name[label]{attributes}` on its own line. + +Containers (blocks with content) can form by using three colons: + +:::spoiler +He dies. +::: + +The `name` part is required. The first character must be a letter, other +characters can be alphanumerical, `-`, and `_`. +`-` or `_` cannot end a name. + +The `[label]` part is optional (`:x` and `:x[]` are equivalent)†. +When used, it can include text constructs such as emphasis and so on: `x[a *b* +c]`. + +The `{attributes}` part is optional (`:x` and `:x{}` are equivalent)†. +When used, it is handled like HTML attributes, such as that `{a}`, `{a=""}`, +, `{a=''}` but also `{a=b}`, `{a="b"}`, and `{a='b'}` are equivalent. +Shortcuts are available for `id=` (`{#readme}` for `{id=readme}`) and +`class` (`{.big}` for `{class=big}`). +When multiple ids are found, the last is used; when multiple classes are found, +they are combined: `{.red class=green .blue}` is equivalent to +`{.red .green .blue}` and `{class="red green blue"}`. + +† there is one case where a name must be followed by an empty label or empty +attributes: a *text* directive that only has a name, cannot be followed by a +colon. So, `:red:` doesn’t work. Use either `:red[]` or `:red{}` instead. +The reason for this is to allow GitHub emoji (gemoji) and directives to coexist. + +Containers can be nested by using more colons outside: + +::::spoiler +He dies. + +:::spoiler +She is born. +::: +:::: + +The closing fence must include the same or more colons as the opening. +If no closing is found, the container runs to the end of its parent container +(block quote, list item, document, or other container). + +::::spoiler +These three are not enough to close +::: +So this line is also part of the container. +``` + +Note that while other implementations are sometimes loose in what they allow, +this implementation mimics CommonMark as closely as possible: + +* Whitespace is not allowed between colons and name (~~`: a`~~), name and + label (~~`:a []`~~), name and attributes (~~`:a {}`~~), or label and + attributes (~~`:a[] {}`~~) — because it’s not allowed in links either + (~~`[] ()`~~) +* No trailing colons allowed on the opening fence of a container + (~~`:::a:::`~~) — because it’s not allowed in fenced code either +* The label and attributes in a leaf or container cannot include line endings + (~~`::a[b\nc]`~~) — because it’s not allowed in fenced code either + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types [`Directive`][api-directive-type], +[`Handle`][api-handle], and [`HtmlOptions`][api-html-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-directive@^3`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe assuming that you write safe handlers. +Any vulnerability in your code could open you to a +[cross-site scripting (XSS)][xss] attack. + +## Related + +* [`remark-directive`][remark-directive] + — remark plugin to support directives +* [`mdast-util-directive`][mdast-util-directive] + — mdast utility to support directives + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-directive/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-directive/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-directive.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-directive + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-directive.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-directive + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-directive + +[size]: https://bundlejs.com/?q=micromark-extension-directive + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-compile-context]: https://github.com/micromark/micromark/blob/41e3c4c/packages/micromark-util-types/index.js#L457 + +[mdast-util-directive]: https://github.com/syntax-tree/mdast-util-directive + +[remark-directive]: https://github.com/remarkjs/remark-directive + +[prop]: https://talk.commonmark.org/t/generic-directives-plugins-syntax/444 + +[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting + +[api-directive]: #directive + +[api-directive-html]: #directivehtmloptions + +[api-directive-type]: #directive-1 + +[api-handle]: #handle + +[api-html-options]: #htmloptions diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts new file mode 100644 index 0000000000..36f53b55bf --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts @@ -0,0 +1,24 @@ +export {gfmAutolinkLiteral} from './lib/syntax.js' +export {gfmAutolinkLiteralHtml} from './lib/html.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token with a field to improve performance. + */ + interface Token { + _gfmAutolinkLiteralWalkedInto?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + literalAutolink: 'literalAutolink' + literalAutolinkEmail: 'literalAutolinkEmail' + literalAutolinkHttp: 'literalAutolinkHttp' + literalAutolinkWww: 'literalAutolinkWww' + } +} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js new file mode 100644 index 0000000000..928d4456ab --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js @@ -0,0 +1,2 @@ +export {gfmAutolinkLiteral} from './lib/syntax.js' +export {gfmAutolinkLiteralHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts new file mode 100644 index 0000000000..36f53b55bf --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts @@ -0,0 +1,24 @@ +export {gfmAutolinkLiteral} from './lib/syntax.js' +export {gfmAutolinkLiteralHtml} from './lib/html.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token with a field to improve performance. + */ + interface Token { + _gfmAutolinkLiteralWalkedInto?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + literalAutolink: 'literalAutolink' + literalAutolinkEmail: 'literalAutolinkEmail' + literalAutolinkHttp: 'literalAutolinkHttp' + literalAutolinkWww: 'literalAutolinkWww' + } +} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.js b/node_modules/micromark-extension-gfm-autolink-literal/index.js new file mode 100644 index 0000000000..5194682ad9 --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/index.js @@ -0,0 +1,2 @@ +export { gfmAutolinkLiteral } from './lib/syntax.js'; +export { gfmAutolinkLiteralHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-autolink-literal/license b/node_modules/micromark-extension-gfm-autolink-literal/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-autolink-literal/package.json b/node_modules/micromark-extension-gfm-autolink-literal/package.json new file mode 100644 index 0000000000..2b1b6bd476 --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/package.json @@ -0,0 +1,116 @@ +{ + "name": "micromark-extension-gfm-autolink-literal", + "version": "2.1.0", + "description": "micromark extension to support GFM autolink literals", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "literal", + "url", + "autolink", + "auto", + "link", + "gfm", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-gfm-autolink-literal", + "bugs": "https://github.com/micromark/micromark-extension-gfm-autolink-literal/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "create-gfm-fixtures": "^1.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "rehype": "^13.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "prettier": true, + "rules": { + "complexity": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off", + "unicorn/prefer-string-replace-all": "off" + }, + "overrides": [ + { + "files": [ + "**/*.ts" + ], + "rules": { + "@typescript-eslint/consistent-type-definitions": 0 + } + }, + { + "files": [ + "test/**/*.js" + ], + "rules": { + "no-await-in-loop": 0 + } + } + ] + } +} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/readme.md b/node_modules/micromark-extension-gfm-autolink-literal/readme.md new file mode 100644 index 0000000000..61651de01a --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/readme.md @@ -0,0 +1,422 @@ +# micromark-extension-gfm-autolink-literal + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support GFM [literal autolinks][spec]. + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`gfmAutolinkLiteral()`](#gfmautolinkliteral) + * [`gfmAutolinkLiteralHtml()`](#gfmautolinkliteralhtml) +* [Bugs](#bugs) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains extensions that add support for the extra autolink syntax +enabled by GFM to [`micromark`][micromark]. + +GitHub employs different algorithms to autolink: one at parse time and one at +transform time (similar to how @mentions are done at transform time). +This difference can be observed because character references and escapes are +handled differently. +But also because issues/PRs/comments omit (perhaps by accident?) the second +algorithm for `www.`, `http://`, and `https://` links (but not for email links). + +As this is a syntax extension, it focuses on the first algorithm. +The second algorithm is performed by +[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. +The `html` part of this micromark extension does not operate on an AST and hence +can’t perform the second algorithm. + +The implementation of autolink literal on github.com is currently buggy. +The bugs have been reported on [`cmark-gfm`][cmark-gfm]. +This micromark extension matches github.com except for its bugs. + +## When to use this + +This project is useful when you want to support autolink literals in markdown. + +You can use these extensions when you are working with [`micromark`][micromark]. +To support all GFM features, use +[`micromark-extension-gfm`][micromark-extension-gfm] instead. + +When you need a syntax tree, combine this package with +[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. + +All these packages are used in [`remark-gfm`][remark-gfm], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-extension-gfm-autolink-literal +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {gfmAutolinkLiteral, gfmAutolinkLiteralHtml} from 'https://esm.sh/micromark-extension-gfm-autolink-literal@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {micromark} from 'micromark' +import { + gfmAutolinkLiteral, + gfmAutolinkLiteralHtml +} from 'micromark-extension-gfm-autolink-literal' + +const output = micromark('Just a URL: www.example.com.', { + extensions: [gfmAutolinkLiteral()], + htmlExtensions: [gfmAutolinkLiteralHtml()] +}) + +console.log(output) +``` + +Yields: + +```html +

Just a URL: www.example.com.

+``` + +## API + +This package exports the identifiers +[`gfmAutolinkLiteral`][api-gfm-autolink-literal] and +[`gfmAutolinkLiteralHtml`][api-gfm-autolink-literal-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `gfmAutolinkLiteral()` + +Create an extension for `micromark` to support GitHub autolink literal +syntax. + +###### Parameters + +Extension for `micromark` that can be passed in `extensions` to enable GFM +autolink literal syntax ([`Extension`][micromark-extension]). + +### `gfmAutolinkLiteralHtml()` + +Create an HTML extension for `micromark` to support GitHub autolink literal +when serializing to HTML. + +###### Parameters + +Extension for `micromark` that can be passed in `htmlExtensions` to support +GitHub autolink literal when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +## Bugs + +GitHub’s own algorithm to parse autolink literals contains three bugs. +A smaller bug is left unfixed in this project for consistency. +Two main bugs are not present in this project. +The issues relating to autolink literals are: + +* [GFM autolink extension (`www.`, `https?://` parts): links don’t work when + after bracket](https://github.com/github/cmark-gfm/issues/278)\ + fixed here ✅ +* [GFM autolink extension (`www.` part): uppercase does not match on + issues/PRs/comments](https://github.com/github/cmark-gfm/issues/280)\ + fixed here ✅ +* [GFM autolink extension (`www.` part): the word `www` + matches](https://github.com/github/cmark-gfm/issues/279)\ + present here for consistency + +## Authoring + +It is recommended to use labels, either with a resource or a definition, +instead of autolink literals, as those allow relative URLs and descriptive +text to explain the URL in prose. + +## HTML + +GFM autolink literals relate to the `` element in HTML. +See [*§ 4.5.1 The `a` element*][html-a] in the HTML spec for more info. +When an email autolink is used, the string `mailto:` is prepended when +generating the `href` attribute of the hyperlink. +When a www autolink is used, the string `http://` is prepended. + +## CSS + +As hyperlinks are the fundamental thing that makes the web, you will most +definitely have CSS for `a` elements already. +The same CSS can be used for autolink literals, too. + +GitHub itself does not apply interesting CSS to autolink literals. +For any link, it currently (June 2022) [uses][css]: + +```css +a { + background-color: transparent; + color: #58a6ff; + text-decoration: none; +} + +a:active, +a:hover { + outline-width: 0; +} + +a:hover { + text-decoration: underline; +} + +a:not([href]) { + color: inherit; + text-decoration: none; +} +``` + +## Syntax + +Autolink literals form with, roughly, the following BNF: + +```bnf +gfm_autolink_literal ::= gfm_protocol_autolink | gfm_www_autolink | gfm_email_autolink + +; Restriction: the code before must be `www_autolink_before`. +; Restriction: the code after `.` must not be eof. +www_autolink ::= 3('w' | 'W') '.' [domain [path]] +www_autolink_before ::= eof | eol | space_or_tab | '(' | '*' | '_' | '[' | ']' | '~' + +; Restriction: the code before must be `http_autolink_before`. +; Restriction: the code after the protocol must be `http_autolink_protocol_after`. +http_autolink ::= ('h' | 'H') 2('t' | 'T') ('p' | 'P') ['s' | 'S'] ':' 2'/' domain [path] +http_autolink_before ::= byte - ascii_alpha +http_autolink_protocol_after ::= byte - eof - eol - ascii_control - unicode_whitespace - ode_punctuation + +; Restriction: the code before must be `email_autolink_before`. +; Restriction: `ascii_digit` may not occur in the last label part of the label. +email_autolink ::= 1*('+' | '-' | '.' | '_' | ascii_alphanumeric) '@' 1*(1*label_segment l_dot_cont) 1*label_segment +email_autolink_before ::= byte - ascii_alpha - '/' + +; Restriction: `_` may not occur in the last two domain parts. +domain ::= 1*(url_ampt_cont | domain_punct_cont | '-' | byte - eof - ascii_control - ode_whitespace - unicode_punctuation) +; Restriction: must not be followed by `punct`. +domain_punct_cont ::= '.' | '_' +; Restriction: must not be followed by `char-ref`. +url_ampt_cont ::= '&' + +; Restriction: a counter `balance = 0` is increased for every `(`, and decreased for every `)`. +; Restriction: `)` must not be `paren_at_end`. +path ::= 1*(url_ampt_cont | path_punctuation_cont | '(' | ')' | byte - eof - eol - space_or_tab) +; Restriction: must not be followed by `punct`. +path_punctuation_cont ::= trailing_punctuation - '<' +; Restriction: must be followed by `punct` and `balance` must be less than `0`. +paren_at_end ::= ')' + +label_segment ::= label_dash_underscore_cont | ascii_alpha | ascii_digit +; Restriction: if followed by `punct`, the whole email autolink is invalid. +label_dash_underscore_cont ::= '-' | '_' +; Restriction: must not be followed by `punct`. +label_dot_cont ::= '.' + +punct ::= *trailing_punctuation ( byte - eof - eol - space_or_tab - '<' ) +char_ref ::= *ascii_alpha ';' path_end +trailing_punctuation ::= '!' | '"' | '\'' | ')' | '*' | ',' | '.' | ':' | ';' | '<' | '?' | '_' | '~' +``` + +The grammar for GFM autolink literal is very relaxed: basically anything +except for whitespace is allowed after a prefix. +To use whitespace characters and otherwise impossible characters, in URLs, +you can use percent encoding: + +```markdown +https://example.com/alpha%20bravo +``` + +Yields: + +```html +

https://example.com/alpha%20bravo

+``` + +There are several cases where incorrect encoding of URLs would, in other +languages, result in a parse error. +In markdown, there are no errors, and URLs are normalized. +In addition, many characters are percent encoded +([`sanitizeUri`][micromark-util-sanitize-uri]). +For example: + +```markdown +www.a👍b% +``` + +Yields: + +```html +

www.a👍b%

+``` + +There is a big difference between how www and protocol literals work +compared to how email literals work. +The first two are done when parsing, and work like anything else in +markdown. +But email literals are handled afterwards: when everything is parsed, we +look back at the events to figure out if there were email addresses. +This particularly affects how they interleave with character escapes and +character references. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-gfm-autolink-literal@^2`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe. +Unlike other links in CommonMark, which allow arbitrary protocols, this +construct always produces safe links. + +## Related + +* [`micromark-extension-gfm`][micromark-extension-gfm] + — support all of GFM +* [`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal] + — support all of GFM in mdast +* [`mdast-util-gfm`][mdast-util-gfm] + — support all of GFM in mdast +* [`remark-gfm`][remark-gfm] + — support all of GFM in remark + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-autolink-literal.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-autolink-literal + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-autolink-literal.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-autolink-literal + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-autolink-literal + +[size]: https://bundlejs.com/?q=micromark-extension-gfm-autolink-literal + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[micromark-util-sanitize-uri]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm + +[mdast-util-gfm-autolink-literal]: https://github.com/syntax-tree/mdast-util-gfm-autolink-literal + +[remark-gfm]: https://github.com/remarkjs/remark-gfm + +[spec]: https://github.github.com/gfm/#autolinks-extension- + +[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element + +[css]: https://github.com/sindresorhus/github-markdown-css + +[cmark-gfm]: https://github.com/github/cmark-gfm + +[api-gfm-autolink-literal]: #gfmautolinkliteral + +[api-gfm-autolink-literal-html]: #gfmautolinkliteralhtml diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts b/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts new file mode 100644 index 0000000000..1be286871d --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts @@ -0,0 +1,164 @@ +export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' +export {gfmFootnote} from './lib/syntax.js' + +/** + * Generate a back label dynamically. + * + * For the following markdown: + * + * ```markdown + * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. + * + * [^remark]: things about remark + * [^micromark]: things about micromark + * ``` + * + * This function will be called with: + * + * * `0` and `0` for the backreference from `things about micromark` to + * `alpha`, as it is the first used definition, and the first call to it + * * `0` and `1` for the backreference from `things about micromark` to + * `bravo`, as it is the first used definition, and the second call to it + * * `1` and `0` for the backreference from `things about remark` to + * `charlie`, as it is the second used definition + * + * @param referenceIndex + * Index of the definition in the order that they are first referenced, + * 0-indexed. + * @param rereferenceIndex + * Index of calls to the same definition, 0-indexed. + * @returns + * Back label to use when linking back from definitions to their reference. + */ +export type BackLabelTemplate = ( + referenceIndex: number, + rereferenceIndex: number +) => string + +/** + * Configuration. + */ +export interface HtmlOptions { + /** + * Prefix to use before the `id` attribute on footnotes to prevent them from + * *clobbering* (default: `'user-content-'`). + * + * Pass `''` for trusted markdown and when you are careful with + * polyfilling. + * You could pass a different prefix. + * + * DOM clobbering is this: + * + * ```html + *

+ * + * ``` + * + * The above example shows that elements are made available by browsers, by + * their ID, on the `window` object. + * This is a security risk because you might be expecting some other variable + * at that place. + * It can also break polyfills. + * Using a prefix solves these problems. + */ + clobberPrefix?: string | null | undefined + /** + * Textual label to use for the footnotes section (default: `'Footnotes'`). + * + * Change it when the markdown is not in English. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + label?: string | null | undefined + /** + * Attributes to use on the footnote label (default: `'class="sr-only"'`). + * + * Change it to show the label and add other attributes. + * + * This label is typically hidden visually (assuming an `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass an empty string. + * You can also add different attributes. + * + * > 👉 **Note**: `id="footnote-label"` is always added, because footnote + * > calls use it with `aria-describedby` to provide an accessible label. + */ + labelAttributes?: string | null | undefined + /** + * HTML tag name to use for the footnote label element (default: `'h2'`). + * + * Change it to match your document structure. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + labelTagName?: string | null | undefined + /** + * Textual label to describe the backreference back to references (default: + * `defaultBackLabel`). + * + * The default value is: + * + * ```js + * function defaultBackLabel(referenceIndex, rereferenceIndex) { + * return ( + * 'Back to reference ' + + * (referenceIndex + 1) + + * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') + * ) + * } + * ``` + * + * Change it when the markdown is not in English. + * + * This label is used in the `aria-label` attribute on each backreference + * (the `↩` links). + * It affects users of assistive technology. + */ + backLabel?: BackLabelTemplate | string | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + gfmFootnoteDefinitions?: Record + gfmFootnoteDefinitionStack?: Array + gfmFootnoteCallCounts?: Record + gfmFootnoteCallOrder?: Array + } + + /** + * Parse context. + */ + interface ParseContext { + gfmFootnotes?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + gfmFootnoteCall: 'gfmFootnoteCall' + gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' + gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' + gfmFootnoteCallString: 'gfmFootnoteCallString' + gfmFootnoteDefinition: 'gfmFootnoteDefinition' + gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' + gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' + gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' + gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' + gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' + gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' + } +} diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.js b/node_modules/micromark-extension-gfm-footnote/dev/index.js new file mode 100644 index 0000000000..a399a81f45 --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/dev/index.js @@ -0,0 +1,3 @@ +// Note: types are exported from `dev/index.d.ts`. +export {gfmFootnote} from './lib/syntax.js' +export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-footnote/index.d.ts b/node_modules/micromark-extension-gfm-footnote/index.d.ts new file mode 100644 index 0000000000..1be286871d --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/index.d.ts @@ -0,0 +1,164 @@ +export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' +export {gfmFootnote} from './lib/syntax.js' + +/** + * Generate a back label dynamically. + * + * For the following markdown: + * + * ```markdown + * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. + * + * [^remark]: things about remark + * [^micromark]: things about micromark + * ``` + * + * This function will be called with: + * + * * `0` and `0` for the backreference from `things about micromark` to + * `alpha`, as it is the first used definition, and the first call to it + * * `0` and `1` for the backreference from `things about micromark` to + * `bravo`, as it is the first used definition, and the second call to it + * * `1` and `0` for the backreference from `things about remark` to + * `charlie`, as it is the second used definition + * + * @param referenceIndex + * Index of the definition in the order that they are first referenced, + * 0-indexed. + * @param rereferenceIndex + * Index of calls to the same definition, 0-indexed. + * @returns + * Back label to use when linking back from definitions to their reference. + */ +export type BackLabelTemplate = ( + referenceIndex: number, + rereferenceIndex: number +) => string + +/** + * Configuration. + */ +export interface HtmlOptions { + /** + * Prefix to use before the `id` attribute on footnotes to prevent them from + * *clobbering* (default: `'user-content-'`). + * + * Pass `''` for trusted markdown and when you are careful with + * polyfilling. + * You could pass a different prefix. + * + * DOM clobbering is this: + * + * ```html + *

+ * + * ``` + * + * The above example shows that elements are made available by browsers, by + * their ID, on the `window` object. + * This is a security risk because you might be expecting some other variable + * at that place. + * It can also break polyfills. + * Using a prefix solves these problems. + */ + clobberPrefix?: string | null | undefined + /** + * Textual label to use for the footnotes section (default: `'Footnotes'`). + * + * Change it when the markdown is not in English. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + label?: string | null | undefined + /** + * Attributes to use on the footnote label (default: `'class="sr-only"'`). + * + * Change it to show the label and add other attributes. + * + * This label is typically hidden visually (assuming an `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass an empty string. + * You can also add different attributes. + * + * > 👉 **Note**: `id="footnote-label"` is always added, because footnote + * > calls use it with `aria-describedby` to provide an accessible label. + */ + labelAttributes?: string | null | undefined + /** + * HTML tag name to use for the footnote label element (default: `'h2'`). + * + * Change it to match your document structure. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + labelTagName?: string | null | undefined + /** + * Textual label to describe the backreference back to references (default: + * `defaultBackLabel`). + * + * The default value is: + * + * ```js + * function defaultBackLabel(referenceIndex, rereferenceIndex) { + * return ( + * 'Back to reference ' + + * (referenceIndex + 1) + + * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') + * ) + * } + * ``` + * + * Change it when the markdown is not in English. + * + * This label is used in the `aria-label` attribute on each backreference + * (the `↩` links). + * It affects users of assistive technology. + */ + backLabel?: BackLabelTemplate | string | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + gfmFootnoteDefinitions?: Record + gfmFootnoteDefinitionStack?: Array + gfmFootnoteCallCounts?: Record + gfmFootnoteCallOrder?: Array + } + + /** + * Parse context. + */ + interface ParseContext { + gfmFootnotes?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + gfmFootnoteCall: 'gfmFootnoteCall' + gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' + gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' + gfmFootnoteCallString: 'gfmFootnoteCallString' + gfmFootnoteDefinition: 'gfmFootnoteDefinition' + gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' + gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' + gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' + gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' + gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' + gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' + } +} diff --git a/node_modules/micromark-extension-gfm-footnote/index.js b/node_modules/micromark-extension-gfm-footnote/index.js new file mode 100644 index 0000000000..b210cb3dae --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/index.js @@ -0,0 +1,3 @@ +// Note: types are exported from `dev/index.d.ts`. +export { gfmFootnote } from './lib/syntax.js'; +export { gfmFootnoteHtml, defaultBackLabel } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-footnote/license b/node_modules/micromark-extension-gfm-footnote/license new file mode 100644 index 0000000000..f4fb31fe44 --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2021 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-footnote/package.json b/node_modules/micromark-extension-gfm-footnote/package.json new file mode 100644 index 0000000000..bcbf3e6c46 --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/package.json @@ -0,0 +1,132 @@ +{ + "name": "micromark-extension-gfm-footnote", + "version": "2.1.0", + "description": "micromark extension to support GFM footnotes", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "gfm", + "footnote", + "note", + "definition", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-gfm-footnote", + "bugs": "https://github.com/micromark/micromark-extension-gfm-footnote/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "create-gfm-fixtures": "^1.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off", + "unicorn/prefer-string-replace-all": "off" + }, + "overrides": [ + { + "files": [ + "**/*.d.ts" + ], + "rules": { + "@typescript-eslint/array-type": [ + "error", + { + "default": "generic" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": true + } + ], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface" + ] + } + }, + { + "files": [ + "test/**/*.js" + ], + "rules": { + "no-await-in-loop": 0 + } + } + ] + } +} diff --git a/node_modules/micromark-extension-gfm-footnote/readme.md b/node_modules/micromark-extension-gfm-footnote/readme.md new file mode 100644 index 0000000000..4c446ae20b --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/readme.md @@ -0,0 +1,656 @@ +# micromark-extension-gfm-footnote + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support GFM [footnotes][post]. + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`defaultBackLabel(referenceIndex, rereferenceIndex)`](#defaultbacklabelreferenceindex-rereferenceindex) + * [`gfmFootnote()`](#gfmfootnote) + * [`gfmFootnoteHtml(options?)`](#gfmfootnotehtmloptions) + * [`BackLabelTemplate`](#backlabeltemplate) + * [`HtmlOptions`](#htmloptions) +* [Bugs](#bugs) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains extensions that add support for footnotes as enabled by +GFM to [`micromark`][micromark]. + +GitHub announced footnotes [on September 30, 2021][post] but did not specify +them in their GFM spec. +As they are implemented in their parser and supported in all places where +other GFM features work, they can be considered part of GFM. +GitHub employs several other features (such as mentions or frontmatter) that +are either not in their parser, or not in all places where GFM features work, +which should not be considered GFM. + +The implementation of footnotes on github.com is currently buggy. +The bugs have been reported on [`cmark-gfm`][cmark-gfm]. +This micromark extension matches github.com except for its bugs. + +## When to use this + +This project is useful when you want to support footnotes in markdown. + +You can use these extensions when you are working with [`micromark`][micromark]. +To support all GFM features, use +[`micromark-extension-gfm`][micromark-extension-gfm] instead. + +When you need a syntax tree, combine this package with +[`mdast-util-gfm-footnote`][mdast-util-gfm-footnote]. + +All these packages are used in [`remark-gfm`][remark-gfm], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-extension-gfm-footnote +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {gfmFootnote, gfmFootnoteHtml} from 'https://esm.sh/micromark-extension-gfm-footnote@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say our document `example.md` contains: + +````markdown +Using footnotes is fun![^1] They let you reference relevant information without disrupting the flow of what you’re trying to say.[^bignote] + +[^1]: This is the first footnote. +[^bignote]: Here’s one with multiple paragraphs and code. + + Indent paragraphs to include them in the footnote. + + ``` + my code + ``` + + Add as many paragraphs as you like. + +Text here and here and here. +[Learn more about markdown and footnotes in markdown](https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#footnotes) +```` + +…and our module `example.js` looks as follows: + +```js +import fs from 'node:fs/promises' +import {micromark} from 'micromark' +import {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote' + +const output = micromark(await fs.readFile('example.md'), { + extensions: [gfmFootnote()], + htmlExtensions: [gfmFootnoteHtml()] +}) + +console.log(output) +``` + +…now running `node example.js` yields: + +```html +

Using footnotes is fun!1 They let you reference relevant information without disrupting the flow of what you’re trying to say.2

+

Text here and here and here. +Learn more about markdown and footnotes in markdown

+

Footnotes

+
    +
  1. +

    This is the first footnote.

    +
  2. +
  3. +

    Here’s one with multiple paragraphs and code.

    +

    Indent paragraphs to include them in the footnote.

    +
    my code
    +
    +

    Add as many paragraphs as you like.

    +
  4. +
+
+``` + +## API + +This package exports the identifiers +[`defaultBackLabel`][api-default-back-label], +[`gfmFootnote`][api-gfm-footnote], and +[`gfmFootnoteHtml`][api-gfm-footnote-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `defaultBackLabel(referenceIndex, rereferenceIndex)` + +Generate the default label that GitHub uses on backreferences +([`BackLabelTemplate`][api-back-label-template]). + +### `gfmFootnote()` + +Create an extension for `micromark` to enable GFM footnote syntax. + +###### Returns + +Extension for `micromark` that can be passed in `extensions` to enable GFM +footnote syntax ([`Extension`][micromark-extension]). + +### `gfmFootnoteHtml(options?)` + +Create an extension for `micromark` to support GFM footnotes when serializing +to HTML. + +###### Parameters + +* `options` ([`HtmlOptions`][api-html-options], optional) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions` to support GFM +footnotes when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +### `BackLabelTemplate` + +Generate a back label dynamically (TypeScript type). + +For the following markdown: + +```markdown +Alpha[^micromark], bravo[^micromark], and charlie[^remark]. + +[^remark]: things about remark +[^micromark]: things about micromark +``` + +This function will be called with: + +* `0` and `0` for the backreference from `things about micromark` to + `alpha`, as it is the first used definition, and the first call to it +* `0` and `1` for the backreference from `things about micromark` to + `bravo`, as it is the first used definition, and the second call to it +* `1` and `0` for the backreference from `things about remark` to + `charlie`, as it is the second used definition + +###### Parameters + +* `referenceIndex` (`number`) + — index of the definition in the order that they are first referenced, + 0-indexed +* `rereferenceIndex` (`number`) + — index of calls to the same definition, 0-indexed + +###### Returns + +Back label to use when linking back from definitions to their reference +(`string`). + +### `HtmlOptions` + +Configuration (TypeScript type). + +##### Fields + +###### `clobberPrefix` + +Prefix to use before the `id` attribute on footnotes to prevent them from +*clobbering* (`string`, default: `'user-content-'`). + +Pass `''` for trusted markdown and when you are careful with polyfilling. +You could pass a different prefix. + +DOM clobbering is this: + +```html +

+ +``` + +The above example shows that elements are made available by browsers, by their +ID, on the `window` object. +This is a security risk because you might be expecting some other variable at +that place. +It can also break polyfills. +Using a prefix solves these problems. + +###### `label` + +Textual label to use for the footnotes section (`string`, default: +`'Footnotes'`). + +Change it when the markdown is not in English. + +This label is typically hidden visually (assuming a `sr-only` CSS class +is defined that does that) and so affects screen readers only. + +###### `labelAttributes` + +Attributes to use on the footnote label (`string`, default: +`'class="sr-only"'`). + +Change it to show the label and add other attributes. + +This label is typically hidden visually (assuming an `sr-only` CSS class +is defined that does that) and so affects screen readers only. +If you do have such a class, but want to show this section to everyone, +pass an empty string. +You can also add different attributes. + +> 👉 **Note**: `id="footnote-label"` is always added, because footnote +> calls use it with `aria-describedby` to provide an accessible label. + +###### `labelTagName` + +HTML tag name to use for the footnote label element (`string`, default: +`'h2'`). + +Change it to match your document structure. + +This label is typically hidden visually (assuming a `sr-only` CSS class +is defined that does that) and so affects screen readers only. + +###### `backLabel` + +Textual label to describe the backreference back to footnote calls +([`BackLabelTemplate`][api-back-label-template] or `string`, +default: [`defaultBackLabel`][api-default-back-label]). + +Change it when the markdown is not in English. + +This label is used in the [`aria-label`][aria-label] attribute on each +backreference (the `↩` links). +It affects users of assistive technology. + +## Bugs + +GitHub’s own algorithm to parse footnote definitions contains several bugs. +These are not present in this project. +The issues relating to footnote definitions are: + +* [Footnote reference call identifiers are trimmed, but definition + identifiers aren’t](https://github.com/github/cmark-gfm/issues/237)\ + — initial and final whitespace in labels causes them not to match +* [Footnotes are matched case-insensitive, but links keep their casing, + breaking them](https://github.com/github/cmark-gfm/issues/239)\ + — using uppercase (or any character that will be percent encoded) in + identifiers breaks links +* [Colons in footnotes generate links w/o + `href`](https://github.com/github/cmark-gfm/issues/250)\ + — colons in identifiers generate broken links +* [Character escape of `]` does not work in footnote + identifiers](https://github.com/github/cmark-gfm/issues/240)\ + — some character escapes don’t work +* [Footnotes in links are + broken](https://github.com/github/cmark-gfm/issues/249)\ + — while `CommonMark` prevents links in links, GitHub does not prevent + footnotes (which turn into links) in links +* [Footnote-like brackets around image, break that + image](https://github.com/github/cmark-gfm/issues/275)\ + — images can’t be used in what looks like a footnote call +* [GFM footnotes: line ending in footnote definition label causes text to + disappear](https://github.com/github/cmark-gfm/issues/282)\ + — line endings in footnote definitions cause text to disappear + +## Authoring + +When authoring markdown with footnotes it’s recommended to use words instead +of numbers (or letters or anything with an order) as identifiers. +That makes it easier to reuse and reorder footnotes. + +It’s recommended to place footnotes definitions at the bottom of the document. + +## HTML + +GFM footnotes do not, on their own, relate to anything in HTML. +When a footnote reference matches with a definition, they each relate to several +elements in HTML. + +The reference relates to `` and `` elements in HTML: + +```html +1

+``` + +…where `x` is the identifier used in the markdown source and `1` the number of +corresponding, listed, definition. + +See [*§ 4.5.19 The `sub` and `sup` elements*][html-sup], +[*§ 4.5.1 The `a` element*][html-a], and +[*§ 3.2.6.6 Embedding custom non-visible data with the `data-*` +attributes*][html-data] +in the HTML spec, and +[*§ 6.8 `aria-describedby` property*][aria-describedby] +in WAI-ARIA, for more info. + +When one or more definitions are referenced, a footnote section is generated at +the end of the document, using `
`, `

`, and `
    ` elements: + +```html +

    Footnotes

    +
    +
    +``` + +Each definition is generated as a `
  1. ` in the `
      ` in the order they were +first referenced: + +```html +
    1. +``` + +Backreferences are injected at the end of the first paragraph, or, when there +is no paragraph, at the end of the definition. +When a definition is referenced multiple times, multiple backreferences are +generated. +Further backreferences use an extra counter in the `href` attribute and +visually in a `` after `↩`. + +```html + 2 +``` + +See +[*§ 4.5.1 The `a` element*][html-a], +[*§ 4.3.6 The `h1`, `h2`, `h3`, `h4`, `h5`, and `h6` elements*][html-h], +[*§ 4.4.8 The `li` element*][html-li], +[*§ 4.4.5 The `ol` element*][html-ol], +[*§ 4.4.1 The `p` element*][html-p], +[*§ 4.3.3 The `section` element*][html-section], and +[*§ 4.5.19 The `sub` and `sup` elements*][html-sup] +in the HTML spec, and +[*§ 6.8 `aria-label` property*][aria-label] +in WAI-ARIA, for more info. + +## CSS + +The following CSS is needed to make footnotes look a bit like GitHub (and fixes +a bug). +For the complete actual CSS see +[`sindresorhus/github-markdown-css`](https://github.com/sindresorhus/github-markdown-css). + +```css +/* Style the footnotes section. */ +.footnotes { + font-size: smaller; + color: #8b949e; + border-top: 1px solid #30363d; +} + +/* Hide the section label for visual users. */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + word-wrap: normal; + border: 0; +} + +/* Place `[` and `]` around footnote references. */ +[data-footnote-ref]::before { + content: '['; +} + +[data-footnote-ref]::after { + content: ']'; +} +``` + +## Syntax + +Footnotes form with, roughly, the following BNF: + +```bnf +gfm_footnote_reference ::= gfm_footnote_label + +gfm_footnote_definition_start ::= gfm_footnote_label ':' *space_or_tab +; Restriction: blank line allowed. +gfm_footnote_definition_cont ::= 4(space_or_tab) + +; Restriction: maximum `999` codes between `^` and `]`. +gfm_footnote_label ::= '[' '^' 1*(gfm_footnote_label_byte | gfm_footnote_label_escape) ']' +gfm_footnote_label_byte ::= text - '[' - '\\' - ']' +gfm_footnote_label_escape ::= '\\' ['[' | '\\' | ']'] + +; Any byte (u8) +byte ::= 0x00..=0xFFFF +space_or_tab ::= '\t' | ' ' +eol ::= '\n' | '\r' | '\r\n' +line ::= byte - eol +text ::= line - space_or_tab +``` + +Further lines after `gfm_footnote_definition_start` that are not prefixed with +`gfm_footnote_definition_cont` cause the footnote definition to be exited, +except when those lines are lazy continuation or blank. +Like so many things in markdown, footnote definition too are complex. +See [*§ Phase 1: block structure* in `CommonMark`][commonmark-block] for more +on parsing details. + +The identifiers in the `label` parts are interpreted as the +[string][micromark-content-types] content type. +That means that character escapes and character references are allowed. + +Definitions match to references through identifiers. +To match, both labels must be equal after normalizing with +[`normalizeIdentifier`][micromark-normalize-identifier]. +One definition can match to multiple calls. +Multiple definitions with the same, normalized, identifier are ignored: the +first definition is preferred. +To illustrate, the definition with the content of `x` wins: + +```markdown +[^a]: x +[^a]: y + +[^a] +``` + +Importantly, while labels *can* include [string][micromark-content-types] +content (character escapes and character references), these are not considered +when matching. +To illustrate, neither definition matches the reference: + +```markdown +[^a&b]: x +[^a\&b]: y + +[^a&b] +``` + +Because footnote definitions are containers (like block quotes and list items), +they can contain more footnote definitions. +They can even include references to themselves. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types [`BackLabelTemplate`][api-back-label-template] +and [`HtmlOptions`][api-html-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-gfm-footnote@^2`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe. +Setting `clobberPrefix = ''` is dangerous, it opens you up to DOM clobbering. +The `labelTagName` and `labelAttributes` options are unsafe when used with user +content, they allow defining arbitrary HTML. + +## Related + +* [`micromark-extension-gfm`][micromark-extension-gfm] + — support all of GFM +* [`mdast-util-gfm-footnote`][mdast-util-gfm-footnote] + — support all of GFM in mdast +* [`mdast-util-gfm`][mdast-util-gfm] + — support all of GFM in mdast +* [`remark-gfm`][remark-gfm] + — support all of GFM in remark + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-gfm-footnote/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-gfm-footnote/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-footnote.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-footnote + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-footnote.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-footnote + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-footnote + +[size]: https://bundlejs.com/?q=micromark-extension-gfm-footnote + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-content-types]: https://github.com/micromark/micromark#content-types + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-normalize-identifier]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[mdast-util-gfm-footnote]: https://github.com/syntax-tree/mdast-util-gfm-footnote + +[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm + +[remark-gfm]: https://github.com/remarkjs/remark-gfm + +[post]: https://github.blog/changelog/2021-09-30-footnotes-now-supported-in-markdown-fields/ + +[cmark-gfm]: https://github.com/github/cmark-gfm + +[commonmark-block]: https://spec.commonmark.org/0.30/#phase-1-block-structure + +[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element + +[html-data]: https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes + +[html-h]: https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements + +[html-li]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-li-element + +[html-ol]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-ol-element + +[html-p]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-p-element + +[html-section]: https://html.spec.whatwg.org/multipage/sections.html#the-section-element + +[html-sup]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-sub-and-sup-elements + +[aria-describedby]: https://w3c.github.io/aria/#aria-describedby + +[aria-label]: https://w3c.github.io/aria/#aria-label + +[api-gfm-footnote]: #gfmfootnote + +[api-gfm-footnote-html]: #gfmfootnotehtmloptions + +[api-html-options]: #htmloptions + +[api-default-back-label]: #defaultbacklabelreferenceindex-rereferenceindex + +[api-back-label-template]: #backlabeltemplate diff --git a/node_modules/micromark-extension-gfm-table/dev/index.d.ts b/node_modules/micromark-extension-gfm-table/dev/index.d.ts new file mode 100644 index 0000000000..1625d64dcb --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/dev/index.d.ts @@ -0,0 +1,37 @@ +import type {Align} from './lib/infer.js' + +export {gfmTableHtml} from './lib/html.js' +export {gfmTable} from './lib/syntax.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token; + * `align` is patched on `table` tokens. + */ + interface Token { + _align?: Align[] + } + + interface TokenTypeMap { + table: 'table' + tableBody: 'tableBody' + tableCellDivider: 'tableCellDivider' + tableContent: 'tableContent' + tableData: 'tableData' + tableDelimiter: 'tableDelimiter' + tableDelimiterFiller: 'tableDelimiterFiller' + tableDelimiterMarker: 'tableDelimiterMarker' + tableDelimiterRow: 'tableDelimiterRow' + tableHead: 'tableHead' + tableHeader: 'tableHeader' + tableRow: 'tableRow' + } + + interface CompileData { + tableAlign?: Align[] + tableColumn?: number + } +} diff --git a/node_modules/micromark-extension-gfm-table/dev/index.js b/node_modules/micromark-extension-gfm-table/dev/index.js new file mode 100644 index 0000000000..dcb556083f --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/dev/index.js @@ -0,0 +1,2 @@ +export {gfmTableHtml} from './lib/html.js' +export {gfmTable} from './lib/syntax.js' diff --git a/node_modules/micromark-extension-gfm-table/index.d.ts b/node_modules/micromark-extension-gfm-table/index.d.ts new file mode 100644 index 0000000000..1625d64dcb --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/index.d.ts @@ -0,0 +1,37 @@ +import type {Align} from './lib/infer.js' + +export {gfmTableHtml} from './lib/html.js' +export {gfmTable} from './lib/syntax.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token; + * `align` is patched on `table` tokens. + */ + interface Token { + _align?: Align[] + } + + interface TokenTypeMap { + table: 'table' + tableBody: 'tableBody' + tableCellDivider: 'tableCellDivider' + tableContent: 'tableContent' + tableData: 'tableData' + tableDelimiter: 'tableDelimiter' + tableDelimiterFiller: 'tableDelimiterFiller' + tableDelimiterMarker: 'tableDelimiterMarker' + tableDelimiterRow: 'tableDelimiterRow' + tableHead: 'tableHead' + tableHeader: 'tableHeader' + tableRow: 'tableRow' + } + + interface CompileData { + tableAlign?: Align[] + tableColumn?: number + } +} diff --git a/node_modules/micromark-extension-gfm-table/index.js b/node_modules/micromark-extension-gfm-table/index.js new file mode 100644 index 0000000000..8f9afc67d3 --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/index.js @@ -0,0 +1,2 @@ +export { gfmTableHtml } from './lib/html.js'; +export { gfmTable } from './lib/syntax.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-table/license b/node_modules/micromark-extension-gfm-table/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-table/package.json b/node_modules/micromark-extension-gfm-table/package.json new file mode 100644 index 0000000000..49909daa90 --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/package.json @@ -0,0 +1,116 @@ +{ + "name": "micromark-extension-gfm-table", + "version": "2.1.0", + "description": "micromark extension to support GFM tables", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "table", + "row", + "column", + "cell", + "tabular", + "gfm", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-gfm-table", + "bugs": "https://github.com/micromark/micromark-extension-gfm-table/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "create-gfm-fixtures": "^1.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "overrides": [ + { + "files": [ + "test/**/*.js" + ], + "rules": { + "no-await-in-loop": 0 + } + }, + { + "files": [ + "**/*.ts" + ], + "rules": { + "@typescript-eslint/consistent-type-definitions": 0 + } + } + ], + "prettier": true, + "rules": { + "complexity": "off", + "max-depth": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-string-replace-all": "off" + } + } +} diff --git a/node_modules/micromark-extension-gfm-table/readme.md b/node_modules/micromark-extension-gfm-table/readme.md new file mode 100644 index 0000000000..35e1e1966d --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/readme.md @@ -0,0 +1,515 @@ +# micromark-extension-gfm-table + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support GFM [tables][]. + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`gfmTable()`](#gfmtable) + * [`gfmTableHtml()`](#gfmtablehtml) +* [Bugs](#bugs) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains extensions that add support for the table syntax enabled +by GFM to [`micromark`][micromark]. +These extensions match github.com. + +## When to use this + +This project is useful when you want to support tables in markdown. + +You can use these extensions when you are working with [`micromark`][micromark]. +To support all GFM features, use +[`micromark-extension-gfm`][micromark-extension-gfm] instead. + +When you need a syntax tree, combine this package with +[`mdast-util-gfm-table`][mdast-util-gfm-table]. + +All these packages are used in [`remark-gfm`][remark-gfm], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-extension-gfm-table +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {gfmTable, gfmTableHtml} from 'https://esm.sh/micromark-extension-gfm-table@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {micromark} from 'micromark' +import {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table' + +const output = micromark('| a |\n| - |', { + extensions: [gfmTable()], + htmlExtensions: [gfmTableHtml()] +}) + +console.log(output) +``` + +Yields: + +```html + + + + + + +
      a
      +``` + +## API + +This package exports the identifiers [`gfmTable`][api-gfm-table] and +[`gfmTableHtml`][api-gfm-table-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `gfmTable()` + +Create an HTML extension for `micromark` to support GitHub tables syntax. + +###### Returns + +Extension for `micromark` that can be passed in `extensions` to enable GFM +table syntax ([`Extension`][micromark-extension]). + +### `gfmTableHtml()` + +Create an HTML extension for `micromark` to support GitHub tables when +serializing to HTML. + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions` to support +GFM tables when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +## Bugs + +GitHub’s own algorithm to parse tables contains a bug. +This bug is not present in this project. +The issue relating to tables is: + +* [GFM tables: escaped escapes are incorrectly treated as + escapes](https://github.com/github/cmark-gfm/issues/277) + +## Authoring + +When authoring markdown with GFM tables, it’s recommended to *always* put +pipes around cells. +Without them, it can be hard to infer whether the table will work, how many +columns there are, and which column you are currently editing. + +It is recommended to not use many columns, as it results in very long lines, +making it hard to infer which column you are currently editing. + +For larger tables, particularly when cells vary in size, it is recommended +*not* to manually “pad” cell text. +While it can look better, it results in a lot of time spent realigning +everything when a new, longer cell is added or the longest cell removed, as +every row then must be changed. +Other than costing time, it also causes large diffs in Git. + +To illustrate, when authoring large tables, it is discouraged to pad cells +like this: + +```markdown +| Alpha bravo charlie | delta | +| ------------------- | -----------------: | +| Echo | Foxtrot golf hotel | +``` + +Instead, use single spaces (and single filler dashes): + +```markdown +| Alpha bravo charlie | delta | +| - | -: | +| Echo | Foxtrot golf hotel | +``` + +## HTML + +GFM tables relate to several HTML elements: ``, ``, ``, and ``. +See +[*§ 4.9.1 The `table` element*][html-table], +[*§ 4.9.5 The `tbody` element*][html-tbody], +[*§ 4.9.9 The `td` element*][html-td], +[*§ 4.9.10 The `th` element*][html-th], +[*§ 4.9.6 The `thead` element*][html-thead], and +[*§ 4.9.8 The `tr` element*][html-tr] +in the HTML spec for more info. + +If the alignment of a column is left, right, or center, a deprecated +`align` attribute is added to each `
      `, +``, `
      ` and `` element belonging to +that column. +That attribute is interpreted by browsers as if a CSS `text-align` property +was included, with its value set to that same keyword. + +## CSS + +The following CSS is needed to make tables look a bit like GitHub. +For the complete actual CSS see +[`sindresorhus/github-markdown-css`][github-markdown-css] + +```css +/* Light theme. */ +:root { + --color-canvas-default: #ffffff; + --color-canvas-subtle: #f6f8fa; + --color-border-default: #d0d7de; + --color-border-muted: hsla(210, 18%, 87%, 1); +} + +/* Dark theme. */ +@media (prefers-color-scheme: dark) { + :root { + --color-canvas-default: #0d1117; + --color-canvas-subtle: #161b22; + --color-border-default: #30363d; + --color-border-muted: #21262d; + } +} + +table { + border-spacing: 0; + border-collapse: collapse; + display: block; + margin-top: 0; + margin-bottom: 16px; + width: max-content; + max-width: 100%; + overflow: auto; +} + +tr { + background-color: var(--color-canvas-default); + border-top: 1px solid var(--color-border-muted); +} + +tr:nth-child(2n) { + background-color: var(--color-canvas-subtle); +} + +td, +th { + padding: 6px 13px; + border: 1px solid var(--color-border-default); +} + +th { + font-weight: 600; +} + +table img { + background-color: transparent; +} +``` + +## Syntax + +Tables form with the following BNF: + +```bnf +gfm_table ::= gfm_table_head 0*(eol gfm_table_body_row) + +; Restriction: both rows must have the same number of cells. +gfm_table_head ::= gfm_table_row eol gfm_table_delimiter_row + +gfm_table_row ::= ['|'] gfm_table_cell 0*('|' gfm_table_cell) ['|'] *space_or_tab +gfm_table_cell ::= *space_or_tab gfm_table_text *space_or_tab +gfm_table_text ::= 0*(line - '\\' - '|' | '\\' ['\\' | '|']) + +gfm_table_delimiter_row ::= ['|'] gfm_table_delimiter_cell 0*('|' gfm_table_delimiter_cell) ['|'] *space_or_tab +gfm_table_delimiter_cell ::= *space_or_tab gfm_table_delimiter_value *space_or_tab +gfm_table_delimiter_value ::= [':'] 1*'-' [':'] +``` + +As this construct occurs in flow, like all flow constructs, it must be +followed by an eol (line ending) or eof (end of file). + +The above grammar shows that basically anything can be a cell or a row. +The main thing that makes something a row, is that it occurs directly before +or after a delimiter row, or after another row. + +It is not required for a table to have a body: it can end right after the +delimiter row. + +Each column can be marked with an alignment. +The alignment marker is a colon (`:`) used before and/or after delimiter row +filler. +To illustrate: + +```markdown +| none | left | right | center | +| ---- | :--- | ----: | :----: | +``` + +The number of cells in the delimiter row, is the number of columns of the +table. +Only the head row is required to have the same number of cells. +Body rows are not required to have a certain number of cells. +For body rows that have less cells than the number of columns of the table, +empty cells are injected. +When a row has more cells than the number of columns of the table, the +superfluous cells are dropped. +To illustrate: + +```markdown +| a | b | +| - | - | +| c | +| d | e | f | +``` + +Yields: + +```html + + + + + + + + + + + + + + + + + +
      ab
      c
      de
      +``` + +Each cell’s text is interpreted as the [text][micromark-content-type] content +type. +That means that it can include constructs such as attention (emphasis, strong). + +The grammar for cells prohibits the use of `|` in them. +To use pipes in cells, encode them as a character reference or character +escape: `|` (or `|`, `|`, `|`, `|`) or +`\|`. + +Escapes will typically work, but they are not supported in +code (text) (and the math (text) extension). +To work around this, GitHub came up with a rather weird “trick”. +When inside a table cell *and* inside code, escaped pipes *are* decoded. +To illustrate: + +```markdown +| Name | Character | +| - | - | +| Left curly brace | `{` | +| Pipe | `\|` | +| Right curly brace | `}` | +``` + +Yields: + +```html + + + + + + + + + + + + + + + + + + + + + +
      NameCharacter
      Left curly brace{
      Pipe|
      Right curly brace}
      +``` + +> 👉 **Note**: no other character can be escaped like this. +> Escaping pipes in code does not work when not inside a table, either. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-gfm-table@^2`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe. + +## Related + +* [`micromark-extension-gfm`][micromark-extension-gfm] + — support all of GFM +* [`mdast-util-gfm-table`][mdast-util-gfm-table] + — support all of GFM in mdast +* [`mdast-util-gfm`][mdast-util-gfm] + — support all of GFM in mdast +* [`remark-gfm`][remark-gfm] + — support all of GFM in remark + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-gfm-table/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-gfm-table/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-table.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-table + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-table.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-table + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-table + +[size]: https://bundlejs.com/?q=micromark-extension-gfm-table + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-content-type]: https://github.com/micromark/micromark#content-types + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm + +[mdast-util-gfm-table]: https://github.com/syntax-tree/mdast-util-gfm-table + +[remark-gfm]: https://github.com/remarkjs/remark-gfm + +[tables]: https://github.github.com/gfm/#tables-extension- + +[html-table]: https://html.spec.whatwg.org/multipage/tables.html#the-table-element + +[html-tbody]: https://html.spec.whatwg.org/multipage/tables.html#the-tbody-element + +[html-thead]: https://html.spec.whatwg.org/multipage/tables.html#the-thead-element + +[html-tr]: https://html.spec.whatwg.org/multipage/tables.html#the-tr-element + +[html-td]: https://html.spec.whatwg.org/multipage/tables.html#the-td-element + +[html-th]: https://html.spec.whatwg.org/multipage/tables.html#the-th-element + +[github-markdown-css]: https://github.com/sindresorhus/github-markdown-css + +[api-gfm-table]: #gfmtable + +[api-gfm-table-html]: #gfmtablehtml diff --git a/node_modules/micromark-extension-math/dev/index.d.ts b/node_modules/micromark-extension-math/dev/index.d.ts new file mode 100644 index 0000000000..d09f0e576d --- /dev/null +++ b/node_modules/micromark-extension-math/dev/index.d.ts @@ -0,0 +1,61 @@ +import type {KatexOptions} from 'katex' + +export {mathHtml} from './lib/html.js' +export {math} from './lib/syntax.js' + +/** + * Configuration for HTML output. + * + * > 👉 **Note**: passed to `katex.renderToString`. + * > `displayMode` is overwritten by this plugin, to `false` for math in + * > text (inline), and `true` for math in flow (block). + */ +export interface HtmlOptions extends KatexOptions { + /** + * The field `displayMode` cannot be passed to `micromark-extension-math`. + * It is overwritten by it, + * to `false` for math in text (inline) and `true` for math in flow (block). + */ + displayMode?: never +} + +/** + * Configuration. + */ +export interface Options { + /** + * Whether to support math (text) with a single dollar (default: `true`). + * + * Single dollars work in Pandoc and many other places, but often interfere + * with “normal” dollars in text. + * If you turn this off, you can use two or more dollars for text math. + */ + singleDollarTextMath?: boolean | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + mathFlowOpen?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + mathFlow: 'mathFlow' + mathFlowFence: 'mathFlowFence' + mathFlowFenceMeta: 'mathFlowFenceMeta' + mathFlowFenceSequence: 'mathFlowFenceSequence' + mathFlowValue: 'mathFlowValue' + mathText: 'mathText' + mathTextData: 'mathTextData' + mathTextPadding: 'mathTextPadding' + mathTextSequence: 'mathTextSequence' + } +} diff --git a/node_modules/micromark-extension-math/dev/index.js b/node_modules/micromark-extension-math/dev/index.js new file mode 100644 index 0000000000..120c39c7fc --- /dev/null +++ b/node_modules/micromark-extension-math/dev/index.js @@ -0,0 +1,3 @@ +// Note: types exported from `index.d.ts`. +export {math} from './lib/syntax.js' +export {mathHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-math/index.d.ts b/node_modules/micromark-extension-math/index.d.ts new file mode 100644 index 0000000000..d09f0e576d --- /dev/null +++ b/node_modules/micromark-extension-math/index.d.ts @@ -0,0 +1,61 @@ +import type {KatexOptions} from 'katex' + +export {mathHtml} from './lib/html.js' +export {math} from './lib/syntax.js' + +/** + * Configuration for HTML output. + * + * > 👉 **Note**: passed to `katex.renderToString`. + * > `displayMode` is overwritten by this plugin, to `false` for math in + * > text (inline), and `true` for math in flow (block). + */ +export interface HtmlOptions extends KatexOptions { + /** + * The field `displayMode` cannot be passed to `micromark-extension-math`. + * It is overwritten by it, + * to `false` for math in text (inline) and `true` for math in flow (block). + */ + displayMode?: never +} + +/** + * Configuration. + */ +export interface Options { + /** + * Whether to support math (text) with a single dollar (default: `true`). + * + * Single dollars work in Pandoc and many other places, but often interfere + * with “normal” dollars in text. + * If you turn this off, you can use two or more dollars for text math. + */ + singleDollarTextMath?: boolean | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + mathFlowOpen?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + mathFlow: 'mathFlow' + mathFlowFence: 'mathFlowFence' + mathFlowFenceMeta: 'mathFlowFenceMeta' + mathFlowFenceSequence: 'mathFlowFenceSequence' + mathFlowValue: 'mathFlowValue' + mathText: 'mathText' + mathTextData: 'mathTextData' + mathTextPadding: 'mathTextPadding' + mathTextSequence: 'mathTextSequence' + } +} diff --git a/node_modules/micromark-extension-math/index.js b/node_modules/micromark-extension-math/index.js new file mode 100644 index 0000000000..59bed9f691 --- /dev/null +++ b/node_modules/micromark-extension-math/index.js @@ -0,0 +1,3 @@ +// Note: types exported from `index.d.ts`. +export { math } from './lib/syntax.js'; +export { mathHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-math/license b/node_modules/micromark-extension-math/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-math/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-math/package.json b/node_modules/micromark-extension-math/package.json new file mode 100644 index 0000000000..1f7c882e2e --- /dev/null +++ b/node_modules/micromark-extension-math/package.json @@ -0,0 +1,121 @@ +{ + "name": "micromark-extension-math", + "version": "3.1.0", + "description": "micromark extension to support math (`$C_L$`)", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "math", + "katex", + "latex", + "tex", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-math", + "bugs": "https://github.com/micromark/micromark-extension-math/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "overrides": [ + { + "files": [ + "**/*.d.ts" + ], + "rules": { + "@typescript-eslint/array-type": [ + "error", + { + "default": "generic" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": true + } + ], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface" + ] + } + } + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off" + } + } +} diff --git a/node_modules/micromark-extension-math/readme.md b/node_modules/micromark-extension-math/readme.md new file mode 100644 index 0000000000..6b57c2ab8c --- /dev/null +++ b/node_modules/micromark-extension-math/readme.md @@ -0,0 +1,429 @@ +# micromark-extension-math + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support math (`$C_L$`). + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`math(options?)`](#mathoptions) + * [`mathHtml(options?)`](#mathhtmloptions) + * [`HtmlOptions`](#htmloptions) + * [`Options`](#options) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains two extensions that add support for math syntax +in markdown to [`micromark`][micromark]. + +As there is no spec for math in markdown, this extension follows how code +(fenced and text) works in Commonmark, but uses dollars. + +## When to use this + +This project is useful when you want to support math in markdown. +Extending markdown with a syntax extension makes the markdown less portable. +LaTeX equations are also quite hard. +But this mechanism works well when you want authors, that have some LaTeX +experience, to be able to embed rich diagrams of math in scientific text. + +You can use these extensions when you are working with [`micromark`][micromark] +already. + +When you need a syntax tree, you can combine this package with +[`mdast-util-math`][mdast-util-math]. + +All these packages are used [`remark-math`][remark-math], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +[npm][]: + +```sh +npm install micromark-extension-math +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {math, mathHtml} from 'https://esm.sh/micromark-extension-math@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say our document `example.md` contains: + +```markdown +Lift($L$) can be determined by Lift Coefficient ($C_L$) like the following equation. + +$$ +L = \frac{1}{2} \rho v^2 S C_L +$$ +``` + +…and our module `example.js` looks as follows: + +```js +import fs from 'node:fs/promises' +import {micromark} from 'micromark' +import {math, mathHtml} from 'micromark-extension-math' + +const output = micromark(await fs.readFile('example.md'), { + extensions: [math()], + htmlExtensions: [mathHtml()] +}) + +console.log(output) +``` + +…now running `node example.js` yields (abbreviated): + +```html +

      Lift() can be determined by Lift Coefficient () like the following equation.

      +
      +``` + +## API + +This package exports the identifiers [`math`][api-math] and +[`mathHtml`][api-math-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `math(options?)` + +Create an extension for `micromark` to enable math syntax. + +###### Parameters + +* `options` ([`Options`][api-options], default: `{}`) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `extensions`, to enable math +syntax ([`Extension`][micromark-extension]). + +### `mathHtml(options?)` + +Create an extension for `micromark` to support math when serializing to HTML. + +> 👉 **Note**: this uses KaTeX to render math. + +###### Parameters + +* `options` ([`HtmlOptions`][api-html-options], default: `{}`) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions`, to support +math when serializing to HTML ([`HtmlExtension`][micromark-html-extension]). + +### `HtmlOptions` + +Configuration for HTML output (optional). + +> 👉 **Note**: passed to [`katex.renderToString`][katex-options]. +> `displayMode` is overwritten by this plugin, to `false` for math in text +> (inline), and `true` for math in flow (block). + +###### Type + +```ts +type Options = Omit +``` + +### `Options` + +Configuration (TypeScript type). + +###### Fields + +* `singleDollarTextMath` (`boolean`, default: `true`) + — whether to support math (text, inline) with a single dollar. + Single dollars work in Pandoc and many other places, but often interfere + with “normal” dollars in text. + If you turn this off, you use two or more dollars for text math. + +## Authoring + +When authoring markdown with math, keep in mind that math doesn’t work in most +places. +Notably, GitHub currently has a really weird crappy client-side regex-based +thing. +But on your own (math-heavy?) site it can be great! +You can use code (fenced) with an info string of `math` to improve this, as +that works in many places. + +## HTML + +Math (flow) does not relate to HTML elements. +`MathML`, which is sort of like SVG but for math, exists but it doesn’t work +well and isn’t widely supported. +Instead, this uses [KaTeX][], which generates MathML as a fallback but also +generates a bunch of divs and spans so math look pretty. +The KaTeX result is wrapped in `
      ` (for flow, block) and `` (for text, +inline) elements, with two classes: `math` and either `math-display` or +`math-inline`. + +When turning markdown into HTML, each line ending in math (text) is turned +into a space. + +## CSS + +The HTML produced by KaTeX requires CSS to render correctly. +You should use `katex.css` somewhere on the page where the math is shown to +style it properly. +At the time of writing, the last version is: + + + +```html + +``` + +## Syntax + +Math forms with the following BNF: + +```bnf +; Restriction: the number of markers in the closing sequence must be equal +; to the number of markers in the opening sequence. +math_text ::= sequence_text 1*byte sequence_text +math_flow ::= fence_open *( eol *line ) [ eol fence_close ] + +; Restriction: not preceded or followed by the marker. +sequence_text ::= 1*'$' + +fence_open ::= sequence_flow meta +; Restriction: the number of markers in the closing fence sequence must be +; equal to or greater than the number of markers in the opening fence +; sequence. +fence_close ::= sequence_flow *space_or_tab +sequence_flow ::= 2*'$' +; Restriction: the marker cannot occur in `meta` +meta ::= 1*line + +; Character groups for informational purposes. +byte ::= 0x00..=0xFFFF +eol ::= '\n' | '\r' | '\r\n' +line ::= byte - eol +``` + +The above grammar shows that it is not possible to create empty math (text). +It is possible to include the sequence marker (dollar) in math (text), by +wrapping it in bigger or smaller sequences: + +```markdown +Include more: $a$$b$ or include less: $$a$b$$. +``` + +It is also possible to include just one marker: + +```markdown +Include just one: $$ $ $$. +``` + +Sequences are “gready”, in that they cannot be preceded or followed by more +markers. +To illustrate: + +```markdown +Not math: $$x$. + +Not math: $x$$. + +Escapes work, this is math: \$$x$. + +Escapes work, this is math: $x$\$. +``` + +Yields: + +```html +

      Not math: $$x$.

      +

      Not math: $x$$.

      +

      Escapes work, this is math: $.

      +

      Escapes work, this is math: $.

      +``` + +That is because, when turning markdown into HTML, the first and last space, +if both exist and there is also a non-space in the math, are removed. +Line endings, at that stage, are considered as spaces. + +As the math (flow) construct occurs in flow, like all flow constructs, it must +be followed by an eol (line ending) or eof (end of file). + +The above grammar does not show how indentation of each line is handled. +To parse math (flow), let `x` be the number of `space_or_tab` characters +before the opening fence sequence, after interpreting tabs based on how many +virtual spaces they represent. +Each line of text is then allowed (not required) to be indented with up +to `x` spaces or tabs, which are then ignored as an indent instead of being +considered as part of the content. +This indent does not affect the closing fence. +It can be indented up to a separate 3 real or virtual spaces. +A bigger indent makes it part of the content instead of a fence. + +The `meta` part is interpreted as the [string][micromark-content-types] content +type. +That means that character escapes and character references are allowed. + +The optional `meta` part is ignored: it is not used when parsing or +rendering. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types [`HtmlOptions`][api-html-options] +and [`Options`][api-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-math@^3`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe assuming that you trust KaTeX. +Any vulnerability in it could open you to a [cross-site scripting (XSS)][xss] +attack. + +## Related + +* [`remark-math`][remark-math] + — remark (and rehype) plugins to support math +* [`mdast-util-math`][mdast-util-math] + — mdast utility to support math + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-math/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-math/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-math.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-math + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-math.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-math + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-math + +[size]: https://bundlejs.com/?q=micromark-extension-math + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-content-types]: https://github.com/micromark/micromark#content-types + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[mdast-util-math]: https://github.com/syntax-tree/mdast-util-math + +[remark-math]: https://github.com/remarkjs/remark-math + +[katex]: https://katex.org + +[katex-options]: https://katex.org/docs/options.html + +[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting + +[api-math]: #mathoptions + +[api-math-html]: #mathhtmloptions + +[api-options]: #options + +[api-html-options]: #htmloptions diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts b/node_modules/micromark-factory-destination/dev/index.d.ts new file mode 100644 index 0000000000..1d5e02a5d8 --- /dev/null +++ b/node_modules/micromark-factory-destination/dev/index.d.ts @@ -0,0 +1,42 @@ +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts.map b/node_modules/micromark-factory-destination/dev/index.d.ts.map new file mode 100644 index 0000000000..84746ee217 --- /dev/null +++ b/node_modules/micromark-factory-destination/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.js b/node_modules/micromark-factory-destination/dev/index.js new file mode 100644 index 0000000000..a4816fdc0d --- /dev/null +++ b/node_modules/micromark-factory-destination/dev/index.js @@ -0,0 +1,255 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import { + asciiControl, + markdownLineEndingOrSpace, + markdownLineEnding +} from 'micromark-util-character' +import {codes, constants, types} from 'micromark-util-symbol' + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + + return start + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === codes.lessThan) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if ( + code === codes.eof || + code === codes.space || + code === codes.rightParenthesis || + asciiControl(code) + ) { + return nok(code) + } + + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === codes.greaterThan) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + + effects.enter(stringType) + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === codes.greaterThan) { + effects.exit(types.chunkString) + effects.exit(stringType) + return enclosedBefore(code) + } + + if ( + code === codes.eof || + code === codes.lessThan || + markdownLineEnding(code) + ) { + return nok(code) + } + + effects.consume(code) + return code === codes.backslash ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if ( + code === codes.lessThan || + code === codes.greaterThan || + code === codes.backslash + ) { + effects.consume(code) + return enclosed + } + + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === codes.eof || + code === codes.rightParenthesis || + markdownLineEndingOrSpace(code)) + ) { + effects.exit(types.chunkString) + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + + if (balance < limit && code === codes.leftParenthesis) { + effects.consume(code) + balance++ + return raw + } + + if (code === codes.rightParenthesis) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if ( + code === codes.eof || + code === codes.space || + code === codes.leftParenthesis || + asciiControl(code) + ) { + return nok(code) + } + + effects.consume(code) + return code === codes.backslash ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if ( + code === codes.leftParenthesis || + code === codes.rightParenthesis || + code === codes.backslash + ) { + effects.consume(code) + return raw + } + + return raw(code) + } +} diff --git a/node_modules/micromark-factory-destination/index.d.ts b/node_modules/micromark-factory-destination/index.d.ts new file mode 100644 index 0000000000..1d5e02a5d8 --- /dev/null +++ b/node_modules/micromark-factory-destination/index.d.ts @@ -0,0 +1,42 @@ +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.d.ts.map b/node_modules/micromark-factory-destination/index.d.ts.map new file mode 100644 index 0000000000..84746ee217 --- /dev/null +++ b/node_modules/micromark-factory-destination/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.js b/node_modules/micromark-factory-destination/index.js new file mode 100644 index 0000000000..eeb60de6d7 --- /dev/null +++ b/node_modules/micromark-factory-destination/index.js @@ -0,0 +1,206 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character'; +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) { + const limit = max || Number.POSITIVE_INFINITY; + let balance = 0; + return start; + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type); + effects.enter(literalType); + effects.enter(literalMarkerType); + effects.consume(code); + effects.exit(literalMarkerType); + return enclosedBefore; + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code); + } + effects.enter(type); + effects.enter(rawType); + effects.enter(stringType); + effects.enter("chunkString", { + contentType: "string" + }); + return raw(code); + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType); + effects.consume(code); + effects.exit(literalMarkerType); + effects.exit(literalType); + effects.exit(type); + return ok; + } + effects.enter(stringType); + effects.enter("chunkString", { + contentType: "string" + }); + return enclosed(code); + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit("chunkString"); + effects.exit(stringType); + return enclosedBefore(code); + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code); + } + effects.consume(code); + return code === 92 ? enclosedEscape : enclosed; + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code); + return enclosed; + } + return enclosed(code); + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) { + effects.exit("chunkString"); + effects.exit(stringType); + effects.exit(rawType); + effects.exit(type); + return ok(code); + } + if (balance < limit && code === 40) { + effects.consume(code); + balance++; + return raw; + } + if (code === 41) { + effects.consume(code); + balance--; + return raw; + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code); + } + effects.consume(code); + return code === 92 ? rawEscape : raw; + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code); + return raw; + } + return raw(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/license b/node_modules/micromark-factory-destination/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-destination/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-destination/package.json b/node_modules/micromark-factory-destination/package.json new file mode 100644 index 0000000000..0863cb696d --- /dev/null +++ b/node_modules/micromark-factory-destination/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-factory-destination", + "version": "2.0.1", + "description": "micromark factory to parse destinations (found in resources, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "destination" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-destination", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "max-params": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-destination/readme.md b/node_modules/micromark-factory-destination/readme.md new file mode 100644 index 0000000000..f4899d74da --- /dev/null +++ b/node_modules/micromark-factory-destination/readme.md @@ -0,0 +1,234 @@ +# micromark-factory-destination + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse destinations (found in resources, definitions). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryDestination(…)`](#factorydestination) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse destinations. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-destination +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factoryDestination} from 'https://esm.sh/micromark-factory-destination@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factoryDestination} from 'micromark-factory-destination' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function open(code) { + if (code === codes.rightParenthesis) { + return end(code) + } + + return factoryDestination( + effects, + destinationAfter, + nok, + types.resourceDestination, + types.resourceDestinationLiteral, + types.resourceDestinationLiteralMarker, + types.resourceDestinationRaw, + types.resourceDestinationString, + constants.linkResourceDestinationBalanceMax + )(code) + } + + // … +} +``` + +## API + +This module exports the identifier +[`factoryDestination`][api-factory-destination]. +There is no default export. + +### `factoryDestination(…)` + +Parse destinations. + +###### Examples + +```markdown + +b> + + +a +a\)b +a(b)c +a(b) +``` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `nok` (`State`) + — state switched to when unsuccessful +* `type` (`string`) + — type for whole (`` or `b`) +* `literalType` (`string`) + — type when enclosed (``) +* `literalMarkerType` (`string`) + — type for enclosing (`<` and `>`) +* `rawType` (`string`) + — type when not enclosed (`b`) +* `stringType` (`string`) + — type for the value (`a` or `b`) +* `max` (`number`, default: `Infinity`) + — depth of nested parens (inclusive) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-destination@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-destination.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-destination + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-destination + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-destination + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-destination]: #factorydestination diff --git a/node_modules/micromark-factory-label/dev/index.d.ts b/node_modules/micromark-factory-label/dev/index.d.ts new file mode 100644 index 0000000000..99f5bdad42 --- /dev/null +++ b/node_modules/micromark-factory-label/dev/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +import type { TokenizeContext } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.d.ts.map b/node_modules/micromark-factory-label/dev/index.d.ts.map new file mode 100644 index 0000000000..fe94eeea2d --- /dev/null +++ b/node_modules/micromark-factory-label/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.js b/node_modules/micromark-factory-label/dev/index.js new file mode 100644 index 0000000000..242f0ced9c --- /dev/null +++ b/node_modules/micromark-factory-label/dev/index.js @@ -0,0 +1,172 @@ +/** + * @import { + * Effects, + * State, + * TokenizeContext, + * TokenType + * } from 'micromark-util-types' + */ + +import {ok as assert} from 'devlop' +import {markdownLineEnding, markdownSpace} from 'micromark-util-character' +import {codes, constants, types} from 'micromark-util-symbol' + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + assert(code === codes.leftSquareBracket, 'expected `[`') + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > constants.linkReferenceSizeMax || + code === codes.eof || + code === codes.leftSquareBracket || + (code === codes.rightSquareBracket && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === codes.caret && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + + if (code === codes.rightSquareBracket) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter(types.lineEnding) + effects.consume(code) + effects.exit(types.lineEnding) + return atBreak + } + + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === codes.eof || + code === codes.leftSquareBracket || + code === codes.rightSquareBracket || + markdownLineEnding(code) || + size++ > constants.linkReferenceSizeMax + ) { + effects.exit(types.chunkString) + return atBreak(code) + } + + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === codes.backslash ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if ( + code === codes.leftSquareBracket || + code === codes.backslash || + code === codes.rightSquareBracket + ) { + effects.consume(code) + size++ + return labelInside + } + + return labelInside(code) + } +} diff --git a/node_modules/micromark-factory-label/index.d.ts b/node_modules/micromark-factory-label/index.d.ts new file mode 100644 index 0000000000..99f5bdad42 --- /dev/null +++ b/node_modules/micromark-factory-label/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +import type { TokenizeContext } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.d.ts.map b/node_modules/micromark-factory-label/index.d.ts.map new file mode 100644 index 0000000000..fe94eeea2d --- /dev/null +++ b/node_modules/micromark-factory-label/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.js b/node_modules/micromark-factory-label/index.js new file mode 100644 index 0000000000..269340bb85 --- /dev/null +++ b/node_modules/micromark-factory-label/index.js @@ -0,0 +1,148 @@ +/** + * @import { + * Effects, + * State, + * TokenizeContext, + * TokenType + * } from 'micromark-util-types' + */ + +import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this; + let size = 0; + /** @type {boolean} */ + let seen; + return start; + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.enter(stringType); + return atBreak; + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (size > 999 || code === null || code === 91 || code === 93 && !seen || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) { + return nok(code); + } + if (code === 93) { + effects.exit(stringType); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.exit(type); + return ok; + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter("lineEnding"); + effects.consume(code); + effects.exit("lineEnding"); + return atBreak; + } + effects.enter("chunkString", { + contentType: "string" + }); + return labelInside(code); + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) { + effects.exit("chunkString"); + return atBreak(code); + } + effects.consume(code); + if (!seen) seen = !markdownSpace(code); + return code === 92 ? labelEscape : labelInside; + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code); + size++; + return labelInside; + } + return labelInside(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/license b/node_modules/micromark-factory-label/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-label/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-label/package.json b/node_modules/micromark-factory-label/package.json new file mode 100644 index 0000000000..db6dca2650 --- /dev/null +++ b/node_modules/micromark-factory-label/package.json @@ -0,0 +1,60 @@ +{ + "name": "micromark-factory-label", + "version": "2.0.1", + "description": "micromark factory to parse labels (found in media, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "label" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-label", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "max-params": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-label/readme.md b/node_modules/micromark-factory-label/readme.md new file mode 100644 index 0000000000..f4b4eab835 --- /dev/null +++ b/node_modules/micromark-factory-label/readme.md @@ -0,0 +1,224 @@ +# micromark-factory-label + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse labels (found in media, definitions). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryLabel(…)`](#factorylabel) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse labels. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-label +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factoryLabel} from 'https://esm.sh/micromark-factory-label@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {ok as assert} from 'devlop' +import {factoryLabel} from 'micromark-factory-label' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function start(code) { + assert(code === codes.leftSquareBracket, 'expected `[`') + effects.enter(types.definition) + return factoryLabel.call( + self, + effects, + labelAfter, + nok, + types.definitionLabel, + types.definitionLabelMarker, + types.definitionLabelString + )(code) + } + + // … +} +``` + +## API + +This module exports the identifier [`factoryLabel`][api-factory-label]. +There is no default export. + +### `factoryLabel(…)` + +Parse labels. + +> 👉 **Note**: labels in markdown are capped at 999 characters in the string. + +###### Examples + +```markdown +[a] +[a +b] +[a\]b] +``` + +###### Parameters + +* `this` (`TokenizeContext`) + — tokenize context +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `nok` (`State`) + — state switched to when unsuccessful +* `type` (`string`) + — type of the whole label (`[a]`) +* `markerType` (`string`) + — type for the markers (`[` and `]`) +* `stringType` (`string`) + — type for the identifier (`a`) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-label@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-label.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-label + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-label + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-label + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-label]: #factorylabel diff --git a/node_modules/micromark-factory-space/dev/index.d.ts b/node_modules/micromark-factory-space/dev/index.d.ts new file mode 100644 index 0000000000..d9a30cab17 --- /dev/null +++ b/node_modules/micromark-factory-space/dev/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.d.ts.map b/node_modules/micromark-factory-space/dev/index.d.ts.map new file mode 100644 index 0000000000..42d1279235 --- /dev/null +++ b/node_modules/micromark-factory-space/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.js b/node_modules/micromark-factory-space/dev/index.js new file mode 100644 index 0000000000..5cead758c1 --- /dev/null +++ b/node_modules/micromark-factory-space/dev/index.js @@ -0,0 +1,67 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import {markdownSpace} from 'micromark-util-character' + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + + effects.exit(type) + return ok(code) + } +} diff --git a/node_modules/micromark-factory-space/index.d.ts b/node_modules/micromark-factory-space/index.d.ts new file mode 100644 index 0000000000..d9a30cab17 --- /dev/null +++ b/node_modules/micromark-factory-space/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.d.ts.map b/node_modules/micromark-factory-space/index.d.ts.map new file mode 100644 index 0000000000..42d1279235 --- /dev/null +++ b/node_modules/micromark-factory-space/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.js b/node_modules/micromark-factory-space/index.js new file mode 100644 index 0000000000..646117df2d --- /dev/null +++ b/node_modules/micromark-factory-space/index.js @@ -0,0 +1,64 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import { markdownSpace } from 'micromark-util-character'; + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY; + let size = 0; + return start; + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type); + return prefix(code); + } + return ok(code); + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code); + return prefix; + } + effects.exit(type); + return ok(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/license b/node_modules/micromark-factory-space/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-space/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-space/package.json b/node_modules/micromark-factory-space/package.json new file mode 100644 index 0000000000..45828c493e --- /dev/null +++ b/node_modules/micromark-factory-space/package.json @@ -0,0 +1,55 @@ +{ + "name": "micromark-factory-space", + "version": "2.0.1", + "description": "micromark factory to parse markdown space (found in lots of places)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "space" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-space", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-space/readme.md b/node_modules/micromark-factory-space/readme.md new file mode 100644 index 0000000000..b9c01776d8 --- /dev/null +++ b/node_modules/micromark-factory-space/readme.md @@ -0,0 +1,225 @@ +# micromark-factory-space + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse [markdown space][markdown-space] (found in lots +of places). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factorySpace(…)`](#factoryspace) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse spaces and/or tabs. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-space +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factorySpace} from 'https://esm.sh/micromark-factory-space@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factorySpace} from 'micromark-factory-space' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function info(code) { + if (code === codes.eof || markdownLineEndingOrSpace(code)) { + effects.exit(types.chunkString) + effects.exit(types.codeFencedFenceInfo) + return factorySpace(effects, infoAfter, types.whitespace)(code) + } + + if (code === codes.graveAccent && code === marker) return nok(code) + effects.consume(code) + return info + } + + // … +} +``` + +## API + +This module exports the identifier [`factorySpace`][api-factory-space]. +There is no default export. + +### `factorySpace(…)` + +Parse spaces and tabs. + +There is no `nok` parameter: + +* spaces in markdown are often optional, in which case this factory can be + used and `ok` will be switched to whether spaces were found or not +* one line ending or space can be detected with `markdownSpace(code)` right + before using `factorySpace` + +###### Examples + +Where `␉` represents a tab (plus how much it expands) and `␠` represents a +single space. + +```markdown +␉ +␠␠␠␠ +␉␠ +``` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `type` (`string`) + — type (`' \t'`) +* `max` (`number`, default: `Infinity`) + — max (exclusive) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-space@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-space.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-space + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-space + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-space + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[markdown-space]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownspacecode + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-space]: #factoryspace diff --git a/node_modules/micromark-factory-title/dev/index.d.ts b/node_modules/micromark-factory-title/dev/index.d.ts new file mode 100644 index 0000000000..6d4b4be203 --- /dev/null +++ b/node_modules/micromark-factory-title/dev/index.d.ts @@ -0,0 +1,36 @@ +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.d.ts.map b/node_modules/micromark-factory-title/dev/index.d.ts.map new file mode 100644 index 0000000000..0108e7c976 --- /dev/null +++ b/node_modules/micromark-factory-title/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.js b/node_modules/micromark-factory-title/dev/index.js new file mode 100644 index 0000000000..4774214cbb --- /dev/null +++ b/node_modules/micromark-factory-title/dev/index.js @@ -0,0 +1,169 @@ +/** + * @import { + * Code, + * Effects, + * State, + * TokenType + * } from 'micromark-util-types' + */ + +import {factorySpace} from 'micromark-factory-space' +import {markdownLineEnding} from 'micromark-util-character' +import {codes, constants, types} from 'micromark-util-symbol' + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker + + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if ( + code === codes.quotationMark || + code === codes.apostrophe || + code === codes.leftParenthesis + ) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === codes.leftParenthesis ? codes.rightParenthesis : code + return begin + } + + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + + if (code === codes.eof) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter(types.lineEnding) + effects.consume(code) + effects.exit(types.lineEnding) + return factorySpace(effects, atBreak, types.linePrefix) + } + + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === codes.eof || markdownLineEnding(code)) { + effects.exit(types.chunkString) + return atBreak(code) + } + + effects.consume(code) + return code === codes.backslash ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === codes.backslash) { + effects.consume(code) + return inside + } + + return inside(code) + } +} diff --git a/node_modules/micromark-factory-title/index.d.ts b/node_modules/micromark-factory-title/index.d.ts new file mode 100644 index 0000000000..6d4b4be203 --- /dev/null +++ b/node_modules/micromark-factory-title/index.d.ts @@ -0,0 +1,36 @@ +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.d.ts.map b/node_modules/micromark-factory-title/index.d.ts.map new file mode 100644 index 0000000000..0108e7c976 --- /dev/null +++ b/node_modules/micromark-factory-title/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.js b/node_modules/micromark-factory-title/index.js new file mode 100644 index 0000000000..02c8026c1e --- /dev/null +++ b/node_modules/micromark-factory-title/index.js @@ -0,0 +1,158 @@ +/** + * @import { + * Code, + * Effects, + * State, + * TokenType + * } from 'micromark-util-types' + */ + +import { factorySpace } from 'micromark-factory-space'; +import { markdownLineEnding } from 'micromark-util-character'; +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker; + return start; + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + marker = code === 40 ? 41 : code; + return begin; + } + return nok(code); + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.exit(type); + return ok; + } + effects.enter(stringType); + return atBreak(code); + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType); + return begin(marker); + } + if (code === null) { + return nok(code); + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter("lineEnding"); + effects.consume(code); + effects.exit("lineEnding"); + return factorySpace(effects, atBreak, "linePrefix"); + } + effects.enter("chunkString", { + contentType: "string" + }); + return inside(code); + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit("chunkString"); + return atBreak(code); + } + effects.consume(code); + return code === 92 ? escape : inside; + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code); + return inside; + } + return inside(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/license b/node_modules/micromark-factory-title/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-title/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-title/package.json b/node_modules/micromark-factory-title/package.json new file mode 100644 index 0000000000..f643a5dea3 --- /dev/null +++ b/node_modules/micromark-factory-title/package.json @@ -0,0 +1,58 @@ +{ + "name": "micromark-factory-title", + "version": "2.0.1", + "description": "micromark factory to parse markdown titles (found in resources, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "title" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-title", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "max-params": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-title/readme.md b/node_modules/micromark-factory-title/readme.md new file mode 100644 index 0000000000..ff51cbdebe --- /dev/null +++ b/node_modules/micromark-factory-title/readme.md @@ -0,0 +1,229 @@ +# micromark-factory-title + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse markdown titles (found in resources, +definitions). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryTitle(…)`](#factorytitle) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse titles. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-title +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factorySpace} from 'https://esm.sh/micromark-factory-title@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factoryTitle} from 'micromark-factory-title' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function before(code) { + if ( + code === codes.quotationMark || + code === codes.apostrophe || + code === codes.leftParenthesis + ) { + return factoryTitle( + effects, + factorySpace(effects, after, types.whitespace), + nok, + types.definitionTitle, + types.definitionTitleMarker, + types.definitionTitleString + )(code) + } + + return nok(code) + } + + // … +} +``` + +## API + +This module exports the identifier [`factoryTitle`][api-factory-title]. +There is no default export. + +### `factoryTitle(…)` + +Parse titles. + +###### Examples + +```markdown +"a" +'b' +(c) +"a +b" +'a + b' +(a\)b) +``` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `nok` (`State`) + — state switched to when unsuccessful +* `type` (`string`) + — type of the whole title (`"a"`, `'b'`, `(c)`) +* `markerType` (`string`) + — type for the markers (`"`, `'`, `(`, and `)`) +* `stringType` (`string`) + — type for the value (`a`) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-title@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-title.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-title + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-title + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-title + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-title]: #factorytitle diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts b/node_modules/micromark-factory-whitespace/dev/index.d.ts new file mode 100644 index 0000000000..52ca4b85bc --- /dev/null +++ b/node_modules/micromark-factory-whitespace/dev/index.d.ts @@ -0,0 +1,22 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects: Effects, ok: State): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts.map b/node_modules/micromark-factory-whitespace/dev/index.d.ts.map new file mode 100644 index 0000000000..5169dc46ad --- /dev/null +++ b/node_modules/micromark-factory-whitespace/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.js b/node_modules/micromark-factory-whitespace/dev/index.js new file mode 100644 index 0000000000..3aa9e37b2d --- /dev/null +++ b/node_modules/micromark-factory-whitespace/dev/index.js @@ -0,0 +1,53 @@ +/** + * @import {Effects, State} from 'micromark-util-types' + */ + +import {factorySpace} from 'micromark-factory-space' +import {markdownLineEnding, markdownSpace} from 'micromark-util-character' +import {types} from 'micromark-util-symbol' + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter(types.lineEnding) + effects.consume(code) + effects.exit(types.lineEnding) + seen = true + return start + } + + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? types.linePrefix : types.lineSuffix + )(code) + } + + return ok(code) + } +} diff --git a/node_modules/micromark-factory-whitespace/index.d.ts b/node_modules/micromark-factory-whitespace/index.d.ts new file mode 100644 index 0000000000..52ca4b85bc --- /dev/null +++ b/node_modules/micromark-factory-whitespace/index.d.ts @@ -0,0 +1,22 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects: Effects, ok: State): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.d.ts.map b/node_modules/micromark-factory-whitespace/index.d.ts.map new file mode 100644 index 0000000000..5169dc46ad --- /dev/null +++ b/node_modules/micromark-factory-whitespace/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.js b/node_modules/micromark-factory-whitespace/index.js new file mode 100644 index 0000000000..02243add41 --- /dev/null +++ b/node_modules/micromark-factory-whitespace/index.js @@ -0,0 +1,44 @@ +/** + * @import {Effects, State} from 'micromark-util-types' + */ + +import { factorySpace } from 'micromark-factory-space'; +import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen; + return start; + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter("lineEnding"); + effects.consume(code); + effects.exit("lineEnding"); + seen = true; + return start; + } + if (markdownSpace(code)) { + return factorySpace(effects, start, seen ? "linePrefix" : "lineSuffix")(code); + } + return ok(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/license b/node_modules/micromark-factory-whitespace/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-whitespace/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-whitespace/package.json b/node_modules/micromark-factory-whitespace/package.json new file mode 100644 index 0000000000..ce733bd06e --- /dev/null +++ b/node_modules/micromark-factory-whitespace/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-factory-whitespace", + "version": "2.0.1", + "description": "micromark factory to parse markdown whitespace (found in lots of places)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "whitespace" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-whitespace", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-whitespace/readme.md b/node_modules/micromark-factory-whitespace/readme.md new file mode 100644 index 0000000000..a846406a52 --- /dev/null +++ b/node_modules/micromark-factory-whitespace/readme.md @@ -0,0 +1,205 @@ +# micromark-factory-whitespace + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse [markdown line endings or spaces][ws] (found in +lots of places). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryWhitespace(…)`](#factorywhitespace) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse whitespace. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-whitespace +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factoryWhitespace} from 'https://esm.sh/micromark-factory-whitespace@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factoryWhitespace} from 'micromark-factory-whitespace' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeTitle(effects, ok, nok) { + return start + + /** @type {State} */ + function start(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, before)(code) + : nok(code) + } + + // … +} +``` + +## API + +This module exports the identifier +[`factoryWhitespace`][api-factory-whitespace]. +There is no default export. + +### `factoryWhitespace(…)` + +Parse spaces and tabs. + +There is no `nok` parameter: + +* line endings or spaces in markdown are often optional, in which case this + factory can be used and `ok` will be switched to whether spaces were found + or not +* one line ending or space can be detected with + [`markdownLineEndingOrSpace(code)`][ws] right before using + `factoryWhitespace` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-whitespace@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-whitespace.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-whitespace + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-whitespace + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-whitespace + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[ws]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownlineendingorspacecode + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-whitespace]: #factorywhitespace diff --git a/node_modules/micromark-util-character/dev/index.d.ts b/node_modules/micromark-util-character/dev/index.d.ts new file mode 100644 index 0000000000..fe5289573d --- /dev/null +++ b/node_modules/micromark-util-character/dev/index.d.ts @@ -0,0 +1,195 @@ +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code: Code): boolean; +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code: Code): boolean; +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit: (code: Code) => boolean; +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace: (code: Code) => boolean; +import type { Code } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.d.ts.map b/node_modules/micromark-util-character/dev/index.d.ts.map new file mode 100644 index 0000000000..8ded3c1570 --- /dev/null +++ b/node_modules/micromark-util-character/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.js b/node_modules/micromark-util-character/dev/index.js new file mode 100644 index 0000000000..123745e860 --- /dev/null +++ b/node_modules/micromark-util-character/dev/index.js @@ -0,0 +1,252 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +import {codes} from 'micromark-util-symbol' + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < codes.space || code === codes.del) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code) { + return code !== null && code < codes.horizontalTab +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code) { + return code !== null && (code < codes.nul || code === codes.space) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code) { + return ( + code === codes.horizontalTab || + code === codes.virtualSpace || + code === codes.space + ) +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * Expression. + * @returns {(code: Code) => boolean} + * Check. + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && code > -1 && regex.test(String.fromCharCode(code)) + } +} diff --git a/node_modules/micromark-util-character/index.d.ts b/node_modules/micromark-util-character/index.d.ts new file mode 100644 index 0000000000..fe5289573d --- /dev/null +++ b/node_modules/micromark-util-character/index.d.ts @@ -0,0 +1,195 @@ +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code: Code): boolean; +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code: Code): boolean; +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit: (code: Code) => boolean; +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace: (code: Code) => boolean; +import type { Code } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.d.ts.map b/node_modules/micromark-util-character/index.d.ts.map new file mode 100644 index 0000000000..8ded3c1570 --- /dev/null +++ b/node_modules/micromark-util-character/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.js b/node_modules/micromark-util-character/index.js new file mode 100644 index 0000000000..13698f04f2 --- /dev/null +++ b/node_modules/micromark-util-character/index.js @@ -0,0 +1,246 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha = regexCheck(/[A-Za-z]/); + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/); + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ); +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit = regexCheck(/\d/); + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/); + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/); + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code) { + return code !== null && code < -2; +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32); +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code) { + return code === -2 || code === -1 || code === 32; +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u); + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace = regexCheck(/\s/); + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * Expression. + * @returns {(code: Code) => boolean} + * Check. + */ +function regexCheck(regex) { + return check; + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && code > -1 && regex.test(String.fromCharCode(code)); + } +} \ No newline at end of file diff --git a/node_modules/micromark-util-character/license b/node_modules/micromark-util-character/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-character/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-character/package.json b/node_modules/micromark-util-character/package.json new file mode 100644 index 0000000000..8af57e3999 --- /dev/null +++ b/node_modules/micromark-util-character/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-util-character", + "version": "2.1.1", + "description": "micromark utility to handle character codes", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "character" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-character", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-character/readme.md b/node_modules/micromark-util-character/readme.md new file mode 100644 index 0000000000..2356e4720f --- /dev/null +++ b/node_modules/micromark-util-character/readme.md @@ -0,0 +1,446 @@ +# micromark-util-character + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to handle [character codes][code]. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`asciiAlpha(code)`](#asciialphacode) + * [`asciiAlphanumeric(code)`](#asciialphanumericcode) + * [`asciiAtext(code)`](#asciiatextcode) + * [`asciiControl(code)`](#asciicontrolcode) + * [`asciiDigit(code)`](#asciidigitcode) + * [`asciiHexDigit(code)`](#asciihexdigitcode) + * [`asciiPunctuation(code)`](#asciipunctuationcode) + * [`markdownLineEnding(code)`](#markdownlineendingcode) + * [`markdownLineEndingOrSpace(code)`](#markdownlineendingorspacecode) + * [`markdownSpace(code)`](#markdownspacecode) + * [`unicodePunctuation(code)`](#unicodepunctuationcode) + * [`unicodeWhitespace(code)`](#unicodewhitespacecode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes algorithms to check whether characters match groups. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-character +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import * as character from 'https://esm.sh/micromark-util-character@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {asciiAlpha} from 'micromark-util-character' + +console.log(asciiAlpha(64)) // false +console.log(asciiAlpha(65)) // true +``` + +## API + +This module exports the identifiers +[`asciiAlpha`][api-ascii-alpha], +[`asciiAlphanumeric`][api-ascii-alphanumeric], +[`asciiAtext`][api-ascii-atext], +[`asciiControl`][api-ascii-control], +[`asciiDigit`][api-ascii-digit], +[`asciiHexDigit`][api-ascii-hex-digit], +[`asciiPunctuation`][api-ascii-punctuation], +[`markdownLineEnding`][api-markdown-line-ending], +[`markdownLineEndingOrSpace`][api-markdown-line-ending-or-space], +[`markdownSpace`][api-markdown-space], +[`unicodePunctuation`][api-unicode-punctuation], +[`unicodeWhitespace`][api-unicode-whitespace]. +There is no default export. + +### `asciiAlpha(code)` + +Check whether the [character code][code] represents an ASCII alpha (`a` through +`z`, case insensitive). + +An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + +An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) +to U+005A (`Z`). + +An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) +to U+007A (`z`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiAlphanumeric(code)` + +Check whether the [character code][code] represents an ASCII alphanumeric (`a` +through `z`, case insensitive, or `0` through `9`). + +An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha +(see `asciiAlpha`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiAtext(code)` + +Check whether the [character code][code] represents an ASCII atext. + +atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in +the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), +U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F +SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E +CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE +(`{`) to U+007E TILDE (`~`) (**\[RFC5322]**). + +See **\[RFC5322]**:\ +[Internet Message Format](https://tools.ietf.org/html/rfc5322).\ +P. Resnick.\ +IETF. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiControl(code)` + +Check whether a [character code][code] is an ASCII control character. + +An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) +to U+001F (US), or U+007F (DEL). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiDigit(code)` + +Check whether the [character code][code] represents an ASCII digit (`0` through +`9`). + +An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to +U+0039 (`9`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiHexDigit(code)` + +Check whether the [character code][code] represents an ASCII hex digit (`a` +through `f`, case insensitive, or `0` through `9`). + +An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex +digit, or an ASCII lower hex digit. + +An **ASCII upper hex digit** is a character in the inclusive range U+0041 +(`A`) to U+0046 (`F`). + +An **ASCII lower hex digit** is a character in the inclusive range U+0061 +(`a`) to U+0066 (`f`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiPunctuation(code)` + +Check whether the [character code][code] represents ASCII punctuation. + +An **ASCII punctuation** is a character in the inclusive ranges U+0021 +EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT +SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT +(`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `markdownLineEnding(code)` + +Check whether a [character code][code] is a markdown line ending. + +A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN +LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + +In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE +RETURN (CR) are replaced by these virtual characters depending on whether +they occurred together. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `markdownLineEndingOrSpace(code)` + +Check whether a [character code][code] is a markdown line ending (see +`markdownLineEnding`) or markdown space (see `markdownSpace`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `markdownSpace(code)` + +Check whether a [character code][code] is a markdown space. + +A **markdown space** is the concrete character U+0020 SPACE (SP) and the +virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + +In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is +replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL +SPACE (VS) characters, depending on the column at which the tab occurred. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `unicodePunctuation(code)` + +Check whether the [character code][code] represents Unicode punctuation. + +A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, +Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` +(Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` +(Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII +punctuation (see `asciiPunctuation`) (**\[UNICODE]**). + +See **\[UNICODE]**:\ +[The Unicode Standard](https://www.unicode.org/versions/).\ +Unicode Consortium. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `unicodeWhitespace(code)` + +Check whether the [character code][code] represents Unicode whitespace. + +Note that this does handle micromark specific markdown whitespace characters. +See `markdownLineEndingOrSpace` to check that. + +A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, +Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), +U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + +See **\[UNICODE]**:\ +[The Unicode Standard](https://www.unicode.org/versions/).\ +Unicode Consortium. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-character@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-character.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-character + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-character + +[bundle-size]: https://bundlejs.com/?q=micromark-util-character + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[code]: https://github.com/micromark/micromark#preprocess + +[api-ascii-alpha]: #asciialphacode + +[api-ascii-alphanumeric]: #asciialphanumericcode + +[api-ascii-atext]: #asciiatextcode + +[api-ascii-control]: #asciicontrolcode + +[api-ascii-digit]: #asciidigitcode + +[api-ascii-hex-digit]: #asciihexdigitcode + +[api-ascii-punctuation]: #asciipunctuationcode + +[api-markdown-line-ending]: #markdownlineendingcode + +[api-markdown-line-ending-or-space]: #markdownlineendingorspacecode + +[api-markdown-space]: #markdownspacecode + +[api-unicode-punctuation]: #unicodepunctuationcode + +[api-unicode-whitespace]: #unicodewhitespacecode diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts b/node_modules/micromark-util-chunked/dev/index.d.ts new file mode 100644 index 0000000000..ed04ba20d0 --- /dev/null +++ b/node_modules/micromark-util-chunked/dev/index.d.ts @@ -0,0 +1,41 @@ +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list: Array, start: number, remove: number, items: Array): undefined; +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list: Array, items: Array): Array; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts.map b/node_modules/micromark-util-chunked/dev/index.d.ts.map new file mode 100644 index 0000000000..432125397d --- /dev/null +++ b/node_modules/micromark-util-chunked/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.js b/node_modules/micromark-util-chunked/dev/index.js new file mode 100644 index 0000000000..7b6a18f871 --- /dev/null +++ b/node_modules/micromark-util-chunked/dev/index.js @@ -0,0 +1,89 @@ +import {constants} from 'micromark-util-symbol' + +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < constants.v8MaxSafeChunkSize) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice( + chunkStart, + chunkStart + constants.v8MaxSafeChunkSize + ) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + + chunkStart += constants.v8MaxSafeChunkSize + start += constants.v8MaxSafeChunkSize + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + + return items +} diff --git a/node_modules/micromark-util-chunked/index.d.ts b/node_modules/micromark-util-chunked/index.d.ts new file mode 100644 index 0000000000..ed04ba20d0 --- /dev/null +++ b/node_modules/micromark-util-chunked/index.d.ts @@ -0,0 +1,41 @@ +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list: Array, start: number, remove: number, items: Array): undefined; +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list: Array, items: Array): Array; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.d.ts.map b/node_modules/micromark-util-chunked/index.d.ts.map new file mode 100644 index 0000000000..432125397d --- /dev/null +++ b/node_modules/micromark-util-chunked/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.js b/node_modules/micromark-util-chunked/index.js new file mode 100644 index 0000000000..3a4b262400 --- /dev/null +++ b/node_modules/micromark-util-chunked/index.js @@ -0,0 +1,81 @@ +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list, start, remove, items) { + const end = list.length; + let chunkStart = 0; + /** @type {Array} */ + let parameters; + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start; + } else { + start = start > end ? end : start; + } + remove = remove > 0 ? remove : 0; + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items); + parameters.unshift(start, remove); + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters); + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove); + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000); + parameters.unshift(start, 0); + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters); + chunkStart += 10000; + start += 10000; + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items); + return list; + } + return items; +} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/license b/node_modules/micromark-util-chunked/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-chunked/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-chunked/package.json b/node_modules/micromark-util-chunked/package.json new file mode 100644 index 0000000000..8a5c91d395 --- /dev/null +++ b/node_modules/micromark-util-chunked/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-util-chunked", + "version": "2.0.1", + "description": "micromark utility to splice and push with giant arrays", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "chunk", + "splice", + "push" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-chunked", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-chunked/readme.md b/node_modules/micromark-util-chunked/readme.md new file mode 100644 index 0000000000..6628fad732 --- /dev/null +++ b/node_modules/micromark-util-chunked/readme.md @@ -0,0 +1,219 @@ +# micromark-util-chunked + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to splice and push with giant arrays. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`push(list, items)`](#pushlist-items) + * [`splice(list, start, remove, items)`](#splicelist-start-remove-items) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to splice for giant arrays, which V8 bugs +out on. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-chunked +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {push, splice} from 'https://esm.sh/micromark-util-chunked@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {push, splice} from 'micromark-util-chunked' + +// … + +nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] +]) + +// … + +splice(events, open - 1, index - open + 3, nextEvents) + +// … +``` + +## API + +This module exports the identifiers [`push`][api-push] +and [`splice`][api-splice]. +There is no default export. + +### `push(list, items)` + +Append `items` (an array) at the end of `list` (another array). +When `list` was empty, returns `items` instead. + +This prevents a potentially expensive operation when `list` is empty, +and adds items in batches to prevent V8 from hanging. + +###### Parameters + +* `list` (`Array`) + — list to operate on +* `items` (`Array`) + — items to add to `list` + +###### Returns + +Either `list` or `items` (`Array`). + +### `splice(list, start, remove, items)` + +Like `Array#splice`, but smarter for giant arrays. + +`Array#splice` takes all items to be inserted as individual argument which +causes a stack overflow in V8 when trying to insert 100k items for instance. + +Otherwise, this does not return the removed items, and takes `items` as an +array instead of rest parameters. + +###### Parameters + +* `list` (`Array`) + — list to operate on +* `start` (`number`) + — index to remove/insert at (can be negative) +* `remove` (`number`) + — number of items to remove +* `items` (`Array`) + — items to inject into `list` + +###### Returns + +Nothing (`undefined`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-chunked@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-chunked.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-chunked + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-chunked + +[bundle-size]: https://bundlejs.com/?q=micromark-util-chunked + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-push]: #pushlist-items + +[api-splice]: #splicelist-start-remove-items diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts b/node_modules/micromark-util-classify-character/dev/index.d.ts new file mode 100644 index 0000000000..db98cd1fe9 --- /dev/null +++ b/node_modules/micromark-util-classify-character/dev/index.d.ts @@ -0,0 +1,18 @@ +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; +import type { Code } from 'micromark-util-types'; +import { constants } from 'micromark-util-symbol'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts.map b/node_modules/micromark-util-classify-character/dev/index.d.ts.map new file mode 100644 index 0000000000..9b63a5bedd --- /dev/null +++ b/node_modules/micromark-util-classify-character/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.js b/node_modules/micromark-util-classify-character/dev/index.js new file mode 100644 index 0000000000..0d82474555 --- /dev/null +++ b/node_modules/micromark-util-classify-character/dev/index.js @@ -0,0 +1,38 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +import { + markdownLineEndingOrSpace, + unicodePunctuation, + unicodeWhitespace +} from 'micromark-util-character' +import {codes, constants} from 'micromark-util-symbol' + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code) { + if ( + code === codes.eof || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return constants.characterGroupWhitespace + } + + if (unicodePunctuation(code)) { + return constants.characterGroupPunctuation + } +} diff --git a/node_modules/micromark-util-classify-character/index.d.ts b/node_modules/micromark-util-classify-character/index.d.ts new file mode 100644 index 0000000000..db98cd1fe9 --- /dev/null +++ b/node_modules/micromark-util-classify-character/index.d.ts @@ -0,0 +1,18 @@ +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; +import type { Code } from 'micromark-util-types'; +import { constants } from 'micromark-util-symbol'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.d.ts.map b/node_modules/micromark-util-classify-character/index.d.ts.map new file mode 100644 index 0000000000..9b63a5bedd --- /dev/null +++ b/node_modules/micromark-util-classify-character/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.js b/node_modules/micromark-util-classify-character/index.js new file mode 100644 index 0000000000..a9aebc6cb8 --- /dev/null +++ b/node_modules/micromark-util-classify-character/index.js @@ -0,0 +1,27 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +import { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character'; +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code) { + if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) { + return 1; + } + if (unicodePunctuation(code)) { + return 2; + } +} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/license b/node_modules/micromark-util-classify-character/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-classify-character/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-classify-character/package.json b/node_modules/micromark-util-classify-character/package.json new file mode 100644 index 0000000000..f424ff97e6 --- /dev/null +++ b/node_modules/micromark-util-classify-character/package.json @@ -0,0 +1,59 @@ +{ + "name": "micromark-util-classify-character", + "version": "2.0.1", + "description": "micromark utility to classify whether a character is whitespace or punctuation", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "attention", + "classify", + "character" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-classify-character", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-classify-character/readme.md b/node_modules/micromark-util-classify-character/readme.md new file mode 100644 index 0000000000..f0b3ee78dc --- /dev/null +++ b/node_modules/micromark-util-classify-character/readme.md @@ -0,0 +1,205 @@ +# micromark-util-classify-character + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to classify whether a character is whitespace or +punctuation. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`classifyCharacter(code)`](#classifycharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to classify characters into 3 categories. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-classify-character +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {classifyCharacter} from 'https://esm.sh/micromark-util-classify-character@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + return start + + // … + + /** @type {State} */ + function sequence(code) { + if (code === marker) { + // … + } + + const token = effects.exit('attentionSequence') + const after = classifyCharacter(code) + const open = + !after || (after === constants.characterGroupPunctuation && before) + const close = + !before || (before === constants.characterGroupPunctuation && after) + // … + } + + // … +} +``` + +## API + +This module exports the identifier +[`classifyCharacter`][api-classify-character]. +There is no default export. + +### `classifyCharacter(code)` + +Classify whether a code represents whitespace, punctuation, or something +else. + +Used for attention (emphasis, strong), whose sequences can open or close +based on the class of surrounding characters. + +> 👉 **Note**: eof (`null`) is seen as whitespace. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Group (`constants.characterGroupWhitespace`, +`constants.characterGroupPunctuation`, or `undefined`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-classify-character@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-classify-character.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-classify-character + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-classify-character + +[bundle-size]: https://bundlejs.com/?q=micromark-util-classify-character + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-classify-character]: #classifycharactercode diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts b/node_modules/micromark-util-combine-extensions/index.d.ts new file mode 100644 index 0000000000..dbd674cb8b --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/index.d.ts @@ -0,0 +1,22 @@ +/** + * Combine multiple syntax extensions into one. + * + * @param {ReadonlyArray} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +export function combineExtensions(extensions: ReadonlyArray): NormalizedExtension; +/** + * Combine multiple HTML extensions into one. + * + * @param {ReadonlyArray} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * Single combined HTML extension. + */ +export function combineHtmlExtensions(htmlExtensions: ReadonlyArray): HtmlExtension; +import type { Extension } from 'micromark-util-types'; +import type { NormalizedExtension } from 'micromark-util-types'; +import type { HtmlExtension } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts.map b/node_modules/micromark-util-combine-extensions/index.d.ts.map new file mode 100644 index 0000000000..e0ea7bf1ee --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,8CALW,aAAa,CAAC,SAAS,CAAC,GAEtB,mBAAmB,CAa/B;AA+DD;;;;;;;GAOG;AACH,sDALW,aAAa,CAAC,aAAa,CAAC,GAE1B,aAAa,CAazB;+BA1GS,sBAAsB;yCAAtB,sBAAsB;mCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.js b/node_modules/micromark-util-combine-extensions/index.js new file mode 100644 index 0000000000..bc28f6d9c3 --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/index.js @@ -0,0 +1,143 @@ +/** + * @import { + * Extension, + * Handles, + * HtmlExtension, + * NormalizedExtension + * } from 'micromark-util-types' + */ + +import {splice} from 'micromark-util-chunked' + +const hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {ReadonlyArray} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +export function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {undefined} + * Nothing. + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record} */ + const left = maybe || (all[hook] = {}) + /** @type {Record | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array} existing + * List of constructs to merge into. + * @param {Array} list + * List of constructs to merge. + * @returns {undefined} + * Nothing. + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {ReadonlyArray} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * Single combined HTML extension. + */ +export function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {undefined} + * Nothing. + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} diff --git a/node_modules/micromark-util-combine-extensions/license b/node_modules/micromark-util-combine-extensions/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-combine-extensions/package.json b/node_modules/micromark-util-combine-extensions/package.json new file mode 100644 index 0000000000..f46ff4099f --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/package.json @@ -0,0 +1,52 @@ +{ + "name": "micromark-util-combine-extensions", + "version": "2.0.1", + "description": "micromark utility to combine syntax or html extensions", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "extension", + "combine", + "merge" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-combine-extensions", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "guard-for-in": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-combine-extensions/readme.md b/node_modules/micromark-util-combine-extensions/readme.md new file mode 100644 index 0000000000..b9b6fc13e9 --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/readme.md @@ -0,0 +1,201 @@ +# micromark-util-combine-extensions + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to combine [syntax][] or [html][] extensions. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`combineExtensions(extensions)`](#combineextensionsextensions) + * [`combineHtmlExtensions(htmlExtensions)`](#combinehtmlextensionshtmlextensions) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package can merge multiple extensions into one. + +## When should I use this? + +This package might be useful when you are making “presets”, such as +[`micromark-extension-gfm`][micromark-extension-gfm]. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-combine-extensions +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {combineExtensions} from 'https://esm.sh/micromark-util-combine-extensions@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {gfmAutolinkLiteral} from 'micromark-extension-gfm-autolink-literal' +import {gfmStrikethrough} from 'micromark-extension-gfm-strikethrough' +import {gfmTable} from 'micromark-extension-gfm-table' +import {gfmTaskListItem} from 'micromark-extension-gfm-task-list-item' +import {combineExtensions} from 'micromark-util-combine-extensions' + +const gfm = combineExtensions([gfmAutolinkLiteral, gfmStrikethrough(), gfmTable, gfmTaskListItem]) +``` + +## API + +This module exports the identifiers +[`combineExtensions`][api-combine-extensions] and +[`combineHtmlExtensions`][api-combine-html-extensions]. +There is no default export. + +### `combineExtensions(extensions)` + +Combine multiple syntax extensions into one. + +###### Parameters + +* `extensions` (`Array`) + — list of syntax extensions + +###### Returns + +A single combined extension (`Extension`). + +### `combineHtmlExtensions(htmlExtensions)` + +Combine multiple html extensions into one. + +###### Parameters + +* `htmlExtensions` (`Array`) + — list of HTML extensions + +###### Returns + +A single combined HTML extension (`HtmlExtension`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-combine-extensions@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-combine-extensions.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-combine-extensions + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-combine-extensions + +[bundle-size]: https://bundlejs.com/?q=micromark-util-combine-extensions + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[syntax]: https://github.com/micromark/micromark#syntaxextension + +[html]: https://github.com/micromark/micromark#htmlextension + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[api-combine-extensions]: #combineextensionsextensions + +[api-combine-html-extensions]: #combinehtmlextensionshtmlextensions diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts new file mode 100644 index 0000000000..333bdbbd0e --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts @@ -0,0 +1,16 @@ +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value: string, base: number): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map new file mode 100644 index 0000000000..17f668f104 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js new file mode 100644 index 0000000000..a96c423833 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js @@ -0,0 +1,42 @@ +import {codes, values} from 'micromark-util-symbol' + +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + + if ( + // C0 except for HT, LF, FF, CR, space. + code < codes.ht || + code === codes.vt || + (code > codes.cr && code < codes.space) || + // Control character (DEL) of C0, and C1 controls. + (code > codes.tilde && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55_295 && code < 57_344) || + // Noncharacters. + (code > 64_975 && code < 65_008) || + /* eslint-disable no-bitwise */ + (code & 65_535) === 65_535 || + (code & 65_535) === 65_534 || + /* eslint-enable no-bitwise */ + // Out of range + code > 1_114_111 + ) { + return values.replacementCharacter + } + + return String.fromCodePoint(code) +} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts new file mode 100644 index 0000000000..333bdbbd0e --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts @@ -0,0 +1,16 @@ +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value: string, base: number): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map new file mode 100644 index 0000000000..17f668f104 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.js b/node_modules/micromark-util-decode-numeric-character-reference/index.js new file mode 100644 index 0000000000..1d75d7ba5c --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/index.js @@ -0,0 +1,32 @@ +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base); + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || code === 11 || code > 13 && code < 32 || + // Control character (DEL) of C0, and C1 controls. + code > 126 && code < 160 || + // Lone high surrogates and low surrogates. + code > 55_295 && code < 57_344 || + // Noncharacters. + code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */ + (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */ + // Out of range + code > 1_114_111) { + return "\uFFFD"; + } + return String.fromCodePoint(code); +} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/license b/node_modules/micromark-util-decode-numeric-character-reference/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-decode-numeric-character-reference/package.json b/node_modules/micromark-util-decode-numeric-character-reference/package.json new file mode 100644 index 0000000000..759e989b07 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/package.json @@ -0,0 +1,59 @@ +{ + "name": "micromark-util-decode-numeric-character-reference", + "version": "2.0.2", + "description": "micromark utility to decode numeric character references", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "decode", + "numeric", + "number", + "character", + "reference" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-decode-numeric-character-reference", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/readme.md b/node_modules/micromark-util-decode-numeric-character-reference/readme.md new file mode 100644 index 0000000000..4610c59bc9 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/readme.md @@ -0,0 +1,184 @@ +# micromark-util-decode-numeric-character-reference + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to decode numeric character references. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`decodeNumericCharacterReference(value, base)`](#decodenumericcharacterreferencevalue-base) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to decode numeric character references. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-decode-numeric-character-reference +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {decodeNumericCharacterReference} from 'https://esm.sh/micromark-util-decode-numeric-character-reference@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference' + +decodeNumericCharacterReference('41', 16) // 'A' +decodeNumericCharacterReference('65', 10) // 'A' +decodeNumericCharacterReference('A', 16) // '\n' +decodeNumericCharacterReference('7F', 16) // '�' - Control +decodeNumericCharacterReference('110000', 16) // '�' - Out of range +``` + +## API + +This module exports the identifier: +[`decodeNumericCharacterReference`][api-decode-numeric-character-reference]. +There is no default export. + +### `decodeNumericCharacterReference(value, base)` + +Turn the number (in string form as either hexa- or plain decimal) coming from +a numeric character reference into a character. + +Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes +non-characters and control characters safe. + +###### Parameters + +* `value` (`string`) + — value to decode +* `base` (`number`, probably `10` or `16`) + — numeric base + +###### Returns + +Character (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-decode-numeric-character-reference@2`, compatible with +Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier + +[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-decode-numeric-character-reference]: #decodenumericcharacterreferencevalue-base diff --git a/node_modules/micromark-util-encode/index.d.ts b/node_modules/micromark-util-encode/index.d.ts new file mode 100644 index 0000000000..760226f618 --- /dev/null +++ b/node_modules/micromark-util-encode/index.d.ts @@ -0,0 +1,14 @@ +/** + * Encode only the dangerous HTML characters. + * + * This ensures that certain characters which have special meaning in HTML are + * dealt with. + * Technically, we can skip `>` and `"` in many cases, but CM includes them. + * + * @param {string} value + * Value to encode. + * @returns {string} + * Encoded value. + */ +export function encode(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.d.ts.map b/node_modules/micromark-util-encode/index.d.ts.map new file mode 100644 index 0000000000..16eebb1cc4 --- /dev/null +++ b/node_modules/micromark-util-encode/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,8BALW,MAAM,GAEJ,MAAM,CAqBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.js b/node_modules/micromark-util-encode/index.js new file mode 100644 index 0000000000..397f1d4041 --- /dev/null +++ b/node_modules/micromark-util-encode/index.js @@ -0,0 +1,33 @@ +const characterReferences = {'"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'} + +/** + * Encode only the dangerous HTML characters. + * + * This ensures that certain characters which have special meaning in HTML are + * dealt with. + * Technically, we can skip `>` and `"` in many cases, but CM includes them. + * + * @param {string} value + * Value to encode. + * @returns {string} + * Encoded value. + */ +export function encode(value) { + return value.replace(/["&<>]/g, replace) + + /** + * @param {string} value + * Value to replace. + * @returns {string} + * Encoded value. + */ + function replace(value) { + return ( + '&' + + characterReferences[ + /** @type {keyof typeof characterReferences} */ (value) + ] + + ';' + ) + } +} diff --git a/node_modules/micromark-util-encode/license b/node_modules/micromark-util-encode/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-encode/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-encode/package.json b/node_modules/micromark-util-encode/package.json new file mode 100644 index 0000000000..a56c6b3b04 --- /dev/null +++ b/node_modules/micromark-util-encode/package.json @@ -0,0 +1,47 @@ +{ + "name": "micromark-util-encode", + "version": "2.0.1", + "description": "micromark utility to encode dangerous html characters", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "html", + "encode" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-string-replace-all": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-encode/readme.md b/node_modules/micromark-util-encode/readme.md new file mode 100644 index 0000000000..cd27292fe1 --- /dev/null +++ b/node_modules/micromark-util-encode/readme.md @@ -0,0 +1,176 @@ +# micromark-util-encode + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to encode dangerous html characters. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`encode(value)`](#encodevalue) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to make text safe for embedding in HTML. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-encode +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {encode} from 'https://esm.sh/micromark-util-encode@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {encode} from 'micromark-util-encode' + +encode('<3') // '<3' +``` + +## API + +This module exports the identifier [`encode`][api-encode]. +There is no default export. + +### `encode(value)` + +Encode only the dangerous HTML characters. + +This ensures that certain characters which have special meaning in HTML are +dealt with. +Technically, we can skip `>` and `"` in many cases, but CM includes them. + +###### Parameters + +* `value` (`string`) + — value to encode + +###### Returns + +Encoded value (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-encode@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-encode.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-encode + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-encode + +[bundle-size]: https://bundlejs.com/?q=micromark-util-encode + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-encode]: #encodevalue diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts b/node_modules/micromark-util-html-tag-name/index.d.ts new file mode 100644 index 0000000000..cd5ef317cd --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/index.d.ts @@ -0,0 +1,30 @@ +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +export const htmlBlockNames: string[]; +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +export const htmlRawNames: string[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts.map b/node_modules/micromark-util-html-tag-name/index.d.ts.map new file mode 100644 index 0000000000..56f2fc0f2e --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,sCA+DC;AAED;;;;;;;;;;;GAWG;AACH,oCAAkE"} \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.js b/node_modules/micromark-util-html-tag-name/index.js new file mode 100644 index 0000000000..fa0a0fd950 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/index.js @@ -0,0 +1,93 @@ +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +export const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +export const htmlRawNames = ['pre', 'script', 'style', 'textarea'] diff --git a/node_modules/micromark-util-html-tag-name/license b/node_modules/micromark-util-html-tag-name/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-html-tag-name/package.json b/node_modules/micromark-util-html-tag-name/package.json new file mode 100644 index 0000000000..9015e128c8 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/package.json @@ -0,0 +1,47 @@ +{ + "name": "micromark-util-html-tag-name", + "version": "2.0.1", + "description": "micromark utility with list of html tag names", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "html", + "tag", + "name" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-html-tag-name", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-html-tag-name/readme.md b/node_modules/micromark-util-html-tag-name/readme.md new file mode 100644 index 0000000000..ff16f68e74 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/readme.md @@ -0,0 +1,193 @@ +# micromark-util-html-tag-name + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility with list of html tag names. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`htmlBlockNames`](#htmlblocknames) + * [`htmlRawNames`](#htmlrawnames) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes a list of known tag names to markdown. + +## When should I use this? + +This package is only useful if you want to build an alternative to micromark. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-html-tag-name +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {htmlBlockNames, htmlRawNames} from 'https://esm.sh/micromark-util-html-tag-name@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name' + +console.log(htmlBlockNames) // ['address', 'article', …] +console.log(htmlRawNames) // ['pre', 'script', …] +``` + +## API + +This module exports the identifiers [`htmlBlockNames`][api-html-block-names] +and [`htmlRawNames`][api-html-raw-names]. +There is no default export. + +### `htmlBlockNames` + +List of lowercase HTML “block” tag names (`Array`). + +The list, when parsing HTML (flow), results in more relaxed rules (condition +6\). +Because they are known blocks, the HTML-like syntax doesn’t have to be strictly +parsed. +For tag names not in this list, a more strict algorithm (condition 7) is used +to detect whether the HTML-like syntax is seen as HTML (flow) or not. + +This is copied from: +. + +> 👉 **Note**: `search` was added in `CommonMark@0.31`. + +### `htmlRawNames` + +List of lowercase HTML “raw” tag names (`Array`). + +The list, when parsing HTML (flow), results in HTML that can include lines +without exiting, until a closing tag also in this list is found (condition +1\). + +This module is copied from: +. + +> 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-html-tag-name@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-html-tag-name.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-html-tag-name + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-html-tag-name + +[bundle-size]: https://bundlejs.com/?q=micromark-util-html-tag-name + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-html-block-names]: #htmlblocknames + +[api-html-raw-names]: #htmlrawnames diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts new file mode 100644 index 0000000000..96074f6031 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts @@ -0,0 +1,21 @@ +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map new file mode 100644 index 0000000000..684ad8d872 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.js b/node_modules/micromark-util-normalize-identifier/dev/index.js new file mode 100644 index 0000000000..ce4ce9b61c --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/dev/index.js @@ -0,0 +1,38 @@ +import {values} from 'micromark-util-symbol' + +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, values.space) + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts b/node_modules/micromark-util-normalize-identifier/index.d.ts new file mode 100644 index 0000000000..96074f6031 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/index.d.ts @@ -0,0 +1,21 @@ +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/index.d.ts.map new file mode 100644 index 0000000000..684ad8d872 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.js b/node_modules/micromark-util-normalize-identifier/index.js new file mode 100644 index 0000000000..f206021427 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/index.js @@ -0,0 +1,33 @@ +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value) { + return value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, " ") + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase().toUpperCase(); +} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/license b/node_modules/micromark-util-normalize-identifier/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-normalize-identifier/package.json b/node_modules/micromark-util-normalize-identifier/package.json new file mode 100644 index 0000000000..4fb1982df2 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/package.json @@ -0,0 +1,58 @@ +{ + "name": "micromark-util-normalize-identifier", + "version": "2.0.1", + "description": "micromark utility normalize identifiers (as found in references, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "normalize", + "id", + "identifier" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off", + "unicorn/prefer-string-replace-all": "off" + } + } +} diff --git a/node_modules/micromark-util-normalize-identifier/readme.md b/node_modules/micromark-util-normalize-identifier/readme.md new file mode 100644 index 0000000000..97e2383a1e --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/readme.md @@ -0,0 +1,187 @@ +# micromark-util-normalize-identifier + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility normalize identifiers. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`normalizeIdentifier(value)`](#normalizeidentifiervalue) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to normalize identifiers found in markdown. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-normalize-identifier +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {normalizeIdentifier} from 'https://esm.sh/micromark-util-normalize-identifier@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {normalizeIdentifier} from 'micromark-util-normalize-identifier' + +normalizeIdentifier(' a ') // 'A' +normalizeIdentifier('a\t\r\nb') // 'A B' +normalizeIdentifier('ТОЛПОЙ') // 'ТОЛПОЙ' +normalizeIdentifier('Толпой') // 'ТОЛПОЙ' +``` + +## API + +This module exports the identifier +[`normalizeIdentifier`][api-normalize-identifier]. +There is no default export. + +### `normalizeIdentifier(value)` + +Normalize an identifier (as found in references, definitions). + +Collapses markdown whitespace, trim, and then lower- and uppercase. + +Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their +lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different +uppercase character (U+0398 (`Θ`)). +So, to get a canonical form, we perform both lower- and uppercase. + +Using uppercase last makes sure keys will never interact with default +prototypal values (such as `constructor`): nothing in the prototype of `Object` +is uppercase. + +###### Parameters + +* `value` (`string`) + — identifier to normalize + +###### Returns + +Normalized identifier (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-normalize-identifier@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier + +[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-normalize-identifier]: #normalizeidentifiervalue diff --git a/node_modules/micromark-util-resolve-all/index.d.ts b/node_modules/micromark-util-resolve-all/index.d.ts new file mode 100644 index 0000000000..c9cbe16b64 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/index.d.ts @@ -0,0 +1,22 @@ +/** + * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' + */ +/** + * Call all `resolveAll`s. + * + * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +export function resolveAll(constructs: ReadonlyArray<{ + resolveAll?: Resolver | undefined; +}>, events: Array, context: TokenizeContext): Array; +import type { Resolver } from 'micromark-util-types'; +import type { Event } from 'micromark-util-types'; +import type { TokenizeContext } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.d.ts.map b/node_modules/micromark-util-resolve-all/index.d.ts.map new file mode 100644 index 0000000000..8ba707e732 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,uCATW,aAAa,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAC,CAAC,UAElD,KAAK,CAAC,KAAK,CAAC,WAEZ,eAAe,GAEb,KAAK,CAAC,KAAK,CAAC,CAkBxB;8BA9BkD,sBAAsB;2BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.js b/node_modules/micromark-util-resolve-all/index.js new file mode 100644 index 0000000000..69eb32b604 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/index.js @@ -0,0 +1,32 @@ +/** + * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' + */ + +/** + * Call all `resolveAll`s. + * + * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +export function resolveAll(constructs, events, context) { + /** @type {Array} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} diff --git a/node_modules/micromark-util-resolve-all/license b/node_modules/micromark-util-resolve-all/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-resolve-all/package.json b/node_modules/micromark-util-resolve-all/package.json new file mode 100644 index 0000000000..f1d7c2b2af --- /dev/null +++ b/node_modules/micromark-util-resolve-all/package.json @@ -0,0 +1,48 @@ +{ + "name": "micromark-util-resolve-all", + "version": "2.0.1", + "description": "micromark utility to resolve subtokens", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "resolve" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-resolve-all", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-resolve-all/readme.md b/node_modules/micromark-util-resolve-all/readme.md new file mode 100644 index 0000000000..11eefd47ae --- /dev/null +++ b/node_modules/micromark-util-resolve-all/readme.md @@ -0,0 +1,238 @@ +# micromark-util-resolve-all + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to resolve subtokens. + +[Resolvers][resolver] are functions that take events and manipulate them. +This is needed for example because media (links, images) and attention (strong, +italic) aren’t parsed left-to-right. +Instead, their openings and closings are parsed, and when done, their openings +and closings are matched, and left overs are turned into plain text. +Because media and attention can’t overlap, we need to perform that operation +when one closing matches an opening, too. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`resolveAll(constructs, events, context)`](#resolveallconstructs-events-context) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes a micromark internal that you probably don’t need. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-resolve-all +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {resolveAll} from 'https://esm.sh/micromark-util-resolve-all@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {push} from 'micromark-util-chunked' +import {resolveAll} from 'micromark-util-resolve-all' + +/** + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + // … + + // Walk through all events. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + // … + ) { + // … + + // Opening. + nextEvents = push(nextEvents, [ + // … + ]) + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + // … + ]) + + // … + } + } + } + } + + // … +} +``` + +## API + +This module exports the identifier [`resolveAll`][api-resolve-all]. +There is no default export. + +### `resolveAll(constructs, events, context)` + +Call all `resolveAll`s in `constructs`. + +###### Parameters + +* `constructs` (`Array`) + — list of constructs, optionally with `resolveAll`s +* `events` (`Array`) + — list of events +* `context` (`TokenizeContext`) + — context used by `tokenize` + +###### Returns + +Changed events (`Array`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-resolve-all@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-resolve-all.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-resolve-all + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-resolve-all + +[bundle-size]: https://bundlejs.com/?q=micromark-util-resolve-all + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[resolver]: https://github.com/micromark/micromark/blob/a571c09/packages/micromark-util-types/index.js#L219 + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-resolve-all]: #resolveallconstructs-events-context diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts new file mode 100644 index 0000000000..a105f230e8 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts @@ -0,0 +1,36 @@ +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map new file mode 100644 index 0000000000..cab9483524 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.js b/node_modules/micromark-util-sanitize-uri/dev/index.js new file mode 100644 index 0000000000..cc454b5e02 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/dev/index.js @@ -0,0 +1,124 @@ +import {asciiAlphanumeric} from 'micromark-util-character' +import {encode} from 'micromark-util-encode' +import {codes, values} from 'micromark-util-symbol' + +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url, protocol) { + const value = encode(normalizeUri(url || '')) + + if (!protocol) { + return value + } + + const colon = value.indexOf(':') + const questionMark = value.indexOf('?') + const numberSign = value.indexOf('#') + const slash = value.indexOf('/') + + if ( + // If there is no protocol, it’s relative. + colon < 0 || + // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. + (slash > -1 && colon > slash) || + (questionMark > -1 && colon > questionMark) || + (numberSign > -1 && colon > numberSign) || + // It is a protocol, it should be allowed. + protocol.test(value.slice(0, colon)) + ) { + return value + } + + return '' +} + +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value) { + /** @type {Array} */ + const result = [] + let index = -1 + let start = 0 + let skip = 0 + + while (++index < value.length) { + const code = value.charCodeAt(index) + /** @type {string} */ + let replace = '' + + // A correct percent encoded value. + if ( + code === codes.percentSign && + asciiAlphanumeric(value.charCodeAt(index + 1)) && + asciiAlphanumeric(value.charCodeAt(index + 2)) + ) { + skip = 2 + } + // ASCII. + else if (code < 128) { + if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { + replace = String.fromCharCode(code) + } + } + // Astral. + else if (code > 55_295 && code < 57_344) { + const next = value.charCodeAt(index + 1) + + // A correct surrogate pair. + if (code < 56_320 && next > 56_319 && next < 57_344) { + replace = String.fromCharCode(code, next) + skip = 1 + } + // Lone surrogate. + else { + replace = values.replacementCharacter + } + } + // Unicode. + else { + replace = String.fromCharCode(code) + } + + if (replace) { + result.push(value.slice(start, index), encodeURIComponent(replace)) + start = index + skip + 1 + replace = '' + } + + if (skip) { + index += skip + skip = 0 + } + } + + return result.join('') + value.slice(start) +} diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts b/node_modules/micromark-util-sanitize-uri/index.d.ts new file mode 100644 index 0000000000..a105f230e8 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/index.d.ts @@ -0,0 +1,36 @@ +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/index.d.ts.map new file mode 100644 index 0000000000..cab9483524 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.js b/node_modules/micromark-util-sanitize-uri/index.js new file mode 100644 index 0000000000..fb6fe6fbb8 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/index.js @@ -0,0 +1,107 @@ +import { asciiAlphanumeric } from 'micromark-util-character'; +import { encode } from 'micromark-util-encode'; +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url, protocol) { + const value = encode(normalizeUri(url || '')); + if (!protocol) { + return value; + } + const colon = value.indexOf(':'); + const questionMark = value.indexOf('?'); + const numberSign = value.indexOf('#'); + const slash = value.indexOf('/'); + if ( + // If there is no protocol, it’s relative. + colon < 0 || + // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. + slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign || + // It is a protocol, it should be allowed. + protocol.test(value.slice(0, colon))) { + return value; + } + return ''; +} + +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value) { + /** @type {Array} */ + const result = []; + let index = -1; + let start = 0; + let skip = 0; + while (++index < value.length) { + const code = value.charCodeAt(index); + /** @type {string} */ + let replace = ''; + + // A correct percent encoded value. + if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) { + skip = 2; + } + // ASCII. + else if (code < 128) { + if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { + replace = String.fromCharCode(code); + } + } + // Astral. + else if (code > 55_295 && code < 57_344) { + const next = value.charCodeAt(index + 1); + + // A correct surrogate pair. + if (code < 56_320 && next > 56_319 && next < 57_344) { + replace = String.fromCharCode(code, next); + skip = 1; + } + // Lone surrogate. + else { + replace = "\uFFFD"; + } + } + // Unicode. + else { + replace = String.fromCharCode(code); + } + if (replace) { + result.push(value.slice(start, index), encodeURIComponent(replace)); + start = index + skip + 1; + replace = ''; + } + if (skip) { + index += skip; + skip = 0; + } + } + return result.join('') + value.slice(start); +} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/license b/node_modules/micromark-util-sanitize-uri/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-sanitize-uri/package.json b/node_modules/micromark-util-sanitize-uri/package.json new file mode 100644 index 0000000000..068ecbc7a4 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/package.json @@ -0,0 +1,59 @@ +{ + "name": "micromark-util-sanitize-uri", + "version": "2.0.1", + "description": "micromark utility to sanitize urls", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "sanitize", + "clear", + "url" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-sanitize-uri/readme.md b/node_modules/micromark-util-sanitize-uri/readme.md new file mode 100644 index 0000000000..2d08fc51fb --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/readme.md @@ -0,0 +1,214 @@ +# micromark-util-sanitize-uri + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to sanitize urls. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`normalizeUri(value)`](#normalizeurivalue) + * [`sanitizeUri(url[, pattern])`](#sanitizeuriurl-pattern) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to make URLs safe. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-sanitize-uri +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {sanitizeUri} from 'https://esm.sh/micromark-util-sanitize-uri@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {sanitizeUri} from 'micromark-util-sanitize-uri' + +sanitizeUri('https://example.com/a&b') // 'https://example.com/a&amp;b' +sanitizeUri('https://example.com/a%b') // 'https://example.com/a%25b' +sanitizeUri('https://example.com/a%20b') // 'https://example.com/a%20b' +sanitizeUri('https://example.com/👍') // 'https://example.com/%F0%9F%91%8D' +sanitizeUri('https://example.com/', /^https?$/i) // 'https://example.com/' +sanitizeUri('javascript:alert(1)', /^https?$/i) // '' +sanitizeUri('./example.jpg', /^https?$/i) // './example.jpg' +sanitizeUri('#a', /^https?$/i) // '#a' +``` + +## API + +This module exports the identifiers [`normalizeUri`][api-normalize-uri] and +[`sanitizeUri`][api-sanitize-uri]. +There is no default export. + +### `normalizeUri(value)` + +Normalize a URL. + +Encode unsafe characters with percent-encoding, skipping already encoded +sequences. + +###### Parameters + +* `value` (`string`) + — URI to normalize + +###### Returns + +Normalized URI (`string`). + +### `sanitizeUri(url[, pattern])` + +Make a value safe for injection as a URL. + +This encodes unsafe characters with percent-encoding and skips already +encoded sequences (see [`normalizeUri`][api-normalize-uri]). +Further unsafe characters are encoded as character references (see +[`micromark-util-encode`][micromark-util-encode]). + +A regex of allowed protocols can be given, in which case the URL is sanitized. +For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or +`/^https?$/i` for `img[src]` (this is what `github.com` allows). +If the URL includes an unknown protocol (one not matched by `protocol`, such +as a dangerous example, `javascript:`), the value is ignored. + +###### Parameters + +* `url` (`string`) + — URI to sanitize +* `pattern` (`RegExp`, optional) + — allowed protocols + +###### Returns + +Sanitized URI (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-sanitize-uri@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-sanitize-uri.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-sanitize-uri + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-sanitize-uri + +[bundle-size]: https://bundlejs.com/?q=micromark-util-sanitize-uri + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[micromark-util-encode]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode + +[api-normalize-uri]: #normalizeurivalue + +[api-sanitize-uri]: #sanitizeuriurl-pattern diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts b/node_modules/micromark-util-subtokenize/dev/index.d.ts new file mode 100644 index 0000000000..b252238a88 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/dev/index.d.ts @@ -0,0 +1,12 @@ +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +export function subtokenize(eventsArray: Array): boolean; +export { SpliceBuffer } from "./lib/splice-buffer.js"; +import type { Event } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts.map b/node_modules/micromark-util-subtokenize/dev/index.d.ts.map new file mode 100644 index 0000000000..1738691d8e --- /dev/null +++ b/node_modules/micromark-util-subtokenize/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.js b/node_modules/micromark-util-subtokenize/dev/index.js new file mode 100644 index 0000000000..f506fd9a12 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/dev/index.js @@ -0,0 +1,272 @@ +/** + * @import {Chunk, Event, Token} from 'micromark-util-types' + */ + +import {ok as assert} from 'devlop' +import {splice} from 'micromark-util-chunked' +import {codes, types} from 'micromark-util-symbol' +import {SpliceBuffer} from './lib/splice-buffer.js' + +// Hidden API exposed for testing. +export {SpliceBuffer} from './lib/splice-buffer.js' + +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +// eslint-disable-next-line complexity +export function subtokenize(eventsArray) { + /** @type {Record} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array} */ + let parameters + /** @type {Array} */ + let subevents + /** @type {boolean | undefined} */ + let more + const events = new SpliceBuffer(eventsArray) + + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + + event = events.get(index) + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === types.chunkFlow && + events.get(index - 1)[1].type === types.listItemPrefix + ) { + assert(event[1]._tokenizer, 'expected `_tokenizer` on subtokens') + subevents = event[1]._tokenizer.events + otherIndex = 0 + + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === types.lineEndingBlank + ) { + otherIndex += 2 + } + + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === types.content + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === types.content) { + break + } + + if (subevents[otherIndex][1].type === types.chunkText) { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + + while (otherIndex--) { + otherEvent = events.get(otherIndex) + + if ( + otherEvent[1].type === types.lineEnding || + otherEvent[1].type === types.lineEndingBlank + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events.get(lineIndex)[1].type = types.lineEndingBlank + } + + otherEvent[1].type = types.lineEnding + lineIndex = otherIndex + } + } else if (otherEvent[1].type === types.linePrefix) { + // Move past. + } else { + break + } + } + + if (lineIndex) { + // Fix position. + event[1].end = {...events.get(lineIndex)[1].start} + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + events.splice(lineIndex, index - lineIndex + 1, parameters) + } + } + } + + // The changes to the `events` buffer must be copied back into the eventsArray + splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)) + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {SpliceBuffer} events + * Events. + * @param {number} eventIndex + * Index. + * @returns {Record} + * Gaps. + */ +function subcontent(events, eventIndex) { + const token = events.get(eventIndex)[1] + const context = events.get(eventIndex)[2] + let startPosition = eventIndex - 1 + /** @type {Array} */ + const startPositions = [] + assert(token.contentType, 'expected `contentType` on subtokens') + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record} */ + const gaps = {} + /** @type {Array} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events.get(++startPosition)[1] !== current) { + // Empty. + } + + assert( + !previous || current.previous === previous, + 'expected previous to match' + ) + assert(!previous || previous.next === current, 'expected next to match') + + startPositions.push(startPosition) + + if (!current._tokenizer) { + stream = context.sliceStream(current) + + if (!current.next) { + stream.push(codes.eof) + } + + if (previous) { + tokenizer.defineSkip(current.start) + } + + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + + tokenizer.write(stream) + + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + assert(current, 'expected a current token') + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + assert(!current.next, 'expected no next token') + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + assert(start !== undefined, 'expected a start position when splicing') + jumps.push([start, start + slice.length - 1]) + events.splice(start, 2, slice) + } + + jumps.reverse() + index = -1 + + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + + return gaps +} diff --git a/node_modules/micromark-util-subtokenize/index.d.ts b/node_modules/micromark-util-subtokenize/index.d.ts new file mode 100644 index 0000000000..b252238a88 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/index.d.ts @@ -0,0 +1,12 @@ +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +export function subtokenize(eventsArray: Array): boolean; +export { SpliceBuffer } from "./lib/splice-buffer.js"; +import type { Event } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.d.ts.map b/node_modules/micromark-util-subtokenize/index.d.ts.map new file mode 100644 index 0000000000..1738691d8e --- /dev/null +++ b/node_modules/micromark-util-subtokenize/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.js b/node_modules/micromark-util-subtokenize/index.js new file mode 100644 index 0000000000..de77c382c2 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/index.js @@ -0,0 +1,222 @@ +/** + * @import {Chunk, Event, Token} from 'micromark-util-types' + */ + +import { splice } from 'micromark-util-chunked'; +import { SpliceBuffer } from './lib/splice-buffer.js'; + +// Hidden API exposed for testing. +export { SpliceBuffer } from './lib/splice-buffer.js'; + +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +// eslint-disable-next-line complexity +export function subtokenize(eventsArray) { + /** @type {Record} */ + const jumps = {}; + let index = -1; + /** @type {Event} */ + let event; + /** @type {number | undefined} */ + let lineIndex; + /** @type {number} */ + let otherIndex; + /** @type {Event} */ + let otherEvent; + /** @type {Array} */ + let parameters; + /** @type {Array} */ + let subevents; + /** @type {boolean | undefined} */ + let more; + const events = new SpliceBuffer(eventsArray); + while (++index < events.length) { + while (index in jumps) { + index = jumps[index]; + } + event = events.get(index); + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if (index && event[1].type === "chunkFlow" && events.get(index - 1)[1].type === "listItemPrefix") { + subevents = event[1]._tokenizer.events; + otherIndex = 0; + if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { + otherIndex += 2; + } + if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === "content") { + break; + } + if (subevents[otherIndex][1].type === "chunkText") { + subevents[otherIndex][1]._isInFirstContentOfListItem = true; + otherIndex++; + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)); + index = jumps[index]; + more = true; + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index; + lineIndex = undefined; + while (otherIndex--) { + otherEvent = events.get(otherIndex); + if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events.get(lineIndex)[1].type = "lineEndingBlank"; + } + otherEvent[1].type = "lineEnding"; + lineIndex = otherIndex; + } + } else if (otherEvent[1].type === "linePrefix") { + // Move past. + } else { + break; + } + } + if (lineIndex) { + // Fix position. + event[1].end = { + ...events.get(lineIndex)[1].start + }; + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index); + parameters.unshift(event); + events.splice(lineIndex, index - lineIndex + 1, parameters); + } + } + } + + // The changes to the `events` buffer must be copied back into the eventsArray + splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)); + return !more; +} + +/** + * Tokenize embedded tokens. + * + * @param {SpliceBuffer} events + * Events. + * @param {number} eventIndex + * Index. + * @returns {Record} + * Gaps. + */ +function subcontent(events, eventIndex) { + const token = events.get(eventIndex)[1]; + const context = events.get(eventIndex)[2]; + let startPosition = eventIndex - 1; + /** @type {Array} */ + const startPositions = []; + const tokenizer = token._tokenizer || context.parser[token.contentType](token.start); + const childEvents = tokenizer.events; + /** @type {Array<[number, number]>} */ + const jumps = []; + /** @type {Record} */ + const gaps = {}; + /** @type {Array} */ + let stream; + /** @type {Token | undefined} */ + let previous; + let index = -1; + /** @type {Token | undefined} */ + let current = token; + let adjust = 0; + let start = 0; + const breaks = [start]; + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events.get(++startPosition)[1] !== current) { + // Empty. + } + startPositions.push(startPosition); + if (!current._tokenizer) { + stream = context.sliceStream(current); + if (!current.next) { + stream.push(null); + } + if (previous) { + tokenizer.defineSkip(current.start); + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true; + } + tokenizer.write(stream); + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined; + } + } + + // Unravel the next token. + previous = current; + current = current.next; + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token; + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) { + start = index + 1; + breaks.push(start); + // Help GC. + current._tokenizer = undefined; + current.previous = undefined; + current = current.next; + } + } + + // Help GC. + tokenizer.events = []; + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined; + current.previous = undefined; + } else { + breaks.pop(); + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length; + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]); + const start = startPositions.pop(); + jumps.push([start, start + slice.length - 1]); + events.splice(start, 2, slice); + } + jumps.reverse(); + index = -1; + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; + adjust += jumps[index][1] - jumps[index][0] - 1; + } + return gaps; +} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/license b/node_modules/micromark-util-subtokenize/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-subtokenize/package.json b/node_modules/micromark-util-subtokenize/package.json new file mode 100644 index 0000000000..f68102cc5a --- /dev/null +++ b/node_modules/micromark-util-subtokenize/package.json @@ -0,0 +1,60 @@ +{ + "name": "micromark-util-subtokenize", + "version": "2.0.4", + "description": "micromark utility to tokenize subtokens", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "tokenize" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-subtokenize", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "max-depth": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-subtokenize/readme.md b/node_modules/micromark-util-subtokenize/readme.md new file mode 100644 index 0000000000..388e423542 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/readme.md @@ -0,0 +1,181 @@ +# micromark-util-subtokenize + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to tokenize subtokens. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`subtokenize(events)`](#subtokenizeevents) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes a micromark internal that you probably don’t need. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-subtokenize +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {subtokenize} from 'https://esm.sh/micromark-util-subtokenize@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {subtokenize} from 'micromark-util-subtokenize' + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} +``` + +## API + +This module exports the identifiers [`subtokenize`][api-subtokenize]. +There is no default export. + +### `subtokenize(events)` + +Tokenize subcontent. + +###### Parameters + +* `events` (`Array`) + — list of events + +###### Returns + +Whether subtokens were found (`boolean`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-subtokenize@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-subtokenize.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-subtokenize + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-subtokenize + +[bundle-size]: https://bundlejs.com/?q=micromark-util-subtokenize + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-subtokenize]: #subtokenizeevents diff --git a/node_modules/micromark-util-symbol/license b/node_modules/micromark-util-symbol/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-symbol/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-symbol/package.json b/node_modules/micromark-util-symbol/package.json new file mode 100644 index 0000000000..b557140a60 --- /dev/null +++ b/node_modules/micromark-util-symbol/package.json @@ -0,0 +1,43 @@ +{ + "name": "micromark-util-symbol", + "version": "2.0.1", + "description": "micromark utility with symbols", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "symbol" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-symbol", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "lib/" + ], + "exports": "./lib/default.js", + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-symbol/readme.md b/node_modules/micromark-util-symbol/readme.md new file mode 100644 index 0000000000..4bad177259 --- /dev/null +++ b/node_modules/micromark-util-symbol/readme.md @@ -0,0 +1,168 @@ +# micromark-util-symbol + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility with symbols. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes constants used throughout the micromark ecosystem. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. +It’s useful to reference these constants by name instead of value while +developing. +[`micromark-build`][micromark-build] compiles them away for production code. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-symbol +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import * as symbol from 'https://esm.sh/micromark-util-symbol@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {codes, constants, types, values} from 'micromark-util-symbol' + +console.log(codes.atSign) // 64 +console.log(constants.characterReferenceNamedSizeMax) // 31 +console.log(types.definitionDestinationRaw) // 'definitionDestinationRaw' +console.log(values.atSign) // '@' +``` + +## API + +This package exports the identifiers `codes`, `constants`, `types`, and +`values`. +There is no default export. + +Each identifier is an object mapping strings to values. +See the code for the exposed data. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-symbol@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-symbol.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-symbol + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-symbol + +[bundle-size]: https://bundlejs.com/?q=micromark-util-symbol + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[micromark-build]: https://github.com/micromark/micromark/tree/main/packages/micromark-build diff --git a/node_modules/micromark-util-types/index.d.ts b/node_modules/micromark-util-types/index.d.ts new file mode 100644 index 0000000000..3da4c708ee --- /dev/null +++ b/node_modules/micromark-util-types/index.d.ts @@ -0,0 +1,1294 @@ +// Note: this file is authored manually, not generated from `index.js`. + +/** + * A character code. + * + * This is often the same as what `String#charCodeAt()` yields but micromark + * adds meaning to certain other values. + * + * `null` represents the end of the input stream (called eof). + * Negative integers are used instead of certain sequences of characters (such + * as line endings and tabs). + */ +export type Code = number | null + +/** + * A chunk is either a character code or a slice of a buffer in the form of a + * string. + * + * Chunks are used because strings are more efficient storage that character + * codes, but limited in what they can represent. + */ +export type Chunk = Code | string + +/** + * Enumeration of the content types. + * + * Technically `document` is also a content type, which includes containers + * (lists, block quotes) and flow. + * As `ContentType` is used on tokens to define the type of subcontent but + * `document` is the highest level of content, so it’s not listed here. + * + * Containers in markdown come from the margin and include more constructs + * on the lines that define them. + * Take for example a block quote with a paragraph inside it (such as + * `> asd`). + * + * `flow` represents the sections, such as headings, code, and content, which + * is also parsed per line + * An example is HTML, which has a certain starting condition (such as + * ` +``` + +## Use + + + +Typical use (buffering): + +```js +import {micromark} from 'micromark' + +console.log(micromark('## Hello, *world*!')) +``` + +Yields: + +```html +

      Hello, world!

      +``` + +You can pass extensions (in this case [`micromark-extension-gfm`][gfm]): + +```js +import {micromark} from 'micromark' +import {gfmHtml, gfm} from 'micromark-extension-gfm' + +const value = '* [x] contact@example.com ~~strikethrough~~' + +const result = micromark(value, { + extensions: [gfm()], + htmlExtensions: [gfmHtml()] +}) + +console.log(result) +``` + +Yields: + +```html +
      +``` + +Streaming interface: + +```js +import {createReadStream} from 'node:fs' +import {stream} from 'micromark/stream' + +createReadStream('example.md') + .on('error', handleError) + .pipe(stream()) + .pipe(process.stdout) + +function handleError(error) { + // Handle your error here! + throw error +} +``` + +## API + +`micromark` core has two entries in its export map: `micromark` and +`micromark/stream`. + +`micromark` exports the identifier [`micromark`][api-micromark]. +`micromark/stream` exports the identifier [`stream`][api-stream]. +There are no default exports. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. +See [§ Size & debug][size-debug] for more info. + +### `micromark(value[, encoding][, options])` + +Compile markdown to HTML. + +> Note: which encodings are supported depends on the engine. +> For info on Node.js, see *[WHATWG supported encodings][encoding]*. + +###### Parameters + +* `value` (`string` or [`Uint8Array`][uint8-array]) + — markdown to parse +* `encoding` (`string`, default: `'utf8'`) + — [character encoding][encoding] to understand `value` as when it’s a + [`Uint8Array`][uint8-array] +* `options` ([`Options`][api-options], optional) + — configuration + +###### Returns + +Compiled HTML (`string`). + +### `stream(options?)` + +Create a duplex (readable and writable) stream. + +Some of the work to parse markdown can be done streaming, but in the +end buffering is required. + +micromark does not handle errors for you, so you must handle errors on whatever +streams you pipe into it. +As markdown does not know errors, `micromark` itself does not emit errors. + +###### Parameters + +* `options` ([`Options`][api-options], optional) + — configuration + +###### Returns + +Duplex stream. + +### `Options` + +Configuration (TypeScript type). + +##### Fields + +###### `allowDangerousHtml` + +Whether to allow (dangerous) HTML (`boolean`, default: `false`). + +The default is `false`, which still parses the HTML according to `CommonMark` +but shows the HTML as text instead of as elements. + +Pass `true` for trusted content to get actual HTML elements. +See [§ Security][security]. + +###### `allowDangerousProtocol` + +Whether to allow dangerous protocols in links and images (`boolean`, default: +`false`). + +The default is `false`, which drops URLs in links and images that use dangerous +protocols. + +Pass `true` for trusted content to support all protocols. + +URLs that have no protocol (which means it’s relative to the current page, such +as `./some/page.html`) and URLs that have a safe protocol (for images: `http`, +`https`; for links: `http`, `https`, `irc`, `ircs`, `mailto`, `xmpp`), are +safe. +All other URLs are dangerous and dropped. +See [§ Security][security]. + +###### `defaultLineEnding` + +Default line ending to use when compiling to HTML, for line endings not in +`value` (`'\r'`, `'\n'`, or `'\r\n'`; default: first line ending or `'\n'`). + +Generally, `micromark` copies line endings (`\r`, `\n`, `\r\n`) in the markdown +document over to the compiled HTML. +In some cases, such as `> a`, CommonMark requires that extra line endings are +added: `
      \n

      a

      \n
      `. + +To create that line ending, the document is checked for the first line ending +that is used. +If there is no line ending, `defaultLineEnding` is used. +If that isn’t configured, `\n` is used. + +###### `extensions` + +Array of syntax extensions (`Array`, default: `[]`). +See [§ Extensions][extensions]. + +###### `htmlExtensions` + +Array of syntax extensions (`Array`, default: `[]`). +See [§ Extensions][extensions]. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional type [`Options`][api-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, `micromark@4`, compatible +with Node.js 16. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## Sponsor + + + +Support this effort and give back by sponsoring on [OpenCollective][]! + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + Salesforce 🏅

      + +
      + Vercel

      + +
      + Motif

      + +
      + HashiCorp

      + +
      + GitBook

      + +
      + Gatsby

      + +
      + Netlify

      + + +
      + Coinbase

      + +
      + ThemeIsle

      + +
      + Expo

      + +
      + Boost Note

      + +
      + Markdown Space

      + +
      + Holloway

      + +
      +
      + You? +

      +
      + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark.svg + +[downloads]: https://www.npmjs.com/package/micromark + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark + +[bundle-size]: https://bundlejs.com/?q=micromark + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[cheat]: https://commonmark.org/help/ + +[twitter]: https://twitter.com/unifiedjs + +[site]: https://unifiedjs.com + +[contribute]: #contribute + +[uint8-array]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array + +[encoding]: https://nodejs.org/api/util.html#whatwg-supported-encodings + +[commonmark]: https://commonmark.org + +[directives]: https://github.com/micromark/micromark-extension-directive + +[frontmatter]: https://github.com/micromark/micromark-extension-frontmatter + +[gfm]: https://github.com/micromark/micromark-extension-gfm + +[math]: https://github.com/micromark/micromark-extension-math + +[mdxjs]: https://github.com/micromark/micromark-extension-mdxjs + +[security]: #security + +[sponsor]: #sponsor + +[micromark]: https://github.com/micromark/micromark + +[extensions]: https://github.com/micromark/micromark#extensions + +[test]: https://github.com/micromark/micromark#test + +[size-debug]: https://github.com/micromark/micromark#size--debug + +[comparison]: https://github.com/micromark/micromark#comparison + +[markdown-rs]: https://github.com/wooorm/markdown-rs + +[mdast-util-to-markdown]: https://github.com/syntax-tree/mdast-util-to-markdown + +[api-micromark]: #micromarkvalue-encoding-options + +[api-stream]: #streamoptions + +[api-options]: #options diff --git a/node_modules/micromark/stream.d.ts b/node_modules/micromark/stream.d.ts new file mode 100644 index 0000000000..2b05447e81 --- /dev/null +++ b/node_modules/micromark/stream.d.ts @@ -0,0 +1,35 @@ +/** + * Create a duplex (readable and writable) stream. + * + * Some of the work to parse markdown can be done streaming, but in the + * end buffering is required. + * + * micromark does not handle errors for you, so you must handle errors on whatever + * streams you pipe into it. + * As markdown does not know errors, `micromark` itself does not emit errors. + * + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {MinimalDuplex} + * Duplex stream. + */ +export function stream(options?: Options | null | undefined): MinimalDuplex; +export type Options = import("micromark-util-types").Options; +/** + * Function called when write was successful. + */ +export type Callback = () => undefined; +/** + * Configuration for piping. + */ +export type PipeOptions = { + /** + * Whether to end the destination stream when the source stream ends. + */ + end?: boolean | null | undefined; +}; +/** + * Duplex stream. + */ +export type MinimalDuplex = Omit; +//# sourceMappingURL=stream.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark/stream.d.ts.map b/node_modules/micromark/stream.d.ts.map new file mode 100644 index 0000000000..f89c748fa5 --- /dev/null +++ b/node_modules/micromark/stream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["stream.js"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;GAcG;AACH,iCALW,OAAO,GAAG,IAAI,GAAG,SAAS,GAExB,aAAa,CAoOzB;sBAxQY,OAAO,sBAAsB,EAAE,OAAO;;;;6BAMtC,SAAS;;;;;;;;UAKR,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;4BAG3B,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/micromark/stream.js b/node_modules/micromark/stream.js new file mode 100644 index 0000000000..7561620013 --- /dev/null +++ b/node_modules/micromark/stream.js @@ -0,0 +1,256 @@ +/** + * @import {Encoding, Value} from 'micromark-util-types' + */ + +/** + * @typedef {import('micromark-util-types').Options} Options + */ + +/** + * @callback Callback + * Function called when write was successful. + * @returns {undefined} + * Nothing. + * + * @typedef PipeOptions + * Configuration for piping. + * @property {boolean | null | undefined} [end] + * Whether to end the destination stream when the source stream ends. + * + * @typedef {Omit} MinimalDuplex + * Duplex stream. + */ + +import { EventEmitter } from 'node:events'; +import { compile } from './lib/compile.js'; +import { parse } from './lib/parse.js'; +import { postprocess } from './lib/postprocess.js'; +import { preprocess } from './lib/preprocess.js'; + +/** + * Create a duplex (readable and writable) stream. + * + * Some of the work to parse markdown can be done streaming, but in the + * end buffering is required. + * + * micromark does not handle errors for you, so you must handle errors on whatever + * streams you pipe into it. + * As markdown does not know errors, `micromark` itself does not emit errors. + * + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {MinimalDuplex} + * Duplex stream. + */ +export function stream(options) { + const prep = preprocess(); + const tokenize = parse(options).document().write; + const comp = compile(options); + /** @type {boolean} */ + let ended; + const emitter = /** @type {MinimalDuplex} */new EventEmitter(); + // @ts-expect-error: fine. + emitter.end = end; + emitter.pipe = pipe; + emitter.readable = true; + emitter.writable = true; + // @ts-expect-error: fine. + emitter.write = write; + return emitter; + + /** + * Write a chunk into memory. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + */ + function write(chunk, encoding, callback) { + if (typeof encoding === 'function') { + callback = encoding; + encoding = undefined; + } + if (ended) { + throw new Error('Did not expect `write` after `end`'); + } + tokenize(prep(chunk || '', encoding)); + if (callback) { + callback(); + } + + // Signal successful write. + return true; + } + + /** + * End the writing. + * + * Passes all arguments as a final `write`. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @overload + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @param {Callback | Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + */ + function end(chunk, encoding, callback) { + if (typeof chunk === 'function') { + encoding = chunk; + chunk = undefined; + } + if (typeof encoding === 'function') { + callback = encoding; + encoding = undefined; + } + write(chunk, encoding, callback); + emitter.emit('data', comp(postprocess(tokenize(prep('', encoding, true))))); + emitter.emit('end'); + ended = true; + return true; + } + + /** + * Pipe the processor into a writable stream. + * + * Basically `Stream#pipe`, but inlined and simplified to keep the bundled + * size down. + * See: . + * + * @template {NodeJS.WritableStream} Stream + * Writable stream. + * @param {Stream} destination + * Stream to pipe into. + * @param {PipeOptions | null | undefined} [options] + * Configuration. + * @returns {Stream} + * Destination stream. + */ + function pipe(destination, options) { + emitter.on('data', ondata); + emitter.on('error', onerror); + emitter.on('end', cleanup); + emitter.on('close', cleanup); + + // If the `end` option is not supplied, `destination.end()` will be + // called when the `end` or `close` events are received. + // @ts-expect-error `_isStdio` is available on `std{err,out}` + if (!destination._isStdio && (!options || options.end !== false)) { + emitter.on('end', onend); + } + destination.on('error', onerror); + destination.on('close', cleanup); + destination.emit('pipe', emitter); + return destination; + + /** + * End destination stream. + * + * @returns {undefined} + * Nothing. + */ + function onend() { + if (destination.end) { + destination.end(); + } + } + + /** + * Handle data. + * + * @param {string} chunk + * Data. + * @returns {undefined} + * Nothing. + */ + function ondata(chunk) { + if (destination.writable) { + destination.write(chunk); + } + } + + /** + * Clean listeners. + * + * @returns {undefined} + * Nothing. + */ + function cleanup() { + emitter.removeListener('data', ondata); + emitter.removeListener('end', onend); + emitter.removeListener('error', onerror); + emitter.removeListener('end', cleanup); + emitter.removeListener('close', cleanup); + destination.removeListener('error', onerror); + destination.removeListener('close', cleanup); + } + + /** + * Close dangling pipes and handle unheard errors. + * + * @param {Error | null | undefined} [error] + * Error, if any. + * @returns {undefined} + * Nothing. + */ + function onerror(error) { + cleanup(); + if (!emitter.listenerCount('error')) { + throw error; // Unhandled stream error in pipe. + } + } + } +} \ No newline at end of file diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE new file mode 100644 index 0000000000..1493534e60 --- /dev/null +++ b/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md new file mode 100644 index 0000000000..3c97a02fbe --- /dev/null +++ b/node_modules/minimatch/README.md @@ -0,0 +1,454 @@ +# minimatch + +A minimal matching utility. + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```js +// hybrid module, load with require() or import +import { minimatch } from 'minimatch' +// or: +const { minimatch } = require('minimatch') + +minimatch('bar.foo', '*.foo') // true! +minimatch('bar.foo', '*.bar') // false! +minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +- Brace Expansion +- Extended glob matching +- "Globstar" `**` matching +- [Posix character + classes](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html), + like `[[:alpha:]]`, supporting the full range of Unicode + characters. For example, `[[:alpha:]]` will match against + `'é'`, though `[a-zA-Z]` will not. Collating symbol and set + matching is not supported, so `[[=e=]]` will _not_ match `'é'` + and `[[.ch.]]` will not match `'ch'` in locales where `ch` is + considered a single character. + +See: + +- `man sh` +- `man bash` [Pattern + Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) +- `man 3 fnmatch` +- `man 5 gitignore` + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes in patterns +will always be interpreted as escape characters, not path separators. + +Note that `\` or `/` _will_ be interpreted as path separators in paths on +Windows, and will match against `/` in glob expressions. + +So just always use `/` in patterns. + +### UNC Paths + +On Windows, UNC paths like `//?/c:/...` or +`//ComputerName/Share/...` are handled specially. + +- Patterns starting with a double-slash followed by some + non-slash characters will preserve their double-slash. As a + result, a pattern like `//*` will match `//x`, but not `/x`. +- Patterns staring with `//?/:` will _not_ treat + the `?` as a wildcard character. Instead, it will be treated + as a normal string. +- Patterns starting with `//?/:/...` will match + file paths starting with `:/...`, and vice versa, + as if the `//?/` was not present. This behavior only is + present when the drive letters are a case-insensitive match to + one another. The remaining portions of the path/pattern are + compared case sensitively, unless `nocase:true` is set. + +Note that specifying a UNC path using `\` characters as path +separators is always allowed in the file path argument, but only +allowed in the pattern argument when `windowsPathsNoEscape: true` +is set in the options. + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require('minimatch').Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +- `pattern` The original pattern the minimatch object represents. +- `options` The options supplied to the constructor. +- `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +- `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +- `negate` True if the pattern is negated. +- `comment` True if the pattern is a comment. +- `empty` True if the pattern is `""`. + +### Methods + +- `makeRe()` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +- `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +- `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. +- `hasMagic()` Returns true if the parsed pattern contains any + magic characters. Returns false if all comparator parts are + string literals. If the `magicalBraces` option is set on the + constructor, then it will consider brace expansions which are + not otherwise magical to be magic. If not set, then a pattern + like `a{b,c}d` will return `false`, because neither `abd` nor + `acd` contain any special glob characters. + + This does **not** mean that the pattern string can be used as a + literal filename, as it may contain magic glob characters that + are escaped. For example, the pattern `\\*` or `[*]` would not + be considered to have magic, as the matching portion parses to + the literal string `'*'` and would match a path named `'*'`, + not `'\\*'` or `'[*]'`. The `minimatch.unescape()` method may + be used to remove escape characters. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, '*.js', { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true })) +``` + +### minimatch.escape(pattern, options = {}) + +Escape all magic characters in a glob pattern, so that it will +only ever match literal strings + +If the `windowsPathsNoEscape` option is used, then characters are +escaped by wrapping in `[]`, because a magic character wrapped in +a character class can only be satisfied by that exact character. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +### minimatch.unescape(pattern, options = {}) + +Un-escape a glob string that may contain some escaped characters. + +If the `windowsPathsNoEscape` option is used, then square-brace +escapes are removed, but not backslash escapes. For example, it +will turn the string `'[*]'` into `*`, but it will not turn +`'\\*'` into `'*'`, because `\` is a path separator in +`windowsPathsNoEscape` mode. + +When `windowsPathsNoEscape` is not set, then both brace escapes +and backslash escapes are removed. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, '*.js', { matchBase: true }) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nocaseMagicOnly + +When used with `{nocase: true}`, create regular expressions that +are case-insensitive, but leave string match portions untouched. +Has no effect when used without `{nocase: true}` + +Useful when some other form of case-insensitive matching is used, +or if the original string representation is useful in some other +way. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### magicalBraces + +This only affects the results of the `Minimatch.hasMagic` method. + +If the pattern contains brace expansions, such as `a{b,c}d`, but +no other magic characters, then the `Minimatch.hasMagic()` method +will return `false` by default. When this option set, it will +return `true` for brace expansion as well as other magic glob +characters. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + +### partial + +Compare a partial path to a pattern. As long as the parts of the path that +are present are not contradicted by the pattern, it will be treated as a +match. This is useful in applications where you're walking through a +folder structure, and don't yet have the full path, but want to ensure that +you do not walk down paths that can never be a match. + +For example, + +```js +minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d +minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d +minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a +``` + +### windowsPathsNoEscape + +Use `\\` as a path separator _only_, and _never_ as an escape +character. If set, all `\\` characters are replaced with `/` in +the pattern. Note that this makes it **impossible** to match +against paths containing literal glob pattern characters, but +allows matching with patterns constructed using `path.join()` and +`path.resolve()` on Windows platforms, mimicking the (buggy!) +behavior of earlier versions on Windows. Please use with +caution, and be mindful of [the caveat about Windows +paths](#windows). + +For legacy reasons, this is also set if +`options.allowWindowsEscape` is set to the exact value `false`. + +### windowsNoMagicRoot + +When a pattern starts with a UNC path or drive letter, and in +`nocase:true` mode, do not convert the root portions of the +pattern into a case-insensitive regular expression, and instead +leave them as strings. + +This is the default when the platform is `win32` and +`nocase:true` is set. + +### preserveMultipleSlashes + +By default, multiple `/` characters (other than the leading `//` +in a UNC path, see "UNC Paths" above) are treated as a single +`/`. + +That is, a pattern like `a///b` will match the file path `a/b`. + +Set `preserveMultipleSlashes: true` to suppress this behavior. + +### optimizationLevel + +A number indicating the level of optimization that should be done +to the pattern prior to parsing and using it for matches. + +Globstar parts `**` are always converted to `*` when `noglobstar` +is set, and multiple adjacent `**` parts are converted into a +single `**` (ie, `a/**/**/b` will be treated as `a/**/b`, as this +is equivalent in all cases). + +- `0` - Make no further changes. In this mode, `.` and `..` are + maintained in the pattern, meaning that they must also appear + in the same position in the test path string. Eg, a pattern + like `a/*/../c` will match the string `a/b/../c` but not the + string `a/c`. +- `1` - (default) Remove cases where a double-dot `..` follows a + pattern portion that is not `**`, `.`, `..`, or empty `''`. For + example, the pattern `./a/b/../*` is converted to `./a/*`, and + so it will match the path string `./a/c`, but not the path + string `./a/b/../c`. Dots and empty path portions in the + pattern are preserved. +- `2` (or higher) - Much more aggressive optimizations, suitable + for use with file-walking cases: + + - Remove cases where a double-dot `..` follows a pattern + portion that is not `**`, `.`, or empty `''`. Remove empty + and `.` portions of the pattern, where safe to do so (ie, + anywhere other than the last position, the first position, or + the second position in a pattern starting with `/`, as this + may indicate a UNC path on Windows). + - Convert patterns containing `
      /**/../

      /` into the + equivalent `

      /{..,**}/

      /`, where `

      ` is a + a pattern portion other than `.`, `..`, `**`, or empty + `''`. + - Dedupe patterns where a `**` portion is present in one and + omitted in another, and it is not the final path portion, and + they are otherwise equivalent. So `{a/**/b,a/b}` becomes + `a/**/b`, because `**` matches against an empty path portion. + - Dedupe patterns where a `*` portion is present in one, and a + non-dot pattern other than `**`, `.`, `..`, or `''` is in the + same position in the other. So `a/{*,x}/b` becomes `a/*/b`, + because `*` can match against `x`. + + While these optimizations improve the performance of + file-walking use cases such as [glob](http://npm.im/glob) (ie, + the reason this module exists), there are cases where it will + fail to match a literal string that would have been matched in + optimization level 1 or 0. + + Specifically, while the `Minimatch.match()` method will + optimize the file path string in the same ways, resulting in + the same matches, it will fail when tested with the regular + expression provided by `Minimatch.makeRe()`, unless the path + string is first processed with + `minimatch.levelTwoFileOptimize()` or similar. + +### platform + +When set to `win32`, this will trigger all windows-specific +behaviors (special handling for UNC paths, and treating `\` as +separators in file paths for comparison.) + +Defaults to the value of `process.platform`. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a +worthwhile goal, some discrepancies exist between minimatch and +other implementations. Some are intentional, and some are +unavoidable. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +Negated extglob patterns are handled as closely as possible to +Bash semantics, but there are some cases with negative extglobs +which are exceedingly difficult to express in a JavaScript +regular expression. In particular the negated pattern +`!(*|)*` will in bash match anything that does +not start with ``. However, +`!(*)*` _will_ match paths starting with +``, because the empty string can match against +the negated portion. In this library, `!(*|)*` +will _not_ match any pattern starting with ``, due to a +difference in precisely which patterns are considered "greedy" in +Regular Expressions vs bash path expansion. This may be fixable, +but not without incurring some complexity and performance costs, +and the trade-off seems to not be worth pursuing. + +Note that `fnmatch(3)` in libc is an extremely naive string comparison +matcher, which does not do anything special for slashes. This library is +designed to be used in glob searching and file walkers, and so it does do +special things with `/`. Thus, `foo*` will not match `foo/bar` in this +library, even though it would in `fnmatch(3)`. diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json new file mode 100644 index 0000000000..01fc48ecfd --- /dev/null +++ b/node_modules/minimatch/package.json @@ -0,0 +1,82 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "name": "minimatch", + "description": "a glob matcher in javascript", + "version": "9.0.5", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "benchmark": "node benchmark/index.js", + "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.0", + "@types/node": "^18.15.11", + "@types/tap": "^15.0.8", + "eslint-config-prettier": "^8.6.0", + "mkdirp": "1", + "prettier": "^2.8.2", + "tap": "^18.7.2", + "ts-node": "^10.9.1", + "tshy": "^1.12.0", + "typedoc": "^0.23.21", + "typescript": "^4.9.3" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "license": "ISC", + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "type": "module" +} diff --git a/node_modules/minimist/.eslintrc b/node_modules/minimist/.eslintrc new file mode 100644 index 0000000000..bd1a5e046b --- /dev/null +++ b/node_modules/minimist/.eslintrc @@ -0,0 +1,29 @@ +{ + "root": true, + + "extends": "@ljharb/eslint-config/node/0.4", + + "rules": { + "array-element-newline": 0, + "complexity": 0, + "func-style": [2, "declaration"], + "max-lines-per-function": 0, + "max-nested-callbacks": 1, + "max-statements-per-line": 1, + "max-statements": 0, + "multiline-comment-style": 0, + "no-continue": 1, + "no-param-reassign": 1, + "no-restricted-syntax": 1, + "object-curly-newline": 0, + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "camelcase": 0, + }, + }, + ] +} diff --git a/node_modules/minimist/.github/FUNDING.yml b/node_modules/minimist/.github/FUNDING.yml new file mode 100644 index 0000000000..a9366222e9 --- /dev/null +++ b/node_modules/minimist/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/minimist +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/minimist/.nycrc b/node_modules/minimist/.nycrc new file mode 100644 index 0000000000..55c3d29367 --- /dev/null +++ b/node_modules/minimist/.nycrc @@ -0,0 +1,14 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "example", + "test" + ] +} diff --git a/node_modules/minimist/CHANGELOG.md b/node_modules/minimist/CHANGELOG.md new file mode 100644 index 0000000000..c9a1e15e6c --- /dev/null +++ b/node_modules/minimist/CHANGELOG.md @@ -0,0 +1,298 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) +- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) +- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) +- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) +- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) +- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) +- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) + +## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) +- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) +- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) +- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) +- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) +- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) +- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) +- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) +- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) +- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) +- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) + +## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 + +### Commits + +- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) +- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) +- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) + +## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 + +## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 + +### Commits + +- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) +- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) + +## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 + +### Commits + +- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) +- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) + +## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 + +### Commits + +- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) +- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) +- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) +- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) + +## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 + +### Merged + +- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) + +### Commits + +- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) +- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) + +## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 + +### Commits + +- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) +- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) +- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) +- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) +- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) + +## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 + +### Commits + +- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) +- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) + +## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 + +### Commits + +- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) +- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) +- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) + +## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 + +### Commits + +- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) +- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) +- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) +- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) + +## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 + +### Commits + +- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) +- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) +- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) +- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) + +## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 + +### Commits + +- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) +- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) + +## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) + +## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) + +## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 + +## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 + +### Commits + +- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) + +## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 + +### Commits + +- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) +- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) +- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) + +## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 + +### Commits + +- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) +- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) +- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) +- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) +- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) + +## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 + +### Commits + +- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) + +## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 + +### Commits + +- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) +- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) + +## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 + +### Commits + +- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) + +## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 + +### Commits + +- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) + +## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 + +### Commits + +- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) + +## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 + +## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 + +### Commits + +- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) +- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) + +## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 + +### Commits + +- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) +- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) + +## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 + +### Commits + +- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) + +## v0.0.0 - 2013-06-25 + +### Commits + +- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) +- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) +- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) +- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) +- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) +- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) +- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) +- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) +- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) +- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) +- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE new file mode 100644 index 0000000000..ee27ba4b44 --- /dev/null +++ b/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/README.md b/node_modules/minimist/README.md new file mode 100644 index 0000000000..74da3234b4 --- /dev/null +++ b/node_modules/minimist/README.md @@ -0,0 +1,121 @@ +# minimist [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ + _: ['foo', 'bar', 'baz'], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' +} +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { + _: ['one', 'two', 'three'], + '--': ['four', 'five', '--six'] + } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/minimist +[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg +[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/minimist.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/minimist.svg +[downloads-url]: https://npm-stat.com/charts.html?package=minimist +[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist +[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js new file mode 100644 index 0000000000..9d90ffb264 --- /dev/null +++ b/node_modules/minimist/example/parse.js @@ -0,0 +1,4 @@ +'use strict'; + +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js new file mode 100644 index 0000000000..f020f3940e --- /dev/null +++ b/node_modules/minimist/index.js @@ -0,0 +1,263 @@ +'use strict'; + +function hasKey(obj, keys) { + var o = obj; + keys.slice(0, -1).forEach(function (key) { + o = o[key] || {}; + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber(x) { + if (typeof x === 'number') { return true; } + if ((/^0x[0-9a-f]+$/i).test(x)) { return true; } + return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x); +} + +function isConstructorOrProto(obj, key) { + return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__'; +} + +module.exports = function (args, opts) { + if (!opts) { opts = {}; } + + var flags = { + bools: {}, + strings: {}, + unknownFn: null, + }; + + if (typeof opts.unknown === 'function') { + flags.unknownFn = opts.unknown; + } + + if (typeof opts.boolean === 'boolean' && opts.boolean) { + flags.allBools = true; + } else { + [].concat(opts.boolean).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + [].concat(aliases[key]).forEach(function (k) { + flags.strings[k] = true; + }); + } + }); + + var defaults = opts.default || {}; + + var argv = { _: [] }; + + function argDefined(key, arg) { + return (flags.allBools && (/^--[^=]+$/).test(arg)) + || flags.strings[key] + || flags.bools[key] + || aliases[key]; + } + + function setKey(obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length - 1; i++) { + var key = keys[i]; + if (isConstructorOrProto(o, key)) { return; } + if (o[key] === undefined) { o[key] = {}; } + if ( + o[key] === Object.prototype + || o[key] === Number.prototype + || o[key] === String.prototype + ) { + o[key] = {}; + } + if (o[key] === Array.prototype) { o[key] = []; } + o = o[key]; + } + + var lastKey = keys[keys.length - 1]; + if (isConstructorOrProto(o, lastKey)) { return; } + if ( + o === Object.prototype + || o === Number.prototype + || o === String.prototype + ) { + o = {}; + } + if (o === Array.prototype) { o = []; } + if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') { + o[lastKey] = value; + } else if (Array.isArray(o[lastKey])) { + o[lastKey].push(value); + } else { + o[lastKey] = [o[lastKey], value]; + } + } + + function setArg(key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) { return; } + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) + : val; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--') + 1); + args = args.slice(0, args.indexOf('--')); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + var key; + var next; + + if ((/^--.+=/).test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } else if ((/^--no-.+/).test(arg)) { + key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } else if ((/^--.+/).test(arg)) { + key = arg.match(/^--(.+)/)[1]; + next = args[i + 1]; + if ( + next !== undefined + && !(/^(-|--)[^-]/).test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, next, arg); + i += 1; + } else if ((/^(true|false)$/).test(next)) { + setArg(key, next === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } else if ((/^-[^-]+/).test(arg)) { + var letters = arg.slice(1, -1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + + if (next === '-') { + setArg(letters[j], next, arg); + continue; + } + + if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') { + setArg(letters[j], next.slice(1), arg); + broken = true; + break; + } + + if ( + (/[A-Za-z]/).test(letters[j]) + && (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next) + ) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j + 1] && letters[j + 1].match(/\W/)) { + setArg(letters[j], arg.slice(j + 2), arg); + broken = true; + break; + } else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if ( + args[i + 1] + && !(/^(-|--)[^-]/).test(args[i + 1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, args[i + 1], arg); + i += 1; + } else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) { + setArg(key, args[i + 1] === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg)); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (k) { + if (!hasKey(argv, k.split('.'))) { + setKey(argv, k.split('.'), defaults[k]); + + (aliases[k] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[k]); + }); + } + }); + + if (opts['--']) { + argv['--'] = notFlags.slice(); + } else { + notFlags.forEach(function (k) { + argv._.push(k); + }); + } + + return argv; +}; diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json new file mode 100644 index 0000000000..c10a334441 --- /dev/null +++ b/node_modules/minimist/package.json @@ -0,0 +1,75 @@ +{ + "name": "minimist", + "version": "1.2.8", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "@ljharb/eslint-config": "^21.0.1", + "aud": "^2.0.2", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.3" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/minimistjs/minimist.git" + }, + "homepage": "https://github.com/minimistjs/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js new file mode 100644 index 0000000000..befa0c9976 --- /dev/null +++ b/node_modules/minimist/test/all_bool.js @@ -0,0 +1,34 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js new file mode 100644 index 0000000000..e58d47e442 --- /dev/null +++ b/node_modules/minimist/test/bool.js @@ -0,0 +1,177 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false }, + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse(['-x', '-z', 'one', 'two', 'three'], { + boolean: ['x', 'y', 'z'], + }); + + t.deepEqual(argv, { + x: true, + y: false, + z: true, + _: ['one', 'two', 'three'], + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var opts = { + alias: { h: 'herp' }, + boolean: 'herp', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var alt = ['--harp', 'derp']; + var opts = { + alias: { h: ['herp', 'harp'] }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = ['-h', 'true']; + var regular = ['--herp', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: [], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function (t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + _: ['true.txt'], + }; + + t.same(result, expected); + t.end(); +}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js new file mode 100644 index 0000000000..707881771e --- /dev/null +++ b/node_modules/minimist/test/dash.js @@ -0,0 +1,43 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(6); + t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); + t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); + t.deepEqual(parse(['-']), { _: ['-'] }); + t.deepEqual(parse(['-f-']), { f: '-', _: [] }); + t.deepEqual( + parse(['-b', '-'], { boolean: 'b' }), + { b: true, _: ['-'] } + ); + t.deepEqual( + parse(['-s', '-'], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(2); + t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); + t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); +}); + +test('move arguments after the -- into their own `--` array', function (t) { + t.plan(1); + t.deepEqual( + parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), + { name: 'John', _: ['before'], '--': ['after'] } + ); +}); + +test('--- option value', function (t) { + // A multi-dash value is largely an edge case, but check the behaviour is as expected, + // and in particular the same for short option and long option (as made consistent in Jan 2023). + t.plan(2); + t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); + t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); +}); + diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js new file mode 100644 index 0000000000..4e9f6250f0 --- /dev/null +++ b/node_modules/minimist/test/default_bool.js @@ -0,0 +1,37 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true }, + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false }, + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argv.maybe, null); + + var argvLong = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argvLong.maybe, true); + t.end(); +}); diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js new file mode 100644 index 0000000000..126ff033b4 --- /dev/null +++ b/node_modules/minimist/test/dotted.js @@ -0,0 +1,24 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', { default: { 'a.b': 11 } }); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js new file mode 100644 index 0000000000..6d1b53a7a7 --- /dev/null +++ b/node_modules/minimist/test/kv_short.js @@ -0,0 +1,32 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-b=123']); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-a=whatever', '-b=robots']); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); + +test('short with embedded equals -k=a=b', function (t) { + t.plan(1); + + var argv = parse(['-k=a=b']); + t.deepEqual(argv, { k: 'a=b', _: [] }); +}); + +test('short with later equals like -ab=c', function (t) { + t.plan(1); + + var argv = parse(['-ab=c']); + t.deepEqual(argv, { a: true, b: 'c', _: [] }); +}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js new file mode 100644 index 0000000000..9fef51f1fa --- /dev/null +++ b/node_modules/minimist/test/long.js @@ -0,0 +1,33 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse(['--bool']), + { bool: true, _: [] }, + 'long boolean' + ); + t.deepEqual( + parse(['--pow', 'xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture sp' + ); + t.deepEqual( + parse(['--pow=xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture eq' + ); + t.deepEqual( + parse(['--host', 'localhost', '--port', '555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures sp' + ); + t.deepEqual( + parse(['--host=localhost', '--port=555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js new file mode 100644 index 0000000000..074393ecaf --- /dev/null +++ b/node_modules/minimist/test/num.js @@ -0,0 +1,38 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789', + ]); + t.deepEqual(argv, { + x: 1234, + y: 5.67, + z: 1e7, + w: '10f', + hex: 0xdeadbeef, + _: [789], + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse(['-x', 1234, 789]); + t.deepEqual(argv, { x: 1234, _: [789] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js new file mode 100644 index 0000000000..65d9d90927 --- /dev/null +++ b/node_modules/minimist/test/parse.js @@ -0,0 +1,209 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse(['--no-moo']), + { moo: false, _: [] }, + 'no' + ); + t.deepEqual( + parse(['-v', 'a', '-v', 'b', '-v', 'c']), + { v: ['a', 'b', 'c'], _: [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek', + ]), + { + c: true, + a: true, + t: true, + s: 'woo', + h: 'awesome', + b: true, + bool: true, + key: 'value', + multi: ['quux', 'baz'], + meep: false, + name: 'meowmers', + _: ['bare', '--not-a-flag', 'eek'], + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse(['-t', 'moo'], { boolean: 't' }); + t.deepEqual(argv, { t: true, _: ['moo'] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: ['t', 'verbose'], + default: { verbose: true }, + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params', function (t) { + var args = parse(['-s', 'X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse(['--s=X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + t.end(); +}); + +test('strings', function (t) { + var s = parse(['-s', '0001234'], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse(['-x', '56'], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([' ', ' '], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function (t) { + var s = parse(['-s'], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse(['--str'], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse(['-art'], { + string: ['a', 't'], + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + +test('string and alias', function (t) { + var x = parse(['--str', '000123'], { + string: 's', + alias: { s: 'str' }, + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse(['-s', '000123'], { + string: 'str', + alias: { str: 's' }, + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + + var z = parse(['-s123'], { + alias: { str: ['s', 'S'] }, + string: ['str'], + }); + + t.deepEqual( + z, + { _: [], s: '123', S: '123', str: '123' }, + 'opt.string works with multiple aliases' + ); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse(['-I/foo/bar/baz']), + { I: '/foo/bar/baz', _: [] } + ); + t.same( + parse(['-xyz/foo/bar/baz']), + { x: true, y: true, z: '/foo/bar/baz', _: [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: 'zoom' }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: ['zm', 'zoom'] }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop', + ]); + + t.same(argv.foo, { + bar: 3, + baz: 4, + quux: { + quibble: 5, + o_O: true, + }, + }); + t.same(argv.beep, { boop: true }); + t.end(); +}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js new file mode 100644 index 0000000000..32965d130f --- /dev/null +++ b/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,11 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions', function (t) { + t.plan(1); + + var argv = parse(['-b', '123'], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/node_modules/minimist/test/proto.js b/node_modules/minimist/test/proto.js new file mode 100644 index 0000000000..6e629dd34e --- /dev/null +++ b/node_modules/minimist/test/proto.js @@ -0,0 +1,64 @@ +'use strict'; + +/* eslint no-proto: 0 */ + +var parse = require('../'); +var test = require('tape'); + +test('proto pollution', function (t) { + var argv = parse(['--__proto__.x', '123']); + t.equal({}.x, undefined); + t.equal(argv.__proto__.x, undefined); + t.equal(argv.x, undefined); + t.end(); +}); + +test('proto pollution (array)', function (t) { + var argv = parse(['--x', '4', '--x', '5', '--x.__proto__.z', '789']); + t.equal({}.z, undefined); + t.deepEqual(argv.x, [4, 5]); + t.equal(argv.x.z, undefined); + t.equal(argv.x.__proto__.z, undefined); + t.end(); +}); + +test('proto pollution (number)', function (t) { + var argv = parse(['--x', '5', '--x.__proto__.z', '100']); + t.equal({}.z, undefined); + t.equal((4).z, undefined); + t.equal(argv.x, 5); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (string)', function (t) { + var argv = parse(['--x', 'abc', '--x.__proto__.z', 'def']); + t.equal({}.z, undefined); + t.equal('...'.z, undefined); + t.equal(argv.x, 'abc'); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (constructor)', function (t) { + var argv = parse(['--constructor.prototype.y', '123']); + t.equal({}.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +test('proto pollution (constructor function)', function (t) { + var argv = parse(['--_.concat.constructor.prototype.y', '123']); + function fnToBeTested() {} + t.equal(fnToBeTested.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +// powered by snyk - https://github.com/backstage/backstage/issues/10343 +test('proto pollution (constructor function) snyk', function (t) { + var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); + t.equal(function () {}.foo, undefined); + t.equal(argv.y, undefined); + t.end(); +}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js new file mode 100644 index 0000000000..4a7b84385b --- /dev/null +++ b/node_modules/minimist/test/short.js @@ -0,0 +1,69 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse(['-n123']), { n: 123, _: [] }); + t.deepEqual( + parse(['-123', '456']), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse(['-b']), + { b: true, _: [] }, + 'short boolean' + ); + t.deepEqual( + parse(['foo', 'bar', 'baz']), + { _: ['foo', 'bar', 'baz'] }, + 'bare' + ); + t.deepEqual( + parse(['-cats']), + { c: true, a: true, t: true, s: true, _: [] }, + 'group' + ); + t.deepEqual( + parse(['-cats', 'meow']), + { c: true, a: true, t: true, s: 'meow', _: [] }, + 'short group next' + ); + t.deepEqual( + parse(['-h', 'localhost']), + { h: 'localhost', _: [] }, + 'short capture' + ); + t.deepEqual( + parse(['-h', 'localhost', '-p', '555']), + { h: 'localhost', p: 555, _: [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js new file mode 100644 index 0000000000..52a6a91903 --- /dev/null +++ b/node_modules/minimist/test/stop_early.js @@ -0,0 +1,17 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true, + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'], + }); + + t.end(); +}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js new file mode 100644 index 0000000000..4f2e0ca447 --- /dev/null +++ b/node_modules/minimist/test/unknown.js @@ -0,0 +1,104 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'true', '--derp', 'true']; + var regular = ['--herp', 'true', '-d', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn, + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [], + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello', '--derp', 'goodbye']; + var regular = ['--herp', 'hello', '-d', 'moon']; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello']; + var regular = ['--herp', 'hello']; + var opts = { + default: { h: 'bar' }, + alias: { h: 'herp' }, + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['--bad', '--', 'good', 'arg']; + var opts = { + '--': true, + unknown: unknownFn, + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + _: [], + }); + t.end(); +}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js new file mode 100644 index 0000000000..4fdaf1d394 --- /dev/null +++ b/node_modules/minimist/test/whitespace.js @@ -0,0 +1,10 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace', function (t) { + t.plan(1); + var x = parse(['-x', '\t']).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/minipass/LICENSE b/node_modules/minipass/LICENSE new file mode 100644 index 0000000000..97f8e32ed8 --- /dev/null +++ b/node_modules/minipass/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minipass/README.md b/node_modules/minipass/README.md new file mode 100644 index 0000000000..1126330582 --- /dev/null +++ b/node_modules/minipass/README.md @@ -0,0 +1,825 @@ +# minipass + +A _very_ minimal implementation of a [PassThrough +stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough) + +[It's very +fast](https://docs.google.com/spreadsheets/d/1K_HR5oh3r80b8WVMWCPPjfuWXUgfkmhlX7FGI6JJ8tY/edit?usp=sharing) +for objects, strings, and buffers. + +Supports `pipe()`ing (including multi-`pipe()` and backpressure +transmission), buffering data until either a `data` event handler +or `pipe()` is added (so you don't lose the first chunk), and +most other cases where PassThrough is a good idea. + +There is a `read()` method, but it's much more efficient to +consume data from this stream via `'data'` events or by calling +`pipe()` into some other stream. Calling `read()` requires the +buffer to be flattened in some cases, which requires copying +memory. + +If you set `objectMode: true` in the options, then whatever is +written will be emitted. Otherwise, it'll do a minimal amount of +Buffer copying to ensure proper Streams semantics when `read(n)` +is called. + +`objectMode` can only be set at instantiation. Attempting to +write something other than a String or Buffer without having set +`objectMode` in the options will throw an error. + +This is not a `through` or `through2` stream. It doesn't +transform the data, it just passes it right through. If you want +to transform the data, extend the class, and override the +`write()` method. Once you're done transforming the data however +you want, call `super.write()` with the transform output. + +For some examples of streams that extend Minipass in various +ways, check out: + +- [minizlib](http://npm.im/minizlib) +- [fs-minipass](http://npm.im/fs-minipass) +- [tar](http://npm.im/tar) +- [minipass-collect](http://npm.im/minipass-collect) +- [minipass-flush](http://npm.im/minipass-flush) +- [minipass-pipeline](http://npm.im/minipass-pipeline) +- [tap](http://npm.im/tap) +- [tap-parser](http://npm.im/tap-parser) +- [treport](http://npm.im/treport) +- [minipass-fetch](http://npm.im/minipass-fetch) +- [pacote](http://npm.im/pacote) +- [make-fetch-happen](http://npm.im/make-fetch-happen) +- [cacache](http://npm.im/cacache) +- [ssri](http://npm.im/ssri) +- [npm-registry-fetch](http://npm.im/npm-registry-fetch) +- [minipass-json-stream](http://npm.im/minipass-json-stream) +- [minipass-sized](http://npm.im/minipass-sized) + +## Usage in TypeScript + +The `Minipass` class takes three type template definitions: + +- `RType` the type being read, which defaults to `Buffer`. If + `RType` is `string`, then the constructor _must_ get an options + object specifying either an `encoding` or `objectMode: true`. + If it's anything other than `string` or `Buffer`, then it + _must_ get an options object specifying `objectMode: true`. +- `WType` the type being written. If `RType` is `Buffer` or + `string`, then this defaults to `ContiguousData` (Buffer, + string, ArrayBuffer, or ArrayBufferView). Otherwise, it + defaults to `RType`. +- `Events` type mapping event names to the arguments emitted + with that event, which extends `Minipass.Events`. + +To declare types for custom events in subclasses, extend the +third parameter with your own event signatures. For example: + +```js +import { Minipass } from 'minipass' + +// a NDJSON stream that emits 'jsonError' when it can't stringify +export interface Events extends Minipass.Events { + jsonError: [e: Error] +} + +export class NDJSONStream extends Minipass { + constructor() { + super({ objectMode: true }) + } + + // data is type `any` because that's WType + write(data, encoding, cb) { + try { + const json = JSON.stringify(data) + return super.write(json + '\n', encoding, cb) + } catch (er) { + if (!er instanceof Error) { + er = Object.assign(new Error('json stringify failed'), { + cause: er, + }) + } + // trying to emit with something OTHER than an error will + // fail, because we declared the event arguments type. + this.emit('jsonError', er) + } + } +} + +const s = new NDJSONStream() +s.on('jsonError', e => { + // here, TS knows that e is an Error +}) +``` + +Emitting/handling events that aren't declared in this way is +fine, but the arguments will be typed as `unknown`. + +## Differences from Node.js Streams + +There are several things that make Minipass streams different +from (and in some ways superior to) Node.js core streams. + +Please read these caveats if you are familiar with node-core +streams and intend to use Minipass streams in your programs. + +You can avoid most of these differences entirely (for a very +small performance penalty) by setting `{async: true}` in the +constructor options. + +### Timing + +Minipass streams are designed to support synchronous use-cases. +Thus, data is emitted as soon as it is available, always. It is +buffered until read, but no longer. Another way to look at it is +that Minipass streams are exactly as synchronous as the logic +that writes into them. + +This can be surprising if your code relies on +`PassThrough.write()` always providing data on the next tick +rather than the current one, or being able to call `resume()` and +not have the entire buffer disappear immediately. + +However, without this synchronicity guarantee, there would be no +way for Minipass to achieve the speeds it does, or support the +synchronous use cases that it does. Simply put, waiting takes +time. + +This non-deferring approach makes Minipass streams much easier to +reason about, especially in the context of Promises and other +flow-control mechanisms. + +Example: + +```js +// hybrid module, either works +import { Minipass } from 'minipass' +// or: +const { Minipass } = require('minipass') + +const stream = new Minipass() +stream.on('data', () => console.log('data event')) +console.log('before write') +stream.write('hello') +console.log('after write') +// output: +// before write +// data event +// after write +``` + +### Exception: Async Opt-In + +If you wish to have a Minipass stream with behavior that more +closely mimics Node.js core streams, you can set the stream in +async mode either by setting `async: true` in the constructor +options, or by setting `stream.async = true` later on. + +```js +// hybrid module, either works +import { Minipass } from 'minipass' +// or: +const { Minipass } = require('minipass') + +const asyncStream = new Minipass({ async: true }) +asyncStream.on('data', () => console.log('data event')) +console.log('before write') +asyncStream.write('hello') +console.log('after write') +// output: +// before write +// after write +// data event <-- this is deferred until the next tick +``` + +Switching _out_ of async mode is unsafe, as it could cause data +corruption, and so is not enabled. Example: + +```js +import { Minipass } from 'minipass' +const stream = new Minipass({ encoding: 'utf8' }) +stream.on('data', chunk => console.log(chunk)) +stream.async = true +console.log('before writes') +stream.write('hello') +setStreamSyncAgainSomehow(stream) // <-- this doesn't actually exist! +stream.write('world') +console.log('after writes') +// hypothetical output would be: +// before writes +// world +// after writes +// hello +// NOT GOOD! +``` + +To avoid this problem, once set into async mode, any attempt to +make the stream sync again will be ignored. + +```js +const { Minipass } = require('minipass') +const stream = new Minipass({ encoding: 'utf8' }) +stream.on('data', chunk => console.log(chunk)) +stream.async = true +console.log('before writes') +stream.write('hello') +stream.async = false // <-- no-op, stream already async +stream.write('world') +console.log('after writes') +// actual output: +// before writes +// after writes +// hello +// world +``` + +### No High/Low Water Marks + +Node.js core streams will optimistically fill up a buffer, +returning `true` on all writes until the limit is hit, even if +the data has nowhere to go. Then, they will not attempt to draw +more data in until the buffer size dips below a minimum value. + +Minipass streams are much simpler. The `write()` method will +return `true` if the data has somewhere to go (which is to say, +given the timing guarantees, that the data is already there by +the time `write()` returns). + +If the data has nowhere to go, then `write()` returns false, and +the data sits in a buffer, to be drained out immediately as soon +as anyone consumes it. + +Since nothing is ever buffered unnecessarily, there is much less +copying data, and less bookkeeping about buffer capacity levels. + +### Hazards of Buffering (or: Why Minipass Is So Fast) + +Since data written to a Minipass stream is immediately written +all the way through the pipeline, and `write()` always returns +true/false based on whether the data was fully flushed, +backpressure is communicated immediately to the upstream caller. +This minimizes buffering. + +Consider this case: + +```js +const { PassThrough } = require('stream') +const p1 = new PassThrough({ highWaterMark: 1024 }) +const p2 = new PassThrough({ highWaterMark: 1024 }) +const p3 = new PassThrough({ highWaterMark: 1024 }) +const p4 = new PassThrough({ highWaterMark: 1024 }) + +p1.pipe(p2).pipe(p3).pipe(p4) +p4.on('data', () => console.log('made it through')) + +// this returns false and buffers, then writes to p2 on next tick (1) +// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2) +// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3) +// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain' +// on next tick (4) +// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and +// 'drain' on next tick (5) +// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6) +// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next +// tick (7) + +p1.write(Buffer.alloc(2048)) // returns false +``` + +Along the way, the data was buffered and deferred at each stage, +and multiple event deferrals happened, for an unblocked pipeline +where it was perfectly safe to write all the way through! + +Furthermore, setting a `highWaterMark` of `1024` might lead +someone reading the code to think an advisory maximum of 1KiB is +being set for the pipeline. However, the actual advisory +buffering level is the _sum_ of `highWaterMark` values, since +each one has its own bucket. + +Consider the Minipass case: + +```js +const m1 = new Minipass() +const m2 = new Minipass() +const m3 = new Minipass() +const m4 = new Minipass() + +m1.pipe(m2).pipe(m3).pipe(m4) +m4.on('data', () => console.log('made it through')) + +// m1 is flowing, so it writes the data to m2 immediately +// m2 is flowing, so it writes the data to m3 immediately +// m3 is flowing, so it writes the data to m4 immediately +// m4 is flowing, so it fires the 'data' event immediately, returns true +// m4's write returned true, so m3 is still flowing, returns true +// m3's write returned true, so m2 is still flowing, returns true +// m2's write returned true, so m1 is still flowing, returns true +// No event deferrals or buffering along the way! + +m1.write(Buffer.alloc(2048)) // returns true +``` + +It is extremely unlikely that you _don't_ want to buffer any data +written, or _ever_ buffer data that can be flushed all the way +through. Neither node-core streams nor Minipass ever fail to +buffer written data, but node-core streams do a lot of +unnecessary buffering and pausing. + +As always, the faster implementation is the one that does less +stuff and waits less time to do it. + +### Immediately emit `end` for empty streams (when not paused) + +If a stream is not paused, and `end()` is called before writing +any data into it, then it will emit `end` immediately. + +If you have logic that occurs on the `end` event which you don't +want to potentially happen immediately (for example, closing file +descriptors, moving on to the next entry in an archive parse +stream, etc.) then be sure to call `stream.pause()` on creation, +and then `stream.resume()` once you are ready to respond to the +`end` event. + +However, this is _usually_ not a problem because: + +### Emit `end` When Asked + +One hazard of immediately emitting `'end'` is that you may not +yet have had a chance to add a listener. In order to avoid this +hazard, Minipass streams safely re-emit the `'end'` event if a +new listener is added after `'end'` has been emitted. + +Ie, if you do `stream.on('end', someFunction)`, and the stream +has already emitted `end`, then it will call the handler right +away. (You can think of this somewhat like attaching a new +`.then(fn)` to a previously-resolved Promise.) + +To prevent calling handlers multiple times who would not expect +multiple ends to occur, all listeners are removed from the +`'end'` event whenever it is emitted. + +### Emit `error` When Asked + +The most recent error object passed to the `'error'` event is +stored on the stream. If a new `'error'` event handler is added, +and an error was previously emitted, then the event handler will +be called immediately (or on `process.nextTick` in the case of +async streams). + +This makes it much more difficult to end up trying to interact +with a broken stream, if the error handler is added after an +error was previously emitted. + +### Impact of "immediate flow" on Tee-streams + +A "tee stream" is a stream piping to multiple destinations: + +```js +const tee = new Minipass() +t.pipe(dest1) +t.pipe(dest2) +t.write('foo') // goes to both destinations +``` + +Since Minipass streams _immediately_ process any pending data +through the pipeline when a new pipe destination is added, this +can have surprising effects, especially when a stream comes in +from some other function and may or may not have data in its +buffer. + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone +src.pipe(dest2) // gets nothing! +``` + +One solution is to create a dedicated tee-stream junction that +pipes to both locations, and then pipe to _that_ instead. + +```js +// Safe example: tee to both places +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.pipe(dest1) +tee.pipe(dest2) +src.pipe(tee) // tee gets 'foo', pipes to both locations +``` + +The same caveat applies to `on('data')` event listeners. The +first one added will _immediately_ receive all of the data, +leaving nothing for the second: + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.on('data', handler1) // receives 'foo' right away +src.on('data', handler2) // nothing to see here! +``` + +Using a dedicated tee-stream can be used in this case as well: + +```js +// Safe example: tee to both data handlers +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.on('data', handler1) +tee.on('data', handler2) +src.pipe(tee) +``` + +All of the hazards in this section are avoided by setting `{ +async: true }` in the Minipass constructor, or by setting +`stream.async = true` afterwards. Note that this does add some +overhead, so should only be done in cases where you are willing +to lose a bit of performance in order to avoid having to refactor +program logic. + +## USAGE + +It's a stream! Use it like a stream and it'll most likely do what +you want. + +```js +import { Minipass } from 'minipass' +const mp = new Minipass(options) // options is optional +mp.write('foo') +mp.pipe(someOtherStream) +mp.end('bar') +``` + +### OPTIONS + +- `encoding` How would you like the data coming _out_ of the + stream to be encoded? Accepts any values that can be passed to + `Buffer.toString()`. +- `objectMode` Emit data exactly as it comes in. This will be + flipped on by default if you write() something other than a + string or Buffer at any point. Setting `objectMode: true` will + prevent setting any encoding value. +- `async` Defaults to `false`. Set to `true` to defer data + emission until next tick. This reduces performance slightly, + but makes Minipass streams use timing behavior closer to Node + core streams. See [Timing](#timing) for more details. +- `signal` An `AbortSignal` that will cause the stream to unhook + itself from everything and become as inert as possible. Note + that providing a `signal` parameter will make `'error'` events + no longer throw if they are unhandled, but they will still be + emitted to handlers if any are attached. + +### API + +Implements the user-facing portions of Node.js's `Readable` and +`Writable` streams. + +### Methods + +- `write(chunk, [encoding], [callback])` - Put data in. (Note + that, in the base Minipass class, the same data will come out.) + Returns `false` if the stream will buffer the next write, or + true if it's still in "flowing" mode. +- `end([chunk, [encoding]], [callback])` - Signal that you have + no more data to write. This will queue an `end` event to be + fired when all the data has been consumed. +- `pause()` - No more data for a while, please. This also + prevents `end` from being emitted for empty streams until the + stream is resumed. +- `resume()` - Resume the stream. If there's data in the buffer, + it is all discarded. Any buffered events are immediately + emitted. +- `pipe(dest)` - Send all output to the stream provided. When + data is emitted, it is immediately written to any and all pipe + destinations. (Or written on next tick in `async` mode.) +- `unpipe(dest)` - Stop piping to the destination stream. This is + immediate, meaning that any asynchronously queued data will + _not_ make it to the destination when running in `async` mode. + - `options.end` - Boolean, end the destination stream when the + source stream ends. Default `true`. + - `options.proxyErrors` - Boolean, proxy `error` events from + the source stream to the destination stream. Note that errors + are _not_ proxied after the pipeline terminates, either due + to the source emitting `'end'` or manually unpiping with + `src.unpipe(dest)`. Default `false`. +- `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are + EventEmitters. Some events are given special treatment, + however. (See below under "events".) +- `promise()` - Returns a Promise that resolves when the stream + emits `end`, or rejects if the stream emits `error`. +- `collect()` - Return a Promise that resolves on `end` with an + array containing each chunk of data that was emitted, or + rejects if the stream emits `error`. Note that this consumes + the stream data. +- `concat()` - Same as `collect()`, but concatenates the data + into a single Buffer object. Will reject the returned promise + if the stream is in objectMode, or if it goes into objectMode + by the end of the data. +- `read(n)` - Consume `n` bytes of data out of the buffer. If `n` + is not provided, then consume all of it. If `n` bytes are not + available, then it returns null. **Note** consuming streams in + this way is less efficient, and can lead to unnecessary Buffer + copying. +- `destroy([er])` - Destroy the stream. If an error is provided, + then an `'error'` event is emitted. If the stream has a + `close()` method, and has not emitted a `'close'` event yet, + then `stream.close()` will be called. Any Promises returned by + `.promise()`, `.collect()` or `.concat()` will be rejected. + After being destroyed, writing to the stream will emit an + error. No more data will be emitted if the stream is destroyed, + even if it was previously buffered. + +### Properties + +- `bufferLength` Read-only. Total number of bytes buffered, or in + the case of objectMode, the total number of objects. +- `encoding` Read-only. The encoding that has been set. +- `flowing` Read-only. Boolean indicating whether a chunk written + to the stream will be immediately emitted. +- `emittedEnd` Read-only. Boolean indicating whether the end-ish + events (ie, `end`, `prefinish`, `finish`) have been emitted. + Note that listening on any end-ish event will immediateyl + re-emit it if it has already been emitted. +- `writable` Whether the stream is writable. Default `true`. Set + to `false` when `end()` +- `readable` Whether the stream is readable. Default `true`. +- `pipes` An array of Pipe objects referencing streams that this + stream is piping into. +- `destroyed` A getter that indicates whether the stream was + destroyed. +- `paused` True if the stream has been explicitly paused, + otherwise false. +- `objectMode` Indicates whether the stream is in `objectMode`. +- `aborted` Readonly property set when the `AbortSignal` + dispatches an `abort` event. + +### Events + +- `data` Emitted when there's data to read. Argument is the data + to read. This is never emitted while not flowing. If a listener + is attached, that will resume the stream. +- `end` Emitted when there's no more data to read. This will be + emitted immediately for empty streams when `end()` is called. + If a listener is attached, and `end` was already emitted, then + it will be emitted again. All listeners are removed when `end` + is emitted. +- `prefinish` An end-ish event that follows the same logic as + `end` and is emitted in the same conditions where `end` is + emitted. Emitted after `'end'`. +- `finish` An end-ish event that follows the same logic as `end` + and is emitted in the same conditions where `end` is emitted. + Emitted after `'prefinish'`. +- `close` An indication that an underlying resource has been + released. Minipass does not emit this event, but will defer it + until after `end` has been emitted, since it throws off some + stream libraries otherwise. +- `drain` Emitted when the internal buffer empties, and it is + again suitable to `write()` into the stream. +- `readable` Emitted when data is buffered and ready to be read + by a consumer. +- `resume` Emitted when stream changes state from buffering to + flowing mode. (Ie, when `resume` is called, `pipe` is called, + or a `data` event listener is added.) + +### Static Methods + +- `Minipass.isStream(stream)` Returns `true` if the argument is a + stream, and false otherwise. To be considered a stream, the + object must be either an instance of Minipass, or an + EventEmitter that has either a `pipe()` method, or both + `write()` and `end()` methods. (Pretty much any stream in + node-land will return `true` for this.) + +## EXAMPLES + +Here are some examples of things you can do with Minipass +streams. + +### simple "are you done yet" promise + +```js +mp.promise().then( + () => { + // stream is finished + }, + er => { + // stream emitted an error + } +) +``` + +### collecting + +```js +mp.collect().then(all => { + // all is an array of all the data emitted + // encoding is supported in this case, so + // so the result will be a collection of strings if + // an encoding is specified, or buffers/objects if not. + // + // In an async function, you may do + // const data = await stream.collect() +}) +``` + +### collecting into a single blob + +This is a bit slower because it concatenates the data into one +chunk for you, but if you're going to do it yourself anyway, it's +convenient this way: + +```js +mp.concat().then(onebigchunk => { + // onebigchunk is a string if the stream + // had an encoding set, or a buffer otherwise. +}) +``` + +### iteration + +You can iterate over streams synchronously or asynchronously in +platforms that support it. + +Synchronous iteration will end when the currently available data +is consumed, even if the `end` event has not been reached. In +string and buffer mode, the data is concatenated, so unless +multiple writes are occurring in the same tick as the `read()`, +sync iteration loops will generally only have a single iteration. + +To consume chunks in this way exactly as they have been written, +with no flattening, create the stream with the `{ objectMode: +true }` option. + +```js +const mp = new Minipass({ objectMode: true }) +mp.write('a') +mp.write('b') +for (let letter of mp) { + console.log(letter) // a, b +} +mp.write('c') +mp.write('d') +for (let letter of mp) { + console.log(letter) // c, d +} +mp.write('e') +mp.end() +for (let letter of mp) { + console.log(letter) // e +} +for (let letter of mp) { + console.log(letter) // nothing +} +``` + +Asynchronous iteration will continue until the end event is reached, +consuming all of the data. + +```js +const mp = new Minipass({ encoding: 'utf8' }) + +// some source of some data +let i = 5 +const inter = setInterval(() => { + if (i-- > 0) mp.write(Buffer.from('foo\n', 'utf8')) + else { + mp.end() + clearInterval(inter) + } +}, 100) + +// consume the data with asynchronous iteration +async function consume() { + for await (let chunk of mp) { + console.log(chunk) + } + return 'ok' +} + +consume().then(res => console.log(res)) +// logs `foo\n` 5 times, and then `ok` +``` + +### subclass that `console.log()`s everything written into it + +```js +class Logger extends Minipass { + write(chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end(chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } +} + +someSource.pipe(new Logger()).pipe(someDest) +``` + +### same thing, but using an inline anonymous class + +```js +// js classes are fun +someSource + .pipe( + new (class extends Minipass { + emit(ev, ...data) { + // let's also log events, because debugging some weird thing + console.log('EMIT', ev) + return super.emit(ev, ...data) + } + write(chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end(chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } + })() + ) + .pipe(someDest) +``` + +### subclass that defers 'end' for some reason + +```js +class SlowEnd extends Minipass { + emit(ev, ...args) { + if (ev === 'end') { + console.log('going to end, hold on a sec') + setTimeout(() => { + console.log('ok, ready to end now') + super.emit('end', ...args) + }, 100) + return true + } else { + return super.emit(ev, ...args) + } + } +} +``` + +### transform that creates newline-delimited JSON + +```js +class NDJSONEncode extends Minipass { + write(obj, cb) { + try { + // JSON.stringify can throw, emit an error on that + return super.write(JSON.stringify(obj) + '\n', 'utf8', cb) + } catch (er) { + this.emit('error', er) + } + } + end(obj, cb) { + if (typeof obj === 'function') { + cb = obj + obj = undefined + } + if (obj !== undefined) { + this.write(obj) + } + return super.end(cb) + } +} +``` + +### transform that parses newline-delimited JSON + +```js +class NDJSONDecode extends Minipass { + constructor(options) { + // always be in object mode, as far as Minipass is concerned + super({ objectMode: true }) + this._jsonBuffer = '' + } + write(chunk, encoding, cb) { + if ( + typeof chunk === 'string' && + typeof encoding === 'string' && + encoding !== 'utf8' + ) { + chunk = Buffer.from(chunk, encoding).toString() + } else if (Buffer.isBuffer(chunk)) { + chunk = chunk.toString() + } + if (typeof encoding === 'function') { + cb = encoding + } + const jsonData = (this._jsonBuffer + chunk).split('\n') + this._jsonBuffer = jsonData.pop() + for (let i = 0; i < jsonData.length; i++) { + try { + // JSON.parse can throw, emit an error on that + super.write(JSON.parse(jsonData[i])) + } catch (er) { + this.emit('error', er) + continue + } + } + if (cb) cb() + } +} +``` diff --git a/node_modules/minipass/package.json b/node_modules/minipass/package.json new file mode 100644 index 0000000000..771969b028 --- /dev/null +++ b/node_modules/minipass/package.json @@ -0,0 +1,82 @@ +{ + "name": "minipass", + "version": "7.1.2", + "description": "minimal implementation of a PassThrough stream", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "type": "module", + "tshy": { + "selfLink": false, + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/end-of-stream": "^1.4.2", + "@types/node": "^20.1.2", + "end-of-stream": "^1.4.0", + "node-abort-controller": "^3.1.1", + "prettier": "^2.6.2", + "tap": "^19.0.0", + "through2": "^2.0.3", + "tshy": "^1.14.0", + "typedoc": "^0.25.1" + }, + "repository": "https://github.com/isaacs/minipass", + "keywords": [ + "passthrough", + "stream" + ], + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "tap": { + "typecheck": true, + "include": [ + "test/*.ts" + ] + } +} diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js new file mode 100644 index 0000000000..ea734fb738 --- /dev/null +++ b/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function (val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/node_modules/ms/license.md b/node_modules/ms/license.md new file mode 100644 index 0000000000..fa5d39b621 --- /dev/null +++ b/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json new file mode 100644 index 0000000000..49971890df --- /dev/null +++ b/node_modules/ms/package.json @@ -0,0 +1,38 @@ +{ + "name": "ms", + "version": "2.1.3", + "description": "Tiny millisecond conversion utility", + "repository": "vercel/ms", + "main": "./index", + "files": [ + "index.js" + ], + "scripts": { + "precommit": "lint-staged", + "lint": "eslint lib/* bin/*", + "test": "mocha tests.js" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "license": "MIT", + "devDependencies": { + "eslint": "4.18.2", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1", + "prettier": "2.0.5" + } +} diff --git a/node_modules/ms/readme.md b/node_modules/ms/readme.md new file mode 100644 index 0000000000..0fc1abb3b8 --- /dev/null +++ b/node_modules/ms/readme.md @@ -0,0 +1,59 @@ +# ms + +![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/node_modules/package-json-from-dist/LICENSE.md b/node_modules/package-json-from-dist/LICENSE.md new file mode 100644 index 0000000000..881248b6d7 --- /dev/null +++ b/node_modules/package-json-from-dist/LICENSE.md @@ -0,0 +1,63 @@ +All packages under `src/` are licensed according to the terms in +their respective `LICENSE` or `LICENSE.md` files. + +The remainder of this project is licensed under the Blue Oak +Model License, as follows: + +----- + +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** diff --git a/node_modules/package-json-from-dist/README.md b/node_modules/package-json-from-dist/README.md new file mode 100644 index 0000000000..a9e1344851 --- /dev/null +++ b/node_modules/package-json-from-dist/README.md @@ -0,0 +1,110 @@ +# package-json-from-dist + +Sometimes you want to load the `package.json` into your +TypeScript program, and it's tempting to just `import +'../package.json'`, since that seems to work. + +However, this requires `tsc` to make an entire copy of your +`package.json` file into the `dist` folder, which is a problem if +you're using something like +[tshy](https://github.com/isaacs/tshy), which uses the +`package.json` file in dist for another purpose. Even when that +does work, it's asking the module system to do a bunch of extra +fs system calls, just to load a version number or something. (See +[this issue](https://github.com/isaacs/tshy/issues/61).) + +This module helps by just finding the package.json file +appropriately, and reading and parsing it in the most normal +fashion. + +## Caveats + +This _only_ works if your code builds into a target folder called +`dist`, which is in the root of the package. It also requires +that you do not have a folder named `node_modules` anywhere +within your dev environment, or else it'll get the wrong answers +there. (But, at least, that'll be in dev, so you're pretty likely +to notice.) + +If you build to some other location, then you'll need a different +approach. (Feel free to fork this module and make it your own, or +just put the code right inline, there's not much of it.) + +## USAGE + +```js +// src/index.ts +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' + +const pj = findPackageJson(import.meta.url) +console.log(`package.json found at ${pj}`) + +const pkg = loadPackageJson(import.meta.url) +console.log(`Hello from ${pkg.name}@${pkg.version}`) +``` + +If your module is not directly in the `./src` folder, then you need +to specify the path that you would expect to find the +`package.json` when it's _not_ built to the `dist` folder. + +```js +// src/components/something.ts +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' + +const pj = findPackageJson(import.meta.url, '../../package.json') +console.log(`package.json found at ${pj}`) + +const pkg = loadPackageJson(import.meta.url, '../../package.json') +console.log(`Hello from ${pkg.name}@${pkg.version}`) +``` + +When running from CommmonJS, use `__filename` instead of +`import.meta.url`. + +```js +// src/index.cts +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' + +const pj = findPackageJson(__filename) +console.log(`package.json found at ${pj}`) + +const pkg = loadPackageJson(__filename) +console.log(`Hello from ${pkg.name}@${pkg.version}`) +``` + +Since [tshy](https://github.com/isaacs/tshy) builds _both_ +CommonJS and ESM by default, you may find that you need a +CommonJS override and some `//@ts-ignore` magic to make it work. + +`src/pkg.ts`: + +```js +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' +//@ts-ignore +export const pkg = loadPackageJson(import.meta.url) +//@ts-ignore +export const pj = findPackageJson(import.meta.url) +``` + +`src/pkg-cjs.cts`: + +```js +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' +export const pkg = loadPackageJson(__filename) +export const pj = findPackageJson(__filename) +``` diff --git a/node_modules/package-json-from-dist/package.json b/node_modules/package-json-from-dist/package.json new file mode 100644 index 0000000000..a2d03c3269 --- /dev/null +++ b/node_modules/package-json-from-dist/package.json @@ -0,0 +1,68 @@ +{ + "name": "package-json-from-dist", + "version": "1.0.1", + "description": "Load the local package.json from either src or dist folder", + "main": "./dist/commonjs/index.js", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc" + }, + "author": "Isaac Z. Schlueter (https://izs.me)", + "license": "BlueOak-1.0.0", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/package-json-from-dist.git" + }, + "devDependencies": { + "@types/node": "^20.12.12", + "prettier": "^3.2.5", + "tap": "^18.5.3", + "typedoc": "^0.24.8", + "typescript": "^5.1.6", + "tshy": "^1.14.0" + }, + "prettier": { + "semi": false, + "printWidth": 70, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf", + "experimentalTernaries": true + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "types": "./dist/commonjs/index.d.ts", + "type": "module" +} diff --git a/node_modules/parse-entities/index.d.ts b/node_modules/parse-entities/index.d.ts new file mode 100644 index 0000000000..4e94341887 --- /dev/null +++ b/node_modules/parse-entities/index.d.ts @@ -0,0 +1,126 @@ +import type {Point, Position} from 'unist' + +// To do: next major: remove `void` from allowed return types. + +/** + * @typeParam Context + * Value used as `this`. + * @this + * The `warningContext` given to `parseEntities` + * @param reason + * Human readable reason for emitting a parse error. + * @param point + * Place where the error occurred. + * @param code + * Machine readable code the error. + */ +export type WarningHandler = ( + this: Context, + reason: string, + point: Point, + code: number +) => undefined | void + +/** + * @typeParam Context + * Value used as `this`. + * @this + * The `referenceContext` given to `parseEntities` + * @param value + * Decoded character reference. + * @param position + * Place where `value` starts and ends. + * @param source + * Raw source of character reference. + */ +export type ReferenceHandler = ( + this: Context, + value: string, + position: Position, + source: string +) => undefined | void + +/** + * @typeParam Context + * Value used as `this`. + * @this + * The `textContext` given to `parseEntities`. + * @param value + * String of content. + * @param position + * Place where `value` starts and ends. + */ +export type TextHandler = ( + this: Context, + value: string, + position: Position +) => undefined | void + +/** + * Configuration. + * + * @typeParam WarningContext + * Value used as `this` in the `warning` handler. + * @typeParam ReferenceContext + * Value used as `this` in the `reference` handler. + * @typeParam TextContext + * Value used as `this` in the `text` handler. + */ +export interface Options< + WarningContext = undefined, + ReferenceContext = undefined, + TextContext = undefined +> { + /** + * Additional character to accept. + * This allows other characters, without error, when following an ampersand. + * + * @default '' + */ + additional?: string | null | undefined + /** + * Whether to parse `value` as an attribute value. + * This results in slightly different behavior. + * + * @default false + */ + attribute?: boolean | null | undefined + /** + * Whether to allow nonterminated character references. + * For example, `©cat` for `©cat`. + * This behavior is compliant to the spec but can lead to unexpected results. + * + * @default true + */ + nonTerminated?: boolean | null | undefined + /** + * Starting `position` of `value` (`Point` or `Position`). Useful when dealing with values nested in some sort of syntax tree. + */ + position?: Readonly | Readonly | null | undefined + /** + * Context used when calling `warning`. + */ + warningContext?: WarningContext | null | undefined + /** + * Context used when calling `reference`. + */ + referenceContext?: ReferenceContext | null | undefined + /** + * Context used when calling `text`. + */ + textContext?: TextContext | null | undefined + /** + * Warning handler. + */ + warning?: WarningHandler | null | undefined + /** + * Reference handler. + */ + reference?: ReferenceHandler | null | undefined + /** + * Text handler. + */ + text?: TextHandler | null | undefined +} + +export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/index.js b/node_modules/parse-entities/index.js new file mode 100644 index 0000000000..60157967c0 --- /dev/null +++ b/node_modules/parse-entities/index.js @@ -0,0 +1,3 @@ +// Note: more types exposed from `index.d.ts`. +// To do: refactor to include type parameters in JS. +export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/license b/node_modules/parse-entities/license new file mode 100644 index 0000000000..8fbc47ddb9 --- /dev/null +++ b/node_modules/parse-entities/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/parse-entities/package.json b/node_modules/parse-entities/package.json new file mode 100644 index 0000000000..cb3820aa91 --- /dev/null +++ b/node_modules/parse-entities/package.json @@ -0,0 +1,91 @@ +{ + "name": "parse-entities", + "version": "4.0.2", + "description": "Parse HTML character references", + "license": "MIT", + "keywords": [ + "parse", + "html", + "character", + "reference", + "entity", + "entities" + ], + "repository": "wooorm/parse-entities", + "bugs": "https://github.com/wooorm/parse-entities/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "c8": "^10.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.60.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true, + "rules": { + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/ban-types": "off", + "complexity": "off", + "max-depth": "off", + "no-bitwise": "off", + "unicorn/numeric-separators-style": "off", + "unicorn/prefer-code-point": "off" + } + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/parse-entities/readme.md b/node_modules/parse-entities/readme.md new file mode 100644 index 0000000000..cdc8c3279f --- /dev/null +++ b/node_modules/parse-entities/readme.md @@ -0,0 +1,266 @@ +# parse-entities + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Parse HTML character references. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`parseEntities(value[, options])`](#parseentitiesvalue-options) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a small and powerful decoder of HTML character references (often called +entities). + +## When should I use this? + +You can use this for spec-compliant decoding of character references. +It’s small and fast enough to do that well. +You can also use this when making a linter, because there are different warnings +emitted with reasons for why and positional info on where they happened. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 14.14+, 16.0+), install with [npm][]: + +```sh +npm install parse-entities +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {parseEntities} from 'https://esm.sh/parse-entities@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {parseEntities} from 'parse-entities' + +console.log(parseEntities('alpha & bravo'))) +// => alpha & bravo + +console.log(parseEntities('charlie ©cat; delta')) +// => charlie ©cat; delta + +console.log(parseEntities('echo © foxtrot ≠ golf 𝌆 hotel')) +// => echo © foxtrot ≠ golf 𝌆 hotel +``` + +## API + +This package exports the identifier `parseEntities`. +There is no default export. + +### `parseEntities(value[, options])` + +Parse HTML character references. + +##### `options` + +Configuration (optional). + +###### `options.additional` + +Additional character to accept (`string?`, default: `''`). +This allows other characters, without error, when following an ampersand. + +###### `options.attribute` + +Whether to parse `value` as an attribute value (`boolean?`, default: `false`). +This results in slightly different behavior. + +###### `options.nonTerminated` + +Whether to allow nonterminated references (`boolean`, default: `true`). +For example, `©cat` for `©cat`. +This behavior is compliant to the spec but can lead to unexpected results. + +###### `options.position` + +Starting `position` of `value` (`Position` or `Point`, optional). +Useful when dealing with values nested in some sort of syntax tree. +The default is: + +```js +{line: 1, column: 1, offset: 0} +``` + +###### `options.warning` + +Error handler ([`Function?`][warning]). + +###### `options.text` + +Text handler ([`Function?`][text]). + +###### `options.reference` + +Reference handler ([`Function?`][reference]). + +###### `options.warningContext` + +Context used when calling `warning` (`'*'`, optional). + +###### `options.textContext` + +Context used when calling `text` (`'*'`, optional). + +###### `options.referenceContext` + +Context used when calling `reference` (`'*'`, optional) + +##### Returns + +`string` — decoded `value`. + +#### `function warning(reason, point, code)` + +Error handler. + +###### Parameters + +* `this` (`*`) — refers to `warningContext` when given to `parseEntities` +* `reason` (`string`) — human readable reason for emitting a parse error +* `point` ([`Point`][point]) — place where the error occurred +* `code` (`number`) — machine readable code the error + +The following codes are used: + +| Code | Example | Note | +| ---- | ------------------ | --------------------------------------------- | +| `1` | `foo & bar` | Missing semicolon (named) | +| `2` | `foo { bar` | Missing semicolon (numeric) | +| `3` | `Foo &bar baz` | Empty (named) | +| `4` | `Foo &#` | Empty (numeric) | +| `5` | `Foo &bar; baz` | Unknown (named) | +| `6` | `Foo € baz` | [Disallowed reference][invalid] | +| `7` | `Foo � baz` | Prohibited: outside permissible unicode range | + +#### `function text(value, position)` + +Text handler. + +###### Parameters + +* `this` (`*`) — refers to `textContext` when given to `parseEntities` +* `value` (`string`) — string of content +* `position` ([`Position`][position]) — place where `value` starts and ends + +#### `function reference(value, position, source)` + +Character reference handler. + +###### Parameters + +* `this` (`*`) — refers to `referenceContext` when given to `parseEntities` +* `value` (`string`) — decoded character reference +* `position` ([`Position`][position]) — place where `source` starts and ends +* `source` (`string`) — raw source of character reference + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types `Options`, `WarningHandler`, +`ReferenceHandler`, and `TextHandler`. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 14.14+ and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe: it matches the HTML spec to parse character references. + +## Related + +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — encode HTML character references +* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) + — info on character references +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — info on HTML4 character references +* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) + — info on legacy character references +* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) + — info on invalid numeric character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/parse-entities/workflows/main/badge.svg + +[build]: https://github.com/wooorm/parse-entities/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/parse-entities.svg + +[coverage]: https://codecov.io/github/wooorm/parse-entities + +[downloads-badge]: https://img.shields.io/npm/dm/parse-entities.svg + +[downloads]: https://www.npmjs.com/package/parse-entities + +[size-badge]: https://img.shields.io/bundlephobia/minzip/parse-entities.svg + +[size]: https://bundlephobia.com/result?p=parse-entities + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[warning]: #function-warningreason-point-code + +[text]: #function-textvalue-position + +[reference]: #function-referencevalue-position-source + +[invalid]: https://github.com/wooorm/character-reference-invalid + +[point]: https://github.com/syntax-tree/unist#point + +[position]: https://github.com/syntax-tree/unist#position + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/path-key/index.d.ts b/node_modules/path-key/index.d.ts new file mode 100644 index 0000000000..7c575d1975 --- /dev/null +++ b/node_modules/path-key/index.d.ts @@ -0,0 +1,40 @@ +/// + +declare namespace pathKey { + interface Options { + /** + Use a custom environment variables object. Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env). + */ + readonly env?: {[key: string]: string | undefined}; + + /** + Get the PATH key for a specific platform. Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform). + */ + readonly platform?: NodeJS.Platform; + } +} + +declare const pathKey: { + /** + Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform. + + @example + ``` + import pathKey = require('path-key'); + + const key = pathKey(); + //=> 'PATH' + + const PATH = process.env[key]; + //=> '/usr/local/bin:/usr/bin:/bin' + ``` + */ + (options?: pathKey.Options): string; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function pathKey(options?: pathKey.Options): string; + // export = pathKey; + default: typeof pathKey; +}; + +export = pathKey; diff --git a/node_modules/path-key/index.js b/node_modules/path-key/index.js new file mode 100644 index 0000000000..0cf6415d60 --- /dev/null +++ b/node_modules/path-key/index.js @@ -0,0 +1,16 @@ +'use strict'; + +const pathKey = (options = {}) => { + const environment = options.env || process.env; + const platform = options.platform || process.platform; + + if (platform !== 'win32') { + return 'PATH'; + } + + return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path'; +}; + +module.exports = pathKey; +// TODO: Remove this for the next major release +module.exports.default = pathKey; diff --git a/node_modules/path-key/license b/node_modules/path-key/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/path-key/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/path-key/package.json b/node_modules/path-key/package.json new file mode 100644 index 0000000000..c8cbd383af --- /dev/null +++ b/node_modules/path-key/package.json @@ -0,0 +1,39 @@ +{ + "name": "path-key", + "version": "3.1.1", + "description": "Get the PATH environment variable key cross-platform", + "license": "MIT", + "repository": "sindresorhus/path-key", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "path", + "key", + "environment", + "env", + "variable", + "var", + "get", + "cross-platform", + "windows" + ], + "devDependencies": { + "@types/node": "^11.13.0", + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/node_modules/path-key/readme.md b/node_modules/path-key/readme.md new file mode 100644 index 0000000000..a9052d7a69 --- /dev/null +++ b/node_modules/path-key/readme.md @@ -0,0 +1,61 @@ +# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key) + +> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform + +It's usually `PATH`, but on Windows it can be any casing like `Path`... + + +## Install + +``` +$ npm install path-key +``` + + +## Usage + +```js +const pathKey = require('path-key'); + +const key = pathKey(); +//=> 'PATH' + +const PATH = process.env[key]; +//=> '/usr/local/bin:/usr/bin:/bin' +``` + + +## API + +### pathKey(options?) + +#### options + +Type: `object` + +##### env + +Type: `object`
      +Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env) + +Use a custom environment variables object. + +#### platform + +Type: `string`
      +Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform) + +Get the PATH key for a specific platform. + + +--- + +

      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/path-scurry/LICENSE.md b/node_modules/path-scurry/LICENSE.md new file mode 100644 index 0000000000..c5402b9577 --- /dev/null +++ b/node_modules/path-scurry/LICENSE.md @@ -0,0 +1,55 @@ +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** diff --git a/node_modules/path-scurry/README.md b/node_modules/path-scurry/README.md new file mode 100644 index 0000000000..b5cb495c0b --- /dev/null +++ b/node_modules/path-scurry/README.md @@ -0,0 +1,636 @@ +# path-scurry + +Extremely high performant utility for building tools that read +the file system, minimizing filesystem and path string munging +operations to the greatest degree possible. + +## Ugh, yet another file traversal thing on npm? + +Yes. None of the existing ones gave me exactly what I wanted. + +## Well what is it you wanted? + +While working on [glob](http://npm.im/glob), I found that I +needed a module to very efficiently manage the traversal over a +folder tree, such that: + +1. No `readdir()` or `stat()` would ever be called on the same + file or directory more than one time. +2. No `readdir()` calls would be made if we can be reasonably + sure that the path is not a directory. (Ie, a previous + `readdir()` or `stat()` covered the path, and + `ent.isDirectory()` is false.) +3. `path.resolve()`, `dirname()`, `basename()`, and other + string-parsing/munging operations are be minimized. This means + it has to track "provisional" child nodes that may not exist + (and if we find that they _don't_ exist, store that + information as well, so we don't have to ever check again). +4. The API is not limited to use as a stream/iterator/etc. There + are many cases where an API like node's `fs` is preferrable. +5. It's more important to prevent excess syscalls than to be up + to date, but it should be smart enough to know what it + _doesn't_ know, and go get it seamlessly when requested. +6. Do not blow up the JS heap allocation if operating on a + directory with a huge number of entries. +7. Handle all the weird aspects of Windows paths, like UNC paths + and drive letters and wrongway slashes, so that the consumer + can return canonical platform-specific paths without having to + parse or join or do any error-prone string munging. + +## PERFORMANCE + +JavaScript people throw around the word "blazing" a lot. I hope +that this module doesn't blaze anyone. But it does go very fast, +in the cases it's optimized for, if used properly. + +PathScurry provides ample opportunities to get extremely good +performance, as well as several options to trade performance for +convenience. + +Benchmarks can be run by executing `npm run bench`. + +As is always the case, doing more means going slower, doing less +means going faster, and there are trade offs between speed and +memory usage. + +PathScurry makes heavy use of [LRUCache](http://npm.im/lru-cache) +to efficiently cache whatever it can, and `Path` objects remain +in the graph for the lifetime of the walker, so repeated calls +with a single PathScurry object will be extremely fast. However, +adding items to a cold cache means "doing more", so in those +cases, we pay a price. Nothing is free, but every effort has been +made to reduce costs wherever possible. + +Also, note that a "cache as long as possible" approach means that +changes to the filesystem may not be reflected in the results of +repeated PathScurry operations. + +For resolving string paths, `PathScurry` ranges from 5-50 times +faster than `path.resolve` on repeated resolutions, but around +100 to 1000 times _slower_ on the first resolution. If your +program is spending a lot of time resolving the _same_ paths +repeatedly (like, thousands or millions of times), then this can +be beneficial. But both implementations are pretty fast, and +speeding up an infrequent operation from 4µs to 400ns is not +going to move the needle on your app's performance. + +For walking file system directory trees, a lot depends on how +often a given PathScurry object will be used, and also on the +walk method used. + +With default settings on a folder tree of 100,000 items, +consisting of around a 10-to-1 ratio of normal files to +directories, PathScurry performs comparably to +[@nodelib/fs.walk](http://npm.im/@nodelib/fs.walk), which is the +fastest and most reliable file system walker I could find. As far +as I can tell, it's almost impossible to go much faster in a +Node.js program, just based on how fast you can push syscalls out +to the fs thread pool. + +On my machine, that is about 1000-1200 completed walks per second +for async or stream walks, and around 500-600 walks per second +synchronously. + +In the warm cache state, PathScurry's performance increases +around 4x for async `for await` iteration, 10-15x faster for +streams and synchronous `for of` iteration, and anywhere from 30x +to 80x faster for the rest. + +``` +# walk 100,000 fs entries, 10/1 file/dir ratio +# operations / ms + New PathScurry object | Reuse PathScurry object + stream: 1112.589 | 13974.917 +sync stream: 492.718 | 15028.343 + async walk: 1095.648 | 32706.395 + sync walk: 527.632 | 46129.772 + async iter: 1288.821 | 5045.510 + sync iter: 498.496 | 17920.746 +``` + +A hand-rolled walk calling `entry.readdir()` and recursing +through the entries can benefit even more from caching, with +greater flexibility and without the overhead of streams or +generators. + +The cold cache state is still limited by the costs of file system +operations, but with a warm cache, the only bottleneck is CPU +speed and VM optimizations. Of course, in that case, some care +must be taken to ensure that you don't lose performance as a +result of silly mistakes, like calling `readdir()` on entries +that you know are not directories. + +``` +# manual recursive iteration functions + cold cache | warm cache +async: 1164.901 | 17923.320 + cb: 1101.127 | 40999.344 +zalgo: 1082.240 | 66689.936 + sync: 526.935 | 87097.591 +``` + +In this case, the speed improves by around 10-20x in the async +case, 40x in the case of using `entry.readdirCB` with protections +against synchronous callbacks, and 50-100x with callback +deferrals disabled, and _several hundred times faster_ for +synchronous iteration. + +If you can think of a case that is not covered in these +benchmarks, or an implementation that performs significantly +better than PathScurry, please [let me +know](https://github.com/isaacs/path-scurry/issues). + +## USAGE + +```ts +// hybrid module, load with either method +import { PathScurry, Path } from 'path-scurry' +// or: +const { PathScurry, Path } = require('path-scurry') + +// very simple example, say we want to find and +// delete all the .DS_Store files in a given path +// note that the API is very similar to just a +// naive walk with fs.readdir() +import { unlink } from 'fs/promises' + +// easy way, iterate over the directory and do the thing +const pw = new PathScurry(process.cwd()) +for await (const entry of pw) { + if (entry.isFile() && entry.name === '.DS_Store') { + unlink(entry.fullpath()) + } +} + +// here it is as a manual recursive method +const walk = async (entry: Path) => { + const promises: Promise = [] + // readdir doesn't throw on non-directories, it just doesn't + // return any entries, to save stack trace costs. + // Items are returned in arbitrary unsorted order + for (const child of await pw.readdir(entry)) { + // each child is a Path object + if (child.name === '.DS_Store' && child.isFile()) { + // could also do pw.resolve(entry, child.name), + // just like fs.readdir walking, but .fullpath is + // a *slightly* more efficient shorthand. + promises.push(unlink(child.fullpath())) + } else if (child.isDirectory()) { + promises.push(walk(child)) + } + } + return Promise.all(promises) +} + +walk(pw.cwd).then(() => { + console.log('all .DS_Store files removed') +}) + +const pw2 = new PathScurry('/a/b/c') // pw2.cwd is the Path for /a/b/c +const relativeDir = pw2.cwd.resolve('../x') // Path entry for '/a/b/x' +const relative2 = pw2.cwd.resolve('/a/b/d/../x') // same path, same entry +assert.equal(relativeDir, relative2) +``` + +## API + +[Full TypeDoc API](https://isaacs.github.io/path-scurry) + +There are platform-specific classes exported, but for the most +part, the default `PathScurry` and `Path` exports are what you +most likely need, unless you are testing behavior for other +platforms. + +Intended public API is documented here, but the full +documentation does include internal types, which should not be +accessed directly. + +### Interface `PathScurryOpts` + +The type of the `options` argument passed to the `PathScurry` +constructor. + +- `nocase`: Boolean indicating that file names should be compared + case-insensitively. Defaults to `true` on darwin and win32 + implementations, `false` elsewhere. + + **Warning** Performing case-insensitive matching on a + case-sensitive filesystem will result in occasionally very + bizarre behavior. Performing case-sensitive matching on a + case-insensitive filesystem may negatively impact performance. + +- `childrenCacheSize`: Number of child entries to cache, in order + to speed up `resolve()` and `readdir()` calls. Defaults to + `16 * 1024` (ie, `16384`). + + Setting it to a higher value will run the risk of JS heap + allocation errors on large directory trees. Setting it to `256` + or smaller will significantly reduce the construction time and + data consumption overhead, but with the downside of operations + being slower on large directory trees. Setting it to `0` will + mean that effectively no operations are cached, and this module + will be roughly the same speed as `fs` for file system + operations, and _much_ slower than `path.resolve()` for + repeated path resolution. + +- `fs` An object that will be used to override the default `fs` + methods. Any methods that are not overridden will use Node's + built-in implementations. + + - lstatSync + - readdir (callback `withFileTypes` Dirent variant, used for + readdirCB and most walks) + - readdirSync + - readlinkSync + - realpathSync + - promises: Object containing the following async methods: + - lstat + - readdir (Dirent variant only) + - readlink + - realpath + +### Interface `WalkOptions` + +The options object that may be passed to all walk methods. + +- `withFileTypes`: Boolean, default true. Indicates that `Path` + objects should be returned. Set to `false` to get string paths + instead. +- `follow`: Boolean, default false. Attempt to read directory + entries from symbolic links. Otherwise, only actual directories + are traversed. Regardless of this setting, a given target path + will only ever be walked once, meaning that a symbolic link to + a previously traversed directory will never be followed. + + Setting this imposes a slight performance penalty, because + `readlink` must be called on all symbolic links encountered, in + order to avoid infinite cycles. + +- `filter`: Function `(entry: Path) => boolean`. If provided, + will prevent the inclusion of any entry for which it returns a + falsey value. This will not prevent directories from being + traversed if they do not pass the filter, though it will + prevent the directories themselves from being included in the + results. By default, if no filter is provided, then all entries + are included in the results. +- `walkFilter`: Function `(entry: Path) => boolean`. If provided, + will prevent the traversal of any directory (or in the case of + `follow:true` symbolic links to directories) for which the + function returns false. This will not prevent the directories + themselves from being included in the result set. Use `filter` + for that. + +Note that TypeScript return types will only be inferred properly +from static analysis if the `withFileTypes` option is omitted, or +a constant `true` or `false` value. + +### Class `PathScurry` + +The main interface. Defaults to an appropriate class based on the +current platform. + +Use `PathScurryWin32`, `PathScurryDarwin`, or `PathScurryPosix` +if implementation-specific behavior is desired. + +All walk methods may be called with a `WalkOptions` argument to +walk over the object's current working directory with the +supplied options. + +#### `async pw.walk(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Walk the directory tree according to the options provided, +resolving to an array of all entries found. + +#### `pw.walkSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Walk the directory tree according to the options provided, +returning an array of all entries found. + +#### `pw.iterate(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Iterate over the directory asynchronously, for use with `for +await of`. This is also the default async iterator method. + +#### `pw.iterateSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Iterate over the directory synchronously, for use with `for of`. +This is also the default sync iterator method. + +#### `pw.stream(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Return a [Minipass](http://npm.im/minipass) stream that emits +each entry or path string in the walk. Results are made available +asynchronously. + +#### `pw.streamSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Return a [Minipass](http://npm.im/minipass) stream that emits +each entry or path string in the walk. Results are made available +synchronously, meaning that the walk will complete in a single +tick if the stream is fully consumed. + +#### `pw.cwd` + +Path object representing the current working directory for the +PathScurry. + +#### `pw.chdir(path: string)` + +Set the new effective current working directory for the scurry +object, so that `path.relative()` and `path.relativePosix()` +return values relative to the new cwd path. + +#### `pw.depth(path?: Path | string): number` + +Return the depth of the specified path (or the PathScurry cwd) +within the directory tree. + +Root entries have a depth of `0`. + +#### `pw.resolve(...paths: string[])` + +Caching `path.resolve()`. + +Significantly faster than `path.resolve()` if called repeatedly +with the same paths. Significantly slower otherwise, as it builds +out the cached Path entries. + +To get a `Path` object resolved from the `PathScurry`, use +`pw.cwd.resolve(path)`. Note that `Path.resolve` only takes a +single string argument, not multiple. + +#### `pw.resolvePosix(...paths: string[])` + +Caching `path.resolve()`, but always using posix style paths. + +This is identical to `pw.resolve(...paths)` on posix systems (ie, +everywhere except Windows). + +On Windows, it returns the full absolute UNC path using `/` +separators. Ie, instead of `'C:\\foo\\bar`, it would return +`//?/C:/foo/bar`. + +#### `pw.relative(path: string | Path): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +#### `pw.relativePosix(path: string | Path): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry, using `/` path separators. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +On posix platforms (ie, all platforms except Windows), this is +identical to `pw.relative(path)`. + +On Windows systems, it returns the resulting string as a +`/`-delimited path. If an absolute path is returned (because the +target does not share a common ancestor with `pw.cwd`), then a +full absolute UNC path will be returned. Ie, instead of +`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. + +#### `pw.basename(path: string | Path): string` + +Return the basename of the provided string or Path. + +#### `pw.dirname(path: string | Path): string` + +Return the parent directory of the supplied string or Path. + +#### `async pw.readdir(dir = pw.cwd, opts = { withFileTypes: true })` + +Read the directory and resolve to an array of strings if +`withFileTypes` is explicitly set to `false` or Path objects +otherwise. + +Can be called as `pw.readdir({ withFileTypes: boolean })` as +well. + +Returns `[]` if no entries are found, or if any error occurs. + +Note that TypeScript return types will only be inferred properly +from static analysis if the `withFileTypes` option is omitted, or +a constant `true` or `false` value. + +#### `pw.readdirSync(dir = pw.cwd, opts = { withFileTypes: true })` + +Synchronous `pw.readdir()` + +#### `async pw.readlink(link = pw.cwd, opts = { withFileTypes: false })` + +Call `fs.readlink` on the supplied string or Path object, and +return the result. + +Can be called as `pw.readlink({ withFileTypes: boolean })` as +well. + +Returns `undefined` if any error occurs (for example, if the +argument is not a symbolic link), or a `Path` object if +`withFileTypes` is explicitly set to `true`, or a string +otherwise. + +Note that TypeScript return types will only be inferred properly +from static analysis if the `withFileTypes` option is omitted, or +a constant `true` or `false` value. + +#### `pw.readlinkSync(link = pw.cwd, opts = { withFileTypes: false })` + +Synchronous `pw.readlink()` + +#### `async pw.lstat(entry = pw.cwd)` + +Call `fs.lstat` on the supplied string or Path object, and fill +in as much information as possible, returning the updated `Path` +object. + +Returns `undefined` if the entry does not exist, or if any error +is encountered. + +Note that some `Stats` data (such as `ino`, `dev`, and `mode`) +will not be supplied. For those things, you'll need to call +`fs.lstat` yourself. + +#### `pw.lstatSync(entry = pw.cwd)` + +Synchronous `pw.lstat()` + +#### `pw.realpath(entry = pw.cwd, opts = { withFileTypes: false })` + +Call `fs.realpath` on the supplied string or Path object, and +return the realpath if available. + +Returns `undefined` if any error occurs. + +May be called as `pw.realpath({ withFileTypes: boolean })` to run +on `pw.cwd`. + +#### `pw.realpathSync(entry = pw.cwd, opts = { withFileTypes: false })` + +Synchronous `pw.realpath()` + +### Class `Path` implements [fs.Dirent](https://nodejs.org/docs/latest/api/fs.html#class-fsdirent) + +Object representing a given path on the filesystem, which may or +may not exist. + +Note that the actual class in use will be either `PathWin32` or +`PathPosix`, depending on the implementation of `PathScurry` in +use. They differ in the separators used to split and join path +strings, and the handling of root paths. + +In `PathPosix` implementations, paths are split and joined using +the `'/'` character, and `'/'` is the only root path ever in use. + +In `PathWin32` implementations, paths are split using either +`'/'` or `'\\'` and joined using `'\\'`, and multiple roots may +be in use based on the drives and UNC paths encountered. UNC +paths such as `//?/C:/` that identify a drive letter, will be +treated as an alias for the same root entry as their associated +drive letter (in this case `'C:\\'`). + +#### `path.name` + +Name of this file system entry. + +**Important**: _always_ test the path name against any test +string using the `isNamed` method, and not by directly comparing +this string. Otherwise, unicode path strings that the system sees +as identical will not be properly treated as the same path, +leading to incorrect behavior and possible security issues. + +#### `path.isNamed(name: string): boolean` + +Return true if the path is a match for the given path name. This +handles case sensitivity and unicode normalization. + +Note: even on case-sensitive systems, it is **not** safe to test +the equality of the `.name` property to determine whether a given +pathname matches, due to unicode normalization mismatches. + +Always use this method instead of testing the `path.name` +property directly. + +#### `path.isCWD` + +Set to true if this `Path` object is the current working +directory of the `PathScurry` collection that contains it. + +#### `path.getType()` + +Returns the type of the Path object, `'File'`, `'Directory'`, +etc. + +#### `path.isType(t: type)` + +Returns true if `is{t}()` returns true. + +For example, `path.isType('Directory')` is equivalent to +`path.isDirectory()`. + +#### `path.depth()` + +Return the depth of the Path entry within the directory tree. +Root paths have a depth of `0`. + +#### `path.fullpath()` + +The fully resolved path to the entry. + +#### `path.fullpathPosix()` + +The fully resolved path to the entry, using `/` separators. + +On posix systems, this is identical to `path.fullpath()`. On +windows, this will return a fully resolved absolute UNC path +using `/` separators. Eg, instead of `'C:\\foo\\bar'`, it will +return `'//?/C:/foo/bar'`. + +#### `path.isFile()`, `path.isDirectory()`, etc. + +Same as the identical `fs.Dirent.isX()` methods. + +#### `path.isUnknown()` + +Returns true if the path's type is unknown. Always returns true +when the path is known to not exist. + +#### `path.resolve(p: string)` + +Return a `Path` object associated with the provided path string +as resolved from the current Path object. + +#### `path.relative(): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +#### `path.relativePosix(): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry, using `/` path separators. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +On posix platforms (ie, all platforms except Windows), this is +identical to `pw.relative(path)`. + +On Windows systems, it returns the resulting string as a +`/`-delimited path. If an absolute path is returned (because the +target does not share a common ancestor with `pw.cwd`), then a +full absolute UNC path will be returned. Ie, instead of +`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. + +#### `async path.readdir()` + +Return an array of `Path` objects found by reading the associated +path entry. + +If path is not a directory, or if any error occurs, returns `[]`, +and marks all children as provisional and non-existent. + +#### `path.readdirSync()` + +Synchronous `path.readdir()` + +#### `async path.readlink()` + +Return the `Path` object referenced by the `path` as a symbolic +link. + +If the `path` is not a symbolic link, or any error occurs, +returns `undefined`. + +#### `path.readlinkSync()` + +Synchronous `path.readlink()` + +#### `async path.lstat()` + +Call `lstat` on the path object, and fill it in with details +determined. + +If path does not exist, or any other error occurs, returns +`undefined`, and marks the path as "unknown" type. + +#### `path.lstatSync()` + +Synchronous `path.lstat()` + +#### `async path.realpath()` + +Call `realpath` on the path, and return a Path object +corresponding to the result, or `undefined` if any error occurs. + +#### `path.realpathSync()` + +Synchornous `path.realpath()` diff --git a/node_modules/path-scurry/package.json b/node_modules/path-scurry/package.json new file mode 100644 index 0000000000..e176615789 --- /dev/null +++ b/node_modules/path-scurry/package.json @@ -0,0 +1,89 @@ +{ + "name": "path-scurry", + "version": "1.11.1", + "description": "walk paths fast and efficiently", + "author": "Isaac Z. Schlueter (https://blog.izs.me)", + "main": "./dist/commonjs/index.js", + "type": "module", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "license": "BlueOak-1.0.0", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts", + "bench": "bash ./scripts/bench.sh" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@nodelib/fs.walk": "^1.2.8", + "@types/node": "^20.12.11", + "c8": "^7.12.0", + "eslint-config-prettier": "^8.6.0", + "mkdirp": "^3.0.0", + "prettier": "^3.2.5", + "rimraf": "^5.0.1", + "tap": "^18.7.2", + "ts-node": "^10.9.2", + "tshy": "^1.14.0", + "typedoc": "^0.25.12", + "typescript": "^5.4.3" + }, + "tap": { + "typecheck": true + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/path-scurry" + }, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "tshy": { + "selfLink": false, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "types": "./dist/commonjs/index.d.ts" +} diff --git a/node_modules/punycode.js/LICENSE-MIT.txt b/node_modules/punycode.js/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/punycode.js/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/punycode.js/README.md b/node_modules/punycode.js/README.md new file mode 100644 index 0000000000..f611016b01 --- /dev/null +++ b/node_modules/punycode.js/README.md @@ -0,0 +1,148 @@ +# Punycode.js [![punycode on npm](https://img.shields.io/npm/v/punycode)](https://www.npmjs.com/package/punycode) [![](https://data.jsdelivr.com/v1/package/npm/punycode/badge)](https://www.jsdelivr.com/package/npm/punycode) + +Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). + +This project provides a CommonJS module that uses ES2015+ features and JavaScript module, which work in modern Node.js versions and browsers. For the old Punycode.js version that offers the same functionality in a UMD build with support for older pre-ES2015 runtimes, including Rhino, Ringo, and Narwhal, see [v1.4.1](https://github.com/mathiasbynens/punycode.js/releases/tag/v1.4.1). + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install punycode --save +``` + +In [Node.js](https://nodejs.org/): + +> ⚠️ Note that userland modules don't hide core modules. +> For example, `require('punycode')` still imports the deprecated core module even if you executed `npm install punycode`. +> Use `require('punycode/')` to import userland modules rather than core modules. + +```js +const punycode = require('punycode/'); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## For maintainers + +### How to publish a new release + +1. On the `main` branch, bump the version number in `package.json`: + + ```sh + npm version patch -m 'Release v%s' + ``` + + Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). + + Note that this produces a Git commit + tag. + +1. Push the release commit and tag: + + ```sh + git push && git push --tags + ``` + + Our CI then automatically publishes the new release to npm, under both the [`punycode`](https://www.npmjs.com/package/punycode) and [`punycode.js`](https://www.npmjs.com/package/punycode.js) names. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode.js/package.json b/node_modules/punycode.js/package.json new file mode 100644 index 0000000000..7794798516 --- /dev/null +++ b/node_modules/punycode.js/package.json @@ -0,0 +1,58 @@ +{ + "name": "punycode.js", + "version": "2.3.1", + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "homepage": "https://mths.be/punycode", + "main": "punycode.js", + "jsnext:main": "punycode.es6.js", + "module": "punycode.es6.js", + "engines": { + "node": ">=6" + }, + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/punycode.js.git" + }, + "bugs": "https://github.com/mathiasbynens/punycode.js/issues", + "files": [ + "LICENSE-MIT.txt", + "punycode.js", + "punycode.es6.js" + ], + "scripts": { + "test": "mocha tests", + "build": "node scripts/prepublish.js" + }, + "devDependencies": { + "codecov": "^3.8.3", + "nyc": "^15.1.0", + "mocha": "^10.2.0" + }, + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + } +} diff --git a/node_modules/punycode.js/punycode.es6.js b/node_modules/punycode.js/punycode.es6.js new file mode 100644 index 0000000000..dadece25b3 --- /dev/null +++ b/node_modules/punycode.js/punycode.es6.js @@ -0,0 +1,444 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, callback) { + const result = []; + let length = array.length; + while (length--) { + result[length] = callback(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {String} A new string of characters returned by the callback + * function. + */ +function mapDomain(domain, callback) { + const parts = domain.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + domain = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + domain = domain.replace(regexSeparators, '\x2E'); + const labels = domain.split('.'); + const encoded = map(labels, callback).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = codePoints => String.fromCodePoint(...codePoints); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint >= 0x30 && codePoint < 0x3A) { + return 26 + (codePoint - 0x30); + } + if (codePoint >= 0x41 && codePoint < 0x5B) { + return codePoint - 0x41; + } + if (codePoint >= 0x61 && codePoint < 0x7B) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + const oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base) { + error('invalid-input'); + } + if (digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + const inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + const basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.3.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; +export default punycode; diff --git a/node_modules/punycode.js/punycode.js b/node_modules/punycode.js/punycode.js new file mode 100644 index 0000000000..a1ef251924 --- /dev/null +++ b/node_modules/punycode.js/punycode.js @@ -0,0 +1,443 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, callback) { + const result = []; + let length = array.length; + while (length--) { + result[length] = callback(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {String} A new string of characters returned by the callback + * function. + */ +function mapDomain(domain, callback) { + const parts = domain.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + domain = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + domain = domain.replace(regexSeparators, '\x2E'); + const labels = domain.split('.'); + const encoded = map(labels, callback).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = codePoints => String.fromCodePoint(...codePoints); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint >= 0x30 && codePoint < 0x3A) { + return 26 + (codePoint - 0x30); + } + if (codePoint >= 0x41 && codePoint < 0x5B) { + return codePoint - 0x41; + } + if (codePoint >= 0x61 && codePoint < 0x7B) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + const oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base) { + error('invalid-input'); + } + if (digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + const inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + const basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.3.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +module.exports = punycode; diff --git a/node_modules/run-con/.circleci/config.yml b/node_modules/run-con/.circleci/config.yml new file mode 100644 index 0000000000..6eaa0c8e10 --- /dev/null +++ b/node_modules/run-con/.circleci/config.yml @@ -0,0 +1,7 @@ +version: 2.1 +orbs: + node: circleci/node@5.1.0 +workflows: + node-tests: + jobs: + - node/test diff --git a/node_modules/run-con/.github/FUNDING.yml b/node_modules/run-con/.github/FUNDING.yml new file mode 100644 index 0000000000..f9d9ce5cb8 --- /dev/null +++ b/node_modules/run-con/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +issuehunt: goatandsheep/rc diff --git a/node_modules/run-con/.github/dependabot.yml b/node_modules/run-con/.github/dependabot.yml new file mode 100644 index 0000000000..f45b33e280 --- /dev/null +++ b/node_modules/run-con/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 +updates: +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + time: "10:00" + open-pull-requests-limit: 10 + versioning-strategy: increase diff --git a/node_modules/run-con/.github/workflows/coverage.yml b/node_modules/run-con/.github/workflows/coverage.yml new file mode 100644 index 0000000000..0e6653cd91 --- /dev/null +++ b/node_modules/run-con/.github/workflows/coverage.yml @@ -0,0 +1,37 @@ +name: Running Code Coverage + +on: [push, pull_request] + +permissions: read-all + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 16.x, 18.x, 20.x] + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: npm install + + - name: Run the tests + run: npm test -- --coverage + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/node_modules/run-con/.github/workflows/dependabot.yml b/node_modules/run-con/.github/workflows/dependabot.yml new file mode 100644 index 0000000000..a4679eb58e --- /dev/null +++ b/node_modules/run-con/.github/workflows/dependabot.yml @@ -0,0 +1,44 @@ +name: CreateDependabotIssue +on: + workflow_dispatch: + pull_request: + types: [opened, reopened] + +permissions: + actions: none + checks: none + contents: read + deployments: none + id-token: write + issues: write + discussions: none + packages: none + pages: none + pull-requests: none + repository-projects: none + security-events: none + statuses: none + +jobs: + issue: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + steps: + - name: Checks if Dependabot PR + if: ${{github.event_name != 'pull_request'}} + run: echo "no dependabot" + - uses: actions/checkout@v3 + if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} + + - name: Open issue if Dependabot PR + if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} + env: + pr_title: ${{github.event.pull_request.title}} + pr_number: ${{github.event.pull_request.number}} + pr_url: ${{github.event.pull_request.url}} + run: | + title="Dependabot PR $pr_title opened" + body="Dependabot has opened PR #$pr_number + Link: $pr_url" + gh issue create --title "$title" --body "$body" diff --git a/node_modules/run-con/.github/workflows/issuehunt.yml b/node_modules/run-con/.github/workflows/issuehunt.yml new file mode 100644 index 0000000000..67881e8ae7 --- /dev/null +++ b/node_modules/run-con/.github/workflows/issuehunt.yml @@ -0,0 +1,33 @@ +name: Auto message for Issues +on: + issues: + types: [opened, reopened] + +permissions: + actions: none + checks: none + contents: read + deployments: none + id-token: write + issues: write + discussions: none + packages: none + pages: none + pull-requests: none + repository-projects: none + security-events: none + statuses: none + +jobs: + comment: + name: Hello new contributor + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v3 + - name: Posts comment + env: + issue_num: ${{github.event.issue.number}} + comment_message: "Hey, thank you for opening this issue! 🙂 To boost priority on this issue and support open source please tip the team at https://issuehunt.io/r/${{github.repository}}/issues/${{github.event.issue.number }}" + run: gh issue comment $issue_num --body "$comment_message" diff --git a/node_modules/run-con/LICENSE.APACHE2 b/node_modules/run-con/LICENSE.APACHE2 new file mode 100644 index 0000000000..c65fbe9d29 --- /dev/null +++ b/node_modules/run-con/LICENSE.APACHE2 @@ -0,0 +1,15 @@ +Apache License, Version 2.0 + +Copyright (c) 2011 Dominic Tarr + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/node_modules/run-con/LICENSE.BSD b/node_modules/run-con/LICENSE.BSD new file mode 100644 index 0000000000..dd83f1731c --- /dev/null +++ b/node_modules/run-con/LICENSE.BSD @@ -0,0 +1,26 @@ +Copyright (c) 2013, Dominic Tarr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. diff --git a/node_modules/run-con/LICENSE.MIT b/node_modules/run-con/LICENSE.MIT new file mode 100644 index 0000000000..2cb7d7e207 --- /dev/null +++ b/node_modules/run-con/LICENSE.MIT @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2011 Dominic Tarr + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/run-con/README.md b/node_modules/run-con/README.md new file mode 100644 index 0000000000..f3d146441c --- /dev/null +++ b/node_modules/run-con/README.md @@ -0,0 +1,239 @@ +# run-con + +Based on +[RC ![npm downloads](https://img.shields.io/npm/dt/rc.svg?style=flat-square)](https://www.npmjs.com/package/rc) + +> The non-configurable runtime configuration loader for lazy people. + +[![npm version](https://badgen.net/npm/v/run-con)](https://www.npmjs.com/package/run-con) +![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/npm/run-con) +[![codecov](https://codecov.io/gh/goatandsheep/rc/branch/main/graph/badge.svg?token=8XbycgIgai)](https://codecov.io/gh/goatandsheep/rc) +[![npm downloads](https://img.shields.io/npm/dt/run-con.svg?style=flat-square)](https://www.npmjs.com/package/run-con) +[![Known Vulnerabilities](https://snyk.io/test/github/goatandsheep/rc/badge.svg)](https://snyk.io/test/github/goatandsheep/rc) + +## Usage + +The only option is to pass run-con the name of your app, and your default configuration. + +```javascript +var conf = require('run-con')(appname, { + //defaults go here. + port: 2468, + + //defaults which are objects will be merged, not replaced + views: { + engine: 'jade' + } +}); +``` + +`run-con` will return your configuration options merged with the defaults you specify. +If you pass in a predefined defaults object, it will be mutated: + +```javascript +var conf = {}; +require('run-con')(appname, conf); +``` + +If `run-con` finds any config files for your app, the returned config object will have +a `configs` array containing their paths: + +```javascript +var appCfg = require('run-con')(appname, conf); +appCfg.configs[0] // /etc/appnamerc +appCfg.configs[1] // /home/dominictarr/.config/appname +appCfg.config // same as appCfg.configs[appCfg.configs.length - 1] +``` + +## Standards + +Given your application name (`appname`), run-con will look in all the obvious places for configuration. + + * command line arguments, parsed by minimist _(e.g. `--foo baz`, also nested: `--foo.bar=baz`)_ + * environment variables prefixed with `${appname}_` + * or use "\_\_" to indicate nested properties
      _(e.g. `appname_foo__bar__baz` => `foo.bar.baz`)_ + * if you passed an option `--config file` then from that file + * a local `.${appname}rc` or the first found looking in `./ ../ ../../ ../../../` etc. + * `$HOME/.${appname}rc` + * `$HOME/.${appname}/config` + * `$HOME/.config/${appname}` + * `$HOME/.config/${appname}/config` + * `/etc/${appname}rc` + * `/etc/${appname}/config` + * the defaults object you passed in. + +All configuration sources that were found will be flattened into one object, +so that sources **earlier** in this list override later ones. + + +## Configuration File Formats + +Configuration files (e.g. `.appnamerc`) may be in either [json](http://json.org/example) or [ini](http://en.wikipedia.org/wiki/INI_file) format. **No** file extension (`.json` or `.ini`) should be used. The example configurations below are equivalent: + + +#### Formatted as `ini` + +``` +; You can include comments in `ini` format if you want. + +dependsOn=0.10.0 + + +; `run-con` has built-in support for ini sections, see? + +[commands] + www = ./commands/www + console = ./commands/repl + + +; You can even do nested sections + +[generators.options] + engine = ejs + +[generators.modules] + new = generate-new + engine = generate-backend + +``` + +#### Formatted as `json` + +```javascript +{ + // You can even comment your JSON, if you want + "dependsOn": "0.10.0", + "commands": { + "www": "./commands/www", + "console": "./commands/repl" + }, + "generators": { + "options": { + "engine": "ejs" + }, + "modules": { + "new": "generate-new", + "backend": "generate-backend" + } + } +} +``` + +Comments are stripped from JSON config via [strip-json-comments](https://github.com/sindresorhus/strip-json-comments). + +> Since ini, and env variables do not have a standard for types, your application needs be prepared for strings. + +To ensure that string representations of booleans and numbers are always converted into their proper types (especially useful if you intend to do strict `===` comparisons), consider using a module such as [parse-strings-in-object](https://github.com/anselanza/parse-strings-in-object) to wrap the config object returned from run-con. + + +## Simple example demonstrating precedence +Assume you have an application like this (notice the hard-coded defaults passed to run-con): +``` +const conf = require('run-con')('myapp', { + port: 12345, + mode: 'test' +}); + +console.log(JSON.stringify(conf, null, 2)); +``` +You also have a file `config.json`, with these contents: +``` +{ + "port": 9000, + "foo": "from config json", + "something": "else" +} +``` +And a file `.myapprc` in the same folder, with these contents: +``` +{ + "port": "3001", + "foo": "bar" +} +``` +Here is the expected output from various commands: + +`node .` +``` +{ + "port": "3001", + "mode": "test", + "foo": "bar", + "_": [], + "configs": [ + "/Users/stephen/repos/conftest/.myapprc" + ], + "config": "/Users/stephen/repos/conftest/.myapprc" +} +``` +*Default `mode` from hard-coded object is retained, but port is overridden by `.myapprc` file (automatically found based on appname match), and `foo` is added.* + + +`node . --foo baz` +``` +{ + "port": "3001", + "mode": "test", + "foo": "baz", + "_": [], + "configs": [ + "/Users/stephen/repos/conftest/.myapprc" + ], + "config": "/Users/stephen/repos/conftest/.myapprc" +} +``` +*Same result as above but `foo` is overridden because command-line arguments take precedence over `.myapprc` file.* + +`node . --foo barbar --config config.json` +``` +{ + "port": 9000, + "mode": "test", + "foo": "barbar", + "something": "else", + "_": [], + "config": "config.json", + "configs": [ + "/Users/stephen/repos/conftest/.myapprc", + "config.json" + ] +} +``` +*Now the `port` comes from the `config.json` file specified (overriding the value from `.myapprc`), and `foo` value is overridden by command-line despite also being specified in the `config.json` file.* + + + +## Advanced Usage + +#### Pass in your own `argv` + +You may pass in your own `argv` as the third argument to `run-con`. This is in case you want to [use your own command-line opts parser](https://github.com/dominictarr/rc/pull/12). + +```javascript +require('run-con')(appname, defaults, customArgvParser); +``` + +## Pass in your own parser + +If you have a special need to use a non-standard parser, +you can do so by passing in the parser as the 4th argument. +(leave the 3rd as null to get the default args parser) + +```javascript +require('run-con')(appname, defaults, null, parser); +``` + +This may also be used to force a more strict format, +such as strict, valid JSON only. + +## Note on Performance + +`run-con` is running `fs.statSync`-- so make sure you don't use it in a hot code path (e.g. a request handler) + +## Credit + +Original author is @dominictarr + +## License + +Multi-licensed under the two-clause BSD License, MIT License, or Apache License, version 2.0 diff --git a/node_modules/run-con/browser.js b/node_modules/run-con/browser.js new file mode 100644 index 0000000000..2a9767c9a3 --- /dev/null +++ b/node_modules/run-con/browser.js @@ -0,0 +1,7 @@ + +// when this is loaded into the browser, +// just use the defaults... + +module.exports = function (name, defaults) { + return defaults +} diff --git a/node_modules/run-con/cli.js b/node_modules/run-con/cli.js new file mode 100755 index 0000000000..34f1c04e6a --- /dev/null +++ b/node_modules/run-con/cli.js @@ -0,0 +1,4 @@ +#! /usr/bin/env node +var rc = require('./index') + +console.log(JSON.stringify(rc(process.argv[2]), false, 2)) diff --git a/node_modules/run-con/index.js b/node_modules/run-con/index.js new file mode 100644 index 0000000000..ef1c31987e --- /dev/null +++ b/node_modules/run-con/index.js @@ -0,0 +1,53 @@ +var cc = require('./lib/utils') +var join = require('path').join +var deepExtend = require('deep-extend') +var etc = '/etc' +var win = process.platform === "win32" +var home = win + ? process.env.USERPROFILE + : process.env.HOME + +module.exports = function (name, defaults, argv, parse) { + if('string' !== typeof name) + throw new Error('rc(name): name *must* be string') + if(!argv) + argv = require('minimist')(process.argv.slice(2)) + defaults = ( + 'string' === typeof defaults + ? cc.json(defaults) : defaults + ) || {} + + parse = parse || cc.parse + + var env = cc.env(name + '_') + + var configs = [defaults] + var configFiles = [] + function addConfigFile (file) { + if (configFiles.indexOf(file) >= 0) return + var fileConfig = cc.file(file) + if (fileConfig) { + configs.push(parse(fileConfig)) + configFiles.push(file) + } + } + + // which files do we look at? + if (!win) + [join(etc, name, 'config'), + join(etc, name + 'rc')].forEach(addConfigFile) + if (home) + [join(home, '.config', name, 'config'), + join(home, '.config', name), + join(home, '.' + name, 'config'), + join(home, '.' + name + 'rc')].forEach(addConfigFile) + addConfigFile(cc.find('.'+name+'rc')) + if (env.config) addConfigFile(env.config) + if (argv.config) addConfigFile(argv.config) + + return deepExtend.apply(null, configs.concat([ + env, + argv, + configFiles.length ? {configs: configFiles, config: configFiles[configFiles.length - 1]} : undefined, + ])) +} diff --git a/node_modules/run-con/package.json b/node_modules/run-con/package.json new file mode 100644 index 0000000000..a9e6ee4405 --- /dev/null +++ b/node_modules/run-con/package.json @@ -0,0 +1,29 @@ +{ + "name": "run-con", + "version": "1.3.2", + "description": "hardwired configuration loader", + "main": "index.js", + "browser": "browser.js", + "scripts": { + "test": "node test/test.js && node test/ini.js && node test/nested-env-vars.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/goatandsheep/rc.git" + }, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "keywords": [ + "config", + "rc", + "unix", + "defaults" + ], + "bin": "./cli.js", + "author": "Kemal Ahmed ", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~4.1.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + } +} diff --git a/node_modules/run-con/renovate.json b/node_modules/run-con/renovate.json new file mode 100644 index 0000000000..8b1edd8cd3 --- /dev/null +++ b/node_modules/run-con/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:base" + ] +} diff --git a/node_modules/shebang-command/index.js b/node_modules/shebang-command/index.js new file mode 100644 index 0000000000..f35db30851 --- /dev/null +++ b/node_modules/shebang-command/index.js @@ -0,0 +1,19 @@ +'use strict'; +const shebangRegex = require('shebang-regex'); + +module.exports = (string = '') => { + const match = string.match(shebangRegex); + + if (!match) { + return null; + } + + const [path, argument] = match[0].replace(/#! ?/, '').split(' '); + const binary = path.split('/').pop(); + + if (binary === 'env') { + return argument; + } + + return argument ? `${binary} ${argument}` : binary; +}; diff --git a/node_modules/shebang-command/license b/node_modules/shebang-command/license new file mode 100644 index 0000000000..db6bc32cc7 --- /dev/null +++ b/node_modules/shebang-command/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-command/package.json b/node_modules/shebang-command/package.json new file mode 100644 index 0000000000..18e3c04638 --- /dev/null +++ b/node_modules/shebang-command/package.json @@ -0,0 +1,34 @@ +{ + "name": "shebang-command", + "version": "2.0.0", + "description": "Get the command from a shebang", + "license": "MIT", + "repository": "kevva/shebang-command", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "github.com/kevva" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "cmd", + "command", + "parse", + "shebang" + ], + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "devDependencies": { + "ava": "^2.3.0", + "xo": "^0.24.0" + } +} diff --git a/node_modules/shebang-command/readme.md b/node_modules/shebang-command/readme.md new file mode 100644 index 0000000000..84feb442d7 --- /dev/null +++ b/node_modules/shebang-command/readme.md @@ -0,0 +1,34 @@ +# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command) + +> Get the command from a shebang + + +## Install + +``` +$ npm install shebang-command +``` + + +## Usage + +```js +const shebangCommand = require('shebang-command'); + +shebangCommand('#!/usr/bin/env node'); +//=> 'node' + +shebangCommand('#!/bin/bash'); +//=> 'bash' +``` + + +## API + +### shebangCommand(string) + +#### string + +Type: `string` + +String containing a shebang. diff --git a/node_modules/shebang-regex/index.d.ts b/node_modules/shebang-regex/index.d.ts new file mode 100644 index 0000000000..61d034b31e --- /dev/null +++ b/node_modules/shebang-regex/index.d.ts @@ -0,0 +1,22 @@ +/** +Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line. + +@example +``` +import shebangRegex = require('shebang-regex'); + +const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; + +shebangRegex.test(string); +//=> true + +shebangRegex.exec(string)[0]; +//=> '#!/usr/bin/env node' + +shebangRegex.exec(string)[1]; +//=> '/usr/bin/env node' +``` +*/ +declare const shebangRegex: RegExp; + +export = shebangRegex; diff --git a/node_modules/shebang-regex/index.js b/node_modules/shebang-regex/index.js new file mode 100644 index 0000000000..63fc4a0b67 --- /dev/null +++ b/node_modules/shebang-regex/index.js @@ -0,0 +1,2 @@ +'use strict'; +module.exports = /^#!(.*)/; diff --git a/node_modules/shebang-regex/license b/node_modules/shebang-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/shebang-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-regex/package.json b/node_modules/shebang-regex/package.json new file mode 100644 index 0000000000..00ab30feee --- /dev/null +++ b/node_modules/shebang-regex/package.json @@ -0,0 +1,35 @@ +{ + "name": "shebang-regex", + "version": "3.0.0", + "description": "Regular expression for matching a shebang line", + "license": "MIT", + "repository": "sindresorhus/shebang-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "regex", + "regexp", + "shebang", + "match", + "test", + "line" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/node_modules/shebang-regex/readme.md b/node_modules/shebang-regex/readme.md new file mode 100644 index 0000000000..5ecf863aa3 --- /dev/null +++ b/node_modules/shebang-regex/readme.md @@ -0,0 +1,33 @@ +# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex) + +> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line + + +## Install + +``` +$ npm install shebang-regex +``` + + +## Usage + +```js +const shebangRegex = require('shebang-regex'); + +const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; + +shebangRegex.test(string); +//=> true + +shebangRegex.exec(string)[0]; +//=> '#!/usr/bin/env node' + +shebangRegex.exec(string)[1]; +//=> '/usr/bin/env node' +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt new file mode 100644 index 0000000000..954f2fa823 --- /dev/null +++ b/node_modules/signal-exit/LICENSE.txt @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md new file mode 100644 index 0000000000..c55cd45ee3 --- /dev/null +++ b/node_modules/signal-exit/README.md @@ -0,0 +1,74 @@ +# signal-exit + +When you want to fire an event no matter how a process exits: + +- reaching the end of execution. +- explicitly having `process.exit(code)` called. +- having `process.kill(pid, sig)` called. +- receiving a fatal signal from outside the process + +Use `signal-exit`. + +```js +// Hybrid module, either works +import { onExit } from 'signal-exit' +// or: +// const { onExit } = require('signal-exit') + +onExit((code, signal) => { + console.log('process exited!', code, signal) +}) +``` + +## API + +`remove = onExit((code, signal) => {}, options)` + +The return value of the function is a function that will remove +the handler. + +Note that the function _only_ fires for signals if the signal +would cause the process to exit. That is, there are no other +listeners, and it is a fatal signal. + +If the global `process` object is not suitable for this purpose +(ie, it's unset, or doesn't have an `emit` method, etc.) then the +`onExit` function is a no-op that returns a no-op `remove` method. + +### Options + +- `alwaysLast`: Run this handler after any other signal or exit + handlers. This causes `process.emit` to be monkeypatched. + +### Capturing Signal Exits + +If the handler returns an exact boolean `true`, and the exit is a +due to signal, then the signal will be considered handled, and +will _not_ trigger a synthetic `process.kill(process.pid, +signal)` after firing the `onExit` handlers. + +In this case, it your responsibility as the caller to exit with a +signal (for example, by calling `process.kill()`) if you wish to +preserve the same exit status that would otherwise have occurred. +If you do not, then the process will likely exit gracefully with +status 0 at some point, assuming that no other terminating signal +or other exit trigger occurs. + +Prior to calling handlers, the `onExit` machinery is unloaded, so +any subsequent exits or signals will not be handled, even if the +signal is captured and the exit is thus prevented. + +Note that numeric code exits may indicate that the process is +already committed to exiting, for example due to a fatal +exception or unhandled promise rejection, and so there is no way to +prevent it safely. + +### Browser Fallback + +The `'signal-exit/browser'` module is the same fallback shim that +just doesn't do anything, but presents the same function +interface. + +Patches welcome to add something that hooks onto +`window.onbeforeunload` or similar, but it might just not be a +thing that makes sense there. diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json new file mode 100644 index 0000000000..ac176cec74 --- /dev/null +++ b/node_modules/signal-exit/package.json @@ -0,0 +1,106 @@ +{ + "name": "signal-exit", + "version": "4.1.0", + "description": "when you want to fire an event no matter how a process exits.", + "main": "./dist/cjs/index.js", + "module": "./dist/mjs/index.js", + "browser": "./dist/mjs/browser.js", + "types": "./dist/mjs/index.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/mjs/index.d.ts", + "default": "./dist/mjs/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.ts", + "default": "./dist/cjs/index.js" + } + }, + "./signals": { + "import": { + "types": "./dist/mjs/signals.d.ts", + "default": "./dist/mjs/signals.js" + }, + "require": { + "types": "./dist/cjs/signals.d.ts", + "default": "./dist/cjs/signals.js" + } + }, + "./browser": { + "import": { + "types": "./dist/mjs/browser.d.ts", + "default": "./dist/mjs/browser.js" + }, + "require": { + "types": "./dist/cjs/browser.d.ts", + "default": "./dist/cjs/browser.js" + } + } + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "repository": { + "type": "git", + "url": "https://github.com/tapjs/signal-exit.git" + }, + "keywords": [ + "signal", + "exit" + ], + "author": "Ben Coe ", + "license": "ISC", + "devDependencies": { + "@types/cross-spawn": "^6.0.2", + "@types/node": "^18.15.11", + "@types/signal-exit": "^3.0.1", + "@types/tap": "^15.0.8", + "c8": "^7.13.0", + "prettier": "^2.8.6", + "tap": "^16.3.4", + "ts-node": "^10.9.1", + "typedoc": "^0.23.28", + "typescript": "^5.0.2" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preprepare": "rm -rf dist", + "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json && bash ./scripts/fixup.sh", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "c8 tap", + "snap": "c8 tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "tap": { + "coverage": false, + "jobs": 1, + "node-arg": [ + "--no-warnings", + "--loader", + "ts-node/esm" + ], + "ts": false + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } +} diff --git a/node_modules/smol-toml/LICENSE b/node_modules/smol-toml/LICENSE new file mode 100644 index 0000000000..1ed1c049b4 --- /dev/null +++ b/node_modules/smol-toml/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) Squirrel Chat et al., All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/smol-toml/README.md b/node_modules/smol-toml/README.md new file mode 100644 index 0000000000..0809b5e8c6 --- /dev/null +++ b/node_modules/smol-toml/README.md @@ -0,0 +1,192 @@ +# smol-toml +[![TOML 1.0.0](https://img.shields.io/badge/TOML-1.0.0-9c4221?style=flat-square)](https://toml.io/en/v1.0.0) +[![License](https://img.shields.io/github/license/squirrelchat/smol-toml.svg?style=flat-square)](https://github.com/squirrelchat/smol-toml/blob/mistress/LICENSE) +[![npm](https://img.shields.io/npm/v/smol-toml?style=flat-square)](https://npm.im/smol-toml) +[![Build](https://img.shields.io/github/actions/workflow/status/squirrelchat/smol-toml/build.yml?style=flat-square&logo=github)](https://github.com/squirrelchat/smol-toml/actions/workflows/build.yml) + +A small, fast, and correct TOML parser and serializer. smol-toml is fully(ish) spec-compliant with TOML v1.0.0. + +Why yet another TOML parser? Well, the ecosystem of TOML parsers in JavaScript is quite underwhelming, most likely due +to a lack of interest. With most parsers being outdated, unmaintained, non-compliant, or a combination of these, a new +parser didn't feel too out of place. + +*[insert xkcd 927]* + +smol-toml passes most of the tests from the [`toml-test` suite](https://github.com/toml-lang/toml-test); use the +`run-toml-test.bash` script to run the tests. Due to the nature of JavaScript and the limits of the language, +it doesn't pass certain tests, namely: +- Invalid UTF-8 strings are not rejected +- Certain invalid UTF-8 codepoints are not rejected +- Certain invalid dates are not rejected + - For instance, `2023-02-30` would be accepted and parsed as `2023-03-02`. While additional checks could be performed + to reject these, they've not been added for performance reasons. +- smol-toml doesn't preserve type information between integers and floats (in JS, everything is a float) + +You can see a list of all tests smol-toml fails (and the reason why it fails these) in the list of skipped tests in +`run-toml-test.bash`. Note that some failures are *not* specification violations per-se. For instance, the TOML spec +does not require 64-bit integer range support or sub-millisecond time precision, but are included in the `toml-test` +suite. See https://github.com/toml-lang/toml-test/issues/154 and https://github.com/toml-lang/toml-test/issues/155 + +## Installation +``` +[pnpm | yarn | npm] i smol-toml +``` + +## Usage +```js +import { parse, stringify } from 'smol-toml' + +const doc = '...' +const parsed = parse(doc) +console.log(parsed) + +const toml = stringify(parsed) +console.log(toml) +``` + +Alternatively, if you prefer something similar to the JSON global, you can import the library as follows +```js +import TOML from 'smol-toml' + +TOML.stringify({ ... }) +``` + +A few notes on the `stringify` function: +- `undefined` and `null` values on objects are ignored (does not produce a key/value). +- `undefined` and `null` values in arrays are **rejected**. +- Functions, classes and symbols are **rejected**. +- floats will be serialized as integers if they don't have a decimal part. + - `stringify(parse('a = 1.0')) === 'a = 1'` +- JS `Date` will be serialized as Offset Date Time + - Use the [`TomlDate` object](#dates) for representing other types. + +### Dates +`smol-toml` uses an extended `Date` object to represent all types of TOML Dates. In the future, `smol-toml` will use +objects from the Temporal proposal, but for now we're stuck with the legacy Date object. + +```js +import { TomlDate } from 'smol-toml' + +// Offset Date Time +const date = new TomlDate('1979-05-27T07:32:00.000-08:00') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, false +console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000-08:00 + +// Local Date Time +const date = new TomlDate('1979-05-27T07:32:00.000') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, true +console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000 + +// Local Date +const date = new TomlDate('1979-05-27') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, true, false, true +console.log(date.toISOString()) // ~> 1979-05-27 + +// Local Time +const date = new TomlDate('07:32:00') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, false, true, true +console.log(date.toISOString()) // ~> 07:32:00.000 +``` + +You can also wrap a native `Date` object and specify using different methods depending on the type of date you wish +to represent: + +```js +import { TomlDate } from 'smol-toml' + +const jsDate = new Date() + +const offsetDateTime = TomlDate.wrapAsOffsetDateTime(jsDate) +const localDateTime = TomlDate.wrapAsLocalDateTime(jsDate) +const localDate = TomlDate.wrapAsLocalDate(jsDate) +const localTime = TomlDate.wrapAsLocalTime(jsDate) +``` + +## Performance +A note on these performance numbers: in some highly synthetic tests, other parsers such as `fast-toml` greatly +outperform other parsers, mostly due to their lack of compliance with the spec. For example, to parse a string, +`fast-toml` skips the entire string while `smol-toml` does validate the string, costing a fair share of performance. + +The ~5MB test file used for benchmark here is filled with random data which attempts to be close-ish to reality in +terms of structure. The idea is to have a file relatively close to a real-world application, with moderately sized +strings etc. + +The large TOML generator can be found [here](https://gist.github.com/cyyynthia/e77c744cb6494dabe37d0182506526b9) + +| **Parse** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | fast-toml | +|----------------|---------------------|-------------------|-----------------|-----------------| +| Spec example | **71,356.51 op/s** | 33,629.31 op/s | 16,433.86 op/s | 29,421.60 op/s | +| ~5MB test file | **3.8091 op/s** | *DNF* | 2.4369 op/s | 2.6078 op/s | + +| **Stringify** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | +|----------------|----------------------|-------------------|----------------| +| Spec example | **195,191.99 op/s** | 46,583.07 op/s | 5,670.12 op/s | +| ~5MB test file | **14.6709 op/s** | 3.5941 op/s | 0.7856 op/s | + +
      +Detailed benchmark data + +Tests ran using Vitest v0.31.0 on commit f58cb6152e667e9cea09f31c93d90652e3b82bf5 + +CPU: Intel Core i7 7700K (4.2GHz) + +``` + RUN v0.31.0 + + ✓ bench/parseSpecExample.bench.ts (4) 2462ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 71,356.51 0.0132 0.2633 0.0140 0.0137 0.0219 0.0266 0.1135 ±0.37% 35679 fastest + · @iarna/toml 33,629.31 0.0272 0.2629 0.0297 0.0287 0.0571 0.0650 0.1593 ±0.45% 16815 + · @ltd/j-toml 16,433.86 0.0523 1.3088 0.0608 0.0550 0.1140 0.1525 0.7348 ±1.47% 8217 slowest + · fast-toml 29,421.60 0.0305 0.2995 0.0340 0.0312 0.0618 0.0640 0.1553 ±0.47% 14711 + ✓ bench/parseLargeMixed.bench.ts (3) 16062ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 3.8091 239.60 287.30 262.53 274.17 287.30 287.30 287.30 ±3.66% 10 fastest + · @ltd/j-toml 2.4369 376.73 493.49 410.35 442.58 493.49 493.49 493.49 ±7.08% 10 slowest + · fast-toml 2.6078 373.88 412.79 383.47 388.62 412.79 412.79 412.79 ±2.72% 10 + ✓ bench/stringifySpecExample.bench.ts (3) 1886ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 195,191.99 0.0047 0.2704 0.0051 0.0050 0.0099 0.0110 0.0152 ±0.41% 97596 fastest + · @iarna/toml 46,583.07 0.0197 0.2808 0.0215 0.0208 0.0448 0.0470 0.1704 ±0.47% 23292 + · @ltd/j-toml 5,670.12 0.1613 0.5768 0.1764 0.1726 0.3036 0.3129 0.4324 ±0.56% 2836 slowest + ✓ bench/stringifyLargeMixed.bench.ts (3) 24057ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 14.6709 65.1071 79.2199 68.1623 67.1088 79.2199 79.2199 79.2199 ±5.25% 10 fastest + · @iarna/toml 3.5941 266.48 295.24 278.24 290.10 295.24 295.24 295.24 ±2.83% 10 + · @ltd/j-toml 0.7856 1,254.33 1,322.05 1,272.87 1,286.82 1,322.05 1,322.05 1,322.05 ±1.37% 10 slowest + + + BENCH Summary + + smol-toml - bench/parseLargeMixed.bench.ts > + 1.46x faster than fast-toml + 1.56x faster than @ltd/j-toml + + smol-toml - bench/parseSpecExample.bench.ts > + 2.12x faster than @iarna/toml + 2.43x faster than fast-toml + 4.34x faster than @ltd/j-toml + + smol-toml - bench/stringifyLargeMixed.bench.ts > + 4.00x faster than @iarna/toml + 18.33x faster than @ltd/j-toml + + smol-toml - bench/stringifySpecExample.bench.ts > + 4.19x faster than @iarna/toml + 34.42x faster than @ltd/j-toml +``` + +--- +Additional notes: + +I initially tried to benchmark `toml-nodejs`, but the 0.3.0 package is broken. +I initially reported this to the library author, but the author decided to +- a) advise to use a custom loader (via *experimental* flag) to circumvent the invalid imports. + - Said flag, `--experimental-specifier-resolution`, has been removed in Node v20. +- b) [delete the issue](https://github.com/huan231/toml-nodejs/issues/12) when pointed out links to the NodeJS +documentation about the flag removal and standard resolution algorithm. + +For the reference anyway, `toml-nodejs` (with proper imports) is ~8x slower on both parse benchmark with: +- spec example: 7,543.47 op/s +- 5mb mixed: 0.7006 op/s +
      diff --git a/node_modules/smol-toml/package.json b/node_modules/smol-toml/package.json new file mode 100644 index 0000000000..b144aea9ce --- /dev/null +++ b/node_modules/smol-toml/package.json @@ -0,0 +1,53 @@ +{ + "name": "smol-toml", + "license": "BSD-3-Clause", + "version": "1.3.1", + "description": "A small, fast, and correct TOML parser/serializer", + "author": "Cynthia ", + "repository": "github:squirrelchat/smol-toml", + "bugs": "https://github.com/squirrelchat/smol-toml/issues", + "funding": "https://github.com/sponsors/cyyynthia", + "keywords": [ + "toml", + "parser", + "serializer" + ], + "type": "module", + "packageManager": "pnpm@9.12.3", + "engines": { + "node": ">= 18" + }, + "scripts": { + "test": "vitest", + "test-ui": "vitest --ui", + "bench": "vitest bench", + "build": "pnpm run build:mjs && pnpm run build:cjs && node test/package/package-test.mjs", + "build:mjs": "tsc", + "build:cjs": "esbuild dist/index.js --bundle --platform=node --target=node18 --format=cjs --outfile=dist/index.cjs" + }, + "devDependencies": { + "@iarna/toml": "3.0.0", + "@ltd/j-toml": "^1.38.0", + "@tsconfig/node-lts": "^22.0.0", + "@tsconfig/strictest": "^2.0.5", + "@types/node": "^22.9.0", + "@vitest/ui": "^2.1.5", + "esbuild": "^0.24.0", + "fast-toml": "^0.5.4", + "typescript": "^5.6.3", + "vitest": "^2.1.5" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "files": [ + "README.md", + "LICENSE", + "dist" + ] +} diff --git a/node_modules/string-width-cjs/index.d.ts b/node_modules/string-width-cjs/index.d.ts new file mode 100644 index 0000000000..12b5309751 --- /dev/null +++ b/node_modules/string-width-cjs/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/node_modules/string-width-cjs/index.js b/node_modules/string-width-cjs/index.js new file mode 100644 index 0000000000..f4d261a96a --- /dev/null +++ b/node_modules/string-width-cjs/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/node_modules/string-width-cjs/license b/node_modules/string-width-cjs/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/string-width-cjs/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..2dbf6af2b6 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..616ff837d3 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/license b/node_modules/string-width-cjs/node_modules/ansi-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/package.json b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..017f53116a --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-regex", + "version": "5.0.1", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..4d848bc36f --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
      +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md new file mode 100644 index 0000000000..f10e173335 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 0000000000..b4cf3dcd38 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 0000000000..780309df58 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts new file mode 100644 index 0000000000..1955b4704e --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js new file mode 100644 index 0000000000..d993a3a99c --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json new file mode 100644 index 0000000000..6d32352829 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json @@ -0,0 +1,50 @@ +{ + "name": "emoji-regex", + "version": "8.0.0", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + } +} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js new file mode 100644 index 0000000000..0a55ce2f23 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000000..907fccc292 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js new file mode 100644 index 0000000000..9a593dfcd1 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/license b/node_modules/string-width-cjs/node_modules/strip-ansi/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/package.json b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json new file mode 100644 index 0000000000..1a41108d42 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json @@ -0,0 +1,54 @@ +{ + "name": "strip-ansi", + "version": "6.0.1", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000000..7c4b56d46d --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/string-width-cjs/package.json b/node_modules/string-width-cjs/package.json new file mode 100644 index 0000000000..28ba7b4cae --- /dev/null +++ b/node_modules/string-width-cjs/package.json @@ -0,0 +1,56 @@ +{ + "name": "string-width", + "version": "4.2.3", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + } +} diff --git a/node_modules/string-width-cjs/readme.md b/node_modules/string-width-cjs/readme.md new file mode 100644 index 0000000000..bdd314129c --- /dev/null +++ b/node_modules/string-width-cjs/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/string-width/index.d.ts b/node_modules/string-width/index.d.ts new file mode 100644 index 0000000000..aed9fdffeb --- /dev/null +++ b/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +export interface Options { + /** + Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). + + @default true + */ + readonly ambiguousIsNarrow: boolean; +} + +/** +Get the visual width of a string - the number of columns required to display it. + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +@example +``` +import stringWidth from 'string-width'; + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` +*/ +export default function stringWidth(string: string, options?: Options): number; diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js new file mode 100644 index 0000000000..9294488f88 --- /dev/null +++ b/node_modules/string-width/index.js @@ -0,0 +1,54 @@ +import stripAnsi from 'strip-ansi'; +import eastAsianWidth from 'eastasianwidth'; +import emojiRegex from 'emoji-regex'; + +export default function stringWidth(string, options = {}) { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + options = { + ambiguousIsNarrow: true, + ...options + }; + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2; + let width = 0; + + for (const character of string) { + const codePoint = character.codePointAt(0); + + // Ignore control characters + if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (codePoint >= 0x300 && codePoint <= 0x36F) { + continue; + } + + const code = eastAsianWidth.eastAsianWidth(character); + switch (code) { + case 'F': + case 'W': + width += 2; + break; + case 'A': + width += ambiguousCharacterWidth; + break; + default: + width += 1; + } + } + + return width; +} diff --git a/node_modules/string-width/license b/node_modules/string-width/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json new file mode 100644 index 0000000000..f46d6770f9 --- /dev/null +++ b/node_modules/string-width/package.json @@ -0,0 +1,59 @@ +{ + "name": "string-width", + "version": "5.1.2", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + } +} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md new file mode 100644 index 0000000000..52910df1ab --- /dev/null +++ b/node_modules/string-width/readme.md @@ -0,0 +1,67 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + +## Install + +``` +$ npm install string-width +``` + +## Usage + +```js +import stringWidth from 'string-width'; + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + +## API + +### stringWidth(string, options?) + +#### string + +Type: `string` + +The string to be counted. + +#### options + +Type: `object` + +##### ambiguousIsNarrow + +Type: `boolean`\ +Default: `false` + +Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/strip-ansi-cjs/index.d.ts b/node_modules/strip-ansi-cjs/index.d.ts new file mode 100644 index 0000000000..907fccc292 --- /dev/null +++ b/node_modules/strip-ansi-cjs/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/strip-ansi-cjs/index.js b/node_modules/strip-ansi-cjs/index.js new file mode 100644 index 0000000000..9a593dfcd1 --- /dev/null +++ b/node_modules/strip-ansi-cjs/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/strip-ansi-cjs/license b/node_modules/strip-ansi-cjs/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/strip-ansi-cjs/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..2dbf6af2b6 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..616ff837d3 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..017f53116a --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-regex", + "version": "5.0.1", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..4d848bc36f --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
      +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/strip-ansi-cjs/package.json b/node_modules/strip-ansi-cjs/package.json new file mode 100644 index 0000000000..1a41108d42 --- /dev/null +++ b/node_modules/strip-ansi-cjs/package.json @@ -0,0 +1,54 @@ +{ + "name": "strip-ansi", + "version": "6.0.1", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/strip-ansi-cjs/readme.md b/node_modules/strip-ansi-cjs/readme.md new file mode 100644 index 0000000000..7c4b56d46d --- /dev/null +++ b/node_modules/strip-ansi-cjs/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/strip-ansi/index.d.ts b/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000000..44e954d0c7 --- /dev/null +++ b/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,15 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +export default function stripAnsi(string: string): string; diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js new file mode 100644 index 0000000000..ba19750e64 --- /dev/null +++ b/node_modules/strip-ansi/index.js @@ -0,0 +1,14 @@ +import ansiRegex from 'ansi-regex'; + +const regex = ansiRegex(); + +export default function stripAnsi(string) { + if (typeof string !== 'string') { + throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); + } + + // Even though the regex is global, we don't need to reset the `.lastIndex` + // because unlike `.exec()` and `.test()`, `.replace()` does it automatically + // and doing it manually has a performance penalty. + return string.replace(regex, ''); +} diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json new file mode 100644 index 0000000000..e1f455c325 --- /dev/null +++ b/node_modules/strip-ansi/package.json @@ -0,0 +1,57 @@ +{ + "name": "strip-ansi", + "version": "7.1.0", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "funding": "https://github.com/chalk/strip-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.17.0", + "xo": "^0.44.0" + } +} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000000..562785107b --- /dev/null +++ b/node_modules/strip-ansi/readme.md @@ -0,0 +1,41 @@ +# strip-ansi + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + +## Install + +``` +$ npm install strip-ansi +``` + +## Usage + +```js +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/strip-json-comments/index.d.ts b/node_modules/strip-json-comments/index.d.ts new file mode 100644 index 0000000000..28ba3c8a80 --- /dev/null +++ b/node_modules/strip-json-comments/index.d.ts @@ -0,0 +1,36 @@ +declare namespace stripJsonComments { + interface Options { + /** + Replace comments with whitespace instead of stripping them entirely. + + @default true + */ + readonly whitespace?: boolean; + } +} + +/** +Strip comments from JSON. Lets you use comments in your JSON files! + +It will replace single-line comments `//` and multi-line comments `/**\/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +@param jsonString - Accepts a string with JSON. +@returns A JSON string without comments. + +@example +``` +const json = `{ + // Rainbows + "unicorn": "cake" +}`; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` +*/ +declare function stripJsonComments( + jsonString: string, + options?: stripJsonComments.Options +): string; + +export = stripJsonComments; diff --git a/node_modules/strip-json-comments/index.js b/node_modules/strip-json-comments/index.js new file mode 100644 index 0000000000..bb00b38baf --- /dev/null +++ b/node_modules/strip-json-comments/index.js @@ -0,0 +1,77 @@ +'use strict'; +const singleComment = Symbol('singleComment'); +const multiComment = Symbol('multiComment'); +const stripWithoutWhitespace = () => ''; +const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' '); + +const isEscaped = (jsonString, quotePosition) => { + let index = quotePosition - 1; + let backslashCount = 0; + + while (jsonString[index] === '\\') { + index -= 1; + backslashCount += 1; + } + + return Boolean(backslashCount % 2); +}; + +module.exports = (jsonString, options = {}) => { + if (typeof jsonString !== 'string') { + throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``); + } + + const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; + + let insideString = false; + let insideComment = false; + let offset = 0; + let result = ''; + + for (let i = 0; i < jsonString.length; i++) { + const currentCharacter = jsonString[i]; + const nextCharacter = jsonString[i + 1]; + + if (!insideComment && currentCharacter === '"') { + const escaped = isEscaped(jsonString, i); + if (!escaped) { + insideString = !insideString; + } + } + + if (insideString) { + continue; + } + + if (!insideComment && currentCharacter + nextCharacter === '//') { + result += jsonString.slice(offset, i); + offset = i; + insideComment = singleComment; + i++; + } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') { + i++; + insideComment = false; + result += strip(jsonString, offset, i); + offset = i; + continue; + } else if (insideComment === singleComment && currentCharacter === '\n') { + insideComment = false; + result += strip(jsonString, offset, i); + offset = i; + } else if (!insideComment && currentCharacter + nextCharacter === '/*') { + result += jsonString.slice(offset, i); + offset = i; + insideComment = multiComment; + i++; + continue; + } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') { + i++; + insideComment = false; + result += strip(jsonString, offset, i + 1); + offset = i + 1; + continue; + } + } + + return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset)); +}; diff --git a/node_modules/strip-json-comments/license b/node_modules/strip-json-comments/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/strip-json-comments/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-json-comments/package.json b/node_modules/strip-json-comments/package.json new file mode 100644 index 0000000000..ce7875aa0d --- /dev/null +++ b/node_modules/strip-json-comments/package.json @@ -0,0 +1,47 @@ +{ + "name": "strip-json-comments", + "version": "3.1.1", + "description": "Strip comments from JSON. Lets you use comments in your JSON files!", + "license": "MIT", + "repository": "sindresorhus/strip-json-comments", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "bench": "matcha benchmark.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "json", + "strip", + "comments", + "remove", + "delete", + "trim", + "multiline", + "parse", + "config", + "configuration", + "settings", + "util", + "env", + "environment", + "jsonc" + ], + "devDependencies": { + "ava": "^1.4.1", + "matcha": "^0.7.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/node_modules/strip-json-comments/readme.md b/node_modules/strip-json-comments/readme.md new file mode 100644 index 0000000000..cc542e50cf --- /dev/null +++ b/node_modules/strip-json-comments/readme.md @@ -0,0 +1,78 @@ +# strip-json-comments [![Build Status](https://travis-ci.com/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.com/github/sindresorhus/strip-json-comments) + +> Strip comments from JSON. Lets you use comments in your JSON files! + +This is now possible: + +```js +{ + // Rainbows + "unicorn": /* ❤ */ "cake" +} +``` + +It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +Also available as a [Gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[Grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[Broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. + +## Install + +``` +$ npm install strip-json-comments +``` + +## Usage + +```js +const json = `{ + // Rainbows + "unicorn": /* ❤ */ "cake" +}`; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` + +## API + +### stripJsonComments(jsonString, options?) + +#### jsonString + +Type: `string` + +Accepts a string with JSON and returns a string without comments. + +#### options + +Type: `object` + +##### whitespace + +Type: `boolean`\ +Default: `true` + +Replace comments with whitespace instead of stripping them entirely. + +## Benchmark + +``` +$ npm run bench +``` + +## Related + +- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module +- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/uc.micro/LICENSE.txt b/node_modules/uc.micro/LICENSE.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/uc.micro/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/uc.micro/README.md b/node_modules/uc.micro/README.md new file mode 100644 index 0000000000..7707da48cc --- /dev/null +++ b/node_modules/uc.micro/README.md @@ -0,0 +1,14 @@ +# uc.micro + +[![CI](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml) +[![NPM version](https://img.shields.io/npm/v/uc.micro.svg?style=flat)](https://www.npmjs.org/package/uc.micro) + +> Micro subset of unicode data files for [markdown-it](https://github.com/markdown-it) projects. + +Content of this repo is autogenerated from `unicode-` package, +maintained by [Mathias Bynens](https://github.com/mathiasbynens). + +That's just a proxy to reduce dependencies/install size. + +**This package content is ONLY for [markdown-it](https://github.com/markdown-it) +projects needs. Don't ask to extend it!** diff --git a/node_modules/uc.micro/categories/Cc/regex.mjs b/node_modules/uc.micro/categories/Cc/regex.mjs new file mode 100644 index 0000000000..91cd397c32 --- /dev/null +++ b/node_modules/uc.micro/categories/Cc/regex.mjs @@ -0,0 +1 @@ +export default /[\0-\x1F\x7F-\x9F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Cf/regex.mjs b/node_modules/uc.micro/categories/Cf/regex.mjs new file mode 100644 index 0000000000..bb58c7d3eb --- /dev/null +++ b/node_modules/uc.micro/categories/Cf/regex.mjs @@ -0,0 +1 @@ +export default /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/P/regex.mjs b/node_modules/uc.micro/categories/P/regex.mjs new file mode 100644 index 0000000000..b084264585 --- /dev/null +++ b/node_modules/uc.micro/categories/P/regex.mjs @@ -0,0 +1 @@ +export default /[!-#%-\*,-\/:;\?@\[-\]_\{\}\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]|\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\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\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]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/S/regex.mjs b/node_modules/uc.micro/categories/S/regex.mjs new file mode 100644 index 0000000000..45a2624c7e --- /dev/null +++ b/node_modules/uc.micro/categories/S/regex.mjs @@ -0,0 +1 @@ +export default /[\$\+<->\^`\|~\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-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\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]|\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\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Z/regex.mjs b/node_modules/uc.micro/categories/Z/regex.mjs new file mode 100644 index 0000000000..6f154197bb --- /dev/null +++ b/node_modules/uc.micro/categories/Z/regex.mjs @@ -0,0 +1 @@ +export default /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ \ No newline at end of file diff --git a/node_modules/uc.micro/index.mjs b/node_modules/uc.micro/index.mjs new file mode 100644 index 0000000000..21b80d34ac --- /dev/null +++ b/node_modules/uc.micro/index.mjs @@ -0,0 +1,8 @@ +import Any from './properties/Any/regex.mjs'; +import Cc from './categories/Cc/regex.mjs'; +import Cf from './categories/Cf/regex.mjs'; +import P from './categories/P/regex.mjs'; +import S from './categories/S/regex.mjs'; +import Z from './categories/Z/regex.mjs'; + +export { Any, Cc, Cf, P, S, Z }; diff --git a/node_modules/uc.micro/package.json b/node_modules/uc.micro/package.json new file mode 100644 index 0000000000..73102ce5a5 --- /dev/null +++ b/node_modules/uc.micro/package.json @@ -0,0 +1,37 @@ +{ + "name": "uc.micro", + "version": "2.1.0", + "description": "Micro subset of unicode data files for markdown-it projects.", + "repository": "markdown-it/uc.micro", + "license": "MIT", + "main": "build/index.cjs.js", + "module": "index.mjs", + "exports": { + ".": { + "require": "./build/index.cjs.js", + "import": "./index.mjs" + }, + "./*": { + "require": "./*", + "import": "./*" + } + }, + "files": [ + "index.mjs", + "categories/", + "properties/", + "build/" + ], + "scripts": { + "test": "npm run build && mocha", + "build": "rollup -c", + "update": "node update.mjs && npm test", + "prepublishOnly": "npm run build" + }, + "devDependencies": { + "@unicode/unicode-15.1.0": "^1.5.2", + "mocha": "^10.2.0", + "rollup": "^4.6.1", + "shelljs": "^0.8.5" + } +} diff --git a/node_modules/uc.micro/properties/Any/regex.mjs b/node_modules/uc.micro/properties/Any/regex.mjs new file mode 100644 index 0000000000..72d3b16d55 --- /dev/null +++ b/node_modules/uc.micro/properties/Any/regex.mjs @@ -0,0 +1 @@ +export default /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ \ No newline at end of file diff --git a/node_modules/which/CHANGELOG.md b/node_modules/which/CHANGELOG.md new file mode 100644 index 0000000000..7fb1f2033c --- /dev/null +++ b/node_modules/which/CHANGELOG.md @@ -0,0 +1,166 @@ +# Changes + + +## 2.0.2 + +* Rename bin to `node-which` + +## 2.0.1 + +* generate changelog and publish on version bump +* enforce 100% test coverage +* Promise interface + +## 2.0.0 + +* Parallel tests, modern JavaScript, and drop support for node < 8 + +## 1.3.1 + +* update deps +* update travis + +## v1.3.0 + +* Add nothrow option to which.sync +* update tap + +## v1.2.14 + +* appveyor: drop node 5 and 0.x +* travis-ci: add node 6, drop 0.x + +## v1.2.13 + +* test: Pass missing option to pass on windows +* update tap +* update isexe to 2.0.0 +* neveragain.tech pledge request + +## v1.2.12 + +* Removed unused require + +## v1.2.11 + +* Prevent changelog script from being included in package + +## v1.2.10 + +* Use env.PATH only, not env.Path + +## v1.2.9 + +* fix for paths starting with ../ +* Remove unused `is-absolute` module + +## v1.2.8 + +* bullet items in changelog that contain (but don't start with) # + +## v1.2.7 + +* strip 'update changelog' changelog entries out of changelog + +## v1.2.6 + +* make the changelog bulleted + +## v1.2.5 + +* make a changelog, and keep it up to date +* don't include tests in package +* Properly handle relative-path executables +* appveyor +* Attach error code to Not Found error +* Make tests pass on Windows + +## v1.2.4 + +* Fix typo + +## v1.2.3 + +* update isexe, fix regression in pathExt handling + +## v1.2.2 + +* update deps, use isexe module, test windows + +## v1.2.1 + +* Sometimes windows PATH entries are quoted +* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode. +* doc cli + +## v1.2.0 + +* Add support for opt.all and -as cli flags +* test the bin +* update travis +* Allow checking for multiple programs in bin/which +* tap 2 + +## v1.1.2 + +* travis +* Refactored and fixed undefined error on Windows +* Support strict mode + +## v1.1.1 + +* test +g exes against secondary groups, if available +* Use windows exe semantics on cygwin & msys +* cwd should be first in path on win32, not last +* Handle lower-case 'env.Path' on Windows +* Update docs +* use single-quotes + +## v1.1.0 + +* Add tests, depend on is-absolute + +## v1.0.9 + +* which.js: root is allowed to execute files owned by anyone + +## v1.0.8 + +* don't use graceful-fs + +## v1.0.7 + +* add license to package.json + +## v1.0.6 + +* isc license + +## 1.0.5 + +* Awful typo + +## 1.0.4 + +* Test for path absoluteness properly +* win: Allow '' as a pathext if cmd has a . in it + +## 1.0.3 + +* Remove references to execPath +* Make `which.sync()` work on Windows by honoring the PATHEXT variable. +* Make `isExe()` always return true on Windows. +* MIT + +## 1.0.2 + +* Only files can be exes + +## 1.0.1 + +* Respect the PATHEXT env for win32 support +* should 0755 the bin +* binary +* guts +* package +* 1st diff --git a/node_modules/which/LICENSE b/node_modules/which/LICENSE new file mode 100644 index 0000000000..19129e315f --- /dev/null +++ b/node_modules/which/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/which/README.md b/node_modules/which/README.md new file mode 100644 index 0000000000..cd833509f3 --- /dev/null +++ b/node_modules/which/README.md @@ -0,0 +1,54 @@ +# which + +Like the unix `which` utility. + +Finds the first instance of a specified executable in the PATH +environment variable. Does not cache the results, so `hash -r` is not +needed when the PATH changes. + +## USAGE + +```javascript +var which = require('which') + +// async usage +which('node', function (er, resolvedPath) { + // er is returned if no "node" is found on the PATH + // if it is found, then the absolute path to the exec is returned +}) + +// or promise +which('node').then(resolvedPath => { ... }).catch(er => { ... not found ... }) + +// sync usage +// throws if not found +var resolved = which.sync('node') + +// if nothrow option is used, returns null if not found +resolved = which.sync('node', {nothrow: true}) + +// Pass options to override the PATH and PATHEXT environment vars. +which('node', { path: someOtherPath }, function (er, resolved) { + if (er) + throw er + console.log('found at %j', resolved) +}) +``` + +## CLI USAGE + +Same as the BSD `which(1)` binary. + +``` +usage: which [-as] program ... +``` + +## OPTIONS + +You may pass an options object as the second argument. + +- `path`: Use instead of the `PATH` environment variable. +- `pathExt`: Use instead of the `PATHEXT` environment variable. +- `all`: Return all matches, instead of just the first one. Note that + this means the function returns an array of strings instead of a + single string. diff --git a/node_modules/which/package.json b/node_modules/which/package.json new file mode 100644 index 0000000000..97ad7fbabc --- /dev/null +++ b/node_modules/which/package.json @@ -0,0 +1,43 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "name": "which", + "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", + "version": "2.0.2", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-which.git" + }, + "main": "which.js", + "bin": { + "node-which": "./bin/node-which" + }, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "devDependencies": { + "mkdirp": "^0.5.0", + "rimraf": "^2.6.2", + "tap": "^14.6.9" + }, + "scripts": { + "test": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "prepublish": "npm run changelog", + "prechangelog": "bash gen-changelog.sh", + "changelog": "git add CHANGELOG.md", + "postchangelog": "git commit -m 'update changelog - '${npm_package_version}", + "postpublish": "git push origin --follow-tags" + }, + "files": [ + "which.js", + "bin/node-which" + ], + "tap": { + "check-coverage": true + }, + "engines": { + "node": ">= 8" + } +} diff --git a/node_modules/which/which.js b/node_modules/which/which.js new file mode 100644 index 0000000000..82afffd214 --- /dev/null +++ b/node_modules/which/which.js @@ -0,0 +1,125 @@ +const isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +const path = require('path') +const COLON = isWindows ? ';' : ':' +const isexe = require('isexe') + +const getNotFoundError = (cmd) => + Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) + +const getPathInfo = (cmd, opt) => { + const colon = opt.colon || COLON + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] + : ( + [ + // windows always checks the cwd first + ...(isWindows ? [process.cwd()] : []), + ...(opt.path || process.env.PATH || + /* istanbul ignore next: very unusual */ '').split(colon), + ] + ) + const pathExtExe = isWindows + ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' + : '' + const pathExt = isWindows ? pathExtExe.split(colon) : [''] + + if (isWindows) { + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + return { + pathEnv, + pathExt, + pathExtExe, + } +} + +const which = (cmd, opt, cb) => { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + if (!opt) + opt = {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + const step = i => new Promise((resolve, reject) => { + if (i === pathEnv.length) + return opt.all && found.length ? resolve(found) + : reject(getNotFoundError(cmd)) + + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + resolve(subStep(p, i, 0)) + }) + + const subStep = (p, i, ii) => new Promise((resolve, reject) => { + if (ii === pathExt.length) + return resolve(step(i + 1)) + const ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return resolve(p + ext) + } + return resolve(subStep(p, i, ii + 1)) + }) + }) + + return cb ? step(0).then(res => cb(null, res), cb) : step(0) +} + +const whichSync = (cmd, opt) => { + opt = opt || {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + for (let i = 0; i < pathEnv.length; i ++) { + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + for (let j = 0; j < pathExt.length; j ++) { + const cur = p + pathExt[j] + try { + const is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} + +module.exports = which +which.sync = whichSync diff --git a/node_modules/wrap-ansi-cjs/index.js b/node_modules/wrap-ansi-cjs/index.js new file mode 100755 index 0000000000..d502255bd1 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/index.js @@ -0,0 +1,216 @@ +'use strict'; +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); +const ansiStyles = require('ansi-styles'); + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsi(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsi(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +module.exports = (string, columns, options) => { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +}; diff --git a/node_modules/wrap-ansi-cjs/license b/node_modules/wrap-ansi-cjs/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/wrap-ansi-cjs/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..2dbf6af2b6 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..616ff837d3 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..017f53116a --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-regex", + "version": "5.0.1", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..4d848bc36f --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
      +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts new file mode 100644 index 0000000000..44a907e580 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,345 @@ +declare type CSSColor = + | 'aliceblue' + | 'antiquewhite' + | 'aqua' + | 'aquamarine' + | 'azure' + | 'beige' + | 'bisque' + | 'black' + | 'blanchedalmond' + | 'blue' + | 'blueviolet' + | 'brown' + | 'burlywood' + | 'cadetblue' + | 'chartreuse' + | 'chocolate' + | 'coral' + | 'cornflowerblue' + | 'cornsilk' + | 'crimson' + | 'cyan' + | 'darkblue' + | 'darkcyan' + | 'darkgoldenrod' + | 'darkgray' + | 'darkgreen' + | 'darkgrey' + | 'darkkhaki' + | 'darkmagenta' + | 'darkolivegreen' + | 'darkorange' + | 'darkorchid' + | 'darkred' + | 'darksalmon' + | 'darkseagreen' + | 'darkslateblue' + | 'darkslategray' + | 'darkslategrey' + | 'darkturquoise' + | 'darkviolet' + | 'deeppink' + | 'deepskyblue' + | 'dimgray' + | 'dimgrey' + | 'dodgerblue' + | 'firebrick' + | 'floralwhite' + | 'forestgreen' + | 'fuchsia' + | 'gainsboro' + | 'ghostwhite' + | 'gold' + | 'goldenrod' + | 'gray' + | 'green' + | 'greenyellow' + | 'grey' + | 'honeydew' + | 'hotpink' + | 'indianred' + | 'indigo' + | 'ivory' + | 'khaki' + | 'lavender' + | 'lavenderblush' + | 'lawngreen' + | 'lemonchiffon' + | 'lightblue' + | 'lightcoral' + | 'lightcyan' + | 'lightgoldenrodyellow' + | 'lightgray' + | 'lightgreen' + | 'lightgrey' + | 'lightpink' + | 'lightsalmon' + | 'lightseagreen' + | 'lightskyblue' + | 'lightslategray' + | 'lightslategrey' + | 'lightsteelblue' + | 'lightyellow' + | 'lime' + | 'limegreen' + | 'linen' + | 'magenta' + | 'maroon' + | 'mediumaquamarine' + | 'mediumblue' + | 'mediumorchid' + | 'mediumpurple' + | 'mediumseagreen' + | 'mediumslateblue' + | 'mediumspringgreen' + | 'mediumturquoise' + | 'mediumvioletred' + | 'midnightblue' + | 'mintcream' + | 'mistyrose' + | 'moccasin' + | 'navajowhite' + | 'navy' + | 'oldlace' + | 'olive' + | 'olivedrab' + | 'orange' + | 'orangered' + | 'orchid' + | 'palegoldenrod' + | 'palegreen' + | 'paleturquoise' + | 'palevioletred' + | 'papayawhip' + | 'peachpuff' + | 'peru' + | 'pink' + | 'plum' + | 'powderblue' + | 'purple' + | 'rebeccapurple' + | 'red' + | 'rosybrown' + | 'royalblue' + | 'saddlebrown' + | 'salmon' + | 'sandybrown' + | 'seagreen' + | 'seashell' + | 'sienna' + | 'silver' + | 'skyblue' + | 'slateblue' + | 'slategray' + | 'slategrey' + | 'snow' + | 'springgreen' + | 'steelblue' + | 'tan' + | 'teal' + | 'thistle' + | 'tomato' + | 'turquoise' + | 'violet' + | 'wheat' + | 'white' + | 'whitesmoke' + | 'yellow' + | 'yellowgreen'; + +declare namespace ansiStyles { + interface ColorConvert { + /** + The RGB color space. + + @param red - (`0`-`255`) + @param green - (`0`-`255`) + @param blue - (`0`-`255`) + */ + rgb(red: number, green: number, blue: number): string; + + /** + The RGB HEX color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hex(hex: string): string; + + /** + @param keyword - A CSS color name. + */ + keyword(keyword: CSSColor): string; + + /** + The HSL color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param lightness - (`0`-`100`) + */ + hsl(hue: number, saturation: number, lightness: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param value - (`0`-`100`) + */ + hsv(hue: number, saturation: number, value: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param whiteness - (`0`-`100`) + @param blackness - (`0`-`100`) + */ + hwb(hue: number, whiteness: number, blackness: number): string; + + /** + Use a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color. + */ + ansi(ansi: number): string; + + /** + Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. + */ + ansi256(ansi: number): string; + } + + interface CSPair { + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; + } + + interface ColorBase { + readonly ansi: ColorConvert; + readonly ansi256: ColorConvert; + readonly ansi16m: ColorConvert; + + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + } + + interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; + } + + interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; + } + + interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; + } +} + +declare const ansiStyles: { + readonly modifier: ansiStyles.Modifier; + readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase; + readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase; + readonly codes: ReadonlyMap; +} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier; + +export = ansiStyles; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js new file mode 100644 index 0000000000..5d82581a13 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js @@ -0,0 +1,163 @@ +'use strict'; + +const wrapAnsi16 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => (...args) => { + const rgb = fn(...args); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +const ansi2ansi = n => n; +const rgb2rgb = (r, g, b) => [r, g, b]; + +const setLazyProperty = (object, property, get) => { + Object.defineProperty(object, property, { + get: () => { + const value = get(); + + Object.defineProperty(object, property, { + value, + enumerable: true, + configurable: true + }); + + return value; + }, + enumerable: true, + configurable: true + }); +}; + +/** @type {typeof import('color-convert')} */ +let colorConvert; +const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { + if (colorConvert === undefined) { + colorConvert = require('color-convert'); + } + + const offset = isBackground ? 10 : 0; + const styles = {}; + + for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; + if (sourceSpace === targetSpace) { + styles[name] = wrap(identity, offset); + } else if (typeof suite === 'object') { + styles[name] = wrap(suite[targetSpace], offset); + } + } + + return styles; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Alias bright black as gray (and grey) + styles.color.gray = styles.color.blackBright; + styles.bgColor.bgGray = styles.bgColor.bgBlackBright; + styles.color.grey = styles.color.blackBright; + styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); + setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json new file mode 100644 index 0000000000..75393284d7 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json @@ -0,0 +1,56 @@ +{ + "name": "ansi-styles", + "version": "4.3.0", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "color-convert": "^2.0.1" + }, + "devDependencies": { + "@types/color-convert": "^1.9.0", + "ava": "^2.3.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.11.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000000..24883de808 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md @@ -0,0 +1,152 @@ +# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + + + +## Install + +``` +$ npm install ansi-styles +``` + +## Usage + +```js +const style = require('ansi-styles'); + +console.log(`${style.green.open}Hello world!${style.green.close}`); + + +// Color conversion between 16/256/truecolor +// NOTE: If conversion goes to 16 colors or 256 colors, the original color +// may be degraded to fit that color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); +console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); +console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close); +``` + +## API + +Each style has an `open` and `close` property. + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `style.modifier` +- `style.color` +- `style.bgColor` + +###### Example + +```js +console.log(style.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +console.log(style.codes.get(36)); +//=> 39 +``` + +## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) + +`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. + +The following color spaces from `color-convert` are supported: + +- `rgb` +- `hex` +- `keyword` +- `hsl` +- `hsv` +- `hwb` +- `ansi` +- `ansi256` + +To use these, call the associated conversion function with the intended output, for example: + +```js +style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code +style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code + +style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code +style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code + +style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code +style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md new file mode 100644 index 0000000000..f10e173335 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 0000000000..b4cf3dcd38 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 0000000000..780309df58 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts new file mode 100644 index 0000000000..1955b4704e --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js new file mode 100644 index 0000000000..d993a3a99c --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json new file mode 100644 index 0000000000..6d32352829 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json @@ -0,0 +1,50 @@ +{ + "name": "emoji-regex", + "version": "8.0.0", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js new file mode 100644 index 0000000000..0a55ce2f23 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts new file mode 100644 index 0000000000..12b5309751 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js new file mode 100644 index 0000000000..f4d261a96a --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/license b/node_modules/wrap-ansi-cjs/node_modules/string-width/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json new file mode 100644 index 0000000000..28ba7b4cae --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json @@ -0,0 +1,56 @@ +{ + "name": "string-width", + "version": "4.2.3", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md new file mode 100644 index 0000000000..bdd314129c --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000000..907fccc292 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js new file mode 100644 index 0000000000..9a593dfcd1 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json new file mode 100644 index 0000000000..1a41108d42 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json @@ -0,0 +1,54 @@ +{ + "name": "strip-ansi", + "version": "6.0.1", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000000..7c4b56d46d --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/wrap-ansi-cjs/package.json b/node_modules/wrap-ansi-cjs/package.json new file mode 100644 index 0000000000..dfb2f4f108 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/package.json @@ -0,0 +1,62 @@ +{ + "name": "wrap-ansi", + "version": "7.0.0", + "description": "Wordwrap a string with ANSI escape codes", + "license": "MIT", + "repository": "chalk/wrap-ansi", + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "devDependencies": { + "ava": "^2.1.0", + "chalk": "^4.0.0", + "coveralls": "^3.0.3", + "has-ansi": "^4.0.0", + "nyc": "^15.0.1", + "xo": "^0.29.1" + } +} diff --git a/node_modules/wrap-ansi-cjs/readme.md b/node_modules/wrap-ansi-cjs/readme.md new file mode 100644 index 0000000000..68779ba5f4 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +const chalk = require('chalk'); +const wrapAnsi = require('wrap-ansi'); + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/node_modules/wrap-ansi/index.d.ts b/node_modules/wrap-ansi/index.d.ts new file mode 100644 index 0000000000..95471cade4 --- /dev/null +++ b/node_modules/wrap-ansi/index.d.ts @@ -0,0 +1,41 @@ +export type Options = { + /** + By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + + @default false + */ + readonly hard?: boolean; + + /** + By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + + @default true + */ + readonly wordWrap?: boolean; + + /** + Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + + @default true + */ + readonly trim?: boolean; +}; + +/** +Wrap words to the specified column width. + +@param string - String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. +@param columns - Number of columns to wrap the text to. + +@example +``` +import chalk from 'chalk'; +import wrapAnsi from 'wrap-ansi'; + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` +*/ +export default function wrapAnsi(string: string, columns: number, options?: Options): string; diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js new file mode 100755 index 0000000000..d80c74c19c --- /dev/null +++ b/node_modules/wrap-ansi/index.js @@ -0,0 +1,214 @@ +import stringWidth from 'string-width'; +import stripAnsi from 'strip-ansi'; +import ansiStyles from 'ansi-styles'; + +const ESCAPES = new Set([ + '\u001B', + '\u009B', +]); + +const END_CODE = 39; +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(row => stringVisibleTrimSpacesRight(row)); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsiCode(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsiCode(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +export default function wrapAnsi(string, columns, options) { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +} diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/wrap-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json new file mode 100644 index 0000000000..198a5dbcb7 --- /dev/null +++ b/node_modules/wrap-ansi/package.json @@ -0,0 +1,69 @@ +{ + "name": "wrap-ansi", + "version": "8.1.0", + "description": "Wordwrap a string with ANSI escape codes", + "license": "MIT", + "repository": "chalk/wrap-ansi", + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && nyc ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "chalk": "^4.1.2", + "coveralls": "^3.1.1", + "has-ansi": "^5.0.1", + "nyc": "^15.1.0", + "tsd": "^0.25.0", + "xo": "^0.44.0" + } +} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md new file mode 100644 index 0000000000..21f6fed7b6 --- /dev/null +++ b/node_modules/wrap-ansi/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +import chalk from 'chalk'; +import wrapAnsi from 'wrap-ansi'; + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
      + + Get professional support for this package with a Tidelift subscription + +
      + + Tidelift helps make open source sustainable for maintainers while giving companies
      assurances about security, maintenance, and licensing for their dependencies. +
      +
      diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..034daec2fb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1420 @@ +{ + "name": "iceberg-python", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "markdownlint-cli": "github:igorshubovych/markdownlint-cli" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/katex": { + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", + "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", + "license": "MIT", + "dependencies": { + "markdown-it": "14.1.0", + "micromark": "4.0.1", + "micromark-core-commonmark": "2.0.2", + "micromark-extension-directive": "3.0.2", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.0", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli": { + "version": "0.44.0", + "resolved": "git+ssh://git@github.com/igorshubovych/markdownlint-cli.git#586c3ea3f51230da42bab657c6a32e9e66c364f0", + "license": "MIT", + "dependencies": { + "commander": "~13.1.0", + "glob": "~10.4.5", + "ignore": "~7.0.3", + "js-yaml": "~4.1.0", + "jsonc-parser": "~3.3.1", + "jsonpointer": "~5.0.1", + "markdownlint": "~0.37.4", + "minimatch": "~9.0.5", + "run-con": "~1.3.2", + "smol-toml": "~1.3.1" + }, + "bin": { + "markdownlint": "markdownlint.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", + "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-con": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", + "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~4.1.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + }, + "bin": { + "run-con": "cli.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smol-toml": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", + "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..a992bedc26 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "markdownlint-cli": "github:igorshubovych/markdownlint-cli" + } +} diff --git a/poetry.lock b/poetry.lock index 21994726a6..07493720f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -5652,4 +5652,4 @@ zstandard = ["zstandard"] [metadata] lock-version = "2.1" python-versions = "^3.9, !=3.9.7" -content-hash = "c5aa295e70831e6e76b69ddc3ac481b14c5d7fe363fac6565bf8b6f6ded0614d" \ No newline at end of file +content-hash = "c5aa295e70831e6e76b69ddc3ac481b14c5d7fe363fac6565bf8b6f6ded0614d" diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index ef9be725af..66330bbc9d 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -152,7 +152,7 @@ @dataclass() class UpsertResult: - """Summary the upsert operation""" + """Summary the upsert operation.""" rows_updated: int = 0 rows_inserted: int = 0 @@ -1095,10 +1095,10 @@ def name_mapping(self) -> Optional[NameMapping]: return self.metadata.name_mapping() def upsert( - self, df: pa.Table, join_cols: list, when_matched_update_all: bool = True, when_not_matched_insert_all: bool = True + self, df: pa.Table, join_cols: list[str], when_matched_update_all: bool = True, when_not_matched_insert_all: bool = True ) -> UpsertResult: """Shorthand API for performing an upsert to an iceberg table. - + Args: self: the target Iceberg table to execute the upsert on df: The input dataframe to upsert with the table's data. @@ -1125,10 +1125,9 @@ def upsert( (Function effectively does nothing) - Returns: + Returns: An UpsertResult class (contains details of rows updated and inserted) """ - from pyiceberg.table import upsert_util if not when_matched_update_all and not when_not_matched_insert_all: diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index d01b977656..513a59760d 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -27,7 +27,7 @@ ) -def create_match_filter(df: pyarrow_table, join_cols: list) -> BooleanExpression: +def create_match_filter(df: pyarrow_table, join_cols: list[str]) -> BooleanExpression: unique_keys = df.select(join_cols).group_by(join_cols).aggregate([]) if len(join_cols) == 1: @@ -35,20 +35,19 @@ def create_match_filter(df: pyarrow_table, join_cols: list) -> BooleanExpression else: return Or(*[And(*[EqualTo(col, row[col]) for col in join_cols]) for row in unique_keys.to_pylist()]) -def has_duplicate_rows(df: pyarrow_table, join_cols: list) -> bool: - """ - This function checks if there are duplicate rows in in a pyarrow table based on the join columns. - """ +def has_duplicate_rows(df: pyarrow_table, join_cols: list[str]) -> bool: + """Check for duplicate rows in a PyArrow table based on the join columns.""" return len(df.select(join_cols).group_by(join_cols).aggregate([([], "count_all")]).filter(pc.field("count_all") > 1)) > 0 -def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list[str]) -> pa.Table: +def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols: list[str]) -> pa.Table: """ - This function takes the source_table, trims it down to rows that match in both source and target. - It then does a scan for the non-key columns to see if any are mis-aligned before returning the final row set to update - """ + Return a table with rows that need to be updated in the target table based on the join columns. + When a row is matched, an additional scan is done to evaluate the non-key columns to detect if an actual change has occurred. + Only matched rows that have an actual change to a non-key column value will be returned in the final output. + """ all_columns = set(source_table.column_names) join_cols_set = set(join_cols) @@ -107,6 +106,7 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols return rows_to_update_table + def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols: list[str]) -> pa.Table: source_filter_expr = pc.scalar(True) @@ -128,4 +128,4 @@ def get_rows_to_insert(source_table: pa.Table, target_table: pa.Table, join_cols non_matching_rows = source_table.filter(non_matching_expr).select(common_columns) - return non_matching_rows \ No newline at end of file + return non_matching_rows diff --git a/pyproject.toml b/pyproject.toml index 468ede4c69..59a642ed5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2170,4 +2170,4 @@ module = "tenacity.*" ignore_missing_imports = true [tool.coverage.run] -source = ['pyiceberg/'] \ No newline at end of file +source = ['pyiceberg/'] diff --git a/tests/table/test_upsert.py b/tests/table/test_upsert.py index 83362ae2a9..8843b13a76 100644 --- a/tests/table/test_upsert.py +++ b/tests/table/test_upsert.py @@ -16,13 +16,15 @@ # under the License. import pytest from datafusion import SessionContext +from pyarrow import Table as pa_table -from tests.catalog.test_base import InMemoryCatalog +from pyiceberg.table import UpsertResult +from tests.catalog.test_base import InMemoryCatalog, Table _TEST_NAMESPACE = "test_ns" -def show_iceberg_table(table, ctx: SessionContext): +def show_iceberg_table(table: Table, ctx: SessionContext) -> None: import pyarrow.dataset as ds table_name = "target" @@ -32,13 +34,14 @@ def show_iceberg_table(table, ctx: SessionContext): ctx.sql(f"SELECT * FROM {table_name} limit 5").show() -def show_df(df, ctx: SessionContext): +def show_df(df: pa_table, ctx: SessionContext) -> None: import pyarrow.dataset as ds ctx.register_dataset("df", ds.dataset(df)) ctx.sql("select * from df limit 10").show() -def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_dup: bool, ctx: SessionContext): + +def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_dup: bool, ctx: SessionContext) -> pa_table: additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" dup_row = ( @@ -70,7 +73,7 @@ def gen_source_dataset(start_row: int, end_row: int, composite_key: bool, add_du def gen_target_iceberg_table( start_row: int, end_row: int, composite_key: bool, ctx: SessionContext, catalog: InMemoryCatalog, namespace: str -): +) -> Table: additional_columns = ", t.order_id + 1000 as order_line_id" if composite_key else "" df = ctx.sql(f""" @@ -87,17 +90,18 @@ def gen_target_iceberg_table( return table -def assert_upsert_result(res, expected_updated, expected_inserted): +def assert_upsert_result(res: UpsertResult, expected_updated: int, expected_inserted: int) -> None: assert res.rows_updated == expected_updated, f"rows updated should be {expected_updated}, but got {res.rows_updated}" assert res.rows_inserted == expected_inserted, f"rows inserted should be {expected_inserted}, but got {res.rows_inserted}" @pytest.fixture(scope="session") -def catalog_conn(): +def catalog_conn() -> InMemoryCatalog: catalog = InMemoryCatalog("test") catalog.create_namespace(namespace=_TEST_NAMESPACE) yield catalog + @pytest.mark.parametrize( "join_cols, src_start_row, src_end_row, target_start_row, target_end_row, when_matched_update_all, when_not_matched_insert_all, expected_updated, expected_inserted", [ @@ -108,17 +112,17 @@ def catalog_conn(): ], ) def test_merge_rows( - catalog_conn, - join_cols, - src_start_row, - src_end_row, - target_start_row, - target_end_row, - when_matched_update_all, - when_not_matched_insert_all, - expected_updated, - expected_inserted, -): + catalog_conn: InMemoryCatalog, + join_cols: list[str], + src_start_row: int, + src_end_row: int, + target_start_row: int, + target_end_row: int, + when_matched_update_all: bool, + when_not_matched_insert_all: bool, + expected_updated: int, + expected_inserted: int, +) -> None: ctx = SessionContext() catalog = catalog_conn @@ -137,7 +141,7 @@ def test_merge_rows( catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_skip_upd_row(catalog_conn): +def test_merge_scenario_skip_upd_row(catalog_conn: InMemoryCatalog) -> None: """ tests a single insert and update; skips a row that does not need to be updated """ @@ -159,7 +163,7 @@ def test_merge_scenario_skip_upd_row(catalog_conn): select 1 as order_id, date '2021-01-01' as order_date, 'A' as order_type union all select 2 as order_id, date '2021-01-01' as order_date, 'B' as order_type - union all + union all select 3 as order_id, date '2021-01-01' as order_date, 'A' as order_type """).to_arrow_table() @@ -173,7 +177,7 @@ def test_merge_scenario_skip_upd_row(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_date_as_key(catalog_conn): +def test_merge_scenario_date_as_key(catalog_conn: InMemoryCatalog) -> None: """ tests a single insert and update; primary key is a date column """ @@ -195,7 +199,7 @@ def test_merge_scenario_date_as_key(catalog_conn): select date '2021-01-01' as order_date, 'A' as order_type union all select date '2021-01-02' as order_date, 'B' as order_type - union all + union all select date '2021-01-03' as order_date, 'A' as order_type """).to_arrow_table() @@ -209,7 +213,7 @@ def test_merge_scenario_date_as_key(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_string_as_key(catalog_conn): +def test_merge_scenario_string_as_key(catalog_conn: InMemoryCatalog) -> None: """ tests a single insert and update; primary key is a string column """ @@ -231,7 +235,7 @@ def test_merge_scenario_string_as_key(catalog_conn): select 'abc' as order_id, 'A' as order_type union all select 'def' as order_id, 'B' as order_type - union all + union all select 'ghi' as order_id, 'A' as order_type """).to_arrow_table() @@ -244,7 +248,8 @@ def test_merge_scenario_string_as_key(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_scenario_composite_key(catalog_conn): + +def test_merge_scenario_composite_key(catalog_conn: InMemoryCatalog) -> None: """ tests merging 200 rows with a composite key """ @@ -265,7 +270,7 @@ def test_merge_scenario_composite_key(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_merge_source_dups(catalog_conn): +def test_merge_source_dups(catalog_conn: InMemoryCatalog) -> None: """ tests duplicate rows in source """ @@ -281,7 +286,8 @@ def test_merge_source_dups(catalog_conn): catalog.drop_table(f"{_TEST_NAMESPACE}.target") -def test_key_cols_misaligned(catalog_conn): + +def test_key_cols_misaligned(catalog_conn: InMemoryCatalog) -> None: """ tests join columns missing from one of the tables """ @@ -300,4 +306,4 @@ def test_key_cols_misaligned(catalog_conn): with pytest.raises(Exception, match=r"""Field ".*" does not exist in schema"""): table.upsert(df=df_src, join_cols=["order_id"]) - catalog.drop_table(f"{_TEST_NAMESPACE}.target") \ No newline at end of file + catalog.drop_table(f"{_TEST_NAMESPACE}.target") From 0fd644628afdb9940457e6396660b9cfb1c88c11 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 11 Feb 2025 12:54:43 -0500 Subject: [PATCH 35/51] remove the node_modules --- node_modules/.bin/glob | 1 - node_modules/.bin/js-yaml | 1 - node_modules/.bin/katex | 1 - node_modules/.bin/markdown-it | 1 - node_modules/.bin/markdownlint | 1 - node_modules/.bin/node-which | 1 - node_modules/.bin/run-con | 1 - node_modules/.package-lock.json | 1415 ------- node_modules/@isaacs/cliui/LICENSE.txt | 14 - node_modules/@isaacs/cliui/README.md | 143 - node_modules/@isaacs/cliui/index.mjs | 14 - node_modules/@isaacs/cliui/package.json | 86 - node_modules/@pkgjs/parseargs/.editorconfig | 14 - node_modules/@pkgjs/parseargs/CHANGELOG.md | 147 - node_modules/@pkgjs/parseargs/LICENSE | 201 - node_modules/@pkgjs/parseargs/README.md | 413 -- .../parseargs/examples/is-default-value.js | 25 - .../parseargs/examples/limit-long-syntax.js | 35 - .../@pkgjs/parseargs/examples/negate.js | 43 - .../parseargs/examples/no-repeated-options.js | 31 - .../parseargs/examples/ordered-options.mjs | 41 - .../parseargs/examples/simple-hard-coded.js | 26 - node_modules/@pkgjs/parseargs/index.js | 396 -- .../@pkgjs/parseargs/internal/errors.js | 47 - .../@pkgjs/parseargs/internal/primordials.js | 393 -- .../@pkgjs/parseargs/internal/util.js | 14 - .../@pkgjs/parseargs/internal/validators.js | 89 - node_modules/@pkgjs/parseargs/package.json | 36 - node_modules/@pkgjs/parseargs/utils.js | 198 - node_modules/@types/debug/LICENSE | 21 - node_modules/@types/debug/README.md | 69 - node_modules/@types/debug/index.d.ts | 50 - node_modules/@types/debug/package.json | 57 - node_modules/@types/katex/LICENSE | 21 - node_modules/@types/katex/README.md | 15 - .../@types/katex/contrib/auto-render.d.ts | 67 - node_modules/@types/katex/index.d.ts | 151 - node_modules/@types/katex/package.json | 50 - node_modules/@types/ms/LICENSE | 21 - node_modules/@types/ms/README.md | 82 - node_modules/@types/ms/index.d.ts | 63 - node_modules/@types/ms/package.json | 26 - node_modules/@types/unist/LICENSE | 21 - node_modules/@types/unist/README.md | 122 - node_modules/@types/unist/index.d.ts | 103 - node_modules/@types/unist/package.json | 55 - node_modules/ansi-regex/index.d.ts | 33 - node_modules/ansi-regex/index.js | 10 - node_modules/ansi-regex/license | 9 - node_modules/ansi-regex/package.json | 61 - node_modules/ansi-regex/readme.md | 60 - node_modules/ansi-styles/index.d.ts | 236 -- node_modules/ansi-styles/index.js | 223 - node_modules/ansi-styles/license | 9 - node_modules/ansi-styles/package.json | 54 - node_modules/ansi-styles/readme.md | 173 - node_modules/argparse/CHANGELOG.md | 216 - node_modules/argparse/LICENSE | 254 -- node_modules/argparse/README.md | 84 - node_modules/argparse/argparse.js | 3707 ----------------- node_modules/argparse/package.json | 31 - .../balanced-match/.github/FUNDING.yml | 2 - node_modules/balanced-match/LICENSE.md | 21 - node_modules/balanced-match/README.md | 97 - node_modules/balanced-match/index.js | 62 - node_modules/balanced-match/package.json | 48 - .../brace-expansion/.github/FUNDING.yml | 2 - node_modules/brace-expansion/LICENSE | 21 - node_modules/brace-expansion/README.md | 135 - node_modules/brace-expansion/index.js | 203 - node_modules/brace-expansion/package.json | 46 - .../character-entities-legacy/index.d.ts | 6 - .../character-entities-legacy/index.js | 113 - .../character-entities-legacy/license | 22 - .../character-entities-legacy/package.json | 77 - .../character-entities-legacy/readme.md | 157 - node_modules/character-entities/index.d.ts | 6 - node_modules/character-entities/index.js | 2132 ---------- node_modules/character-entities/license | 22 - node_modules/character-entities/package.json | 78 - node_modules/character-entities/readme.md | 152 - .../character-reference-invalid/index.d.ts | 6 - .../character-reference-invalid/index.js | 35 - .../character-reference-invalid/license | 22 - .../character-reference-invalid/package.json | 83 - .../character-reference-invalid/readme.md | 156 - node_modules/color-convert/CHANGELOG.md | 54 - node_modules/color-convert/LICENSE | 21 - node_modules/color-convert/README.md | 68 - node_modules/color-convert/conversions.js | 839 ---- node_modules/color-convert/index.js | 81 - node_modules/color-convert/package.json | 48 - node_modules/color-convert/route.js | 97 - node_modules/color-name/LICENSE | 8 - node_modules/color-name/README.md | 11 - node_modules/color-name/index.js | 152 - node_modules/color-name/package.json | 28 - node_modules/commander/LICENSE | 22 - node_modules/commander/Readme.md | 1149 ----- node_modules/commander/esm.mjs | 16 - node_modules/commander/index.js | 24 - node_modules/commander/package-support.json | 16 - node_modules/commander/package.json | 82 - node_modules/commander/typings/esm.d.mts | 3 - node_modules/commander/typings/index.d.ts | 1045 ----- node_modules/cross-spawn/LICENSE | 21 - node_modules/cross-spawn/README.md | 89 - node_modules/cross-spawn/index.js | 39 - node_modules/cross-spawn/package.json | 73 - node_modules/debug/LICENSE | 20 - node_modules/debug/README.md | 481 --- node_modules/debug/package.json | 65 - node_modules/debug/src/browser.js | 272 -- node_modules/debug/src/common.js | 292 -- node_modules/debug/src/index.js | 10 - node_modules/debug/src/node.js | 263 -- .../index.d.ts | 12 - .../index.dom.d.ts | 6 - .../index.dom.js | 33 - .../decode-named-character-reference/index.js | 18 - .../decode-named-character-reference/license | 22 - .../package.json | 89 - .../readme.md | 135 - node_modules/deep-extend/CHANGELOG.md | 46 - node_modules/deep-extend/LICENSE | 20 - node_modules/deep-extend/README.md | 91 - node_modules/deep-extend/index.js | 1 - node_modules/deep-extend/package.json | 62 - node_modules/dequal/index.d.ts | 1 - node_modules/dequal/license | 21 - node_modules/dequal/lite/index.d.ts | 1 - node_modules/dequal/lite/index.js | 31 - node_modules/dequal/lite/index.min.js | 1 - node_modules/dequal/lite/index.mjs | 29 - node_modules/dequal/package.json | 57 - node_modules/dequal/readme.md | 112 - node_modules/devlop/license | 22 - node_modules/devlop/package.json | 80 - node_modules/devlop/readme.md | 360 -- node_modules/eastasianwidth/README.md | 32 - node_modules/eastasianwidth/eastasianwidth.js | 311 -- node_modules/eastasianwidth/package.json | 18 - node_modules/emoji-regex/LICENSE-MIT.txt | 20 - node_modules/emoji-regex/README.md | 137 - node_modules/emoji-regex/RGI_Emoji.d.ts | 5 - node_modules/emoji-regex/RGI_Emoji.js | 6 - .../emoji-regex/es2015/RGI_Emoji.d.ts | 5 - node_modules/emoji-regex/es2015/RGI_Emoji.js | 6 - node_modules/emoji-regex/es2015/index.d.ts | 5 - node_modules/emoji-regex/es2015/index.js | 6 - node_modules/emoji-regex/es2015/text.d.ts | 5 - node_modules/emoji-regex/es2015/text.js | 6 - node_modules/emoji-regex/index.d.ts | 5 - node_modules/emoji-regex/index.js | 6 - node_modules/emoji-regex/package.json | 52 - node_modules/emoji-regex/text.d.ts | 5 - node_modules/emoji-regex/text.js | 6 - node_modules/entities/LICENSE | 11 - node_modules/entities/package.json | 90 - node_modules/entities/readme.md | 122 - node_modules/foreground-child/LICENSE | 15 - node_modules/foreground-child/README.md | 128 - node_modules/foreground-child/package.json | 111 - node_modules/glob/LICENSE | 15 - node_modules/glob/README.md | 1265 ------ node_modules/glob/package.json | 99 - node_modules/ignore/LICENSE-MIT | 21 - node_modules/ignore/README.md | 452 -- node_modules/ignore/index.d.ts | 81 - node_modules/ignore/index.js | 779 ---- node_modules/ignore/legacy.js | 673 --- node_modules/ignore/package.json | 88 - node_modules/ini/LICENSE | 15 - node_modules/ini/README.md | 180 - node_modules/ini/package.json | 45 - node_modules/is-alphabetical/index.d.ts | 8 - node_modules/is-alphabetical/index.js | 16 - node_modules/is-alphabetical/license | 22 - node_modules/is-alphabetical/package.json | 73 - node_modules/is-alphabetical/readme.md | 141 - node_modules/is-alphanumerical/index.d.ts | 8 - node_modules/is-alphanumerical/index.js | 13 - node_modules/is-alphanumerical/license | 22 - node_modules/is-alphanumerical/package.json | 79 - node_modules/is-alphanumerical/readme.md | 142 - node_modules/is-decimal/index.d.ts | 8 - node_modules/is-decimal/index.js | 13 - node_modules/is-decimal/license | 22 - node_modules/is-decimal/package.json | 73 - node_modules/is-decimal/readme.md | 139 - .../is-fullwidth-code-point/index.d.ts | 17 - node_modules/is-fullwidth-code-point/index.js | 50 - node_modules/is-fullwidth-code-point/license | 9 - .../is-fullwidth-code-point/package.json | 42 - .../is-fullwidth-code-point/readme.md | 39 - node_modules/is-hexadecimal/index.d.ts | 8 - node_modules/is-hexadecimal/index.js | 17 - node_modules/is-hexadecimal/license | 22 - node_modules/is-hexadecimal/package.json | 73 - node_modules/is-hexadecimal/readme.md | 141 - node_modules/isexe/.npmignore | 2 - node_modules/isexe/LICENSE | 15 - node_modules/isexe/README.md | 51 - node_modules/isexe/index.js | 57 - node_modules/isexe/mode.js | 41 - node_modules/isexe/package.json | 31 - node_modules/isexe/test/basic.js | 221 - node_modules/isexe/windows.js | 42 - node_modules/jackspeak/LICENSE.md | 55 - node_modules/jackspeak/README.md | 357 -- node_modules/jackspeak/package.json | 95 - node_modules/js-yaml/CHANGELOG.md | 616 --- node_modules/js-yaml/LICENSE | 21 - node_modules/js-yaml/README.md | 246 -- node_modules/js-yaml/index.js | 47 - node_modules/js-yaml/package.json | 66 - node_modules/jsonc-parser/CHANGELOG.md | 76 - node_modules/jsonc-parser/LICENSE.md | 21 - node_modules/jsonc-parser/README.md | 364 -- node_modules/jsonc-parser/SECURITY.md | 41 - node_modules/jsonc-parser/package.json | 37 - node_modules/jsonpointer/LICENSE.md | 21 - node_modules/jsonpointer/README.md | 45 - node_modules/jsonpointer/jsonpointer.d.ts | 35 - node_modules/jsonpointer/jsonpointer.js | 100 - node_modules/jsonpointer/package.json | 48 - node_modules/katex/LICENSE | 21 - node_modules/katex/README.md | 125 - node_modules/katex/cli.js | 112 - .../katex/contrib/auto-render/README.md | 8 - .../katex/contrib/auto-render/auto-render.js | 142 - .../katex/contrib/auto-render/index.html | 56 - .../contrib/auto-render/splitAtDelimiters.js | 85 - .../auto-render/test/auto-render-spec.js | 363 -- node_modules/katex/contrib/copy-tex/README.md | 39 - .../katex/contrib/copy-tex/copy-tex.js | 51 - .../katex/contrib/copy-tex/index.html | 38 - .../katex/contrib/copy-tex/katex2tex.js | 61 - .../contrib/mathtex-script-type/README.md | 38 - .../mathtex-script-type.js | 22 - node_modules/katex/contrib/mhchem/README.md | 23 - node_modules/katex/contrib/mhchem/mhchem.js | 1695 -------- .../render-a11y-string/render-a11y-string.js | 746 ---- .../test/render-a11y-string-spec.js | 549 --- node_modules/katex/katex.js | 247 -- .../katex/node_modules/commander/LICENSE | 22 - .../katex/node_modules/commander/Readme.md | 1015 ----- .../katex/node_modules/commander/esm.mjs | 15 - .../katex/node_modules/commander/index.js | 27 - .../commander/package-support.json | 16 - .../katex/node_modules/commander/package.json | 69 - .../node_modules/commander/typings/index.d.ts | 774 ---- node_modules/katex/package.json | 195 - node_modules/katex/src/Lexer.js | 122 - node_modules/katex/src/MacroExpander.js | 470 --- node_modules/katex/src/Namespace.js | 129 - node_modules/katex/src/Options.js | 319 -- node_modules/katex/src/ParseError.js | 86 - node_modules/katex/src/Parser.js | 1029 ----- node_modules/katex/src/Settings.js | 360 -- node_modules/katex/src/SourceLocation.js | 42 - node_modules/katex/src/Style.js | 130 - node_modules/katex/src/Token.js | 47 - node_modules/katex/src/buildCommon.js | 784 ---- node_modules/katex/src/buildHTML.js | 406 -- node_modules/katex/src/buildMathML.js | 322 -- node_modules/katex/src/buildTree.js | 67 - node_modules/katex/src/defineEnvironment.js | 117 - node_modules/katex/src/defineFunction.js | 223 - node_modules/katex/src/defineMacro.js | 125 - node_modules/katex/src/delimiter.js | 835 ---- node_modules/katex/src/domTree.js | 632 --- node_modules/katex/src/environments.js | 9 - node_modules/katex/src/environments/array.js | 1118 ----- node_modules/katex/src/environments/cd.js | 313 -- node_modules/katex/src/fontMetrics.js | 282 -- node_modules/katex/src/fontMetricsData.js | 2077 --------- node_modules/katex/src/fonts/Makefile | 139 - node_modules/katex/src/fonts/default.cfg | 20 - .../katex/src/fonts/generate_fonts.py | 58 - node_modules/katex/src/fonts/makeBlacker | 49 - node_modules/katex/src/fonts/makeFF | 2005 --------- node_modules/katex/src/fonts/xbbold.mf | 182 - node_modules/katex/src/functions.js | 55 - node_modules/katex/src/functions/accent.js | 284 -- .../katex/src/functions/accentunder.js | 60 - node_modules/katex/src/functions/arrow.js | 144 - node_modules/katex/src/functions/char.js | 45 - node_modules/katex/src/functions/color.js | 88 - node_modules/katex/src/functions/cr.js | 61 - node_modules/katex/src/functions/def.js | 210 - .../katex/src/functions/delimsizing.js | 360 -- node_modules/katex/src/functions/enclose.js | 323 -- .../katex/src/functions/environment.js | 62 - node_modules/katex/src/functions/font.js | 120 - node_modules/katex/src/functions/genfrac.js | 510 --- node_modules/katex/src/functions/hbox.js | 39 - .../katex/src/functions/horizBrace.js | 137 - node_modules/katex/src/functions/href.js | 93 - node_modules/katex/src/functions/html.js | 102 - .../katex/src/functions/htmlmathml.js | 34 - .../katex/src/functions/includegraphics.js | 151 - node_modules/katex/src/functions/kern.js | 56 - node_modules/katex/src/functions/lap.js | 74 - node_modules/katex/src/functions/math.js | 42 - .../katex/src/functions/mathchoice.js | 51 - node_modules/katex/src/functions/mclass.js | 168 - node_modules/katex/src/functions/op.js | 334 -- .../katex/src/functions/operatorname.js | 164 - node_modules/katex/src/functions/ordgroup.js | 22 - node_modules/katex/src/functions/overline.js | 59 - node_modules/katex/src/functions/phantom.js | 117 - node_modules/katex/src/functions/pmb.js | 44 - node_modules/katex/src/functions/raisebox.js | 46 - node_modules/katex/src/functions/relax.js | 17 - node_modules/katex/src/functions/rule.js | 77 - node_modules/katex/src/functions/sizing.js | 91 - node_modules/katex/src/functions/smash.js | 110 - node_modules/katex/src/functions/sqrt.js | 125 - node_modules/katex/src/functions/styling.js | 73 - node_modules/katex/src/functions/supsub.js | 267 -- node_modules/katex/src/functions/symbolsOp.js | 34 - .../katex/src/functions/symbolsOrd.js | 62 - .../katex/src/functions/symbolsSpacing.js | 73 - node_modules/katex/src/functions/tag.js | 40 - node_modules/katex/src/functions/text.js | 76 - node_modules/katex/src/functions/underline.js | 58 - .../src/functions/utils/assembleSupSub.js | 120 - node_modules/katex/src/functions/vcenter.js | 44 - node_modules/katex/src/functions/verb.js | 58 - node_modules/katex/src/macros.js | 1033 ----- node_modules/katex/src/mathMLTree.js | 267 -- node_modules/katex/src/metrics/README.md | 23 - .../katex/src/metrics/extract_tfms.py | 114 - .../katex/src/metrics/extract_ttfs.py | 122 - node_modules/katex/src/metrics/format_json.py | 28 - node_modules/katex/src/metrics/mapping.pl | 1224 ------ node_modules/katex/src/metrics/parse_tfm.py | 211 - node_modules/katex/src/parseNode.js | 524 --- node_modules/katex/src/parseTree.js | 49 - node_modules/katex/src/spacingData.js | 108 - node_modules/katex/src/stretchy.js | 378 -- node_modules/katex/src/styles/fonts.scss | 71 - node_modules/katex/src/styles/katex.scss | 664 --- node_modules/katex/src/svgGeometry.js | 545 --- node_modules/katex/src/symbols.js | 890 ---- node_modules/katex/src/tree.js | 78 - node_modules/katex/src/types.js | 36 - node_modules/katex/src/unicodeAccents.js | 18 - node_modules/katex/src/unicodeScripts.js | 126 - node_modules/katex/src/unicodeSupOrSub.js | 108 - node_modules/katex/src/unicodeSymbols.js | 32 - node_modules/katex/src/units.js | 106 - node_modules/katex/src/utils.js | 130 - node_modules/katex/src/wide-character.js | 111 - node_modules/katex/types/katex.d.ts | 258 -- node_modules/linkify-it/LICENSE | 22 - node_modules/linkify-it/README.md | 196 - node_modules/linkify-it/index.mjs | 642 --- node_modules/linkify-it/package.json | 58 - node_modules/lru-cache/LICENSE | 15 - node_modules/lru-cache/README.md | 331 -- node_modules/lru-cache/package.json | 116 - node_modules/markdown-it/LICENSE | 22 - node_modules/markdown-it/README.md | 324 -- node_modules/markdown-it/index.mjs | 1 - node_modules/markdown-it/package.json | 92 - node_modules/markdownlint-cli/LICENSE | 21 - node_modules/markdownlint-cli/README.md | 181 - node_modules/markdownlint-cli/markdownlint.js | 336 -- node_modules/markdownlint-cli/package.json | 95 - node_modules/markdownlint/CHANGELOG.md | 495 --- node_modules/markdownlint/CONTRIBUTING.md | 93 - node_modules/markdownlint/LICENSE | 21 - node_modules/markdownlint/README.md | 1037 ----- node_modules/markdownlint/doc/CustomRules.md | 194 - node_modules/markdownlint/doc/Prettier.md | 27 - .../markdownlint/doc/ReleaseProcess.md | 20 - node_modules/markdownlint/doc/Rules.md | 2535 ----------- node_modules/markdownlint/doc/md001.md | 37 - node_modules/markdownlint/doc/md003.md | 59 - node_modules/markdownlint/doc/md004.md | 50 - node_modules/markdownlint/doc/md005.md | 53 - node_modules/markdownlint/doc/md007.md | 52 - node_modules/markdownlint/doc/md009.md | 51 - node_modules/markdownlint/doc/md010.md | 56 - node_modules/markdownlint/doc/md011.md | 30 - node_modules/markdownlint/doc/md012.md | 38 - node_modules/markdownlint/doc/md013.md | 58 - node_modules/markdownlint/doc/md014.md | 54 - node_modules/markdownlint/doc/md018.md | 27 - node_modules/markdownlint/doc/md019.md | 28 - node_modules/markdownlint/doc/md020.md | 29 - node_modules/markdownlint/doc/md021.md | 31 - node_modules/markdownlint/doc/md022.md | 52 - node_modules/markdownlint/doc/md023.md | 33 - node_modules/markdownlint/doc/md024.md | 44 - node_modules/markdownlint/doc/md025.md | 49 - node_modules/markdownlint/doc/md026.md | 40 - node_modules/markdownlint/doc/md027.md | 24 - node_modules/markdownlint/doc/md028.md | 40 - node_modules/markdownlint/doc/md029.md | 98 - node_modules/markdownlint/doc/md030.md | 82 - node_modules/markdownlint/doc/md031.md | 50 - node_modules/markdownlint/doc/md032.md | 55 - node_modules/markdownlint/doc/md033.md | 27 - node_modules/markdownlint/doc/md034.md | 55 - node_modules/markdownlint/doc/md035.md | 37 - node_modules/markdownlint/doc/md036.md | 45 - node_modules/markdownlint/doc/md037.md | 37 - node_modules/markdownlint/doc/md038.md | 40 - node_modules/markdownlint/doc/md039.md | 21 - node_modules/markdownlint/doc/md040.md | 52 - node_modules/markdownlint/doc/md041.md | 49 - node_modules/markdownlint/doc/md042.md | 32 - node_modules/markdownlint/doc/md043.md | 69 - node_modules/markdownlint/doc/md044.md | 45 - node_modules/markdownlint/doc/md045.md | 40 - node_modules/markdownlint/doc/md046.md | 40 - node_modules/markdownlint/doc/md047.md | 34 - node_modules/markdownlint/doc/md048.md | 42 - node_modules/markdownlint/doc/md049.md | 36 - node_modules/markdownlint/doc/md050.md | 35 - node_modules/markdownlint/doc/md051.md | 95 - node_modules/markdownlint/doc/md052.md | 40 - node_modules/markdownlint/doc/md053.md | 38 - node_modules/markdownlint/doc/md054.md | 100 - node_modules/markdownlint/doc/md055.md | 55 - node_modules/markdownlint/doc/md056.md | 37 - node_modules/markdownlint/doc/md058.md | 48 - node_modules/markdownlint/helpers/LICENSE | 21 - node_modules/markdownlint/helpers/README.md | 29 - node_modules/markdownlint/helpers/helpers.cjs | 542 --- .../helpers/micromark-helpers.cjs | 301 -- .../markdownlint/helpers/package.json | 26 - node_modules/markdownlint/helpers/shared.cjs | 16 - node_modules/markdownlint/package.json | 120 - .../markdownlint/schema/.markdownlint.jsonc | 310 -- .../markdownlint/schema/.markdownlint.yaml | 277 -- .../schema/ValidatingConfiguration.md | 26 - .../markdownlint-config-schema-strict.json | 1841 -------- .../schema/markdownlint-config-schema.json | 1846 -------- node_modules/markdownlint/style/all.json | 5 - .../markdownlint/style/cirosantilli.json | 22 - node_modules/markdownlint/style/prettier.json | 27 - node_modules/markdownlint/style/relaxed.json | 12 - node_modules/mdurl/LICENSE | 45 - node_modules/mdurl/README.md | 102 - node_modules/mdurl/index.mjs | 11 - node_modules/mdurl/package.json | 37 - .../micromark-core-commonmark/dev/index.d.ts | 23 - .../dev/index.d.ts.map | 1 - .../micromark-core-commonmark/dev/index.js | 22 - .../micromark-core-commonmark/index.d.ts | 23 - .../micromark-core-commonmark/index.d.ts.map | 1 - .../micromark-core-commonmark/index.js | 22 - .../micromark-core-commonmark/license | 22 - .../micromark-core-commonmark/package.json | 74 - .../micromark-core-commonmark/readme.md | 171 - .../dev/index.d.ts | 156 - .../dev/index.js | 3 - .../micromark-extension-directive/index.d.ts | 156 - .../micromark-extension-directive/index.js | 3 - .../micromark-extension-directive/license | 22 - .../package.json | 127 - .../micromark-extension-directive/readme.md | 424 -- .../dev/index.d.ts | 24 - .../dev/index.js | 2 - .../index.d.ts | 24 - .../index.js | 2 - .../license | 22 - .../package.json | 116 - .../readme.md | 422 -- .../dev/index.d.ts | 164 - .../dev/index.js | 3 - .../index.d.ts | 164 - .../micromark-extension-gfm-footnote/index.js | 3 - .../micromark-extension-gfm-footnote/license | 22 - .../package.json | 132 - .../readme.md | 656 --- .../dev/index.d.ts | 37 - .../dev/index.js | 2 - .../micromark-extension-gfm-table/index.d.ts | 37 - .../micromark-extension-gfm-table/index.js | 2 - .../micromark-extension-gfm-table/license | 22 - .../package.json | 116 - .../micromark-extension-gfm-table/readme.md | 515 --- .../micromark-extension-math/dev/index.d.ts | 61 - .../micromark-extension-math/dev/index.js | 3 - .../micromark-extension-math/index.d.ts | 61 - .../micromark-extension-math/index.js | 3 - node_modules/micromark-extension-math/license | 22 - .../micromark-extension-math/package.json | 121 - .../micromark-extension-math/readme.md | 429 -- .../dev/index.d.ts | 42 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 255 -- .../micromark-factory-destination/index.d.ts | 42 - .../index.d.ts.map | 1 - .../micromark-factory-destination/index.js | 206 - .../micromark-factory-destination/license | 22 - .../package.json | 57 - .../micromark-factory-destination/readme.md | 234 -- .../micromark-factory-label/dev/index.d.ts | 37 - .../dev/index.d.ts.map | 1 - .../micromark-factory-label/dev/index.js | 172 - .../micromark-factory-label/index.d.ts | 37 - .../micromark-factory-label/index.d.ts.map | 1 - node_modules/micromark-factory-label/index.js | 148 - node_modules/micromark-factory-label/license | 22 - .../micromark-factory-label/package.json | 60 - .../micromark-factory-label/readme.md | 224 - .../micromark-factory-space/dev/index.d.ts | 37 - .../dev/index.d.ts.map | 1 - .../micromark-factory-space/dev/index.js | 67 - .../micromark-factory-space/index.d.ts | 37 - .../micromark-factory-space/index.d.ts.map | 1 - node_modules/micromark-factory-space/index.js | 64 - node_modules/micromark-factory-space/license | 22 - .../micromark-factory-space/package.json | 55 - .../micromark-factory-space/readme.md | 225 - .../micromark-factory-title/dev/index.d.ts | 36 - .../dev/index.d.ts.map | 1 - .../micromark-factory-title/dev/index.js | 169 - .../micromark-factory-title/index.d.ts | 36 - .../micromark-factory-title/index.d.ts.map | 1 - node_modules/micromark-factory-title/index.js | 158 - node_modules/micromark-factory-title/license | 22 - .../micromark-factory-title/package.json | 58 - .../micromark-factory-title/readme.md | 229 - .../dev/index.d.ts | 22 - .../dev/index.d.ts.map | 1 - .../micromark-factory-whitespace/dev/index.js | 53 - .../micromark-factory-whitespace/index.d.ts | 22 - .../index.d.ts.map | 1 - .../micromark-factory-whitespace/index.js | 44 - .../micromark-factory-whitespace/license | 22 - .../micromark-factory-whitespace/package.json | 57 - .../micromark-factory-whitespace/readme.md | 205 - .../micromark-util-character/dev/index.d.ts | 195 - .../dev/index.d.ts.map | 1 - .../micromark-util-character/dev/index.js | 252 -- .../micromark-util-character/index.d.ts | 195 - .../micromark-util-character/index.d.ts.map | 1 - .../micromark-util-character/index.js | 246 -- node_modules/micromark-util-character/license | 22 - .../micromark-util-character/package.json | 57 - .../micromark-util-character/readme.md | 446 -- .../micromark-util-chunked/dev/index.d.ts | 41 - .../micromark-util-chunked/dev/index.d.ts.map | 1 - .../micromark-util-chunked/dev/index.js | 89 - .../micromark-util-chunked/index.d.ts | 41 - .../micromark-util-chunked/index.d.ts.map | 1 - node_modules/micromark-util-chunked/index.js | 81 - node_modules/micromark-util-chunked/license | 22 - .../micromark-util-chunked/package.json | 57 - node_modules/micromark-util-chunked/readme.md | 219 - .../dev/index.d.ts | 18 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 38 - .../index.d.ts | 18 - .../index.d.ts.map | 1 - .../index.js | 27 - .../micromark-util-classify-character/license | 22 - .../package.json | 59 - .../readme.md | 205 - .../index.d.ts | 22 - .../index.d.ts.map | 1 - .../index.js | 143 - .../micromark-util-combine-extensions/license | 22 - .../package.json | 52 - .../readme.md | 201 - .../dev/index.d.ts | 16 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 42 - .../index.d.ts | 16 - .../index.d.ts.map | 1 - .../index.js | 32 - .../license | 22 - .../package.json | 59 - .../readme.md | 184 - node_modules/micromark-util-encode/index.d.ts | 14 - .../micromark-util-encode/index.d.ts.map | 1 - node_modules/micromark-util-encode/index.js | 33 - node_modules/micromark-util-encode/license | 22 - .../micromark-util-encode/package.json | 47 - node_modules/micromark-util-encode/readme.md | 176 - .../micromark-util-html-tag-name/index.d.ts | 30 - .../index.d.ts.map | 1 - .../micromark-util-html-tag-name/index.js | 93 - .../micromark-util-html-tag-name/license | 22 - .../micromark-util-html-tag-name/package.json | 47 - .../micromark-util-html-tag-name/readme.md | 193 - .../dev/index.d.ts | 21 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 38 - .../index.d.ts | 21 - .../index.d.ts.map | 1 - .../index.js | 33 - .../license | 22 - .../package.json | 58 - .../readme.md | 187 - .../micromark-util-resolve-all/index.d.ts | 22 - .../micromark-util-resolve-all/index.d.ts.map | 1 - .../micromark-util-resolve-all/index.js | 32 - .../micromark-util-resolve-all/license | 22 - .../micromark-util-resolve-all/package.json | 48 - .../micromark-util-resolve-all/readme.md | 238 -- .../dev/index.d.ts | 36 - .../dev/index.d.ts.map | 1 - .../micromark-util-sanitize-uri/dev/index.js | 124 - .../micromark-util-sanitize-uri/index.d.ts | 36 - .../index.d.ts.map | 1 - .../micromark-util-sanitize-uri/index.js | 107 - .../micromark-util-sanitize-uri/license | 22 - .../micromark-util-sanitize-uri/package.json | 59 - .../micromark-util-sanitize-uri/readme.md | 214 - .../micromark-util-subtokenize/dev/index.d.ts | 12 - .../dev/index.d.ts.map | 1 - .../micromark-util-subtokenize/dev/index.js | 272 -- .../micromark-util-subtokenize/index.d.ts | 12 - .../micromark-util-subtokenize/index.d.ts.map | 1 - .../micromark-util-subtokenize/index.js | 222 - .../micromark-util-subtokenize/license | 22 - .../micromark-util-subtokenize/package.json | 60 - .../micromark-util-subtokenize/readme.md | 181 - node_modules/micromark-util-symbol/license | 22 - .../micromark-util-symbol/package.json | 43 - node_modules/micromark-util-symbol/readme.md | 168 - node_modules/micromark-util-types/index.d.ts | 1294 ------ node_modules/micromark-util-types/index.js | 2 - node_modules/micromark-util-types/license | 22 - .../micromark-util-types/package.json | 71 - node_modules/micromark-util-types/readme.md | 151 - node_modules/micromark/dev/index.d.ts | 82 - node_modules/micromark/dev/index.d.ts.map | 1 - node_modules/micromark/dev/index.js | 68 - node_modules/micromark/dev/stream.d.ts | 35 - node_modules/micromark/dev/stream.d.ts.map | 1 - node_modules/micromark/dev/stream.js | 270 -- node_modules/micromark/index.d.ts | 82 - node_modules/micromark/index.d.ts.map | 1 - node_modules/micromark/index.js | 60 - node_modules/micromark/license | 22 - node_modules/micromark/package.json | 100 - node_modules/micromark/readme.md | 491 --- node_modules/micromark/stream.d.ts | 35 - node_modules/micromark/stream.d.ts.map | 1 - node_modules/micromark/stream.js | 256 -- node_modules/minimatch/LICENSE | 15 - node_modules/minimatch/README.md | 454 -- node_modules/minimatch/package.json | 82 - node_modules/minimist/.eslintrc | 29 - node_modules/minimist/.github/FUNDING.yml | 12 - node_modules/minimist/.nycrc | 14 - node_modules/minimist/CHANGELOG.md | 298 -- node_modules/minimist/LICENSE | 18 - node_modules/minimist/README.md | 121 - node_modules/minimist/example/parse.js | 4 - node_modules/minimist/index.js | 263 -- node_modules/minimist/package.json | 75 - node_modules/minimist/test/all_bool.js | 34 - node_modules/minimist/test/bool.js | 177 - node_modules/minimist/test/dash.js | 43 - node_modules/minimist/test/default_bool.js | 37 - node_modules/minimist/test/dotted.js | 24 - node_modules/minimist/test/kv_short.js | 32 - node_modules/minimist/test/long.js | 33 - node_modules/minimist/test/num.js | 38 - node_modules/minimist/test/parse.js | 209 - node_modules/minimist/test/parse_modified.js | 11 - node_modules/minimist/test/proto.js | 64 - node_modules/minimist/test/short.js | 69 - node_modules/minimist/test/stop_early.js | 17 - node_modules/minimist/test/unknown.js | 104 - node_modules/minimist/test/whitespace.js | 10 - node_modules/minipass/LICENSE | 15 - node_modules/minipass/README.md | 825 ---- node_modules/minipass/package.json | 82 - node_modules/ms/index.js | 162 - node_modules/ms/license.md | 21 - node_modules/ms/package.json | 38 - node_modules/ms/readme.md | 59 - .../package-json-from-dist/LICENSE.md | 63 - node_modules/package-json-from-dist/README.md | 110 - .../package-json-from-dist/package.json | 68 - node_modules/parse-entities/index.d.ts | 126 - node_modules/parse-entities/index.js | 3 - node_modules/parse-entities/license | 22 - node_modules/parse-entities/package.json | 91 - node_modules/parse-entities/readme.md | 266 -- node_modules/path-key/index.d.ts | 40 - node_modules/path-key/index.js | 16 - node_modules/path-key/license | 9 - node_modules/path-key/package.json | 39 - node_modules/path-key/readme.md | 61 - node_modules/path-scurry/LICENSE.md | 55 - node_modules/path-scurry/README.md | 636 --- node_modules/path-scurry/package.json | 89 - node_modules/punycode.js/LICENSE-MIT.txt | 20 - node_modules/punycode.js/README.md | 148 - node_modules/punycode.js/package.json | 58 - node_modules/punycode.js/punycode.es6.js | 444 -- node_modules/punycode.js/punycode.js | 443 -- node_modules/run-con/.circleci/config.yml | 7 - node_modules/run-con/.github/FUNDING.yml | 3 - node_modules/run-con/.github/dependabot.yml | 9 - .../run-con/.github/workflows/coverage.yml | 37 - .../run-con/.github/workflows/dependabot.yml | 44 - .../run-con/.github/workflows/issuehunt.yml | 33 - node_modules/run-con/LICENSE.APACHE2 | 15 - node_modules/run-con/LICENSE.BSD | 26 - node_modules/run-con/LICENSE.MIT | 24 - node_modules/run-con/README.md | 239 -- node_modules/run-con/browser.js | 7 - node_modules/run-con/cli.js | 4 - node_modules/run-con/index.js | 53 - node_modules/run-con/package.json | 29 - node_modules/run-con/renovate.json | 6 - node_modules/shebang-command/index.js | 19 - node_modules/shebang-command/license | 9 - node_modules/shebang-command/package.json | 34 - node_modules/shebang-command/readme.md | 34 - node_modules/shebang-regex/index.d.ts | 22 - node_modules/shebang-regex/index.js | 2 - node_modules/shebang-regex/license | 9 - node_modules/shebang-regex/package.json | 35 - node_modules/shebang-regex/readme.md | 33 - node_modules/signal-exit/LICENSE.txt | 16 - node_modules/signal-exit/README.md | 74 - node_modules/signal-exit/package.json | 106 - node_modules/smol-toml/LICENSE | 24 - node_modules/smol-toml/README.md | 192 - node_modules/smol-toml/package.json | 53 - node_modules/string-width-cjs/index.d.ts | 29 - node_modules/string-width-cjs/index.js | 47 - node_modules/string-width-cjs/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 - .../node_modules/emoji-regex/README.md | 73 - .../node_modules/emoji-regex/es2015/index.js | 6 - .../node_modules/emoji-regex/es2015/text.js | 6 - .../node_modules/emoji-regex/index.d.ts | 23 - .../node_modules/emoji-regex/index.js | 6 - .../node_modules/emoji-regex/package.json | 50 - .../node_modules/emoji-regex/text.js | 6 - .../node_modules/strip-ansi/index.d.ts | 17 - .../node_modules/strip-ansi/index.js | 4 - .../node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../node_modules/strip-ansi/readme.md | 46 - node_modules/string-width-cjs/package.json | 56 - node_modules/string-width-cjs/readme.md | 50 - node_modules/string-width/index.d.ts | 29 - node_modules/string-width/index.js | 54 - node_modules/string-width/license | 9 - node_modules/string-width/package.json | 59 - node_modules/string-width/readme.md | 67 - node_modules/strip-ansi-cjs/index.d.ts | 17 - node_modules/strip-ansi-cjs/index.js | 4 - node_modules/strip-ansi-cjs/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - node_modules/strip-ansi-cjs/package.json | 54 - node_modules/strip-ansi-cjs/readme.md | 46 - node_modules/strip-ansi/index.d.ts | 15 - node_modules/strip-ansi/index.js | 14 - node_modules/strip-ansi/license | 9 - node_modules/strip-ansi/package.json | 57 - node_modules/strip-ansi/readme.md | 41 - node_modules/strip-json-comments/index.d.ts | 36 - node_modules/strip-json-comments/index.js | 77 - node_modules/strip-json-comments/license | 9 - node_modules/strip-json-comments/package.json | 47 - node_modules/strip-json-comments/readme.md | 78 - node_modules/uc.micro/LICENSE.txt | 20 - node_modules/uc.micro/README.md | 14 - node_modules/uc.micro/categories/Cc/regex.mjs | 1 - node_modules/uc.micro/categories/Cf/regex.mjs | 1 - node_modules/uc.micro/categories/P/regex.mjs | 1 - node_modules/uc.micro/categories/S/regex.mjs | 1 - node_modules/uc.micro/categories/Z/regex.mjs | 1 - node_modules/uc.micro/index.mjs | 8 - node_modules/uc.micro/package.json | 37 - .../uc.micro/properties/Any/regex.mjs | 1 - node_modules/which/CHANGELOG.md | 166 - node_modules/which/LICENSE | 15 - node_modules/which/README.md | 54 - node_modules/which/package.json | 43 - node_modules/which/which.js | 125 - node_modules/wrap-ansi-cjs/index.js | 216 - node_modules/wrap-ansi-cjs/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - .../node_modules/ansi-styles/index.d.ts | 345 -- .../node_modules/ansi-styles/index.js | 163 - .../node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../node_modules/ansi-styles/readme.md | 152 - .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 - .../node_modules/emoji-regex/README.md | 73 - .../node_modules/emoji-regex/es2015/index.js | 6 - .../node_modules/emoji-regex/es2015/text.js | 6 - .../node_modules/emoji-regex/index.d.ts | 23 - .../node_modules/emoji-regex/index.js | 6 - .../node_modules/emoji-regex/package.json | 50 - .../node_modules/emoji-regex/text.js | 6 - .../node_modules/string-width/index.d.ts | 29 - .../node_modules/string-width/index.js | 47 - .../node_modules/string-width/license | 9 - .../node_modules/string-width/package.json | 56 - .../node_modules/string-width/readme.md | 50 - .../node_modules/strip-ansi/index.d.ts | 17 - .../node_modules/strip-ansi/index.js | 4 - .../node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../node_modules/strip-ansi/readme.md | 46 - node_modules/wrap-ansi-cjs/package.json | 62 - node_modules/wrap-ansi-cjs/readme.md | 91 - node_modules/wrap-ansi/index.d.ts | 41 - node_modules/wrap-ansi/index.js | 214 - node_modules/wrap-ansi/license | 9 - node_modules/wrap-ansi/package.json | 69 - node_modules/wrap-ansi/readme.md | 91 - 834 files changed, 104372 deletions(-) delete mode 120000 node_modules/.bin/glob delete mode 120000 node_modules/.bin/js-yaml delete mode 120000 node_modules/.bin/katex delete mode 120000 node_modules/.bin/markdown-it delete mode 120000 node_modules/.bin/markdownlint delete mode 120000 node_modules/.bin/node-which delete mode 120000 node_modules/.bin/run-con delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/@isaacs/cliui/LICENSE.txt delete mode 100644 node_modules/@isaacs/cliui/README.md delete mode 100644 node_modules/@isaacs/cliui/index.mjs delete mode 100644 node_modules/@isaacs/cliui/package.json delete mode 100644 node_modules/@pkgjs/parseargs/.editorconfig delete mode 100644 node_modules/@pkgjs/parseargs/CHANGELOG.md delete mode 100644 node_modules/@pkgjs/parseargs/LICENSE delete mode 100644 node_modules/@pkgjs/parseargs/README.md delete mode 100644 node_modules/@pkgjs/parseargs/examples/is-default-value.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/negate.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/no-repeated-options.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/ordered-options.mjs delete mode 100644 node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js delete mode 100644 node_modules/@pkgjs/parseargs/index.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/errors.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/primordials.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/util.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/validators.js delete mode 100644 node_modules/@pkgjs/parseargs/package.json delete mode 100644 node_modules/@pkgjs/parseargs/utils.js delete mode 100644 node_modules/@types/debug/LICENSE delete mode 100644 node_modules/@types/debug/README.md delete mode 100644 node_modules/@types/debug/index.d.ts delete mode 100644 node_modules/@types/debug/package.json delete mode 100644 node_modules/@types/katex/LICENSE delete mode 100644 node_modules/@types/katex/README.md delete mode 100644 node_modules/@types/katex/contrib/auto-render.d.ts delete mode 100644 node_modules/@types/katex/index.d.ts delete mode 100644 node_modules/@types/katex/package.json delete mode 100644 node_modules/@types/ms/LICENSE delete mode 100644 node_modules/@types/ms/README.md delete mode 100644 node_modules/@types/ms/index.d.ts delete mode 100644 node_modules/@types/ms/package.json delete mode 100644 node_modules/@types/unist/LICENSE delete mode 100644 node_modules/@types/unist/README.md delete mode 100644 node_modules/@types/unist/index.d.ts delete mode 100644 node_modules/@types/unist/package.json delete mode 100644 node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/ansi-regex/index.js delete mode 100644 node_modules/ansi-regex/license delete mode 100644 node_modules/ansi-regex/package.json delete mode 100644 node_modules/ansi-regex/readme.md delete mode 100644 node_modules/ansi-styles/index.d.ts delete mode 100644 node_modules/ansi-styles/index.js delete mode 100644 node_modules/ansi-styles/license delete mode 100644 node_modules/ansi-styles/package.json delete mode 100644 node_modules/ansi-styles/readme.md delete mode 100644 node_modules/argparse/CHANGELOG.md delete mode 100644 node_modules/argparse/LICENSE delete mode 100644 node_modules/argparse/README.md delete mode 100644 node_modules/argparse/argparse.js delete mode 100644 node_modules/argparse/package.json delete mode 100644 node_modules/balanced-match/.github/FUNDING.yml delete mode 100644 node_modules/balanced-match/LICENSE.md delete mode 100644 node_modules/balanced-match/README.md delete mode 100644 node_modules/balanced-match/index.js delete mode 100644 node_modules/balanced-match/package.json delete mode 100644 node_modules/brace-expansion/.github/FUNDING.yml delete mode 100644 node_modules/brace-expansion/LICENSE delete mode 100644 node_modules/brace-expansion/README.md delete mode 100644 node_modules/brace-expansion/index.js delete mode 100644 node_modules/brace-expansion/package.json delete mode 100644 node_modules/character-entities-legacy/index.d.ts delete mode 100644 node_modules/character-entities-legacy/index.js delete mode 100644 node_modules/character-entities-legacy/license delete mode 100644 node_modules/character-entities-legacy/package.json delete mode 100644 node_modules/character-entities-legacy/readme.md delete mode 100644 node_modules/character-entities/index.d.ts delete mode 100644 node_modules/character-entities/index.js delete mode 100644 node_modules/character-entities/license delete mode 100644 node_modules/character-entities/package.json delete mode 100644 node_modules/character-entities/readme.md delete mode 100644 node_modules/character-reference-invalid/index.d.ts delete mode 100644 node_modules/character-reference-invalid/index.js delete mode 100644 node_modules/character-reference-invalid/license delete mode 100644 node_modules/character-reference-invalid/package.json delete mode 100644 node_modules/character-reference-invalid/readme.md delete mode 100644 node_modules/color-convert/CHANGELOG.md delete mode 100644 node_modules/color-convert/LICENSE delete mode 100644 node_modules/color-convert/README.md delete mode 100644 node_modules/color-convert/conversions.js delete mode 100644 node_modules/color-convert/index.js delete mode 100644 node_modules/color-convert/package.json delete mode 100644 node_modules/color-convert/route.js delete mode 100644 node_modules/color-name/LICENSE delete mode 100644 node_modules/color-name/README.md delete mode 100644 node_modules/color-name/index.js delete mode 100644 node_modules/color-name/package.json delete mode 100644 node_modules/commander/LICENSE delete mode 100644 node_modules/commander/Readme.md delete mode 100644 node_modules/commander/esm.mjs delete mode 100644 node_modules/commander/index.js delete mode 100644 node_modules/commander/package-support.json delete mode 100644 node_modules/commander/package.json delete mode 100644 node_modules/commander/typings/esm.d.mts delete mode 100644 node_modules/commander/typings/index.d.ts delete mode 100644 node_modules/cross-spawn/LICENSE delete mode 100644 node_modules/cross-spawn/README.md delete mode 100644 node_modules/cross-spawn/index.js delete mode 100644 node_modules/cross-spawn/package.json delete mode 100644 node_modules/debug/LICENSE delete mode 100644 node_modules/debug/README.md delete mode 100644 node_modules/debug/package.json delete mode 100644 node_modules/debug/src/browser.js delete mode 100644 node_modules/debug/src/common.js delete mode 100644 node_modules/debug/src/index.js delete mode 100644 node_modules/debug/src/node.js delete mode 100644 node_modules/decode-named-character-reference/index.d.ts delete mode 100644 node_modules/decode-named-character-reference/index.dom.d.ts delete mode 100644 node_modules/decode-named-character-reference/index.dom.js delete mode 100644 node_modules/decode-named-character-reference/index.js delete mode 100644 node_modules/decode-named-character-reference/license delete mode 100644 node_modules/decode-named-character-reference/package.json delete mode 100644 node_modules/decode-named-character-reference/readme.md delete mode 100644 node_modules/deep-extend/CHANGELOG.md delete mode 100644 node_modules/deep-extend/LICENSE delete mode 100644 node_modules/deep-extend/README.md delete mode 100644 node_modules/deep-extend/index.js delete mode 100644 node_modules/deep-extend/package.json delete mode 100644 node_modules/dequal/index.d.ts delete mode 100644 node_modules/dequal/license delete mode 100644 node_modules/dequal/lite/index.d.ts delete mode 100644 node_modules/dequal/lite/index.js delete mode 100644 node_modules/dequal/lite/index.min.js delete mode 100644 node_modules/dequal/lite/index.mjs delete mode 100644 node_modules/dequal/package.json delete mode 100644 node_modules/dequal/readme.md delete mode 100644 node_modules/devlop/license delete mode 100644 node_modules/devlop/package.json delete mode 100644 node_modules/devlop/readme.md delete mode 100644 node_modules/eastasianwidth/README.md delete mode 100644 node_modules/eastasianwidth/eastasianwidth.js delete mode 100644 node_modules/eastasianwidth/package.json delete mode 100644 node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 node_modules/emoji-regex/README.md delete mode 100644 node_modules/emoji-regex/RGI_Emoji.d.ts delete mode 100644 node_modules/emoji-regex/RGI_Emoji.js delete mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.d.ts delete mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.js delete mode 100644 node_modules/emoji-regex/es2015/index.d.ts delete mode 100644 node_modules/emoji-regex/es2015/index.js delete mode 100644 node_modules/emoji-regex/es2015/text.d.ts delete mode 100644 node_modules/emoji-regex/es2015/text.js delete mode 100644 node_modules/emoji-regex/index.d.ts delete mode 100644 node_modules/emoji-regex/index.js delete mode 100644 node_modules/emoji-regex/package.json delete mode 100644 node_modules/emoji-regex/text.d.ts delete mode 100644 node_modules/emoji-regex/text.js delete mode 100644 node_modules/entities/LICENSE delete mode 100644 node_modules/entities/package.json delete mode 100644 node_modules/entities/readme.md delete mode 100644 node_modules/foreground-child/LICENSE delete mode 100644 node_modules/foreground-child/README.md delete mode 100644 node_modules/foreground-child/package.json delete mode 100644 node_modules/glob/LICENSE delete mode 100644 node_modules/glob/README.md delete mode 100644 node_modules/glob/package.json delete mode 100644 node_modules/ignore/LICENSE-MIT delete mode 100644 node_modules/ignore/README.md delete mode 100644 node_modules/ignore/index.d.ts delete mode 100644 node_modules/ignore/index.js delete mode 100644 node_modules/ignore/legacy.js delete mode 100644 node_modules/ignore/package.json delete mode 100644 node_modules/ini/LICENSE delete mode 100644 node_modules/ini/README.md delete mode 100644 node_modules/ini/package.json delete mode 100644 node_modules/is-alphabetical/index.d.ts delete mode 100644 node_modules/is-alphabetical/index.js delete mode 100644 node_modules/is-alphabetical/license delete mode 100644 node_modules/is-alphabetical/package.json delete mode 100644 node_modules/is-alphabetical/readme.md delete mode 100644 node_modules/is-alphanumerical/index.d.ts delete mode 100644 node_modules/is-alphanumerical/index.js delete mode 100644 node_modules/is-alphanumerical/license delete mode 100644 node_modules/is-alphanumerical/package.json delete mode 100644 node_modules/is-alphanumerical/readme.md delete mode 100644 node_modules/is-decimal/index.d.ts delete mode 100644 node_modules/is-decimal/index.js delete mode 100644 node_modules/is-decimal/license delete mode 100644 node_modules/is-decimal/package.json delete mode 100644 node_modules/is-decimal/readme.md delete mode 100644 node_modules/is-fullwidth-code-point/index.d.ts delete mode 100644 node_modules/is-fullwidth-code-point/index.js delete mode 100644 node_modules/is-fullwidth-code-point/license delete mode 100644 node_modules/is-fullwidth-code-point/package.json delete mode 100644 node_modules/is-fullwidth-code-point/readme.md delete mode 100644 node_modules/is-hexadecimal/index.d.ts delete mode 100644 node_modules/is-hexadecimal/index.js delete mode 100644 node_modules/is-hexadecimal/license delete mode 100644 node_modules/is-hexadecimal/package.json delete mode 100644 node_modules/is-hexadecimal/readme.md delete mode 100644 node_modules/isexe/.npmignore delete mode 100644 node_modules/isexe/LICENSE delete mode 100644 node_modules/isexe/README.md delete mode 100644 node_modules/isexe/index.js delete mode 100644 node_modules/isexe/mode.js delete mode 100644 node_modules/isexe/package.json delete mode 100644 node_modules/isexe/test/basic.js delete mode 100644 node_modules/isexe/windows.js delete mode 100644 node_modules/jackspeak/LICENSE.md delete mode 100644 node_modules/jackspeak/README.md delete mode 100644 node_modules/jackspeak/package.json delete mode 100644 node_modules/js-yaml/CHANGELOG.md delete mode 100644 node_modules/js-yaml/LICENSE delete mode 100644 node_modules/js-yaml/README.md delete mode 100644 node_modules/js-yaml/index.js delete mode 100644 node_modules/js-yaml/package.json delete mode 100644 node_modules/jsonc-parser/CHANGELOG.md delete mode 100644 node_modules/jsonc-parser/LICENSE.md delete mode 100644 node_modules/jsonc-parser/README.md delete mode 100644 node_modules/jsonc-parser/SECURITY.md delete mode 100644 node_modules/jsonc-parser/package.json delete mode 100644 node_modules/jsonpointer/LICENSE.md delete mode 100644 node_modules/jsonpointer/README.md delete mode 100644 node_modules/jsonpointer/jsonpointer.d.ts delete mode 100644 node_modules/jsonpointer/jsonpointer.js delete mode 100644 node_modules/jsonpointer/package.json delete mode 100644 node_modules/katex/LICENSE delete mode 100644 node_modules/katex/README.md delete mode 100755 node_modules/katex/cli.js delete mode 100644 node_modules/katex/contrib/auto-render/README.md delete mode 100644 node_modules/katex/contrib/auto-render/auto-render.js delete mode 100644 node_modules/katex/contrib/auto-render/index.html delete mode 100644 node_modules/katex/contrib/auto-render/splitAtDelimiters.js delete mode 100644 node_modules/katex/contrib/auto-render/test/auto-render-spec.js delete mode 100644 node_modules/katex/contrib/copy-tex/README.md delete mode 100644 node_modules/katex/contrib/copy-tex/copy-tex.js delete mode 100644 node_modules/katex/contrib/copy-tex/index.html delete mode 100644 node_modules/katex/contrib/copy-tex/katex2tex.js delete mode 100644 node_modules/katex/contrib/mathtex-script-type/README.md delete mode 100644 node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js delete mode 100644 node_modules/katex/contrib/mhchem/README.md delete mode 100644 node_modules/katex/contrib/mhchem/mhchem.js delete mode 100644 node_modules/katex/contrib/render-a11y-string/render-a11y-string.js delete mode 100644 node_modules/katex/contrib/render-a11y-string/test/render-a11y-string-spec.js delete mode 100644 node_modules/katex/katex.js delete mode 100644 node_modules/katex/node_modules/commander/LICENSE delete mode 100644 node_modules/katex/node_modules/commander/Readme.md delete mode 100644 node_modules/katex/node_modules/commander/esm.mjs delete mode 100644 node_modules/katex/node_modules/commander/index.js delete mode 100644 node_modules/katex/node_modules/commander/package-support.json delete mode 100644 node_modules/katex/node_modules/commander/package.json delete mode 100644 node_modules/katex/node_modules/commander/typings/index.d.ts delete mode 100644 node_modules/katex/package.json delete mode 100644 node_modules/katex/src/Lexer.js delete mode 100644 node_modules/katex/src/MacroExpander.js delete mode 100644 node_modules/katex/src/Namespace.js delete mode 100644 node_modules/katex/src/Options.js delete mode 100644 node_modules/katex/src/ParseError.js delete mode 100644 node_modules/katex/src/Parser.js delete mode 100644 node_modules/katex/src/Settings.js delete mode 100644 node_modules/katex/src/SourceLocation.js delete mode 100644 node_modules/katex/src/Style.js delete mode 100644 node_modules/katex/src/Token.js delete mode 100644 node_modules/katex/src/buildCommon.js delete mode 100644 node_modules/katex/src/buildHTML.js delete mode 100644 node_modules/katex/src/buildMathML.js delete mode 100644 node_modules/katex/src/buildTree.js delete mode 100644 node_modules/katex/src/defineEnvironment.js delete mode 100644 node_modules/katex/src/defineFunction.js delete mode 100644 node_modules/katex/src/defineMacro.js delete mode 100644 node_modules/katex/src/delimiter.js delete mode 100644 node_modules/katex/src/domTree.js delete mode 100644 node_modules/katex/src/environments.js delete mode 100644 node_modules/katex/src/environments/array.js delete mode 100644 node_modules/katex/src/environments/cd.js delete mode 100644 node_modules/katex/src/fontMetrics.js delete mode 100644 node_modules/katex/src/fontMetricsData.js delete mode 100644 node_modules/katex/src/fonts/Makefile delete mode 100644 node_modules/katex/src/fonts/default.cfg delete mode 100755 node_modules/katex/src/fonts/generate_fonts.py delete mode 100755 node_modules/katex/src/fonts/makeBlacker delete mode 100755 node_modules/katex/src/fonts/makeFF delete mode 100644 node_modules/katex/src/fonts/xbbold.mf delete mode 100644 node_modules/katex/src/functions.js delete mode 100644 node_modules/katex/src/functions/accent.js delete mode 100644 node_modules/katex/src/functions/accentunder.js delete mode 100644 node_modules/katex/src/functions/arrow.js delete mode 100644 node_modules/katex/src/functions/char.js delete mode 100644 node_modules/katex/src/functions/color.js delete mode 100644 node_modules/katex/src/functions/cr.js delete mode 100644 node_modules/katex/src/functions/def.js delete mode 100644 node_modules/katex/src/functions/delimsizing.js delete mode 100644 node_modules/katex/src/functions/enclose.js delete mode 100644 node_modules/katex/src/functions/environment.js delete mode 100644 node_modules/katex/src/functions/font.js delete mode 100644 node_modules/katex/src/functions/genfrac.js delete mode 100644 node_modules/katex/src/functions/hbox.js delete mode 100644 node_modules/katex/src/functions/horizBrace.js delete mode 100644 node_modules/katex/src/functions/href.js delete mode 100644 node_modules/katex/src/functions/html.js delete mode 100644 node_modules/katex/src/functions/htmlmathml.js delete mode 100644 node_modules/katex/src/functions/includegraphics.js delete mode 100644 node_modules/katex/src/functions/kern.js delete mode 100644 node_modules/katex/src/functions/lap.js delete mode 100644 node_modules/katex/src/functions/math.js delete mode 100644 node_modules/katex/src/functions/mathchoice.js delete mode 100644 node_modules/katex/src/functions/mclass.js delete mode 100644 node_modules/katex/src/functions/op.js delete mode 100644 node_modules/katex/src/functions/operatorname.js delete mode 100644 node_modules/katex/src/functions/ordgroup.js delete mode 100644 node_modules/katex/src/functions/overline.js delete mode 100644 node_modules/katex/src/functions/phantom.js delete mode 100644 node_modules/katex/src/functions/pmb.js delete mode 100644 node_modules/katex/src/functions/raisebox.js delete mode 100644 node_modules/katex/src/functions/relax.js delete mode 100644 node_modules/katex/src/functions/rule.js delete mode 100644 node_modules/katex/src/functions/sizing.js delete mode 100644 node_modules/katex/src/functions/smash.js delete mode 100644 node_modules/katex/src/functions/sqrt.js delete mode 100644 node_modules/katex/src/functions/styling.js delete mode 100644 node_modules/katex/src/functions/supsub.js delete mode 100644 node_modules/katex/src/functions/symbolsOp.js delete mode 100644 node_modules/katex/src/functions/symbolsOrd.js delete mode 100644 node_modules/katex/src/functions/symbolsSpacing.js delete mode 100644 node_modules/katex/src/functions/tag.js delete mode 100644 node_modules/katex/src/functions/text.js delete mode 100644 node_modules/katex/src/functions/underline.js delete mode 100644 node_modules/katex/src/functions/utils/assembleSupSub.js delete mode 100644 node_modules/katex/src/functions/vcenter.js delete mode 100644 node_modules/katex/src/functions/verb.js delete mode 100644 node_modules/katex/src/macros.js delete mode 100644 node_modules/katex/src/mathMLTree.js delete mode 100644 node_modules/katex/src/metrics/README.md delete mode 100755 node_modules/katex/src/metrics/extract_tfms.py delete mode 100755 node_modules/katex/src/metrics/extract_ttfs.py delete mode 100755 node_modules/katex/src/metrics/format_json.py delete mode 100755 node_modules/katex/src/metrics/mapping.pl delete mode 100644 node_modules/katex/src/metrics/parse_tfm.py delete mode 100644 node_modules/katex/src/parseNode.js delete mode 100644 node_modules/katex/src/parseTree.js delete mode 100644 node_modules/katex/src/spacingData.js delete mode 100644 node_modules/katex/src/stretchy.js delete mode 100644 node_modules/katex/src/styles/fonts.scss delete mode 100644 node_modules/katex/src/styles/katex.scss delete mode 100644 node_modules/katex/src/svgGeometry.js delete mode 100644 node_modules/katex/src/symbols.js delete mode 100644 node_modules/katex/src/tree.js delete mode 100644 node_modules/katex/src/types.js delete mode 100644 node_modules/katex/src/unicodeAccents.js delete mode 100644 node_modules/katex/src/unicodeScripts.js delete mode 100644 node_modules/katex/src/unicodeSupOrSub.js delete mode 100644 node_modules/katex/src/unicodeSymbols.js delete mode 100644 node_modules/katex/src/units.js delete mode 100644 node_modules/katex/src/utils.js delete mode 100644 node_modules/katex/src/wide-character.js delete mode 100644 node_modules/katex/types/katex.d.ts delete mode 100644 node_modules/linkify-it/LICENSE delete mode 100644 node_modules/linkify-it/README.md delete mode 100644 node_modules/linkify-it/index.mjs delete mode 100644 node_modules/linkify-it/package.json delete mode 100644 node_modules/lru-cache/LICENSE delete mode 100644 node_modules/lru-cache/README.md delete mode 100644 node_modules/lru-cache/package.json delete mode 100644 node_modules/markdown-it/LICENSE delete mode 100644 node_modules/markdown-it/README.md delete mode 100644 node_modules/markdown-it/index.mjs delete mode 100644 node_modules/markdown-it/package.json delete mode 100644 node_modules/markdownlint-cli/LICENSE delete mode 100644 node_modules/markdownlint-cli/README.md delete mode 100755 node_modules/markdownlint-cli/markdownlint.js delete mode 100644 node_modules/markdownlint-cli/package.json delete mode 100644 node_modules/markdownlint/CHANGELOG.md delete mode 100644 node_modules/markdownlint/CONTRIBUTING.md delete mode 100644 node_modules/markdownlint/LICENSE delete mode 100644 node_modules/markdownlint/README.md delete mode 100644 node_modules/markdownlint/doc/CustomRules.md delete mode 100644 node_modules/markdownlint/doc/Prettier.md delete mode 100644 node_modules/markdownlint/doc/ReleaseProcess.md delete mode 100644 node_modules/markdownlint/doc/Rules.md delete mode 100644 node_modules/markdownlint/doc/md001.md delete mode 100644 node_modules/markdownlint/doc/md003.md delete mode 100644 node_modules/markdownlint/doc/md004.md delete mode 100644 node_modules/markdownlint/doc/md005.md delete mode 100644 node_modules/markdownlint/doc/md007.md delete mode 100644 node_modules/markdownlint/doc/md009.md delete mode 100644 node_modules/markdownlint/doc/md010.md delete mode 100644 node_modules/markdownlint/doc/md011.md delete mode 100644 node_modules/markdownlint/doc/md012.md delete mode 100644 node_modules/markdownlint/doc/md013.md delete mode 100644 node_modules/markdownlint/doc/md014.md delete mode 100644 node_modules/markdownlint/doc/md018.md delete mode 100644 node_modules/markdownlint/doc/md019.md delete mode 100644 node_modules/markdownlint/doc/md020.md delete mode 100644 node_modules/markdownlint/doc/md021.md delete mode 100644 node_modules/markdownlint/doc/md022.md delete mode 100644 node_modules/markdownlint/doc/md023.md delete mode 100644 node_modules/markdownlint/doc/md024.md delete mode 100644 node_modules/markdownlint/doc/md025.md delete mode 100644 node_modules/markdownlint/doc/md026.md delete mode 100644 node_modules/markdownlint/doc/md027.md delete mode 100644 node_modules/markdownlint/doc/md028.md delete mode 100644 node_modules/markdownlint/doc/md029.md delete mode 100644 node_modules/markdownlint/doc/md030.md delete mode 100644 node_modules/markdownlint/doc/md031.md delete mode 100644 node_modules/markdownlint/doc/md032.md delete mode 100644 node_modules/markdownlint/doc/md033.md delete mode 100644 node_modules/markdownlint/doc/md034.md delete mode 100644 node_modules/markdownlint/doc/md035.md delete mode 100644 node_modules/markdownlint/doc/md036.md delete mode 100644 node_modules/markdownlint/doc/md037.md delete mode 100644 node_modules/markdownlint/doc/md038.md delete mode 100644 node_modules/markdownlint/doc/md039.md delete mode 100644 node_modules/markdownlint/doc/md040.md delete mode 100644 node_modules/markdownlint/doc/md041.md delete mode 100644 node_modules/markdownlint/doc/md042.md delete mode 100644 node_modules/markdownlint/doc/md043.md delete mode 100644 node_modules/markdownlint/doc/md044.md delete mode 100644 node_modules/markdownlint/doc/md045.md delete mode 100644 node_modules/markdownlint/doc/md046.md delete mode 100644 node_modules/markdownlint/doc/md047.md delete mode 100644 node_modules/markdownlint/doc/md048.md delete mode 100644 node_modules/markdownlint/doc/md049.md delete mode 100644 node_modules/markdownlint/doc/md050.md delete mode 100644 node_modules/markdownlint/doc/md051.md delete mode 100644 node_modules/markdownlint/doc/md052.md delete mode 100644 node_modules/markdownlint/doc/md053.md delete mode 100644 node_modules/markdownlint/doc/md054.md delete mode 100644 node_modules/markdownlint/doc/md055.md delete mode 100644 node_modules/markdownlint/doc/md056.md delete mode 100644 node_modules/markdownlint/doc/md058.md delete mode 100644 node_modules/markdownlint/helpers/LICENSE delete mode 100644 node_modules/markdownlint/helpers/README.md delete mode 100644 node_modules/markdownlint/helpers/helpers.cjs delete mode 100644 node_modules/markdownlint/helpers/micromark-helpers.cjs delete mode 100644 node_modules/markdownlint/helpers/package.json delete mode 100644 node_modules/markdownlint/helpers/shared.cjs delete mode 100644 node_modules/markdownlint/package.json delete mode 100644 node_modules/markdownlint/schema/.markdownlint.jsonc delete mode 100644 node_modules/markdownlint/schema/.markdownlint.yaml delete mode 100644 node_modules/markdownlint/schema/ValidatingConfiguration.md delete mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema-strict.json delete mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema.json delete mode 100644 node_modules/markdownlint/style/all.json delete mode 100644 node_modules/markdownlint/style/cirosantilli.json delete mode 100644 node_modules/markdownlint/style/prettier.json delete mode 100644 node_modules/markdownlint/style/relaxed.json delete mode 100644 node_modules/mdurl/LICENSE delete mode 100644 node_modules/mdurl/README.md delete mode 100644 node_modules/mdurl/index.mjs delete mode 100644 node_modules/mdurl/package.json delete mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts delete mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts.map delete mode 100644 node_modules/micromark-core-commonmark/dev/index.js delete mode 100644 node_modules/micromark-core-commonmark/index.d.ts delete mode 100644 node_modules/micromark-core-commonmark/index.d.ts.map delete mode 100644 node_modules/micromark-core-commonmark/index.js delete mode 100644 node_modules/micromark-core-commonmark/license delete mode 100644 node_modules/micromark-core-commonmark/package.json delete mode 100644 node_modules/micromark-core-commonmark/readme.md delete mode 100644 node_modules/micromark-extension-directive/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-directive/dev/index.js delete mode 100644 node_modules/micromark-extension-directive/index.d.ts delete mode 100644 node_modules/micromark-extension-directive/index.js delete mode 100644 node_modules/micromark-extension-directive/license delete mode 100644 node_modules/micromark-extension-directive/package.json delete mode 100644 node_modules/micromark-extension-directive/readme.md delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.js delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.js delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/license delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/package.json delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/readme.md delete mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.js delete mode 100644 node_modules/micromark-extension-gfm-footnote/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-footnote/index.js delete mode 100644 node_modules/micromark-extension-gfm-footnote/license delete mode 100644 node_modules/micromark-extension-gfm-footnote/package.json delete mode 100644 node_modules/micromark-extension-gfm-footnote/readme.md delete mode 100644 node_modules/micromark-extension-gfm-table/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-table/dev/index.js delete mode 100644 node_modules/micromark-extension-gfm-table/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-table/index.js delete mode 100644 node_modules/micromark-extension-gfm-table/license delete mode 100644 node_modules/micromark-extension-gfm-table/package.json delete mode 100644 node_modules/micromark-extension-gfm-table/readme.md delete mode 100644 node_modules/micromark-extension-math/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-math/dev/index.js delete mode 100644 node_modules/micromark-extension-math/index.d.ts delete mode 100644 node_modules/micromark-extension-math/index.js delete mode 100644 node_modules/micromark-extension-math/license delete mode 100644 node_modules/micromark-extension-math/package.json delete mode 100644 node_modules/micromark-extension-math/readme.md delete mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-destination/dev/index.js delete mode 100644 node_modules/micromark-factory-destination/index.d.ts delete mode 100644 node_modules/micromark-factory-destination/index.d.ts.map delete mode 100644 node_modules/micromark-factory-destination/index.js delete mode 100644 node_modules/micromark-factory-destination/license delete mode 100644 node_modules/micromark-factory-destination/package.json delete mode 100644 node_modules/micromark-factory-destination/readme.md delete mode 100644 node_modules/micromark-factory-label/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-label/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-label/dev/index.js delete mode 100644 node_modules/micromark-factory-label/index.d.ts delete mode 100644 node_modules/micromark-factory-label/index.d.ts.map delete mode 100644 node_modules/micromark-factory-label/index.js delete mode 100644 node_modules/micromark-factory-label/license delete mode 100644 node_modules/micromark-factory-label/package.json delete mode 100644 node_modules/micromark-factory-label/readme.md delete mode 100644 node_modules/micromark-factory-space/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-space/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-space/dev/index.js delete mode 100644 node_modules/micromark-factory-space/index.d.ts delete mode 100644 node_modules/micromark-factory-space/index.d.ts.map delete mode 100644 node_modules/micromark-factory-space/index.js delete mode 100644 node_modules/micromark-factory-space/license delete mode 100644 node_modules/micromark-factory-space/package.json delete mode 100644 node_modules/micromark-factory-space/readme.md delete mode 100644 node_modules/micromark-factory-title/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-title/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-title/dev/index.js delete mode 100644 node_modules/micromark-factory-title/index.d.ts delete mode 100644 node_modules/micromark-factory-title/index.d.ts.map delete mode 100644 node_modules/micromark-factory-title/index.js delete mode 100644 node_modules/micromark-factory-title/license delete mode 100644 node_modules/micromark-factory-title/package.json delete mode 100644 node_modules/micromark-factory-title/readme.md delete mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-whitespace/dev/index.js delete mode 100644 node_modules/micromark-factory-whitespace/index.d.ts delete mode 100644 node_modules/micromark-factory-whitespace/index.d.ts.map delete mode 100644 node_modules/micromark-factory-whitespace/index.js delete mode 100644 node_modules/micromark-factory-whitespace/license delete mode 100644 node_modules/micromark-factory-whitespace/package.json delete mode 100644 node_modules/micromark-factory-whitespace/readme.md delete mode 100644 node_modules/micromark-util-character/dev/index.d.ts delete mode 100644 node_modules/micromark-util-character/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-character/dev/index.js delete mode 100644 node_modules/micromark-util-character/index.d.ts delete mode 100644 node_modules/micromark-util-character/index.d.ts.map delete mode 100644 node_modules/micromark-util-character/index.js delete mode 100644 node_modules/micromark-util-character/license delete mode 100644 node_modules/micromark-util-character/package.json delete mode 100644 node_modules/micromark-util-character/readme.md delete mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts delete mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-chunked/dev/index.js delete mode 100644 node_modules/micromark-util-chunked/index.d.ts delete mode 100644 node_modules/micromark-util-chunked/index.d.ts.map delete mode 100644 node_modules/micromark-util-chunked/index.js delete mode 100644 node_modules/micromark-util-chunked/license delete mode 100644 node_modules/micromark-util-chunked/package.json delete mode 100644 node_modules/micromark-util-chunked/readme.md delete mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts delete mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-classify-character/dev/index.js delete mode 100644 node_modules/micromark-util-classify-character/index.d.ts delete mode 100644 node_modules/micromark-util-classify-character/index.d.ts.map delete mode 100644 node_modules/micromark-util-classify-character/index.js delete mode 100644 node_modules/micromark-util-classify-character/license delete mode 100644 node_modules/micromark-util-classify-character/package.json delete mode 100644 node_modules/micromark-util-classify-character/readme.md delete mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts delete mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts.map delete mode 100644 node_modules/micromark-util-combine-extensions/index.js delete mode 100644 node_modules/micromark-util-combine-extensions/license delete mode 100644 node_modules/micromark-util-combine-extensions/package.json delete mode 100644 node_modules/micromark-util-combine-extensions/readme.md delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.js delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.js delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/license delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/package.json delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/readme.md delete mode 100644 node_modules/micromark-util-encode/index.d.ts delete mode 100644 node_modules/micromark-util-encode/index.d.ts.map delete mode 100644 node_modules/micromark-util-encode/index.js delete mode 100644 node_modules/micromark-util-encode/license delete mode 100644 node_modules/micromark-util-encode/package.json delete mode 100644 node_modules/micromark-util-encode/readme.md delete mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts delete mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts.map delete mode 100644 node_modules/micromark-util-html-tag-name/index.js delete mode 100644 node_modules/micromark-util-html-tag-name/license delete mode 100644 node_modules/micromark-util-html-tag-name/package.json delete mode 100644 node_modules/micromark-util-html-tag-name/readme.md delete mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts delete mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.js delete mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts delete mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts.map delete mode 100644 node_modules/micromark-util-normalize-identifier/index.js delete mode 100644 node_modules/micromark-util-normalize-identifier/license delete mode 100644 node_modules/micromark-util-normalize-identifier/package.json delete mode 100644 node_modules/micromark-util-normalize-identifier/readme.md delete mode 100644 node_modules/micromark-util-resolve-all/index.d.ts delete mode 100644 node_modules/micromark-util-resolve-all/index.d.ts.map delete mode 100644 node_modules/micromark-util-resolve-all/index.js delete mode 100644 node_modules/micromark-util-resolve-all/license delete mode 100644 node_modules/micromark-util-resolve-all/package.json delete mode 100644 node_modules/micromark-util-resolve-all/readme.md delete mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts delete mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.js delete mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts delete mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts.map delete mode 100644 node_modules/micromark-util-sanitize-uri/index.js delete mode 100644 node_modules/micromark-util-sanitize-uri/license delete mode 100644 node_modules/micromark-util-sanitize-uri/package.json delete mode 100644 node_modules/micromark-util-sanitize-uri/readme.md delete mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts delete mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-subtokenize/dev/index.js delete mode 100644 node_modules/micromark-util-subtokenize/index.d.ts delete mode 100644 node_modules/micromark-util-subtokenize/index.d.ts.map delete mode 100644 node_modules/micromark-util-subtokenize/index.js delete mode 100644 node_modules/micromark-util-subtokenize/license delete mode 100644 node_modules/micromark-util-subtokenize/package.json delete mode 100644 node_modules/micromark-util-subtokenize/readme.md delete mode 100644 node_modules/micromark-util-symbol/license delete mode 100644 node_modules/micromark-util-symbol/package.json delete mode 100644 node_modules/micromark-util-symbol/readme.md delete mode 100644 node_modules/micromark-util-types/index.d.ts delete mode 100644 node_modules/micromark-util-types/index.js delete mode 100644 node_modules/micromark-util-types/license delete mode 100644 node_modules/micromark-util-types/package.json delete mode 100644 node_modules/micromark-util-types/readme.md delete mode 100644 node_modules/micromark/dev/index.d.ts delete mode 100644 node_modules/micromark/dev/index.d.ts.map delete mode 100644 node_modules/micromark/dev/index.js delete mode 100644 node_modules/micromark/dev/stream.d.ts delete mode 100644 node_modules/micromark/dev/stream.d.ts.map delete mode 100644 node_modules/micromark/dev/stream.js delete mode 100644 node_modules/micromark/index.d.ts delete mode 100644 node_modules/micromark/index.d.ts.map delete mode 100644 node_modules/micromark/index.js delete mode 100644 node_modules/micromark/license delete mode 100644 node_modules/micromark/package.json delete mode 100644 node_modules/micromark/readme.md delete mode 100644 node_modules/micromark/stream.d.ts delete mode 100644 node_modules/micromark/stream.d.ts.map delete mode 100644 node_modules/micromark/stream.js delete mode 100644 node_modules/minimatch/LICENSE delete mode 100644 node_modules/minimatch/README.md delete mode 100644 node_modules/minimatch/package.json delete mode 100644 node_modules/minimist/.eslintrc delete mode 100644 node_modules/minimist/.github/FUNDING.yml delete mode 100644 node_modules/minimist/.nycrc delete mode 100644 node_modules/minimist/CHANGELOG.md delete mode 100644 node_modules/minimist/LICENSE delete mode 100644 node_modules/minimist/README.md delete mode 100644 node_modules/minimist/example/parse.js delete mode 100644 node_modules/minimist/index.js delete mode 100644 node_modules/minimist/package.json delete mode 100644 node_modules/minimist/test/all_bool.js delete mode 100644 node_modules/minimist/test/bool.js delete mode 100644 node_modules/minimist/test/dash.js delete mode 100644 node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/minimist/test/dotted.js delete mode 100644 node_modules/minimist/test/kv_short.js delete mode 100644 node_modules/minimist/test/long.js delete mode 100644 node_modules/minimist/test/num.js delete mode 100644 node_modules/minimist/test/parse.js delete mode 100644 node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/minimist/test/proto.js delete mode 100644 node_modules/minimist/test/short.js delete mode 100644 node_modules/minimist/test/stop_early.js delete mode 100644 node_modules/minimist/test/unknown.js delete mode 100644 node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/minipass/LICENSE delete mode 100644 node_modules/minipass/README.md delete mode 100644 node_modules/minipass/package.json delete mode 100644 node_modules/ms/index.js delete mode 100644 node_modules/ms/license.md delete mode 100644 node_modules/ms/package.json delete mode 100644 node_modules/ms/readme.md delete mode 100644 node_modules/package-json-from-dist/LICENSE.md delete mode 100644 node_modules/package-json-from-dist/README.md delete mode 100644 node_modules/package-json-from-dist/package.json delete mode 100644 node_modules/parse-entities/index.d.ts delete mode 100644 node_modules/parse-entities/index.js delete mode 100644 node_modules/parse-entities/license delete mode 100644 node_modules/parse-entities/package.json delete mode 100644 node_modules/parse-entities/readme.md delete mode 100644 node_modules/path-key/index.d.ts delete mode 100644 node_modules/path-key/index.js delete mode 100644 node_modules/path-key/license delete mode 100644 node_modules/path-key/package.json delete mode 100644 node_modules/path-key/readme.md delete mode 100644 node_modules/path-scurry/LICENSE.md delete mode 100644 node_modules/path-scurry/README.md delete mode 100644 node_modules/path-scurry/package.json delete mode 100644 node_modules/punycode.js/LICENSE-MIT.txt delete mode 100644 node_modules/punycode.js/README.md delete mode 100644 node_modules/punycode.js/package.json delete mode 100644 node_modules/punycode.js/punycode.es6.js delete mode 100644 node_modules/punycode.js/punycode.js delete mode 100644 node_modules/run-con/.circleci/config.yml delete mode 100644 node_modules/run-con/.github/FUNDING.yml delete mode 100644 node_modules/run-con/.github/dependabot.yml delete mode 100644 node_modules/run-con/.github/workflows/coverage.yml delete mode 100644 node_modules/run-con/.github/workflows/dependabot.yml delete mode 100644 node_modules/run-con/.github/workflows/issuehunt.yml delete mode 100644 node_modules/run-con/LICENSE.APACHE2 delete mode 100644 node_modules/run-con/LICENSE.BSD delete mode 100644 node_modules/run-con/LICENSE.MIT delete mode 100644 node_modules/run-con/README.md delete mode 100644 node_modules/run-con/browser.js delete mode 100755 node_modules/run-con/cli.js delete mode 100644 node_modules/run-con/index.js delete mode 100644 node_modules/run-con/package.json delete mode 100644 node_modules/run-con/renovate.json delete mode 100644 node_modules/shebang-command/index.js delete mode 100644 node_modules/shebang-command/license delete mode 100644 node_modules/shebang-command/package.json delete mode 100644 node_modules/shebang-command/readme.md delete mode 100644 node_modules/shebang-regex/index.d.ts delete mode 100644 node_modules/shebang-regex/index.js delete mode 100644 node_modules/shebang-regex/license delete mode 100644 node_modules/shebang-regex/package.json delete mode 100644 node_modules/shebang-regex/readme.md delete mode 100644 node_modules/signal-exit/LICENSE.txt delete mode 100644 node_modules/signal-exit/README.md delete mode 100644 node_modules/signal-exit/package.json delete mode 100644 node_modules/smol-toml/LICENSE delete mode 100644 node_modules/smol-toml/README.md delete mode 100644 node_modules/smol-toml/package.json delete mode 100644 node_modules/string-width-cjs/index.d.ts delete mode 100644 node_modules/string-width-cjs/index.js delete mode 100644 node_modules/string-width-cjs/license delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/license delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/package.json delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/README.md delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/package.json delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/text.js delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/license delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/package.json delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/string-width-cjs/package.json delete mode 100644 node_modules/string-width-cjs/readme.md delete mode 100644 node_modules/string-width/index.d.ts delete mode 100644 node_modules/string-width/index.js delete mode 100644 node_modules/string-width/license delete mode 100644 node_modules/string-width/package.json delete mode 100644 node_modules/string-width/readme.md delete mode 100644 node_modules/strip-ansi-cjs/index.d.ts delete mode 100644 node_modules/strip-ansi-cjs/index.js delete mode 100644 node_modules/strip-ansi-cjs/license delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/license delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/strip-ansi-cjs/package.json delete mode 100644 node_modules/strip-ansi-cjs/readme.md delete mode 100644 node_modules/strip-ansi/index.d.ts delete mode 100644 node_modules/strip-ansi/index.js delete mode 100644 node_modules/strip-ansi/license delete mode 100644 node_modules/strip-ansi/package.json delete mode 100644 node_modules/strip-ansi/readme.md delete mode 100644 node_modules/strip-json-comments/index.d.ts delete mode 100644 node_modules/strip-json-comments/index.js delete mode 100644 node_modules/strip-json-comments/license delete mode 100644 node_modules/strip-json-comments/package.json delete mode 100644 node_modules/strip-json-comments/readme.md delete mode 100644 node_modules/uc.micro/LICENSE.txt delete mode 100644 node_modules/uc.micro/README.md delete mode 100644 node_modules/uc.micro/categories/Cc/regex.mjs delete mode 100644 node_modules/uc.micro/categories/Cf/regex.mjs delete mode 100644 node_modules/uc.micro/categories/P/regex.mjs delete mode 100644 node_modules/uc.micro/categories/S/regex.mjs delete mode 100644 node_modules/uc.micro/categories/Z/regex.mjs delete mode 100644 node_modules/uc.micro/index.mjs delete mode 100644 node_modules/uc.micro/package.json delete mode 100644 node_modules/uc.micro/properties/Any/regex.mjs delete mode 100644 node_modules/which/CHANGELOG.md delete mode 100644 node_modules/which/LICENSE delete mode 100644 node_modules/which/README.md delete mode 100644 node_modules/which/package.json delete mode 100644 node_modules/which/which.js delete mode 100755 node_modules/wrap-ansi-cjs/index.js delete mode 100644 node_modules/wrap-ansi-cjs/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/package.json delete mode 100644 node_modules/wrap-ansi-cjs/readme.md delete mode 100644 node_modules/wrap-ansi/index.d.ts delete mode 100755 node_modules/wrap-ansi/index.js delete mode 100644 node_modules/wrap-ansi/license delete mode 100644 node_modules/wrap-ansi/package.json delete mode 100644 node_modules/wrap-ansi/readme.md diff --git a/node_modules/.bin/glob b/node_modules/.bin/glob deleted file mode 120000 index 85c9c1db30..0000000000 --- a/node_modules/.bin/glob +++ /dev/null @@ -1 +0,0 @@ -../glob/dist/esm/bin.mjs \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml deleted file mode 120000 index 9dbd010d47..0000000000 --- a/node_modules/.bin/js-yaml +++ /dev/null @@ -1 +0,0 @@ -../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/katex b/node_modules/.bin/katex deleted file mode 120000 index 891ac1324e..0000000000 --- a/node_modules/.bin/katex +++ /dev/null @@ -1 +0,0 @@ -../katex/cli.js \ No newline at end of file diff --git a/node_modules/.bin/markdown-it b/node_modules/.bin/markdown-it deleted file mode 120000 index 8a641084ea..0000000000 --- a/node_modules/.bin/markdown-it +++ /dev/null @@ -1 +0,0 @@ -../markdown-it/bin/markdown-it.mjs \ No newline at end of file diff --git a/node_modules/.bin/markdownlint b/node_modules/.bin/markdownlint deleted file mode 120000 index f2b1093a66..0000000000 --- a/node_modules/.bin/markdownlint +++ /dev/null @@ -1 +0,0 @@ -../markdownlint-cli/markdownlint.js \ No newline at end of file diff --git a/node_modules/.bin/node-which b/node_modules/.bin/node-which deleted file mode 120000 index 6f8415ec58..0000000000 --- a/node_modules/.bin/node-which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/node-which \ No newline at end of file diff --git a/node_modules/.bin/run-con b/node_modules/.bin/run-con deleted file mode 120000 index 85da8da1e2..0000000000 --- a/node_modules/.bin/run-con +++ /dev/null @@ -1 +0,0 @@ -../run-con/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index acdb98746d..0000000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,1415 +0,0 @@ -{ - "name": "iceberg-python", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/katex": { - "version": "0.16.21", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", - "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdownlint": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", - "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", - "license": "MIT", - "dependencies": { - "markdown-it": "14.1.0", - "micromark": "4.0.1", - "micromark-core-commonmark": "2.0.2", - "micromark-extension-directive": "3.0.2", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.0", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli": { - "version": "0.44.0", - "resolved": "git+ssh://git@github.com/igorshubovych/markdownlint-cli.git#586c3ea3f51230da42bab657c6a32e9e66c364f0", - "license": "MIT", - "dependencies": { - "commander": "~13.1.0", - "glob": "~10.4.5", - "ignore": "~7.0.3", - "js-yaml": "~4.1.0", - "jsonc-parser": "~3.3.1", - "jsonpointer": "~5.0.1", - "markdownlint": "~0.37.4", - "minimatch": "~9.0.5", - "run-con": "~1.3.2", - "smol-toml": "~1.3.1" - }, - "bin": { - "markdownlint": "markdownlint.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "license": "MIT" - }, - "node_modules/micromark": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", - "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", - "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", - "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", - "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/run-con": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", - "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - }, - "bin": { - "run-con": "cli.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/smol-toml": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", - "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - } - } -} diff --git a/node_modules/@isaacs/cliui/LICENSE.txt b/node_modules/@isaacs/cliui/LICENSE.txt deleted file mode 100644 index c7e27478a3..0000000000 --- a/node_modules/@isaacs/cliui/LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/@isaacs/cliui/README.md b/node_modules/@isaacs/cliui/README.md deleted file mode 100644 index 488064267d..0000000000 --- a/node_modules/@isaacs/cliui/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# @isaacs/cliui - -Temporary fork of [cliui](http://npm.im/cliui). - -![ci](https://github.com/yargs/cliui/workflows/ci/badge.svg) -[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui) -[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) -![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/cliui) - -easily create complex multi-column command-line-interfaces. - -## Example - -```js -const ui = require('cliui')() - -ui.div('Usage: $0 [command] [options]') - -ui.div({ - text: 'Options:', - padding: [2, 0, 1, 0] -}) - -ui.div( - { - text: "-f, --file", - width: 20, - padding: [0, 4, 0, 4] - }, - { - text: "the file to load." + - chalk.green("(if this description is long it wraps).") - , - width: 20 - }, - { - text: chalk.red("[required]"), - align: 'right' - } -) - -console.log(ui.toString()) -``` - -## Deno/ESM Support - -As of `v7` `cliui` supports [Deno](https://github.com/denoland/deno) and -[ESM](https://nodejs.org/api/esm.html#esm_ecmascript_modules): - -```typescript -import cliui from "https://deno.land/x/cliui/deno.ts"; - -const ui = cliui({}) - -ui.div('Usage: $0 [command] [options]') - -ui.div({ - text: 'Options:', - padding: [2, 0, 1, 0] -}) - -ui.div({ - text: "-f, --file", - width: 20, - padding: [0, 4, 0, 4] -}) - -console.log(ui.toString()) -``` - - - -## Layout DSL - -cliui exposes a simple layout DSL: - -If you create a single `ui.div`, passing a string rather than an -object: - -* `\n`: characters will be interpreted as new rows. -* `\t`: characters will be interpreted as new columns. -* `\s`: characters will be interpreted as padding. - -**as an example...** - -```js -var ui = require('./')({ - width: 60 -}) - -ui.div( - 'Usage: node ./bin/foo.js\n' + - ' \t provide a regex\n' + - ' \t provide a glob\t [required]' -) - -console.log(ui.toString()) -``` - -**will output:** - -```shell -Usage: node ./bin/foo.js - provide a regex - provide a glob [required] -``` - -## Methods - -```js -cliui = require('cliui') -``` - -### cliui({width: integer}) - -Specify the maximum width of the UI being generated. -If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`. - -### cliui({wrap: boolean}) - -Enable or disable the wrapping of text in a column. - -### cliui.div(column, column, column) - -Create a row with any number of columns, a column -can either be a string, or an object with the following -options: - -* **text:** some text to place in the column. -* **width:** the width of a column. -* **align:** alignment, `right` or `center`. -* **padding:** `[top, right, bottom, left]`. -* **border:** should a border be placed around the div? - -### cliui.span(column, column, column) - -Similar to `div`, except the next row will be appended without -a new line being created. - -### cliui.resetOutput() - -Resets the UI elements of the current cliui instance, maintaining the values -set for `width` and `wrap`. diff --git a/node_modules/@isaacs/cliui/index.mjs b/node_modules/@isaacs/cliui/index.mjs deleted file mode 100644 index 5177519af3..0000000000 --- a/node_modules/@isaacs/cliui/index.mjs +++ /dev/null @@ -1,14 +0,0 @@ -// Bootstrap cliui with ESM dependencies: -import { cliui } from './build/lib/index.js' - -import stringWidth from 'string-width' -import stripAnsi from 'strip-ansi' -import wrap from 'wrap-ansi' - -export default function ui (opts) { - return cliui(opts, { - stringWidth, - stripAnsi, - wrap - }) -} diff --git a/node_modules/@isaacs/cliui/package.json b/node_modules/@isaacs/cliui/package.json deleted file mode 100644 index 7a952532de..0000000000 --- a/node_modules/@isaacs/cliui/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "@isaacs/cliui", - "version": "8.0.2", - "description": "easily create complex multi-column command-line-interfaces", - "main": "build/index.cjs", - "exports": { - ".": [ - { - "import": "./index.mjs", - "require": "./build/index.cjs" - }, - "./build/index.cjs" - ] - }, - "type": "module", - "module": "./index.mjs", - "scripts": { - "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'", - "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'", - "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", - "test": "c8 mocha ./test/*.cjs", - "test:esm": "c8 mocha ./test/**/*.mjs", - "postest": "check", - "coverage": "c8 report --check-coverage", - "precompile": "rimraf build", - "compile": "tsc", - "postcompile": "npm run build:cjs", - "build:cjs": "rollup -c", - "prepare": "npm run compile" - }, - "repository": "yargs/cliui", - "standard": { - "ignore": [ - "**/example/**" - ], - "globals": [ - "it" - ] - }, - "keywords": [ - "cli", - "command-line", - "layout", - "design", - "console", - "wrap", - "table" - ], - "author": "Ben Coe ", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "devDependencies": { - "@types/node": "^14.0.27", - "@typescript-eslint/eslint-plugin": "^4.0.0", - "@typescript-eslint/parser": "^4.0.0", - "c8": "^7.3.0", - "chai": "^4.2.0", - "chalk": "^4.1.0", - "cross-env": "^7.0.2", - "eslint": "^7.6.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-node": "^11.1.0", - "gts": "^3.0.0", - "mocha": "^10.0.0", - "rimraf": "^3.0.2", - "rollup": "^2.23.1", - "rollup-plugin-ts": "^3.0.2", - "standardx": "^7.0.0", - "typescript": "^4.0.0" - }, - "files": [ - "build", - "index.mjs", - "!*.d.ts" - ], - "engines": { - "node": ">=12" - } -} diff --git a/node_modules/@pkgjs/parseargs/.editorconfig b/node_modules/@pkgjs/parseargs/.editorconfig deleted file mode 100644 index b140163905..0000000000 --- a/node_modules/@pkgjs/parseargs/.editorconfig +++ /dev/null @@ -1,14 +0,0 @@ -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file -root = true - -# Copied from Node.js to ease compatibility in PR. -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -indent_style = space -insert_final_newline = true -trim_trailing_whitespace = true -quote_type = single diff --git a/node_modules/@pkgjs/parseargs/CHANGELOG.md b/node_modules/@pkgjs/parseargs/CHANGELOG.md deleted file mode 100644 index 2adc7d3273..0000000000 --- a/node_modules/@pkgjs/parseargs/CHANGELOG.md +++ /dev/null @@ -1,147 +0,0 @@ -# Changelog - -## [0.11.0](https://github.com/pkgjs/parseargs/compare/v0.10.0...v0.11.0) (2022-10-08) - - -### Features - -* add `default` option parameter ([#142](https://github.com/pkgjs/parseargs/issues/142)) ([cd20847](https://github.com/pkgjs/parseargs/commit/cd20847a00b2f556aa9c085ac83b942c60868ec1)) - -## [0.10.0](https://github.com/pkgjs/parseargs/compare/v0.9.1...v0.10.0) (2022-07-21) - - -### Features - -* add parsed meta-data to returned properties ([#129](https://github.com/pkgjs/parseargs/issues/129)) ([91bfb4d](https://github.com/pkgjs/parseargs/commit/91bfb4d3f7b6937efab1b27c91c45d1205f1497e)) - -## [0.9.1](https://github.com/pkgjs/parseargs/compare/v0.9.0...v0.9.1) (2022-06-20) - - -### Bug Fixes - -* **runtime:** support node 14+ ([#135](https://github.com/pkgjs/parseargs/issues/135)) ([6a1c5a6](https://github.com/pkgjs/parseargs/commit/6a1c5a6f7cadf2f035e004027e2742e3c4ce554b)) - -## [0.9.0](https://github.com/pkgjs/parseargs/compare/v0.8.0...v0.9.0) (2022-05-23) - - -### ⚠ BREAKING CHANGES - -* drop handling of electron arguments (#121) - -### Code Refactoring - -* drop handling of electron arguments ([#121](https://github.com/pkgjs/parseargs/issues/121)) ([a2ffd53](https://github.com/pkgjs/parseargs/commit/a2ffd537c244a062371522b955acb45a404fc9f2)) - -## [0.8.0](https://github.com/pkgjs/parseargs/compare/v0.7.1...v0.8.0) (2022-05-16) - - -### ⚠ BREAKING CHANGES - -* switch type:string option arguments to greedy, but with error for suspect cases in strict mode (#88) -* positionals now opt-in when strict:true (#116) -* create result.values with null prototype (#111) - -### Features - -* create result.values with null prototype ([#111](https://github.com/pkgjs/parseargs/issues/111)) ([9d539c3](https://github.com/pkgjs/parseargs/commit/9d539c3d57f269c160e74e0656ad4fa84ff92ec2)) -* positionals now opt-in when strict:true ([#116](https://github.com/pkgjs/parseargs/issues/116)) ([3643338](https://github.com/pkgjs/parseargs/commit/364333826b746e8a7dc5505b4b22fd19ac51df3b)) -* switch type:string option arguments to greedy, but with error for suspect cases in strict mode ([#88](https://github.com/pkgjs/parseargs/issues/88)) ([c2b5e72](https://github.com/pkgjs/parseargs/commit/c2b5e72161991dfdc535909f1327cc9b970fe7e8)) - -### [0.7.1](https://github.com/pkgjs/parseargs/compare/v0.7.0...v0.7.1) (2022-04-15) - - -### Bug Fixes - -* resist pollution ([#106](https://github.com/pkgjs/parseargs/issues/106)) ([ecf2dec](https://github.com/pkgjs/parseargs/commit/ecf2dece0a9f2a76d789384d5d71c68ffe64022a)) - -## [0.7.0](https://github.com/pkgjs/parseargs/compare/v0.6.0...v0.7.0) (2022-04-13) - - -### Features - -* Add strict mode to parser ([#74](https://github.com/pkgjs/parseargs/issues/74)) ([8267d02](https://github.com/pkgjs/parseargs/commit/8267d02083a87b8b8a71fcce08348d1e031ea91c)) - -## [0.6.0](https://github.com/pkgjs/parseargs/compare/v0.5.0...v0.6.0) (2022-04-11) - - -### ⚠ BREAKING CHANGES - -* rework results to remove redundant `flags` property and store value true for boolean options (#83) -* switch to existing ERR_INVALID_ARG_VALUE (#97) - -### Code Refactoring - -* rework results to remove redundant `flags` property and store value true for boolean options ([#83](https://github.com/pkgjs/parseargs/issues/83)) ([be153db](https://github.com/pkgjs/parseargs/commit/be153dbed1d488cb7b6e27df92f601ba7337713d)) -* switch to existing ERR_INVALID_ARG_VALUE ([#97](https://github.com/pkgjs/parseargs/issues/97)) ([084a23f](https://github.com/pkgjs/parseargs/commit/084a23f9fde2da030b159edb1c2385f24579ce40)) - -## [0.5.0](https://github.com/pkgjs/parseargs/compare/v0.4.0...v0.5.0) (2022-04-10) - - -### ⚠ BREAKING CHANGES - -* Require type to be specified for each supplied option (#95) - -### Features - -* Require type to be specified for each supplied option ([#95](https://github.com/pkgjs/parseargs/issues/95)) ([02cd018](https://github.com/pkgjs/parseargs/commit/02cd01885b8aaa59f2db8308f2d4479e64340068)) - -## [0.4.0](https://github.com/pkgjs/parseargs/compare/v0.3.0...v0.4.0) (2022-03-12) - - -### ⚠ BREAKING CHANGES - -* parsing, revisit short option groups, add support for combined short and value (#75) -* restructure configuration to take options bag (#63) - -### Code Refactoring - -* parsing, revisit short option groups, add support for combined short and value ([#75](https://github.com/pkgjs/parseargs/issues/75)) ([a92600f](https://github.com/pkgjs/parseargs/commit/a92600fa6c214508ab1e016fa55879a314f541af)) -* restructure configuration to take options bag ([#63](https://github.com/pkgjs/parseargs/issues/63)) ([b412095](https://github.com/pkgjs/parseargs/commit/b4120957d90e809ee8b607b06e747d3e6a6b213e)) - -## [0.3.0](https://github.com/pkgjs/parseargs/compare/v0.2.0...v0.3.0) (2022-02-06) - - -### Features - -* **parser:** support short-option groups ([#59](https://github.com/pkgjs/parseargs/issues/59)) ([882067b](https://github.com/pkgjs/parseargs/commit/882067bc2d7cbc6b796f8e5a079a99bc99d4e6ba)) - -## [0.2.0](https://github.com/pkgjs/parseargs/compare/v0.1.1...v0.2.0) (2022-02-05) - - -### Features - -* basic support for shorts ([#50](https://github.com/pkgjs/parseargs/issues/50)) ([a2f36d7](https://github.com/pkgjs/parseargs/commit/a2f36d7da4145af1c92f76806b7fe2baf6beeceb)) - - -### Bug Fixes - -* always store value for a=b ([#43](https://github.com/pkgjs/parseargs/issues/43)) ([a85e8dc](https://github.com/pkgjs/parseargs/commit/a85e8dc06379fd2696ee195cc625de8fac6aee42)) -* support single dash as positional ([#49](https://github.com/pkgjs/parseargs/issues/49)) ([d795bf8](https://github.com/pkgjs/parseargs/commit/d795bf877d068fd67aec381f30b30b63f97109ad)) - -### [0.1.1](https://github.com/pkgjs/parseargs/compare/v0.1.0...v0.1.1) (2022-01-25) - - -### Bug Fixes - -* only use arrays in results for multiples ([#42](https://github.com/pkgjs/parseargs/issues/42)) ([c357584](https://github.com/pkgjs/parseargs/commit/c357584847912506319ed34a0840080116f4fd65)) - -## 0.1.0 (2022-01-22) - - -### Features - -* expand scenarios covered by default arguments for environments ([#20](https://github.com/pkgjs/parseargs/issues/20)) ([582ada7](https://github.com/pkgjs/parseargs/commit/582ada7be0eca3a73d6e0bd016e7ace43449fa4c)) -* update readme and include contributing guidelines ([8edd6fc](https://github.com/pkgjs/parseargs/commit/8edd6fc863cd705f6fac732724159ebe8065a2b0)) - - -### Bug Fixes - -* do not strip excess leading dashes on long option names ([#21](https://github.com/pkgjs/parseargs/issues/21)) ([f848590](https://github.com/pkgjs/parseargs/commit/f848590ebf3249ed5979ff47e003fa6e1a8ec5c0)) -* name & readme ([3f057c1](https://github.com/pkgjs/parseargs/commit/3f057c1b158a1bdbe878c64b57460c58e56e465f)) -* package.json values ([9bac300](https://github.com/pkgjs/parseargs/commit/9bac300e00cd76c77076bf9e75e44f8929512da9)) -* update readme name ([957d8d9](https://github.com/pkgjs/parseargs/commit/957d8d96e1dcb48297c0a14345d44c0123b2883e)) - - -### Build System - -* first release as minor ([421c6e2](https://github.com/pkgjs/parseargs/commit/421c6e2569a8668ad14fac5a5af5be60479a7571)) diff --git a/node_modules/@pkgjs/parseargs/LICENSE b/node_modules/@pkgjs/parseargs/LICENSE deleted file mode 100644 index 261eeb9e9f..0000000000 --- a/node_modules/@pkgjs/parseargs/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/node_modules/@pkgjs/parseargs/README.md b/node_modules/@pkgjs/parseargs/README.md deleted file mode 100644 index 0a041927e8..0000000000 --- a/node_modules/@pkgjs/parseargs/README.md +++ /dev/null @@ -1,413 +0,0 @@ - -# parseArgs - -[![Coverage][coverage-image]][coverage-url] - -Polyfill of `util.parseArgs()` - -## `util.parseArgs([config])` - - - -> Stability: 1 - Experimental - -* `config` {Object} Used to provide arguments for parsing and to configure - the parser. `config` supports the following properties: - * `args` {string\[]} array of argument strings. **Default:** `process.argv` - with `execPath` and `filename` removed. - * `options` {Object} Used to describe arguments known to the parser. - Keys of `options` are the long names of options and values are an - {Object} accepting the following properties: - * `type` {string} Type of argument, which must be either `boolean` or `string`. - * `multiple` {boolean} Whether this option can be provided multiple - times. If `true`, all values will be collected in an array. If - `false`, values for the option are last-wins. **Default:** `false`. - * `short` {string} A single character alias for the option. - * `default` {string | boolean | string\[] | boolean\[]} The default option - value when it is not set by args. It must be of the same type as the - the `type` property. When `multiple` is `true`, it must be an array. - * `strict` {boolean} Should an error be thrown when unknown arguments - are encountered, or when arguments are passed that do not match the - `type` configured in `options`. - **Default:** `true`. - * `allowPositionals` {boolean} Whether this command accepts positional - arguments. - **Default:** `false` if `strict` is `true`, otherwise `true`. - * `tokens` {boolean} Return the parsed tokens. This is useful for extending - the built-in behavior, from adding additional checks through to reprocessing - the tokens in different ways. - **Default:** `false`. - -* Returns: {Object} The parsed command line arguments: - * `values` {Object} A mapping of parsed option names with their {string} - or {boolean} values. - * `positionals` {string\[]} Positional arguments. - * `tokens` {Object\[] | undefined} See [parseArgs tokens](#parseargs-tokens) - section. Only returned if `config` includes `tokens: true`. - -Provides a higher level API for command-line argument parsing than interacting -with `process.argv` directly. Takes a specification for the expected arguments -and returns a structured object with the parsed options and positionals. - -```mjs -import { parseArgs } from 'node:util'; -const args = ['-f', '--bar', 'b']; -const options = { - foo: { - type: 'boolean', - short: 'f' - }, - bar: { - type: 'string' - } -}; -const { - values, - positionals -} = parseArgs({ args, options }); -console.log(values, positionals); -// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] -``` - -```cjs -const { parseArgs } = require('node:util'); -const args = ['-f', '--bar', 'b']; -const options = { - foo: { - type: 'boolean', - short: 'f' - }, - bar: { - type: 'string' - } -}; -const { - values, - positionals -} = parseArgs({ args, options }); -console.log(values, positionals); -// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] -``` - -`util.parseArgs` is experimental and behavior may change. Join the -conversation in [pkgjs/parseargs][] to contribute to the design. - -### `parseArgs` `tokens` - -Detailed parse information is available for adding custom behaviours by -specifying `tokens: true` in the configuration. -The returned tokens have properties describing: - -* all tokens - * `kind` {string} One of 'option', 'positional', or 'option-terminator'. - * `index` {number} Index of element in `args` containing token. So the - source argument for a token is `args[token.index]`. -* option tokens - * `name` {string} Long name of option. - * `rawName` {string} How option used in args, like `-f` of `--foo`. - * `value` {string | undefined} Option value specified in args. - Undefined for boolean options. - * `inlineValue` {boolean | undefined} Whether option value specified inline, - like `--foo=bar`. -* positional tokens - * `value` {string} The value of the positional argument in args (i.e. `args[index]`). -* option-terminator token - -The returned tokens are in the order encountered in the input args. Options -that appear more than once in args produce a token for each use. Short option -groups like `-xy` expand to a token for each option. So `-xxx` produces -three tokens. - -For example to use the returned tokens to add support for a negated option -like `--no-color`, the tokens can be reprocessed to change the value stored -for the negated option. - -```mjs -import { parseArgs } from 'node:util'; - -const options = { - 'color': { type: 'boolean' }, - 'no-color': { type: 'boolean' }, - 'logfile': { type: 'string' }, - 'no-logfile': { type: 'boolean' }, -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -// Reprocess the option tokens and overwrite the returned values. -tokens - .filter((token) => token.kind === 'option') - .forEach((token) => { - if (token.name.startsWith('no-')) { - // Store foo:false for --no-foo - const positiveName = token.name.slice(3); - values[positiveName] = false; - delete values[token.name]; - } else { - // Resave value so last one wins if both --foo and --no-foo. - values[token.name] = token.value ?? true; - } - }); - -const color = values.color; -const logfile = values.logfile ?? 'default.log'; - -console.log({ logfile, color }); -``` - -```cjs -const { parseArgs } = require('node:util'); - -const options = { - 'color': { type: 'boolean' }, - 'no-color': { type: 'boolean' }, - 'logfile': { type: 'string' }, - 'no-logfile': { type: 'boolean' }, -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -// Reprocess the option tokens and overwrite the returned values. -tokens - .filter((token) => token.kind === 'option') - .forEach((token) => { - if (token.name.startsWith('no-')) { - // Store foo:false for --no-foo - const positiveName = token.name.slice(3); - values[positiveName] = false; - delete values[token.name]; - } else { - // Resave value so last one wins if both --foo and --no-foo. - values[token.name] = token.value ?? true; - } - }); - -const color = values.color; -const logfile = values.logfile ?? 'default.log'; - -console.log({ logfile, color }); -``` - -Example usage showing negated options, and when an option is used -multiple ways then last one wins. - -```console -$ node negate.js -{ logfile: 'default.log', color: undefined } -$ node negate.js --no-logfile --no-color -{ logfile: false, color: false } -$ node negate.js --logfile=test.log --color -{ logfile: 'test.log', color: true } -$ node negate.js --no-logfile --logfile=test.log --color --no-color -{ logfile: 'test.log', color: false } -``` - ------ - - -## Table of Contents -- [`util.parseArgs([config])`](#utilparseargsconfig) -- [Scope](#scope) -- [Version Matchups](#version-matchups) -- [🚀 Getting Started](#-getting-started) -- [🙌 Contributing](#-contributing) -- [💡 `process.mainArgs` Proposal](#-processmainargs-proposal) - - [Implementation:](#implementation) -- [📃 Examples](#-examples) -- [F.A.Qs](#faqs) -- [Links & Resources](#links--resources) - ------ - -## Scope - -It is already possible to build great arg parsing modules on top of what Node.js provides; the prickly API is abstracted away by these modules. Thus, process.parseArgs() is not necessarily intended for library authors; it is intended for developers of simple CLI tools, ad-hoc scripts, deployed Node.js applications, and learning materials. - -It is exceedingly difficult to provide an API which would both be friendly to these Node.js users while being extensible enough for libraries to build upon. We chose to prioritize these use cases because these are currently not well-served by Node.js' API. - ----- - -## Version Matchups - -| Node.js | @pkgjs/parseArgs | -| -- | -- | -| [v18.3.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [v0.9.1](https://github.com/pkgjs/parseargs/tree/v0.9.1#utilparseargsconfig) | -| [v16.17.0](https://nodejs.org/dist/latest-v16.x/docs/api/util.html#utilparseargsconfig), [v18.7.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [0.10.0](https://github.com/pkgjs/parseargs/tree/v0.10.0#utilparseargsconfig) | - ----- - -## 🚀 Getting Started - -1. **Install dependencies.** - - ```bash - npm install - ``` - -2. **Open the index.js file and start editing!** - -3. **Test your code by calling parseArgs through our test file** - - ```bash - npm test - ``` - ----- - -## 🙌 Contributing - -Any person who wants to contribute to the initiative is welcome! Please first read the [Contributing Guide](CONTRIBUTING.md) - -Additionally, reading the [`Examples w/ Output`](#-examples-w-output) section of this document will be the best way to familiarize yourself with the target expected behavior for parseArgs() once it is fully implemented. - -This package was implemented using [tape](https://www.npmjs.com/package/tape) as its test harness. - ----- - -## 💡 `process.mainArgs` Proposal - -> Note: This can be moved forward independently of the `util.parseArgs()` proposal/work. - -### Implementation: - -```javascript -process.mainArgs = process.argv.slice(process._exec ? 1 : 2) -``` - ----- - -## 📃 Examples - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// specify the options that may be used -const options = { - foo: { type: 'string'}, - bar: { type: 'boolean' }, -}; -const args = ['--foo=a', '--bar']; -const { values, positionals } = parseArgs({ args, options }); -// values = { foo: 'a', bar: true } -// positionals = [] -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// type:string & multiple -const options = { - foo: { - type: 'string', - multiple: true, - }, -}; -const args = ['--foo=a', '--foo', 'b']; -const { values, positionals } = parseArgs({ args, options }); -// values = { foo: [ 'a', 'b' ] } -// positionals = [] -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// shorts -const options = { - foo: { - short: 'f', - type: 'boolean' - }, -}; -const args = ['-f', 'b']; -const { values, positionals } = parseArgs({ args, options, allowPositionals: true }); -// values = { foo: true } -// positionals = ['b'] -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// unconfigured -const options = {}; -const args = ['-f', '--foo=a', '--bar', 'b']; -const { values, positionals } = parseArgs({ strict: false, args, options, allowPositionals: true }); -// values = { f: true, foo: 'a', bar: true } -// positionals = ['b'] -``` - ----- - -## F.A.Qs - -- Is `cmd --foo=bar baz` the same as `cmd baz --foo=bar`? - - yes -- Does the parser execute a function? - - no -- Does the parser execute one of several functions, depending on input? - - no -- Can subcommands take options that are distinct from the main command? - - no -- Does it output generated help when no options match? - - no -- Does it generated short usage? Like: `usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]` - - no (no usage/help at all) -- Does the user provide the long usage text? For each option? For the whole command? - - no -- Do subcommands (if implemented) have their own usage output? - - no -- Does usage print if the user runs `cmd --help`? - - no -- Does it set `process.exitCode`? - - no -- Does usage print to stderr or stdout? - - N/A -- Does it check types? (Say, specify that an option is a boolean, number, etc.) - - no -- Can an option have more than one type? (string or false, for example) - - no -- Can the user define a type? (Say, `type: path` to call `path.resolve()` on the argument.) - - no -- Does a `--foo=0o22` mean 0, 22, 18, or "0o22"? - - `"0o22"` -- Does it coerce types? - - no -- Does `--no-foo` coerce to `--foo=false`? For all options? Only boolean options? - - no, it sets `{values:{'no-foo': true}}` -- Is `--foo` the same as `--foo=true`? Only for known booleans? Only at the end? - - no, they are not the same. There is no special handling of `true` as a value so it is just another string. -- Does it read environment variables? Ie, is `FOO=1 cmd` the same as `cmd --foo=1`? - - no -- Do unknown arguments raise an error? Are they parsed? Are they treated as positional arguments? - - no, they are parsed, not treated as positionals -- Does `--` signal the end of options? - - yes -- Is `--` included as a positional? - - no -- Is `program -- foo` the same as `program foo`? - - yes, both store `{positionals:['foo']}` -- Does the API specify whether a `--` was present/relevant? - - no -- Is `-bar` the same as `--bar`? - - no, `-bar` is a short option or options, with expansion logic that follows the - [Utility Syntax Guidelines in POSIX.1-2017](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). `-bar` expands to `-b`, `-a`, `-r`. -- Is `---foo` the same as `--foo`? - - no - - the first is a long option named `'-foo'` - - the second is a long option named `'foo'` -- Is `-` a positional? ie, `bash some-test.sh | tap -` - - yes - -## Links & Resources - -* [Initial Tooling Issue](https://github.com/nodejs/tooling/issues/19) -* [Initial Proposal](https://github.com/nodejs/node/pull/35015) -* [parseArgs Proposal](https://github.com/nodejs/node/pull/42675) - -[coverage-image]: https://img.shields.io/nycrc/pkgjs/parseargs -[coverage-url]: https://github.com/pkgjs/parseargs/blob/main/.nycrc -[pkgjs/parseargs]: https://github.com/pkgjs/parseargs diff --git a/node_modules/@pkgjs/parseargs/examples/is-default-value.js b/node_modules/@pkgjs/parseargs/examples/is-default-value.js deleted file mode 100644 index 0a67972b71..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/is-default-value.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -// This example shows how to understand if a default value is used or not. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - file: { short: 'f', type: 'string', default: 'FOO' }, -}; - -const { values, tokens } = parseArgs({ options, tokens: true }); - -const isFileDefault = !tokens.some((token) => token.kind === 'option' && - token.name === 'file' -); - -console.log(values); -console.log(`Is the file option [${values.file}] the default value? ${isFileDefault}`); - -// Try the following: -// node is-default-value.js -// node is-default-value.js -f FILE -// node is-default-value.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js deleted file mode 100644 index 943e643ee9..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -// This is an example of using tokens to add a custom behaviour. -// -// Require the use of `=` for long options and values by blocking -// the use of space separated values. -// So allow `--foo=bar`, and not allow `--foo bar`. -// -// Note: this is not a common behaviour, most CLIs allow both forms. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - file: { short: 'f', type: 'string' }, - log: { type: 'string' }, -}; - -const { values, tokens } = parseArgs({ options, tokens: true }); - -const badToken = tokens.find((token) => token.kind === 'option' && - token.value != null && - token.rawName.startsWith('--') && - !token.inlineValue -); -if (badToken) { - throw new Error(`Option value for '${badToken.rawName}' must be inline, like '${badToken.rawName}=VALUE'`); -} - -console.log(values); - -// Try the following: -// node limit-long-syntax.js -f FILE --log=LOG -// node limit-long-syntax.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/negate.js b/node_modules/@pkgjs/parseargs/examples/negate.js deleted file mode 100644 index b6634690a4..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/negate.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -// This example is used in the documentation. - -// How might I add my own support for --no-foo? - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - 'color': { type: 'boolean' }, - 'no-color': { type: 'boolean' }, - 'logfile': { type: 'string' }, - 'no-logfile': { type: 'boolean' }, -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -// Reprocess the option tokens and overwrite the returned values. -tokens - .filter((token) => token.kind === 'option') - .forEach((token) => { - if (token.name.startsWith('no-')) { - // Store foo:false for --no-foo - const positiveName = token.name.slice(3); - values[positiveName] = false; - delete values[token.name]; - } else { - // Resave value so last one wins if both --foo and --no-foo. - values[token.name] = token.value ?? true; - } - }); - -const color = values.color; -const logfile = values.logfile ?? 'default.log'; - -console.log({ logfile, color }); - -// Try the following: -// node negate.js -// node negate.js --no-logfile --no-color -// negate.js --logfile=test.log --color -// node negate.js --no-logfile --logfile=test.log --color --no-color diff --git a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js deleted file mode 100644 index 0c324688af..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -// This is an example of using tokens to add a custom behaviour. -// -// Throw an error if an option is used more than once. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - ding: { type: 'boolean', short: 'd' }, - beep: { type: 'boolean', short: 'b' } -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -const seenBefore = new Set(); -tokens.forEach((token) => { - if (token.kind !== 'option') return; - if (seenBefore.has(token.name)) { - throw new Error(`option '${token.name}' used multiple times`); - } - seenBefore.add(token.name); -}); - -console.log(values); - -// Try the following: -// node no-repeated-options --ding --beep -// node no-repeated-options --beep -b -// node no-repeated-options -ddd diff --git a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs deleted file mode 100644 index 8ab7367b8b..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs +++ /dev/null @@ -1,41 +0,0 @@ -// This is an example of using tokens to add a custom behaviour. -// -// This adds a option order check so that --some-unstable-option -// may only be used after --enable-experimental-options -// -// Note: this is not a common behaviour, the order of different options -// does not usually matter. - -import { parseArgs } from '../index.js'; - -function findTokenIndex(tokens, target) { - return tokens.findIndex((token) => token.kind === 'option' && - token.name === target - ); -} - -const experimentalName = 'enable-experimental-options'; -const unstableName = 'some-unstable-option'; - -const options = { - [experimentalName]: { type: 'boolean' }, - [unstableName]: { type: 'boolean' }, -}; - -const { values, tokens } = parseArgs({ options, tokens: true }); - -const experimentalIndex = findTokenIndex(tokens, experimentalName); -const unstableIndex = findTokenIndex(tokens, unstableName); -if (unstableIndex !== -1 && - ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) { - throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`); -} - -console.log(values); - -/* eslint-disable max-len */ -// Try the following: -// node ordered-options.mjs -// node ordered-options.mjs --some-unstable-option -// node ordered-options.mjs --some-unstable-option --enable-experimental-options -// node ordered-options.mjs --enable-experimental-options --some-unstable-option diff --git a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js deleted file mode 100644 index eff04c2a60..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -// This example is used in the documentation. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const args = ['-f', '--bar', 'b']; -const options = { - foo: { - type: 'boolean', - short: 'f' - }, - bar: { - type: 'string' - } -}; -const { - values, - positionals -} = parseArgs({ args, options }); -console.log(values, positionals); - -// Try the following: -// node simple-hard-coded.js diff --git a/node_modules/@pkgjs/parseargs/index.js b/node_modules/@pkgjs/parseargs/index.js deleted file mode 100644 index b1004c7b72..0000000000 --- a/node_modules/@pkgjs/parseargs/index.js +++ /dev/null @@ -1,396 +0,0 @@ -'use strict'; - -const { - ArrayPrototypeForEach, - ArrayPrototypeIncludes, - ArrayPrototypeMap, - ArrayPrototypePush, - ArrayPrototypePushApply, - ArrayPrototypeShift, - ArrayPrototypeSlice, - ArrayPrototypeUnshiftApply, - ObjectEntries, - ObjectPrototypeHasOwnProperty: ObjectHasOwn, - StringPrototypeCharAt, - StringPrototypeIndexOf, - StringPrototypeSlice, - StringPrototypeStartsWith, -} = require('./internal/primordials'); - -const { - validateArray, - validateBoolean, - validateBooleanArray, - validateObject, - validateString, - validateStringArray, - validateUnion, -} = require('./internal/validators'); - -const { - kEmptyObject, -} = require('./internal/util'); - -const { - findLongOptionForShort, - isLoneLongOption, - isLoneShortOption, - isLongOptionAndValue, - isOptionValue, - isOptionLikeValue, - isShortOptionAndValue, - isShortOptionGroup, - useDefaultValueOption, - objectGetOwn, - optionsGetOwn, -} = require('./utils'); - -const { - codes: { - ERR_INVALID_ARG_VALUE, - ERR_PARSE_ARGS_INVALID_OPTION_VALUE, - ERR_PARSE_ARGS_UNKNOWN_OPTION, - ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, - }, -} = require('./internal/errors'); - -function getMainArgs() { - // Work out where to slice process.argv for user supplied arguments. - - // Check node options for scenarios where user CLI args follow executable. - const execArgv = process.execArgv; - if (ArrayPrototypeIncludes(execArgv, '-e') || - ArrayPrototypeIncludes(execArgv, '--eval') || - ArrayPrototypeIncludes(execArgv, '-p') || - ArrayPrototypeIncludes(execArgv, '--print')) { - return ArrayPrototypeSlice(process.argv, 1); - } - - // Normally first two arguments are executable and script, then CLI arguments - return ArrayPrototypeSlice(process.argv, 2); -} - -/** - * In strict mode, throw for possible usage errors like --foo --bar - * - * @param {object} token - from tokens as available from parseArgs - */ -function checkOptionLikeValue(token) { - if (!token.inlineValue && isOptionLikeValue(token.value)) { - // Only show short example if user used short option. - const example = StringPrototypeStartsWith(token.rawName, '--') ? - `'${token.rawName}=-XYZ'` : - `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`; - const errorMessage = `Option '${token.rawName}' argument is ambiguous. -Did you forget to specify the option argument for '${token.rawName}'? -To specify an option argument starting with a dash use ${example}.`; - throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage); - } -} - -/** - * In strict mode, throw for usage errors. - * - * @param {object} config - from config passed to parseArgs - * @param {object} token - from tokens as available from parseArgs - */ -function checkOptionUsage(config, token) { - if (!ObjectHasOwn(config.options, token.name)) { - throw new ERR_PARSE_ARGS_UNKNOWN_OPTION( - token.rawName, config.allowPositionals); - } - - const short = optionsGetOwn(config.options, token.name, 'short'); - const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`; - const type = optionsGetOwn(config.options, token.name, 'type'); - if (type === 'string' && typeof token.value !== 'string') { - throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} ' argument missing`); - } - // (Idiomatic test for undefined||null, expecting undefined.) - if (type === 'boolean' && token.value != null) { - throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`); - } -} - - -/** - * Store the option value in `values`. - * - * @param {string} longOption - long option name e.g. 'foo' - * @param {string|undefined} optionValue - value from user args - * @param {object} options - option configs, from parseArgs({ options }) - * @param {object} values - option values returned in `values` by parseArgs - */ -function storeOption(longOption, optionValue, options, values) { - if (longOption === '__proto__') { - return; // No. Just no. - } - - // We store based on the option value rather than option type, - // preserving the users intent for author to deal with. - const newValue = optionValue ?? true; - if (optionsGetOwn(options, longOption, 'multiple')) { - // Always store value in array, including for boolean. - // values[longOption] starts out not present, - // first value is added as new array [newValue], - // subsequent values are pushed to existing array. - // (note: values has null prototype, so simpler usage) - if (values[longOption]) { - ArrayPrototypePush(values[longOption], newValue); - } else { - values[longOption] = [newValue]; - } - } else { - values[longOption] = newValue; - } -} - -/** - * Store the default option value in `values`. - * - * @param {string} longOption - long option name e.g. 'foo' - * @param {string - * | boolean - * | string[] - * | boolean[]} optionValue - default value from option config - * @param {object} values - option values returned in `values` by parseArgs - */ -function storeDefaultOption(longOption, optionValue, values) { - if (longOption === '__proto__') { - return; // No. Just no. - } - - values[longOption] = optionValue; -} - -/** - * Process args and turn into identified tokens: - * - option (along with value, if any) - * - positional - * - option-terminator - * - * @param {string[]} args - from parseArgs({ args }) or mainArgs - * @param {object} options - option configs, from parseArgs({ options }) - */ -function argsToTokens(args, options) { - const tokens = []; - let index = -1; - let groupCount = 0; - - const remainingArgs = ArrayPrototypeSlice(args); - while (remainingArgs.length > 0) { - const arg = ArrayPrototypeShift(remainingArgs); - const nextArg = remainingArgs[0]; - if (groupCount > 0) - groupCount--; - else - index++; - - // Check if `arg` is an options terminator. - // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html - if (arg === '--') { - // Everything after a bare '--' is considered a positional argument. - ArrayPrototypePush(tokens, { kind: 'option-terminator', index }); - ArrayPrototypePushApply( - tokens, ArrayPrototypeMap(remainingArgs, (arg) => { - return { kind: 'positional', index: ++index, value: arg }; - }) - ); - break; // Finished processing args, leave while loop. - } - - if (isLoneShortOption(arg)) { - // e.g. '-f' - const shortOption = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(shortOption, options); - let value; - let inlineValue; - if (optionsGetOwn(options, longOption, 'type') === 'string' && - isOptionValue(nextArg)) { - // e.g. '-f', 'bar' - value = ArrayPrototypeShift(remainingArgs); - inlineValue = false; - } - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: arg, - index, value, inlineValue }); - if (value != null) ++index; - continue; - } - - if (isShortOptionGroup(arg, options)) { - // Expand -fXzy to -f -X -z -y - const expanded = []; - for (let index = 1; index < arg.length; index++) { - const shortOption = StringPrototypeCharAt(arg, index); - const longOption = findLongOptionForShort(shortOption, options); - if (optionsGetOwn(options, longOption, 'type') !== 'string' || - index === arg.length - 1) { - // Boolean option, or last short in group. Well formed. - ArrayPrototypePush(expanded, `-${shortOption}`); - } else { - // String option in middle. Yuck. - // Expand -abfFILE to -a -b -fFILE - ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`); - break; // finished short group - } - } - ArrayPrototypeUnshiftApply(remainingArgs, expanded); - groupCount = expanded.length; - continue; - } - - if (isShortOptionAndValue(arg, options)) { - // e.g. -fFILE - const shortOption = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(shortOption, options); - const value = StringPrototypeSlice(arg, 2); - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: `-${shortOption}`, - index, value, inlineValue: true }); - continue; - } - - if (isLoneLongOption(arg)) { - // e.g. '--foo' - const longOption = StringPrototypeSlice(arg, 2); - let value; - let inlineValue; - if (optionsGetOwn(options, longOption, 'type') === 'string' && - isOptionValue(nextArg)) { - // e.g. '--foo', 'bar' - value = ArrayPrototypeShift(remainingArgs); - inlineValue = false; - } - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: arg, - index, value, inlineValue }); - if (value != null) ++index; - continue; - } - - if (isLongOptionAndValue(arg)) { - // e.g. --foo=bar - const equalIndex = StringPrototypeIndexOf(arg, '='); - const longOption = StringPrototypeSlice(arg, 2, equalIndex); - const value = StringPrototypeSlice(arg, equalIndex + 1); - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: `--${longOption}`, - index, value, inlineValue: true }); - continue; - } - - ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg }); - } - - return tokens; -} - -const parseArgs = (config = kEmptyObject) => { - const args = objectGetOwn(config, 'args') ?? getMainArgs(); - const strict = objectGetOwn(config, 'strict') ?? true; - const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict; - const returnTokens = objectGetOwn(config, 'tokens') ?? false; - const options = objectGetOwn(config, 'options') ?? { __proto__: null }; - // Bundle these up for passing to strict-mode checks. - const parseConfig = { args, strict, options, allowPositionals }; - - // Validate input configuration. - validateArray(args, 'args'); - validateBoolean(strict, 'strict'); - validateBoolean(allowPositionals, 'allowPositionals'); - validateBoolean(returnTokens, 'tokens'); - validateObject(options, 'options'); - ArrayPrototypeForEach( - ObjectEntries(options), - ({ 0: longOption, 1: optionConfig }) => { - validateObject(optionConfig, `options.${longOption}`); - - // type is required - const optionType = objectGetOwn(optionConfig, 'type'); - validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']); - - if (ObjectHasOwn(optionConfig, 'short')) { - const shortOption = optionConfig.short; - validateString(shortOption, `options.${longOption}.short`); - if (shortOption.length !== 1) { - throw new ERR_INVALID_ARG_VALUE( - `options.${longOption}.short`, - shortOption, - 'must be a single character' - ); - } - } - - const multipleOption = objectGetOwn(optionConfig, 'multiple'); - if (ObjectHasOwn(optionConfig, 'multiple')) { - validateBoolean(multipleOption, `options.${longOption}.multiple`); - } - - const defaultValue = objectGetOwn(optionConfig, 'default'); - if (defaultValue !== undefined) { - let validator; - switch (optionType) { - case 'string': - validator = multipleOption ? validateStringArray : validateString; - break; - - case 'boolean': - validator = multipleOption ? validateBooleanArray : validateBoolean; - break; - } - validator(defaultValue, `options.${longOption}.default`); - } - } - ); - - // Phase 1: identify tokens - const tokens = argsToTokens(args, options); - - // Phase 2: process tokens into parsed option values and positionals - const result = { - values: { __proto__: null }, - positionals: [], - }; - if (returnTokens) { - result.tokens = tokens; - } - ArrayPrototypeForEach(tokens, (token) => { - if (token.kind === 'option') { - if (strict) { - checkOptionUsage(parseConfig, token); - checkOptionLikeValue(token); - } - storeOption(token.name, token.value, options, result.values); - } else if (token.kind === 'positional') { - if (!allowPositionals) { - throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value); - } - ArrayPrototypePush(result.positionals, token.value); - } - }); - - // Phase 3: fill in default values for missing args - ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption, - 1: optionConfig }) => { - const mustSetDefault = useDefaultValueOption(longOption, - optionConfig, - result.values); - if (mustSetDefault) { - storeDefaultOption(longOption, - objectGetOwn(optionConfig, 'default'), - result.values); - } - }); - - - return result; -}; - -module.exports = { - parseArgs, -}; diff --git a/node_modules/@pkgjs/parseargs/internal/errors.js b/node_modules/@pkgjs/parseargs/internal/errors.js deleted file mode 100644 index e1b237b5b1..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/errors.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -class ERR_INVALID_ARG_TYPE extends TypeError { - constructor(name, expected, actual) { - super(`${name} must be ${expected} got ${actual}`); - this.code = 'ERR_INVALID_ARG_TYPE'; - } -} - -class ERR_INVALID_ARG_VALUE extends TypeError { - constructor(arg1, arg2, expected) { - super(`The property ${arg1} ${expected}. Received '${arg2}'`); - this.code = 'ERR_INVALID_ARG_VALUE'; - } -} - -class ERR_PARSE_ARGS_INVALID_OPTION_VALUE extends Error { - constructor(message) { - super(message); - this.code = 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE'; - } -} - -class ERR_PARSE_ARGS_UNKNOWN_OPTION extends Error { - constructor(option, allowPositionals) { - const suggestDashDash = allowPositionals ? `. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- ${JSON.stringify(option)}` : ''; - super(`Unknown option '${option}'${suggestDashDash}`); - this.code = 'ERR_PARSE_ARGS_UNKNOWN_OPTION'; - } -} - -class ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL extends Error { - constructor(positional) { - super(`Unexpected argument '${positional}'. This command does not take positional arguments`); - this.code = 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL'; - } -} - -module.exports = { - codes: { - ERR_INVALID_ARG_TYPE, - ERR_INVALID_ARG_VALUE, - ERR_PARSE_ARGS_INVALID_OPTION_VALUE, - ERR_PARSE_ARGS_UNKNOWN_OPTION, - ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, - } -}; diff --git a/node_modules/@pkgjs/parseargs/internal/primordials.js b/node_modules/@pkgjs/parseargs/internal/primordials.js deleted file mode 100644 index 63e23ab117..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/primordials.js +++ /dev/null @@ -1,393 +0,0 @@ -/* -This file is copied from https://github.com/nodejs/node/blob/v14.19.3/lib/internal/per_context/primordials.js -under the following license: - -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -*/ - -'use strict'; - -/* eslint-disable node-core/prefer-primordials */ - -// This file subclasses and stores the JS builtins that come from the VM -// so that Node.js's builtin modules do not need to later look these up from -// the global proxy, which can be mutated by users. - -// Use of primordials have sometimes a dramatic impact on performance, please -// benchmark all changes made in performance-sensitive areas of the codebase. -// See: https://github.com/nodejs/node/pull/38248 - -const primordials = {}; - -const { - defineProperty: ReflectDefineProperty, - getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor, - ownKeys: ReflectOwnKeys, -} = Reflect; - -// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`. -// It is using `bind.bind(call)` to avoid using `Function.prototype.bind` -// and `Function.prototype.call` after it may have been mutated by users. -const { apply, bind, call } = Function.prototype; -const uncurryThis = bind.bind(call); -primordials.uncurryThis = uncurryThis; - -// `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`. -// It is using `bind.bind(apply)` to avoid using `Function.prototype.bind` -// and `Function.prototype.apply` after it may have been mutated by users. -const applyBind = bind.bind(apply); -primordials.applyBind = applyBind; - -// Methods that accept a variable number of arguments, and thus it's useful to -// also create `${prefix}${key}Apply`, which uses `Function.prototype.apply`, -// instead of `Function.prototype.call`, and thus doesn't require iterator -// destructuring. -const varargsMethods = [ - // 'ArrayPrototypeConcat' is omitted, because it performs the spread - // on its own for arrays and array-likes with a truthy - // @@isConcatSpreadable symbol property. - 'ArrayOf', - 'ArrayPrototypePush', - 'ArrayPrototypeUnshift', - // 'FunctionPrototypeCall' is omitted, since there's 'ReflectApply' - // and 'FunctionPrototypeApply'. - 'MathHypot', - 'MathMax', - 'MathMin', - 'StringPrototypeConcat', - 'TypedArrayOf', -]; - -function getNewKey(key) { - return typeof key === 'symbol' ? - `Symbol${key.description[7].toUpperCase()}${key.description.slice(8)}` : - `${key[0].toUpperCase()}${key.slice(1)}`; -} - -function copyAccessor(dest, prefix, key, { enumerable, get, set }) { - ReflectDefineProperty(dest, `${prefix}Get${key}`, { - value: uncurryThis(get), - enumerable - }); - if (set !== undefined) { - ReflectDefineProperty(dest, `${prefix}Set${key}`, { - value: uncurryThis(set), - enumerable - }); - } -} - -function copyPropsRenamed(src, dest, prefix) { - for (const key of ReflectOwnKeys(src)) { - const newKey = getNewKey(key); - const desc = ReflectGetOwnPropertyDescriptor(src, key); - if ('get' in desc) { - copyAccessor(dest, prefix, newKey, desc); - } else { - const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); - if (varargsMethods.includes(name)) { - ReflectDefineProperty(dest, `${name}Apply`, { - // `src` is bound as the `this` so that the static `this` points - // to the object it was defined on, - // e.g.: `ArrayOfApply` gets a `this` of `Array`: - value: applyBind(desc.value, src), - }); - } - } - } -} - -function copyPropsRenamedBound(src, dest, prefix) { - for (const key of ReflectOwnKeys(src)) { - const newKey = getNewKey(key); - const desc = ReflectGetOwnPropertyDescriptor(src, key); - if ('get' in desc) { - copyAccessor(dest, prefix, newKey, desc); - } else { - const { value } = desc; - if (typeof value === 'function') { - desc.value = value.bind(src); - } - - const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); - if (varargsMethods.includes(name)) { - ReflectDefineProperty(dest, `${name}Apply`, { - value: applyBind(value, src), - }); - } - } - } -} - -function copyPrototype(src, dest, prefix) { - for (const key of ReflectOwnKeys(src)) { - const newKey = getNewKey(key); - const desc = ReflectGetOwnPropertyDescriptor(src, key); - if ('get' in desc) { - copyAccessor(dest, prefix, newKey, desc); - } else { - const { value } = desc; - if (typeof value === 'function') { - desc.value = uncurryThis(value); - } - - const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); - if (varargsMethods.includes(name)) { - ReflectDefineProperty(dest, `${name}Apply`, { - value: applyBind(value), - }); - } - } - } -} - -// Create copies of configurable value properties of the global object -[ - 'Proxy', - 'globalThis', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - primordials[name] = globalThis[name]; -}); - -// Create copies of URI handling functions -[ - decodeURI, - decodeURIComponent, - encodeURI, - encodeURIComponent, -].forEach((fn) => { - primordials[fn.name] = fn; -}); - -// Create copies of the namespace objects -[ - 'JSON', - 'Math', - 'Proxy', - 'Reflect', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - copyPropsRenamed(global[name], primordials, name); -}); - -// Create copies of intrinsic objects -[ - 'Array', - 'ArrayBuffer', - 'BigInt', - 'BigInt64Array', - 'BigUint64Array', - 'Boolean', - 'DataView', - 'Date', - 'Error', - 'EvalError', - 'Float32Array', - 'Float64Array', - 'Function', - 'Int16Array', - 'Int32Array', - 'Int8Array', - 'Map', - 'Number', - 'Object', - 'RangeError', - 'ReferenceError', - 'RegExp', - 'Set', - 'String', - 'Symbol', - 'SyntaxError', - 'TypeError', - 'URIError', - 'Uint16Array', - 'Uint32Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'WeakMap', - 'WeakSet', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - const original = global[name]; - primordials[name] = original; - copyPropsRenamed(original, primordials, name); - copyPrototype(original.prototype, primordials, `${name}Prototype`); -}); - -// Create copies of intrinsic objects that require a valid `this` to call -// static methods. -// Refs: https://www.ecma-international.org/ecma-262/#sec-promise.all -[ - 'Promise', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - const original = global[name]; - primordials[name] = original; - copyPropsRenamedBound(original, primordials, name); - copyPrototype(original.prototype, primordials, `${name}Prototype`); -}); - -// Create copies of abstract intrinsic objects that are not directly exposed -// on the global object. -// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object -[ - { name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) }, - { name: 'ArrayIterator', original: { - prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()), - } }, - { name: 'StringIterator', original: { - prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()), - } }, -].forEach(({ name, original }) => { - primordials[name] = original; - // The static %TypedArray% methods require a valid `this`, but can't be bound, - // as they need a subclass constructor as the receiver: - copyPrototype(original, primordials, name); - copyPrototype(original.prototype, primordials, `${name}Prototype`); -}); - -/* eslint-enable node-core/prefer-primordials */ - -const { - ArrayPrototypeForEach, - FunctionPrototypeCall, - Map, - ObjectFreeze, - ObjectSetPrototypeOf, - Set, - SymbolIterator, - WeakMap, - WeakSet, -} = primordials; - -// Because these functions are used by `makeSafe`, which is exposed -// on the `primordials` object, it's important to use const references -// to the primordials that they use: -const createSafeIterator = (factory, next) => { - class SafeIterator { - constructor(iterable) { - this._iterator = factory(iterable); - } - next() { - return next(this._iterator); - } - [SymbolIterator]() { - return this; - } - } - ObjectSetPrototypeOf(SafeIterator.prototype, null); - ObjectFreeze(SafeIterator.prototype); - ObjectFreeze(SafeIterator); - return SafeIterator; -}; - -primordials.SafeArrayIterator = createSafeIterator( - primordials.ArrayPrototypeSymbolIterator, - primordials.ArrayIteratorPrototypeNext -); -primordials.SafeStringIterator = createSafeIterator( - primordials.StringPrototypeSymbolIterator, - primordials.StringIteratorPrototypeNext -); - -const copyProps = (src, dest) => { - ArrayPrototypeForEach(ReflectOwnKeys(src), (key) => { - if (!ReflectGetOwnPropertyDescriptor(dest, key)) { - ReflectDefineProperty( - dest, - key, - ReflectGetOwnPropertyDescriptor(src, key)); - } - }); -}; - -const makeSafe = (unsafe, safe) => { - if (SymbolIterator in unsafe.prototype) { - const dummy = new unsafe(); - let next; // We can reuse the same `next` method. - - ArrayPrototypeForEach(ReflectOwnKeys(unsafe.prototype), (key) => { - if (!ReflectGetOwnPropertyDescriptor(safe.prototype, key)) { - const desc = ReflectGetOwnPropertyDescriptor(unsafe.prototype, key); - if ( - typeof desc.value === 'function' && - desc.value.length === 0 && - SymbolIterator in (FunctionPrototypeCall(desc.value, dummy) ?? {}) - ) { - const createIterator = uncurryThis(desc.value); - next = next ?? uncurryThis(createIterator(dummy).next); - const SafeIterator = createSafeIterator(createIterator, next); - desc.value = function() { - return new SafeIterator(this); - }; - } - ReflectDefineProperty(safe.prototype, key, desc); - } - }); - } else { - copyProps(unsafe.prototype, safe.prototype); - } - copyProps(unsafe, safe); - - ObjectSetPrototypeOf(safe.prototype, null); - ObjectFreeze(safe.prototype); - ObjectFreeze(safe); - return safe; -}; -primordials.makeSafe = makeSafe; - -// Subclass the constructors because we need to use their prototype -// methods later. -// Defining the `constructor` is necessary here to avoid the default -// constructor which uses the user-mutable `%ArrayIteratorPrototype%.next`. -primordials.SafeMap = makeSafe( - Map, - class SafeMap extends Map { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); -primordials.SafeWeakMap = makeSafe( - WeakMap, - class SafeWeakMap extends WeakMap { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); -primordials.SafeSet = makeSafe( - Set, - class SafeSet extends Set { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); -primordials.SafeWeakSet = makeSafe( - WeakSet, - class SafeWeakSet extends WeakSet { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); - -ObjectSetPrototypeOf(primordials, null); -ObjectFreeze(primordials); - -module.exports = primordials; diff --git a/node_modules/@pkgjs/parseargs/internal/util.js b/node_modules/@pkgjs/parseargs/internal/util.js deleted file mode 100644 index b9b8fe5b8d..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/util.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -// This is a placeholder for util.js in node.js land. - -const { - ObjectCreate, - ObjectFreeze, -} = require('./primordials'); - -const kEmptyObject = ObjectFreeze(ObjectCreate(null)); - -module.exports = { - kEmptyObject, -}; diff --git a/node_modules/@pkgjs/parseargs/internal/validators.js b/node_modules/@pkgjs/parseargs/internal/validators.js deleted file mode 100644 index b5ac4fb501..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/validators.js +++ /dev/null @@ -1,89 +0,0 @@ -'use strict'; - -// This file is a proxy of the original file located at: -// https://github.com/nodejs/node/blob/main/lib/internal/validators.js -// Every addition or modification to this file must be evaluated -// during the PR review. - -const { - ArrayIsArray, - ArrayPrototypeIncludes, - ArrayPrototypeJoin, -} = require('./primordials'); - -const { - codes: { - ERR_INVALID_ARG_TYPE - } -} = require('./errors'); - -function validateString(value, name) { - if (typeof value !== 'string') { - throw new ERR_INVALID_ARG_TYPE(name, 'String', value); - } -} - -function validateUnion(value, name, union) { - if (!ArrayPrototypeIncludes(union, value)) { - throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value); - } -} - -function validateBoolean(value, name) { - if (typeof value !== 'boolean') { - throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value); - } -} - -function validateArray(value, name) { - if (!ArrayIsArray(value)) { - throw new ERR_INVALID_ARG_TYPE(name, 'Array', value); - } -} - -function validateStringArray(value, name) { - validateArray(value, name); - for (let i = 0; i < value.length; i++) { - validateString(value[i], `${name}[${i}]`); - } -} - -function validateBooleanArray(value, name) { - validateArray(value, name); - for (let i = 0; i < value.length; i++) { - validateBoolean(value[i], `${name}[${i}]`); - } -} - -/** - * @param {unknown} value - * @param {string} name - * @param {{ - * allowArray?: boolean, - * allowFunction?: boolean, - * nullable?: boolean - * }} [options] - */ -function validateObject(value, name, options) { - const useDefaultOptions = options == null; - const allowArray = useDefaultOptions ? false : options.allowArray; - const allowFunction = useDefaultOptions ? false : options.allowFunction; - const nullable = useDefaultOptions ? false : options.nullable; - if ((!nullable && value === null) || - (!allowArray && ArrayIsArray(value)) || - (typeof value !== 'object' && ( - !allowFunction || typeof value !== 'function' - ))) { - throw new ERR_INVALID_ARG_TYPE(name, 'Object', value); - } -} - -module.exports = { - validateArray, - validateObject, - validateString, - validateStringArray, - validateUnion, - validateBoolean, - validateBooleanArray, -}; diff --git a/node_modules/@pkgjs/parseargs/package.json b/node_modules/@pkgjs/parseargs/package.json deleted file mode 100644 index 0bcc05c0d4..0000000000 --- a/node_modules/@pkgjs/parseargs/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@pkgjs/parseargs", - "version": "0.11.0", - "description": "Polyfill of future proposal for `util.parseArgs()`", - "engines": { - "node": ">=14" - }, - "main": "index.js", - "exports": { - ".": "./index.js", - "./package.json": "./package.json" - }, - "scripts": { - "coverage": "c8 --check-coverage tape 'test/*.js'", - "test": "c8 tape 'test/*.js'", - "posttest": "eslint .", - "fix": "npm run posttest -- --fix" - }, - "repository": { - "type": "git", - "url": "git@github.com:pkgjs/parseargs.git" - }, - "keywords": [], - "author": "", - "license": "MIT", - "bugs": { - "url": "https://github.com/pkgjs/parseargs/issues" - }, - "homepage": "https://github.com/pkgjs/parseargs#readme", - "devDependencies": { - "c8": "^7.10.0", - "eslint": "^8.2.0", - "eslint-plugin-node-core": "iansu/eslint-plugin-node-core", - "tape": "^5.2.2" - } -} diff --git a/node_modules/@pkgjs/parseargs/utils.js b/node_modules/@pkgjs/parseargs/utils.js deleted file mode 100644 index d7f420a233..0000000000 --- a/node_modules/@pkgjs/parseargs/utils.js +++ /dev/null @@ -1,198 +0,0 @@ -'use strict'; - -const { - ArrayPrototypeFind, - ObjectEntries, - ObjectPrototypeHasOwnProperty: ObjectHasOwn, - StringPrototypeCharAt, - StringPrototypeIncludes, - StringPrototypeStartsWith, -} = require('./internal/primordials'); - -const { - validateObject, -} = require('./internal/validators'); - -// These are internal utilities to make the parsing logic easier to read, and -// add lots of detail for the curious. They are in a separate file to allow -// unit testing, although that is not essential (this could be rolled into -// main file and just tested implicitly via API). -// -// These routines are for internal use, not for export to client. - -/** - * Return the named property, but only if it is an own property. - */ -function objectGetOwn(obj, prop) { - if (ObjectHasOwn(obj, prop)) - return obj[prop]; -} - -/** - * Return the named options property, but only if it is an own property. - */ -function optionsGetOwn(options, longOption, prop) { - if (ObjectHasOwn(options, longOption)) - return objectGetOwn(options[longOption], prop); -} - -/** - * Determines if the argument may be used as an option value. - * @example - * isOptionValue('V') // returns true - * isOptionValue('-v') // returns true (greedy) - * isOptionValue('--foo') // returns true (greedy) - * isOptionValue(undefined) // returns false - */ -function isOptionValue(value) { - if (value == null) return false; - - // Open Group Utility Conventions are that an option-argument - // is the argument after the option, and may start with a dash. - return true; // greedy! -} - -/** - * Detect whether there is possible confusion and user may have omitted - * the option argument, like `--port --verbose` when `port` of type:string. - * In strict mode we throw errors if value is option-like. - */ -function isOptionLikeValue(value) { - if (value == null) return false; - - return value.length > 1 && StringPrototypeCharAt(value, 0) === '-'; -} - -/** - * Determines if `arg` is just a short option. - * @example '-f' - */ -function isLoneShortOption(arg) { - return arg.length === 2 && - StringPrototypeCharAt(arg, 0) === '-' && - StringPrototypeCharAt(arg, 1) !== '-'; -} - -/** - * Determines if `arg` is a lone long option. - * @example - * isLoneLongOption('a') // returns false - * isLoneLongOption('-a') // returns false - * isLoneLongOption('--foo') // returns true - * isLoneLongOption('--foo=bar') // returns false - */ -function isLoneLongOption(arg) { - return arg.length > 2 && - StringPrototypeStartsWith(arg, '--') && - !StringPrototypeIncludes(arg, '=', 3); -} - -/** - * Determines if `arg` is a long option and value in the same argument. - * @example - * isLongOptionAndValue('--foo') // returns false - * isLongOptionAndValue('--foo=bar') // returns true - */ -function isLongOptionAndValue(arg) { - return arg.length > 2 && - StringPrototypeStartsWith(arg, '--') && - StringPrototypeIncludes(arg, '=', 3); -} - -/** - * Determines if `arg` is a short option group. - * - * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). - * One or more options without option-arguments, followed by at most one - * option that takes an option-argument, should be accepted when grouped - * behind one '-' delimiter. - * @example - * isShortOptionGroup('-a', {}) // returns false - * isShortOptionGroup('-ab', {}) // returns true - * // -fb is an option and a value, not a short option group - * isShortOptionGroup('-fb', { - * options: { f: { type: 'string' } } - * }) // returns false - * isShortOptionGroup('-bf', { - * options: { f: { type: 'string' } } - * }) // returns true - * // -bfb is an edge case, return true and caller sorts it out - * isShortOptionGroup('-bfb', { - * options: { f: { type: 'string' } } - * }) // returns true - */ -function isShortOptionGroup(arg, options) { - if (arg.length <= 2) return false; - if (StringPrototypeCharAt(arg, 0) !== '-') return false; - if (StringPrototypeCharAt(arg, 1) === '-') return false; - - const firstShort = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(firstShort, options); - return optionsGetOwn(options, longOption, 'type') !== 'string'; -} - -/** - * Determine if arg is a short string option followed by its value. - * @example - * isShortOptionAndValue('-a', {}); // returns false - * isShortOptionAndValue('-ab', {}); // returns false - * isShortOptionAndValue('-fFILE', { - * options: { foo: { short: 'f', type: 'string' }} - * }) // returns true - */ -function isShortOptionAndValue(arg, options) { - validateObject(options, 'options'); - - if (arg.length <= 2) return false; - if (StringPrototypeCharAt(arg, 0) !== '-') return false; - if (StringPrototypeCharAt(arg, 1) === '-') return false; - - const shortOption = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(shortOption, options); - return optionsGetOwn(options, longOption, 'type') === 'string'; -} - -/** - * Find the long option associated with a short option. Looks for a configured - * `short` and returns the short option itself if a long option is not found. - * @example - * findLongOptionForShort('a', {}) // returns 'a' - * findLongOptionForShort('b', { - * options: { bar: { short: 'b' } } - * }) // returns 'bar' - */ -function findLongOptionForShort(shortOption, options) { - validateObject(options, 'options'); - const longOptionEntry = ArrayPrototypeFind( - ObjectEntries(options), - ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption - ); - return longOptionEntry?.[0] ?? shortOption; -} - -/** - * Check if the given option includes a default value - * and that option has not been set by the input args. - * - * @param {string} longOption - long option name e.g. 'foo' - * @param {object} optionConfig - the option configuration properties - * @param {object} values - option values returned in `values` by parseArgs - */ -function useDefaultValueOption(longOption, optionConfig, values) { - return objectGetOwn(optionConfig, 'default') !== undefined && - values[longOption] === undefined; -} - -module.exports = { - findLongOptionForShort, - isLoneLongOption, - isLoneShortOption, - isLongOptionAndValue, - isOptionValue, - isOptionLikeValue, - isShortOptionAndValue, - isShortOptionGroup, - useDefaultValueOption, - objectGetOwn, - optionsGetOwn, -}; diff --git a/node_modules/@types/debug/LICENSE b/node_modules/@types/debug/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/debug/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/debug/README.md b/node_modules/@types/debug/README.md deleted file mode 100644 index e9563de5c1..0000000000 --- a/node_modules/@types/debug/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Installation -> `npm install --save @types/debug` - -# Summary -This package contains type definitions for debug (https://github.com/debug-js/debug). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug. -## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug/index.d.ts) -````ts -declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; - -export = debug; -export as namespace debug; - -declare namespace debug { - interface Debug { - (namespace: string): Debugger; - coerce: (val: any) => any; - disable: () => string; - enable: (namespaces: string) => void; - enabled: (namespaces: string) => boolean; - formatArgs: (this: Debugger, args: any[]) => void; - log: (...args: any[]) => any; - selectColor: (namespace: string) => string | number; - humanize: typeof import("ms"); - - names: RegExp[]; - skips: RegExp[]; - - formatters: Formatters; - - inspectOpts?: { - hideDate?: boolean | number | null; - colors?: boolean | number | null; - depth?: boolean | number | null; - showHidden?: boolean | number | null; - }; - } - - type IDebug = Debug; - - interface Formatters { - [formatter: string]: (v: any) => string; - } - - type IDebugger = Debugger; - - interface Debugger { - (formatter: any, ...args: any[]): void; - - color: string; - diff: number; - enabled: boolean; - log: (...args: any[]) => any; - namespace: string; - destroy: () => boolean; - extend: (namespace: string, delimiter?: string) => Debugger; - } -} - -```` - -### Additional Details - * Last updated: Thu, 09 Nov 2023 03:06:57 GMT - * Dependencies: [@types/ms](https://npmjs.com/package/@types/ms) - -# Credits -These definitions were written by [Seon-Wook Park](https://github.com/swook), [Gal Talmor](https://github.com/galtalmor), [John McLaughlin](https://github.com/zamb3zi), [Brasten Sager](https://github.com/brasten), [Nicolas Penin](https://github.com/npenin), [Kristian Brünn](https://github.com/kristianmitk), and [Caleb Gregory](https://github.com/calebgregory). diff --git a/node_modules/@types/debug/index.d.ts b/node_modules/@types/debug/index.d.ts deleted file mode 100644 index 3778eb8dbc..0000000000 --- a/node_modules/@types/debug/index.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; - -export = debug; -export as namespace debug; - -declare namespace debug { - interface Debug { - (namespace: string): Debugger; - coerce: (val: any) => any; - disable: () => string; - enable: (namespaces: string) => void; - enabled: (namespaces: string) => boolean; - formatArgs: (this: Debugger, args: any[]) => void; - log: (...args: any[]) => any; - selectColor: (namespace: string) => string | number; - humanize: typeof import("ms"); - - names: RegExp[]; - skips: RegExp[]; - - formatters: Formatters; - - inspectOpts?: { - hideDate?: boolean | number | null; - colors?: boolean | number | null; - depth?: boolean | number | null; - showHidden?: boolean | number | null; - }; - } - - type IDebug = Debug; - - interface Formatters { - [formatter: string]: (v: any) => string; - } - - type IDebugger = Debugger; - - interface Debugger { - (formatter: any, ...args: any[]): void; - - color: string; - diff: number; - enabled: boolean; - log: (...args: any[]) => any; - namespace: string; - destroy: () => boolean; - extend: (namespace: string, delimiter?: string) => Debugger; - } -} diff --git a/node_modules/@types/debug/package.json b/node_modules/@types/debug/package.json deleted file mode 100644 index 9127e48fe6..0000000000 --- a/node_modules/@types/debug/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@types/debug", - "version": "4.1.12", - "description": "TypeScript definitions for debug", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug", - "license": "MIT", - "contributors": [ - { - "name": "Seon-Wook Park", - "githubUsername": "swook", - "url": "https://github.com/swook" - }, - { - "name": "Gal Talmor", - "githubUsername": "galtalmor", - "url": "https://github.com/galtalmor" - }, - { - "name": "John McLaughlin", - "githubUsername": "zamb3zi", - "url": "https://github.com/zamb3zi" - }, - { - "name": "Brasten Sager", - "githubUsername": "brasten", - "url": "https://github.com/brasten" - }, - { - "name": "Nicolas Penin", - "githubUsername": "npenin", - "url": "https://github.com/npenin" - }, - { - "name": "Kristian Brünn", - "githubUsername": "kristianmitk", - "url": "https://github.com/kristianmitk" - }, - { - "name": "Caleb Gregory", - "githubUsername": "calebgregory", - "url": "https://github.com/calebgregory" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/debug" - }, - "scripts": {}, - "dependencies": { - "@types/ms": "*" - }, - "typesPublisherContentHash": "1053110a8e5e302f35fb57f45389304fa5a4f53bb8982b76b8065bcfd7083731", - "typeScriptVersion": "4.5" -} \ No newline at end of file diff --git a/node_modules/@types/katex/LICENSE b/node_modules/@types/katex/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/katex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/katex/README.md b/node_modules/@types/katex/README.md deleted file mode 100644 index bdaeab425b..0000000000 --- a/node_modules/@types/katex/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Installation -> `npm install --save @types/katex` - -# Summary -This package contains type definitions for katex (http://khan.github.io/KaTeX/). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex. - -### Additional Details - * Last updated: Mon, 20 Nov 2023 23:36:24 GMT - * Dependencies: none - -# Credits -These definitions were written by [Michael Randolph](https://github.com/mrand01), [Kevin Nguyen](https://github.com/knguyen0125), [bLue](https://github.com/dreamerblue), [Sebastian Weigand](https://github.com/s-weigand), [sapphi-red](https://github.com/sapphi-red), and [Stefaans](https://github.com/Stefaans). diff --git a/node_modules/@types/katex/contrib/auto-render.d.ts b/node_modules/@types/katex/contrib/auto-render.d.ts deleted file mode 100644 index 86db5d3b98..0000000000 --- a/node_modules/@types/katex/contrib/auto-render.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { KatexOptions } from "../index.js"; - -declare namespace renderMathInElement { - interface RenderMathInElementSpecificOptionsDelimiters { - /** - * A string which starts the math expression (i.e. the left delimiter) - */ - left: string; - /** - * A string which ends the math expression (i.e. the right delimiter) - */ - right: string; - /** - * A boolean of whether the math in the expression should be rendered in display mode or not - */ - display: boolean; - } - - interface RenderMathInElementSpecificOptions { - /** - * A list of delimiters to look for math - * - * @default [ - * {left: "$$", right: "$$", display: true}, - * {left: "\\(", right: "\\)", display: false}, - * {left: "\\[", right: "\\]", display: true} - * ] - */ - delimiters?: readonly RenderMathInElementSpecificOptionsDelimiters[] | undefined; - /** - * A list of DOM node types to ignore when recursing through - * - * @default ["script", "noscript", "style", "textarea", "pre", "code"] - */ - ignoredTags?: ReadonlyArray | undefined; - /** - * A list of DOM node class names to ignore when recursing through - * - * @default [] - */ - ignoredClasses?: string[] | undefined; - - /** - * A callback method returning a message and an error stack in case of an critical error during rendering - * @param msg Message generated by KaTeX - * @param err Caught error - * - * @default console.error - */ - errorCallback?(msg: string, err: Error): void; - } - - /** - * renderMathInElement options contain KaTeX render options and renderMathInElement specific options - */ - type RenderMathInElementOptions = KatexOptions & RenderMathInElementSpecificOptions; -} - -/** - * Auto-render TeX expressions in HTML element - * @param elem HTML element to auto-render - * @param options Render options - */ -declare function renderMathInElement(elem: HTMLElement, options?: renderMathInElement.RenderMathInElementOptions): void; - -export = renderMathInElement; -export as namespace renderMathInElement; diff --git a/node_modules/@types/katex/index.d.ts b/node_modules/@types/katex/index.d.ts deleted file mode 100644 index 59ec21f757..0000000000 --- a/node_modules/@types/katex/index.d.ts +++ /dev/null @@ -1,151 +0,0 @@ -export interface TrustContext { - command: string; - url: string; - protocol: string; -} - -/** Documentation: https://katex.org/docs/options.html */ -export interface KatexOptions { - /** - * If `true`, math will be rendered in display mode - * (math in display style and center math on page) - * - * If `false`, math will be rendered in inline mode - * @default false - */ - displayMode?: boolean | undefined; - /** - * Determines the markup language of the output. The valid choices are: - * - `html`: Outputs KaTeX in HTML only. - * - `mathml`: Outputs KaTeX in MathML only. - * - `htmlAndMathml`: Outputs HTML for visual rendering - * and includes MathML for accessibility. - * - * @default 'htmlAndMathml' - */ - output?: "html" | "mathml" | "htmlAndMathml" | undefined; - /** - * If `true`, display math has \tags rendered on the left - * instead of the right, like \usepackage[leqno]{amsmath} in LaTeX. - * - * @default false - */ - leqno?: boolean | undefined; - /** - * If `true`, display math renders flush left with a 2em left margin, - * like \documentclass[fleqn] in LaTeX with the amsmath package. - * - * @default false - */ - fleqn?: boolean | undefined; - /** - * If `true`, KaTeX will throw a `ParseError` when - * it encounters an unsupported command or invalid LaTex - * - * If `false`, KaTeX will render unsupported commands as - * text, and render invalid LaTeX as its source code with - * hover text giving the error, in color given by errorColor - * @default true - */ - throwOnError?: boolean | undefined; - /** - * A Color string given in format `#XXX` or `#XXXXXX` - */ - errorColor?: string | undefined; - /** - * A collection of custom macros. - * - * See `src/macros.js` for its usage - */ - macros?: any; - /** - * Specifies a minimum thickness, in ems, for fraction lines, - * \sqrt top lines, {array} vertical lines, \hline, \hdashline, - * \underline, \overline, and the borders of \fbox, \boxed, and - * \fcolorbox. - */ - minRuleThickness?: number | undefined; - /** - * If `true`, `\color` will work like LaTeX's `\textcolor` - * and takes 2 arguments - * - * If `false`, `\color` will work like LaTeX's `\color` - * and takes 1 argument - * - * In both cases, `\textcolor` works as in LaTeX - * - * @default false - */ - colorIsTextColor?: boolean | undefined; - /** - * All user-specified sizes will be caped to `maxSize` ems - * - * If set to Infinity, users can make elements and space - * arbitrarily large - * - * @default Infinity - */ - maxSize?: number | undefined; - /** - * Limit the number of macro expansions to specified number - * - * If set to `Infinity`, marco expander will try to fully expand - * as in LaTex - * - * @default 1000 - */ - maxExpand?: number | undefined; - /** - * If `false` or `"ignore"`, allow features that make - * writing in LaTex convenient but not supported by LaTex - * - * If `true` or `"error"`, throw an error for such transgressions - * - * If `"warn"`, warn about behavior via `console.warn` - * - * @default "warn" - */ - strict?: boolean | string | Function | undefined; - /** - * If `false` (do not trust input), prevent any commands that could enable adverse behavior, rendering them instead in errorColor. - * - * If `true` (trust input), allow all such commands. - * - * @default false - */ - trust?: boolean | ((context: TrustContext) => boolean) | undefined; - /** - * Place KaTeX code in the global group. - * - * @default false - */ - globalGroup?: boolean | undefined; -} - -/** - * KaTeX error, usually during parsing. - */ -export class ParseError implements Error { - constructor(message: string, lexer: any, position: number); - - name: string; - message: string; - position: number; -} - -/** - * Renders a TeX expression into the specified DOM element - * @param tex A TeX expression - * @param element The DOM element to render into - * @param options KaTeX options - */ -export function render(tex: string, element: HTMLElement, options?: KatexOptions): void; - -/** - * Renders a TeX expression into an HTML string - * @param tex A TeX expression - * @param options KaTeX options - */ -export function renderToString(tex: string, options?: KatexOptions): string; - -export as namespace katex; diff --git a/node_modules/@types/katex/package.json b/node_modules/@types/katex/package.json deleted file mode 100644 index 0128c544e1..0000000000 --- a/node_modules/@types/katex/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@types/katex", - "version": "0.16.7", - "description": "TypeScript definitions for katex", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex", - "license": "MIT", - "contributors": [ - { - "name": "Michael Randolph", - "githubUsername": "mrand01", - "url": "https://github.com/mrand01" - }, - { - "name": "Kevin Nguyen", - "githubUsername": "knguyen0125", - "url": "https://github.com/knguyen0125" - }, - { - "name": "bLue", - "githubUsername": "dreamerblue", - "url": "https://github.com/dreamerblue" - }, - { - "name": "Sebastian Weigand", - "githubUsername": "s-weigand", - "url": "https://github.com/s-weigand" - }, - { - "name": "sapphi-red", - "githubUsername": "sapphi-red", - "url": "https://github.com/sapphi-red" - }, - { - "name": "Stefaans", - "githubUsername": "Stefaans", - "url": "https://github.com/Stefaans" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/katex" - }, - "scripts": {}, - "dependencies": {}, - "typesPublisherContentHash": "5e09618b84fb6154b3cd4956ffc16513292057ac5cbfc7e16676474d3cecf13a", - "typeScriptVersion": "4.5" -} \ No newline at end of file diff --git a/node_modules/@types/ms/LICENSE b/node_modules/@types/ms/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/ms/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/ms/README.md b/node_modules/@types/ms/README.md deleted file mode 100644 index 1152869e50..0000000000 --- a/node_modules/@types/ms/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# Installation -> `npm install --save @types/ms` - -# Summary -This package contains type definitions for ms (https://github.com/vercel/ms). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms. -## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms/index.d.ts) -````ts -/** - * Short/Long format for `value`. - * - * @param {Number} value - * @param {{long: boolean}} options - * @return {String} - */ -declare function ms(value: number, options?: { long: boolean }): string; - -/** - * Parse the given `value` and return milliseconds. - * - * @param {ms.StringValue} value - * @return {Number} - */ -declare function ms(value: ms.StringValue): number; - -declare namespace ms { - // Unit, UnitAnyCase, and StringValue are backported from ms@3 - // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts - - type Unit = - | "Years" - | "Year" - | "Yrs" - | "Yr" - | "Y" - | "Weeks" - | "Week" - | "W" - | "Days" - | "Day" - | "D" - | "Hours" - | "Hour" - | "Hrs" - | "Hr" - | "H" - | "Minutes" - | "Minute" - | "Mins" - | "Min" - | "M" - | "Seconds" - | "Second" - | "Secs" - | "Sec" - | "s" - | "Milliseconds" - | "Millisecond" - | "Msecs" - | "Msec" - | "Ms"; - - type UnitAnyCase = Unit | Uppercase | Lowercase; - - type StringValue = - | `${number}` - | `${number}${UnitAnyCase}` - | `${number} ${UnitAnyCase}`; -} - -export = ms; - -```` - -### Additional Details - * Last updated: Thu, 16 Jan 2025 21:02:45 GMT - * Dependencies: none - -# Credits -These definitions were written by [Zhiyuan Wang](https://github.com/danny8002). diff --git a/node_modules/@types/ms/index.d.ts b/node_modules/@types/ms/index.d.ts deleted file mode 100644 index b1b1f5159a..0000000000 --- a/node_modules/@types/ms/index.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Short/Long format for `value`. - * - * @param {Number} value - * @param {{long: boolean}} options - * @return {String} - */ -declare function ms(value: number, options?: { long: boolean }): string; - -/** - * Parse the given `value` and return milliseconds. - * - * @param {ms.StringValue} value - * @return {Number} - */ -declare function ms(value: ms.StringValue): number; - -declare namespace ms { - // Unit, UnitAnyCase, and StringValue are backported from ms@3 - // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts - - type Unit = - | "Years" - | "Year" - | "Yrs" - | "Yr" - | "Y" - | "Weeks" - | "Week" - | "W" - | "Days" - | "Day" - | "D" - | "Hours" - | "Hour" - | "Hrs" - | "Hr" - | "H" - | "Minutes" - | "Minute" - | "Mins" - | "Min" - | "M" - | "Seconds" - | "Second" - | "Secs" - | "Sec" - | "s" - | "Milliseconds" - | "Millisecond" - | "Msecs" - | "Msec" - | "Ms"; - - type UnitAnyCase = Unit | Uppercase | Lowercase; - - type StringValue = - | `${number}` - | `${number}${UnitAnyCase}` - | `${number} ${UnitAnyCase}`; -} - -export = ms; diff --git a/node_modules/@types/ms/package.json b/node_modules/@types/ms/package.json deleted file mode 100644 index 0f547d02ca..0000000000 --- a/node_modules/@types/ms/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@types/ms", - "version": "2.1.0", - "description": "TypeScript definitions for ms", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms", - "license": "MIT", - "contributors": [ - { - "name": "Zhiyuan Wang", - "githubUsername": "danny8002", - "url": "https://github.com/danny8002" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/ms" - }, - "scripts": {}, - "dependencies": {}, - "peerDependencies": {}, - "typesPublisherContentHash": "2c8651ce1714fdc6bcbc0f262c93a790f1d127fb1c2dc8edbb583decef56fd39", - "typeScriptVersion": "5.0" -} \ No newline at end of file diff --git a/node_modules/@types/unist/LICENSE b/node_modules/@types/unist/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/unist/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/unist/README.md b/node_modules/@types/unist/README.md deleted file mode 100644 index b038f89e90..0000000000 --- a/node_modules/@types/unist/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Installation -> `npm install --save @types/unist` - -# Summary -This package contains type definitions for unist (https://github.com/syntax-tree/unist). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2. -## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2/index.d.ts) -````ts -/** - * Syntactic units in unist syntax trees are called nodes. - * - * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. - */ -export interface Node { - /** - * The variant of a node. - */ - type: string; - - /** - * Information from the ecosystem. - */ - data?: TData | undefined; - - /** - * Location of a node in a source document. - * Must not be present if a node is generated. - */ - position?: Position | undefined; -} - -/** - * Information associated by the ecosystem with the node. - * Space is guaranteed to never be specified by unist or specifications - * implementing unist. - */ -export interface Data { - [key: string]: unknown; -} - -/** - * Location of a node in a source file. - */ -export interface Position { - /** - * Place of the first character of the parsed source region. - */ - start: Point; - - /** - * Place of the first character after the parsed source region. - */ - end: Point; - - /** - * Start column at each index (plus start line) in the source region, - * for elements that span multiple lines. - */ - indent?: number[] | undefined; -} - -/** - * One place in a source file. - */ -export interface Point { - /** - * Line in a source file (1-indexed integer). - */ - line: number; - - /** - * Column in a source file (1-indexed integer). - */ - column: number; - /** - * Character in a source file (0-indexed integer). - */ - offset?: number | undefined; -} - -/** - * Util for extracting type of {@link Node.data} - * - * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. - * - * @example `NodeData>` -> `{ key: string }` - */ -export type NodeData> = TNode extends Node ? TData : never; - -/** - * Nodes containing other nodes. - * - * @typeParam ChildNode Node item of {@link Parent.children} - */ -export interface Parent = Node, TData extends object = NodeData> - extends Node -{ - /** - * List representing the children of a node. - */ - children: ChildNode[]; -} - -/** - * Nodes containing a value. - * - * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node - */ -export interface Literal extends Node { - value: Value; -} - -```` - -### Additional Details - * Last updated: Thu, 15 Aug 2024 02:18:53 GMT - * Dependencies: none - -# Credits -These definitions were written by [bizen241](https://github.com/bizen241), [Jun Lu](https://github.com/lujun2), [Hernan Rajchert](https://github.com/hrajchert), [Titus Wormer](https://github.com/wooorm), [Junyoung Choi](https://github.com/rokt33r), [Ben Moon](https://github.com/GuiltyDolphin), and [JounQin](https://github.com/JounQin). diff --git a/node_modules/@types/unist/index.d.ts b/node_modules/@types/unist/index.d.ts deleted file mode 100644 index b019d389d1..0000000000 --- a/node_modules/@types/unist/index.d.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Syntactic units in unist syntax trees are called nodes. - * - * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. - */ -export interface Node { - /** - * The variant of a node. - */ - type: string; - - /** - * Information from the ecosystem. - */ - data?: TData | undefined; - - /** - * Location of a node in a source document. - * Must not be present if a node is generated. - */ - position?: Position | undefined; -} - -/** - * Information associated by the ecosystem with the node. - * Space is guaranteed to never be specified by unist or specifications - * implementing unist. - */ -export interface Data { - [key: string]: unknown; -} - -/** - * Location of a node in a source file. - */ -export interface Position { - /** - * Place of the first character of the parsed source region. - */ - start: Point; - - /** - * Place of the first character after the parsed source region. - */ - end: Point; - - /** - * Start column at each index (plus start line) in the source region, - * for elements that span multiple lines. - */ - indent?: number[] | undefined; -} - -/** - * One place in a source file. - */ -export interface Point { - /** - * Line in a source file (1-indexed integer). - */ - line: number; - - /** - * Column in a source file (1-indexed integer). - */ - column: number; - /** - * Character in a source file (0-indexed integer). - */ - offset?: number | undefined; -} - -/** - * Util for extracting type of {@link Node.data} - * - * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. - * - * @example `NodeData>` -> `{ key: string }` - */ -export type NodeData> = TNode extends Node ? TData : never; - -/** - * Nodes containing other nodes. - * - * @typeParam ChildNode Node item of {@link Parent.children} - */ -export interface Parent = Node, TData extends object = NodeData> - extends Node -{ - /** - * List representing the children of a node. - */ - children: ChildNode[]; -} - -/** - * Nodes containing a value. - * - * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node - */ -export interface Literal extends Node { - value: Value; -} diff --git a/node_modules/@types/unist/package.json b/node_modules/@types/unist/package.json deleted file mode 100644 index 01cb5b0d4e..0000000000 --- a/node_modules/@types/unist/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "@types/unist", - "version": "2.0.11", - "description": "TypeScript definitions for unist", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist", - "license": "MIT", - "contributors": [ - { - "name": "bizen241", - "githubUsername": "bizen241", - "url": "https://github.com/bizen241" - }, - { - "name": "Jun Lu", - "githubUsername": "lujun2", - "url": "https://github.com/lujun2" - }, - { - "name": "Hernan Rajchert", - "githubUsername": "hrajchert", - "url": "https://github.com/hrajchert" - }, - { - "name": "Titus Wormer", - "githubUsername": "wooorm", - "url": "https://github.com/wooorm" - }, - { - "name": "Junyoung Choi", - "githubUsername": "rokt33r", - "url": "https://github.com/rokt33r" - }, - { - "name": "Ben Moon", - "githubUsername": "GuiltyDolphin", - "url": "https://github.com/GuiltyDolphin" - }, - { - "name": "JounQin", - "githubUsername": "JounQin", - "url": "https://github.com/JounQin" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/unist" - }, - "scripts": {}, - "dependencies": {}, - "typesPublisherContentHash": "6e36525a6db49ae5517fe0751796ca8f6c65099098415046d4f1ad6c2ef1a33c", - "typeScriptVersion": "4.8" -} \ No newline at end of file diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 7d562e9ca9..0000000000 --- a/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -export type Options = { - /** - Match only the first ANSI escape. - - @default false - */ - readonly onlyFirst: boolean; -}; - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex from 'ansi-regex'; - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -export default function ansiRegex(options?: Options): RegExp; diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js deleted file mode 100644 index ddfdba39a7..0000000000 --- a/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -export default function ansiRegex({onlyFirst = false} = {}) { - // Valid string terminator sequences are BEL, ESC\, and 0x9c - const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)'; - const pattern = [ - `[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))', - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -} diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json deleted file mode 100644 index 49f3f61021..0000000000 --- a/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "ansi-regex", - "version": "6.1.0", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "funding": "https://github.com/chalk/ansi-regex?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "types": "./index.d.ts", - "sideEffects": false, - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ansi-escapes": "^5.0.0", - "ava": "^3.15.0", - "tsd": "^0.21.0", - "xo": "^0.54.2" - } -} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md deleted file mode 100644 index 1e91ee10f5..0000000000 --- a/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - -## Install - -```sh -npm install ansi-regex -``` - -## Usage - -```js -import ansiRegex from 'ansi-regex'; - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`\ -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) diff --git a/node_modules/ansi-styles/index.d.ts b/node_modules/ansi-styles/index.d.ts deleted file mode 100644 index 58f133abe9..0000000000 --- a/node_modules/ansi-styles/index.d.ts +++ /dev/null @@ -1,236 +0,0 @@ -export interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention - /** - The ANSI terminal control sequence for starting this style. - */ - readonly open: string; - - /** - The ANSI terminal control sequence for ending this style. - */ - readonly close: string; -} - -export interface ColorBase { - /** - The ANSI terminal control sequence for ending this color. - */ - readonly close: string; - - ansi(code: number): string; - - ansi256(code: number): string; - - ansi16m(red: number, green: number, blue: number): string; -} - -export interface Modifier { - /** - Resets the current color chain. - */ - readonly reset: CSPair; - - /** - Make text bold. - */ - readonly bold: CSPair; - - /** - Emitting only a small amount of light. - */ - readonly dim: CSPair; - - /** - Make text italic. (Not widely supported) - */ - readonly italic: CSPair; - - /** - Make text underline. (Not widely supported) - */ - readonly underline: CSPair; - - /** - Make text overline. - - Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash. - */ - readonly overline: CSPair; - - /** - Inverse background and foreground colors. - */ - readonly inverse: CSPair; - - /** - Prints the text, but makes it invisible. - */ - readonly hidden: CSPair; - - /** - Puts a horizontal line through the center of the text. (Not widely supported) - */ - readonly strikethrough: CSPair; -} - -export interface ForegroundColor { - readonly black: CSPair; - readonly red: CSPair; - readonly green: CSPair; - readonly yellow: CSPair; - readonly blue: CSPair; - readonly cyan: CSPair; - readonly magenta: CSPair; - readonly white: CSPair; - - /** - Alias for `blackBright`. - */ - readonly gray: CSPair; - - /** - Alias for `blackBright`. - */ - readonly grey: CSPair; - - readonly blackBright: CSPair; - readonly redBright: CSPair; - readonly greenBright: CSPair; - readonly yellowBright: CSPair; - readonly blueBright: CSPair; - readonly cyanBright: CSPair; - readonly magentaBright: CSPair; - readonly whiteBright: CSPair; -} - -export interface BackgroundColor { - readonly bgBlack: CSPair; - readonly bgRed: CSPair; - readonly bgGreen: CSPair; - readonly bgYellow: CSPair; - readonly bgBlue: CSPair; - readonly bgCyan: CSPair; - readonly bgMagenta: CSPair; - readonly bgWhite: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGray: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGrey: CSPair; - - readonly bgBlackBright: CSPair; - readonly bgRedBright: CSPair; - readonly bgGreenBright: CSPair; - readonly bgYellowBright: CSPair; - readonly bgBlueBright: CSPair; - readonly bgCyanBright: CSPair; - readonly bgMagentaBright: CSPair; - readonly bgWhiteBright: CSPair; -} - -export interface ConvertColor { - /** - Convert from the RGB color space to the ANSI 256 color space. - - @param red - (`0...255`) - @param green - (`0...255`) - @param blue - (`0...255`) - */ - rgbToAnsi256(red: number, green: number, blue: number): number; - - /** - Convert from the RGB HEX color space to the RGB color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hexToRgb(hex: string): [red: number, green: number, blue: number]; - - /** - Convert from the RGB HEX color space to the ANSI 256 color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hexToAnsi256(hex: string): number; - - /** - Convert from the ANSI 256 color space to the ANSI 16 color space. - - @param code - A number representing the ANSI 256 color. - */ - ansi256ToAnsi(code: number): number; - - /** - Convert from the RGB color space to the ANSI 16 color space. - - @param red - (`0...255`) - @param green - (`0...255`) - @param blue - (`0...255`) - */ - rgbToAnsi(red: number, green: number, blue: number): number; - - /** - Convert from the RGB HEX color space to the ANSI 16 color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hexToAnsi(hex: string): number; -} - -/** -Basic modifier names. -*/ -export type ModifierName = keyof Modifier; - -/** -Basic foreground color names. - -[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) -*/ -export type ForegroundColorName = keyof ForegroundColor; - -/** -Basic background color names. - -[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) -*/ -export type BackgroundColorName = keyof BackgroundColor; - -/** -Basic color names. The combination of foreground and background color names. - -[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) -*/ -export type ColorName = ForegroundColorName | BackgroundColorName; - -/** -Basic modifier names. -*/ -export const modifierNames: readonly ModifierName[]; - -/** -Basic foreground color names. -*/ -export const foregroundColorNames: readonly ForegroundColorName[]; - -/** -Basic background color names. -*/ -export const backgroundColorNames: readonly BackgroundColorName[]; - -/* -Basic color names. The combination of foreground and background color names. -*/ -export const colorNames: readonly ColorName[]; - -declare const ansiStyles: { - readonly modifier: Modifier; - readonly color: ColorBase & ForegroundColor; - readonly bgColor: ColorBase & BackgroundColor; - readonly codes: ReadonlyMap; -} & ForegroundColor & BackgroundColor & Modifier & ConvertColor; - -export default ansiStyles; diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js deleted file mode 100644 index d7bede44b7..0000000000 --- a/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,223 +0,0 @@ -const ANSI_BACKGROUND_OFFSET = 10; - -const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`; - -const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`; - -const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`; - -const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - overline: [53, 55], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29], - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - - // Bright color - blackBright: [90, 39], - gray: [90, 39], // Alias of `blackBright` - grey: [90, 39], // Alias of `blackBright` - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39], - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgGray: [100, 49], // Alias of `bgBlackBright` - bgGrey: [100, 49], // Alias of `bgBlackBright` - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49], - }, -}; - -export const modifierNames = Object.keys(styles.modifier); -export const foregroundColorNames = Object.keys(styles.color); -export const backgroundColorNames = Object.keys(styles.bgColor); -export const colorNames = [...foregroundColorNames, ...backgroundColorNames]; - -function assembleStyles() { - const codes = new Map(); - - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m`, - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false, - }); - } - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false, - }); - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = wrapAnsi16(); - styles.color.ansi256 = wrapAnsi256(); - styles.color.ansi16m = wrapAnsi16m(); - styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET); - styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); - styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); - - // From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js - Object.defineProperties(styles, { - rgbToAnsi256: { - value: (red, green, blue) => { - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (red === green && green === blue) { - if (red < 8) { - return 16; - } - - if (red > 248) { - return 231; - } - - return Math.round(((red - 8) / 247) * 24) + 232; - } - - return 16 - + (36 * Math.round(red / 255 * 5)) - + (6 * Math.round(green / 255 * 5)) - + Math.round(blue / 255 * 5); - }, - enumerable: false, - }, - hexToRgb: { - value: hex => { - const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16)); - if (!matches) { - return [0, 0, 0]; - } - - let [colorString] = matches; - - if (colorString.length === 3) { - colorString = [...colorString].map(character => character + character).join(''); - } - - const integer = Number.parseInt(colorString, 16); - - return [ - /* eslint-disable no-bitwise */ - (integer >> 16) & 0xFF, - (integer >> 8) & 0xFF, - integer & 0xFF, - /* eslint-enable no-bitwise */ - ]; - }, - enumerable: false, - }, - hexToAnsi256: { - value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)), - enumerable: false, - }, - ansi256ToAnsi: { - value: code => { - if (code < 8) { - return 30 + code; - } - - if (code < 16) { - return 90 + (code - 8); - } - - let red; - let green; - let blue; - - if (code >= 232) { - red = (((code - 232) * 10) + 8) / 255; - green = red; - blue = red; - } else { - code -= 16; - - const remainder = code % 36; - - red = Math.floor(code / 36) / 5; - green = Math.floor(remainder / 6) / 5; - blue = (remainder % 6) / 5; - } - - const value = Math.max(red, green, blue) * 2; - - if (value === 0) { - return 30; - } - - // eslint-disable-next-line no-bitwise - let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red)); - - if (value === 2) { - result += 60; - } - - return result; - }, - enumerable: false, - }, - rgbToAnsi: { - value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), - enumerable: false, - }, - hexToAnsi: { - value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), - enumerable: false, - }, - }); - - return styles; -} - -const ansiStyles = assembleStyles(); - -export default ansiStyles; diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/ansi-styles/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json deleted file mode 100644 index 6cd3ca5bf9..0000000000 --- a/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "ansi-styles", - "version": "6.2.1", - "description": "ANSI escape codes for styling strings in the terminal", - "license": "MIT", - "repository": "chalk/ansi-styles", - "funding": "https://github.com/chalk/ansi-styles?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd", - "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "devDependencies": { - "ava": "^3.15.0", - "svg-term-cli": "^2.1.1", - "tsd": "^0.19.0", - "xo": "^0.47.0" - } -} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md deleted file mode 100644 index 6d04183f0c..0000000000 --- a/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,173 +0,0 @@ -# ansi-styles - -> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - -![](screenshot.png) - -## Install - -```sh -npm install ansi-styles -``` - -## Usage - -```js -import styles from 'ansi-styles'; - -console.log(`${styles.green.open}Hello world!${styles.green.close}`); - - -// Color conversion between 256/truecolor -// NOTE: When converting from truecolor to 256 colors, the original color -// may be degraded to fit the new color palette. This means terminals -// that do not support 16 million colors will best-match the -// original color. -console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`) -console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`) -console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`) -``` - -## API - -### `open` and `close` - -Each style has an `open` and `close` property. - -### `modifierNames`, `foregroundColorNames`, `backgroundColorNames`, and `colorNames` - -All supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`. - -This can be useful if you need to validate input: - -```js -import {modifierNames, foregroundColorNames} from 'ansi-styles'; - -console.log(modifierNames.includes('bold')); -//=> true - -console.log(foregroundColorNames.includes('pink')); -//=> false -``` - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(Not widely supported)* -- `underline` -- `overline` *Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.* -- `inverse` -- `hidden` -- `strikethrough` *(Not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `blackBright` (alias: `gray`, `grey`) -- `redBright` -- `greenBright` -- `yellowBright` -- `blueBright` -- `magentaBright` -- `cyanBright` -- `whiteBright` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` -- `bgBlackBright` (alias: `bgGray`, `bgGrey`) -- `bgRedBright` -- `bgGreenBright` -- `bgYellowBright` -- `bgBlueBright` -- `bgMagentaBright` -- `bgCyanBright` -- `bgWhiteBright` - -## Advanced usage - -By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `styles.modifier` -- `styles.color` -- `styles.bgColor` - -###### Example - -```js -import styles from 'ansi-styles'; - -console.log(styles.color.green.open); -``` - -Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `styles.codes`, which returns a `Map` with the open codes as keys and close codes as values. - -###### Example - -```js -import styles from 'ansi-styles'; - -console.log(styles.codes.get(36)); -//=> 39 -``` - -## 16 / 256 / 16 million (TrueColor) support - -`ansi-styles` allows converting between various color formats and ANSI escapes, with support for 16, 256 and [16 million colors](https://gist.github.com/XVilka/8346728). - -The following color spaces are supported: - -- `rgb` -- `hex` -- `ansi256` -- `ansi` - -To use these, call the associated conversion function with the intended output, for example: - -```js -import styles from 'ansi-styles'; - -styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code -styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code - -styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code -styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code - -styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code -styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code -``` - -## Related - -- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - -## For enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md deleted file mode 100644 index dc39ed6952..0000000000 --- a/node_modules/argparse/CHANGELOG.md +++ /dev/null @@ -1,216 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - - -## [2.0.1] - 2020-08-29 -### Fixed -- Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150. - - -## [2.0.0] - 2020-08-14 -### Changed -- Full rewrite. Now port from python 3.9.0 & more precise following. - See [doc](./doc) for difference and migration info. -- node.js 10+ required -- Removed most of local docs in favour of original ones. - - -## [1.0.10] - 2018-02-15 -### Fixed -- Use .concat instead of + for arrays, #122. - - -## [1.0.9] - 2016-09-29 -### Changed -- Rerelease after 1.0.8 - deps cleanup. - - -## [1.0.8] - 2016-09-29 -### Changed -- Maintenance (deps bump, fix node 6.5+ tests, coverage report). - - -## [1.0.7] - 2016-03-17 -### Changed -- Teach `addArgument` to accept string arg names. #97, @tomxtobin. - - -## [1.0.6] - 2016-02-06 -### Changed -- Maintenance: moved to eslint & updated CS. - - -## [1.0.5] - 2016-02-05 -### Changed -- Removed lodash dependency to significantly reduce install size. - Thanks to @mourner. - - -## [1.0.4] - 2016-01-17 -### Changed -- Maintenance: lodash update to 4.0.0. - - -## [1.0.3] - 2015-10-27 -### Fixed -- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. - - -## [1.0.2] - 2015-03-22 -### Changed -- Relaxed lodash version dependency. - - -## [1.0.1] - 2015-02-20 -### Changed -- Changed dependencies to be compatible with ancient nodejs. - - -## [1.0.0] - 2015-02-19 -### Changed -- Maintenance release. -- Replaced `underscore` with `lodash`. -- Bumped version to 1.0.0 to better reflect semver meaning. -- HISTORY.md -> CHANGELOG.md - - -## [0.1.16] - 2013-12-01 -### Changed -- Maintenance release. Updated dependencies and docs. - - -## [0.1.15] - 2013-05-13 -### Fixed -- Fixed #55, @trebor89 - - -## [0.1.14] - 2013-05-12 -### Fixed -- Fixed #62, @maxtaco - - -## [0.1.13] - 2013-04-08 -### Changed -- Added `.npmignore` to reduce package size - - -## [0.1.12] - 2013-02-10 -### Fixed -- Fixed conflictHandler (#46), @hpaulj - - -## [0.1.11] - 2013-02-07 -### Added -- Added 70+ tests (ported from python), @hpaulj -- Added conflictHandler, @applepicke -- Added fromfilePrefixChar, @hpaulj - -### Fixed -- Multiple bugfixes, @hpaulj - - -## [0.1.10] - 2012-12-30 -### Added -- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) - support, thanks to @hpaulj - -### Fixed -- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj - - -## [0.1.9] - 2012-12-27 -### Fixed -- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj -- Fixed default value behavior with `*` positionals, thanks to @hpaulj -- Improve `getDefault()` behavior, thanks to @hpaulj -- Improve negative argument parsing, thanks to @hpaulj - - -## [0.1.8] - 2012-12-01 -### Fixed -- Fixed parser parents (issue #19), thanks to @hpaulj -- Fixed negative argument parse (issue #20), thanks to @hpaulj - - -## [0.1.7] - 2012-10-14 -### Fixed -- Fixed 'choices' argument parse (issue #16) -- Fixed stderr output (issue #15) - - -## [0.1.6] - 2012-09-09 -### Fixed -- Fixed check for conflict of options (thanks to @tomxtobin) - - -## [0.1.5] - 2012-09-03 -### Fixed -- Fix parser #setDefaults method (thanks to @tomxtobin) - - -## [0.1.4] - 2012-07-30 -### Fixed -- Fixed pseudo-argument support (thanks to @CGamesPlay) -- Fixed addHelp default (should be true), if not set (thanks to @benblank) - - -## [0.1.3] - 2012-06-27 -### Fixed -- Fixed formatter api name: Formatter -> HelpFormatter - - -## [0.1.2] - 2012-05-29 -### Fixed -- Removed excess whitespace in help -- Fixed error reporting, when parcer with subcommands - called with empty arguments - -### Added -- Added basic tests - - -## [0.1.1] - 2012-05-23 -### Fixed -- Fixed line wrapping in help formatter -- Added better error reporting on invalid arguments - - -## [0.1.0] - 2012-05-16 -### Added -- First release. - - -[2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0 -[1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10 -[1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9 -[1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8 -[1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7 -[1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6 -[1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5 -[1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4 -[1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3 -[1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2 -[1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1 -[1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0 -[0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16 -[0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15 -[0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14 -[0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13 -[0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12 -[0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11 -[0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10 -[0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9 -[0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8 -[0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7 -[0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6 -[0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5 -[0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4 -[0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3 -[0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2 -[0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1 -[0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0 diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE deleted file mode 100644 index 66a3ac80d7..0000000000 --- a/node_modules/argparse/LICENSE +++ /dev/null @@ -1,254 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations, which became -Zope Corporation. In 2001, the Python Software Foundation (PSF, see -https://www.python.org/psf/) was formed, a non-profit organization -created specifically to own Python-related Intellectual Property. -Zope Corporation was a sponsoring member of the PSF. - -All Python releases are Open Source (see http://www.opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2 and above 2.1.1 2001-now PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md deleted file mode 100644 index 550b5c9b7b..0000000000 --- a/node_modules/argparse/README.md +++ /dev/null @@ -1,84 +0,0 @@ -argparse -======== - -[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) -[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) - -CLI arguments parser for node.js, with [sub-commands](https://docs.python.org/3.9/library/argparse.html#sub-commands) support. Port of python's [argparse](http://docs.python.org/dev/library/argparse.html) (version [3.9.0](https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py)). - -**Difference with original.** - -- JS has no keyword arguments support. - - Pass options instead: `new ArgumentParser({ description: 'example', add_help: true })`. -- JS has no python's types `int`, `float`, ... - - Use string-typed names: `.add_argument('-b', { type: 'int', help: 'help' })`. -- `%r` format specifier uses `require('util').inspect()`. - -More details in [doc](./doc). - - -Example -------- - -`test.js` file: - -```javascript -#!/usr/bin/env node -'use strict'; - -const { ArgumentParser } = require('argparse'); -const { version } = require('./package.json'); - -const parser = new ArgumentParser({ - description: 'Argparse example' -}); - -parser.add_argument('-v', '--version', { action: 'version', version }); -parser.add_argument('-f', '--foo', { help: 'foo bar' }); -parser.add_argument('-b', '--bar', { help: 'bar foo' }); -parser.add_argument('--baz', { help: 'baz bar' }); - -console.dir(parser.parse_args()); -``` - -Display help: - -``` -$ ./test.js -h -usage: test.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] - -Argparse example - -optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -f FOO, --foo FOO foo bar - -b BAR, --bar BAR bar foo - --baz BAZ baz bar -``` - -Parse arguments: - -``` -$ ./test.js -f=3 --bar=4 --baz 5 -{ foo: '3', bar: '4', baz: '5' } -``` - - -API docs --------- - -Since this is a port with minimal divergence, there's no separate documentation. -Use original one instead, with notes about difference. - -1. [Original doc](https://docs.python.org/3.9/library/argparse.html). -2. [Original tutorial](https://docs.python.org/3.9/howto/argparse.html). -3. [Difference with python](./doc). - - -argparse for enterprise ------------------------ - -Available as part of the Tidelift Subscription - -The maintainers of argparse and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-argparse?utm_source=npm-argparse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/argparse.js b/node_modules/argparse/argparse.js deleted file mode 100644 index 2b8c8c6317..0000000000 --- a/node_modules/argparse/argparse.js +++ /dev/null @@ -1,3707 +0,0 @@ -// Port of python's argparse module, version 3.9.0: -// https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py - -'use strict' - -// Copyright (C) 2010-2020 Python Software Foundation. -// Copyright (C) 2020 argparse.js authors - -/* - * Command-line parsing library - * - * This module is an optparse-inspired command-line parsing library that: - * - * - handles both optional and positional arguments - * - produces highly informative usage messages - * - supports parsers that dispatch to sub-parsers - * - * The following is a simple usage example that sums integers from the - * command-line and writes the result to a file:: - * - * parser = argparse.ArgumentParser( - * description='sum the integers at the command line') - * parser.add_argument( - * 'integers', metavar='int', nargs='+', type=int, - * help='an integer to be summed') - * parser.add_argument( - * '--log', default=sys.stdout, type=argparse.FileType('w'), - * help='the file where the sum should be written') - * args = parser.parse_args() - * args.log.write('%s' % sum(args.integers)) - * args.log.close() - * - * The module contains the following public classes: - * - * - ArgumentParser -- The main entry point for command-line parsing. As the - * example above shows, the add_argument() method is used to populate - * the parser with actions for optional and positional arguments. Then - * the parse_args() method is invoked to convert the args at the - * command-line into an object with attributes. - * - * - ArgumentError -- The exception raised by ArgumentParser objects when - * there are errors with the parser's actions. Errors raised while - * parsing the command-line are caught by ArgumentParser and emitted - * as command-line messages. - * - * - FileType -- A factory for defining types of files to be created. As the - * example above shows, instances of FileType are typically passed as - * the type= argument of add_argument() calls. - * - * - Action -- The base class for parser actions. Typically actions are - * selected by passing strings like 'store_true' or 'append_const' to - * the action= argument of add_argument(). However, for greater - * customization of ArgumentParser actions, subclasses of Action may - * be defined and passed as the action= argument. - * - * - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, - * ArgumentDefaultsHelpFormatter -- Formatter classes which - * may be passed as the formatter_class= argument to the - * ArgumentParser constructor. HelpFormatter is the default, - * RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser - * not to change the formatting for help text, and - * ArgumentDefaultsHelpFormatter adds information about argument defaults - * to the help. - * - * All other classes in this module are considered implementation details. - * (Also note that HelpFormatter and RawDescriptionHelpFormatter are only - * considered public as object names -- the API of the formatter objects is - * still considered an implementation detail.) - */ - -const SUPPRESS = '==SUPPRESS==' - -const OPTIONAL = '?' -const ZERO_OR_MORE = '*' -const ONE_OR_MORE = '+' -const PARSER = 'A...' -const REMAINDER = '...' -const _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args' - - -// ================================== -// Utility functions used for porting -// ================================== -const assert = require('assert') -const util = require('util') -const fs = require('fs') -const sub = require('./lib/sub') -const path = require('path') -const repr = util.inspect - -function get_argv() { - // omit first argument (which is assumed to be interpreter - `node`, `coffee`, `ts-node`, etc.) - return process.argv.slice(1) -} - -function get_terminal_size() { - return { - columns: +process.env.COLUMNS || process.stdout.columns || 80 - } -} - -function hasattr(object, name) { - return Object.prototype.hasOwnProperty.call(object, name) -} - -function getattr(object, name, value) { - return hasattr(object, name) ? object[name] : value -} - -function setattr(object, name, value) { - object[name] = value -} - -function setdefault(object, name, value) { - if (!hasattr(object, name)) object[name] = value - return object[name] -} - -function delattr(object, name) { - delete object[name] -} - -function range(from, to, step=1) { - // range(10) is equivalent to range(0, 10) - if (arguments.length === 1) [ to, from ] = [ from, 0 ] - if (typeof from !== 'number' || typeof to !== 'number' || typeof step !== 'number') { - throw new TypeError('argument cannot be interpreted as an integer') - } - if (step === 0) throw new TypeError('range() arg 3 must not be zero') - - let result = [] - if (step > 0) { - for (let i = from; i < to; i += step) result.push(i) - } else { - for (let i = from; i > to; i += step) result.push(i) - } - return result -} - -function splitlines(str, keepends = false) { - let result - if (!keepends) { - result = str.split(/\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/) - } else { - result = [] - let parts = str.split(/(\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029])/) - for (let i = 0; i < parts.length; i += 2) { - result.push(parts[i] + (i + 1 < parts.length ? parts[i + 1] : '')) - } - } - if (!result[result.length - 1]) result.pop() - return result -} - -function _string_lstrip(string, prefix_chars) { - let idx = 0 - while (idx < string.length && prefix_chars.includes(string[idx])) idx++ - return idx ? string.slice(idx) : string -} - -function _string_split(string, sep, maxsplit) { - let result = string.split(sep) - if (result.length > maxsplit) { - result = result.slice(0, maxsplit).concat([ result.slice(maxsplit).join(sep) ]) - } - return result -} - -function _array_equal(array1, array2) { - if (array1.length !== array2.length) return false - for (let i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) return false - } - return true -} - -function _array_remove(array, item) { - let idx = array.indexOf(item) - if (idx === -1) throw new TypeError(sub('%r not in list', item)) - array.splice(idx, 1) -} - -// normalize choices to array; -// this isn't required in python because `in` and `map` operators work with anything, -// but in js dealing with multiple types here is too clunky -function _choices_to_array(choices) { - if (choices === undefined) { - return [] - } else if (Array.isArray(choices)) { - return choices - } else if (choices !== null && typeof choices[Symbol.iterator] === 'function') { - return Array.from(choices) - } else if (typeof choices === 'object' && choices !== null) { - return Object.keys(choices) - } else { - throw new Error(sub('invalid choices value: %r', choices)) - } -} - -// decorator that allows a class to be called without new -function _callable(cls) { - let result = { // object is needed for inferred class name - [cls.name]: function (...args) { - let this_class = new.target === result || !new.target - return Reflect.construct(cls, args, this_class ? cls : new.target) - } - } - result[cls.name].prototype = cls.prototype - // fix default tag for toString, e.g. [object Action] instead of [object Object] - cls.prototype[Symbol.toStringTag] = cls.name - return result[cls.name] -} - -function _alias(object, from, to) { - try { - let name = object.constructor.name - Object.defineProperty(object, from, { - value: util.deprecate(object[to], sub('%s.%s() is renamed to %s.%s()', - name, from, name, to)), - enumerable: false - }) - } catch {} -} - -// decorator that allows snake_case class methods to be called with camelCase and vice versa -function _camelcase_alias(_class) { - for (let name of Object.getOwnPropertyNames(_class.prototype)) { - let camelcase = name.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) - if (camelcase !== name) _alias(_class.prototype, camelcase, name) - } - return _class -} - -function _to_legacy_name(key) { - key = key.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) - if (key === 'default') key = 'defaultValue' - if (key === 'const') key = 'constant' - return key -} - -function _to_new_name(key) { - if (key === 'defaultValue') key = 'default' - if (key === 'constant') key = 'const' - key = key.replace(/[A-Z]/g, c => '_' + c.toLowerCase()) - return key -} - -// parse options -let no_default = Symbol('no_default_value') -function _parse_opts(args, descriptor) { - function get_name() { - let stack = new Error().stack.split('\n') - .map(x => x.match(/^ at (.*) \(.*\)$/)) - .filter(Boolean) - .map(m => m[1]) - .map(fn => fn.match(/[^ .]*$/)[0]) - - if (stack.length && stack[0] === get_name.name) stack.shift() - if (stack.length && stack[0] === _parse_opts.name) stack.shift() - return stack.length ? stack[0] : '' - } - - args = Array.from(args) - let kwargs = {} - let result = [] - let last_opt = args.length && args[args.length - 1] - - if (typeof last_opt === 'object' && last_opt !== null && !Array.isArray(last_opt) && - (!last_opt.constructor || last_opt.constructor.name === 'Object')) { - kwargs = Object.assign({}, args.pop()) - } - - // LEGACY (v1 compatibility): camelcase - let renames = [] - for (let key of Object.keys(descriptor)) { - let old_name = _to_legacy_name(key) - if (old_name !== key && (old_name in kwargs)) { - if (key in kwargs) { - // default and defaultValue specified at the same time, happens often in old tests - //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) - } else { - kwargs[key] = kwargs[old_name] - } - renames.push([ old_name, key ]) - delete kwargs[old_name] - } - } - if (renames.length) { - let name = get_name() - deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', - name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) - } - // end - - let missing_positionals = [] - let positional_count = args.length - - for (let [ key, def ] of Object.entries(descriptor)) { - if (key[0] === '*') { - if (key.length > 0 && key[1] === '*') { - // LEGACY (v1 compatibility): camelcase - let renames = [] - for (let key of Object.keys(kwargs)) { - let new_name = _to_new_name(key) - if (new_name !== key && (key in kwargs)) { - if (new_name in kwargs) { - // default and defaultValue specified at the same time, happens often in old tests - //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), new_name)) - } else { - kwargs[new_name] = kwargs[key] - } - renames.push([ key, new_name ]) - delete kwargs[key] - } - } - if (renames.length) { - let name = get_name() - deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', - name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) - } - // end - result.push(kwargs) - kwargs = {} - } else { - result.push(args) - args = [] - } - } else if (key in kwargs && args.length > 0) { - throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) - } else if (key in kwargs) { - result.push(kwargs[key]) - delete kwargs[key] - } else if (args.length > 0) { - result.push(args.shift()) - } else if (def !== no_default) { - result.push(def) - } else { - missing_positionals.push(key) - } - } - - if (Object.keys(kwargs).length) { - throw new TypeError(sub('%s() got an unexpected keyword argument %r', - get_name(), Object.keys(kwargs)[0])) - } - - if (args.length) { - let from = Object.entries(descriptor).filter(([ k, v ]) => k[0] !== '*' && v !== no_default).length - let to = Object.entries(descriptor).filter(([ k ]) => k[0] !== '*').length - throw new TypeError(sub('%s() takes %s positional argument%s but %s %s given', - get_name(), - from === to ? sub('from %s to %s', from, to) : to, - from === to && to === 1 ? '' : 's', - positional_count, - positional_count === 1 ? 'was' : 'were')) - } - - if (missing_positionals.length) { - let strs = missing_positionals.map(repr) - if (strs.length > 1) strs[strs.length - 1] = 'and ' + strs[strs.length - 1] - let str_joined = strs.join(strs.length === 2 ? '' : ', ') - throw new TypeError(sub('%s() missing %i required positional argument%s: %s', - get_name(), strs.length, strs.length === 1 ? '' : 's', str_joined)) - } - - return result -} - -let _deprecations = {} -function deprecate(id, string) { - _deprecations[id] = _deprecations[id] || util.deprecate(() => {}, string) - _deprecations[id]() -} - - -// ============================= -// Utility functions and classes -// ============================= -function _AttributeHolder(cls = Object) { - /* - * Abstract base class that provides __repr__. - * - * The __repr__ method returns a string in the format:: - * ClassName(attr=name, attr=name, ...) - * The attributes are determined either by a class-level attribute, - * '_kwarg_names', or by inspecting the instance __dict__. - */ - - return class _AttributeHolder extends cls { - [util.inspect.custom]() { - let type_name = this.constructor.name - let arg_strings = [] - let star_args = {} - for (let arg of this._get_args()) { - arg_strings.push(repr(arg)) - } - for (let [ name, value ] of this._get_kwargs()) { - if (/^[a-z_][a-z0-9_$]*$/i.test(name)) { - arg_strings.push(sub('%s=%r', name, value)) - } else { - star_args[name] = value - } - } - if (Object.keys(star_args).length) { - arg_strings.push(sub('**%s', repr(star_args))) - } - return sub('%s(%s)', type_name, arg_strings.join(', ')) - } - - toString() { - return this[util.inspect.custom]() - } - - _get_kwargs() { - return Object.entries(this) - } - - _get_args() { - return [] - } - } -} - - -function _copy_items(items) { - if (items === undefined) { - return [] - } - return items.slice(0) -} - - -// =============== -// Formatting Help -// =============== -const HelpFormatter = _camelcase_alias(_callable(class HelpFormatter { - /* - * Formatter for generating usage messages and argument help strings. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - constructor() { - let [ - prog, - indent_increment, - max_help_position, - width - ] = _parse_opts(arguments, { - prog: no_default, - indent_increment: 2, - max_help_position: 24, - width: undefined - }) - - // default setting for width - if (width === undefined) { - width = get_terminal_size().columns - width -= 2 - } - - this._prog = prog - this._indent_increment = indent_increment - this._max_help_position = Math.min(max_help_position, - Math.max(width - 20, indent_increment * 2)) - this._width = width - - this._current_indent = 0 - this._level = 0 - this._action_max_length = 0 - - this._root_section = this._Section(this, undefined) - this._current_section = this._root_section - - this._whitespace_matcher = /[ \t\n\r\f\v]+/g // equivalent to python /\s+/ with ASCII flag - this._long_break_matcher = /\n\n\n+/g - } - - // =============================== - // Section and indentation methods - // =============================== - _indent() { - this._current_indent += this._indent_increment - this._level += 1 - } - - _dedent() { - this._current_indent -= this._indent_increment - assert(this._current_indent >= 0, 'Indent decreased below 0.') - this._level -= 1 - } - - _add_item(func, args) { - this._current_section.items.push([ func, args ]) - } - - // ======================== - // Message building methods - // ======================== - start_section(heading) { - this._indent() - let section = this._Section(this, this._current_section, heading) - this._add_item(section.format_help.bind(section), []) - this._current_section = section - } - - end_section() { - this._current_section = this._current_section.parent - this._dedent() - } - - add_text(text) { - if (text !== SUPPRESS && text !== undefined) { - this._add_item(this._format_text.bind(this), [text]) - } - } - - add_usage(usage, actions, groups, prefix = undefined) { - if (usage !== SUPPRESS) { - let args = [ usage, actions, groups, prefix ] - this._add_item(this._format_usage.bind(this), args) - } - } - - add_argument(action) { - if (action.help !== SUPPRESS) { - - // find all invocations - let invocations = [this._format_action_invocation(action)] - for (let subaction of this._iter_indented_subactions(action)) { - invocations.push(this._format_action_invocation(subaction)) - } - - // update the maximum item length - let invocation_length = Math.max(...invocations.map(invocation => invocation.length)) - let action_length = invocation_length + this._current_indent - this._action_max_length = Math.max(this._action_max_length, - action_length) - - // add the item to the list - this._add_item(this._format_action.bind(this), [action]) - } - } - - add_arguments(actions) { - for (let action of actions) { - this.add_argument(action) - } - } - - // ======================= - // Help-formatting methods - // ======================= - format_help() { - let help = this._root_section.format_help() - if (help) { - help = help.replace(this._long_break_matcher, '\n\n') - help = help.replace(/^\n+|\n+$/g, '') + '\n' - } - return help - } - - _join_parts(part_strings) { - return part_strings.filter(part => part && part !== SUPPRESS).join('') - } - - _format_usage(usage, actions, groups, prefix) { - if (prefix === undefined) { - prefix = 'usage: ' - } - - // if usage is specified, use that - if (usage !== undefined) { - usage = sub(usage, { prog: this._prog }) - - // if no optionals or positionals are available, usage is just prog - } else if (usage === undefined && !actions.length) { - usage = sub('%(prog)s', { prog: this._prog }) - - // if optionals and positionals are available, calculate usage - } else if (usage === undefined) { - let prog = sub('%(prog)s', { prog: this._prog }) - - // split optionals from positionals - let optionals = [] - let positionals = [] - for (let action of actions) { - if (action.option_strings.length) { - optionals.push(action) - } else { - positionals.push(action) - } - } - - // build full usage string - let action_usage = this._format_actions_usage([].concat(optionals).concat(positionals), groups) - usage = [ prog, action_usage ].map(String).join(' ') - - // wrap the usage parts if it's too long - let text_width = this._width - this._current_indent - if (prefix.length + usage.length > text_width) { - - // break usage into wrappable parts - let part_regexp = /\(.*?\)+(?=\s|$)|\[.*?\]+(?=\s|$)|\S+/g - let opt_usage = this._format_actions_usage(optionals, groups) - let pos_usage = this._format_actions_usage(positionals, groups) - let opt_parts = opt_usage.match(part_regexp) || [] - let pos_parts = pos_usage.match(part_regexp) || [] - assert(opt_parts.join(' ') === opt_usage) - assert(pos_parts.join(' ') === pos_usage) - - // helper for wrapping lines - let get_lines = (parts, indent, prefix = undefined) => { - let lines = [] - let line = [] - let line_len - if (prefix !== undefined) { - line_len = prefix.length - 1 - } else { - line_len = indent.length - 1 - } - for (let part of parts) { - if (line_len + 1 + part.length > text_width && line) { - lines.push(indent + line.join(' ')) - line = [] - line_len = indent.length - 1 - } - line.push(part) - line_len += part.length + 1 - } - if (line.length) { - lines.push(indent + line.join(' ')) - } - if (prefix !== undefined) { - lines[0] = lines[0].slice(indent.length) - } - return lines - } - - let lines - - // if prog is short, follow it with optionals or positionals - if (prefix.length + prog.length <= 0.75 * text_width) { - let indent = ' '.repeat(prefix.length + prog.length + 1) - if (opt_parts.length) { - lines = get_lines([prog].concat(opt_parts), indent, prefix) - lines = lines.concat(get_lines(pos_parts, indent)) - } else if (pos_parts.length) { - lines = get_lines([prog].concat(pos_parts), indent, prefix) - } else { - lines = [prog] - } - - // if prog is long, put it on its own line - } else { - let indent = ' '.repeat(prefix.length) - let parts = [].concat(opt_parts).concat(pos_parts) - lines = get_lines(parts, indent) - if (lines.length > 1) { - lines = [] - lines = lines.concat(get_lines(opt_parts, indent)) - lines = lines.concat(get_lines(pos_parts, indent)) - } - lines = [prog].concat(lines) - } - - // join lines into usage - usage = lines.join('\n') - } - } - - // prefix with 'usage:' - return sub('%s%s\n\n', prefix, usage) - } - - _format_actions_usage(actions, groups) { - // find group indices and identify actions in groups - let group_actions = new Set() - let inserts = {} - for (let group of groups) { - let start = actions.indexOf(group._group_actions[0]) - if (start === -1) { - continue - } else { - let end = start + group._group_actions.length - if (_array_equal(actions.slice(start, end), group._group_actions)) { - for (let action of group._group_actions) { - group_actions.add(action) - } - if (!group.required) { - if (start in inserts) { - inserts[start] += ' [' - } else { - inserts[start] = '[' - } - if (end in inserts) { - inserts[end] += ']' - } else { - inserts[end] = ']' - } - } else { - if (start in inserts) { - inserts[start] += ' (' - } else { - inserts[start] = '(' - } - if (end in inserts) { - inserts[end] += ')' - } else { - inserts[end] = ')' - } - } - for (let i of range(start + 1, end)) { - inserts[i] = '|' - } - } - } - } - - // collect all actions format strings - let parts = [] - for (let [ i, action ] of Object.entries(actions)) { - - // suppressed arguments are marked with None - // remove | separators for suppressed arguments - if (action.help === SUPPRESS) { - parts.push(undefined) - if (inserts[+i] === '|') { - delete inserts[+i] - } else if (inserts[+i + 1] === '|') { - delete inserts[+i + 1] - } - - // produce all arg strings - } else if (!action.option_strings.length) { - let default_value = this._get_default_metavar_for_positional(action) - let part = this._format_args(action, default_value) - - // if it's in a group, strip the outer [] - if (group_actions.has(action)) { - if (part[0] === '[' && part[part.length - 1] === ']') { - part = part.slice(1, -1) - } - } - - // add the action string to the list - parts.push(part) - - // produce the first way to invoke the option in brackets - } else { - let option_string = action.option_strings[0] - let part - - // if the Optional doesn't take a value, format is: - // -s or --long - if (action.nargs === 0) { - part = action.format_usage() - - // if the Optional takes a value, format is: - // -s ARGS or --long ARGS - } else { - let default_value = this._get_default_metavar_for_optional(action) - let args_string = this._format_args(action, default_value) - part = sub('%s %s', option_string, args_string) - } - - // make it look optional if it's not required or in a group - if (!action.required && !group_actions.has(action)) { - part = sub('[%s]', part) - } - - // add the action string to the list - parts.push(part) - } - } - - // insert things at the necessary indices - for (let i of Object.keys(inserts).map(Number).sort((a, b) => b - a)) { - parts.splice(+i, 0, inserts[+i]) - } - - // join all the action items with spaces - let text = parts.filter(Boolean).join(' ') - - // clean up separators for mutually exclusive groups - text = text.replace(/([\[(]) /g, '$1') - text = text.replace(/ ([\])])/g, '$1') - text = text.replace(/[\[(] *[\])]/g, '') - text = text.replace(/\(([^|]*)\)/g, '$1', text) - text = text.trim() - - // return the text - return text - } - - _format_text(text) { - if (text.includes('%(prog)')) { - text = sub(text, { prog: this._prog }) - } - let text_width = Math.max(this._width - this._current_indent, 11) - let indent = ' '.repeat(this._current_indent) - return this._fill_text(text, text_width, indent) + '\n\n' - } - - _format_action(action) { - // determine the required width and the entry label - let help_position = Math.min(this._action_max_length + 2, - this._max_help_position) - let help_width = Math.max(this._width - help_position, 11) - let action_width = help_position - this._current_indent - 2 - let action_header = this._format_action_invocation(action) - let indent_first - - // no help; start on same line and add a final newline - if (!action.help) { - let tup = [ this._current_indent, '', action_header ] - action_header = sub('%*s%s\n', ...tup) - - // short action name; start on the same line and pad two spaces - } else if (action_header.length <= action_width) { - let tup = [ this._current_indent, '', action_width, action_header ] - action_header = sub('%*s%-*s ', ...tup) - indent_first = 0 - - // long action name; start on the next line - } else { - let tup = [ this._current_indent, '', action_header ] - action_header = sub('%*s%s\n', ...tup) - indent_first = help_position - } - - // collect the pieces of the action help - let parts = [action_header] - - // if there was help for the action, add lines of help text - if (action.help) { - let help_text = this._expand_help(action) - let help_lines = this._split_lines(help_text, help_width) - parts.push(sub('%*s%s\n', indent_first, '', help_lines[0])) - for (let line of help_lines.slice(1)) { - parts.push(sub('%*s%s\n', help_position, '', line)) - } - - // or add a newline if the description doesn't end with one - } else if (!action_header.endsWith('\n')) { - parts.push('\n') - } - - // if there are any sub-actions, add their help as well - for (let subaction of this._iter_indented_subactions(action)) { - parts.push(this._format_action(subaction)) - } - - // return a single string - return this._join_parts(parts) - } - - _format_action_invocation(action) { - if (!action.option_strings.length) { - let default_value = this._get_default_metavar_for_positional(action) - let metavar = this._metavar_formatter(action, default_value)(1)[0] - return metavar - - } else { - let parts = [] - - // if the Optional doesn't take a value, format is: - // -s, --long - if (action.nargs === 0) { - parts = parts.concat(action.option_strings) - - // if the Optional takes a value, format is: - // -s ARGS, --long ARGS - } else { - let default_value = this._get_default_metavar_for_optional(action) - let args_string = this._format_args(action, default_value) - for (let option_string of action.option_strings) { - parts.push(sub('%s %s', option_string, args_string)) - } - } - - return parts.join(', ') - } - } - - _metavar_formatter(action, default_metavar) { - let result - if (action.metavar !== undefined) { - result = action.metavar - } else if (action.choices !== undefined) { - let choice_strs = _choices_to_array(action.choices).map(String) - result = sub('{%s}', choice_strs.join(',')) - } else { - result = default_metavar - } - - function format(tuple_size) { - if (Array.isArray(result)) { - return result - } else { - return Array(tuple_size).fill(result) - } - } - return format - } - - _format_args(action, default_metavar) { - let get_metavar = this._metavar_formatter(action, default_metavar) - let result - if (action.nargs === undefined) { - result = sub('%s', ...get_metavar(1)) - } else if (action.nargs === OPTIONAL) { - result = sub('[%s]', ...get_metavar(1)) - } else if (action.nargs === ZERO_OR_MORE) { - let metavar = get_metavar(1) - if (metavar.length === 2) { - result = sub('[%s [%s ...]]', ...metavar) - } else { - result = sub('[%s ...]', ...metavar) - } - } else if (action.nargs === ONE_OR_MORE) { - result = sub('%s [%s ...]', ...get_metavar(2)) - } else if (action.nargs === REMAINDER) { - result = '...' - } else if (action.nargs === PARSER) { - result = sub('%s ...', ...get_metavar(1)) - } else if (action.nargs === SUPPRESS) { - result = '' - } else { - let formats - try { - formats = range(action.nargs).map(() => '%s') - } catch (err) { - throw new TypeError('invalid nargs value') - } - result = sub(formats.join(' '), ...get_metavar(action.nargs)) - } - return result - } - - _expand_help(action) { - let params = Object.assign({ prog: this._prog }, action) - for (let name of Object.keys(params)) { - if (params[name] === SUPPRESS) { - delete params[name] - } - } - for (let name of Object.keys(params)) { - if (params[name] && params[name].name) { - params[name] = params[name].name - } - } - if (params.choices !== undefined) { - let choices_str = _choices_to_array(params.choices).map(String).join(', ') - params.choices = choices_str - } - // LEGACY (v1 compatibility): camelcase - for (let key of Object.keys(params)) { - let old_name = _to_legacy_name(key) - if (old_name !== key) { - params[old_name] = params[key] - } - } - // end - return sub(this._get_help_string(action), params) - } - - * _iter_indented_subactions(action) { - if (typeof action._get_subactions === 'function') { - this._indent() - yield* action._get_subactions() - this._dedent() - } - } - - _split_lines(text, width) { - text = text.replace(this._whitespace_matcher, ' ').trim() - // The textwrap module is used only for formatting help. - // Delay its import for speeding up the common usage of argparse. - let textwrap = require('./lib/textwrap') - return textwrap.wrap(text, { width }) - } - - _fill_text(text, width, indent) { - text = text.replace(this._whitespace_matcher, ' ').trim() - let textwrap = require('./lib/textwrap') - return textwrap.fill(text, { width, - initial_indent: indent, - subsequent_indent: indent }) - } - - _get_help_string(action) { - return action.help - } - - _get_default_metavar_for_optional(action) { - return action.dest.toUpperCase() - } - - _get_default_metavar_for_positional(action) { - return action.dest - } -})) - -HelpFormatter.prototype._Section = _callable(class _Section { - - constructor(formatter, parent, heading = undefined) { - this.formatter = formatter - this.parent = parent - this.heading = heading - this.items = [] - } - - format_help() { - // format the indented section - if (this.parent !== undefined) { - this.formatter._indent() - } - let item_help = this.formatter._join_parts(this.items.map(([ func, args ]) => func.apply(null, args))) - if (this.parent !== undefined) { - this.formatter._dedent() - } - - // return nothing if the section was empty - if (!item_help) { - return '' - } - - // add the heading if the section was non-empty - let heading - if (this.heading !== SUPPRESS && this.heading !== undefined) { - let current_indent = this.formatter._current_indent - heading = sub('%*s%s:\n', current_indent, '', this.heading) - } else { - heading = '' - } - - // join the section-initial newline, the heading and the help - return this.formatter._join_parts(['\n', heading, item_help, '\n']) - } -}) - - -const RawDescriptionHelpFormatter = _camelcase_alias(_callable(class RawDescriptionHelpFormatter extends HelpFormatter { - /* - * Help message formatter which retains any formatting in descriptions. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _fill_text(text, width, indent) { - return splitlines(text, true).map(line => indent + line).join('') - } -})) - - -const RawTextHelpFormatter = _camelcase_alias(_callable(class RawTextHelpFormatter extends RawDescriptionHelpFormatter { - /* - * Help message formatter which retains formatting of all help text. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _split_lines(text/*, width*/) { - return splitlines(text) - } -})) - - -const ArgumentDefaultsHelpFormatter = _camelcase_alias(_callable(class ArgumentDefaultsHelpFormatter extends HelpFormatter { - /* - * Help message formatter which adds default values to argument help. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _get_help_string(action) { - let help = action.help - // LEGACY (v1 compatibility): additional check for defaultValue needed - if (!action.help.includes('%(default)') && !action.help.includes('%(defaultValue)')) { - if (action.default !== SUPPRESS) { - let defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] - if (action.option_strings.length || defaulting_nargs.includes(action.nargs)) { - help += ' (default: %(default)s)' - } - } - } - return help - } -})) - - -const MetavarTypeHelpFormatter = _camelcase_alias(_callable(class MetavarTypeHelpFormatter extends HelpFormatter { - /* - * Help message formatter which uses the argument 'type' as the default - * metavar value (instead of the argument 'dest') - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _get_default_metavar_for_optional(action) { - return typeof action.type === 'function' ? action.type.name : action.type - } - - _get_default_metavar_for_positional(action) { - return typeof action.type === 'function' ? action.type.name : action.type - } -})) - - -// ===================== -// Options and Arguments -// ===================== -function _get_action_name(argument) { - if (argument === undefined) { - return undefined - } else if (argument.option_strings.length) { - return argument.option_strings.join('/') - } else if (![ undefined, SUPPRESS ].includes(argument.metavar)) { - return argument.metavar - } else if (![ undefined, SUPPRESS ].includes(argument.dest)) { - return argument.dest - } else { - return undefined - } -} - - -const ArgumentError = _callable(class ArgumentError extends Error { - /* - * An error from creating or using an argument (optional or positional). - * - * The string value of this exception is the message, augmented with - * information about the argument that caused it. - */ - - constructor(argument, message) { - super() - this.name = 'ArgumentError' - this._argument_name = _get_action_name(argument) - this._message = message - this.message = this.str() - } - - str() { - let format - if (this._argument_name === undefined) { - format = '%(message)s' - } else { - format = 'argument %(argument_name)s: %(message)s' - } - return sub(format, { message: this._message, - argument_name: this._argument_name }) - } -}) - - -const ArgumentTypeError = _callable(class ArgumentTypeError extends Error { - /* - * An error from trying to convert a command line string to a type. - */ - - constructor(message) { - super(message) - this.name = 'ArgumentTypeError' - } -}) - - -// ============== -// Action classes -// ============== -const Action = _camelcase_alias(_callable(class Action extends _AttributeHolder(Function) { - /* - * Information about how to convert command line strings to Python objects. - * - * Action objects are used by an ArgumentParser to represent the information - * needed to parse a single argument from one or more strings from the - * command line. The keyword arguments to the Action constructor are also - * all attributes of Action instances. - * - * Keyword Arguments: - * - * - option_strings -- A list of command-line option strings which - * should be associated with this action. - * - * - dest -- The name of the attribute to hold the created object(s) - * - * - nargs -- The number of command-line arguments that should be - * consumed. By default, one argument will be consumed and a single - * value will be produced. Other values include: - * - N (an integer) consumes N arguments (and produces a list) - * - '?' consumes zero or one arguments - * - '*' consumes zero or more arguments (and produces a list) - * - '+' consumes one or more arguments (and produces a list) - * Note that the difference between the default and nargs=1 is that - * with the default, a single value will be produced, while with - * nargs=1, a list containing a single value will be produced. - * - * - const -- The value to be produced if the option is specified and the - * option uses an action that takes no values. - * - * - default -- The value to be produced if the option is not specified. - * - * - type -- A callable that accepts a single string argument, and - * returns the converted value. The standard Python types str, int, - * float, and complex are useful examples of such callables. If None, - * str is used. - * - * - choices -- A container of values that should be allowed. If not None, - * after a command-line argument has been converted to the appropriate - * type, an exception will be raised if it is not a member of this - * collection. - * - * - required -- True if the action must always be specified at the - * command line. This is only meaningful for optional command-line - * arguments. - * - * - help -- The help string describing the argument. - * - * - metavar -- The name to be used for the option's argument with the - * help string. If None, the 'dest' value will be used as the name. - */ - - constructor() { - let [ - option_strings, - dest, - nargs, - const_value, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - nargs: undefined, - const: undefined, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - // when this class is called as a function, redirect it to .call() method of itself - super('return arguments.callee.call.apply(arguments.callee, arguments)') - - this.option_strings = option_strings - this.dest = dest - this.nargs = nargs - this.const = const_value - this.default = default_value - this.type = type - this.choices = choices - this.required = required - this.help = help - this.metavar = metavar - } - - _get_kwargs() { - let names = [ - 'option_strings', - 'dest', - 'nargs', - 'const', - 'default', - 'type', - 'choices', - 'help', - 'metavar' - ] - return names.map(name => [ name, getattr(this, name) ]) - } - - format_usage() { - return this.option_strings[0] - } - - call(/*parser, namespace, values, option_string = undefined*/) { - throw new Error('.call() not defined') - } -})) - - -const BooleanOptionalAction = _camelcase_alias(_callable(class BooleanOptionalAction extends Action { - - constructor() { - let [ - option_strings, - dest, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - let _option_strings = [] - for (let option_string of option_strings) { - _option_strings.push(option_string) - - if (option_string.startsWith('--')) { - option_string = '--no-' + option_string.slice(2) - _option_strings.push(option_string) - } - } - - if (help !== undefined && default_value !== undefined) { - help += ` (default: ${default_value})` - } - - super({ - option_strings: _option_strings, - dest, - nargs: 0, - default: default_value, - type, - choices, - required, - help, - metavar - }) - } - - call(parser, namespace, values, option_string = undefined) { - if (this.option_strings.includes(option_string)) { - setattr(namespace, this.dest, !option_string.startsWith('--no-')) - } - } - - format_usage() { - return this.option_strings.join(' | ') - } -})) - - -const _StoreAction = _callable(class _StoreAction extends Action { - - constructor() { - let [ - option_strings, - dest, - nargs, - const_value, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - nargs: undefined, - const: undefined, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - if (nargs === 0) { - throw new TypeError('nargs for store actions must be != 0; if you ' + - 'have nothing to store, actions such as store ' + - 'true or store const may be more appropriate') - } - if (const_value !== undefined && nargs !== OPTIONAL) { - throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) - } - super({ - option_strings, - dest, - nargs, - const: const_value, - default: default_value, - type, - choices, - required, - help, - metavar - }) - } - - call(parser, namespace, values/*, option_string = undefined*/) { - setattr(namespace, this.dest, values) - } -}) - - -const _StoreConstAction = _callable(class _StoreConstAction extends Action { - - constructor() { - let [ - option_strings, - dest, - const_value, - default_value, - required, - help - //, metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - const: no_default, - default: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - super({ - option_strings, - dest, - nargs: 0, - const: const_value, - default: default_value, - required, - help - }) - } - - call(parser, namespace/*, values, option_string = undefined*/) { - setattr(namespace, this.dest, this.const) - } -}) - - -const _StoreTrueAction = _callable(class _StoreTrueAction extends _StoreConstAction { - - constructor() { - let [ - option_strings, - dest, - default_value, - required, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: false, - required: false, - help: undefined - }) - - super({ - option_strings, - dest, - const: true, - default: default_value, - required, - help - }) - } -}) - - -const _StoreFalseAction = _callable(class _StoreFalseAction extends _StoreConstAction { - - constructor() { - let [ - option_strings, - dest, - default_value, - required, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: true, - required: false, - help: undefined - }) - - super({ - option_strings, - dest, - const: false, - default: default_value, - required, - help - }) - } -}) - - -const _AppendAction = _callable(class _AppendAction extends Action { - - constructor() { - let [ - option_strings, - dest, - nargs, - const_value, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - nargs: undefined, - const: undefined, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - if (nargs === 0) { - throw new TypeError('nargs for append actions must be != 0; if arg ' + - 'strings are not supplying the value to append, ' + - 'the append const action may be more appropriate') - } - if (const_value !== undefined && nargs !== OPTIONAL) { - throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) - } - super({ - option_strings, - dest, - nargs, - const: const_value, - default: default_value, - type, - choices, - required, - help, - metavar - }) - } - - call(parser, namespace, values/*, option_string = undefined*/) { - let items = getattr(namespace, this.dest, undefined) - items = _copy_items(items) - items.push(values) - setattr(namespace, this.dest, items) - } -}) - - -const _AppendConstAction = _callable(class _AppendConstAction extends Action { - - constructor() { - let [ - option_strings, - dest, - const_value, - default_value, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - const: no_default, - default: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - super({ - option_strings, - dest, - nargs: 0, - const: const_value, - default: default_value, - required, - help, - metavar - }) - } - - call(parser, namespace/*, values, option_string = undefined*/) { - let items = getattr(namespace, this.dest, undefined) - items = _copy_items(items) - items.push(this.const) - setattr(namespace, this.dest, items) - } -}) - - -const _CountAction = _callable(class _CountAction extends Action { - - constructor() { - let [ - option_strings, - dest, - default_value, - required, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: undefined, - required: false, - help: undefined - }) - - super({ - option_strings, - dest, - nargs: 0, - default: default_value, - required, - help - }) - } - - call(parser, namespace/*, values, option_string = undefined*/) { - let count = getattr(namespace, this.dest, undefined) - if (count === undefined) { - count = 0 - } - setattr(namespace, this.dest, count + 1) - } -}) - - -const _HelpAction = _callable(class _HelpAction extends Action { - - constructor() { - let [ - option_strings, - dest, - default_value, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: SUPPRESS, - default: SUPPRESS, - help: undefined - }) - - super({ - option_strings, - dest, - default: default_value, - nargs: 0, - help - }) - } - - call(parser/*, namespace, values, option_string = undefined*/) { - parser.print_help() - parser.exit() - } -}) - - -const _VersionAction = _callable(class _VersionAction extends Action { - - constructor() { - let [ - option_strings, - version, - dest, - default_value, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - version: undefined, - dest: SUPPRESS, - default: SUPPRESS, - help: "show program's version number and exit" - }) - - super({ - option_strings, - dest, - default: default_value, - nargs: 0, - help - }) - this.version = version - } - - call(parser/*, namespace, values, option_string = undefined*/) { - let version = this.version - if (version === undefined) { - version = parser.version - } - let formatter = parser._get_formatter() - formatter.add_text(version) - parser._print_message(formatter.format_help(), process.stdout) - parser.exit() - } -}) - - -const _SubParsersAction = _camelcase_alias(_callable(class _SubParsersAction extends Action { - - constructor() { - let [ - option_strings, - prog, - parser_class, - dest, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - prog: no_default, - parser_class: no_default, - dest: SUPPRESS, - required: false, - help: undefined, - metavar: undefined - }) - - let name_parser_map = {} - - super({ - option_strings, - dest, - nargs: PARSER, - choices: name_parser_map, - required, - help, - metavar - }) - - this._prog_prefix = prog - this._parser_class = parser_class - this._name_parser_map = name_parser_map - this._choices_actions = [] - } - - add_parser() { - let [ - name, - kwargs - ] = _parse_opts(arguments, { - name: no_default, - '**kwargs': no_default - }) - - // set prog from the existing prefix - if (kwargs.prog === undefined) { - kwargs.prog = sub('%s %s', this._prog_prefix, name) - } - - let aliases = getattr(kwargs, 'aliases', []) - delete kwargs.aliases - - // create a pseudo-action to hold the choice help - if ('help' in kwargs) { - let help = kwargs.help - delete kwargs.help - let choice_action = this._ChoicesPseudoAction(name, aliases, help) - this._choices_actions.push(choice_action) - } - - // create the parser and add it to the map - let parser = new this._parser_class(kwargs) - this._name_parser_map[name] = parser - - // make parser available under aliases also - for (let alias of aliases) { - this._name_parser_map[alias] = parser - } - - return parser - } - - _get_subactions() { - return this._choices_actions - } - - call(parser, namespace, values/*, option_string = undefined*/) { - let parser_name = values[0] - let arg_strings = values.slice(1) - - // set the parser name if requested - if (this.dest !== SUPPRESS) { - setattr(namespace, this.dest, parser_name) - } - - // select the parser - if (hasattr(this._name_parser_map, parser_name)) { - parser = this._name_parser_map[parser_name] - } else { - let args = {parser_name, - choices: this._name_parser_map.join(', ')} - let msg = sub('unknown parser %(parser_name)r (choices: %(choices)s)', args) - throw new ArgumentError(this, msg) - } - - // parse all the remaining options into the namespace - // store any unrecognized options on the object, so that the top - // level parser can decide what to do with them - - // In case this subparser defines new defaults, we parse them - // in a new namespace object and then update the original - // namespace for the relevant parts. - let subnamespace - [ subnamespace, arg_strings ] = parser.parse_known_args(arg_strings, undefined) - for (let [ key, value ] of Object.entries(subnamespace)) { - setattr(namespace, key, value) - } - - if (arg_strings.length) { - setdefault(namespace, _UNRECOGNIZED_ARGS_ATTR, []) - getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).push(...arg_strings) - } - } -})) - - -_SubParsersAction.prototype._ChoicesPseudoAction = _callable(class _ChoicesPseudoAction extends Action { - constructor(name, aliases, help) { - let metavar = name, dest = name - if (aliases.length) { - metavar += sub(' (%s)', aliases.join(', ')) - } - super({ option_strings: [], dest, help, metavar }) - } -}) - - -const _ExtendAction = _callable(class _ExtendAction extends _AppendAction { - call(parser, namespace, values/*, option_string = undefined*/) { - let items = getattr(namespace, this.dest, undefined) - items = _copy_items(items) - items = items.concat(values) - setattr(namespace, this.dest, items) - } -}) - - -// ============== -// Type classes -// ============== -const FileType = _callable(class FileType extends Function { - /* - * Factory for creating file object types - * - * Instances of FileType are typically passed as type= arguments to the - * ArgumentParser add_argument() method. - * - * Keyword Arguments: - * - mode -- A string indicating how the file is to be opened. Accepts the - * same values as the builtin open() function. - * - bufsize -- The file's desired buffer size. Accepts the same values as - * the builtin open() function. - * - encoding -- The file's encoding. Accepts the same values as the - * builtin open() function. - * - errors -- A string indicating how encoding and decoding errors are to - * be handled. Accepts the same value as the builtin open() function. - */ - - constructor() { - let [ - flags, - encoding, - mode, - autoClose, - emitClose, - start, - end, - highWaterMark, - fs - ] = _parse_opts(arguments, { - flags: 'r', - encoding: undefined, - mode: undefined, // 0o666 - autoClose: undefined, // true - emitClose: undefined, // false - start: undefined, // 0 - end: undefined, // Infinity - highWaterMark: undefined, // 64 * 1024 - fs: undefined - }) - - // when this class is called as a function, redirect it to .call() method of itself - super('return arguments.callee.call.apply(arguments.callee, arguments)') - - Object.defineProperty(this, 'name', { - get() { - return sub('FileType(%r)', flags) - } - }) - this._flags = flags - this._options = {} - if (encoding !== undefined) this._options.encoding = encoding - if (mode !== undefined) this._options.mode = mode - if (autoClose !== undefined) this._options.autoClose = autoClose - if (emitClose !== undefined) this._options.emitClose = emitClose - if (start !== undefined) this._options.start = start - if (end !== undefined) this._options.end = end - if (highWaterMark !== undefined) this._options.highWaterMark = highWaterMark - if (fs !== undefined) this._options.fs = fs - } - - call(string) { - // the special argument "-" means sys.std{in,out} - if (string === '-') { - if (this._flags.includes('r')) { - return process.stdin - } else if (this._flags.includes('w')) { - return process.stdout - } else { - let msg = sub('argument "-" with mode %r', this._flags) - throw new TypeError(msg) - } - } - - // all other arguments are used as file names - let fd - try { - fd = fs.openSync(string, this._flags, this._options.mode) - } catch (e) { - let args = { filename: string, error: e.message } - let message = "can't open '%(filename)s': %(error)s" - throw new ArgumentTypeError(sub(message, args)) - } - - let options = Object.assign({ fd, flags: this._flags }, this._options) - if (this._flags.includes('r')) { - return fs.createReadStream(undefined, options) - } else if (this._flags.includes('w')) { - return fs.createWriteStream(undefined, options) - } else { - let msg = sub('argument "%s" with mode %r', string, this._flags) - throw new TypeError(msg) - } - } - - [util.inspect.custom]() { - let args = [ this._flags ] - let kwargs = Object.entries(this._options).map(([ k, v ]) => { - if (k === 'mode') v = { value: v, [util.inspect.custom]() { return '0o' + this.value.toString(8) } } - return [ k, v ] - }) - let args_str = [] - .concat(args.filter(arg => arg !== -1).map(repr)) - .concat(kwargs.filter(([/*kw*/, arg]) => arg !== undefined) - .map(([kw, arg]) => sub('%s=%r', kw, arg))) - .join(', ') - return sub('%s(%s)', this.constructor.name, args_str) - } - - toString() { - return this[util.inspect.custom]() - } -}) - -// =========================== -// Optional and Positional Parsing -// =========================== -const Namespace = _callable(class Namespace extends _AttributeHolder() { - /* - * Simple object for storing attributes. - * - * Implements equality by attribute names and values, and provides a simple - * string representation. - */ - - constructor(options = {}) { - super() - Object.assign(this, options) - } -}) - -// unset string tag to mimic plain object -Namespace.prototype[Symbol.toStringTag] = undefined - - -const _ActionsContainer = _camelcase_alias(_callable(class _ActionsContainer { - - constructor() { - let [ - description, - prefix_chars, - argument_default, - conflict_handler - ] = _parse_opts(arguments, { - description: no_default, - prefix_chars: no_default, - argument_default: no_default, - conflict_handler: no_default - }) - - this.description = description - this.argument_default = argument_default - this.prefix_chars = prefix_chars - this.conflict_handler = conflict_handler - - // set up registries - this._registries = {} - - // register actions - this.register('action', undefined, _StoreAction) - this.register('action', 'store', _StoreAction) - this.register('action', 'store_const', _StoreConstAction) - this.register('action', 'store_true', _StoreTrueAction) - this.register('action', 'store_false', _StoreFalseAction) - this.register('action', 'append', _AppendAction) - this.register('action', 'append_const', _AppendConstAction) - this.register('action', 'count', _CountAction) - this.register('action', 'help', _HelpAction) - this.register('action', 'version', _VersionAction) - this.register('action', 'parsers', _SubParsersAction) - this.register('action', 'extend', _ExtendAction) - // LEGACY (v1 compatibility): camelcase variants - ;[ 'storeConst', 'storeTrue', 'storeFalse', 'appendConst' ].forEach(old_name => { - let new_name = _to_new_name(old_name) - this.register('action', old_name, util.deprecate(this._registry_get('action', new_name), - sub('{action: "%s"} is renamed to {action: "%s"}', old_name, new_name))) - }) - // end - - // raise an exception if the conflict handler is invalid - this._get_handler() - - // action storage - this._actions = [] - this._option_string_actions = {} - - // groups - this._action_groups = [] - this._mutually_exclusive_groups = [] - - // defaults storage - this._defaults = {} - - // determines whether an "option" looks like a negative number - this._negative_number_matcher = /^-\d+$|^-\d*\.\d+$/ - - // whether or not there are any optionals that look like negative - // numbers -- uses a list so it can be shared and edited - this._has_negative_number_optionals = [] - } - - // ==================== - // Registration methods - // ==================== - register(registry_name, value, object) { - let registry = setdefault(this._registries, registry_name, {}) - registry[value] = object - } - - _registry_get(registry_name, value, default_value = undefined) { - return getattr(this._registries[registry_name], value, default_value) - } - - // ================================== - // Namespace default accessor methods - // ================================== - set_defaults(kwargs) { - Object.assign(this._defaults, kwargs) - - // if these defaults match any existing arguments, replace - // the previous default on the object with the new one - for (let action of this._actions) { - if (action.dest in kwargs) { - action.default = kwargs[action.dest] - } - } - } - - get_default(dest) { - for (let action of this._actions) { - if (action.dest === dest && action.default !== undefined) { - return action.default - } - } - return this._defaults[dest] - } - - - // ======================= - // Adding argument actions - // ======================= - add_argument() { - /* - * add_argument(dest, ..., name=value, ...) - * add_argument(option_string, option_string, ..., name=value, ...) - */ - let [ - args, - kwargs - ] = _parse_opts(arguments, { - '*args': no_default, - '**kwargs': no_default - }) - // LEGACY (v1 compatibility), old-style add_argument([ args ], { options }) - if (args.length === 1 && Array.isArray(args[0])) { - args = args[0] - deprecate('argument-array', - sub('use add_argument(%(args)s, {...}) instead of add_argument([ %(args)s ], { ... })', { - args: args.map(repr).join(', ') - })) - } - // end - - // if no positional args are supplied or only one is supplied and - // it doesn't look like an option string, parse a positional - // argument - let chars = this.prefix_chars - if (!args.length || args.length === 1 && !chars.includes(args[0][0])) { - if (args.length && 'dest' in kwargs) { - throw new TypeError('dest supplied twice for positional argument') - } - kwargs = this._get_positional_kwargs(...args, kwargs) - - // otherwise, we're adding an optional argument - } else { - kwargs = this._get_optional_kwargs(...args, kwargs) - } - - // if no default was supplied, use the parser-level default - if (!('default' in kwargs)) { - let dest = kwargs.dest - if (dest in this._defaults) { - kwargs.default = this._defaults[dest] - } else if (this.argument_default !== undefined) { - kwargs.default = this.argument_default - } - } - - // create the action object, and add it to the parser - let action_class = this._pop_action_class(kwargs) - if (typeof action_class !== 'function') { - throw new TypeError(sub('unknown action "%s"', action_class)) - } - // eslint-disable-next-line new-cap - let action = new action_class(kwargs) - - // raise an error if the action type is not callable - let type_func = this._registry_get('type', action.type, action.type) - if (typeof type_func !== 'function') { - throw new TypeError(sub('%r is not callable', type_func)) - } - - if (type_func === FileType) { - throw new TypeError(sub('%r is a FileType class object, instance of it' + - ' must be passed', type_func)) - } - - // raise an error if the metavar does not match the type - if ('_get_formatter' in this) { - try { - this._get_formatter()._format_args(action, undefined) - } catch (err) { - // check for 'invalid nargs value' is an artifact of TypeError and ValueError in js being the same - if (err instanceof TypeError && err.message !== 'invalid nargs value') { - throw new TypeError('length of metavar tuple does not match nargs') - } else { - throw err - } - } - } - - return this._add_action(action) - } - - add_argument_group() { - let group = _ArgumentGroup(this, ...arguments) - this._action_groups.push(group) - return group - } - - add_mutually_exclusive_group() { - // eslint-disable-next-line no-use-before-define - let group = _MutuallyExclusiveGroup(this, ...arguments) - this._mutually_exclusive_groups.push(group) - return group - } - - _add_action(action) { - // resolve any conflicts - this._check_conflict(action) - - // add to actions list - this._actions.push(action) - action.container = this - - // index the action by any option strings it has - for (let option_string of action.option_strings) { - this._option_string_actions[option_string] = action - } - - // set the flag if any option strings look like negative numbers - for (let option_string of action.option_strings) { - if (this._negative_number_matcher.test(option_string)) { - if (!this._has_negative_number_optionals.length) { - this._has_negative_number_optionals.push(true) - } - } - } - - // return the created action - return action - } - - _remove_action(action) { - _array_remove(this._actions, action) - } - - _add_container_actions(container) { - // collect groups by titles - let title_group_map = {} - for (let group of this._action_groups) { - if (group.title in title_group_map) { - let msg = 'cannot merge actions - two groups are named %r' - throw new TypeError(sub(msg, group.title)) - } - title_group_map[group.title] = group - } - - // map each action to its group - let group_map = new Map() - for (let group of container._action_groups) { - - // if a group with the title exists, use that, otherwise - // create a new group matching the container's group - if (!(group.title in title_group_map)) { - title_group_map[group.title] = this.add_argument_group({ - title: group.title, - description: group.description, - conflict_handler: group.conflict_handler - }) - } - - // map the actions to their new group - for (let action of group._group_actions) { - group_map.set(action, title_group_map[group.title]) - } - } - - // add container's mutually exclusive groups - // NOTE: if add_mutually_exclusive_group ever gains title= and - // description= then this code will need to be expanded as above - for (let group of container._mutually_exclusive_groups) { - let mutex_group = this.add_mutually_exclusive_group({ - required: group.required - }) - - // map the actions to their new mutex group - for (let action of group._group_actions) { - group_map.set(action, mutex_group) - } - } - - // add all actions to this container or their group - for (let action of container._actions) { - group_map.get(action)._add_action(action) - } - } - - _get_positional_kwargs() { - let [ - dest, - kwargs - ] = _parse_opts(arguments, { - dest: no_default, - '**kwargs': no_default - }) - - // make sure required is not specified - if ('required' in kwargs) { - let msg = "'required' is an invalid argument for positionals" - throw new TypeError(msg) - } - - // mark positional arguments as required if at least one is - // always required - if (![OPTIONAL, ZERO_OR_MORE].includes(kwargs.nargs)) { - kwargs.required = true - } - if (kwargs.nargs === ZERO_OR_MORE && !('default' in kwargs)) { - kwargs.required = true - } - - // return the keyword arguments with no option strings - return Object.assign(kwargs, { dest, option_strings: [] }) - } - - _get_optional_kwargs() { - let [ - args, - kwargs - ] = _parse_opts(arguments, { - '*args': no_default, - '**kwargs': no_default - }) - - // determine short and long option strings - let option_strings = [] - let long_option_strings = [] - let option_string - for (option_string of args) { - // error on strings that don't start with an appropriate prefix - if (!this.prefix_chars.includes(option_string[0])) { - let args = {option: option_string, - prefix_chars: this.prefix_chars} - let msg = 'invalid option string %(option)r: ' + - 'must start with a character %(prefix_chars)r' - throw new TypeError(sub(msg, args)) - } - - // strings starting with two prefix characters are long options - option_strings.push(option_string) - if (option_string.length > 1 && this.prefix_chars.includes(option_string[1])) { - long_option_strings.push(option_string) - } - } - - // infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' - let dest = kwargs.dest - delete kwargs.dest - if (dest === undefined) { - let dest_option_string - if (long_option_strings.length) { - dest_option_string = long_option_strings[0] - } else { - dest_option_string = option_strings[0] - } - dest = _string_lstrip(dest_option_string, this.prefix_chars) - if (!dest) { - let msg = 'dest= is required for options like %r' - throw new TypeError(sub(msg, option_string)) - } - dest = dest.replace(/-/g, '_') - } - - // return the updated keyword arguments - return Object.assign(kwargs, { dest, option_strings }) - } - - _pop_action_class(kwargs, default_value = undefined) { - let action = getattr(kwargs, 'action', default_value) - delete kwargs.action - return this._registry_get('action', action, action) - } - - _get_handler() { - // determine function from conflict handler string - let handler_func_name = sub('_handle_conflict_%s', this.conflict_handler) - if (typeof this[handler_func_name] === 'function') { - return this[handler_func_name] - } else { - let msg = 'invalid conflict_resolution value: %r' - throw new TypeError(sub(msg, this.conflict_handler)) - } - } - - _check_conflict(action) { - - // find all options that conflict with this option - let confl_optionals = [] - for (let option_string of action.option_strings) { - if (hasattr(this._option_string_actions, option_string)) { - let confl_optional = this._option_string_actions[option_string] - confl_optionals.push([ option_string, confl_optional ]) - } - } - - // resolve any conflicts - if (confl_optionals.length) { - let conflict_handler = this._get_handler() - conflict_handler.call(this, action, confl_optionals) - } - } - - _handle_conflict_error(action, conflicting_actions) { - let message = conflicting_actions.length === 1 ? - 'conflicting option string: %s' : - 'conflicting option strings: %s' - let conflict_string = conflicting_actions.map(([ option_string/*, action*/ ]) => option_string).join(', ') - throw new ArgumentError(action, sub(message, conflict_string)) - } - - _handle_conflict_resolve(action, conflicting_actions) { - - // remove all conflicting options - for (let [ option_string, action ] of conflicting_actions) { - - // remove the conflicting option - _array_remove(action.option_strings, option_string) - delete this._option_string_actions[option_string] - - // if the option now has no option string, remove it from the - // container holding it - if (!action.option_strings.length) { - action.container._remove_action(action) - } - } - } -})) - - -const _ArgumentGroup = _callable(class _ArgumentGroup extends _ActionsContainer { - - constructor() { - let [ - container, - title, - description, - kwargs - ] = _parse_opts(arguments, { - container: no_default, - title: undefined, - description: undefined, - '**kwargs': no_default - }) - - // add any missing keyword arguments by checking the container - setdefault(kwargs, 'conflict_handler', container.conflict_handler) - setdefault(kwargs, 'prefix_chars', container.prefix_chars) - setdefault(kwargs, 'argument_default', container.argument_default) - super(Object.assign({ description }, kwargs)) - - // group attributes - this.title = title - this._group_actions = [] - - // share most attributes with the container - this._registries = container._registries - this._actions = container._actions - this._option_string_actions = container._option_string_actions - this._defaults = container._defaults - this._has_negative_number_optionals = - container._has_negative_number_optionals - this._mutually_exclusive_groups = container._mutually_exclusive_groups - } - - _add_action(action) { - action = super._add_action(action) - this._group_actions.push(action) - return action - } - - _remove_action(action) { - super._remove_action(action) - _array_remove(this._group_actions, action) - } -}) - - -const _MutuallyExclusiveGroup = _callable(class _MutuallyExclusiveGroup extends _ArgumentGroup { - - constructor() { - let [ - container, - required - ] = _parse_opts(arguments, { - container: no_default, - required: false - }) - - super(container) - this.required = required - this._container = container - } - - _add_action(action) { - if (action.required) { - let msg = 'mutually exclusive arguments must be optional' - throw new TypeError(msg) - } - action = this._container._add_action(action) - this._group_actions.push(action) - return action - } - - _remove_action(action) { - this._container._remove_action(action) - _array_remove(this._group_actions, action) - } -}) - - -const ArgumentParser = _camelcase_alias(_callable(class ArgumentParser extends _AttributeHolder(_ActionsContainer) { - /* - * Object for parsing command line strings into Python objects. - * - * Keyword Arguments: - * - prog -- The name of the program (default: sys.argv[0]) - * - usage -- A usage message (default: auto-generated from arguments) - * - description -- A description of what the program does - * - epilog -- Text following the argument descriptions - * - parents -- Parsers whose arguments should be copied into this one - * - formatter_class -- HelpFormatter class for printing help messages - * - prefix_chars -- Characters that prefix optional arguments - * - fromfile_prefix_chars -- Characters that prefix files containing - * additional arguments - * - argument_default -- The default value for all arguments - * - conflict_handler -- String indicating how to handle conflicts - * - add_help -- Add a -h/-help option - * - allow_abbrev -- Allow long options to be abbreviated unambiguously - * - exit_on_error -- Determines whether or not ArgumentParser exits with - * error info when an error occurs - */ - - constructor() { - let [ - prog, - usage, - description, - epilog, - parents, - formatter_class, - prefix_chars, - fromfile_prefix_chars, - argument_default, - conflict_handler, - add_help, - allow_abbrev, - exit_on_error, - debug, // LEGACY (v1 compatibility), debug mode - version // LEGACY (v1 compatibility), version - ] = _parse_opts(arguments, { - prog: undefined, - usage: undefined, - description: undefined, - epilog: undefined, - parents: [], - formatter_class: HelpFormatter, - prefix_chars: '-', - fromfile_prefix_chars: undefined, - argument_default: undefined, - conflict_handler: 'error', - add_help: true, - allow_abbrev: true, - exit_on_error: true, - debug: undefined, // LEGACY (v1 compatibility), debug mode - version: undefined // LEGACY (v1 compatibility), version - }) - - // LEGACY (v1 compatibility) - if (debug !== undefined) { - deprecate('debug', - 'The "debug" argument to ArgumentParser is deprecated. Please ' + - 'override ArgumentParser.exit function instead.' - ) - } - - if (version !== undefined) { - deprecate('version', - 'The "version" argument to ArgumentParser is deprecated. Please use ' + - "add_argument(..., { action: 'version', version: 'N', ... }) instead." - ) - } - // end - - super({ - description, - prefix_chars, - argument_default, - conflict_handler - }) - - // default setting for prog - if (prog === undefined) { - prog = path.basename(get_argv()[0] || '') - } - - this.prog = prog - this.usage = usage - this.epilog = epilog - this.formatter_class = formatter_class - this.fromfile_prefix_chars = fromfile_prefix_chars - this.add_help = add_help - this.allow_abbrev = allow_abbrev - this.exit_on_error = exit_on_error - // LEGACY (v1 compatibility), debug mode - this.debug = debug - // end - - this._positionals = this.add_argument_group('positional arguments') - this._optionals = this.add_argument_group('optional arguments') - this._subparsers = undefined - - // register types - function identity(string) { - return string - } - this.register('type', undefined, identity) - this.register('type', null, identity) - this.register('type', 'auto', identity) - this.register('type', 'int', function (x) { - let result = Number(x) - if (!Number.isInteger(result)) { - throw new TypeError(sub('could not convert string to int: %r', x)) - } - return result - }) - this.register('type', 'float', function (x) { - let result = Number(x) - if (isNaN(result)) { - throw new TypeError(sub('could not convert string to float: %r', x)) - } - return result - }) - this.register('type', 'str', String) - // LEGACY (v1 compatibility): custom types - this.register('type', 'string', - util.deprecate(String, 'use {type:"str"} or {type:String} instead of {type:"string"}')) - // end - - // add help argument if necessary - // (using explicit default to override global argument_default) - let default_prefix = prefix_chars.includes('-') ? '-' : prefix_chars[0] - if (this.add_help) { - this.add_argument( - default_prefix + 'h', - default_prefix.repeat(2) + 'help', - { - action: 'help', - default: SUPPRESS, - help: 'show this help message and exit' - } - ) - } - // LEGACY (v1 compatibility), version - if (version) { - this.add_argument( - default_prefix + 'v', - default_prefix.repeat(2) + 'version', - { - action: 'version', - default: SUPPRESS, - version: this.version, - help: "show program's version number and exit" - } - ) - } - // end - - // add parent arguments and defaults - for (let parent of parents) { - this._add_container_actions(parent) - Object.assign(this._defaults, parent._defaults) - } - } - - // ======================= - // Pretty __repr__ methods - // ======================= - _get_kwargs() { - let names = [ - 'prog', - 'usage', - 'description', - 'formatter_class', - 'conflict_handler', - 'add_help' - ] - return names.map(name => [ name, getattr(this, name) ]) - } - - // ================================== - // Optional/Positional adding methods - // ================================== - add_subparsers() { - let [ - kwargs - ] = _parse_opts(arguments, { - '**kwargs': no_default - }) - - if (this._subparsers !== undefined) { - this.error('cannot have multiple subparser arguments') - } - - // add the parser class to the arguments if it's not present - setdefault(kwargs, 'parser_class', this.constructor) - - if ('title' in kwargs || 'description' in kwargs) { - let title = getattr(kwargs, 'title', 'subcommands') - let description = getattr(kwargs, 'description', undefined) - delete kwargs.title - delete kwargs.description - this._subparsers = this.add_argument_group(title, description) - } else { - this._subparsers = this._positionals - } - - // prog defaults to the usage message of this parser, skipping - // optional arguments and with no "usage:" prefix - if (kwargs.prog === undefined) { - let formatter = this._get_formatter() - let positionals = this._get_positional_actions() - let groups = this._mutually_exclusive_groups - formatter.add_usage(this.usage, positionals, groups, '') - kwargs.prog = formatter.format_help().trim() - } - - // create the parsers action and add it to the positionals list - let parsers_class = this._pop_action_class(kwargs, 'parsers') - // eslint-disable-next-line new-cap - let action = new parsers_class(Object.assign({ option_strings: [] }, kwargs)) - this._subparsers._add_action(action) - - // return the created parsers action - return action - } - - _add_action(action) { - if (action.option_strings.length) { - this._optionals._add_action(action) - } else { - this._positionals._add_action(action) - } - return action - } - - _get_optional_actions() { - return this._actions.filter(action => action.option_strings.length) - } - - _get_positional_actions() { - return this._actions.filter(action => !action.option_strings.length) - } - - // ===================================== - // Command line argument parsing methods - // ===================================== - parse_args(args = undefined, namespace = undefined) { - let argv - [ args, argv ] = this.parse_known_args(args, namespace) - if (argv && argv.length > 0) { - let msg = 'unrecognized arguments: %s' - this.error(sub(msg, argv.join(' '))) - } - return args - } - - parse_known_args(args = undefined, namespace = undefined) { - if (args === undefined) { - args = get_argv().slice(1) - } - - // default Namespace built from parser defaults - if (namespace === undefined) { - namespace = new Namespace() - } - - // add any action defaults that aren't present - for (let action of this._actions) { - if (action.dest !== SUPPRESS) { - if (!hasattr(namespace, action.dest)) { - if (action.default !== SUPPRESS) { - setattr(namespace, action.dest, action.default) - } - } - } - } - - // add any parser defaults that aren't present - for (let dest of Object.keys(this._defaults)) { - if (!hasattr(namespace, dest)) { - setattr(namespace, dest, this._defaults[dest]) - } - } - - // parse the arguments and exit if there are any errors - if (this.exit_on_error) { - try { - [ namespace, args ] = this._parse_known_args(args, namespace) - } catch (err) { - if (err instanceof ArgumentError) { - this.error(err.message) - } else { - throw err - } - } - } else { - [ namespace, args ] = this._parse_known_args(args, namespace) - } - - if (hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) { - args = args.concat(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) - delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) - } - - return [ namespace, args ] - } - - _parse_known_args(arg_strings, namespace) { - // replace arg strings that are file references - if (this.fromfile_prefix_chars !== undefined) { - arg_strings = this._read_args_from_files(arg_strings) - } - - // map all mutually exclusive arguments to the other arguments - // they can't occur with - let action_conflicts = new Map() - for (let mutex_group of this._mutually_exclusive_groups) { - let group_actions = mutex_group._group_actions - for (let [ i, mutex_action ] of Object.entries(mutex_group._group_actions)) { - let conflicts = action_conflicts.get(mutex_action) || [] - conflicts = conflicts.concat(group_actions.slice(0, +i)) - conflicts = conflicts.concat(group_actions.slice(+i + 1)) - action_conflicts.set(mutex_action, conflicts) - } - } - - // find all option indices, and determine the arg_string_pattern - // which has an 'O' if there is an option at an index, - // an 'A' if there is an argument, or a '-' if there is a '--' - let option_string_indices = {} - let arg_string_pattern_parts = [] - let arg_strings_iter = Object.entries(arg_strings)[Symbol.iterator]() - for (let [ i, arg_string ] of arg_strings_iter) { - - // all args after -- are non-options - if (arg_string === '--') { - arg_string_pattern_parts.push('-') - for ([ i, arg_string ] of arg_strings_iter) { - arg_string_pattern_parts.push('A') - } - - // otherwise, add the arg to the arg strings - // and note the index if it was an option - } else { - let option_tuple = this._parse_optional(arg_string) - let pattern - if (option_tuple === undefined) { - pattern = 'A' - } else { - option_string_indices[i] = option_tuple - pattern = 'O' - } - arg_string_pattern_parts.push(pattern) - } - } - - // join the pieces together to form the pattern - let arg_strings_pattern = arg_string_pattern_parts.join('') - - // converts arg strings to the appropriate and then takes the action - let seen_actions = new Set() - let seen_non_default_actions = new Set() - let extras - - let take_action = (action, argument_strings, option_string = undefined) => { - seen_actions.add(action) - let argument_values = this._get_values(action, argument_strings) - - // error if this argument is not allowed with other previously - // seen arguments, assuming that actions that use the default - // value don't really count as "present" - if (argument_values !== action.default) { - seen_non_default_actions.add(action) - for (let conflict_action of action_conflicts.get(action) || []) { - if (seen_non_default_actions.has(conflict_action)) { - let msg = 'not allowed with argument %s' - let action_name = _get_action_name(conflict_action) - throw new ArgumentError(action, sub(msg, action_name)) - } - } - } - - // take the action if we didn't receive a SUPPRESS value - // (e.g. from a default) - if (argument_values !== SUPPRESS) { - action(this, namespace, argument_values, option_string) - } - } - - // function to convert arg_strings into an optional action - let consume_optional = start_index => { - - // get the optional identified at this index - let option_tuple = option_string_indices[start_index] - let [ action, option_string, explicit_arg ] = option_tuple - - // identify additional optionals in the same arg string - // (e.g. -xyz is the same as -x -y -z if no args are required) - let action_tuples = [] - let stop - for (;;) { - - // if we found no optional action, skip it - if (action === undefined) { - extras.push(arg_strings[start_index]) - return start_index + 1 - } - - // if there is an explicit argument, try to match the - // optional's string arguments to only this - if (explicit_arg !== undefined) { - let arg_count = this._match_argument(action, 'A') - - // if the action is a single-dash option and takes no - // arguments, try to parse more single-dash options out - // of the tail of the option string - let chars = this.prefix_chars - if (arg_count === 0 && !chars.includes(option_string[1])) { - action_tuples.push([ action, [], option_string ]) - let char = option_string[0] - option_string = char + explicit_arg[0] - let new_explicit_arg = explicit_arg.slice(1) || undefined - let optionals_map = this._option_string_actions - if (hasattr(optionals_map, option_string)) { - action = optionals_map[option_string] - explicit_arg = new_explicit_arg - } else { - let msg = 'ignored explicit argument %r' - throw new ArgumentError(action, sub(msg, explicit_arg)) - } - - // if the action expect exactly one argument, we've - // successfully matched the option; exit the loop - } else if (arg_count === 1) { - stop = start_index + 1 - let args = [ explicit_arg ] - action_tuples.push([ action, args, option_string ]) - break - - // error if a double-dash option did not use the - // explicit argument - } else { - let msg = 'ignored explicit argument %r' - throw new ArgumentError(action, sub(msg, explicit_arg)) - } - - // if there is no explicit argument, try to match the - // optional's string arguments with the following strings - // if successful, exit the loop - } else { - let start = start_index + 1 - let selected_patterns = arg_strings_pattern.slice(start) - let arg_count = this._match_argument(action, selected_patterns) - stop = start + arg_count - let args = arg_strings.slice(start, stop) - action_tuples.push([ action, args, option_string ]) - break - } - } - - // add the Optional to the list and return the index at which - // the Optional's string args stopped - assert(action_tuples.length) - for (let [ action, args, option_string ] of action_tuples) { - take_action(action, args, option_string) - } - return stop - } - - // the list of Positionals left to be parsed; this is modified - // by consume_positionals() - let positionals = this._get_positional_actions() - - // function to convert arg_strings into positional actions - let consume_positionals = start_index => { - // match as many Positionals as possible - let selected_pattern = arg_strings_pattern.slice(start_index) - let arg_counts = this._match_arguments_partial(positionals, selected_pattern) - - // slice off the appropriate arg strings for each Positional - // and add the Positional and its args to the list - for (let i = 0; i < positionals.length && i < arg_counts.length; i++) { - let action = positionals[i] - let arg_count = arg_counts[i] - let args = arg_strings.slice(start_index, start_index + arg_count) - start_index += arg_count - take_action(action, args) - } - - // slice off the Positionals that we just parsed and return the - // index at which the Positionals' string args stopped - positionals = positionals.slice(arg_counts.length) - return start_index - } - - // consume Positionals and Optionals alternately, until we have - // passed the last option string - extras = [] - let start_index = 0 - let max_option_string_index = Math.max(-1, ...Object.keys(option_string_indices).map(Number)) - while (start_index <= max_option_string_index) { - - // consume any Positionals preceding the next option - let next_option_string_index = Math.min( - // eslint-disable-next-line no-loop-func - ...Object.keys(option_string_indices).map(Number).filter(index => index >= start_index) - ) - if (start_index !== next_option_string_index) { - let positionals_end_index = consume_positionals(start_index) - - // only try to parse the next optional if we didn't consume - // the option string during the positionals parsing - if (positionals_end_index > start_index) { - start_index = positionals_end_index - continue - } else { - start_index = positionals_end_index - } - } - - // if we consumed all the positionals we could and we're not - // at the index of an option string, there were extra arguments - if (!(start_index in option_string_indices)) { - let strings = arg_strings.slice(start_index, next_option_string_index) - extras = extras.concat(strings) - start_index = next_option_string_index - } - - // consume the next optional and any arguments for it - start_index = consume_optional(start_index) - } - - // consume any positionals following the last Optional - let stop_index = consume_positionals(start_index) - - // if we didn't consume all the argument strings, there were extras - extras = extras.concat(arg_strings.slice(stop_index)) - - // make sure all required actions were present and also convert - // action defaults which were not given as arguments - let required_actions = [] - for (let action of this._actions) { - if (!seen_actions.has(action)) { - if (action.required) { - required_actions.push(_get_action_name(action)) - } else { - // Convert action default now instead of doing it before - // parsing arguments to avoid calling convert functions - // twice (which may fail) if the argument was given, but - // only if it was defined already in the namespace - if (action.default !== undefined && - typeof action.default === 'string' && - hasattr(namespace, action.dest) && - action.default === getattr(namespace, action.dest)) { - setattr(namespace, action.dest, - this._get_value(action, action.default)) - } - } - } - } - - if (required_actions.length) { - this.error(sub('the following arguments are required: %s', - required_actions.join(', '))) - } - - // make sure all required groups had one option present - for (let group of this._mutually_exclusive_groups) { - if (group.required) { - let no_actions_used = true - for (let action of group._group_actions) { - if (seen_non_default_actions.has(action)) { - no_actions_used = false - break - } - } - - // if no actions were used, report the error - if (no_actions_used) { - let names = group._group_actions - .filter(action => action.help !== SUPPRESS) - .map(action => _get_action_name(action)) - let msg = 'one of the arguments %s is required' - this.error(sub(msg, names.join(' '))) - } - } - } - - // return the updated namespace and the extra arguments - return [ namespace, extras ] - } - - _read_args_from_files(arg_strings) { - // expand arguments referencing files - let new_arg_strings = [] - for (let arg_string of arg_strings) { - - // for regular arguments, just add them back into the list - if (!arg_string || !this.fromfile_prefix_chars.includes(arg_string[0])) { - new_arg_strings.push(arg_string) - - // replace arguments referencing files with the file content - } else { - try { - let args_file = fs.readFileSync(arg_string.slice(1), 'utf8') - let arg_strings = [] - for (let arg_line of splitlines(args_file)) { - for (let arg of this.convert_arg_line_to_args(arg_line)) { - arg_strings.push(arg) - } - } - arg_strings = this._read_args_from_files(arg_strings) - new_arg_strings = new_arg_strings.concat(arg_strings) - } catch (err) { - this.error(err.message) - } - } - } - - // return the modified argument list - return new_arg_strings - } - - convert_arg_line_to_args(arg_line) { - return [arg_line] - } - - _match_argument(action, arg_strings_pattern) { - // match the pattern for this action to the arg strings - let nargs_pattern = this._get_nargs_pattern(action) - let match = arg_strings_pattern.match(new RegExp('^' + nargs_pattern)) - - // raise an exception if we weren't able to find a match - if (match === null) { - let nargs_errors = { - undefined: 'expected one argument', - [OPTIONAL]: 'expected at most one argument', - [ONE_OR_MORE]: 'expected at least one argument' - } - let msg = nargs_errors[action.nargs] - if (msg === undefined) { - msg = sub(action.nargs === 1 ? 'expected %s argument' : 'expected %s arguments', action.nargs) - } - throw new ArgumentError(action, msg) - } - - // return the number of arguments matched - return match[1].length - } - - _match_arguments_partial(actions, arg_strings_pattern) { - // progressively shorten the actions list by slicing off the - // final actions until we find a match - let result = [] - for (let i of range(actions.length, 0, -1)) { - let actions_slice = actions.slice(0, i) - let pattern = actions_slice.map(action => this._get_nargs_pattern(action)).join('') - let match = arg_strings_pattern.match(new RegExp('^' + pattern)) - if (match !== null) { - result = result.concat(match.slice(1).map(string => string.length)) - break - } - } - - // return the list of arg string counts - return result - } - - _parse_optional(arg_string) { - // if it's an empty string, it was meant to be a positional - if (!arg_string) { - return undefined - } - - // if it doesn't start with a prefix, it was meant to be positional - if (!this.prefix_chars.includes(arg_string[0])) { - return undefined - } - - // if the option string is present in the parser, return the action - if (arg_string in this._option_string_actions) { - let action = this._option_string_actions[arg_string] - return [ action, arg_string, undefined ] - } - - // if it's just a single character, it was meant to be positional - if (arg_string.length === 1) { - return undefined - } - - // if the option string before the "=" is present, return the action - if (arg_string.includes('=')) { - let [ option_string, explicit_arg ] = _string_split(arg_string, '=', 1) - if (option_string in this._option_string_actions) { - let action = this._option_string_actions[option_string] - return [ action, option_string, explicit_arg ] - } - } - - // search through all possible prefixes of the option string - // and all actions in the parser for possible interpretations - let option_tuples = this._get_option_tuples(arg_string) - - // if multiple actions match, the option string was ambiguous - if (option_tuples.length > 1) { - let options = option_tuples.map(([ /*action*/, option_string/*, explicit_arg*/ ]) => option_string).join(', ') - let args = {option: arg_string, matches: options} - let msg = 'ambiguous option: %(option)s could match %(matches)s' - this.error(sub(msg, args)) - - // if exactly one action matched, this segmentation is good, - // so return the parsed action - } else if (option_tuples.length === 1) { - let [ option_tuple ] = option_tuples - return option_tuple - } - - // if it was not found as an option, but it looks like a negative - // number, it was meant to be positional - // unless there are negative-number-like options - if (this._negative_number_matcher.test(arg_string)) { - if (!this._has_negative_number_optionals.length) { - return undefined - } - } - - // if it contains a space, it was meant to be a positional - if (arg_string.includes(' ')) { - return undefined - } - - // it was meant to be an optional but there is no such option - // in this parser (though it might be a valid option in a subparser) - return [ undefined, arg_string, undefined ] - } - - _get_option_tuples(option_string) { - let result = [] - - // option strings starting with two prefix characters are only - // split at the '=' - let chars = this.prefix_chars - if (chars.includes(option_string[0]) && chars.includes(option_string[1])) { - if (this.allow_abbrev) { - let option_prefix, explicit_arg - if (option_string.includes('=')) { - [ option_prefix, explicit_arg ] = _string_split(option_string, '=', 1) - } else { - option_prefix = option_string - explicit_arg = undefined - } - for (let option_string of Object.keys(this._option_string_actions)) { - if (option_string.startsWith(option_prefix)) { - let action = this._option_string_actions[option_string] - let tup = [ action, option_string, explicit_arg ] - result.push(tup) - } - } - } - - // single character options can be concatenated with their arguments - // but multiple character options always have to have their argument - // separate - } else if (chars.includes(option_string[0]) && !chars.includes(option_string[1])) { - let option_prefix = option_string - let explicit_arg = undefined - let short_option_prefix = option_string.slice(0, 2) - let short_explicit_arg = option_string.slice(2) - - for (let option_string of Object.keys(this._option_string_actions)) { - if (option_string === short_option_prefix) { - let action = this._option_string_actions[option_string] - let tup = [ action, option_string, short_explicit_arg ] - result.push(tup) - } else if (option_string.startsWith(option_prefix)) { - let action = this._option_string_actions[option_string] - let tup = [ action, option_string, explicit_arg ] - result.push(tup) - } - } - - // shouldn't ever get here - } else { - this.error(sub('unexpected option string: %s', option_string)) - } - - // return the collected option tuples - return result - } - - _get_nargs_pattern(action) { - // in all examples below, we have to allow for '--' args - // which are represented as '-' in the pattern - let nargs = action.nargs - let nargs_pattern - - // the default (None) is assumed to be a single argument - if (nargs === undefined) { - nargs_pattern = '(-*A-*)' - - // allow zero or one arguments - } else if (nargs === OPTIONAL) { - nargs_pattern = '(-*A?-*)' - - // allow zero or more arguments - } else if (nargs === ZERO_OR_MORE) { - nargs_pattern = '(-*[A-]*)' - - // allow one or more arguments - } else if (nargs === ONE_OR_MORE) { - nargs_pattern = '(-*A[A-]*)' - - // allow any number of options or arguments - } else if (nargs === REMAINDER) { - nargs_pattern = '([-AO]*)' - - // allow one argument followed by any number of options or arguments - } else if (nargs === PARSER) { - nargs_pattern = '(-*A[-AO]*)' - - // suppress action, like nargs=0 - } else if (nargs === SUPPRESS) { - nargs_pattern = '(-*-*)' - - // all others should be integers - } else { - nargs_pattern = sub('(-*%s-*)', 'A'.repeat(nargs).split('').join('-*')) - } - - // if this is an optional action, -- is not allowed - if (action.option_strings.length) { - nargs_pattern = nargs_pattern.replace(/-\*/g, '') - nargs_pattern = nargs_pattern.replace(/-/g, '') - } - - // return the pattern - return nargs_pattern - } - - // ======================== - // Alt command line argument parsing, allowing free intermix - // ======================== - - parse_intermixed_args(args = undefined, namespace = undefined) { - let argv - [ args, argv ] = this.parse_known_intermixed_args(args, namespace) - if (argv.length) { - let msg = 'unrecognized arguments: %s' - this.error(sub(msg, argv.join(' '))) - } - return args - } - - parse_known_intermixed_args(args = undefined, namespace = undefined) { - // returns a namespace and list of extras - // - // positional can be freely intermixed with optionals. optionals are - // first parsed with all positional arguments deactivated. The 'extras' - // are then parsed. If the parser definition is incompatible with the - // intermixed assumptions (e.g. use of REMAINDER, subparsers) a - // TypeError is raised. - // - // positionals are 'deactivated' by setting nargs and default to - // SUPPRESS. This blocks the addition of that positional to the - // namespace - - let extras - let positionals = this._get_positional_actions() - let a = positionals.filter(action => [ PARSER, REMAINDER ].includes(action.nargs)) - if (a.length) { - throw new TypeError(sub('parse_intermixed_args: positional arg' + - ' with nargs=%s', a[0].nargs)) - } - - for (let group of this._mutually_exclusive_groups) { - for (let action of group._group_actions) { - if (positionals.includes(action)) { - throw new TypeError('parse_intermixed_args: positional in' + - ' mutuallyExclusiveGroup') - } - } - } - - let save_usage - try { - save_usage = this.usage - let remaining_args - try { - if (this.usage === undefined) { - // capture the full usage for use in error messages - this.usage = this.format_usage().slice(7) - } - for (let action of positionals) { - // deactivate positionals - action.save_nargs = action.nargs - // action.nargs = 0 - action.nargs = SUPPRESS - action.save_default = action.default - action.default = SUPPRESS - } - [ namespace, remaining_args ] = this.parse_known_args(args, - namespace) - for (let action of positionals) { - // remove the empty positional values from namespace - let attr = getattr(namespace, action.dest) - if (Array.isArray(attr) && attr.length === 0) { - // eslint-disable-next-line no-console - console.warn(sub('Do not expect %s in %s', action.dest, namespace)) - delattr(namespace, action.dest) - } - } - } finally { - // restore nargs and usage before exiting - for (let action of positionals) { - action.nargs = action.save_nargs - action.default = action.save_default - } - } - let optionals = this._get_optional_actions() - try { - // parse positionals. optionals aren't normally required, but - // they could be, so make sure they aren't. - for (let action of optionals) { - action.save_required = action.required - action.required = false - } - for (let group of this._mutually_exclusive_groups) { - group.save_required = group.required - group.required = false - } - [ namespace, extras ] = this.parse_known_args(remaining_args, - namespace) - } finally { - // restore parser values before exiting - for (let action of optionals) { - action.required = action.save_required - } - for (let group of this._mutually_exclusive_groups) { - group.required = group.save_required - } - } - } finally { - this.usage = save_usage - } - return [ namespace, extras ] - } - - // ======================== - // Value conversion methods - // ======================== - _get_values(action, arg_strings) { - // for everything but PARSER, REMAINDER args, strip out first '--' - if (![PARSER, REMAINDER].includes(action.nargs)) { - try { - _array_remove(arg_strings, '--') - } catch (err) {} - } - - let value - // optional argument produces a default when not present - if (!arg_strings.length && action.nargs === OPTIONAL) { - if (action.option_strings.length) { - value = action.const - } else { - value = action.default - } - if (typeof value === 'string') { - value = this._get_value(action, value) - this._check_value(action, value) - } - - // when nargs='*' on a positional, if there were no command-line - // args, use the default if it is anything other than None - } else if (!arg_strings.length && action.nargs === ZERO_OR_MORE && - !action.option_strings.length) { - if (action.default !== undefined) { - value = action.default - } else { - value = arg_strings - } - this._check_value(action, value) - - // single argument or optional argument produces a single value - } else if (arg_strings.length === 1 && [undefined, OPTIONAL].includes(action.nargs)) { - let arg_string = arg_strings[0] - value = this._get_value(action, arg_string) - this._check_value(action, value) - - // REMAINDER arguments convert all values, checking none - } else if (action.nargs === REMAINDER) { - value = arg_strings.map(v => this._get_value(action, v)) - - // PARSER arguments convert all values, but check only the first - } else if (action.nargs === PARSER) { - value = arg_strings.map(v => this._get_value(action, v)) - this._check_value(action, value[0]) - - // SUPPRESS argument does not put anything in the namespace - } else if (action.nargs === SUPPRESS) { - value = SUPPRESS - - // all other types of nargs produce a list - } else { - value = arg_strings.map(v => this._get_value(action, v)) - for (let v of value) { - this._check_value(action, v) - } - } - - // return the converted value - return value - } - - _get_value(action, arg_string) { - let type_func = this._registry_get('type', action.type, action.type) - if (typeof type_func !== 'function') { - let msg = '%r is not callable' - throw new ArgumentError(action, sub(msg, type_func)) - } - - // convert the value to the appropriate type - let result - try { - try { - result = type_func(arg_string) - } catch (err) { - // Dear TC39, why would you ever consider making es6 classes not callable? - // We had one universal interface, [[Call]], which worked for anything - // (with familiar this-instanceof guard for classes). Now we have two. - if (err instanceof TypeError && - /Class constructor .* cannot be invoked without 'new'/.test(err.message)) { - // eslint-disable-next-line new-cap - result = new type_func(arg_string) - } else { - throw err - } - } - - } catch (err) { - // ArgumentTypeErrors indicate errors - if (err instanceof ArgumentTypeError) { - //let name = getattr(action.type, 'name', repr(action.type)) - let msg = err.message - throw new ArgumentError(action, msg) - - // TypeErrors or ValueErrors also indicate errors - } else if (err instanceof TypeError) { - let name = getattr(action.type, 'name', repr(action.type)) - let args = {type: name, value: arg_string} - let msg = 'invalid %(type)s value: %(value)r' - throw new ArgumentError(action, sub(msg, args)) - } else { - throw err - } - } - - // return the converted value - return result - } - - _check_value(action, value) { - // converted value must be one of the choices (if specified) - if (action.choices !== undefined && !_choices_to_array(action.choices).includes(value)) { - let args = {value, - choices: _choices_to_array(action.choices).map(repr).join(', ')} - let msg = 'invalid choice: %(value)r (choose from %(choices)s)' - throw new ArgumentError(action, sub(msg, args)) - } - } - - // ======================= - // Help-formatting methods - // ======================= - format_usage() { - let formatter = this._get_formatter() - formatter.add_usage(this.usage, this._actions, - this._mutually_exclusive_groups) - return formatter.format_help() - } - - format_help() { - let formatter = this._get_formatter() - - // usage - formatter.add_usage(this.usage, this._actions, - this._mutually_exclusive_groups) - - // description - formatter.add_text(this.description) - - // positionals, optionals and user-defined groups - for (let action_group of this._action_groups) { - formatter.start_section(action_group.title) - formatter.add_text(action_group.description) - formatter.add_arguments(action_group._group_actions) - formatter.end_section() - } - - // epilog - formatter.add_text(this.epilog) - - // determine help from format above - return formatter.format_help() - } - - _get_formatter() { - // eslint-disable-next-line new-cap - return new this.formatter_class({ prog: this.prog }) - } - - // ===================== - // Help-printing methods - // ===================== - print_usage(file = undefined) { - if (file === undefined) file = process.stdout - this._print_message(this.format_usage(), file) - } - - print_help(file = undefined) { - if (file === undefined) file = process.stdout - this._print_message(this.format_help(), file) - } - - _print_message(message, file = undefined) { - if (message) { - if (file === undefined) file = process.stderr - file.write(message) - } - } - - // =============== - // Exiting methods - // =============== - exit(status = 0, message = undefined) { - if (message) { - this._print_message(message, process.stderr) - } - process.exit(status) - } - - error(message) { - /* - * error(message: string) - * - * Prints a usage message incorporating the message to stderr and - * exits. - * - * If you override this in a subclass, it should not return -- it - * should either exit or raise an exception. - */ - - // LEGACY (v1 compatibility), debug mode - if (this.debug === true) throw new Error(message) - // end - this.print_usage(process.stderr) - let args = {prog: this.prog, message: message} - this.exit(2, sub('%(prog)s: error: %(message)s\n', args)) - } -})) - - -module.exports = { - ArgumentParser, - ArgumentError, - ArgumentTypeError, - BooleanOptionalAction, - FileType, - HelpFormatter, - ArgumentDefaultsHelpFormatter, - RawDescriptionHelpFormatter, - RawTextHelpFormatter, - MetavarTypeHelpFormatter, - Namespace, - Action, - ONE_OR_MORE, - OPTIONAL, - PARSER, - REMAINDER, - SUPPRESS, - ZERO_OR_MORE -} - -// LEGACY (v1 compatibility), Const alias -Object.defineProperty(module.exports, 'Const', { - get() { - let result = {} - Object.entries({ ONE_OR_MORE, OPTIONAL, PARSER, REMAINDER, SUPPRESS, ZERO_OR_MORE }).forEach(([ n, v ]) => { - Object.defineProperty(result, n, { - get() { - deprecate(n, sub('use argparse.%s instead of argparse.Const.%s', n, n)) - return v - } - }) - }) - Object.entries({ _UNRECOGNIZED_ARGS_ATTR }).forEach(([ n, v ]) => { - Object.defineProperty(result, n, { - get() { - deprecate(n, sub('argparse.Const.%s is an internal symbol and will no longer be available', n)) - return v - } - }) - }) - return result - }, - enumerable: false -}) -// end diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json deleted file mode 100644 index 647d2aff18..0000000000 --- a/node_modules/argparse/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "argparse", - "description": "CLI arguments parser. Native port of python's argparse.", - "version": "2.0.1", - "keywords": [ - "cli", - "parser", - "argparse", - "option", - "args" - ], - "main": "argparse.js", - "files": [ - "argparse.js", - "lib/" - ], - "license": "Python-2.0", - "repository": "nodeca/argparse", - "scripts": { - "lint": "eslint .", - "test": "npm run lint && nyc mocha", - "coverage": "npm run test && nyc report --reporter html" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.11.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "eslint": "^7.5.0", - "mocha": "^8.0.1", - "nyc": "^15.1.0" - } -} diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml deleted file mode 100644 index cea8b16e9e..0000000000 --- a/node_modules/balanced-match/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -tidelift: "npm/balanced-match" -patreon: juliangruber diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md deleted file mode 100644 index 2cdc8e4148..0000000000 --- a/node_modules/balanced-match/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md deleted file mode 100644 index d2a48b6b49..0000000000 --- a/node_modules/balanced-match/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# balanced-match - -Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! - -[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) -[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) - -[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) - -## Example - -Get the first matching pair of braces: - -```js -var balanced = require('balanced-match'); - -console.log(balanced('{', '}', 'pre{in{nested}}post')); -console.log(balanced('{', '}', 'pre{first}between{second}post')); -console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); -``` - -The matches are: - -```bash -$ node example.js -{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } -{ start: 3, - end: 9, - pre: 'pre', - body: 'first', - post: 'between{second}post' } -{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } -``` - -## API - -### var m = balanced(a, b, str) - -For the first non-nested matching pair of `a` and `b` in `str`, return an -object with those keys: - -* **start** the index of the first match of `a` -* **end** the index of the matching `b` -* **pre** the preamble, `a` and `b` not included -* **body** the match, `a` and `b` not included -* **post** the postscript, `a` and `b` not included - -If there's no match, `undefined` will be returned. - -If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. - -### var r = balanced.range(a, b, str) - -For the first non-nested matching pair of `a` and `b` in `str`, return an -array with indexes: `[ , ]`. - -If there's no match, `undefined` will be returned. - -If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install balanced-match -``` - -## Security contact information - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js deleted file mode 100644 index c67a64608d..0000000000 --- a/node_modules/balanced-match/index.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; -module.exports = balanced; -function balanced(a, b, str) { - if (a instanceof RegExp) a = maybeMatch(a, str); - if (b instanceof RegExp) b = maybeMatch(b, str); - - var r = range(a, b, str); - - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; -} - -function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; -} - -balanced.range = range; -function range(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; - - if (ai >= 0 && bi > 0) { - if(a===b) { - return [ai, bi]; - } - begs = []; - left = str.length; - - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [ begs.pop(), bi ]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } - - bi = str.indexOf(b, i + 1); - } - - i = ai < bi && ai >= 0 ? ai : bi; - } - - if (begs.length) { - result = [ left, right ]; - } - } - - return result; -} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json deleted file mode 100644 index ce6073e040..0000000000 --- a/node_modules/balanced-match/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "balanced-match", - "description": "Match balanced character pairs, like \"{\" and \"}\"", - "version": "1.0.2", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/balanced-match.git" - }, - "homepage": "https://github.com/juliangruber/balanced-match", - "main": "index.js", - "scripts": { - "test": "tape test/test.js", - "bench": "matcha test/bench.js" - }, - "devDependencies": { - "matcha": "^0.7.0", - "tape": "^4.6.0" - }, - "keywords": [ - "match", - "regexp", - "test", - "balanced", - "parse" - ], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT", - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - } -} diff --git a/node_modules/brace-expansion/.github/FUNDING.yml b/node_modules/brace-expansion/.github/FUNDING.yml deleted file mode 100644 index 79d1eafcec..0000000000 --- a/node_modules/brace-expansion/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -tidelift: "npm/brace-expansion" -patreon: juliangruber diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE deleted file mode 100644 index de3226673c..0000000000 --- a/node_modules/brace-expansion/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md deleted file mode 100644 index e55c583dd0..0000000000 --- a/node_modules/brace-expansion/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# brace-expansion - -[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), -as known from sh/bash, in JavaScript. - -[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) -[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) -[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) - -[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) - -## Example - -```js -var expand = require('brace-expansion'); - -expand('file-{a,b,c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('-v{,,}') -// => ['-v', '-v', '-v'] - -expand('file{0..2}.jpg') -// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] - -expand('file-{a..c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('file{2..0}.jpg') -// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] - -expand('file{0..4..2}.jpg') -// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] - -expand('file-{a..e..2}.jpg') -// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] - -expand('file{00..10..5}.jpg') -// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] - -expand('{{A..C},{a..c}}') -// => ['A', 'B', 'C', 'a', 'b', 'c'] - -expand('ppp{,config,oe{,conf}}') -// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] -``` - -## API - -```js -var expand = require('brace-expansion'); -``` - -### var expanded = expand(str) - -Return an array of all possible and valid expansions of `str`. If none are -found, `[str]` is returned. - -Valid expansions are: - -```js -/^(.*,)+(.+)?$/ -// {a,b,...} -``` - -A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -A numeric sequence from `x` to `y` inclusive, with optional increment. -If `x` or `y` start with a leading `0`, all the numbers will be padded -to have equal length. Negative numbers and backwards iteration work too. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -An alphabetic sequence from `x` to `y` inclusive, with optional increment. -`x` and `y` must be exactly one character, and if given, `incr` must be a -number. - -For compatibility reasons, the string `${` is not eligible for brace expansion. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install brace-expansion -``` - -## Contributors - -- [Julian Gruber](https://github.com/juliangruber) -- [Isaac Z. Schlueter](https://github.com/isaacs) - -## Sponsors - -This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! - -Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! - -## Security contact information - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js deleted file mode 100644 index 4af9ddee46..0000000000 --- a/node_modules/brace-expansion/index.js +++ /dev/null @@ -1,203 +0,0 @@ -var balanced = require('balanced-match'); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } - - return expand(escapeBraces(str), true).map(unescapeBraces); -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str, isTop) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m) return [str]; - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post, false) - : ['']; - - if (/\$$/.test(m.pre)) { - for (var k = 0; k < post.length; k++) { - var expansion = pre+ '{' + m.body + '}' + post[k]; - expansions.push(expansion); - } - } else { - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(',') >= 0; - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); - if (n.length === 1) { - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = []; - - for (var j = 0; j < n.length; j++) { - N.push.apply(N, expand(n[j], false)); - } - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - } - - return expansions; -} - diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json deleted file mode 100644 index 7097d41e39..0000000000 --- a/node_modules/brace-expansion/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "brace-expansion", - "description": "Brace expansion as known from sh/bash", - "version": "2.0.1", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/brace-expansion.git" - }, - "homepage": "https://github.com/juliangruber/brace-expansion", - "main": "index.js", - "scripts": { - "test": "tape test/*.js", - "gentest": "bash test/generate.sh", - "bench": "matcha test/perf/bench.js" - }, - "dependencies": { - "balanced-match": "^1.0.0" - }, - "devDependencies": { - "@c4312/matcha": "^1.3.1", - "tape": "^4.6.0" - }, - "keywords": [], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT", - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - } -} diff --git a/node_modules/character-entities-legacy/index.d.ts b/node_modules/character-entities-legacy/index.d.ts deleted file mode 100644 index 2d567ecc0f..0000000000 --- a/node_modules/character-entities-legacy/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * List of legacy HTML named character references that don’t need a trailing semicolon. - * - * @type {Array} - */ -export const characterEntitiesLegacy: Array diff --git a/node_modules/character-entities-legacy/index.js b/node_modules/character-entities-legacy/index.js deleted file mode 100644 index 678d6a7034..0000000000 --- a/node_modules/character-entities-legacy/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * List of legacy HTML named character references that don’t need a trailing semicolon. - * - * @type {Array} - */ -export const characterEntitiesLegacy = [ - 'AElig', - 'AMP', - 'Aacute', - 'Acirc', - 'Agrave', - 'Aring', - 'Atilde', - 'Auml', - 'COPY', - 'Ccedil', - 'ETH', - 'Eacute', - 'Ecirc', - 'Egrave', - 'Euml', - 'GT', - 'Iacute', - 'Icirc', - 'Igrave', - 'Iuml', - 'LT', - 'Ntilde', - 'Oacute', - 'Ocirc', - 'Ograve', - 'Oslash', - 'Otilde', - 'Ouml', - 'QUOT', - 'REG', - 'THORN', - 'Uacute', - 'Ucirc', - 'Ugrave', - 'Uuml', - 'Yacute', - 'aacute', - 'acirc', - 'acute', - 'aelig', - 'agrave', - 'amp', - 'aring', - 'atilde', - 'auml', - 'brvbar', - 'ccedil', - 'cedil', - 'cent', - 'copy', - 'curren', - 'deg', - 'divide', - 'eacute', - 'ecirc', - 'egrave', - 'eth', - 'euml', - 'frac12', - 'frac14', - 'frac34', - 'gt', - 'iacute', - 'icirc', - 'iexcl', - 'igrave', - 'iquest', - 'iuml', - 'laquo', - 'lt', - 'macr', - 'micro', - 'middot', - 'nbsp', - 'not', - 'ntilde', - 'oacute', - 'ocirc', - 'ograve', - 'ordf', - 'ordm', - 'oslash', - 'otilde', - 'ouml', - 'para', - 'plusmn', - 'pound', - 'quot', - 'raquo', - 'reg', - 'sect', - 'shy', - 'sup1', - 'sup2', - 'sup3', - 'szlig', - 'thorn', - 'times', - 'uacute', - 'ucirc', - 'ugrave', - 'uml', - 'uuml', - 'yacute', - 'yen', - 'yuml' -] diff --git a/node_modules/character-entities-legacy/license b/node_modules/character-entities-legacy/license deleted file mode 100644 index 32e7a3d93c..0000000000 --- a/node_modules/character-entities-legacy/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities-legacy/package.json b/node_modules/character-entities-legacy/package.json deleted file mode 100644 index 6f6805616c..0000000000 --- a/node_modules/character-entities-legacy/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "character-entities-legacy", - "version": "3.0.0", - "description": "List of legacy HTML named character references that don’t need a trailing semicolon", - "license": "MIT", - "keywords": [ - "html", - "entity", - "entities", - "character", - "reference", - "name" - ], - "repository": "wooorm/character-entities-legacy", - "bugs": "https://github.com/wooorm/character-entities-legacy/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "bail": "^2.0.0", - "c8": "^7.0.0", - "concat-stream": "^2.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.45.0" - }, - "scripts": { - "generate": "node build", - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run generate && npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/character-entities-legacy/readme.md b/node_modules/character-entities-legacy/readme.md deleted file mode 100644 index 9c1765faf6..0000000000 --- a/node_modules/character-entities-legacy/readme.md +++ /dev/null @@ -1,157 +0,0 @@ -# character-entities-legacy - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -List of legacy HTML named character references that don’t need a trailing -semicolon. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`characterEntitiesLegacy`](#characterentitieslegacy) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a list of certain named character references, that due to legacy -reasons, don’t need a trailing semicolon in HTML. -For example, `©` is perfectly fine for `©`! - -## When should I use this? - -Maybe when you’re writing an HTML parser or minifier, but otherwise probably -never! -Even then, it might be better to use [`parse-entities`][parse-entities] or -[`stringify-entities`][stringify-entities]. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install character-entities-legacy -``` - -In Deno with [Skypack][]: - -```js -import {characterEntitiesLegacy} from 'https://cdn.skypack.dev/character-entities-legacy@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {characterEntitiesLegacy} from 'character-entities-legacy' - -console.log(characterEntitiesLegacy.includes('copy')) // => true -console.log(characterEntitiesLegacy.includes('frac34')) // => true -console.log(characterEntitiesLegacy.includes('sup1')) // => true -``` - -## API - -This package exports the following identifiers: `characterEntitiesLegacy`. -There is no default export. - -### `characterEntitiesLegacy` - -List of (case sensitive) legacy character entity names. -[`wooorm/character-entities`][character-entities] holds their decoded values. -See [`whatwg/html`][html] for more info. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) - — parse (decode) character references -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — serialize (encode) character references -* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) - — info on character entities -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — info on HTML4 character entities -* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) - — info on invalid numeric character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/character-entities-legacy/workflows/main/badge.svg - -[build]: https://github.com/wooorm/character-entities-legacy/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities-legacy.svg - -[coverage]: https://codecov.io/github/wooorm/character-entities-legacy - -[downloads-badge]: https://img.shields.io/npm/dm/character-entities-legacy.svg - -[downloads]: https://www.npmjs.com/package/character-entities-legacy - -[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities-legacy.svg - -[size]: https://bundlephobia.com/result?p=character-entities-legacy - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[html]: https://github.com/whatwg/html-build/blob/HEAD/entities/json-entities-legacy.inc - -[parse-entities]: https://github.com/wooorm/parse-entities - -[stringify-entities]: https://github.com/wooorm/stringify-entities - -[character-entities]: https://github.com/wooorm/character-entities diff --git a/node_modules/character-entities/index.d.ts b/node_modules/character-entities/index.d.ts deleted file mode 100644 index aa7e651aaf..0000000000 --- a/node_modules/character-entities/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Map of named character references. - * - * @type {Record} - */ -export const characterEntities: Record diff --git a/node_modules/character-entities/index.js b/node_modules/character-entities/index.js deleted file mode 100644 index 9222e7a7fe..0000000000 --- a/node_modules/character-entities/index.js +++ /dev/null @@ -1,2132 +0,0 @@ -/** - * Map of named character references. - * - * @type {Record} - */ -export const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} diff --git a/node_modules/character-entities/license b/node_modules/character-entities/license deleted file mode 100644 index 32e7a3d93c..0000000000 --- a/node_modules/character-entities/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities/package.json b/node_modules/character-entities/package.json deleted file mode 100644 index 30f6a53963..0000000000 --- a/node_modules/character-entities/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "character-entities", - "version": "2.0.2", - "description": "Map of named character references", - "license": "MIT", - "keywords": [ - "html", - "entity", - "entities", - "character", - "reference", - "name", - "replacement" - ], - "repository": "wooorm/character-entities", - "bugs": "https://github.com/wooorm/character-entities/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "bail": "^2.0.0", - "c8": "^7.0.0", - "concat-stream": "^2.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.50.0" - }, - "scripts": { - "generate": "node build", - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run generate && npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/character-entities/readme.md b/node_modules/character-entities/readme.md deleted file mode 100644 index 16889ca142..0000000000 --- a/node_modules/character-entities/readme.md +++ /dev/null @@ -1,152 +0,0 @@ -# character-entities - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Map of named character references. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [characterEntities](#characterentities) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a map of named character references in HTML (latest) to the characters -they represent. - -## When should I use this? - -Maybe when you’re writing an HTML parser or minifier, but otherwise probably -never! -Even then, it might be better to use [`parse-entities`][parse-entities] or -[`stringify-entities`][stringify-entities]. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, 16.0+, 18.0+), install with [npm][]: - -```sh -npm install character-entities -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {characterEntities} from 'https://esm.sh/character-entities@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {characterEntities} from 'character-entities' - -console.log(characterEntities.AElig) // => 'Æ' -console.log(characterEntities.aelig) // => 'æ' -console.log(characterEntities.amp) // => '&' -``` - -## API - -This package exports the identifier `characterEntities`. -There is no default export. - -### characterEntities - -Mapping between (case-sensitive) character entity names to replacements. -See [`html.spec.whatwg.org`][html] for more info. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, 16.0+, and 18.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) - — parse (decode) character references -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — serialize (encode) character references -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — info on named character references in HTML 4 -* [`character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) - — info on invalid numeric character references -* [`character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) - — info on legacy named character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/character-entities/workflows/main/badge.svg - -[build]: https://github.com/wooorm/character-entities/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities.svg - -[coverage]: https://codecov.io/github/wooorm/character-entities - -[downloads-badge]: https://img.shields.io/npm/dm/character-entities.svg - -[downloads]: https://www.npmjs.com/package/character-entities - -[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities.svg - -[size]: https://bundlephobia.com/result?p=character-entities - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[parse-entities]: https://github.com/wooorm/parse-entities - -[stringify-entities]: https://github.com/wooorm/stringify-entities - -[html]: https://html.spec.whatwg.org/multipage/syntax.html#named-character-references diff --git a/node_modules/character-reference-invalid/index.d.ts b/node_modules/character-reference-invalid/index.d.ts deleted file mode 100644 index 800115adbf..0000000000 --- a/node_modules/character-reference-invalid/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Map of invalid numeric character references to their replacements, according to HTML. - * - * @type {Record} - */ -export const characterReferenceInvalid: Record diff --git a/node_modules/character-reference-invalid/index.js b/node_modules/character-reference-invalid/index.js deleted file mode 100644 index 3fd48c5d7c..0000000000 --- a/node_modules/character-reference-invalid/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Map of invalid numeric character references to their replacements, according to HTML. - * - * @type {Record} - */ -export const characterReferenceInvalid = { - 0: '�', - 128: '€', - 130: '‚', - 131: 'ƒ', - 132: '„', - 133: '…', - 134: '†', - 135: '‡', - 136: 'ˆ', - 137: '‰', - 138: 'Š', - 139: '‹', - 140: 'Œ', - 142: 'Ž', - 145: '‘', - 146: '’', - 147: '“', - 148: '”', - 149: '•', - 150: '–', - 151: '—', - 152: '˜', - 153: '™', - 154: 'š', - 155: '›', - 156: 'œ', - 158: 'ž', - 159: 'Ÿ' -} diff --git a/node_modules/character-reference-invalid/license b/node_modules/character-reference-invalid/license deleted file mode 100644 index 32e7a3d93c..0000000000 --- a/node_modules/character-reference-invalid/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-reference-invalid/package.json b/node_modules/character-reference-invalid/package.json deleted file mode 100644 index b133319c35..0000000000 --- a/node_modules/character-reference-invalid/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "character-reference-invalid", - "version": "2.0.1", - "description": "Map of invalid numeric character references to their replacements, according to HTML", - "license": "MIT", - "keywords": [ - "html", - "entity", - "numeric", - "character", - "reference", - "replacement", - "invalid", - "name" - ], - "repository": "wooorm/character-reference-invalid", - "bugs": "https://github.com/wooorm/character-reference-invalid/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "bail": "^2.0.0", - "c8": "^7.0.0", - "concat-stream": "^2.0.0", - "hast-util-select": "^5.0.0", - "hast-util-to-string": "^2.0.0", - "prettier": "^2.0.0", - "rehype-parse": "^8.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "unified": "^10.0.0", - "xo": "^0.45.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "generate": "node build", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run generate && npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/character-reference-invalid/readme.md b/node_modules/character-reference-invalid/readme.md deleted file mode 100644 index 2190876940..0000000000 --- a/node_modules/character-reference-invalid/readme.md +++ /dev/null @@ -1,156 +0,0 @@ -# character-reference-invalid - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Map of invalid numeric character references to their replacements, according to -HTML. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`characterReferenceInvalid`](#characterreferenceinvalid) -* [Source](#source) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a map from the [HTML spec][source] of C1 ASCII/Unicode control -characters (which are disallowed by HTML) to the characters those code points -would have in Windows 1252. -For example, U+0080 (Padding Character) maps to `€`, because that’s used for -0x80 in Windows 1252. - -## When should I use this? - -Probably never, unless you’re dealing with parsing HTML or similar XML-like -things, or in a place where Unicode is not the primary encoding (it is in most -places). - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install character-reference-invalid -``` - -In Deno with [Skypack][]: - -```js -import {characterReferenceInvalid} from 'https://cdn.skypack.dev/character-reference-invalid@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {characterReferenceInvalid} from 'character-reference-invalid' - -console.log(characterReferenceInvalid[0x80]) // => '€' -console.log(characterReferenceInvalid[0x89]) // => '‰' -console.log(characterReferenceInvalid[0x99]) // => '™' -``` - -## API - -This package exports the following identifiers: `characterReferenceInvalid`. -There is no default export. - -### `characterReferenceInvalid` - -`Record` — mapping between invalid numeric character reference -codes to replacements characters. - -## Source - -See [`html.spec.whatwg.org`][source]. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) - — HTML character entity info -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — HTML 4 character entity info -* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) - — legacy character entity info -* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) - — parse HTML character references -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — serialize HTML character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/character-reference-invalid/workflows/main/badge.svg - -[build]: https://github.com/wooorm/character-reference-invalid/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-reference-invalid.svg - -[coverage]: https://codecov.io/github/wooorm/character-reference-invalid - -[downloads-badge]: https://img.shields.io/npm/dm/character-reference-invalid.svg - -[downloads]: https://www.npmjs.com/package/character-reference-invalid - -[size-badge]: https://img.shields.io/bundlephobia/minzip/character-reference-invalid.svg - -[size]: https://bundlephobia.com/result?p=character-reference-invalid - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[source]: https://html.spec.whatwg.org/multipage/parsing.html#table-charref-overrides diff --git a/node_modules/color-convert/CHANGELOG.md b/node_modules/color-convert/CHANGELOG.md deleted file mode 100644 index 0a7bce4fd5..0000000000 --- a/node_modules/color-convert/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# 1.0.0 - 2016-01-07 - -- Removed: unused speed test -- Added: Automatic routing between previously unsupported conversions -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Removed: `convert()` class -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Changed: all functions to lookup dictionary -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Changed: `ansi` to `ansi256` -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Fixed: argument grouping for functions requiring only one argument -([#27](https://github.com/Qix-/color-convert/pull/27)) - -# 0.6.0 - 2015-07-23 - -- Added: methods to handle -[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: - - rgb2ansi16 - - rgb2ansi - - hsl2ansi16 - - hsl2ansi - - hsv2ansi16 - - hsv2ansi - - hwb2ansi16 - - hwb2ansi - - cmyk2ansi16 - - cmyk2ansi - - keyword2ansi16 - - keyword2ansi - - ansi162rgb - - ansi162hsl - - ansi162hsv - - ansi162hwb - - ansi162cmyk - - ansi162keyword - - ansi2rgb - - ansi2hsl - - ansi2hsv - - ansi2hwb - - ansi2cmyk - - ansi2keyword -([#18](https://github.com/harthur/color-convert/pull/18)) - -# 0.5.3 - 2015-06-02 - -- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` -([#15](https://github.com/harthur/color-convert/issues/15)) - ---- - -Check out commit logs for older releases diff --git a/node_modules/color-convert/LICENSE b/node_modules/color-convert/LICENSE deleted file mode 100644 index 5b4c386f92..0000000000 --- a/node_modules/color-convert/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2011-2016 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/color-convert/README.md b/node_modules/color-convert/README.md deleted file mode 100644 index d4b08fc369..0000000000 --- a/node_modules/color-convert/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# color-convert - -[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert) - -Color-convert is a color conversion library for JavaScript and node. -It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest): - -```js -var convert = require('color-convert'); - -convert.rgb.hsl(140, 200, 100); // [96, 48, 59] -convert.keyword.rgb('blue'); // [0, 0, 255] - -var rgbChannels = convert.rgb.channels; // 3 -var cmykChannels = convert.cmyk.channels; // 4 -var ansiChannels = convert.ansi16.channels; // 1 -``` - -# Install - -```console -$ npm install color-convert -``` - -# API - -Simply get the property of the _from_ and _to_ conversion that you're looking for. - -All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function. - -All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha). - -```js -var convert = require('color-convert'); - -// Hex to LAB -convert.hex.lab('DEADBF'); // [ 76, 21, -2 ] -convert.hex.lab.raw('DEADBF'); // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ] - -// RGB to CMYK -convert.rgb.cmyk(167, 255, 4); // [ 35, 0, 98, 0 ] -convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ] -``` - -### Arrays -All functions that accept multiple arguments also support passing an array. - -Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.) - -```js -var convert = require('color-convert'); - -convert.rgb.hex(123, 45, 67); // '7B2D43' -convert.rgb.hex([123, 45, 67]); // '7B2D43' -``` - -## Routing - -Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex). - -Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js). - -# Contribute - -If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request. - -# License -Copyright © 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE). diff --git a/node_modules/color-convert/conversions.js b/node_modules/color-convert/conversions.js deleted file mode 100644 index 2657f265c9..0000000000 --- a/node_modules/color-convert/conversions.js +++ /dev/null @@ -1,839 +0,0 @@ -/* MIT license */ -/* eslint-disable no-mixed-operators */ -const cssKeywords = require('color-name'); - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -const reverseKeywords = {}; -for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; -} - -const convert = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -module.exports = convert; - -// Hide .channels and .labels properties -for (const model of Object.keys(convert)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - const {channels, labels} = convert[model]; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); -} - -convert.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - const l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; - - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); -} - -convert.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - let currentClosestDistance = Infinity; - let currentClosestKeyword; - - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; - - // Compute comparative distance - const distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; - - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); - - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - const xyz = convert.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - const t1 = 2 * l - t2; - - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; - - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; - - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; - - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - const n = wh + f * (v - wh); // Linear interpolation - - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - /* eslint-enable max-statements-per-line,no-multi-spaces */ - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; - - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - const c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; - - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; - - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - let color = args % 10; - - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - let colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } - - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; - - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); - - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; - - const c = s * v; - let f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; - - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const v = c + g * (1.0 - c); - let f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hsv = convert.gray.hsl; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; diff --git a/node_modules/color-convert/index.js b/node_modules/color-convert/index.js deleted file mode 100644 index b648e5737b..0000000000 --- a/node_modules/color-convert/index.js +++ /dev/null @@ -1,81 +0,0 @@ -const conversions = require('./conversions'); -const route = require('./route'); - -const convert = {}; - -const models = Object.keys(conversions); - -function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - return fn(args); - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - const result = fn(args); - - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(fromModel => { - convert[fromModel] = {}; - - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); - - const routes = route(fromModel); - const routeModels = Object.keys(routes); - - routeModels.forEach(toModel => { - const fn = routes[toModel]; - - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -module.exports = convert; diff --git a/node_modules/color-convert/package.json b/node_modules/color-convert/package.json deleted file mode 100644 index 6e48000c7c..0000000000 --- a/node_modules/color-convert/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "color-convert", - "description": "Plain color conversion functions", - "version": "2.0.1", - "author": "Heather Arthur ", - "license": "MIT", - "repository": "Qix-/color-convert", - "scripts": { - "pretest": "xo", - "test": "node test/basic.js" - }, - "engines": { - "node": ">=7.0.0" - }, - "keywords": [ - "color", - "colour", - "convert", - "converter", - "conversion", - "rgb", - "hsl", - "hsv", - "hwb", - "cmyk", - "ansi", - "ansi16" - ], - "files": [ - "index.js", - "conversions.js", - "route.js" - ], - "xo": { - "rules": { - "default-case": 0, - "no-inline-comments": 0, - "operator-linebreak": 0 - } - }, - "devDependencies": { - "chalk": "^2.4.2", - "xo": "^0.24.0" - }, - "dependencies": { - "color-name": "~1.1.4" - } -} diff --git a/node_modules/color-convert/route.js b/node_modules/color-convert/route.js deleted file mode 100644 index 1a08521b5a..0000000000 --- a/node_modules/color-convert/route.js +++ /dev/null @@ -1,97 +0,0 @@ -const conversions = require('./conversions'); - -/* - This function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions); - - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions[current]); - - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions[graph[toModel].parent][toModel]; - - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -module.exports = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; - - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; - - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - diff --git a/node_modules/color-name/LICENSE b/node_modules/color-name/LICENSE deleted file mode 100644 index c6b1001254..0000000000 --- a/node_modules/color-name/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2015 Dmitry Ivanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/color-name/README.md b/node_modules/color-name/README.md deleted file mode 100644 index 932b979176..0000000000 --- a/node_modules/color-name/README.md +++ /dev/null @@ -1,11 +0,0 @@ -A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. - -[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) - - -```js -var colors = require('color-name'); -colors.red //[255,0,0] -``` - - diff --git a/node_modules/color-name/index.js b/node_modules/color-name/index.js deleted file mode 100644 index b7c198a6f3..0000000000 --- a/node_modules/color-name/index.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict' - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; diff --git a/node_modules/color-name/package.json b/node_modules/color-name/package.json deleted file mode 100644 index 782dd82878..0000000000 --- a/node_modules/color-name/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "color-name", - "version": "1.1.4", - "description": "A list of color names and its values", - "main": "index.js", - "files": [ - "index.js" - ], - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "git@github.com:colorjs/color-name.git" - }, - "keywords": [ - "color-name", - "color", - "color-keyword", - "keyword" - ], - "author": "DY ", - "license": "MIT", - "bugs": { - "url": "https://github.com/colorjs/color-name/issues" - }, - "homepage": "https://github.com/colorjs/color-name" -} diff --git a/node_modules/commander/LICENSE b/node_modules/commander/LICENSE deleted file mode 100644 index 10f997ab10..0000000000 --- a/node_modules/commander/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/commander/Readme.md b/node_modules/commander/Readme.md deleted file mode 100644 index ca6fb27fff..0000000000 --- a/node_modules/commander/Readme.md +++ /dev/null @@ -1,1149 +0,0 @@ -# Commander.js - -[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22) -[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) -[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) -[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) - -The complete solution for [node.js](http://nodejs.org) command-line interfaces. - -Read this in other languages: English | [简体中文](./Readme_zh-CN.md) - -- [Commander.js](#commanderjs) - - [Installation](#installation) - - [Quick Start](#quick-start) - - [Declaring _program_ variable](#declaring-program-variable) - - [Options](#options) - - [Common option types, boolean and value](#common-option-types-boolean-and-value) - - [Default option value](#default-option-value) - - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue) - - [Required option](#required-option) - - [Variadic option](#variadic-option) - - [Version option](#version-option) - - [More configuration](#more-configuration) - - [Custom option processing](#custom-option-processing) - - [Commands](#commands) - - [Command-arguments](#command-arguments) - - [More configuration](#more-configuration-1) - - [Custom argument processing](#custom-argument-processing) - - [Action handler](#action-handler) - - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands) - - [Life cycle hooks](#life-cycle-hooks) - - [Automated help](#automated-help) - - [Custom help](#custom-help) - - [Display help after errors](#display-help-after-errors) - - [Display help from code](#display-help-from-code) - - [.name](#name) - - [.usage](#usage) - - [.description and .summary](#description-and-summary) - - [.helpOption(flags, description)](#helpoptionflags-description) - - [.helpCommand()](#helpcommand) - - [More configuration](#more-configuration-2) - - [Custom event listeners](#custom-event-listeners) - - [Bits and pieces](#bits-and-pieces) - - [.parse() and .parseAsync()](#parse-and-parseasync) - - [Parsing Configuration](#parsing-configuration) - - [Legacy options as properties](#legacy-options-as-properties) - - [TypeScript](#typescript) - - [createCommand()](#createcommand) - - [Node options such as `--harmony`](#node-options-such-as---harmony) - - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands) - - [npm run-script](#npm-run-script) - - [Display error](#display-error) - - [Override exit and output handling](#override-exit-and-output-handling) - - [Additional documentation](#additional-documentation) - - [Support](#support) - - [Commander for enterprise](#commander-for-enterprise) - -For information about terms used in this document see: [terminology](./docs/terminology.md) - -## Installation - -```sh -npm install commander -``` - -## Quick Start - -You write code to describe your command line interface. -Commander looks after parsing the arguments into options and command-arguments, -displays usage errors for problems, and implements a help system. - -Commander is strict and displays an error for unrecognised options. -The two most used option types are a boolean option, and an option which takes its value from the following argument. - -Example file: [split.js](./examples/split.js) - -```js -const { program } = require('commander'); - -program - .option('--first') - .option('-s, --separator ') - .argument(''); - -program.parse(); - -const options = program.opts(); -const limit = options.first ? 1 : undefined; -console.log(program.args[0].split(options.separator, limit)); -``` - -```console -$ node split.js -s / --fits a/b/c -error: unknown option '--fits' -(Did you mean --first?) -$ node split.js -s / --first a/b/c -[ 'a' ] -``` - -Here is a more complete program using a subcommand and with descriptions for the help. In a multi-command program, you have an action handler for each command (or stand-alone executables for the commands). - -Example file: [string-util.js](./examples/string-util.js) - -```js -const { Command } = require('commander'); -const program = new Command(); - -program - .name('string-util') - .description('CLI to some JavaScript string utilities') - .version('0.8.0'); - -program.command('split') - .description('Split a string into substrings and display as an array') - .argument('', 'string to split') - .option('--first', 'display just the first substring') - .option('-s, --separator ', 'separator character', ',') - .action((str, options) => { - const limit = options.first ? 1 : undefined; - console.log(str.split(options.separator, limit)); - }); - -program.parse(); -``` - -```console -$ node string-util.js help split -Usage: string-util split [options] - -Split a string into substrings and display as an array. - -Arguments: - string string to split - -Options: - --first display just the first substring - -s, --separator separator character (default: ",") - -h, --help display help for command - -$ node string-util.js split --separator=/ a/b/c -[ 'a', 'b', 'c' ] -``` - -More samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. - -## Declaring _program_ variable - -Commander exports a global object which is convenient for quick programs. -This is used in the examples in this README for brevity. - -```js -// CommonJS (.cjs) -const { program } = require('commander'); -``` - -For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. - -```js -// CommonJS (.cjs) -const { Command } = require('commander'); -const program = new Command(); -``` - -```js -// ECMAScript (.mjs) -import { Command } from 'commander'; -const program = new Command(); -``` - -```ts -// TypeScript (.ts) -import { Command } from 'commander'; -const program = new Command(); -``` - -## Options - -Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). To allow a wider range of short-ish flags than just -single characters, you may also have two long options. Examples: - -```js -program - .option('-p, --port ', 'server port number') - .option('--trace', 'add extra debugging output') - .option('--ws, --workspace ', 'use a custom workspace') -``` - -The parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler. - -Multi-word options such as "--template-engine" are camel-cased, becoming `program.opts().templateEngine` etc. - -An option and its option-argument can be separated by a space, or combined into the same argument. The option-argument can follow the short option directly or follow an `=` for a long option. - -```sh -serve -p 80 -serve -p80 -serve --port 80 -serve --port=80 -``` - -You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted. - -By default, options on the command line are not positional, and can be specified before or after other arguments. - -There are additional related routines for when `.opts()` is not enough: - -- `.optsWithGlobals()` returns merged local and global option values -- `.getOptionValue()` and `.setOptionValue()` work with a single option value -- `.getOptionValueSource()` and `.setOptionValueWithSource()` include where the option value came from - -### Common option types, boolean and value - -The two most used option types are a boolean option, and an option which takes its value -from the following argument (declared with angle brackets like `--expect `). Both are `undefined` unless specified on command line. - -Example file: [options-common.js](./examples/options-common.js) - -```js -program - .option('-d, --debug', 'output extra debugging') - .option('-s, --small', 'small pizza size') - .option('-p, --pizza-type ', 'flavour of pizza'); - -program.parse(process.argv); - -const options = program.opts(); -if (options.debug) console.log(options); -console.log('pizza details:'); -if (options.small) console.log('- small pizza size'); -if (options.pizzaType) console.log(`- ${options.pizzaType}`); -``` - -```console -$ pizza-options -p -error: option '-p, --pizza-type ' argument missing -$ pizza-options -d -s -p vegetarian -{ debug: true, small: true, pizzaType: 'vegetarian' } -pizza details: -- small pizza size -- vegetarian -$ pizza-options --pizza-type=cheese -pizza details: -- cheese -``` - -Multiple boolean short options may be combined following the dash, and may be followed by a single short option taking a value. -For example `-d -s -p cheese` may be written as `-ds -p cheese` or even `-dsp cheese`. - -Options with an expected option-argument are greedy and will consume the following argument whatever the value. -So `--id -xyz` reads `-xyz` as the option-argument. - -`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`. - -### Default option value - -You can specify a default value for an option. - -Example file: [options-defaults.js](./examples/options-defaults.js) - -```js -program - .option('-c, --cheese ', 'add the specified type of cheese', 'blue'); - -program.parse(); - -console.log(`cheese: ${program.opts().cheese}`); -``` - -```console -$ pizza-options -cheese: blue -$ pizza-options --cheese stilton -cheese: stilton -``` - -### Other option types, negatable boolean and boolean|value - -You can define a boolean option long name with a leading `no-` to set the option value to false when used. -Defined alone this also makes the option true by default. - -If you define `--foo` first, adding `--no-foo` does not change the default value from what it would -otherwise be. - -Example file: [options-negatable.js](./examples/options-negatable.js) - -```js -program - .option('--no-sauce', 'Remove sauce') - .option('--cheese ', 'cheese flavour', 'mozzarella') - .option('--no-cheese', 'plain with no cheese') - .parse(); - -const options = program.opts(); -const sauceStr = options.sauce ? 'sauce' : 'no sauce'; -const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`; -console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); -``` - -```console -$ pizza-options -You ordered a pizza with sauce and mozzarella cheese -$ pizza-options --sauce -error: unknown option '--sauce' -$ pizza-options --cheese=blue -You ordered a pizza with sauce and blue cheese -$ pizza-options --no-sauce --no-cheese -You ordered a pizza with no sauce and no cheese -``` - -You can specify an option which may be used as a boolean option but may optionally take an option-argument -(declared with square brackets like `--optional [value]`). - -Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js) - -```js -program - .option('-c, --cheese [type]', 'Add cheese with optional type'); - -program.parse(process.argv); - -const options = program.opts(); -if (options.cheese === undefined) console.log('no cheese'); -else if (options.cheese === true) console.log('add cheese'); -else console.log(`add cheese type ${options.cheese}`); -``` - -```console -$ pizza-options -no cheese -$ pizza-options --cheese -add cheese -$ pizza-options --cheese mozzarella -add cheese type mozzarella -``` - -Options with an optional option-argument are not greedy and will ignore arguments starting with a dash. -So `id` behaves as a boolean option for `--id -5`, but you can use a combined form if needed like `--id=-5`. - -For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). - -### Required option - -You may specify a required (mandatory) option using `.requiredOption()`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option()` in format, taking flags and description, and optional default value or custom processing. - -Example file: [options-required.js](./examples/options-required.js) - -```js -program - .requiredOption('-c, --cheese ', 'pizza must have cheese'); - -program.parse(); -``` - -```console -$ pizza -error: required option '-c, --cheese ' not specified -``` - -### Variadic option - -You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you -can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments -are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value -is specified in the same argument as the option then no further values are read. - -Example file: [options-variadic.js](./examples/options-variadic.js) - -```js -program - .option('-n, --number ', 'specify numbers') - .option('-l, --letter [letters...]', 'specify letters'); - -program.parse(); - -console.log('Options: ', program.opts()); -console.log('Remaining arguments: ', program.args); -``` - -```console -$ collect -n 1 2 3 --letter a b c -Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] } -Remaining arguments: [] -$ collect --letter=A -n80 operand -Options: { number: [ '80' ], letter: [ 'A' ] } -Remaining arguments: [ 'operand' ] -$ collect --letter -n 1 -n 2 3 -- operand -Options: { number: [ '1', '2', '3' ], letter: true } -Remaining arguments: [ 'operand' ] -``` - -For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). - -### Version option - -The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. - -```js -program.version('0.0.1'); -``` - -```console -$ ./examples/pizza -V -0.0.1 -``` - -You may change the flags and description by passing additional parameters to the `version` method, using -the same syntax for flags as the `option` method. - -```js -program.version('0.0.1', '-v, --vers', 'output the current version'); -``` - -### More configuration - -You can add most options using the `.option()` method, but there are some additional features available -by constructing an `Option` explicitly for less common cases. - -Example files: [options-extra.js](./examples/options-extra.js), [options-env.js](./examples/options-env.js), [options-conflicts.js](./examples/options-conflicts.js), [options-implies.js](./examples/options-implies.js) - -```js -program - .addOption(new Option('-s, --secret').hideHelp()) - .addOption(new Option('-t, --timeout ', 'timeout in seconds').default(60, 'one minute')) - .addOption(new Option('-d, --drink ', 'drink size').choices(['small', 'medium', 'large'])) - .addOption(new Option('-p, --port ', 'port number').env('PORT')) - .addOption(new Option('--donate [amount]', 'optional donation in dollars').preset('20').argParser(parseFloat)) - .addOption(new Option('--disable-server', 'disables the server').conflicts('port')) - .addOption(new Option('--free-drink', 'small drink included free ').implies({ drink: 'small' })); -``` - -```console -$ extra --help -Usage: help [options] - -Options: - -t, --timeout timeout in seconds (default: one minute) - -d, --drink drink cup size (choices: "small", "medium", "large") - -p, --port port number (env: PORT) - --donate [amount] optional donation in dollars (preset: "20") - --disable-server disables the server - --free-drink small drink included free - -h, --help display help for command - -$ extra --drink huge -error: option '-d, --drink ' argument 'huge' is invalid. Allowed choices are small, medium, large. - -$ PORT=80 extra --donate --free-drink -Options: { timeout: 60, donate: 20, port: '80', freeDrink: true, drink: 'small' } - -$ extra --disable-server --port 8000 -error: option '--disable-server' cannot be used with option '-p, --port ' -``` - -Specify a required (mandatory) option using the `Option` method `.makeOptionMandatory()`. This matches the `Command` method [.requiredOption()](#required-option). - -### Custom option processing - -You may specify a function to do custom processing of option-arguments. The callback function receives two parameters, -the user specified option-argument and the previous value for the option. It returns the new value for the option. - -This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing. - -You can optionally specify the default/starting value for the option after the function parameter. - -Example file: [options-custom-processing.js](./examples/options-custom-processing.js) - -```js -function myParseInt(value, dummyPrevious) { - // parseInt takes a string and a radix - const parsedValue = parseInt(value, 10); - if (isNaN(parsedValue)) { - throw new commander.InvalidArgumentError('Not a number.'); - } - return parsedValue; -} - -function increaseVerbosity(dummyValue, previous) { - return previous + 1; -} - -function collect(value, previous) { - return previous.concat([value]); -} - -function commaSeparatedList(value, dummyPrevious) { - return value.split(','); -} - -program - .option('-f, --float ', 'float argument', parseFloat) - .option('-i, --integer ', 'integer argument', myParseInt) - .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) - .option('-c, --collect ', 'repeatable value', collect, []) - .option('-l, --list ', 'comma separated list', commaSeparatedList) -; - -program.parse(); - -const options = program.opts(); -if (options.float !== undefined) console.log(`float: ${options.float}`); -if (options.integer !== undefined) console.log(`integer: ${options.integer}`); -if (options.verbose > 0) console.log(`verbosity: ${options.verbose}`); -if (options.collect.length > 0) console.log(options.collect); -if (options.list !== undefined) console.log(options.list); -``` - -```console -$ custom -f 1e2 -float: 100 -$ custom --integer 2 -integer: 2 -$ custom -v -v -v -verbose: 3 -$ custom -c a -c b -c c -[ 'a', 'b', 'c' ] -$ custom --list x,y,z -[ 'x', 'y', 'z' ] -``` - -## Commands - -You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)). - -In the first parameter to `.command()` you specify the command name. You may append the command-arguments after the command name, or specify them separately using `.argument()`. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`. - -You can use `.addCommand()` to add an already configured subcommand to the program. - -For example: - -```js -// Command implemented using action handler (description is supplied separately to `.command`) -// Returns new command for configuring. -program - .command('clone [destination]') - .description('clone a repository into a newly created directory') - .action((source, destination) => { - console.log('clone command called'); - }); - -// Command implemented using stand-alone executable file, indicated by adding description as second parameter to `.command`. -// Returns `this` for adding more commands. -program - .command('start ', 'start named service') - .command('stop [service]', 'stop named service, or all if no name supplied'); - -// Command prepared separately. -// Returns `this` for adding more commands. -program - .addCommand(build.makeBuildCommand()); -``` - -Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will -remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other -subcommand is specified ([example](./examples/defaultCommand.js)). - -You can add alternative names for a command with `.alias()`. ([example](./examples/alias.js)) - -`.command()` automatically copies the inherited settings from the parent command to the newly created subcommand. This is only done during creation, any later setting changes to the parent are not inherited. - -For safety, `.addCommand()` does not automatically copy the inherited settings from the parent command. There is a helper routine `.copyInheritedSettings()` for copying the settings when they are wanted. - -### Command-arguments - -For subcommands, you can specify the argument syntax in the call to `.command()` (as shown above). This -is the only method usable for subcommands implemented using a stand-alone executable, but for other subcommands -you can instead use the following method. - -To configure a command, you can use `.argument()` to specify each expected command-argument. -You supply the argument name and an optional description. The argument may be `` or `[optional]`. -You can specify a default value for an optional command-argument. - -Example file: [argument.js](./examples/argument.js) - -```js -program - .version('0.1.0') - .argument('', 'user to login') - .argument('[password]', 'password for user, if required', 'no password given') - .action((username, password) => { - console.log('username:', username); - console.log('password:', password); - }); -``` - - The last argument of a command can be variadic, and only the last argument. To make an argument variadic you - append `...` to the argument name. A variadic argument is passed to the action handler as an array. For example: - -```js -program - .version('0.1.0') - .command('rmdir') - .argument('') - .action(function (dirs) { - dirs.forEach((dir) => { - console.log('rmdir %s', dir); - }); - }); -``` - -There is a convenience method to add multiple arguments at once, but without descriptions: - -```js -program - .arguments(' '); -``` - -#### More configuration - -There are some additional features available by constructing an `Argument` explicitly for less common cases. - -Example file: [arguments-extra.js](./examples/arguments-extra.js) - -```js -program - .addArgument(new commander.Argument('', 'drink cup size').choices(['small', 'medium', 'large'])) - .addArgument(new commander.Argument('[timeout]', 'timeout in seconds').default(60, 'one minute')) -``` - -#### Custom argument processing - -You may specify a function to do custom processing of command-arguments (like for option-arguments). -The callback function receives two parameters, the user specified command-argument and the previous value for the argument. -It returns the new value for the argument. - -The processed argument values are passed to the action handler, and saved as `.processedArgs`. - -You can optionally specify the default/starting value for the argument after the function parameter. - -Example file: [arguments-custom-processing.js](./examples/arguments-custom-processing.js) - -```js -program - .command('add') - .argument('', 'integer argument', myParseInt) - .argument('[second]', 'integer argument', myParseInt, 1000) - .action((first, second) => { - console.log(`${first} + ${second} = ${first + second}`); - }) -; -``` - -### Action handler - -The action handler gets passed a parameter for each command-argument you declared, and two additional parameters -which are the parsed options and the command object itself. - -Example file: [thank.js](./examples/thank.js) - -```js -program - .argument('') - .option('-t, --title ', 'title to use before name') - .option('-d, --debug', 'display some debugging') - .action((name, options, command) => { - if (options.debug) { - console.error('Called %s with options %o', command.name(), options); - } - const title = options.title ? `${options.title} ` : ''; - console.log(`Thank-you ${title}${name}`); - }); -``` - -If you prefer, you can work with the command directly and skip declaring the parameters for the action handler. The `this` keyword is set to the running command and can be used from a function expression (but not from an arrow function). - -Example file: [action-this.js](./examples/action-this.js) - -```js -program - .command('serve') - .argument(' -``` - -## Use - -```js -import {decodeNamedCharacterReference} from 'decode-named-character-reference' - -decodeNamedCharacterReference('amp') //=> '&' -``` - -## API - -This package exports the following identifier: `decodeNamedCharacterReference`. -There is no default export. - -### `decodeNamedCharacterReference(value)` - -Again, use [`parse-entities`][parse-entities]. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`parse-entities`][parse-entities] - — parse (decode) HTML character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/decode-named-character-reference/workflows/main/badge.svg - -[build]: https://github.com/wooorm/decode-named-character-reference/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/decode-named-character-reference.svg - -[coverage]: https://codecov.io/github/wooorm/decode-named-character-reference - -[downloads-badge]: https://img.shields.io/npm/dm/decode-named-character-reference.svg - -[downloads]: https://www.npmjs.com/package/decode-named-character-reference - -[size-badge]: https://img.shields.io/bundlephobia/minzip/decode-named-character-reference.svg - -[size]: https://bundlephobia.com/result?p=decode-named-character-reference - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[parse-entities]: https://github.com/wooorm/parse-entities diff --git a/node_modules/deep-extend/CHANGELOG.md b/node_modules/deep-extend/CHANGELOG.md deleted file mode 100644 index dd13ec1311..0000000000 --- a/node_modules/deep-extend/CHANGELOG.md +++ /dev/null @@ -1,46 +0,0 @@ -Changelog -========= - -v0.6.0 ------- - -- Updated "devDependencies" versions to fix vulnerability alerts -- Dropped support of io.js and node.js v0.12.x and lower since new versions of - "devDependencies" couldn't work with those old node.js versions - (minimal supported version of node.js now is v4.0.0) - -v0.5.1 ------- - -- Fix prototype pollution vulnerability (thanks to @mwakerman for the PR) -- Avoid using deprecated Buffer API (thanks to @ChALkeR for the PR) - -v0.5.0 ------- - -- Auto-testing provided by Travis CI; -- Support older Node.JS versions (`v0.11.x` and `v0.10.x`); -- Removed tests files from npm package. - -v0.4.2 ------- - -- Fix for `null` as an argument. - -v0.4.1 ------- - -- Removed test code from npm package - ([see pull request #21](https://github.com/unclechu/node-deep-extend/pull/21)); -- Increased minimal version of Node from `0.4.0` to `0.12.0` - (because can't run tests on lesser version anyway). - -v0.4.0 ------- - -- **WARNING!** Broken backward compatibility with `v0.3.x`; -- Fixed bug with extending arrays instead of cloning; -- Deep cloning for arrays; -- Check for own property; -- Fixed some documentation issues; -- Strict JS mode. diff --git a/node_modules/deep-extend/LICENSE b/node_modules/deep-extend/LICENSE deleted file mode 100644 index 5c58916f2f..0000000000 --- a/node_modules/deep-extend/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2018, Viacheslav Lotsmanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/deep-extend/README.md b/node_modules/deep-extend/README.md deleted file mode 100644 index 67c7fc0859..0000000000 --- a/node_modules/deep-extend/README.md +++ /dev/null @@ -1,91 +0,0 @@ -Deep Extend -=========== - -Recursive object extending. - -[![Build Status](https://api.travis-ci.org/unclechu/node-deep-extend.svg?branch=master)](https://travis-ci.org/unclechu/node-deep-extend) - -[![NPM](https://nodei.co/npm/deep-extend.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/deep-extend/) - -Install -------- - -```bash -$ npm install deep-extend -``` - -Usage ------ - -```javascript -var deepExtend = require('deep-extend'); -var obj1 = { - a: 1, - b: 2, - d: { - a: 1, - b: [], - c: { test1: 123, test2: 321 } - }, - f: 5, - g: 123, - i: 321, - j: [1, 2] -}; -var obj2 = { - b: 3, - c: 5, - d: { - b: { first: 'one', second: 'two' }, - c: { test2: 222 } - }, - e: { one: 1, two: 2 }, - f: [], - g: (void 0), - h: /abc/g, - i: null, - j: [3, 4] -}; - -deepExtend(obj1, obj2); - -console.log(obj1); -/* -{ a: 1, - b: 3, - d: - { a: 1, - b: { first: 'one', second: 'two' }, - c: { test1: 123, test2: 222 } }, - f: [], - g: undefined, - c: 5, - e: { one: 1, two: 2 }, - h: /abc/g, - i: null, - j: [3, 4] } -*/ -``` - -Unit testing ------------- - -```bash -$ npm test -``` - -Changelog ---------- - -[CHANGELOG.md](./CHANGELOG.md) - -Any issues? ------------ - -Please, report about issues -[here](https://github.com/unclechu/node-deep-extend/issues). - -License -------- - -[MIT](./LICENSE) diff --git a/node_modules/deep-extend/index.js b/node_modules/deep-extend/index.js deleted file mode 100644 index 762d81e954..0000000000 --- a/node_modules/deep-extend/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/deep-extend'); diff --git a/node_modules/deep-extend/package.json b/node_modules/deep-extend/package.json deleted file mode 100644 index 5f2195ff93..0000000000 --- a/node_modules/deep-extend/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "deep-extend", - "description": "Recursive object extending", - "license": "MIT", - "version": "0.6.0", - "homepage": "https://github.com/unclechu/node-deep-extend", - "keywords": [ - "deep-extend", - "extend", - "deep", - "recursive", - "xtend", - "clone", - "merge", - "json" - ], - "licenses": [ - { - "type": "MIT", - "url": "https://raw.githubusercontent.com/unclechu/node-deep-extend/master/LICENSE" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/unclechu/node-deep-extend.git" - }, - "author": "Viacheslav Lotsmanov ", - "bugs": "https://github.com/unclechu/node-deep-extend/issues", - "contributors": [ - { - "name": "Romain Prieto", - "url": "https://github.com/rprieto" - }, - { - "name": "Max Maximov", - "url": "https://github.com/maxmaximov" - }, - { - "name": "Marshall Bowers", - "url": "https://github.com/maxdeviant" - }, - { - "name": "Misha Wakerman", - "url": "https://github.com/mwakerman" - } - ], - "main": "lib/deep-extend.js", - "engines": { - "node": ">=4.0.0" - }, - "scripts": { - "test": "./node_modules/.bin/mocha" - }, - "devDependencies": { - "mocha": "5.2.0", - "should": "13.2.1" - }, - "files": [ - "index.js", - "lib/" - ] -} diff --git a/node_modules/dequal/index.d.ts b/node_modules/dequal/index.d.ts deleted file mode 100644 index a9aea5d506..0000000000 --- a/node_modules/dequal/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/license b/node_modules/dequal/license deleted file mode 100644 index a3f96f8284..0000000000 --- a/node_modules/dequal/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Luke Edwards (lukeed.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/dequal/lite/index.d.ts b/node_modules/dequal/lite/index.d.ts deleted file mode 100644 index a9aea5d506..0000000000 --- a/node_modules/dequal/lite/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.js b/node_modules/dequal/lite/index.js deleted file mode 100644 index ac3eb6b870..0000000000 --- a/node_modules/dequal/lite/index.js +++ /dev/null @@ -1,31 +0,0 @@ -var has = Object.prototype.hasOwnProperty; - -function dequal(foo, bar) { - var ctor, len; - if (foo === bar) return true; - - if (foo && bar && (ctor=foo.constructor) === bar.constructor) { - if (ctor === Date) return foo.getTime() === bar.getTime(); - if (ctor === RegExp) return foo.toString() === bar.toString(); - - if (ctor === Array) { - if ((len=foo.length) === bar.length) { - while (len-- && dequal(foo[len], bar[len])); - } - return len === -1; - } - - if (!ctor || typeof foo === 'object') { - len = 0; - for (ctor in foo) { - if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; - if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; - } - return Object.keys(bar).length === len; - } - } - - return foo !== foo && bar !== bar; -} - -exports.dequal = dequal; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.min.js b/node_modules/dequal/lite/index.min.js deleted file mode 100644 index 2eaa55fd06..0000000000 --- a/node_modules/dequal/lite/index.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dequal={})}(this,(function(e){var t=Object.prototype.hasOwnProperty;e.dequal=function e(r,n){var o,i;if(r===n)return!0;if(r&&n&&(o=r.constructor)===n.constructor){if(o===Date)return r.getTime()===n.getTime();if(o===RegExp)return r.toString()===n.toString();if(o===Array){if((i=r.length)===n.length)for(;i--&&e(r[i],n[i]););return-1===i}if(!o||"object"==typeof r){for(o in i=0,r){if(t.call(r,o)&&++i&&!t.call(n,o))return!1;if(!(o in n)||!e(r[o],n[o]))return!1}return Object.keys(n).length===i}}return r!=r&&n!=n}})); \ No newline at end of file diff --git a/node_modules/dequal/lite/index.mjs b/node_modules/dequal/lite/index.mjs deleted file mode 100644 index 5820d674f8..0000000000 --- a/node_modules/dequal/lite/index.mjs +++ /dev/null @@ -1,29 +0,0 @@ -var has = Object.prototype.hasOwnProperty; - -export function dequal(foo, bar) { - var ctor, len; - if (foo === bar) return true; - - if (foo && bar && (ctor=foo.constructor) === bar.constructor) { - if (ctor === Date) return foo.getTime() === bar.getTime(); - if (ctor === RegExp) return foo.toString() === bar.toString(); - - if (ctor === Array) { - if ((len=foo.length) === bar.length) { - while (len-- && dequal(foo[len], bar[len])); - } - return len === -1; - } - - if (!ctor || typeof foo === 'object') { - len = 0; - for (ctor in foo) { - if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; - if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; - } - return Object.keys(bar).length === len; - } - } - - return foo !== foo && bar !== bar; -} diff --git a/node_modules/dequal/package.json b/node_modules/dequal/package.json deleted file mode 100644 index df1cb29cb2..0000000000 --- a/node_modules/dequal/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "dequal", - "version": "2.0.3", - "repository": "lukeed/dequal", - "description": "A tiny (304B to 489B) utility for check for deep equality", - "unpkg": "dist/index.min.js", - "module": "dist/index.mjs", - "main": "dist/index.js", - "types": "index.d.ts", - "license": "MIT", - "author": { - "name": "Luke Edwards", - "email": "luke.edwards05@gmail.com", - "url": "https://lukeed.com" - }, - "engines": { - "node": ">=6" - }, - "scripts": { - "build": "bundt", - "pretest": "npm run build", - "postbuild": "echo \"lite\" | xargs -n1 cp -v index.d.ts", - "test": "uvu -r esm test" - }, - "files": [ - "*.d.ts", - "dist", - "lite" - ], - "exports": { - ".": { - "types": "./index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - }, - "./lite": { - "types": "./index.d.ts", - "import": "./lite/index.mjs", - "require": "./lite/index.js" - }, - "./package.json": "./package.json" - }, - "modes": { - "lite": "src/lite.js", - "default": "src/index.js" - }, - "keywords": [ - "deep", - "deep-equal", - "equality" - ], - "devDependencies": { - "bundt": "1.0.2", - "esm": "3.2.25", - "uvu": "0.3.2" - } -} diff --git a/node_modules/dequal/readme.md b/node_modules/dequal/readme.md deleted file mode 100644 index e3341ef475..0000000000 --- a/node_modules/dequal/readme.md +++ /dev/null @@ -1,112 +0,0 @@ -# dequal [![CI](https://github.com/lukeed/dequal/workflows/CI/badge.svg)](https://github.com/lukeed/dequal/actions) - -> A tiny (304B to 489B) utility to check for deep equality - -This module supports comparison of all types, including `Function`, `RegExp`, `Date`, `Set`, `Map`, `TypedArray`s, `DataView`, `null`, `undefined`, and `NaN` values. Complex values (eg, Objects, Arrays, Sets, Maps, etc) are traversed recursively. - -> **Important:** -> * key order **within Objects** does not matter -> * value order **within Arrays** _does_ matter -> * values **within Sets and Maps** use value equality -> * keys **within Maps** use value equality - - -## Install - -``` -$ npm install --save dequal -``` - -## Modes - -There are two "versions" of `dequal` available: - -#### `dequal` -> **Size (gzip):** 489 bytes
      -> **Availability:** [CommonJS](https://unpkg.com/dequal/dist/index.js), [ES Module](https://unpkg.com/dequal/dist/index.mjs), [UMD](https://unpkg.com/dequal/dist/index.min.js) - -#### `dequal/lite` -> **Size (gzip):** 304 bytes
      -> **Availability:** [CommonJS](https://unpkg.com/dequal/lite/index.js), [ES Module](https://unpkg.com/dequal/lite/index.mjs) - -| | IE9+ | Number | String | Date | RegExp | Object | Array | Class | Set | Map | ArrayBuffer | [TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects) | [DataView](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) | -|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| -| `dequal` | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| `dequal/lite` | :+1: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | - -> **Note:** Table scrolls horizontally! - -## Usage - -```js -import { dequal } from 'dequal'; - -dequal(1, 1); //=> true -dequal({}, {}); //=> true -dequal('foo', 'foo'); //=> true -dequal([1, 2, 3], [1, 2, 3]); //=> true -dequal(dequal, dequal); //=> true -dequal(/foo/, /foo/); //=> true -dequal(null, null); //=> true -dequal(NaN, NaN); //=> true -dequal([], []); //=> true -dequal( - [{ a:1 }, [{ b:{ c:[1] } }]], - [{ a:1 }, [{ b:{ c:[1] } }]] -); //=> true - -dequal(1, '1'); //=> false -dequal(null, undefined); //=> false -dequal({ a:1, b:[2,3] }, { a:1, b:[2,5] }); //=> false -dequal(/foo/i, /bar/g); //=> false -``` - -## API - -### dequal(foo, bar) -Returns: `Boolean` - -Both `foo` and `bar` can be of any type.
      -A `Boolean` is returned indicating if the two were deeply equal. - - -## Benchmarks - -> Running Node v10.13.0 - -The benchmarks can be found in the [`/bench`](/bench) directory. They are separated into two categories: - -* `basic` – compares an object comprised of `String`, `Number`, `Date`, `Array`, and `Object` values. -* `complex` – like `basic`, but adds `RegExp`, `Map`, `Set`, and `Uint8Array` values. - -> **Note:** Only candidates that pass validation step(s) are listed.
      For example, `fast-deep-equal/es6` handles `Set` and `Map` values, but uses _referential equality_ while those listed use _value equality_. - -``` -Load times: - assert 0.109ms - util 0.006ms - fast-deep-equal 0.479ms - lodash/isequal 22.826ms - nano-equal 0.417ms - dequal 0.396ms - dequal/lite 0.264ms - -Benchmark :: basic - assert.deepStrictEqual x 325,262 ops/sec ±0.57% (94 runs sampled) - util.isDeepStrictEqual x 318,812 ops/sec ±0.87% (94 runs sampled) - fast-deep-equal x 1,332,393 ops/sec ±0.36% (93 runs sampled) - lodash.isEqual x 269,129 ops/sec ±0.59% (95 runs sampled) - nano-equal x 1,122,053 ops/sec ±0.36% (96 runs sampled) - dequal/lite x 1,700,972 ops/sec ±0.31% (94 runs sampled) - dequal x 1,698,972 ops/sec ±0.63% (97 runs sampled) - -Benchmark :: complex - assert.deepStrictEqual x 124,518 ops/sec ±0.64% (96 runs sampled) - util.isDeepStrictEqual x 125,113 ops/sec ±0.24% (96 runs sampled) - lodash.isEqual x 58,677 ops/sec ±0.49% (96 runs sampled) - dequal x 345,386 ops/sec ±0.27% (96 runs sampled) -``` - -## License - -MIT © [Luke Edwards](https://lukeed.com) diff --git a/node_modules/devlop/license b/node_modules/devlop/license deleted file mode 100644 index de5a7bba71..0000000000 --- a/node_modules/devlop/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2023 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/devlop/package.json b/node_modules/devlop/package.json deleted file mode 100644 index 8319d8d58a..0000000000 --- a/node_modules/devlop/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "devlop", - "version": "1.1.0", - "description": "Do things in development and nothing otherwise", - "license": "MIT", - "keywords": [ - "assert", - "deprecate", - "develop", - "development" - ], - "repository": "wooorm/devlop", - "bugs": "https://github.com/wooorm/devlop/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "exports": { - "types": "./lib/development.d.ts", - "development": "./lib/development.js", - "default": "./lib/default.js" - }, - "files": [ - "lib/" - ], - "dependencies": { - "dequal": "^2.0.0" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^15.1.0", - "@rollup/plugin-terser": "^0.4.3", - "@types/node": "^20.0.0", - "c8": "^8.0.0", - "esbuild": "^0.18.0", - "prettier": "^2.0.0", - "remark-cli": "^11.0.0", - "remark-preset-wooorm": "^9.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.54.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api-development": "node --conditions development test-development.js", - "test-api-default": "node test-default.js", - "test-api": "npm run test-api-development && npm run test-api-default", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "prettier": true - } -} diff --git a/node_modules/devlop/readme.md b/node_modules/devlop/readme.md deleted file mode 100644 index d90be19130..0000000000 --- a/node_modules/devlop/readme.md +++ /dev/null @@ -1,360 +0,0 @@ -# devlop - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Some tools to make developing easier while not including code in production. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`deprecate(fn, message[, code])`](#deprecatefn-message-code) - * [`equal(actual, expected[, message])`](#equalactual-expected-message) - * [`ok(value[, message])`](#okvalue-message) - * [`unreachable(message?)`](#unreachablemessage) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package lets you do things in development that are free in production. -It contains useful `assert` functions and a `deprecate` function that are -useful when developing JavaScript packages while being small in production. - -If you know Rust, you might know how nice having a -[`debug_assert!`][rust-debug-assert] is. -This is that, and a bit more. -For more on why they’re nice, see -[“Rust’s Two Kinds of ‘Assert’ Make for Better Code”][rust-two-kinds] - -## When should I use this? - -Many JavaScript programs do not use assertions at all (perhaps because they’re -typed and so assume type safety) or include lots of code to throw errors when -users do weird things (weighing down production code). -This package hopes to improve the sitation by making assertions free and -deprecations cheap. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install devlop -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {deprecate, equal, ok, unreachable} from 'https://esm.sh/devlop@1' -// For development code: -// import {deprecate, equal, ok} from 'https://esm.sh/devlop@1?conditions=development' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say we have a small ponyfill for the ES5 `String#includes` function. -It’s deprecated, because folks can use `String#includes` nowadays. -It’s nicely typed so users should be able to figure out what to pass but we -include assertions to show nicer errors when they get it wrong. - -`example/string-includes.js`: - -```js -import {deprecate, ok} from 'devlop' - -export const stringIncludes = deprecate( - includes, - 'Since ES5, please use `String#includes` itself.' -) - -/** - * @deprecated - * Since ES5, please use `String#includes` itself. - * @param {string} value - * Value to search in. - * @param {string} search - * Value to search for. - * @param {number | undefined} [position=0] - * Position to search from (default: `0`). - * @returns {boolean} - * Whether the searched for value exists in the searched value after position. - */ -function includes(value, search, position) { - ok(typeof value === 'string', 'expected string for `value`') - ok(typeof search === 'string', 'expected string for `search`') - ok(position === undefined || typeof position === 'number', 'expected number') - ok( - position === undefined || - (typeof position === 'number' && - !(/* #__PURE__ */ Number.isNaN(position))), - 'expected number' - ) - // eslint-disable-next-line unicorn/prefer-includes - return value.indexOf(search, position || 0) !== -1 -} -``` - -`example/index.js`: - -```js -import {stringIncludes} from './example-includes.js' - -console.log(stringIncludes('blue whale', 'dolphin')) //=> false -console.log(stringIncludes('blue whale', 'whale')) //=> true -``` - -Say we’d bundle that in development with [`esbuild`][esbuild] and check the -gzip size ([`gzip-size-cli`][gzip-size-cli]), we’d get 1.02 kB of code: - -```sh -$ esbuild example/index.js --bundle --conditions=development --format=esm --minify --target=es2022 | gzip-size -1.02 kB -``` - -But because `devlop` is light in production we’d get: - -```sh -$ esbuild example/index.js --bundle --format=esm --minify --target=es2022 | gzip-size -169 B -``` - -The bundle looks as follows: - -```js -function u(n){return n}var r=u(c,"Since ES5, please use `String#includes` itself.");function c(n,t,e){return n.indexOf(t,e||0)!==-1}console.log(r("blue whale","dolphin"));console.log(r("blue whale","whale")); -``` - -It depends a bit on which bundler and minifier you use how small the code is: -esbuild keeps the unused message parameter to the `deprecate` function around -and does not know `Number.isNaN` can be dropped without a `/* #__PURE__ */` -annotation. - -[`rollup`][rollup] with [`@rollup/plugin-node-resolve`][node-resolve] -and [`@rollup/plugin-terser`][terser] performs even better: - -```sh -$ rollup example/index.js -p node-resolve -p terser | gzip-size -118 B -``` - -The bundle looks as follows: - -```js -const l=function(l,e,o){return-1!==l.indexOf(e,o||0)};console.log(l("blue whale","dolphin")),console.log(l("blue whale","whale")); -``` - -Rollup doesn’t need the `/* #__PURE__ */` comment either! - -## API - -This package exports the identifiers [`deprecate`][api-deprecate], -[`equal`][api-equal], [`ok`][api-ok], and [`unreachable`][api-unreachable]. -There is no default export. - -The export map supports the [`development` condition][node-condition]. -Run `node --conditions development module.js` to get dev code. -Without this condition, no-ops are loaded. - -### `deprecate(fn, message[, code])` - -Wrap a function or class to show a deprecation message when first called. - -> 👉 **Important**: only shows a message when the `development` condition is -> used, does nothing in production. - -When the resulting wrapped `fn` is called, emits a warning once to -`console.error` (`stderr`). -If a code is given, one warning message will be emitted in total per code. - -###### Parameters - -* `fn` (`Function`) - — function or class -* `message` (`string`) - — message explaining deprecation -* `code` (`string`, optional) - — deprecation identifier (optional); deprecation messages will be generated - only once per code - -###### Returns - -Wrapped `fn`. - -### `equal(actual, expected[, message])` - -Assert deep strict equivalence. - -> 👉 **Important**: only asserts when the `development` condition is used, does -> nothing in production. - -###### Parameters - -* `actual` (`unknown`) - — value -* `expected` (`unknown`) - — baseline -* `message` (`Error` or `string`, default: `'Expected values to be deeply - equal'`) - — message for assertion error - -###### Returns - -Nothing (`undefined`). - -###### Throws - -Throws (`AssertionError`) when `actual` is not deep strict equal to `expected`. - -### `ok(value[, message])` - -Assert if `value` is truthy. - -> 👉 **Important**: only asserts when the `development` condition is used, does -> nothing in production. - -###### Parameters - -* `actual` (`unknown`) - — value to assert -* `message` (`Error` or `string`, default: `'Expected value to be truthy'`) - — message for assertion error - -###### Returns - -Nothing (`undefined`). - -###### Throws - -Throws (`AssertionError`) when `value` is falsey. - -### `unreachable(message?)` - -Assert that a code path never happens. - -> 👉 **Important**: only asserts when the `development` condition is used, -> does nothing in production. - -###### Parameters - -* `message` (`Error` or `string`, default: `'Unreachable'`) - — message for assertion error - -###### Returns - -Never (`never`). - -###### Throws - -Throws (`AssertionError`), always. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -This project is compatible with maintained versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, `devlop@^1`, -compatible with Node.js 16. - -## Security - -This package is safe. - -## Related - -* [`babel-plugin-unassert`](https://github.com/unassert-js/babel-plugin-unassert) - — encourage reliable programming with assertions while compiling them away - in production (can remove arbitrary `assert` modules, works regardless of - conditions, so has to be configured by the end user) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/devlop/workflows/main/badge.svg - -[build]: https://github.com/wooorm/devlop/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/devlop.svg - -[coverage]: https://codecov.io/github/wooorm/devlop - -[downloads-badge]: https://img.shields.io/npm/dm/devlop.svg - -[downloads]: https://www.npmjs.com/package/devlop - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=devlop - -[size]: https://bundlejs.com/?q=devlop - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[node-condition]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[rust-debug-assert]: https://doc.rust-lang.org/std/macro.debug_assert.html - -[rust-two-kinds]: https://tratt.net/laurie/blog/2023/rusts_two_kinds_of_assert_make_for_better_code.html - -[esbuild]: https://esbuild.github.io - -[gzip-size-cli]: https://github.com/sindresorhus/gzip-size-cli/tree/main - -[rollup]: https://rollupjs.org - -[node-resolve]: https://github.com/rollup/plugins/tree/master/packages/node-resolve - -[terser]: https://github.com/rollup/plugins/tree/master/packages/terser#readme - -[api-deprecate]: #deprecatefn-message-code - -[api-equal]: #equalactual-expected-message - -[api-ok]: #okvalue-message - -[api-unreachable]: #unreachablemessage diff --git a/node_modules/eastasianwidth/README.md b/node_modules/eastasianwidth/README.md deleted file mode 100644 index a8b71ee54d..0000000000 --- a/node_modules/eastasianwidth/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# East Asian Width - -Get [East Asian Width](http://www.unicode.org/reports/tr11/) from a character. - -'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural). - -Original Code is [東アジアの文字幅 (East Asian Width) の判定 - 中途](http://d.hatena.ne.jp/takenspc/20111126#1322252878). - -## Install - - $ npm install eastasianwidth - -## Usage - - var eaw = require('eastasianwidth'); - console.log(eaw.eastAsianWidth('₩')) // 'F' - console.log(eaw.eastAsianWidth('。')) // 'H' - console.log(eaw.eastAsianWidth('뀀')) // 'W' - console.log(eaw.eastAsianWidth('a')) // 'Na' - console.log(eaw.eastAsianWidth('①')) // 'A' - console.log(eaw.eastAsianWidth('ف')) // 'N' - - console.log(eaw.characterLength('₩')) // 2 - console.log(eaw.characterLength('。')) // 1 - console.log(eaw.characterLength('뀀')) // 2 - console.log(eaw.characterLength('a')) // 1 - console.log(eaw.characterLength('①')) // 2 - console.log(eaw.characterLength('ف')) // 1 - - console.log(eaw.length('あいうえお')) // 10 - console.log(eaw.length('abcdefg')) // 7 - console.log(eaw.length('¢₩。ᅵㄅ뀀¢⟭a⊙①بف')) // 19 diff --git a/node_modules/eastasianwidth/eastasianwidth.js b/node_modules/eastasianwidth/eastasianwidth.js deleted file mode 100644 index 7d0aa0f6ec..0000000000 --- a/node_modules/eastasianwidth/eastasianwidth.js +++ /dev/null @@ -1,311 +0,0 @@ -var eaw = {}; - -if ('undefined' == typeof module) { - window.eastasianwidth = eaw; -} else { - module.exports = eaw; -} - -eaw.eastAsianWidth = function(character) { - var x = character.charCodeAt(0); - var y = (character.length == 2) ? character.charCodeAt(1) : 0; - var codePoint = x; - if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { - x &= 0x3FF; - y &= 0x3FF; - codePoint = (x << 10) | y; - codePoint += 0x10000; - } - - if ((0x3000 == codePoint) || - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { - return 'F'; - } - if ((0x20A9 == codePoint) || - (0xFF61 <= codePoint && codePoint <= 0xFFBE) || - (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || - (0xFFCA <= codePoint && codePoint <= 0xFFCF) || - (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || - (0xFFDA <= codePoint && codePoint <= 0xFFDC) || - (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { - return 'H'; - } - if ((0x1100 <= codePoint && codePoint <= 0x115F) || - (0x11A3 <= codePoint && codePoint <= 0x11A7) || - (0x11FA <= codePoint && codePoint <= 0x11FF) || - (0x2329 <= codePoint && codePoint <= 0x232A) || - (0x2E80 <= codePoint && codePoint <= 0x2E99) || - (0x2E9B <= codePoint && codePoint <= 0x2EF3) || - (0x2F00 <= codePoint && codePoint <= 0x2FD5) || - (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || - (0x3001 <= codePoint && codePoint <= 0x303E) || - (0x3041 <= codePoint && codePoint <= 0x3096) || - (0x3099 <= codePoint && codePoint <= 0x30FF) || - (0x3105 <= codePoint && codePoint <= 0x312D) || - (0x3131 <= codePoint && codePoint <= 0x318E) || - (0x3190 <= codePoint && codePoint <= 0x31BA) || - (0x31C0 <= codePoint && codePoint <= 0x31E3) || - (0x31F0 <= codePoint && codePoint <= 0x321E) || - (0x3220 <= codePoint && codePoint <= 0x3247) || - (0x3250 <= codePoint && codePoint <= 0x32FE) || - (0x3300 <= codePoint && codePoint <= 0x4DBF) || - (0x4E00 <= codePoint && codePoint <= 0xA48C) || - (0xA490 <= codePoint && codePoint <= 0xA4C6) || - (0xA960 <= codePoint && codePoint <= 0xA97C) || - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || - (0xD7CB <= codePoint && codePoint <= 0xD7FB) || - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - (0xFE30 <= codePoint && codePoint <= 0xFE52) || - (0xFE54 <= codePoint && codePoint <= 0xFE66) || - (0xFE68 <= codePoint && codePoint <= 0xFE6B) || - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - (0x1F200 <= codePoint && codePoint <= 0x1F202) || - (0x1F210 <= codePoint && codePoint <= 0x1F23A) || - (0x1F240 <= codePoint && codePoint <= 0x1F248) || - (0x1F250 <= codePoint && codePoint <= 0x1F251) || - (0x20000 <= codePoint && codePoint <= 0x2F73F) || - (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || - (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { - return 'W'; - } - if ((0x0020 <= codePoint && codePoint <= 0x007E) || - (0x00A2 <= codePoint && codePoint <= 0x00A3) || - (0x00A5 <= codePoint && codePoint <= 0x00A6) || - (0x00AC == codePoint) || - (0x00AF == codePoint) || - (0x27E6 <= codePoint && codePoint <= 0x27ED) || - (0x2985 <= codePoint && codePoint <= 0x2986)) { - return 'Na'; - } - if ((0x00A1 == codePoint) || - (0x00A4 == codePoint) || - (0x00A7 <= codePoint && codePoint <= 0x00A8) || - (0x00AA == codePoint) || - (0x00AD <= codePoint && codePoint <= 0x00AE) || - (0x00B0 <= codePoint && codePoint <= 0x00B4) || - (0x00B6 <= codePoint && codePoint <= 0x00BA) || - (0x00BC <= codePoint && codePoint <= 0x00BF) || - (0x00C6 == codePoint) || - (0x00D0 == codePoint) || - (0x00D7 <= codePoint && codePoint <= 0x00D8) || - (0x00DE <= codePoint && codePoint <= 0x00E1) || - (0x00E6 == codePoint) || - (0x00E8 <= codePoint && codePoint <= 0x00EA) || - (0x00EC <= codePoint && codePoint <= 0x00ED) || - (0x00F0 == codePoint) || - (0x00F2 <= codePoint && codePoint <= 0x00F3) || - (0x00F7 <= codePoint && codePoint <= 0x00FA) || - (0x00FC == codePoint) || - (0x00FE == codePoint) || - (0x0101 == codePoint) || - (0x0111 == codePoint) || - (0x0113 == codePoint) || - (0x011B == codePoint) || - (0x0126 <= codePoint && codePoint <= 0x0127) || - (0x012B == codePoint) || - (0x0131 <= codePoint && codePoint <= 0x0133) || - (0x0138 == codePoint) || - (0x013F <= codePoint && codePoint <= 0x0142) || - (0x0144 == codePoint) || - (0x0148 <= codePoint && codePoint <= 0x014B) || - (0x014D == codePoint) || - (0x0152 <= codePoint && codePoint <= 0x0153) || - (0x0166 <= codePoint && codePoint <= 0x0167) || - (0x016B == codePoint) || - (0x01CE == codePoint) || - (0x01D0 == codePoint) || - (0x01D2 == codePoint) || - (0x01D4 == codePoint) || - (0x01D6 == codePoint) || - (0x01D8 == codePoint) || - (0x01DA == codePoint) || - (0x01DC == codePoint) || - (0x0251 == codePoint) || - (0x0261 == codePoint) || - (0x02C4 == codePoint) || - (0x02C7 == codePoint) || - (0x02C9 <= codePoint && codePoint <= 0x02CB) || - (0x02CD == codePoint) || - (0x02D0 == codePoint) || - (0x02D8 <= codePoint && codePoint <= 0x02DB) || - (0x02DD == codePoint) || - (0x02DF == codePoint) || - (0x0300 <= codePoint && codePoint <= 0x036F) || - (0x0391 <= codePoint && codePoint <= 0x03A1) || - (0x03A3 <= codePoint && codePoint <= 0x03A9) || - (0x03B1 <= codePoint && codePoint <= 0x03C1) || - (0x03C3 <= codePoint && codePoint <= 0x03C9) || - (0x0401 == codePoint) || - (0x0410 <= codePoint && codePoint <= 0x044F) || - (0x0451 == codePoint) || - (0x2010 == codePoint) || - (0x2013 <= codePoint && codePoint <= 0x2016) || - (0x2018 <= codePoint && codePoint <= 0x2019) || - (0x201C <= codePoint && codePoint <= 0x201D) || - (0x2020 <= codePoint && codePoint <= 0x2022) || - (0x2024 <= codePoint && codePoint <= 0x2027) || - (0x2030 == codePoint) || - (0x2032 <= codePoint && codePoint <= 0x2033) || - (0x2035 == codePoint) || - (0x203B == codePoint) || - (0x203E == codePoint) || - (0x2074 == codePoint) || - (0x207F == codePoint) || - (0x2081 <= codePoint && codePoint <= 0x2084) || - (0x20AC == codePoint) || - (0x2103 == codePoint) || - (0x2105 == codePoint) || - (0x2109 == codePoint) || - (0x2113 == codePoint) || - (0x2116 == codePoint) || - (0x2121 <= codePoint && codePoint <= 0x2122) || - (0x2126 == codePoint) || - (0x212B == codePoint) || - (0x2153 <= codePoint && codePoint <= 0x2154) || - (0x215B <= codePoint && codePoint <= 0x215E) || - (0x2160 <= codePoint && codePoint <= 0x216B) || - (0x2170 <= codePoint && codePoint <= 0x2179) || - (0x2189 == codePoint) || - (0x2190 <= codePoint && codePoint <= 0x2199) || - (0x21B8 <= codePoint && codePoint <= 0x21B9) || - (0x21D2 == codePoint) || - (0x21D4 == codePoint) || - (0x21E7 == codePoint) || - (0x2200 == codePoint) || - (0x2202 <= codePoint && codePoint <= 0x2203) || - (0x2207 <= codePoint && codePoint <= 0x2208) || - (0x220B == codePoint) || - (0x220F == codePoint) || - (0x2211 == codePoint) || - (0x2215 == codePoint) || - (0x221A == codePoint) || - (0x221D <= codePoint && codePoint <= 0x2220) || - (0x2223 == codePoint) || - (0x2225 == codePoint) || - (0x2227 <= codePoint && codePoint <= 0x222C) || - (0x222E == codePoint) || - (0x2234 <= codePoint && codePoint <= 0x2237) || - (0x223C <= codePoint && codePoint <= 0x223D) || - (0x2248 == codePoint) || - (0x224C == codePoint) || - (0x2252 == codePoint) || - (0x2260 <= codePoint && codePoint <= 0x2261) || - (0x2264 <= codePoint && codePoint <= 0x2267) || - (0x226A <= codePoint && codePoint <= 0x226B) || - (0x226E <= codePoint && codePoint <= 0x226F) || - (0x2282 <= codePoint && codePoint <= 0x2283) || - (0x2286 <= codePoint && codePoint <= 0x2287) || - (0x2295 == codePoint) || - (0x2299 == codePoint) || - (0x22A5 == codePoint) || - (0x22BF == codePoint) || - (0x2312 == codePoint) || - (0x2460 <= codePoint && codePoint <= 0x24E9) || - (0x24EB <= codePoint && codePoint <= 0x254B) || - (0x2550 <= codePoint && codePoint <= 0x2573) || - (0x2580 <= codePoint && codePoint <= 0x258F) || - (0x2592 <= codePoint && codePoint <= 0x2595) || - (0x25A0 <= codePoint && codePoint <= 0x25A1) || - (0x25A3 <= codePoint && codePoint <= 0x25A9) || - (0x25B2 <= codePoint && codePoint <= 0x25B3) || - (0x25B6 <= codePoint && codePoint <= 0x25B7) || - (0x25BC <= codePoint && codePoint <= 0x25BD) || - (0x25C0 <= codePoint && codePoint <= 0x25C1) || - (0x25C6 <= codePoint && codePoint <= 0x25C8) || - (0x25CB == codePoint) || - (0x25CE <= codePoint && codePoint <= 0x25D1) || - (0x25E2 <= codePoint && codePoint <= 0x25E5) || - (0x25EF == codePoint) || - (0x2605 <= codePoint && codePoint <= 0x2606) || - (0x2609 == codePoint) || - (0x260E <= codePoint && codePoint <= 0x260F) || - (0x2614 <= codePoint && codePoint <= 0x2615) || - (0x261C == codePoint) || - (0x261E == codePoint) || - (0x2640 == codePoint) || - (0x2642 == codePoint) || - (0x2660 <= codePoint && codePoint <= 0x2661) || - (0x2663 <= codePoint && codePoint <= 0x2665) || - (0x2667 <= codePoint && codePoint <= 0x266A) || - (0x266C <= codePoint && codePoint <= 0x266D) || - (0x266F == codePoint) || - (0x269E <= codePoint && codePoint <= 0x269F) || - (0x26BE <= codePoint && codePoint <= 0x26BF) || - (0x26C4 <= codePoint && codePoint <= 0x26CD) || - (0x26CF <= codePoint && codePoint <= 0x26E1) || - (0x26E3 == codePoint) || - (0x26E8 <= codePoint && codePoint <= 0x26FF) || - (0x273D == codePoint) || - (0x2757 == codePoint) || - (0x2776 <= codePoint && codePoint <= 0x277F) || - (0x2B55 <= codePoint && codePoint <= 0x2B59) || - (0x3248 <= codePoint && codePoint <= 0x324F) || - (0xE000 <= codePoint && codePoint <= 0xF8FF) || - (0xFE00 <= codePoint && codePoint <= 0xFE0F) || - (0xFFFD == codePoint) || - (0x1F100 <= codePoint && codePoint <= 0x1F10A) || - (0x1F110 <= codePoint && codePoint <= 0x1F12D) || - (0x1F130 <= codePoint && codePoint <= 0x1F169) || - (0x1F170 <= codePoint && codePoint <= 0x1F19A) || - (0xE0100 <= codePoint && codePoint <= 0xE01EF) || - (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || - (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { - return 'A'; - } - - return 'N'; -}; - -eaw.characterLength = function(character) { - var code = this.eastAsianWidth(character); - if (code == 'F' || code == 'W' || code == 'A') { - return 2; - } else { - return 1; - } -}; - -// Split a string considering surrogate-pairs. -function stringToArray(string) { - return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; -} - -eaw.length = function(string) { - var characters = stringToArray(string); - var len = 0; - for (var i = 0; i < characters.length; i++) { - len = len + this.characterLength(characters[i]); - } - return len; -}; - -eaw.slice = function(text, start, end) { - textLen = eaw.length(text) - start = start ? start : 0; - end = end ? end : 1; - if (start < 0) { - start = textLen + start; - } - if (end < 0) { - end = textLen + end; - } - var result = ''; - var eawLen = 0; - var chars = stringToArray(text); - for (var i = 0; i < chars.length; i++) { - var char = chars[i]; - var charLen = eaw.length(char); - if (eawLen >= start - (charLen == 2 ? 1 : 0)) { - if (eawLen + charLen <= end) { - result += char; - } else { - break; - } - } - eawLen += charLen; - } - return result; -}; diff --git a/node_modules/eastasianwidth/package.json b/node_modules/eastasianwidth/package.json deleted file mode 100644 index cb7ac6ab3b..0000000000 --- a/node_modules/eastasianwidth/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "eastasianwidth", - "version": "0.2.0", - "description": "Get East Asian Width from a character.", - "main": "eastasianwidth.js", - "files": [ - "eastasianwidth.js" - ], - "scripts": { - "test": "mocha" - }, - "repository": "git://github.com/komagata/eastasianwidth.git", - "author": "Masaki Komagata", - "license": "MIT", - "devDependencies": { - "mocha": "~1.9.0" - } -} diff --git a/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/emoji-regex/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/emoji-regex/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/emoji-regex/README.md b/node_modules/emoji-regex/README.md deleted file mode 100644 index 6d63082740..0000000000 --- a/node_modules/emoji-regex/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=main)](https://travis-ci.org/mathiasbynens/emoji-regex) - -_emoji-regex_ offers a regular expression to match all emoji symbols and sequences (including textual representations of emoji) as per the Unicode Standard. - -This repository contains a script that generates this regular expression based on [Unicode data](https://github.com/node-unicode/node-unicode-data). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install emoji-regex -``` - -In [Node.js](https://nodejs.org/): - -```js -const emojiRegex = require('emoji-regex/RGI_Emoji.js'); -// Note: because the regular expression has the global flag set, this module -// exports a function that returns the regex rather than exporting the regular -// expression itself, to make it impossible to (accidentally) mutate the -// original regular expression. - -const text = ` -\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) -\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji -\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) -\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier -`; - -const regex = emojiRegex(); -let match; -while (match = regex.exec(text)) { - const emoji = match[0]; - console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); -} -``` - -Console output: - -``` -Matched sequence ⌚ — code points: 1 -Matched sequence ⌚ — code points: 1 -Matched sequence ↔️ — code points: 2 -Matched sequence ↔️ — code points: 2 -Matched sequence 👩 — code points: 1 -Matched sequence 👩 — code points: 1 -Matched sequence 👩🏿 — code points: 2 -Matched sequence 👩🏿 — code points: 2 -``` - -## Regular expression flavors - -The package comes with three distinct regular expressions: - -```js -// This is the recommended regular expression to use. It matches all -// emoji recommended for general interchange, as defined via the -// `RGI_Emoji` property in the Unicode Standard. -// https://unicode.org/reports/tr51/#def_rgi_set -// When in doubt, use this! -const emojiRegexRGI = require('emoji-regex/RGI_Emoji.js'); - -// This is the old regular expression, prior to `RGI_Emoji` being -// standardized. In addition to all `RGI_Emoji` sequences, it matches -// some emoji you probably don’t want to match (such as emoji component -// symbols that are not meant to be used separately). -const emojiRegex = require('emoji-regex/index.js'); - -// This regular expression matches even more emoji than the previous -// one, including emoji that render as text instead of icons (i.e. -// emoji that are not `Emoji_Presentation` symbols and that aren’t -// forced to render as emoji by a variation selector). -const emojiRegexText = require('emoji-regex/text.js'); -``` - -Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: - -```js -const emojiRegexRGI = require('emoji-regex/es2015/RGI_Emoji.js'); -const emojiRegex = require('emoji-regex/es2015/index.js'); -const emojiRegexText = require('emoji-regex/es2015/text.js'); -``` - -## For maintainers - -### How to update emoji-regex after new Unicode Standard releases - -1. Update the Unicode data dependency in `package.json` by running the following commands: - - ```sh - # Example: updating from Unicode v12 to Unicode v13. - npm uninstall @unicode/unicode-12.0.0 - npm install @unicode/unicode-13.0.0 --save-dev - ```` - -1. Generate the new output: - - ```sh - npm run build - ``` - -1. Verify that tests still pass: - - ```sh - npm test - ``` - -1. Send a pull request with the changes, and get it reviewed & merged. - -1. On the `main` branch, bump the emoji-regex version number in `package.json`: - - ```sh - npm version patch -m 'Release v%s' - ``` - - Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). - - Note that this produces a Git commit + tag. - -1. Push the release commit and tag: - - ```sh - git push - ``` - - Our CI then automatically publishes the new release to npm. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/emoji-regex/RGI_Emoji.d.ts b/node_modules/emoji-regex/RGI_Emoji.d.ts deleted file mode 100644 index 89a651fb33..0000000000 --- a/node_modules/emoji-regex/RGI_Emoji.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/RGI_Emoji' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/RGI_Emoji.js b/node_modules/emoji-regex/RGI_Emoji.js deleted file mode 100644 index 3fbe924100..0000000000 --- a/node_modules/emoji-regex/RGI_Emoji.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g; -}; diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts deleted file mode 100644 index bf0f154b15..0000000000 --- a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/es2015/RGI_Emoji' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.js b/node_modules/emoji-regex/es2015/RGI_Emoji.js deleted file mode 100644 index ecf32f1779..0000000000 --- a/node_modules/emoji-regex/es2015/RGI_Emoji.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu; -}; diff --git a/node_modules/emoji-regex/es2015/index.d.ts b/node_modules/emoji-regex/es2015/index.d.ts deleted file mode 100644 index 823dfa6532..0000000000 --- a/node_modules/emoji-regex/es2015/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/es2015' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/es2015/index.js b/node_modules/emoji-regex/es2015/index.js deleted file mode 100644 index 1a4fc8d0dc..0000000000 --- a/node_modules/emoji-regex/es2015/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/emoji-regex/es2015/text.d.ts b/node_modules/emoji-regex/es2015/text.d.ts deleted file mode 100644 index ccc2f9adca..0000000000 --- a/node_modules/emoji-regex/es2015/text.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/es2015/text' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/es2015/text.js b/node_modules/emoji-regex/es2015/text.js deleted file mode 100644 index 8e9f985758..0000000000 --- a/node_modules/emoji-regex/es2015/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu; -}; diff --git a/node_modules/emoji-regex/index.d.ts b/node_modules/emoji-regex/index.d.ts deleted file mode 100644 index 8f235c9a73..0000000000 --- a/node_modules/emoji-regex/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/index.js b/node_modules/emoji-regex/index.js deleted file mode 100644 index c0490d4c95..0000000000 --- a/node_modules/emoji-regex/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/emoji-regex/package.json b/node_modules/emoji-regex/package.json deleted file mode 100644 index eac892a16a..0000000000 --- a/node_modules/emoji-regex/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "emoji-regex", - "version": "9.2.2", - "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", - "homepage": "https://mths.be/emoji-regex", - "main": "index.js", - "types": "index.d.ts", - "keywords": [ - "unicode", - "regex", - "regexp", - "regular expressions", - "code points", - "symbols", - "characters", - "emoji" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/emoji-regex.git" - }, - "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", - "files": [ - "LICENSE-MIT.txt", - "index.js", - "index.d.ts", - "RGI_Emoji.js", - "RGI_Emoji.d.ts", - "text.js", - "text.d.ts", - "es2015" - ], - "scripts": { - "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js", - "test": "mocha", - "test:watch": "npm run test -- --watch" - }, - "devDependencies": { - "@babel/cli": "^7.4.4", - "@babel/core": "^7.4.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@unicode/unicode-13.0.0": "^1.0.3", - "mocha": "^6.1.4", - "regexgen": "^1.3.0" - } -} diff --git a/node_modules/emoji-regex/text.d.ts b/node_modules/emoji-regex/text.d.ts deleted file mode 100644 index c3a0125451..0000000000 --- a/node_modules/emoji-regex/text.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/text' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/text.js b/node_modules/emoji-regex/text.js deleted file mode 100644 index 9bc63ce747..0000000000 --- a/node_modules/emoji-regex/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g; -}; diff --git a/node_modules/entities/LICENSE b/node_modules/entities/LICENSE deleted file mode 100644 index c464f863ea..0000000000 --- a/node_modules/entities/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/entities/package.json b/node_modules/entities/package.json deleted file mode 100644 index 2e857f8cf5..0000000000 --- a/node_modules/entities/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "entities", - "version": "4.5.0", - "description": "Encode & decode XML and HTML entities with ease & speed", - "author": "Felix Boehm ", - "funding": "https://github.com/fb55/entities?sponsor=1", - "sideEffects": false, - "keywords": [ - "entity", - "decoding", - "encoding", - "html", - "xml", - "html entities" - ], - "directories": { - "lib": "lib/" - }, - "main": "lib/index.js", - "types": "lib/index.d.ts", - "module": "lib/esm/index.js", - "exports": { - ".": { - "require": "./lib/index.js", - "import": "./lib/esm/index.js" - }, - "./lib/decode.js": { - "require": "./lib/decode.js", - "import": "./lib/esm/decode.js" - }, - "./lib/escape.js": { - "require": "./lib/escape.js", - "import": "./lib/esm/escape.js" - } - }, - "files": [ - "lib/**/*" - ], - "engines": { - "node": ">=0.12" - }, - "devDependencies": { - "@types/jest": "^28.1.8", - "@types/node": "^18.15.11", - "@typescript-eslint/eslint-plugin": "^5.58.0", - "@typescript-eslint/parser": "^5.58.0", - "eslint": "^8.38.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-node": "^11.1.0", - "jest": "^28.1.3", - "prettier": "^2.8.7", - "ts-jest": "^28.0.8", - "typedoc": "^0.24.1", - "typescript": "^5.0.4" - }, - "scripts": { - "test": "npm run test:jest && npm run lint", - "test:jest": "jest", - "lint": "npm run lint:es && npm run lint:prettier", - "lint:es": "eslint .", - "lint:prettier": "npm run prettier -- --check", - "format": "npm run format:es && npm run format:prettier", - "format:es": "npm run lint:es -- --fix", - "format:prettier": "npm run prettier -- --write", - "prettier": "prettier '**/*.{ts,md,json,yml}'", - "build": "npm run build:cjs && npm run build:esm", - "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/entities/$(git rev-parse HEAD)/src/", - "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", - "build:docs": "typedoc --hideGenerator src/index.ts", - "build:trie": "ts-node scripts/write-decode-map.ts", - "build:encode-trie": "ts-node scripts/write-encode-map.ts", - "prepare": "npm run build" - }, - "repository": { - "type": "git", - "url": "git://github.com/fb55/entities.git" - }, - "license": "BSD-2-Clause", - "jest": { - "preset": "ts-jest", - "coverageProvider": "v8", - "moduleNameMapper": { - "^(.*)\\.js$": "$1" - } - }, - "prettier": { - "tabWidth": 4, - "proseWrap": "always" - } -} diff --git a/node_modules/entities/readme.md b/node_modules/entities/readme.md deleted file mode 100644 index 731d90c68f..0000000000 --- a/node_modules/entities/readme.md +++ /dev/null @@ -1,122 +0,0 @@ -# entities [![NPM version](https://img.shields.io/npm/v/entities.svg)](https://npmjs.org/package/entities) [![Downloads](https://img.shields.io/npm/dm/entities.svg)](https://npmjs.org/package/entities) [![Node.js CI](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml) - -Encode & decode HTML & XML entities with ease & speed. - -## Features - -- 😇 Tried and true: `entities` is used by many popular libraries; eg. - [`htmlparser2`](https://github.com/fb55/htmlparser2), the official - [AWS SDK](https://github.com/aws/aws-sdk-js-v3) and - [`commonmark`](https://github.com/commonmark/commonmark.js) use it to - process HTML entities. -- ⚡️ Fast: `entities` is the fastest library for decoding HTML entities (as - of April 2022); see [performance](#performance). -- 🎛 Configurable: Get an output tailored for your needs. You are fine with - UTF8? That'll save you some bytes. Prefer to only have ASCII characters? We - can do that as well! - -## How to… - -### …install `entities` - - npm install entities - -### …use `entities` - -```javascript -const entities = require("entities"); - -// Encoding -entities.escapeUTF8("& ü"); // "&#38; ü" -entities.encodeXML("& ü"); // "&#38; ü" -entities.encodeHTML("& ü"); // "&#38; ü" - -// Decoding -entities.decodeXML("asdf & ÿ ü '"); // "asdf & ÿ ü '" -entities.decodeHTML("asdf & ÿ ü '"); // "asdf & ÿ ü '" -``` - -## Performance - -This is how `entities` compares to other libraries on a very basic benchmark -(see `scripts/benchmark.ts`, for 10,000,000 iterations; **lower is better**): - -| Library | Version | `decode` perf | `encode` perf | `escape` perf | -| -------------- | ------- | ------------- | ------------- | ------------- | -| entities | `3.0.1` | 1.418s | 6.786s | 2.196s | -| html-entities | `2.3.2` | 2.530s | 6.829s | 2.415s | -| he | `1.2.0` | 5.800s | 24.237s | 3.624s | -| parse-entities | `3.0.0` | 9.660s | N/A | N/A | - ---- - -## FAQ - -> What methods should I actually use to encode my documents? - -If your target supports UTF-8, the `escapeUTF8` method is going to be your best -choice. Otherwise, use either `encodeHTML` or `encodeXML` based on whether -you're dealing with an HTML or an XML document. - -You can have a look at the options for the `encode` and `decode` methods to see -everything you can configure. - -> When should I use strict decoding? - -When strict decoding, entities not terminated with a semicolon will be ignored. -This is helpful for decoding entities in legacy environments. - -> Why should I use `entities` instead of alternative modules? - -As of April 2022, `entities` is a bit faster than other modules. Still, this is -not a very differentiated space and other modules can catch up. - -**More importantly**, you might already have `entities` in your dependency graph -(as a dependency of eg. `cheerio`, or `htmlparser2`), and including it directly -might not even increase your bundle size. The same is true for other entity -libraries, so have a look through your `node_modules` directory! - -> Does `entities` support tree shaking? - -Yes! `entities` ships as both a CommonJS and a ES module. Note that for best -results, you should not use the `encode` and `decode` functions, as they wrap -around a number of other functions, all of which will remain in the bundle. -Instead, use the functions that you need directly. - ---- - -## Acknowledgements - -This library wouldn't be possible without the work of these individuals. Thanks -to - -- [@mathiasbynens](https://github.com/mathiasbynens) for his explanations - about character encodings, and his library `he`, which was one of the - inspirations for `entities` -- [@inikulin](https://github.com/inikulin) for his work on optimized tries for - decoding HTML entities for the `parse5` project -- [@mdevils](https://github.com/mdevils) for taking on the challenge of - producing a quick entity library with his `html-entities` library. - `entities` would be quite a bit slower if there wasn't any competition. - Right now `entities` is on top, but we'll see how long that lasts! - ---- - -License: BSD-2-Clause - -## Security contact information - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). Tidelift will -coordinate the fix and disclosure. - -## `entities` for enterprise - -Available as part of the Tidelift Subscription - -The maintainers of `entities` and thousands of other packages are working with -Tidelift to deliver commercial support and maintenance for the open source -dependencies you use to build your applications. Save time, reduce risk, and -improve code health, while paying the maintainers of the exact dependencies you -use. -[Learn more.](https://tidelift.com/subscription/pkg/npm-entities?utm_source=npm-entities&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/foreground-child/LICENSE b/node_modules/foreground-child/LICENSE deleted file mode 100644 index 2d80720fe6..0000000000 --- a/node_modules/foreground-child/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/foreground-child/README.md b/node_modules/foreground-child/README.md deleted file mode 100644 index 477ca57178..0000000000 --- a/node_modules/foreground-child/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# foreground-child - -Run a child as if it's the foreground process. Give it stdio. Exit -when it exits. - -Mostly this module is here to support some use cases around -wrapping child processes for test coverage and such. But it's -also generally useful any time you want one program to execute -another as if it's the "main" process, for example, if a program -takes a `--cmd` argument to execute in some way. - -## USAGE - -```js -import { foregroundChild } from 'foreground-child' -// hybrid module, this also works: -// const { foregroundChild } = require('foreground-child') - -// cats out this file -const child = foregroundChild('cat', [__filename]) - -// At this point, it's best to just do nothing else. -// return or whatever. -// If the child gets a signal, or just exits, then this -// parent process will exit in the same way. -``` - -You can provide custom spawn options by passing an object after -the program and arguments: - -```js -const child = foregroundChild(`cat ${__filename}`, { shell: true }) -``` - -A callback can optionally be provided, if you want to perform an -action before your foreground-child exits: - -```js -const child = foregroundChild('cat', [__filename], spawnOptions, () => { - doSomeActions() -}) -``` - -The callback can return a Promise in order to perform -asynchronous actions. If the callback does not return a promise, -then it must complete its actions within a single JavaScript -tick. - -```js -const child = foregroundChild('cat', [__filename], async () => { - await doSomeAsyncActions() -}) -``` - -If the callback throws or rejects, then it will be unhandled, and -node will exit in error. - -If the callback returns a string value, then that will be used as -the signal to exit the parent process. If it returns a number, -then that number will be used as the parent exit status code. If -it returns boolean `false`, then the parent process will not be -terminated. If it returns `undefined`, then it will exit with the -same signal/code as the child process. - -## Caveats - -The "normal" standard IO file descriptors (0, 1, and 2 for stdin, -stdout, and stderr respectively) are shared with the child process. -Additionally, if there is an IPC channel set up in the parent, then -messages are proxied to the child on file descriptor 3. - -In Node, it's possible to also map arbitrary file descriptors -into a child process. In these cases, foreground-child will not -map the file descriptors into the child. If file descriptors 0, -1, or 2 are used for the IPC channel, then strange behavior may -happen (like printing IPC messages to stderr, for example). - -Note that a SIGKILL will always kill the parent process, but -will not proxy the signal to the child process, because SIGKILL -cannot be caught. In order to address this, a special "watchdog" -child process is spawned which will send a SIGKILL to the child -process if it does not terminate within half a second after the -watchdog receives a SIGHUP due to its parent terminating. - -On Windows, issuing a `process.kill(process.pid, signal)` with a -fatal termination signal may cause the process to exit with a `1` -status code rather than reporting the signal properly. This -module tries to do the right thing, but on Windows systems, you -may see that incorrect result. There is as far as I'm aware no -workaround for this. - -## util: `foreground-child/proxy-signals` - -If you just want to proxy the signals to a child process that the -main process receives, you can use the `proxy-signals` export -from this package. - -```js -import { proxySignals } from 'foreground-child/proxy-signals' - -const childProcess = spawn('command', ['some', 'args']) -proxySignals(childProcess) -``` - -Now, any fatal signal received by the current process will be -proxied to the child process. - -It doesn't go in the other direction; ie, signals sent to the -child process will not affect the parent. For that, listen to the -child `exit` or `close` events, and handle them appropriately. - -## util: `foreground-child/watchdog` - -If you are spawning a child process, and want to ensure that it -isn't left dangling if the parent process exits, you can use the -watchdog utility exported by this module. - -```js -import { watchdog } from 'foreground-child/watchdog' - -const childProcess = spawn('command', ['some', 'args']) -const watchdogProcess = watchdog(childProcess) - -// watchdogProcess is a reference to the process monitoring the -// parent and child. There's usually no reason to do anything -// with it, as it's silent and will terminate -// automatically when it's no longer needed. -``` diff --git a/node_modules/foreground-child/package.json b/node_modules/foreground-child/package.json deleted file mode 100644 index 980b7e85d1..0000000000 --- a/node_modules/foreground-child/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "name": "foreground-child", - "version": "3.3.0", - "description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.", - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "exports": { - "./watchdog": { - "import": { - "source": "./src/watchdog.ts", - "types": "./dist/esm/watchdog.d.ts", - "default": "./dist/esm/watchdog.js" - }, - "require": { - "source": "./src/watchdog.ts", - "types": "./dist/commonjs/watchdog.d.ts", - "default": "./dist/commonjs/watchdog.js" - } - }, - "./proxy-signals": { - "import": { - "source": "./src/proxy-signals.ts", - "types": "./dist/esm/proxy-signals.d.ts", - "default": "./dist/esm/proxy-signals.js" - }, - "require": { - "source": "./src/proxy-signals.ts", - "types": "./dist/commonjs/proxy-signals.d.ts", - "default": "./dist/commonjs/proxy-signals.js" - } - }, - "./package.json": "./package.json", - ".": { - "import": { - "source": "./src/index.ts", - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "source": "./src/index.ts", - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "engines": { - "node": ">=14" - }, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" - }, - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "tap": { - "typecheck": true - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tapjs/foreground-child.git" - }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "devDependencies": { - "@types/cross-spawn": "^6.0.2", - "@types/node": "^18.15.11", - "@types/tap": "^15.0.8", - "prettier": "^3.3.2", - "tap": "^19.2.5", - "tshy": "^1.15.1", - "typedoc": "^0.24.2", - "typescript": "^5.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "tshy": { - "exports": { - "./watchdog": "./src/watchdog.ts", - "./proxy-signals": "./src/proxy-signals.ts", - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "type": "module" -} diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE deleted file mode 100644 index ec7df93329..0000000000 --- a/node_modules/glob/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md deleted file mode 100644 index 023cd77968..0000000000 --- a/node_modules/glob/README.md +++ /dev/null @@ -1,1265 +0,0 @@ -# Glob - -Match files using the patterns the shell uses. - -The most correct and second fastest glob implementation in -JavaScript. (See **Comparison to Other JavaScript Glob -Implementations** at the bottom of this readme.) - -![a fun cartoon logo made of glob characters](https://github.com/isaacs/node-glob/raw/main/logo/glob.png) - -## Usage - -Install with npm - -``` -npm i glob -``` - -**Note** the npm package name is _not_ `node-glob` that's a -different thing that was abandoned years ago. Just `glob`. - -```js -// load using import -import { glob, globSync, globStream, globStreamSync, Glob } from 'glob' -// or using commonjs, that's fine, too -const { - glob, - globSync, - globStream, - globStreamSync, - Glob, -} = require('glob') - -// the main glob() and globSync() resolve/return array of filenames - -// all js files, but don't look in node_modules -const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' }) - -// pass in a signal to cancel the glob walk -const stopAfter100ms = await glob('**/*.css', { - signal: AbortSignal.timeout(100), -}) - -// multiple patterns supported as well -const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}']) - -// but of course you can do that with the glob pattern also -// the sync function is the same, just returns a string[] instead -// of Promise -const imagesAlt = globSync('{css,public}/*.{png,jpeg}') - -// you can also stream them, this is a Minipass stream -const filesStream = globStream(['**/*.dat', 'logs/**/*.log']) - -// construct a Glob object if you wanna do it that way, which -// allows for much faster walks if you have to look in the same -// folder multiple times. -const g = new Glob('**/foo', {}) -// glob objects are async iterators, can also do globIterate() or -// g.iterate(), same deal -for await (const file of g) { - console.log('found a foo file:', file) -} -// pass a glob as the glob options to reuse its settings and caches -const g2 = new Glob('**/bar', g) -// sync iteration works as well -for (const file of g2) { - console.log('found a bar file:', file) -} - -// you can also pass withFileTypes: true to get Path objects -// these are like a Dirent, but with some more added powers -// check out http://npm.im/path-scurry for more info on their API -const g3 = new Glob('**/baz/**', { withFileTypes: true }) -g3.stream().on('data', path => { - console.log( - 'got a path object', - path.fullpath(), - path.isDirectory(), - path.readdirSync().map(e => e.name), - ) -}) - -// if you use stat:true and withFileTypes, you can sort results -// by things like modified time, filter by permission mode, etc. -// All Stats fields will be available in that case. Slightly -// slower, though. -// For example: -const results = await glob('**', { stat: true, withFileTypes: true }) - -const timeSortedFiles = results - .sort((a, b) => a.mtimeMs - b.mtimeMs) - .map(path => path.fullpath()) - -const groupReadableFiles = results - .filter(path => path.mode & 0o040) - .map(path => path.fullpath()) - -// custom ignores can be done like this, for example by saying -// you'll ignore all markdown files, and all folders named 'docs' -const customIgnoreResults = await glob('**', { - ignore: { - ignored: p => /\.md$/.test(p.name), - childrenIgnored: p => p.isNamed('docs'), - }, -}) - -// another fun use case, only return files with the same name as -// their parent folder, plus either `.ts` or `.js` -const folderNamedModules = await glob('**/*.{ts,js}', { - ignore: { - ignored: p => { - const pp = p.parent - return !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js')) - }, - }, -}) - -// find all files edited in the last hour, to do this, we ignore -// all of them that are more than an hour old -const newFiles = await glob('**', { - // need stat so we have mtime - stat: true, - // only want the files, not the dirs - nodir: true, - ignore: { - ignored: p => { - return new Date() - p.mtime > 60 * 60 * 1000 - }, - // could add similar childrenIgnored here as well, but - // directory mtime is inconsistent across platforms, so - // probably better not to, unless you know the system - // tracks this reliably. - }, -}) -``` - -**Note** Glob patterns should always use `/` as a path separator, -even on Windows systems, as `\` is used to escape glob -characters. If you wish to use `\` as a path separator _instead -of_ using it as an escape character on Windows platforms, you may -set `windowsPathsNoEscape:true` in the options. In this mode, -special glob characters cannot be escaped, making it impossible -to match a literal `*` `?` and so on in filenames. - -## Command Line Interface - -``` -$ glob -h - -Usage: - glob [options] [ [ ...]] - -Expand the positional glob expression arguments into any matching file system -paths found. - - -c --cmd= - Run the command provided, passing the glob expression - matches as arguments. - - -A --all By default, the glob cli command will not expand any - arguments that are an exact match to a file on disk. - - This prevents double-expanding, in case the shell - expands an argument whose filename is a glob - expression. - - For example, if 'app/*.ts' would match 'app/[id].ts', - then on Windows powershell or cmd.exe, 'glob app/*.ts' - will expand to 'app/[id].ts', as expected. However, in - posix shells such as bash or zsh, the shell will first - expand 'app/*.ts' to a list of filenames. Then glob - will look for a file matching 'app/[id].ts' (ie, - 'app/i.ts' or 'app/d.ts'), which is unexpected. - - Setting '--all' prevents this behavior, causing glob to - treat ALL patterns as glob expressions to be expanded, - even if they are an exact match to a file on disk. - - When setting this option, be sure to enquote arguments - so that the shell will not expand them prior to passing - them to the glob command process. - - -a --absolute Expand to absolute paths - -d --dot-relative Prepend './' on relative matches - -m --mark Append a / on any directories matched - -x --posix Always resolve to posix style paths, using '/' as the - directory separator, even on Windows. Drive letter - absolute matches on Windows will be expanded to their - full resolved UNC maths, eg instead of 'C:\foo\bar', it - will expand to '//?/C:/foo/bar'. - - -f --follow Follow symlinked directories when expanding '**' - -R --realpath Call 'fs.realpath' on all of the results. In the case - of an entry that cannot be resolved, the entry is - omitted. This incurs a slight performance penalty, of - course, because of the added system calls. - - -s --stat Call 'fs.lstat' on all entries, whether required or not - to determine if it's a valid match. - - -b --match-base Perform a basename-only match if the pattern does not - contain any slash characters. That is, '*.js' would be - treated as equivalent to '**/*.js', matching js files - in all directories. - - --dot Allow patterns to match files/directories that start - with '.', even if the pattern does not start with '.' - - --nobrace Do not expand {...} patterns - --nocase Perform a case-insensitive match. This defaults to - 'true' on macOS and Windows platforms, and false on all - others. - - Note: 'nocase' should only be explicitly set when it is - known that the filesystem's case sensitivity differs - from the platform default. If set 'true' on - case-insensitive file systems, then the walk may return - more or less results than expected. - - --nodir Do not match directories, only files. - - Note: to *only* match directories, append a '/' at the - end of the pattern. - - --noext Do not expand extglob patterns, such as '+(a|b)' - --noglobstar Do not expand '**' against multiple path portions. Ie, - treat it as a normal '*' instead. - - --windows-path-no-escape - Use '\' as a path separator *only*, and *never* as an - escape character. If set, all '\' characters are - replaced with '/' in the pattern. - - -D --max-depth= Maximum depth to traverse from the current working - directory - - -C --cwd= Current working directory to execute/match in - -r --root= A string path resolved against the 'cwd', which is used - as the starting point for absolute patterns that start - with '/' (but not drive letters or UNC paths on - Windows). - - Note that this *doesn't* necessarily limit the walk to - the 'root' directory, and doesn't affect the cwd - starting point for non-absolute patterns. A pattern - containing '..' will still be able to traverse out of - the root directory, if it is not an actual root - directory on the filesystem, and any non-absolute - patterns will still be matched in the 'cwd'. - - To start absolute and non-absolute patterns in the same - path, you can use '--root=' to set it to the empty - string. However, be aware that on Windows systems, a - pattern like 'x:/*' or '//host/share/*' will *always* - start in the 'x:/' or '//host/share/' directory, - regardless of the --root setting. - - --platform= Defaults to the value of 'process.platform' if - available, or 'linux' if not. Setting --platform=win32 - on non-Windows systems may cause strange behavior! - - -i --ignore= - Glob patterns to ignore Can be set multiple times - -v --debug Output a huge amount of noisy debug information about - patterns as they are parsed and used to match files. - - -h --help Show this usage information -``` - -## `glob(pattern: string | string[], options?: GlobOptions) => Promise` - -Perform an asynchronous glob search for the pattern(s) specified. -Returns -[Path](https://isaacs.github.io/path-scurry/classes/PathBase) -objects if the `withFileTypes` option is set to `true`. See below -for full options field desciptions. - -## `globSync(pattern: string | string[], options?: GlobOptions) => string[] | Path[]` - -Synchronous form of `glob()`. - -Alias: `glob.sync()` - -## `globIterate(pattern: string | string[], options?: GlobOptions) => AsyncGenerator` - -Return an async iterator for walking glob pattern matches. - -Alias: `glob.iterate()` - -## `globIterateSync(pattern: string | string[], options?: GlobOptions) => Generator` - -Return a sync iterator for walking glob pattern matches. - -Alias: `glob.iterate.sync()`, `glob.sync.iterate()` - -## `globStream(pattern: string | string[], options?: GlobOptions) => Minipass` - -Return a stream that emits all the strings or `Path` objects and -then emits `end` when completed. - -Alias: `glob.stream()` - -## `globStreamSync(pattern: string | string[], options?: GlobOptions) => Minipass` - -Syncronous form of `globStream()`. Will read all the matches as -fast as you consume them, even all in a single tick if you -consume them immediately, but will still respond to backpressure -if they're not consumed immediately. - -Alias: `glob.stream.sync()`, `glob.sync.stream()` - -## `hasMagic(pattern: string | string[], options?: GlobOptions) => boolean` - -Returns `true` if the provided pattern contains any "magic" glob -characters, given the options provided. - -Brace expansion is not considered "magic" unless the -`magicalBraces` option is set, as brace expansion just turns one -string into an array of strings. So a pattern like `'x{a,b}y'` -would return `false`, because `'xay'` and `'xby'` both do not -contain any magic glob characters, and it's treated the same as -if you had called it on `['xay', 'xby']`. When -`magicalBraces:true` is in the options, brace expansion _is_ -treated as a pattern having magic. - -## `escape(pattern: string, options?: GlobOptions) => string` - -Escape all magic characters in a glob pattern, so that it will -only ever match literal strings - -If the `windowsPathsNoEscape` option is used, then characters are -escaped by wrapping in `[]`, because a magic character wrapped in -a character class can only be satisfied by that exact character. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -## `unescape(pattern: string, options?: GlobOptions) => string` - -Un-escape a glob string that may contain some escaped characters. - -If the `windowsPathsNoEscape` option is used, then square-brace -escapes are removed, but not backslash escapes. For example, it -will turn the string `'[*]'` into `*`, but it will not turn -`'\\*'` into `'*'`, because `\` is a path separator in -`windowsPathsNoEscape` mode. - -When `windowsPathsNoEscape` is not set, then both brace escapes -and backslash escapes are removed. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -## Class `Glob` - -An object that can perform glob pattern traversals. - -### `const g = new Glob(pattern: string | string[], options: GlobOptions)` - -Options object is required. - -See full options descriptions below. - -Note that a previous `Glob` object can be passed as the -`GlobOptions` to another `Glob` instantiation to re-use settings -and caches with a new pattern. - -Traversal functions can be called multiple times to run the walk -again. - -### `g.stream()` - -Stream results asynchronously, - -### `g.streamSync()` - -Stream results synchronously. - -### `g.iterate()` - -Default async iteration function. Returns an AsyncGenerator that -iterates over the results. - -### `g.iterateSync()` - -Default sync iteration function. Returns a Generator that -iterates over the results. - -### `g.walk()` - -Returns a Promise that resolves to the results array. - -### `g.walkSync()` - -Returns a results array. - -### Properties - -All options are stored as properties on the `Glob` object. - -- `opts` The options provided to the constructor. -- `patterns` An array of parsed immutable `Pattern` objects. - -## Options - -Exported as `GlobOptions` TypeScript interface. A `GlobOptions` -object may be provided to any of the exported methods, and must -be provided to the `Glob` constructor. - -All options are optional, boolean, and false by default, unless -otherwise noted. - -All resolved options are added to the Glob object as properties. - -If you are running many `glob` operations, you can pass a Glob -object as the `options` argument to a subsequent operation to -share the previously loaded cache. - -- `cwd` String path or `file://` string or URL object. The - current working directory in which to search. Defaults to - `process.cwd()`. See also: "Windows, CWDs, Drive Letters, and - UNC Paths", below. - - This option may be either a string path or a `file://` URL - object or string. - -- `root` A string path resolved against the `cwd` option, which - is used as the starting point for absolute patterns that start - with `/`, (but not drive letters or UNC paths on Windows). - - Note that this _doesn't_ necessarily limit the walk to the - `root` directory, and doesn't affect the cwd starting point for - non-absolute patterns. A pattern containing `..` will still be - able to traverse out of the root directory, if it is not an - actual root directory on the filesystem, and any non-absolute - patterns will be matched in the `cwd`. For example, the - pattern `/../*` with `{root:'/some/path'}` will return all - files in `/some`, not all files in `/some/path`. The pattern - `*` with `{root:'/some/path'}` will return all the entries in - the cwd, not the entries in `/some/path`. - - To start absolute and non-absolute patterns in the same - path, you can use `{root:''}`. However, be aware that on - Windows systems, a pattern like `x:/*` or `//host/share/*` will - _always_ start in the `x:/` or `//host/share` directory, - regardless of the `root` setting. - -- `windowsPathsNoEscape` Use `\\` as a path separator _only_, and - _never_ as an escape character. If set, all `\\` characters are - replaced with `/` in the pattern. - - Note that this makes it **impossible** to match against paths - containing literal glob pattern characters, but allows matching - with patterns constructed using `path.join()` and - `path.resolve()` on Windows platforms, mimicking the (buggy!) - behavior of Glob v7 and before on Windows. Please use with - caution, and be mindful of [the caveat below about Windows - paths](#windows). (For legacy reasons, this is also set if - `allowWindowsEscape` is set to the exact value `false`.) - -- `dot` Include `.dot` files in normal matches and `globstar` - matches. Note that an explicit dot in a portion of the pattern - will always match dot files. - -- `magicalBraces` Treat brace expansion like `{a,b}` as a "magic" - pattern. Has no effect if {@link nobrace} is set. - - Only has effect on the {@link hasMagic} function, no effect on - glob pattern matching itself. - -- `dotRelative` Prepend all relative path strings with `./` (or - `.\` on Windows). - - Without this option, returned relative paths are "bare", so - instead of returning `'./foo/bar'`, they are returned as - `'foo/bar'`. - - Relative patterns starting with `'../'` are not prepended with - `./`, even if this option is set. - -- `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. - -- `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. - -- `noglobstar` Do not match `**` against multiple filenames. (Ie, - treat it as a normal `*` instead.) - -- `noext` Do not match "extglob" patterns such as `+(a|b)`. - -- `nocase` Perform a case-insensitive match. This defaults to - `true` on macOS and Windows systems, and `false` on all others. - - **Note** `nocase` should only be explicitly set when it is - known that the filesystem's case sensitivity differs from the - platform default. If set `true` on case-sensitive file - systems, or `false` on case-insensitive file systems, then the - walk may return more or less results than expected. - -- `maxDepth` Specify a number to limit the depth of the directory - traversal to this many levels below the `cwd`. - -- `matchBase` Perform a basename-only match if the pattern does - not contain any slash characters. That is, `*.js` would be - treated as equivalent to `**/*.js`, matching all js files in - all directories. - -- `nodir` Do not match directories, only files. (Note: to match - _only_ directories, put a `/` at the end of the pattern.) - - Note: when `follow` and `nodir` are both set, then symbolic - links to directories are also omitted. - -- `stat` Call `lstat()` on all entries, whether required or not - to determine whether it's a valid match. When used with - `withFileTypes`, this means that matches will include data such - as modified time, permissions, and so on. Note that this will - incur a performance cost due to the added system calls. - -- `ignore` string or string[], or an object with `ignore` and - `ignoreChildren` methods. - - If a string or string[] is provided, then this is treated as a - glob pattern or array of glob patterns to exclude from matches. - To ignore all children within a directory, as well as the entry - itself, append `'/**'` to the ignore pattern. - - **Note** `ignore` patterns are _always_ in `dot:true` mode, - regardless of any other settings. - - If an object is provided that has `ignored(path)` and/or - `childrenIgnored(path)` methods, then these methods will be - called to determine whether any Path is a match or if its - children should be traversed, respectively. - -- `follow` Follow symlinked directories when expanding `**` - patterns. This can result in a lot of duplicate references in - the presence of cyclic links, and make performance quite bad. - - By default, a `**` in a pattern will follow 1 symbolic link if - it is not the first item in the pattern, or none if it is the - first item in the pattern, following the same behavior as Bash. - - Note: when `follow` and `nodir` are both set, then symbolic - links to directories are also omitted. - -- `realpath` Set to true to call `fs.realpath` on all of the - results. In the case of an entry that cannot be resolved, the - entry is omitted. This incurs a slight performance penalty, of - course, because of the added system calls. - -- `absolute` Set to true to always receive absolute paths for - matched files. Set to `false` to always receive relative paths - for matched files. - - By default, when this option is not set, absolute paths are - returned for patterns that are absolute, and otherwise paths - are returned that are relative to the `cwd` setting. - - This does _not_ make an extra system call to get the realpath, - it only does string path resolution. - - `absolute` may not be used along with `withFileTypes`. - -- `posix` Set to true to use `/` as the path separator in - returned results. On posix systems, this has no effect. On - Windows systems, this will return `/` delimited path results, - and absolute paths will be returned in their full resolved UNC - path form, eg insted of `'C:\\foo\\bar'`, it will return - `//?/C:/foo/bar`. - -- `platform` Defaults to value of `process.platform` if - available, or `'linux'` if not. Setting `platform:'win32'` on - non-Windows systems may cause strange behavior. - -- `withFileTypes` Return [PathScurry](http://npm.im/path-scurry) - `Path` objects instead of strings. These are similar to a - NodeJS `Dirent` object, but with additional methods and - properties. - - `withFileTypes` may not be used along with `absolute`. - -- `signal` An AbortSignal which will cancel the Glob walk when - triggered. - -- `fs` An override object to pass in custom filesystem methods. - See [PathScurry docs](http://npm.im/path-scurry) for what can - be overridden. - -- `scurry` A [PathScurry](http://npm.im/path-scurry) object used - to traverse the file system. If the `nocase` option is set - explicitly, then any provided `scurry` object must match this - setting. - -- `includeChildMatches` boolean, default `true`. Do not match any - children of any matches. For example, the pattern `**\/foo` - would match `a/foo`, but not `a/foo/b/foo` in this mode. - - This is especially useful for cases like "find all - `node_modules` folders, but not the ones in `node_modules`". - - In order to support this, the `Ignore` implementation must - support an `add(pattern: string)` method. If using the default - `Ignore` class, then this is fine, but if this is set to - `false`, and a custom `Ignore` is provided that does not have - an `add()` method, then it will throw an error. - - **Caveat** It _only_ ignores matches that would be a descendant - of a previous match, and only if that descendant is matched - _after_ the ancestor is encountered. Since the file system walk - happens in indeterminate order, it's possible that a match will - already be added before its ancestor, if multiple or braced - patterns are used. - - For example: - - ```js - const results = await glob( - [ - // likely to match first, since it's just a stat - 'a/b/c/d/e/f', - - // this pattern is more complicated! It must to various readdir() - // calls and test the results against a regular expression, and that - // is certainly going to take a little bit longer. - // - // So, later on, it encounters a match at 'a/b/c/d/e', but it's too - // late to ignore a/b/c/d/e/f, because it's already been emitted. - 'a/[bdf]/?/[a-z]/*', - ], - { includeChildMatches: false }, - ) - ``` - - It's best to only set this to `false` if you can be reasonably - sure that no components of the pattern will potentially match - one another's file system descendants, or if the occasional - included child entry will not cause problems. - -## Glob Primer - -Much more information about glob pattern expansion can be found -by running `man bash` and searching for `Pattern Matching`. - -"Globs" are the patterns you type when you do stuff like `ls -*.js` on the command line, or put `build/*` in a `.gitignore` -file. - -Before parsing the path part patterns, braced sections are -expanded into a set. Braced sections start with `{` and end with -`}`, with 2 or more comma-delimited sections within. Braced -sections may contain slash characters, so `a{/b/c,bcd}` would -expand into `a/b/c` and `abcd`. - -The following characters have special magic meaning when used in -a path portion. With the exception of `**`, none of these match -path separators (ie, `/` on all platforms, and `\` on Windows). - -- `*` Matches 0 or more characters in a single path portion. - When alone in a path portion, it must match at least 1 - character. If `dot:true` is not specified, then `*` will not - match against a `.` character at the start of a path portion. -- `?` Matches 1 character. If `dot:true` is not specified, then - `?` will not match against a `.` character at the start of a - path portion. -- `[...]` Matches a range of characters, similar to a RegExp - range. If the first character of the range is `!` or `^` then - it matches any character not in the range. If the first - character is `]`, then it will be considered the same as `\]`, - rather than the end of the character class. -- `!(pattern|pattern|pattern)` Matches anything that does not - match any of the patterns provided. May _not_ contain `/` - characters. Similar to `*`, if alone in a path portion, then - the path portion must have at least one character. -- `?(pattern|pattern|pattern)` Matches zero or one occurrence of - the patterns provided. May _not_ contain `/` characters. -- `+(pattern|pattern|pattern)` Matches one or more occurrences of - the patterns provided. May _not_ contain `/` characters. -- `*(a|b|c)` Matches zero or more occurrences of the patterns - provided. May _not_ contain `/` characters. -- `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns - provided. May _not_ contain `/` characters. -- `**` If a "globstar" is alone in a path portion, then it - matches zero or more directories and subdirectories searching - for matches. It does not crawl symlinked directories, unless - `{follow:true}` is passed in the options object. A pattern - like `a/b/**` will only match `a/b` if it is a directory. - Follows 1 symbolic link if not the first item in the pattern, - or 0 if it is the first item, unless `follow:true` is set, in - which case it follows all symbolic links. - -`[:class:]` patterns are supported by this implementation, but -`[=c=]` and `[.symbol.]` style class patterns are not. - -### Dots - -If a file or directory path portion has a `.` as the first -character, then it will not match any glob pattern unless that -pattern's corresponding path part also has a `.` as its first -character. - -For example, the pattern `a/.*/c` would match the file at -`a/.b/c`. However the pattern `a/*/c` would not, because `*` does -not start with a dot character. - -You can make glob treat dots as normal characters by setting -`dot:true` in the options. - -### Basename Matching - -If you set `matchBase:true` in the options, and the pattern has -no slashes in it, then it will seek for any file anywhere in the -tree with a matching basename. For example, `*.js` would match -`test/simple/basic.js`. - -### Empty Sets - -If no matching files are found, then an empty array is returned. -This differs from the shell, where the pattern itself is -returned. For example: - -```sh -$ echo a*s*d*f -a*s*d*f -``` - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a -worthwhile goal, some discrepancies exist between node-glob and -other implementations, and are intentional. - -The double-star character `**` is supported by default, unless -the `noglobstar` flag is set. This is supported in the manner of -bsdglob and bash 5, where `**` only has special significance if -it is the only thing in a path part. That is, `a/**/b` will match -`a/x/y/b`, but `a/**b` will not. - -Note that symlinked directories are not traversed as part of a -`**`, though their contents may match against subsequent portions -of the pattern. This prevents infinite loops and duplicates and -the like. You can force glob to traverse symlinks with `**` by -setting `{follow:true}` in the options. - -There is no equivalent of the `nonull` option. A pattern that -does not find any matches simply resolves to nothing. (An empty -array, immediately ended stream, etc.) - -If brace expansion is not disabled, then it is performed before -any other interpretation of the glob pattern. Thus, a pattern -like `+(a|{b),c)}`, which would not be valid in bash or zsh, is -expanded **first** into the set of `+(a|b)` and `+(a|c)`, and -those patterns are checked for validity. Since those two are -valid, matching proceeds. - -The character class patterns `[:class:]` (posix standard named -classes) style class patterns are supported and unicode-aware, -but `[=c=]` (locale-specific character collation weight), and -`[.symbol.]` (collating symbol), are not. - -### Repeated Slashes - -Unlike Bash and zsh, repeated `/` are always coalesced into a -single path separator. - -### Comments and Negation - -Previously, this module let you mark a pattern as a "comment" if -it started with a `#` character, or a "negated" pattern if it -started with a `!` character. - -These options were deprecated in version 5, and removed in -version 6. - -To specify things that should not match, use the `ignore` option. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only -`/` characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will -always be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto -the root setting using `path.join`. On windows, this will by -default result in `/foo/*` matching `C:\foo\bar.txt`. - -To automatically coerce all `\` characters to `/` in pattern -strings, **thus making it impossible to escape literal glob -characters**, you may set the `windowsPathsNoEscape` option to -`true`. - -### Windows, CWDs, Drive Letters, and UNC Paths - -On posix systems, when a pattern starts with `/`, any `cwd` -option is ignored, and the traversal starts at `/`, plus any -non-magic path portions specified in the pattern. - -On Windows systems, the behavior is similar, but the concept of -an "absolute path" is somewhat more involved. - -#### UNC Paths - -A UNC path may be used as the start of a pattern on Windows -platforms. For example, a pattern like: `//?/x:/*` will return -all file entries in the root of the `x:` drive. A pattern like -`//ComputerName/Share/*` will return all files in the associated -share. - -UNC path roots are always compared case insensitively. - -#### Drive Letters - -A pattern starting with a drive letter, like `c:/*`, will search -in that drive, regardless of any `cwd` option provided. - -If the pattern starts with `/`, and is not a UNC path, and there -is an explicit `cwd` option set with a drive letter, then the -drive letter in the `cwd` is used as the root of the directory -traversal. - -For example, `glob('/tmp', { cwd: 'c:/any/thing' })` will return -`['c:/tmp']` as the result. - -If an explicit `cwd` option is not provided, and the pattern -starts with `/`, then the traversal will run on the root of the -drive provided as the `cwd` option. (That is, it is the result of -`path.resolve('/')`.) - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race -conditions, since it relies on directory walking. - -As a result, it is possible that a file that exists when glob -looks for it may have been deleted or modified by the time it -returns the result. - -By design, this implementation caches all readdir calls that it -makes, in order to cut down on system overhead. However, this -also makes it even more susceptible to races, especially if the -cache object is reused between glob calls. - -Users are thus advised not to use a glob result as a guarantee of -filesystem state in the face of rapid changes. For the vast -majority of operations, this is never a problem. - -### See Also: - -- `man sh` -- `man bash` [Pattern - Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) -- `man 3 fnmatch` -- `man 5 gitignore` -- [minimatch documentation](https://github.com/isaacs/minimatch) - -## Glob Logo - -Glob's logo was created by [Tanya -Brassie](http://tanyabrassie.com/). Logo files can be found -[here](https://github.com/isaacs/node-glob/tree/master/logo). - -The logo is licensed under a [Creative Commons -Attribution-ShareAlike 4.0 International -License](https://creativecommons.org/licenses/by-sa/4.0/). - -## Contributing - -Any change to behavior (including bugfixes) must come with a -test. - -Patches that fail tests or reduce performance will be rejected. - -```sh -# to run tests -npm test - -# to re-generate test fixtures -npm run test-regen - -# run the benchmarks -npm run bench - -# to profile javascript -npm run prof -``` - -## Comparison to Other JavaScript Glob Implementations - -**tl;dr** - -- If you want glob matching that is as faithful as possible to - Bash pattern expansion semantics, and as fast as possible - within that constraint, _use this module_. -- If you are reasonably sure that the patterns you will encounter - are relatively simple, and want the absolutely fastest glob - matcher out there, _use [fast-glob](http://npm.im/fast-glob)_. -- If you are reasonably sure that the patterns you will encounter - are relatively simple, and want the convenience of - automatically respecting `.gitignore` files, _use - [globby](http://npm.im/globby)_. - -There are some other glob matcher libraries on npm, but these -three are (in my opinion, as of 2023) the best. - ---- - -**full explanation** - -Every library reflects a set of opinions and priorities in the -trade-offs it makes. Other than this library, I can personally -recommend both [globby](http://npm.im/globby) and -[fast-glob](http://npm.im/fast-glob), though they differ in their -benefits and drawbacks. - -Both have very nice APIs and are reasonably fast. - -`fast-glob` is, as far as I am aware, the fastest glob -implementation in JavaScript today. However, there are many -cases where the choices that `fast-glob` makes in pursuit of -speed mean that its results differ from the results returned by -Bash and other sh-like shells, which may be surprising. - -In my testing, `fast-glob` is around 10-20% faster than this -module when walking over 200k files nested 4 directories -deep[1](#fn-webscale). However, there are some inconsistencies -with Bash matching behavior that this module does not suffer -from: - -- `**` only matches files, not directories -- `..` path portions are not handled unless they appear at the - start of the pattern -- `./!()` will not match any files that _start_ with - ``, even if they do not match ``. For - example, `!(9).txt` will not match `9999.txt`. -- Some brace patterns in the middle of a pattern will result in - failing to find certain matches. -- Extglob patterns are allowed to contain `/` characters. - -Globby exhibits all of the same pattern semantics as fast-glob, -(as it is a wrapper around fast-glob) and is slightly slower than -node-glob (by about 10-20% in the benchmark test set, or in other -words, anywhere from 20-50% slower than fast-glob). However, it -adds some API conveniences that may be worth the costs. - -- Support for `.gitignore` and other ignore files. -- Support for negated globs (ie, patterns starting with `!` - rather than using a separate `ignore` option). - -The priority of this module is "correctness" in the sense of -performing a glob pattern expansion as faithfully as possible to -the behavior of Bash and other sh-like shells, with as much speed -as possible. - -Note that prior versions of `node-glob` are _not_ on this list. -Former versions of this module are far too slow for any cases -where performance matters at all, and were designed with APIs -that are extremely dated by current JavaScript standards. - ---- - -[1]: In the cases where this module -returns results and `fast-glob` doesn't, it's even faster, of -course. - -![lumpy space princess saying 'oh my GLOB'](https://github.com/isaacs/node-glob/raw/main/oh-my-glob.gif) - -### Benchmark Results - -First number is time, smaller is better. - -Second number is the count of results returned. - -``` ---- pattern: '**' --- -~~ sync ~~ -node fast-glob sync 0m0.598s 200364 -node globby sync 0m0.765s 200364 -node current globSync mjs 0m0.683s 222656 -node current glob syncStream 0m0.649s 222656 -~~ async ~~ -node fast-glob async 0m0.350s 200364 -node globby async 0m0.509s 200364 -node current glob async mjs 0m0.463s 222656 -node current glob stream 0m0.411s 222656 - ---- pattern: '**/..' --- -~~ sync ~~ -node fast-glob sync 0m0.486s 0 -node globby sync 0m0.769s 200364 -node current globSync mjs 0m0.564s 2242 -node current glob syncStream 0m0.583s 2242 -~~ async ~~ -node fast-glob async 0m0.283s 0 -node globby async 0m0.512s 200364 -node current glob async mjs 0m0.299s 2242 -node current glob stream 0m0.312s 2242 - ---- pattern: './**/0/**/0/**/0/**/0/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.490s 10 -node globby sync 0m0.517s 10 -node current globSync mjs 0m0.540s 10 -node current glob syncStream 0m0.550s 10 -~~ async ~~ -node fast-glob async 0m0.290s 10 -node globby async 0m0.296s 10 -node current glob async mjs 0m0.278s 10 -node current glob stream 0m0.302s 10 - ---- pattern: './**/[01]/**/[12]/**/[23]/**/[45]/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.500s 160 -node globby sync 0m0.528s 160 -node current globSync mjs 0m0.556s 160 -node current glob syncStream 0m0.573s 160 -~~ async ~~ -node fast-glob async 0m0.283s 160 -node globby async 0m0.301s 160 -node current glob async mjs 0m0.306s 160 -node current glob stream 0m0.322s 160 - ---- pattern: './**/0/**/0/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.502s 5230 -node globby sync 0m0.527s 5230 -node current globSync mjs 0m0.544s 5230 -node current glob syncStream 0m0.557s 5230 -~~ async ~~ -node fast-glob async 0m0.285s 5230 -node globby async 0m0.305s 5230 -node current glob async mjs 0m0.304s 5230 -node current glob stream 0m0.310s 5230 - ---- pattern: '**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.580s 200023 -node globby sync 0m0.771s 200023 -node current globSync mjs 0m0.685s 200023 -node current glob syncStream 0m0.649s 200023 -~~ async ~~ -node fast-glob async 0m0.349s 200023 -node globby async 0m0.509s 200023 -node current glob async mjs 0m0.427s 200023 -node current glob stream 0m0.388s 200023 - ---- pattern: '{**/*.txt,**/?/**/*.txt,**/?/**/?/**/*.txt,**/?/**/?/**/?/**/*.txt,**/?/**/?/**/?/**/?/**/*.txt}' --- -~~ sync ~~ -node fast-glob sync 0m0.589s 200023 -node globby sync 0m0.771s 200023 -node current globSync mjs 0m0.716s 200023 -node current glob syncStream 0m0.684s 200023 -~~ async ~~ -node fast-glob async 0m0.351s 200023 -node globby async 0m0.518s 200023 -node current glob async mjs 0m0.462s 200023 -node current glob stream 0m0.468s 200023 - ---- pattern: '**/5555/0000/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.496s 1000 -node globby sync 0m0.519s 1000 -node current globSync mjs 0m0.539s 1000 -node current glob syncStream 0m0.567s 1000 -~~ async ~~ -node fast-glob async 0m0.285s 1000 -node globby async 0m0.299s 1000 -node current glob async mjs 0m0.305s 1000 -node current glob stream 0m0.301s 1000 - ---- pattern: './**/0/**/../[01]/**/0/../**/0/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.484s 0 -node globby sync 0m0.507s 0 -node current globSync mjs 0m0.577s 4880 -node current glob syncStream 0m0.586s 4880 -~~ async ~~ -node fast-glob async 0m0.280s 0 -node globby async 0m0.298s 0 -node current glob async mjs 0m0.327s 4880 -node current glob stream 0m0.324s 4880 - ---- pattern: '**/????/????/????/????/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.547s 100000 -node globby sync 0m0.673s 100000 -node current globSync mjs 0m0.626s 100000 -node current glob syncStream 0m0.618s 100000 -~~ async ~~ -node fast-glob async 0m0.315s 100000 -node globby async 0m0.414s 100000 -node current glob async mjs 0m0.366s 100000 -node current glob stream 0m0.345s 100000 - ---- pattern: './{**/?{/**/?{/**/?{/**/?,,,,},,,,},,,,},,,}/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.588s 100000 -node globby sync 0m0.670s 100000 -node current globSync mjs 0m0.717s 200023 -node current glob syncStream 0m0.687s 200023 -~~ async ~~ -node fast-glob async 0m0.343s 100000 -node globby async 0m0.418s 100000 -node current glob async mjs 0m0.519s 200023 -node current glob stream 0m0.451s 200023 - ---- pattern: '**/!(0|9).txt' --- -~~ sync ~~ -node fast-glob sync 0m0.573s 160023 -node globby sync 0m0.731s 160023 -node current globSync mjs 0m0.680s 180023 -node current glob syncStream 0m0.659s 180023 -~~ async ~~ -node fast-glob async 0m0.345s 160023 -node globby async 0m0.476s 160023 -node current glob async mjs 0m0.427s 180023 -node current glob stream 0m0.388s 180023 - ---- pattern: './{*/**/../{*/**/../{*/**/../{*/**/../{*/**,,,,},,,,},,,,},,,,},,,,}/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.483s 0 -node globby sync 0m0.512s 0 -node current globSync mjs 0m0.811s 200023 -node current glob syncStream 0m0.773s 200023 -~~ async ~~ -node fast-glob async 0m0.280s 0 -node globby async 0m0.299s 0 -node current glob async mjs 0m0.617s 200023 -node current glob stream 0m0.568s 200023 - ---- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.485s 0 -node globby sync 0m0.507s 0 -node current globSync mjs 0m0.759s 200023 -node current glob syncStream 0m0.740s 200023 -~~ async ~~ -node fast-glob async 0m0.281s 0 -node globby async 0m0.297s 0 -node current glob async mjs 0m0.544s 200023 -node current glob stream 0m0.464s 200023 - ---- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.486s 0 -node globby sync 0m0.513s 0 -node current globSync mjs 0m0.734s 200023 -node current glob syncStream 0m0.696s 200023 -~~ async ~~ -node fast-glob async 0m0.286s 0 -node globby async 0m0.296s 0 -node current glob async mjs 0m0.506s 200023 -node current glob stream 0m0.483s 200023 - ---- pattern: './0/**/../1/**/../2/**/../3/**/../4/**/../5/**/../6/**/../7/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.060s 0 -node globby sync 0m0.074s 0 -node current globSync mjs 0m0.067s 0 -node current glob syncStream 0m0.066s 0 -~~ async ~~ -node fast-glob async 0m0.060s 0 -node globby async 0m0.075s 0 -node current glob async mjs 0m0.066s 0 -node current glob stream 0m0.067s 0 - ---- pattern: './**/?/**/?/**/?/**/?/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.568s 100000 -node globby sync 0m0.651s 100000 -node current globSync mjs 0m0.619s 100000 -node current glob syncStream 0m0.617s 100000 -~~ async ~~ -node fast-glob async 0m0.332s 100000 -node globby async 0m0.409s 100000 -node current glob async mjs 0m0.372s 100000 -node current glob stream 0m0.351s 100000 - ---- pattern: '**/*/**/*/**/*/**/*/**' --- -~~ sync ~~ -node fast-glob sync 0m0.603s 200113 -node globby sync 0m0.798s 200113 -node current globSync mjs 0m0.730s 222137 -node current glob syncStream 0m0.693s 222137 -~~ async ~~ -node fast-glob async 0m0.356s 200113 -node globby async 0m0.525s 200113 -node current glob async mjs 0m0.508s 222137 -node current glob stream 0m0.455s 222137 - ---- pattern: './**/*/**/*/**/*/**/*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.622s 200000 -node globby sync 0m0.792s 200000 -node current globSync mjs 0m0.722s 200000 -node current glob syncStream 0m0.695s 200000 -~~ async ~~ -node fast-glob async 0m0.369s 200000 -node globby async 0m0.527s 200000 -node current glob async mjs 0m0.502s 200000 -node current glob stream 0m0.481s 200000 - ---- pattern: '**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.588s 200023 -node globby sync 0m0.771s 200023 -node current globSync mjs 0m0.684s 200023 -node current glob syncStream 0m0.658s 200023 -~~ async ~~ -node fast-glob async 0m0.352s 200023 -node globby async 0m0.516s 200023 -node current glob async mjs 0m0.432s 200023 -node current glob stream 0m0.384s 200023 - ---- pattern: './**/**/**/**/**/**/**/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.589s 200023 -node globby sync 0m0.766s 200023 -node current globSync mjs 0m0.682s 200023 -node current glob syncStream 0m0.652s 200023 -~~ async ~~ -node fast-glob async 0m0.352s 200023 -node globby async 0m0.523s 200023 -node current glob async mjs 0m0.436s 200023 -node current glob stream 0m0.380s 200023 - ---- pattern: '**/*/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.592s 200023 -node globby sync 0m0.776s 200023 -node current globSync mjs 0m0.691s 200023 -node current glob syncStream 0m0.659s 200023 -~~ async ~~ -node fast-glob async 0m0.357s 200023 -node globby async 0m0.513s 200023 -node current glob async mjs 0m0.471s 200023 -node current glob stream 0m0.424s 200023 - ---- pattern: '**/*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.585s 200023 -node globby sync 0m0.766s 200023 -node current globSync mjs 0m0.694s 200023 -node current glob syncStream 0m0.664s 200023 -~~ async ~~ -node fast-glob async 0m0.350s 200023 -node globby async 0m0.514s 200023 -node current glob async mjs 0m0.472s 200023 -node current glob stream 0m0.424s 200023 - ---- pattern: '**/[0-9]/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.544s 100000 -node globby sync 0m0.636s 100000 -node current globSync mjs 0m0.626s 100000 -node current glob syncStream 0m0.621s 100000 -~~ async ~~ -node fast-glob async 0m0.322s 100000 -node globby async 0m0.404s 100000 -node current glob async mjs 0m0.360s 100000 -node current glob stream 0m0.352s 100000 -``` diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json deleted file mode 100644 index 6d4893b5f3..0000000000 --- a/node_modules/glob/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (https://blog.izs.me/)", - "publishConfig": { - "tag": "legacy-v10" - }, - "name": "glob", - "description": "the most correct and second fastest glob implementation in JavaScript", - "version": "10.4.5", - "type": "module", - "tshy": { - "main": true, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "bin": "./dist/esm/bin.mjs", - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts", - "prepublish": "npm run benchclean", - "profclean": "rm -f v8.log profile.txt", - "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts", - "prebench": "npm run prepare", - "bench": "bash benchmark.sh", - "preprof": "npm run prepare", - "prof": "bash prof.sh", - "benchclean": "node benchclean.cjs" - }, - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "devDependencies": { - "@types/node": "^20.11.30", - "memfs": "^3.4.13", - "mkdirp": "^3.0.1", - "prettier": "^3.2.5", - "rimraf": "^5.0.7", - "sync-content": "^1.0.2", - "tap": "^19.0.0", - "tshy": "^1.14.0", - "typedoc": "^0.25.12" - }, - "tap": { - "before": "test/00-setup.ts" - }, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "module": "./dist/esm/index.js" -} diff --git a/node_modules/ignore/LICENSE-MIT b/node_modules/ignore/LICENSE-MIT deleted file mode 100644 index 825533e337..0000000000 --- a/node_modules/ignore/LICENSE-MIT +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2013 Kael Zhang , contributors -http://kael.me/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/ignore/README.md b/node_modules/ignore/README.md deleted file mode 100644 index 4e99471113..0000000000 --- a/node_modules/ignore/README.md +++ /dev/null @@ -1,452 +0,0 @@ -| Linux / MacOS / Windows | Coverage | Downloads | -| ----------------------- | -------- | --------- | -| [![build][bb]][bl] | [![coverage][cb]][cl] | [![downloads][db]][dl] | - -[bb]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml/badge.svg -[bl]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml - -[cb]: https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg -[cl]: https://codecov.io/gh/kaelzhang/node-ignore - -[db]: http://img.shields.io/npm/dm/ignore.svg -[dl]: https://www.npmjs.org/package/ignore - -# ignore - -`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the [.gitignore spec 2.22.1](http://git-scm.com/docs/gitignore). - -`ignore` is used by eslint, gitbook and [many others](https://www.npmjs.com/browse/depended/ignore). - -Pay **ATTENTION** that [`minimatch`](https://www.npmjs.org/package/minimatch) (which used by `fstream-ignore`) does not follow the gitignore spec. - -To filter filenames according to a .gitignore file, I recommend this npm package, `ignore`. - -To parse an `.npmignore` file, you should use `minimatch`, because an `.npmignore` file is parsed by npm using `minimatch` and it does not work in the .gitignore way. - -### Tested on - -`ignore` is fully tested, and has more than **five hundreds** of unit tests. - -- Linux + Node: `0.8` - `7.x` -- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor. - -Actually, `ignore` does not rely on any versions of node specially. - -Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md). - -## Table Of Main Contents - -- [Usage](#usage) -- [`Pathname` Conventions](#pathname-conventions) -- See Also: - - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules. -- [Upgrade Guide](#upgrade-guide) - -## Install - -```sh -npm i ignore -``` - -## Usage - -```js -import ignore from 'ignore' -const ig = ignore().add(['.abc/*', '!.abc/d/']) -``` - -### Filter the given paths - -```js -const paths = [ - '.abc/a.js', // filtered out - '.abc/d/e.js' // included -] - -ig.filter(paths) // ['.abc/d/e.js'] -ig.ignores('.abc/a.js') // true -``` - -### As the filter function - -```js -paths.filter(ig.createFilter()); // ['.abc/d/e.js'] -``` - -### Win32 paths will be handled - -```js -ig.filter(['.abc\\a.js', '.abc\\d\\e.js']) -// if the code above runs on windows, the result will be -// ['.abc\\d\\e.js'] -``` - -## Why another ignore? - -- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family. - -- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so - - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations. - - `ignore` don't cares about sub-modules of git projects. - -- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as: - - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'. - - '`**/foo`' should match '`foo`' anywhere. - - Prevent re-including a file if a parent directory of that file is excluded. - - Handle trailing whitespaces: - - `'a '`(one space) should not match `'a '`(two spaces). - - `'a \ '` matches `'a '` - - All test cases are verified with the result of `git check-ignore`. - -# Methods - -## .add(pattern: string | Ignore): this -## .add(patterns: Array): this -## .add({pattern: string, mark?: string}): this since 7.0.0 - -- **pattern** `string | Ignore` An ignore pattern string, or the `Ignore` instance -- **patterns** `Array` Array of ignore patterns. -- **mark?** `string` Pattern mark, which is used to associate the pattern with a certain marker, such as the line no of the `.gitignore` file. Actually it could be an arbitrary string and is optional. - -Adds a rule or several rules to the current manager. - -Returns `this` - -Notice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename. - -```js -ignore().add('#abc').ignores('#abc') // false -ignore().add('\\#abc').ignores('#abc') // true -``` - -`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file: - -```js -ignore() -.add(fs.readFileSync(filenameOfGitignore).toString()) -.filter(filenames) -``` - -`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance. - -## .ignores(pathname: [Pathname](#pathname-conventions)): boolean - -> new in 3.2.0 - -Returns `Boolean` whether `pathname` should be ignored. - -```js -ig.ignores('.abc/a.js') // true -``` - -Please **PAY ATTENTION** that `.ignores()` is **NOT** equivalent to `git check-ignore` although in most cases they return equivalent results. - -However, for the purposes of imitating the behavior of `git check-ignore`, please use `.checkIgnore()` instead. - -### `Pathname` Conventions: - -#### 1. `Pathname` should be a `path.relative()`d pathname - -`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory, - -```js -// WRONG, an error will be thrown -ig.ignores('./abc') - -// WRONG, for it will never happen, and an error will be thrown -// If the gitignore rule locates at the root directory, -// `'/abc'` should be changed to `'abc'`. -// ``` -// path.relative('/', '/abc') -> 'abc' -// ``` -ig.ignores('/abc') - -// WRONG, that it is an absolute path on Windows, an error will be thrown -ig.ignores('C:\\abc') - -// Right -ig.ignores('abc') - -// Right -ig.ignores(path.join('./abc')) // path.join('./abc') -> 'abc' -``` - -In other words, each `Pathname` here should be a relative path to the directory of the gitignore rules. - -Suppose the dir structure is: - -``` -/path/to/your/repo - |-- a - | |-- a.js - | - |-- .b - | - |-- .c - |-- .DS_store -``` - -Then the `paths` might be like this: - -```js -[ - 'a/a.js' - '.b', - '.c/.DS_store' -] -``` - -#### 2. filenames and dirnames - -`node-ignore` does NO `fs.stat` during path matching, so `node-ignore` treats -- `foo` as a file -- **`foo/` as a directory** - -For the example below: - -```js -// First, we add a ignore pattern to ignore a directory -ig.add('config/') - -// `ig` does NOT know if 'config', in the real world, -// is a normal file, directory or something. - -ig.ignores('config') -// `ig` treats `config` as a file, so it returns `false` - -ig.ignores('config/') -// returns `true` -``` - -Specially for people who develop some library based on `node-ignore`, it is important to understand that. - -Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory: - -```js -import glob from 'glob' - -glob('**', { - // Adds a / character to directory matches. - mark: true -}, (err, files) => { - if (err) { - return console.error(err) - } - - let filtered = ignore().add(patterns).filter(files) - console.log(filtered) -}) -``` - - -## .filter(paths: Array<Pathname>): Array<Pathname> - -```ts -type Pathname = string -``` - -Filters the given array of pathnames, and returns the filtered array. - -- **paths** `Array.` The array of `pathname`s to be filtered. - -## .createFilter() - -Creates a filter function which could filter an array of paths with `Array.prototype.filter`. - -Returns `function(path)` the filter function. - -## .test(pathname: Pathname): TestResult - -> New in 5.0.0 - -Returns `TestResult` - -```ts -// Since 5.0.0 -interface TestResult { - ignored: boolean - // true if the `pathname` is finally unignored by some negative pattern - unignored: boolean - // The `IgnoreRule` which ignores the pathname - rule?: IgnoreRule -} - -// Since 7.0.0 -interface IgnoreRule { - // The original pattern - pattern: string - // Whether the pattern is a negative pattern - negative: boolean - // Which is used for other packages to build things upon `node-ignore` - mark?: string -} -``` - -- `{ignored: true, unignored: false}`: the `pathname` is ignored -- `{ignored: false, unignored: true}`: the `pathname` is unignored -- `{ignored: false, unignored: false}`: the `pathname` is never matched by any ignore rules. - -## .checkIgnore(target: string): TestResult - -> new in 7.0.0 - -Debugs gitignore / exclude files, which is equivalent to `git check-ignore -v`. Usually this method is used for other packages to implement the function of `git check-ignore -v` upon `node-ignore` - -- **target** `string` the target to test. - -Returns `TestResult` - -```js -ig.add({ - pattern: 'foo/*', - mark: '60' -}) - -const { - ignored, - rule -} = checkIgnore('foo/') - -if (ignored) { - console.log(`.gitignore:${result}:${rule.mark}:${rule.pattern} foo/`) -} - -// .gitignore:60:foo/* foo/ -``` - -Please pay attention that this method does not have a strong built-in cache mechanism. - -The purpose of introducing this method is to make it possible to implement the `git check-ignore` command in JavaScript based on `node-ignore`. - -So do not use this method in those situations where performance is extremely important. - -## static `isPathValid(pathname): boolean` since 5.0.0 - -Check whether the `pathname` is an valid `path.relative()`d path according to the [convention](#1-pathname-should-be-a-pathrelatived-pathname). - -This method is **NOT** used to check if an ignore pattern is valid. - -```js -import {isPathValid} from 'ignore' - -isPathValid('./foo') // false -``` - -## .addIgnoreFile(path) - -REMOVED in `3.x` for now. - -To upgrade `ignore@2.x` up to `3.x`, use - -```js -import fs from 'fs' - -if (fs.existsSync(filename)) { - ignore().add(fs.readFileSync(filename).toString()) -} -``` - -instead. - -## ignore(options) - -### `options.ignorecase` since 4.0.0 - -Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (the default value), otherwise case sensitive. - -```js -const ig = ignore({ - ignorecase: false -}) - -ig.add('*.png') - -ig.ignores('*.PNG') // false -``` - -### `options.ignoreCase?: boolean` since 5.2.0 - -Which is alternative to `options.ignoreCase` - -### `options.allowRelativePaths?: boolean` since 5.2.0 - -This option brings backward compatibility with projects which based on `ignore@4.x`. If `options.allowRelativePaths` is `true`, `ignore` will not check whether the given path to be tested is [`path.relative()`d](#pathname-conventions). - -However, passing a relative path, such as `'./foo'` or `'../foo'`, to test if it is ignored or not is not a good practise, which might lead to unexpected behavior - -```js -ignore({ - allowRelativePaths: true -}).ignores('../foo/bar.js') // And it will not throw -``` - -**** - -# Upgrade Guide - -## Upgrade 4.x -> 5.x - -Since `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, unless `options.allowRelative = true` is passed to the `Ignore` factory. - -While `ignore < 5.0.0` did not make sure what the return value was, as well as - -```ts -.ignores(pathname: Pathname): boolean - -.filter(pathnames: Array): Array - -.createFilter(): (pathname: Pathname) => boolean - -.test(pathname: Pathname): {ignored: boolean, unignored: boolean} -``` - -See the convention [here](#1-pathname-should-be-a-pathrelatived-pathname) for details. - -If there are invalid pathnames, the conversion and filtration should be done by users. - -```js -import {isPathValid} from 'ignore' // introduced in 5.0.0 - -const paths = [ - // invalid - ////////////////// - '', - false, - '../foo', - '.', - ////////////////// - - // valid - 'foo' -] -.filter(isPathValid) - -ig.filter(paths) -``` - -## Upgrade 3.x -> 4.x - -Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6: - -```js -var ignore = require('ignore/legacy') -``` - -## Upgrade 2.x -> 3.x - -- All `options` of 2.x are unnecessary and removed, so just remove them. -- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed. -- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details. - -**** - -# Collaborators - -- [@whitecolor](https://github.com/whitecolor) *Alex* -- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé* -- [@azproduction](https://github.com/azproduction) *Mikhail Davydov* -- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin* -- [@JanMattner](https://github.com/JanMattner) *Jan Mattner* -- [@ntwb](https://github.com/ntwb) *Stephen Edgar* -- [@kasperisager](https://github.com/kasperisager) *Kasper Isager* -- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders* diff --git a/node_modules/ignore/index.d.ts b/node_modules/ignore/index.d.ts deleted file mode 100644 index f6912595a3..0000000000 --- a/node_modules/ignore/index.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -type Pathname = string - -interface IgnoreRule { - pattern: string - mark?: string - negative: boolean -} - -interface TestResult { - ignored: boolean - unignored: boolean - rule?: IgnoreRule -} - -interface PatternParams { - pattern: string - mark?: string -} - -/** - * Creates new ignore manager. - */ -declare function ignore(options?: ignore.Options): ignore.Ignore -declare namespace ignore { - interface Ignore { - /** - * Adds one or several rules to the current manager. - * @param {string[]} patterns - * @returns IgnoreBase - */ - add( - patterns: string | Ignore | readonly (string | Ignore)[] | PatternParams - ): this - - /** - * Filters the given array of pathnames, and returns the filtered array. - * NOTICE that each path here should be a relative path to the root of your repository. - * @param paths the array of paths to be filtered. - * @returns The filtered array of paths - */ - filter(pathnames: readonly Pathname[]): Pathname[] - - /** - * Creates a filter function which could filter - * an array of paths with Array.prototype.filter. - */ - createFilter(): (pathname: Pathname) => boolean - - /** - * Returns Boolean whether pathname should be ignored. - * @param {string} pathname a path to check - * @returns boolean - */ - ignores(pathname: Pathname): boolean - - /** - * Returns whether pathname should be ignored or unignored - * @param {string} pathname a path to check - * @returns TestResult - */ - test(pathname: Pathname): TestResult - - /** - * Debugs ignore rules and returns the checking result, which is - * equivalent to `git check-ignore -v`. - * @returns TestResult - */ - checkIgnore(pathname: Pathname): TestResult - } - - interface Options { - ignorecase?: boolean - // For compatibility - ignoreCase?: boolean - allowRelativePaths?: boolean - } - - function isPathValid(pathname: string): boolean -} - -export = ignore diff --git a/node_modules/ignore/index.js b/node_modules/ignore/index.js deleted file mode 100644 index 99aacbde04..0000000000 --- a/node_modules/ignore/index.js +++ /dev/null @@ -1,779 +0,0 @@ -// A simple implementation of make-array -function makeArray (subject) { - return Array.isArray(subject) - ? subject - : [subject] -} - -const UNDEFINED = undefined -const EMPTY = '' -const SPACE = ' ' -const ESCAPE = '\\' -const REGEX_TEST_BLANK_LINE = /^\s+$/ -const REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/ -const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ -const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ -const REGEX_SPLITALL_CRLF = /\r?\n/g - -// Invalid: -// - /foo, -// - ./foo, -// - ../foo, -// - . -// - .. -// Valid: -// - .foo -const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ - -const REGEX_TEST_TRAILING_SLASH = /\/$/ - -const SLASH = '/' - -// Do not use ternary expression here, since "istanbul ignore next" is buggy -let TMP_KEY_IGNORE = 'node-ignore' -/* istanbul ignore else */ -if (typeof Symbol !== 'undefined') { - TMP_KEY_IGNORE = Symbol.for('node-ignore') -} -const KEY_IGNORE = TMP_KEY_IGNORE - -const define = (object, key, value) => { - Object.defineProperty(object, key, {value}) - return value -} - -const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g - -const RETURN_FALSE = () => false - -// Sanitize the range of a regular expression -// The cases are complicated, see test cases for details -const sanitizeRange = range => range.replace( - REGEX_REGEXP_RANGE, - (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) - ? match - // Invalid range (out of order) which is ok for gitignore rules but - // fatal for JavaScript regular expression, so eliminate it. - : EMPTY -) - -// See fixtures #59 -const cleanRangeBackSlash = slashes => { - const {length} = slashes - return slashes.slice(0, length - length % 2) -} - -// > If the pattern ends with a slash, -// > it is removed for the purpose of the following description, -// > but it would only find a match with a directory. -// > In other words, foo/ will match a directory foo and paths underneath it, -// > but will not match a regular file or a symbolic link foo -// > (this is consistent with the way how pathspec works in general in Git). -// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' -// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call -// you could use option `mark: true` with `glob` - -// '`foo/`' should not continue with the '`..`' -const REPLACERS = [ - - [ - // Remove BOM - // TODO: - // Other similar zero-width characters? - /^\uFEFF/, - () => EMPTY - ], - - // > Trailing spaces are ignored unless they are quoted with backslash ("\") - [ - // (a\ ) -> (a ) - // (a ) -> (a) - // (a ) -> (a) - // (a \ ) -> (a ) - /((?:\\\\)*?)(\\?\s+)$/, - (_, m1, m2) => m1 + ( - m2.indexOf('\\') === 0 - ? SPACE - : EMPTY - ) - ], - - // Replace (\ ) with ' ' - // (\ ) -> ' ' - // (\\ ) -> '\\ ' - // (\\\ ) -> '\\ ' - [ - /(\\+?)\s/g, - (_, m1) => { - const {length} = m1 - return m1.slice(0, length - length % 2) + SPACE - } - ], - - // Escape metacharacters - // which is written down by users but means special for regular expressions. - - // > There are 12 characters with special meanings: - // > - the backslash \, - // > - the caret ^, - // > - the dollar sign $, - // > - the period or dot ., - // > - the vertical bar or pipe symbol |, - // > - the question mark ?, - // > - the asterisk or star *, - // > - the plus sign +, - // > - the opening parenthesis (, - // > - the closing parenthesis ), - // > - and the opening square bracket [, - // > - the opening curly brace {, - // > These special characters are often called "metacharacters". - [ - /[\\$.|*+(){^]/g, - match => `\\${match}` - ], - - [ - // > a question mark (?) matches a single character - /(?!\\)\?/g, - () => '[^/]' - ], - - // leading slash - [ - - // > A leading slash matches the beginning of the pathname. - // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". - // A leading slash matches the beginning of the pathname - /^\//, - () => '^' - ], - - // replace special metacharacter slash after the leading slash - [ - /\//g, - () => '\\/' - ], - - [ - // > A leading "**" followed by a slash means match in all directories. - // > For example, "**/foo" matches file or directory "foo" anywhere, - // > the same as pattern "foo". - // > "**/foo/bar" matches file or directory "bar" anywhere that is directly - // > under directory "foo". - // Notice that the '*'s have been replaced as '\\*' - /^\^*\\\*\\\*\\\//, - - // '**/foo' <-> 'foo' - () => '^(?:.*\\/)?' - ], - - // starting - [ - // there will be no leading '/' - // (which has been replaced by section "leading slash") - // If starts with '**', adding a '^' to the regular expression also works - /^(?=[^^])/, - function startingReplacer () { - // If has a slash `/` at the beginning or middle - return !/\/(?!$)/.test(this) - // > Prior to 2.22.1 - // > If the pattern does not contain a slash /, - // > Git treats it as a shell glob pattern - // Actually, if there is only a trailing slash, - // git also treats it as a shell glob pattern - - // After 2.22.1 (compatible but clearer) - // > If there is a separator at the beginning or middle (or both) - // > of the pattern, then the pattern is relative to the directory - // > level of the particular .gitignore file itself. - // > Otherwise the pattern may also match at any level below - // > the .gitignore level. - ? '(?:^|\\/)' - - // > Otherwise, Git treats the pattern as a shell glob suitable for - // > consumption by fnmatch(3) - : '^' - } - ], - - // two globstars - [ - // Use lookahead assertions so that we could match more than one `'/**'` - /\\\/\\\*\\\*(?=\\\/|$)/g, - - // Zero, one or several directories - // should not use '*', or it will be replaced by the next replacer - - // Check if it is not the last `'/**'` - (_, index, str) => index + 6 < str.length - - // case: /**/ - // > A slash followed by two consecutive asterisks then a slash matches - // > zero or more directories. - // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. - // '/**/' - ? '(?:\\/[^\\/]+)*' - - // case: /** - // > A trailing `"/**"` matches everything inside. - - // #21: everything inside but it should not include the current folder - : '\\/.+' - ], - - // normal intermediate wildcards - [ - // Never replace escaped '*' - // ignore rule '\*' will match the path '*' - - // 'abc.*/' -> go - // 'abc.*' -> skip this rule, - // coz trailing single wildcard will be handed by [trailing wildcard] - /(^|[^\\]+)(\\\*)+(?=.+)/g, - - // '*.js' matches '.js' - // '*.js' doesn't match 'abc' - (_, p1, p2) => { - // 1. - // > An asterisk "*" matches anything except a slash. - // 2. - // > Other consecutive asterisks are considered regular asterisks - // > and will match according to the previous rules. - const unescaped = p2.replace(/\\\*/g, '[^\\/]*') - return p1 + unescaped - } - ], - - [ - // unescape, revert step 3 except for back slash - // For example, if a user escape a '\\*', - // after step 3, the result will be '\\\\\\*' - /\\\\\\(?=[$.|*+(){^])/g, - () => ESCAPE - ], - - [ - // '\\\\' -> '\\' - /\\\\/g, - () => ESCAPE - ], - - [ - // > The range notation, e.g. [a-zA-Z], - // > can be used to match one of the characters in a range. - - // `\` is escaped by step 3 - /(\\)?\[([^\]/]*?)(\\*)($|\])/g, - (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE - // '\\[bar]' -> '\\\\[bar\\]' - ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` - : close === ']' - ? endEscape.length % 2 === 0 - // A normal case, and it is a range notation - // '[bar]' - // '[bar\\\\]' - ? `[${sanitizeRange(range)}${endEscape}]` - // Invalid range notaton - // '[bar\\]' -> '[bar\\\\]' - : '[]' - : '[]' - ], - - // ending - [ - // 'js' will not match 'js.' - // 'ab' will not match 'abc' - /(?:[^*])$/, - - // WTF! - // https://git-scm.com/docs/gitignore - // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) - // which re-fixes #24, #38 - - // > If there is a separator at the end of the pattern then the pattern - // > will only match directories, otherwise the pattern can match both - // > files and directories. - - // 'js*' will not match 'a.js' - // 'js/' will not match 'a.js' - // 'js' will match 'a.js' and 'a.js/' - match => /\/$/.test(match) - // foo/ will not match 'foo' - ? `${match}$` - // foo matches 'foo' and 'foo/' - : `${match}(?=$|\\/$)` - ] -] - -const REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/ -const MODE_IGNORE = 'regex' -const MODE_CHECK_IGNORE = 'checkRegex' -const UNDERSCORE = '_' - -const TRAILING_WILD_CARD_REPLACERS = { - [MODE_IGNORE] (_, p1) { - const prefix = p1 - // '\^': - // '/*' does not match EMPTY - // '/*' does not match everything - - // '\\\/': - // 'abc/*' does not match 'abc/' - ? `${p1}[^/]+` - - // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*' - - return `${prefix}(?=$|\\/$)` - }, - - [MODE_CHECK_IGNORE] (_, p1) { - // When doing `git check-ignore` - const prefix = p1 - // '\\\/': - // 'abc/*' DOES match 'abc/' ! - ? `${p1}[^/]*` - - // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*' - - return `${prefix}(?=$|\\/$)` - } -} - -// @param {pattern} -const makeRegexPrefix = pattern => REPLACERS.reduce( - (prev, [matcher, replacer]) => - prev.replace(matcher, replacer.bind(pattern)), - pattern -) - -const isString = subject => typeof subject === 'string' - -// > A blank line matches no files, so it can serve as a separator for readability. -const checkPattern = pattern => pattern - && isString(pattern) - && !REGEX_TEST_BLANK_LINE.test(pattern) - && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) - - // > A line starting with # serves as a comment. - && pattern.indexOf('#') !== 0 - -const splitPattern = pattern => pattern -.split(REGEX_SPLITALL_CRLF) -.filter(Boolean) - -class IgnoreRule { - constructor ( - pattern, - mark, - body, - ignoreCase, - negative, - prefix - ) { - this.pattern = pattern - this.mark = mark - this.negative = negative - - define(this, 'body', body) - define(this, 'ignoreCase', ignoreCase) - define(this, 'regexPrefix', prefix) - } - - get regex () { - const key = UNDERSCORE + MODE_IGNORE - - if (this[key]) { - return this[key] - } - - return this._make(MODE_IGNORE, key) - } - - get checkRegex () { - const key = UNDERSCORE + MODE_CHECK_IGNORE - - if (this[key]) { - return this[key] - } - - return this._make(MODE_CHECK_IGNORE, key) - } - - _make (mode, key) { - const str = this.regexPrefix.replace( - REGEX_REPLACE_TRAILING_WILDCARD, - - // It does not need to bind pattern - TRAILING_WILD_CARD_REPLACERS[mode] - ) - - const regex = this.ignoreCase - ? new RegExp(str, 'i') - : new RegExp(str) - - return define(this, key, regex) - } -} - -const createRule = ({ - pattern, - mark -}, ignoreCase) => { - let negative = false - let body = pattern - - // > An optional prefix "!" which negates the pattern; - if (body.indexOf('!') === 0) { - negative = true - body = body.substr(1) - } - - body = body - // > Put a backslash ("\") in front of the first "!" for patterns that - // > begin with a literal "!", for example, `"\!important!.txt"`. - .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') - // > Put a backslash ("\") in front of the first hash for patterns that - // > begin with a hash. - .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#') - - const regexPrefix = makeRegexPrefix(body) - - return new IgnoreRule( - pattern, - mark, - body, - ignoreCase, - negative, - regexPrefix - ) -} - -class RuleManager { - constructor (ignoreCase) { - this._ignoreCase = ignoreCase - this._rules = [] - } - - _add (pattern) { - // #32 - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules._rules) - this._added = true - return - } - - if (isString(pattern)) { - pattern = { - pattern - } - } - - if (checkPattern(pattern.pattern)) { - const rule = createRule(pattern, this._ignoreCase) - this._added = true - this._rules.push(rule) - } - } - - // @param {Array | string | Ignore} pattern - add (pattern) { - this._added = false - - makeArray( - isString(pattern) - ? splitPattern(pattern) - : pattern - ).forEach(this._add, this) - - return this._added - } - - // Test one single path without recursively checking parent directories - // - // - checkUnignored `boolean` whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. - // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` - - // @returns {TestResult} true if a file is ignored - test (path, checkUnignored, mode) { - let ignored = false - let unignored = false - let matchedRule - - this._rules.forEach(rule => { - const {negative} = rule - - // | ignored : unignored - // -------- | --------------------------------------- - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X - - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - if ( - unignored === negative && ignored !== unignored - || negative && !ignored && !unignored && !checkUnignored - ) { - return - } - - const matched = rule[mode].test(path) - - if (!matched) { - return - } - - ignored = !negative - unignored = negative - - matchedRule = negative - ? UNDEFINED - : rule - }) - - const ret = { - ignored, - unignored - } - - if (matchedRule) { - ret.rule = matchedRule - } - - return ret - } -} - -const throwError = (message, Ctor) => { - throw new Ctor(message) -} - -const checkPath = (path, originalPath, doThrow) => { - if (!isString(path)) { - return doThrow( - `path must be a string, but got \`${originalPath}\``, - TypeError - ) - } - - // We don't know if we should ignore EMPTY, so throw - if (!path) { - return doThrow(`path must not be empty`, TypeError) - } - - // Check if it is a relative path - if (checkPath.isNotRelative(path)) { - const r = '`path.relative()`d' - return doThrow( - `path should be a ${r} string, but got "${originalPath}"`, - RangeError - ) - } - - return true -} - -const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path) - -checkPath.isNotRelative = isNotRelative - -// On windows, the following function will be replaced -/* istanbul ignore next */ -checkPath.convert = p => p - - -class Ignore { - constructor ({ - ignorecase = true, - ignoreCase = ignorecase, - allowRelativePaths = false - } = {}) { - define(this, KEY_IGNORE, true) - - this._rules = new RuleManager(ignoreCase) - this._strictPathCheck = !allowRelativePaths - this._initCache() - } - - _initCache () { - // A cache for the result of `.ignores()` - this._ignoreCache = Object.create(null) - - // A cache for the result of `.test()` - this._testCache = Object.create(null) - } - - add (pattern) { - if (this._rules.add(pattern)) { - // Some rules have just added to the ignore, - // making the behavior changed, - // so we need to re-initialize the result cache - this._initCache() - } - - return this - } - - // legacy - addPattern (pattern) { - return this.add(pattern) - } - - // @returns {TestResult} - _test (originalPath, cache, checkUnignored, slices) { - const path = originalPath - // Supports nullable path - && checkPath.convert(originalPath) - - checkPath( - path, - originalPath, - this._strictPathCheck - ? throwError - : RETURN_FALSE - ) - - return this._t(path, cache, checkUnignored, slices) - } - - checkIgnore (path) { - // If the path doest not end with a slash, `.ignores()` is much equivalent - // to `git check-ignore` - if (!REGEX_TEST_TRAILING_SLASH.test(path)) { - return this.test(path) - } - - const slices = path.split(SLASH).filter(Boolean) - slices.pop() - - if (slices.length) { - const parent = this._t( - slices.join(SLASH) + SLASH, - this._testCache, - true, - slices - ) - - if (parent.ignored) { - return parent - } - } - - return this._rules.test(path, false, MODE_CHECK_IGNORE) - } - - _t ( - // The path to be tested - path, - - // The cache for the result of a certain checking - cache, - - // Whether should check if the path is unignored - checkUnignored, - - // The path slices - slices - ) { - if (path in cache) { - return cache[path] - } - - if (!slices) { - // path/to/a.js - // ['path', 'to', 'a.js'] - slices = path.split(SLASH).filter(Boolean) - } - - slices.pop() - - // If the path has no parent directory, just test it - if (!slices.length) { - return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE) - } - - const parent = this._t( - slices.join(SLASH) + SLASH, - cache, - checkUnignored, - slices - ) - - // If the path contains a parent directory, check the parent first - return cache[path] = parent.ignored - // > It is not possible to re-include a file if a parent directory of - // > that file is excluded. - ? parent - : this._rules.test(path, checkUnignored, MODE_IGNORE) - } - - ignores (path) { - return this._test(path, this._ignoreCache, false).ignored - } - - createFilter () { - return path => !this.ignores(path) - } - - filter (paths) { - return makeArray(paths).filter(this.createFilter()) - } - - // @returns {TestResult} - test (path) { - return this._test(path, this._testCache, true) - } -} - -const factory = options => new Ignore(options) - -const isPathValid = path => - checkPath(path && checkPath.convert(path), path, RETURN_FALSE) - - -// Windows -// -------------------------------------------------------------- -/* istanbul ignore next */ -if ( - // Detect `process` so that it can run in browsers. - typeof process !== 'undefined' - && ( - process.env && process.env.IGNORE_TEST_WIN32 - || process.platform === 'win32' - ) -) { - /* eslint no-control-regex: "off" */ - const makePosix = str => /^\\\\\?\\/.test(str) - || /["<>|\u0000-\u001F]+/u.test(str) - ? str - : str.replace(/\\/g, '/') - - checkPath.convert = makePosix - - // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' - // 'd:\\foo' - const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i - checkPath.isNotRelative = path => - REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) - || isNotRelative(path) -} - -// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// - -module.exports = factory - -// Although it is an anti-pattern, -// it is still widely misused by a lot of libraries in github -// Ref: https://github.com/search?q=ignore.default%28%29&type=code -factory.default = factory - -module.exports.isPathValid = isPathValid diff --git a/node_modules/ignore/legacy.js b/node_modules/ignore/legacy.js deleted file mode 100644 index fe9d3a242b..0000000000 --- a/node_modules/ignore/legacy.js +++ /dev/null @@ -1,673 +0,0 @@ -"use strict"; - -var _TRAILING_WILD_CARD_R; -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } -function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -// A simple implementation of make-array -function makeArray(subject) { - return Array.isArray(subject) ? subject : [subject]; -} -var UNDEFINED = undefined; -var EMPTY = ''; -var SPACE = ' '; -var ESCAPE = '\\'; -var REGEX_TEST_BLANK_LINE = /^\s+$/; -var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; -var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; -var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; -var REGEX_SPLITALL_CRLF = /\r?\n/g; - -// Invalid: -// - /foo, -// - ./foo, -// - ../foo, -// - . -// - .. -// Valid: -// - .foo -var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; -var REGEX_TEST_TRAILING_SLASH = /\/$/; -var SLASH = '/'; - -// Do not use ternary expression here, since "istanbul ignore next" is buggy -var TMP_KEY_IGNORE = 'node-ignore'; -/* istanbul ignore else */ -if (typeof Symbol !== 'undefined') { - TMP_KEY_IGNORE = Symbol["for"]('node-ignore'); -} -var KEY_IGNORE = TMP_KEY_IGNORE; -var define = function define(object, key, value) { - Object.defineProperty(object, key, { - value: value - }); - return value; -}; -var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; -var RETURN_FALSE = function RETURN_FALSE() { - return false; -}; - -// Sanitize the range of a regular expression -// The cases are complicated, see test cases for details -var sanitizeRange = function sanitizeRange(range) { - return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) { - return from.charCodeAt(0) <= to.charCodeAt(0) ? match - // Invalid range (out of order) which is ok for gitignore rules but - // fatal for JavaScript regular expression, so eliminate it. - : EMPTY; - }); -}; - -// See fixtures #59 -var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) { - var length = slashes.length; - return slashes.slice(0, length - length % 2); -}; - -// > If the pattern ends with a slash, -// > it is removed for the purpose of the following description, -// > but it would only find a match with a directory. -// > In other words, foo/ will match a directory foo and paths underneath it, -// > but will not match a regular file or a symbolic link foo -// > (this is consistent with the way how pathspec works in general in Git). -// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' -// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call -// you could use option `mark: true` with `glob` - -// '`foo/`' should not continue with the '`..`' -var REPLACERS = [[ -// Remove BOM -// TODO: -// Other similar zero-width characters? -/^\uFEFF/, function () { - return EMPTY; -}], -// > Trailing spaces are ignored unless they are quoted with backslash ("\") -[ -// (a\ ) -> (a ) -// (a ) -> (a) -// (a ) -> (a) -// (a \ ) -> (a ) -/((?:\\\\)*?)(\\?\s+)$/, function (_, m1, m2) { - return m1 + (m2.indexOf('\\') === 0 ? SPACE : EMPTY); -}], -// Replace (\ ) with ' ' -// (\ ) -> ' ' -// (\\ ) -> '\\ ' -// (\\\ ) -> '\\ ' -[/(\\+?)\s/g, function (_, m1) { - var length = m1.length; - return m1.slice(0, length - length % 2) + SPACE; -}], -// Escape metacharacters -// which is written down by users but means special for regular expressions. - -// > There are 12 characters with special meanings: -// > - the backslash \, -// > - the caret ^, -// > - the dollar sign $, -// > - the period or dot ., -// > - the vertical bar or pipe symbol |, -// > - the question mark ?, -// > - the asterisk or star *, -// > - the plus sign +, -// > - the opening parenthesis (, -// > - the closing parenthesis ), -// > - and the opening square bracket [, -// > - the opening curly brace {, -// > These special characters are often called "metacharacters". -[/[\\$.|*+(){^]/g, function (match) { - return "\\".concat(match); -}], [ -// > a question mark (?) matches a single character -/(?!\\)\?/g, function () { - return '[^/]'; -}], -// leading slash -[ -// > A leading slash matches the beginning of the pathname. -// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". -// A leading slash matches the beginning of the pathname -/^\//, function () { - return '^'; -}], -// replace special metacharacter slash after the leading slash -[/\//g, function () { - return '\\/'; -}], [ -// > A leading "**" followed by a slash means match in all directories. -// > For example, "**/foo" matches file or directory "foo" anywhere, -// > the same as pattern "foo". -// > "**/foo/bar" matches file or directory "bar" anywhere that is directly -// > under directory "foo". -// Notice that the '*'s have been replaced as '\\*' -/^\^*\\\*\\\*\\\//, -// '**/foo' <-> 'foo' -function () { - return '^(?:.*\\/)?'; -}], -// starting -[ -// there will be no leading '/' -// (which has been replaced by section "leading slash") -// If starts with '**', adding a '^' to the regular expression also works -/^(?=[^^])/, function startingReplacer() { - // If has a slash `/` at the beginning or middle - return !/\/(?!$)/.test(this) - // > Prior to 2.22.1 - // > If the pattern does not contain a slash /, - // > Git treats it as a shell glob pattern - // Actually, if there is only a trailing slash, - // git also treats it as a shell glob pattern - - // After 2.22.1 (compatible but clearer) - // > If there is a separator at the beginning or middle (or both) - // > of the pattern, then the pattern is relative to the directory - // > level of the particular .gitignore file itself. - // > Otherwise the pattern may also match at any level below - // > the .gitignore level. - ? '(?:^|\\/)' - - // > Otherwise, Git treats the pattern as a shell glob suitable for - // > consumption by fnmatch(3) - : '^'; -}], -// two globstars -[ -// Use lookahead assertions so that we could match more than one `'/**'` -/\\\/\\\*\\\*(?=\\\/|$)/g, -// Zero, one or several directories -// should not use '*', or it will be replaced by the next replacer - -// Check if it is not the last `'/**'` -function (_, index, str) { - return index + 6 < str.length - - // case: /**/ - // > A slash followed by two consecutive asterisks then a slash matches - // > zero or more directories. - // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. - // '/**/' - ? '(?:\\/[^\\/]+)*' - - // case: /** - // > A trailing `"/**"` matches everything inside. - - // #21: everything inside but it should not include the current folder - : '\\/.+'; -}], -// normal intermediate wildcards -[ -// Never replace escaped '*' -// ignore rule '\*' will match the path '*' - -// 'abc.*/' -> go -// 'abc.*' -> skip this rule, -// coz trailing single wildcard will be handed by [trailing wildcard] -/(^|[^\\]+)(\\\*)+(?=.+)/g, -// '*.js' matches '.js' -// '*.js' doesn't match 'abc' -function (_, p1, p2) { - // 1. - // > An asterisk "*" matches anything except a slash. - // 2. - // > Other consecutive asterisks are considered regular asterisks - // > and will match according to the previous rules. - var unescaped = p2.replace(/\\\*/g, '[^\\/]*'); - return p1 + unescaped; -}], [ -// unescape, revert step 3 except for back slash -// For example, if a user escape a '\\*', -// after step 3, the result will be '\\\\\\*' -/\\\\\\(?=[$.|*+(){^])/g, function () { - return ESCAPE; -}], [ -// '\\\\' -> '\\' -/\\\\/g, function () { - return ESCAPE; -}], [ -// > The range notation, e.g. [a-zA-Z], -// > can be used to match one of the characters in a range. - -// `\` is escaped by step 3 -/(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) { - return leadEscape === ESCAPE - // '\\[bar]' -> '\\\\[bar\\]' - ? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0 - // A normal case, and it is a range notation - // '[bar]' - // '[bar\\\\]' - ? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton - // '[bar\\]' -> '[bar\\\\]' - : '[]' : '[]'; -}], -// ending -[ -// 'js' will not match 'js.' -// 'ab' will not match 'abc' -/(?:[^*])$/, -// WTF! -// https://git-scm.com/docs/gitignore -// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) -// which re-fixes #24, #38 - -// > If there is a separator at the end of the pattern then the pattern -// > will only match directories, otherwise the pattern can match both -// > files and directories. - -// 'js*' will not match 'a.js' -// 'js/' will not match 'a.js' -// 'js' will match 'a.js' and 'a.js/' -function (match) { - return /\/$/.test(match) - // foo/ will not match 'foo' - ? "".concat(match, "$") // foo matches 'foo' and 'foo/' - : "".concat(match, "(?=$|\\/$)"); -}]]; -var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/; -var MODE_IGNORE = 'regex'; -var MODE_CHECK_IGNORE = 'checkRegex'; -var UNDERSCORE = '_'; -var TRAILING_WILD_CARD_REPLACERS = (_TRAILING_WILD_CARD_R = {}, _defineProperty(_TRAILING_WILD_CARD_R, MODE_IGNORE, function (_, p1) { - var prefix = p1 - // '\^': - // '/*' does not match EMPTY - // '/*' does not match everything - - // '\\\/': - // 'abc/*' does not match 'abc/' - ? "".concat(p1, "[^/]+") // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*'; - return "".concat(prefix, "(?=$|\\/$)"); -}), _defineProperty(_TRAILING_WILD_CARD_R, MODE_CHECK_IGNORE, function (_, p1) { - // When doing `git check-ignore` - var prefix = p1 - // '\\\/': - // 'abc/*' DOES match 'abc/' ! - ? "".concat(p1, "[^/]*") // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*'; - return "".concat(prefix, "(?=$|\\/$)"); -}), _TRAILING_WILD_CARD_R); - -// @param {pattern} -var makeRegexPrefix = function makeRegexPrefix(pattern) { - return REPLACERS.reduce(function (prev, _ref) { - var _ref2 = _slicedToArray(_ref, 2), - matcher = _ref2[0], - replacer = _ref2[1]; - return prev.replace(matcher, replacer.bind(pattern)); - }, pattern); -}; -var isString = function isString(subject) { - return typeof subject === 'string'; -}; - -// > A blank line matches no files, so it can serve as a separator for readability. -var checkPattern = function checkPattern(pattern) { - return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) - - // > A line starting with # serves as a comment. - && pattern.indexOf('#') !== 0; -}; -var splitPattern = function splitPattern(pattern) { - return pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean); -}; -var IgnoreRule = /*#__PURE__*/function () { - function IgnoreRule(pattern, mark, body, ignoreCase, negative, prefix) { - _classCallCheck(this, IgnoreRule); - this.pattern = pattern; - this.mark = mark; - this.negative = negative; - define(this, 'body', body); - define(this, 'ignoreCase', ignoreCase); - define(this, 'regexPrefix', prefix); - } - _createClass(IgnoreRule, [{ - key: "regex", - get: function get() { - var key = UNDERSCORE + MODE_IGNORE; - if (this[key]) { - return this[key]; - } - return this._make(MODE_IGNORE, key); - } - }, { - key: "checkRegex", - get: function get() { - var key = UNDERSCORE + MODE_CHECK_IGNORE; - if (this[key]) { - return this[key]; - } - return this._make(MODE_CHECK_IGNORE, key); - } - }, { - key: "_make", - value: function _make(mode, key) { - var str = this.regexPrefix.replace(REGEX_REPLACE_TRAILING_WILDCARD, - // It does not need to bind pattern - TRAILING_WILD_CARD_REPLACERS[mode]); - var regex = this.ignoreCase ? new RegExp(str, 'i') : new RegExp(str); - return define(this, key, regex); - } - }]); - return IgnoreRule; -}(); -var createRule = function createRule(_ref3, ignoreCase) { - var pattern = _ref3.pattern, - mark = _ref3.mark; - var negative = false; - var body = pattern; - - // > An optional prefix "!" which negates the pattern; - if (body.indexOf('!') === 0) { - negative = true; - body = body.substr(1); - } - body = body - // > Put a backslash ("\") in front of the first "!" for patterns that - // > begin with a literal "!", for example, `"\!important!.txt"`. - .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') - // > Put a backslash ("\") in front of the first hash for patterns that - // > begin with a hash. - .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); - var regexPrefix = makeRegexPrefix(body); - return new IgnoreRule(pattern, mark, body, ignoreCase, negative, regexPrefix); -}; -var RuleManager = /*#__PURE__*/function () { - function RuleManager(ignoreCase) { - _classCallCheck(this, RuleManager); - this._ignoreCase = ignoreCase; - this._rules = []; - } - _createClass(RuleManager, [{ - key: "_add", - value: function _add(pattern) { - // #32 - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules._rules); - this._added = true; - return; - } - if (isString(pattern)) { - pattern = { - pattern: pattern - }; - } - if (checkPattern(pattern.pattern)) { - var rule = createRule(pattern, this._ignoreCase); - this._added = true; - this._rules.push(rule); - } - } - - // @param {Array | string | Ignore} pattern - }, { - key: "add", - value: function add(pattern) { - this._added = false; - makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._add, this); - return this._added; - } - - // Test one single path without recursively checking parent directories - // - // - checkUnignored `boolean` whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. - // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` - - // @returns {TestResult} true if a file is ignored - }, { - key: "test", - value: function test(path, checkUnignored, mode) { - var ignored = false; - var unignored = false; - var matchedRule; - this._rules.forEach(function (rule) { - var negative = rule.negative; - - // | ignored : unignored - // -------- | --------------------------------------- - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X - - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { - return; - } - var matched = rule[mode].test(path); - if (!matched) { - return; - } - ignored = !negative; - unignored = negative; - matchedRule = negative ? UNDEFINED : rule; - }); - var ret = { - ignored: ignored, - unignored: unignored - }; - if (matchedRule) { - ret.rule = matchedRule; - } - return ret; - } - }]); - return RuleManager; -}(); -var throwError = function throwError(message, Ctor) { - throw new Ctor(message); -}; -var checkPath = function checkPath(path, originalPath, doThrow) { - if (!isString(path)) { - return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError); - } - - // We don't know if we should ignore EMPTY, so throw - if (!path) { - return doThrow("path must not be empty", TypeError); - } - - // Check if it is a relative path - if (checkPath.isNotRelative(path)) { - var r = '`path.relative()`d'; - return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError); - } - return true; -}; -var isNotRelative = function isNotRelative(path) { - return REGEX_TEST_INVALID_PATH.test(path); -}; -checkPath.isNotRelative = isNotRelative; - -// On windows, the following function will be replaced -/* istanbul ignore next */ -checkPath.convert = function (p) { - return p; -}; -var Ignore = /*#__PURE__*/function () { - function Ignore() { - var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref4$ignorecase = _ref4.ignorecase, - ignorecase = _ref4$ignorecase === void 0 ? true : _ref4$ignorecase, - _ref4$ignoreCase = _ref4.ignoreCase, - ignoreCase = _ref4$ignoreCase === void 0 ? ignorecase : _ref4$ignoreCase, - _ref4$allowRelativePa = _ref4.allowRelativePaths, - allowRelativePaths = _ref4$allowRelativePa === void 0 ? false : _ref4$allowRelativePa; - _classCallCheck(this, Ignore); - define(this, KEY_IGNORE, true); - this._rules = new RuleManager(ignoreCase); - this._strictPathCheck = !allowRelativePaths; - this._initCache(); - } - _createClass(Ignore, [{ - key: "_initCache", - value: function _initCache() { - // A cache for the result of `.ignores()` - this._ignoreCache = Object.create(null); - - // A cache for the result of `.test()` - this._testCache = Object.create(null); - } - }, { - key: "add", - value: function add(pattern) { - if (this._rules.add(pattern)) { - // Some rules have just added to the ignore, - // making the behavior changed, - // so we need to re-initialize the result cache - this._initCache(); - } - return this; - } - - // legacy - }, { - key: "addPattern", - value: function addPattern(pattern) { - return this.add(pattern); - } - - // @returns {TestResult} - }, { - key: "_test", - value: function _test(originalPath, cache, checkUnignored, slices) { - var path = originalPath - // Supports nullable path - && checkPath.convert(originalPath); - checkPath(path, originalPath, this._strictPathCheck ? throwError : RETURN_FALSE); - return this._t(path, cache, checkUnignored, slices); - } - }, { - key: "checkIgnore", - value: function checkIgnore(path) { - // If the path doest not end with a slash, `.ignores()` is much equivalent - // to `git check-ignore` - if (!REGEX_TEST_TRAILING_SLASH.test(path)) { - return this.test(path); - } - var slices = path.split(SLASH).filter(Boolean); - slices.pop(); - if (slices.length) { - var parent = this._t(slices.join(SLASH) + SLASH, this._testCache, true, slices); - if (parent.ignored) { - return parent; - } - } - return this._rules.test(path, false, MODE_CHECK_IGNORE); - } - }, { - key: "_t", - value: function _t( - // The path to be tested - path, - // The cache for the result of a certain checking - cache, - // Whether should check if the path is unignored - checkUnignored, - // The path slices - slices) { - if (path in cache) { - return cache[path]; - } - if (!slices) { - // path/to/a.js - // ['path', 'to', 'a.js'] - slices = path.split(SLASH).filter(Boolean); - } - slices.pop(); - - // If the path has no parent directory, just test it - if (!slices.length) { - return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE); - } - var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices); - - // If the path contains a parent directory, check the parent first - return cache[path] = parent.ignored - // > It is not possible to re-include a file if a parent directory of - // > that file is excluded. - ? parent : this._rules.test(path, checkUnignored, MODE_IGNORE); - } - }, { - key: "ignores", - value: function ignores(path) { - return this._test(path, this._ignoreCache, false).ignored; - } - }, { - key: "createFilter", - value: function createFilter() { - var _this = this; - return function (path) { - return !_this.ignores(path); - }; - } - }, { - key: "filter", - value: function filter(paths) { - return makeArray(paths).filter(this.createFilter()); - } - - // @returns {TestResult} - }, { - key: "test", - value: function test(path) { - return this._test(path, this._testCache, true); - } - }]); - return Ignore; -}(); -var factory = function factory(options) { - return new Ignore(options); -}; -var isPathValid = function isPathValid(path) { - return checkPath(path && checkPath.convert(path), path, RETURN_FALSE); -}; - -// Windows -// -------------------------------------------------------------- -/* istanbul ignore next */ -if ( -// Detect `process` so that it can run in browsers. -typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) { - /* eslint no-control-regex: "off" */ - var makePosix = function makePosix(str) { - return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/'); - }; - checkPath.convert = makePosix; - - // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' - // 'd:\\foo' - var REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; - checkPath.isNotRelative = function (path) { - return REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path); - }; -} - -// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// - -module.exports = factory; - -// Although it is an anti-pattern, -// it is still widely misused by a lot of libraries in github -// Ref: https://github.com/search?q=ignore.default%28%29&type=code -factory["default"] = factory; -module.exports.isPathValid = isPathValid; diff --git a/node_modules/ignore/package.json b/node_modules/ignore/package.json deleted file mode 100644 index b0608c32e8..0000000000 --- a/node_modules/ignore/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "ignore", - "version": "7.0.3", - "description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.", - "types": "index.d.ts", - "files": [ - "legacy.js", - "index.js", - "index.d.ts", - "LICENSE-MIT" - ], - "scripts": { - "prepublishOnly": "npm run build", - "build": "babel -o legacy.js index.js", - - "==================== linting ======================": "", - "lint": "eslint .", - - "===================== import ======================": "", - "ts": "npm run test:ts && npm run test:16", - "test:ts": "ts-node ./test/import/simple.ts", - "test:16": "npm run test:ts:16 && npm run test:cjs:16 && npm run test:mjs:16", - "test:ts:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.ts && tsc ./test/import/simple.ts --lib ES6 --moduleResolution Node16 --module Node16 && node ./test/import/simple.js", - "test:cjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.cjs", - "test:mjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.mjs && babel -o ./test/import/simple-mjs.js ./test/import/simple.mjs && node ./test/import/simple-mjs.js", - - "===================== cases =======================": "", - "test:cases": "npm run tap test/*.test.js -- --coverage", - "tap": "tap --reporter classic", - - "===================== debug =======================": "", - "test:git": "npm run tap test/git-check-ignore.test.js", - "test:ignore": "npm run tap test/ignore.test.js", - "test:ignore:only": "IGNORE_ONLY_IGNORES=1 npm run tap test/ignore.test.js", - "test:others": "npm run tap test/others.test.js", - "test:no-coverage": "npm run tap test/*.test.js -- --no-check-coverage", - - "test": "npm run lint && npm run ts && npm run build && npm run test:cases", - "test:win32": "IGNORE_TEST_WIN32=1 npm run test", - "report": "tap --coverage-report=html" - }, - "repository": { - "type": "git", - "url": "git@github.com:kaelzhang/node-ignore.git" - }, - "keywords": [ - "ignore", - ".gitignore", - "gitignore", - "npmignore", - "rules", - "manager", - "filter", - "regexp", - "regex", - "fnmatch", - "glob", - "asterisks", - "regular-expression" - ], - "author": "kael", - "license": "MIT", - "bugs": { - "url": "https://github.com/kaelzhang/node-ignore/issues" - }, - "devDependencies": { - "@babel/cli": "^7.22.9", - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@typescript-eslint/eslint-plugin": "^8.19.1", - "codecov": "^3.8.3", - "debug": "^4.3.4", - "eslint": "^8.46.0", - "eslint-config-ostai": "^3.0.0", - "eslint-plugin-import": "^2.28.0", - "mkdirp": "^3.0.1", - "pre-suf": "^1.1.1", - "rimraf": "^6.0.1", - "spawn-sync": "^2.0.0", - "tap": "^16.3.9", - "tmp": "0.2.3", - "ts-node": "^10.9.2", - "typescript": "^5.6.2" - }, - "engines": { - "node": ">= 4" - } -} diff --git a/node_modules/ini/LICENSE b/node_modules/ini/LICENSE deleted file mode 100644 index 19129e315f..0000000000 --- a/node_modules/ini/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/ini/README.md b/node_modules/ini/README.md deleted file mode 100644 index c6eee0052a..0000000000 --- a/node_modules/ini/README.md +++ /dev/null @@ -1,180 +0,0 @@ - -An INI format parser & serializer. - -## Note - -- Sections are treated as nested objects. - -- Section-less items are treated as globals. - -## Usage - -Consider an INI file such as the following: - -```ini -; This comment is being ignored -scope = global - -[database] -user = dbuser -password = dbpassword -database = use_this_database - -[paths.default] -datadir = /var/lib/data -array[] = first value -array[] = second value -array[] = third value -``` - -You can **read**, **modify** and **write** it like so: - -```js -import { writeFile , readFile } from 'node:fs/promises' -import { stringify , parse } from 'ini' - -// Read INI file as text - -let text = await readFile(`./Original.ini`,{ - encoding : 'utf-8' -}) - -// Parse text data to object - -const config = parse(text) - -// Modify data object - -config.scope = 'local' -config.database.database = 'use_another_database' -config.paths.default.tmpdir = '/tmp' -delete config.paths.default.datadir -config.paths.default.array.push('fourth value') - -// Stringify data object - -text = stringify(config,{ - section : 'section' -}) - -// Write INI file as text - -await writeFile(`./Modified.ini`,text) -``` - -The written file will contain the following: - -```ini -[section] -scope=local -[section.database] -user=dbuser -password=dbpassword -database=use_another_database -[section.paths.default] -tmpdir=/tmp -array[]=first value -array[]=second value -array[]=third value -array[]=fourth value -``` - -## API - -### Parse - -Attempts to turn the given INI string into a nested data object. - -```js -// You can also use `decode` -const object = parse(``) -``` - -### Stringify - -Encodes the given data object as an INI formatted string. - -```js -// You can also use `encode` -stringify(object,{ - - /** - * Whether to insert spaces before & after `=` - * - * Disabled by default to have better - * compatibility with old picky parsers. - */ - - whitespace : false , - - /** - * Whether to align the `=` character for each section. - * -> Also enables the `whitespace` option - */ - - align : false , - - /** - * Identifier to use for global items - * and to prepend to all other sections. - */ - - section , - - /** - * Whether to sort all sections & their keys alphabetically. - */ - - sort : false , - - /** - * Whether to insert a newline after each section header. - * - * The TOSHIBA & FlashAir parser require this format. - */ - - newline : false , - - /** - * Which platforms line-endings should be used. - * - * win32 -> CR+LF - * other -> LF - * - * Default is the current platform - */ - - platform , - - /** - * Whether to append `[]` to array keys. - * - * Some parsers treat duplicate names by themselves as arrays - */ - - bracketedArray : true - -}) -``` - -*For backwards compatibility any string passed as the* -*options parameter is treated as the `section` option.* - -```js -stringify(object,'section') -``` - -### Un / Escape - -Turn the given string into a safe to -use key or value in your INI file. - -```js -safe(`"unsafe string"`) // -> \"unsafe string\" -``` - -Or reverse the process with: - -```js -unsafe(`\\"safe string\\"`) // -> "safe string" -``` diff --git a/node_modules/ini/package.json b/node_modules/ini/package.json deleted file mode 100644 index 67aa927825..0000000000 --- a/node_modules/ini/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "author": "GitHub Inc.", - "name": "ini", - "description": "An ini encoder/decoder for node", - "version": "4.1.3", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/ini.git" - }, - "main": "lib/ini.js", - "scripts": { - "eslint": "eslint", - "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"", - "lintfix": "npm run lint -- --fix", - "test": "tap", - "snap": "tap", - "posttest": "npm run lint", - "postlint": "template-oss-check", - "template-oss-apply": "template-oss-apply --force" - }, - "devDependencies": { - "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.22.0", - "tap": "^16.0.1" - }, - "license": "ISC", - "files": [ - "bin/", - "lib/" - ], - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "templateOSS": { - "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.22.0", - "publish": "true" - }, - "tap": { - "nyc-arg": [ - "--exclude", - "tap-snapshots/**" - ] - } -} diff --git a/node_modules/is-alphabetical/index.d.ts b/node_modules/is-alphabetical/index.d.ts deleted file mode 100644 index ceee1c6113..0000000000 --- a/node_modules/is-alphabetical/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is alphabetical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphabetical. - */ -export function isAlphabetical(character: string | number): boolean diff --git a/node_modules/is-alphabetical/index.js b/node_modules/is-alphabetical/index.js deleted file mode 100644 index f71156a48b..0000000000 --- a/node_modules/is-alphabetical/index.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is alphabetical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphabetical. - */ -export function isAlphabetical(character) { - const code = - typeof character === 'string' ? character.charCodeAt(0) : character - - return ( - (code >= 97 && code <= 122) /* a-z */ || - (code >= 65 && code <= 90) /* A-Z */ - ) -} diff --git a/node_modules/is-alphabetical/license b/node_modules/is-alphabetical/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-alphabetical/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphabetical/package.json b/node_modules/is-alphabetical/package.json deleted file mode 100644 index c274f30d20..0000000000 --- a/node_modules/is-alphabetical/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "is-alphabetical", - "version": "2.0.1", - "description": "Check if a character is alphabetical", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "alphabetical" - ], - "repository": "wooorm/is-alphabetical", - "bugs": "https://github.com/wooorm/is-alphabetical/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-alphabetical/readme.md b/node_modules/is-alphabetical/readme.md deleted file mode 100644 index 8c83eb6016..0000000000 --- a/node_modules/is-alphabetical/readme.md +++ /dev/null @@ -1,141 +0,0 @@ -# is-alphabetical - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is alphabetical. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isAlphabetical(character|code)`](#isalphabeticalcharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is ASCII alphabetical: -matching `[a-z]`, case insensitive. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-alphabetical -``` - -In Deno with [Skypack][]: - -```js -import {isAlphabetical} from 'https://cdn.skypack.dev/is-alphabetical@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isAlphabetical} from 'is-alphabetical' - -isAlphabetical('a') // => true -isAlphabetical('B') // => true -isAlphabetical('0') // => false -isAlphabetical('💩') // => false -``` - -## API - -This package exports the following identifier: `isAlphabetical`. -There is no default export. - -### `isAlphabetical(character|code)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is alphabetical. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) -* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) -* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphanumerical) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-alphabetical/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-alphabetical/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphabetical.svg - -[coverage]: https://codecov.io/github/wooorm/is-alphabetical - -[downloads-badge]: https://img.shields.io/npm/dm/is-alphabetical.svg - -[downloads]: https://www.npmjs.com/package/is-alphabetical - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphabetical.svg - -[size]: https://bundlephobia.com/result?p=is-alphabetical - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-alphanumerical/index.d.ts b/node_modules/is-alphanumerical/index.d.ts deleted file mode 100644 index 3fed2bd3fa..0000000000 --- a/node_modules/is-alphanumerical/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is alphanumerical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphanumerical. - */ -export function isAlphanumerical(character: string | number): boolean diff --git a/node_modules/is-alphanumerical/index.js b/node_modules/is-alphanumerical/index.js deleted file mode 100644 index 10188f360d..0000000000 --- a/node_modules/is-alphanumerical/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import {isAlphabetical} from 'is-alphabetical' -import {isDecimal} from 'is-decimal' - -/** - * Check if the given character code, or the character code at the first - * character, is alphanumerical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphanumerical. - */ -export function isAlphanumerical(character) { - return isAlphabetical(character) || isDecimal(character) -} diff --git a/node_modules/is-alphanumerical/license b/node_modules/is-alphanumerical/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-alphanumerical/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphanumerical/package.json b/node_modules/is-alphanumerical/package.json deleted file mode 100644 index 2689af5d07..0000000000 --- a/node_modules/is-alphanumerical/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "is-alphanumerical", - "version": "2.0.1", - "description": "Check if a character is alphanumerical", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "alphabetical", - "numerical", - "alphanumerical" - ], - "repository": "wooorm/is-alphanumerical", - "bugs": "https://github.com/wooorm/is-alphanumerical/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-alphanumerical/readme.md b/node_modules/is-alphanumerical/readme.md deleted file mode 100644 index cacd9a6422..0000000000 --- a/node_modules/is-alphanumerical/readme.md +++ /dev/null @@ -1,142 +0,0 @@ -# is-alphanumerical - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is alphanumerical. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isAlphanumerical(character)`](#isalphanumericalcharacter) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is ASCII alphanumerical: -it matches `[a-zA-Z0-9]`. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-alphanumerical -``` - -In Deno with [Skypack][]: - -```js -import {isAlphanumerical} from 'https://cdn.skypack.dev/is-alphanumerical@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isAlphanumerical} from 'is-alphanumerical' - -isAlphanumerical('a') // => true -isAlphanumerical('Z') // => true -isAlphanumerical('0') // => true -isAlphanumerical(' ') // => false -isAlphanumerical('💩') // => false -``` - -## API - -This package exports the following identifier: `isAlphanumerical`. -There is no default export. - -### `isAlphanumerical(character)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is alphanumerical. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) -* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-alphanumerical/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-alphanumerical/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphanumerical.svg - -[coverage]: https://codecov.io/github/wooorm/is-alphanumerical - -[downloads-badge]: https://img.shields.io/npm/dm/is-alphanumerical.svg - -[downloads]: https://www.npmjs.com/package/is-alphanumerical - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphanumerical.svg - -[size]: https://bundlephobia.com/result?p=is-alphanumerical - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-decimal/index.d.ts b/node_modules/is-decimal/index.d.ts deleted file mode 100644 index 5f162a7145..0000000000 --- a/node_modules/is-decimal/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is decimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is a decimal - */ -export function isDecimal(character: string | number): boolean diff --git a/node_modules/is-decimal/index.js b/node_modules/is-decimal/index.js deleted file mode 100644 index 4fe00ff751..0000000000 --- a/node_modules/is-decimal/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is decimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is a decimal - */ -export function isDecimal(character) { - const code = - typeof character === 'string' ? character.charCodeAt(0) : character - - return code >= 48 && code <= 57 /* 0-9 */ -} diff --git a/node_modules/is-decimal/license b/node_modules/is-decimal/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-decimal/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-decimal/package.json b/node_modules/is-decimal/package.json deleted file mode 100644 index c0a593994b..0000000000 --- a/node_modules/is-decimal/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "is-decimal", - "version": "2.0.1", - "description": "Check if a character is decimal", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "decimal" - ], - "repository": "wooorm/is-decimal", - "bugs": "https://github.com/wooorm/is-decimal/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-decimal/readme.md b/node_modules/is-decimal/readme.md deleted file mode 100644 index 1595537c08..0000000000 --- a/node_modules/is-decimal/readme.md +++ /dev/null @@ -1,139 +0,0 @@ -# is-decimal - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is a decimal. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isDecimal(character|code)`](#isdecimalcharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is an ASCII decimal. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-decimal -``` - -In Deno with [Skypack][]: - -```js -import {isDecimal} from 'https://cdn.skypack.dev/is-decimal@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isDecimal} from 'is-decimal' - -isDecimal('0') // => true -isDecimal('9') // => true -isDecimal('a') // => false -isDecimal('💩') // => false -``` - -## API - -This package exports the following identifiers: `isDecimal`. -There is no default export. - -### `isDecimal(character|code)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is decimal. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-decimal/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-decimal/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-decimal.svg - -[coverage]: https://codecov.io/github/wooorm/is-decimal - -[downloads-badge]: https://img.shields.io/npm/dm/is-decimal.svg - -[downloads]: https://www.npmjs.com/package/is-decimal - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-decimal.svg - -[size]: https://bundlephobia.com/result?p=is-decimal - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-fullwidth-code-point/index.d.ts b/node_modules/is-fullwidth-code-point/index.d.ts deleted file mode 100644 index 729d202051..0000000000 --- a/node_modules/is-fullwidth-code-point/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms). - -@param codePoint - The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. - -@example -``` -import isFullwidthCodePoint from 'is-fullwidth-code-point'; - -isFullwidthCodePoint('谢'.codePointAt(0)); -//=> true - -isFullwidthCodePoint('a'.codePointAt(0)); -//=> false -``` -*/ -export default function isFullwidthCodePoint(codePoint: number): boolean; diff --git a/node_modules/is-fullwidth-code-point/index.js b/node_modules/is-fullwidth-code-point/index.js deleted file mode 100644 index 671f97f760..0000000000 --- a/node_modules/is-fullwidth-code-point/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-disable yoda */ -'use strict'; - -const isFullwidthCodePoint = codePoint => { - if (Number.isNaN(codePoint)) { - return false; - } - - // Code points are derived from: - // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt - if ( - codePoint >= 0x1100 && ( - codePoint <= 0x115F || // Hangul Jamo - codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET - codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET - // CJK Radicals Supplement .. Enclosed CJK Letters and Months - (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || - // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A - (0x3250 <= codePoint && codePoint <= 0x4DBF) || - // CJK Unified Ideographs .. Yi Radicals - (0x4E00 <= codePoint && codePoint <= 0xA4C6) || - // Hangul Jamo Extended-A - (0xA960 <= codePoint && codePoint <= 0xA97C) || - // Hangul Syllables - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - // CJK Compatibility Ideographs - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - // Vertical Forms - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - // CJK Compatibility Forms .. Small Form Variants - (0xFE30 <= codePoint && codePoint <= 0xFE6B) || - // Halfwidth and Fullwidth Forms - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || - // Kana Supplement - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - // Enclosed Ideographic Supplement - (0x1F200 <= codePoint && codePoint <= 0x1F251) || - // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane - (0x20000 <= codePoint && codePoint <= 0x3FFFD) - ) - ) { - return true; - } - - return false; -}; - -module.exports = isFullwidthCodePoint; -module.exports.default = isFullwidthCodePoint; diff --git a/node_modules/is-fullwidth-code-point/license b/node_modules/is-fullwidth-code-point/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/is-fullwidth-code-point/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-fullwidth-code-point/package.json b/node_modules/is-fullwidth-code-point/package.json deleted file mode 100644 index 2137e888fa..0000000000 --- a/node_modules/is-fullwidth-code-point/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "is-fullwidth-code-point", - "version": "3.0.0", - "description": "Check if the character represented by a given Unicode code point is fullwidth", - "license": "MIT", - "repository": "sindresorhus/is-fullwidth-code-point", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd-check" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "fullwidth", - "full-width", - "full", - "width", - "unicode", - "character", - "string", - "codepoint", - "code", - "point", - "is", - "detect", - "check" - ], - "devDependencies": { - "ava": "^1.3.1", - "tsd-check": "^0.5.0", - "xo": "^0.24.0" - } -} diff --git a/node_modules/is-fullwidth-code-point/readme.md b/node_modules/is-fullwidth-code-point/readme.md deleted file mode 100644 index 4236bba980..0000000000 --- a/node_modules/is-fullwidth-code-point/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) - -> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) - - -## Install - -``` -$ npm install is-fullwidth-code-point -``` - - -## Usage - -```js -const isFullwidthCodePoint = require('is-fullwidth-code-point'); - -isFullwidthCodePoint('谢'.codePointAt(0)); -//=> true - -isFullwidthCodePoint('a'.codePointAt(0)); -//=> false -``` - - -## API - -### isFullwidthCodePoint(codePoint) - -#### codePoint - -Type: `number` - -The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/is-hexadecimal/index.d.ts b/node_modules/is-hexadecimal/index.d.ts deleted file mode 100644 index 1199b32aa8..0000000000 --- a/node_modules/is-hexadecimal/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is hexadecimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is hexadecimal - */ -export function isHexadecimal(character: string | number): boolean diff --git a/node_modules/is-hexadecimal/index.js b/node_modules/is-hexadecimal/index.js deleted file mode 100644 index 2eda39fbef..0000000000 --- a/node_modules/is-hexadecimal/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is hexadecimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is hexadecimal - */ -export function isHexadecimal(character) { - const code = - typeof character === 'string' ? character.charCodeAt(0) : character - - return ( - (code >= 97 /* a */ && code <= 102) /* z */ || - (code >= 65 /* A */ && code <= 70) /* Z */ || - (code >= 48 /* A */ && code <= 57) /* Z */ - ) -} diff --git a/node_modules/is-hexadecimal/license b/node_modules/is-hexadecimal/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-hexadecimal/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-hexadecimal/package.json b/node_modules/is-hexadecimal/package.json deleted file mode 100644 index e88ab44727..0000000000 --- a/node_modules/is-hexadecimal/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "is-hexadecimal", - "version": "2.0.1", - "description": "Check if a character is hexadecimal", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "hexadecimal" - ], - "repository": "wooorm/is-hexadecimal", - "bugs": "https://github.com/wooorm/is-hexadecimal/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-hexadecimal/readme.md b/node_modules/is-hexadecimal/readme.md deleted file mode 100644 index a857ecd909..0000000000 --- a/node_modules/is-hexadecimal/readme.md +++ /dev/null @@ -1,141 +0,0 @@ -# is-hexadecimal - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is hexadecimal. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isHexadecimal(character|code)`](#ishexadecimalcharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is a white space character: -whether it matches `[a-f0-9]`, case insensitive. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-hexadecimal -``` - -In Deno with [Skypack][]: - -```js -import {isHexadecimal} from 'https://cdn.skypack.dev/is-hexadecimal@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isHexadecimal} from 'is-hexadecimal' - -isHexadecimal('a') // => true -isHexadecimal('0') // => true -isHexadecimal('G') // => false -isHexadecimal('💩') // => false -``` - -## API - -This package exports the following identifier: `isHexadecimal`. -There is no default export. - -### `isHexadecimal(character|code)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is isHexadecimal. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-hexadecimal/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-hexadecimal/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-hexadecimal.svg - -[coverage]: https://codecov.io/github/wooorm/is-hexadecimal - -[downloads-badge]: https://img.shields.io/npm/dm/is-hexadecimal.svg - -[downloads]: https://www.npmjs.com/package/is-hexadecimal - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-hexadecimal.svg - -[size]: https://bundlephobia.com/result?p=is-hexadecimal - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/isexe/.npmignore b/node_modules/isexe/.npmignore deleted file mode 100644 index c1cb757acf..0000000000 --- a/node_modules/isexe/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.nyc_output/ -coverage/ diff --git a/node_modules/isexe/LICENSE b/node_modules/isexe/LICENSE deleted file mode 100644 index 19129e315f..0000000000 --- a/node_modules/isexe/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/isexe/README.md b/node_modules/isexe/README.md deleted file mode 100644 index 35769e8440..0000000000 --- a/node_modules/isexe/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# isexe - -Minimal module to check if a file is executable, and a normal file. - -Uses `fs.stat` and tests against the `PATHEXT` environment variable on -Windows. - -## USAGE - -```javascript -var isexe = require('isexe') -isexe('some-file-name', function (err, isExe) { - if (err) { - console.error('probably file does not exist or something', err) - } else if (isExe) { - console.error('this thing can be run') - } else { - console.error('cannot be run') - } -}) - -// same thing but synchronous, throws errors -var isExe = isexe.sync('some-file-name') - -// treat errors as just "not executable" -isexe('maybe-missing-file', { ignoreErrors: true }, callback) -var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) -``` - -## API - -### `isexe(path, [options], [callback])` - -Check if the path is executable. If no callback provided, and a -global `Promise` object is available, then a Promise will be returned. - -Will raise whatever errors may be raised by `fs.stat`, unless -`options.ignoreErrors` is set to true. - -### `isexe.sync(path, [options])` - -Same as `isexe` but returns the value and throws any errors raised. - -### Options - -* `ignoreErrors` Treat all errors as "no, this is not executable", but - don't raise them. -* `uid` Number to use as the user id -* `gid` Number to use as the group id -* `pathExt` List of path extensions to use instead of `PATHEXT` - environment variable on Windows. diff --git a/node_modules/isexe/index.js b/node_modules/isexe/index.js deleted file mode 100644 index 553fb32b11..0000000000 --- a/node_modules/isexe/index.js +++ /dev/null @@ -1,57 +0,0 @@ -var fs = require('fs') -var core -if (process.platform === 'win32' || global.TESTING_WINDOWS) { - core = require('./windows.js') -} else { - core = require('./mode.js') -} - -module.exports = isexe -isexe.sync = sync - -function isexe (path, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} - } - - if (!cb) { - if (typeof Promise !== 'function') { - throw new TypeError('callback not provided') - } - - return new Promise(function (resolve, reject) { - isexe(path, options || {}, function (er, is) { - if (er) { - reject(er) - } else { - resolve(is) - } - }) - }) - } - - core(path, options || {}, function (er, is) { - // ignore EACCES because that just means we aren't allowed to run it - if (er) { - if (er.code === 'EACCES' || options && options.ignoreErrors) { - er = null - is = false - } - } - cb(er, is) - }) -} - -function sync (path, options) { - // my kingdom for a filtered catch - try { - return core.sync(path, options || {}) - } catch (er) { - if (options && options.ignoreErrors || er.code === 'EACCES') { - return false - } else { - throw er - } - } -} diff --git a/node_modules/isexe/mode.js b/node_modules/isexe/mode.js deleted file mode 100644 index 1995ea4a06..0000000000 --- a/node_modules/isexe/mode.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = isexe -isexe.sync = sync - -var fs = require('fs') - -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, options)) - }) -} - -function sync (path, options) { - return checkStat(fs.statSync(path), options) -} - -function checkStat (stat, options) { - return stat.isFile() && checkMode(stat, options) -} - -function checkMode (stat, options) { - var mod = stat.mode - var uid = stat.uid - var gid = stat.gid - - var myUid = options.uid !== undefined ? - options.uid : process.getuid && process.getuid() - var myGid = options.gid !== undefined ? - options.gid : process.getgid && process.getgid() - - var u = parseInt('100', 8) - var g = parseInt('010', 8) - var o = parseInt('001', 8) - var ug = u | g - - var ret = (mod & o) || - (mod & g) && gid === myGid || - (mod & u) && uid === myUid || - (mod & ug) && myUid === 0 - - return ret -} diff --git a/node_modules/isexe/package.json b/node_modules/isexe/package.json deleted file mode 100644 index e452689442..0000000000 --- a/node_modules/isexe/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "isexe", - "version": "2.0.0", - "description": "Minimal module to check if a file is executable.", - "main": "index.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "mkdirp": "^0.5.1", - "rimraf": "^2.5.0", - "tap": "^10.3.0" - }, - "scripts": { - "test": "tap test/*.js --100", - "preversion": "npm test", - "postversion": "npm publish", - "postpublish": "git push origin --all; git push origin --tags" - }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/isexe.git" - }, - "keywords": [], - "bugs": { - "url": "https://github.com/isaacs/isexe/issues" - }, - "homepage": "https://github.com/isaacs/isexe#readme" -} diff --git a/node_modules/isexe/test/basic.js b/node_modules/isexe/test/basic.js deleted file mode 100644 index d926df64b9..0000000000 --- a/node_modules/isexe/test/basic.js +++ /dev/null @@ -1,221 +0,0 @@ -var t = require('tap') -var fs = require('fs') -var path = require('path') -var fixture = path.resolve(__dirname, 'fixtures') -var meow = fixture + '/meow.cat' -var mine = fixture + '/mine.cat' -var ours = fixture + '/ours.cat' -var fail = fixture + '/fail.false' -var noent = fixture + '/enoent.exe' -var mkdirp = require('mkdirp') -var rimraf = require('rimraf') - -var isWindows = process.platform === 'win32' -var hasAccess = typeof fs.access === 'function' -var winSkip = isWindows && 'windows' -var accessSkip = !hasAccess && 'no fs.access function' -var hasPromise = typeof Promise === 'function' -var promiseSkip = !hasPromise && 'no global Promise' - -function reset () { - delete require.cache[require.resolve('../')] - return require('../') -} - -t.test('setup fixtures', function (t) { - rimraf.sync(fixture) - mkdirp.sync(fixture) - fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') - fs.chmodSync(meow, parseInt('0755', 8)) - fs.writeFileSync(fail, '#!/usr/bin/env false\n') - fs.chmodSync(fail, parseInt('0644', 8)) - fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') - fs.chmodSync(mine, parseInt('0744', 8)) - fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') - fs.chmodSync(ours, parseInt('0754', 8)) - t.end() -}) - -t.test('promise', { skip: promiseSkip }, function (t) { - var isexe = reset() - t.test('meow async', function (t) { - isexe(meow).then(function (is) { - t.ok(is) - t.end() - }) - }) - t.test('fail async', function (t) { - isexe(fail).then(function (is) { - t.notOk(is) - t.end() - }) - }) - t.test('noent async', function (t) { - isexe(noent).catch(function (er) { - t.ok(er) - t.end() - }) - }) - t.test('noent ignore async', function (t) { - isexe(noent, { ignoreErrors: true }).then(function (is) { - t.notOk(is) - t.end() - }) - }) - t.end() -}) - -t.test('no promise', function (t) { - global.Promise = null - var isexe = reset() - t.throws('try to meow a promise', function () { - isexe(meow) - }) - t.end() -}) - -t.test('access', { skip: accessSkip || winSkip }, function (t) { - runTest(t) -}) - -t.test('mode', { skip: winSkip }, function (t) { - delete fs.access - delete fs.accessSync - var isexe = reset() - t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) - t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) - runTest(t) -}) - -t.test('windows', function (t) { - global.TESTING_WINDOWS = true - var pathExt = '.EXE;.CAT;.CMD;.COM' - t.test('pathExt option', function (t) { - runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) - }) - t.test('pathExt env', function (t) { - process.env.PATHEXT = pathExt - runTest(t) - }) - t.test('no pathExt', function (t) { - // with a pathExt of '', any filename is fine. - // so the "fail" one would still pass. - runTest(t, { pathExt: '', skipFail: true }) - }) - t.test('pathext with empty entry', function (t) { - // with a pathExt of '', any filename is fine. - // so the "fail" one would still pass. - runTest(t, { pathExt: ';' + pathExt, skipFail: true }) - }) - t.end() -}) - -t.test('cleanup', function (t) { - rimraf.sync(fixture) - t.end() -}) - -function runTest (t, options) { - var isexe = reset() - - var optionsIgnore = Object.create(options || {}) - optionsIgnore.ignoreErrors = true - - if (!options || !options.skipFail) { - t.notOk(isexe.sync(fail, options)) - } - t.notOk(isexe.sync(noent, optionsIgnore)) - if (!options) { - t.ok(isexe.sync(meow)) - } else { - t.ok(isexe.sync(meow, options)) - } - - t.ok(isexe.sync(mine, options)) - t.ok(isexe.sync(ours, options)) - t.throws(function () { - isexe.sync(noent, options) - }) - - t.test('meow async', function (t) { - if (!options) { - isexe(meow, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - } else { - isexe(meow, options, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - } - }) - - t.test('mine async', function (t) { - isexe(mine, options, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - }) - - t.test('ours async', function (t) { - isexe(ours, options, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - }) - - if (!options || !options.skipFail) { - t.test('fail async', function (t) { - isexe(fail, options, function (er, is) { - if (er) { - throw er - } - t.notOk(is) - t.end() - }) - }) - } - - t.test('noent async', function (t) { - isexe(noent, options, function (er, is) { - t.ok(er) - t.notOk(is) - t.end() - }) - }) - - t.test('noent ignore async', function (t) { - isexe(noent, optionsIgnore, function (er, is) { - if (er) { - throw er - } - t.notOk(is) - t.end() - }) - }) - - t.test('directory is not executable', function (t) { - isexe(__dirname, options, function (er, is) { - if (er) { - throw er - } - t.notOk(is) - t.end() - }) - }) - - t.end() -} diff --git a/node_modules/isexe/windows.js b/node_modules/isexe/windows.js deleted file mode 100644 index 34996734d8..0000000000 --- a/node_modules/isexe/windows.js +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = isexe -isexe.sync = sync - -var fs = require('fs') - -function checkPathExt (path, options) { - var pathext = options.pathExt !== undefined ? - options.pathExt : process.env.PATHEXT - - if (!pathext) { - return true - } - - pathext = pathext.split(';') - if (pathext.indexOf('') !== -1) { - return true - } - for (var i = 0; i < pathext.length; i++) { - var p = pathext[i].toLowerCase() - if (p && path.substr(-p.length).toLowerCase() === p) { - return true - } - } - return false -} - -function checkStat (stat, path, options) { - if (!stat.isSymbolicLink() && !stat.isFile()) { - return false - } - return checkPathExt(path, options) -} - -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, path, options)) - }) -} - -function sync (path, options) { - return checkStat(fs.statSync(path), path, options) -} diff --git a/node_modules/jackspeak/LICENSE.md b/node_modules/jackspeak/LICENSE.md deleted file mode 100644 index 8cb5cc6e61..0000000000 --- a/node_modules/jackspeak/LICENSE.md +++ /dev/null @@ -1,55 +0,0 @@ -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. - -## Notices - -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. - -## Excuse - -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. - -## Patent - -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. - -## Reliability - -No contributor can revoke this license. - -## No Liability - -**_As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim._** diff --git a/node_modules/jackspeak/README.md b/node_modules/jackspeak/README.md deleted file mode 100644 index 4ffea4b321..0000000000 --- a/node_modules/jackspeak/README.md +++ /dev/null @@ -1,357 +0,0 @@ -# jackspeak - -A very strict and proper argument parser. - -Validate string, boolean, and number options, from the command -line and the environment. - -Call the `jack` method with a config object, and then chain -methods off of it. - -At the end, call the `.parse()` method, and you'll get an object -with `positionals` and `values` members. - -Any unrecognized configs or invalid values will throw an error. - -As long as you define configs using object literals, types will -be properly inferred and TypeScript will know what kinds of -things you got. - -If you give it a prefix for environment variables, then defaults -will be read from the environment, and parsed values written back -to it, so you can easily pass configs through to child processes. - -Automatically generates a `usage`/`help` banner by calling the -`.usage()` method. - -Unless otherwise noted, all methods return the object itself. - -## USAGE - -```js -import { jack } from 'jackspeak' -// this works too: -// const { jack } = require('jackspeak') - -const { positionals, values } = jack({ envPrefix: 'FOO' }) - .flag({ - asdf: { description: 'sets the asfd flag', short: 'a', default: true }, - 'no-asdf': { description: 'unsets the asdf flag', short: 'A' }, - foo: { description: 'another boolean', short: 'f' }, - }) - .optList({ - 'ip-addrs': { - description: 'addresses to ip things', - delim: ',', // defaults to '\n' - default: ['127.0.0.1'], - }, - }) - .parse([ - 'some', - 'positional', - '--ip-addrs', - '192.168.0.1', - '--ip-addrs', - '1.1.1.1', - 'args', - '--foo', // sets the foo flag - '-A', // short for --no-asdf, sets asdf flag to false - ]) - -console.log(process.env.FOO_ASDF) // '0' -console.log(process.env.FOO_FOO) // '1' -console.log(values) // { -// 'ip-addrs': ['192.168.0.1', '1.1.1.1'], -// foo: true, -// asdf: false, -// } -console.log(process.env.FOO_IP_ADDRS) // '192.168.0.1,1.1.1.1' -console.log(positionals) // ['some', 'positional', 'args'] -``` - -## `jack(options: JackOptions = {}) => Jack` - -Returns a `Jack` object that can be used to chain and add -field definitions. The other methods (apart from `validate()`, -`parse()`, and `usage()` obviously) return the same Jack object, -updated with the new types, so they can be chained together as -shown in the code examples. - -Options: - -- `allowPositionals` Defaults to true. Set to `false` to not - allow any positional arguments. - -- `envPrefix` Set to a string to write configs to and read - configs from the environment. For example, if set to `MY_APP` - then the `foo-bar` config will default based on the value of - `env.MY_APP_FOO_BAR` and will write back to that when parsed. - - Boolean values are written as `'1'` and `'0'`, and will be - treated as `true` if they're `'1'` or false otherwise. - - Number values are written with their `toString()` - representation. - - Strings are just strings. - - Any value with `multiple: true` will be represented in the - environment split by a delimiter, which defaults to `\n`. - -- `env` The place to read/write environment variables. Defaults - to `process.env`. - -- `usage` A short usage string to print at the top of the help - banner. - -- `stopAtPositional` Boolean, default false. Stop parsing opts - and flags at the first positional argument. This is useful if - you want to pass certain options to subcommands, like some - programs do, so you can stop parsing and pass the positionals - to the subcommand to parse. - -- `stopAtPositionalTest` Conditional `stopAtPositional`. Provide - a function that takes a positional argument string and returns - boolean. If it returns `true`, then parsing will stop. Useful - when _some_ subcommands should parse the rest of the command - line options, and others should not. - -### `Jack.heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6)` - -Define a short string heading, used in the `usage()` output. - -Indentation of the heading and subsequent description/config -usage entries (up until the next heading) is set by the heading -level. - -If the first usage item defined is a heading, it is always -treated as level 1, regardless of the argument provided. - -Headings level 1 and 2 will have a line of padding underneath -them. Headings level 3 through 6 will not. - -### `Jack.description(text: string, { pre?: boolean } = {})` - -Define a long string description, used in the `usage()` output. - -If the `pre` option is set to `true`, then whitespace will not be -normalized. However, if any line is too long for the width -allotted, it will still be wrapped. - -## Option Definitions - -Configs are defined by calling the appropriate field definition -method with an object where the keys are the long option name, -and the value defines the config. - -Options: - -- `type` Only needed for the `addFields` method, as the others - set it implicitly. Can be `'string'`, `'boolean'`, or - `'number'`. -- `multiple` Only needed for the `addFields` method, as the - others set it implicitly. Set to `true` to define an array - type. This means that it can be set on the CLI multiple times, - set as an array in the `values` - and it is represented in the environment as a delimited string. -- `short` A one-character shorthand for the option. -- `description` Some words to describe what this option is and - why you'd set it. -- `hint` (Only relevant for non-boolean types) The thing to show - in the usage output, like `--option=` -- `validate` A function that returns false (or throws) if an - option value is invalid. -- `validOptions` An array of strings or numbers that define the - valid values that can be set. This is not allowed on `boolean` - (flag) options. May be used along with a `validate()` method. -- `default` A default value for the field. Note that this may be - overridden by an environment variable, if present. - -### `Jack.flag({ [option: string]: definition, ... })` - -Define one or more boolean fields. - -Boolean options may be set to `false` by using a -`--no-${optionName}` argument, which will be implicitly created -if it's not defined to be something else. - -If a boolean option named `no-${optionName}` with the same -`multiple` setting is in the configuration, then that will be -treated as a negating flag. - -### `Jack.flagList({ [option: string]: definition, ... })` - -Define one or more boolean array fields. - -### `Jack.num({ [option: string]: definition, ... })` - -Define one or more number fields. These will be set in the -environment as a stringified number, and included in the `values` -object as a number. - -### `Jack.numList({ [option: string]: definition, ... })` - -Define one or more number list fields. These will be set in the -environment as a delimited set of stringified numbers, and -included in the `values` as a number array. - -### `Jack.opt({ [option: string]: definition, ... })` - -Define one or more string option fields. - -### `Jack.optList({ [option: string]: definition, ... })` - -Define one or more string list fields. - -### `Jack.addFields({ [option: string]: definition, ... })` - -Define one or more fields of any type. Note that `type` and -`multiple` must be set explicitly on each definition when using -this method. - -## Actions - -Use these methods on a Jack object that's already had its config -fields defined. - -### `Jack.parse(args: string[] = process.argv): { positionals: string[], values: OptionsResults }` - -Parse the arguments list, write to the environment if `envPrefix` -is set, and returned the parsed values and remaining positional -arguments. - -### `Jack.validate(o: any): asserts o is OptionsResults` - -Throws an error if the object provided is not a valid result set, -for the configurations defined thusfar. - -### `Jack.usage(): string` - -Returns the compiled `usage` string, with all option descriptions -and heading/description text, wrapped to the appropriate width -for the terminal. - -### `Jack.setConfigValues(options: OptionsResults, src?: string)` - -Validate the `options` argument, and set the default value for -each field that appears in the options. - -Values provided will be overridden by environment variables or -command line arguments. - -### `Jack.usageMarkdown(): string` - -Returns the compiled `usage` string, with all option descriptions -and heading/description text, but as markdown instead of -formatted for a terminal, for generating HTML documentation for -your CLI. - -## Some Example Code - -Also see [the examples -folder](https://github.com/isaacs/jackspeak/tree/master/examples) - -```js -import { jack } from 'jackspeak' - -const j = jack({ - // Optional - // This will be auto-generated from the descriptions if not supplied - // top level usage line, printed by -h - // will be auto-generated if not specified - usage: 'foo [options] ', -}) - .heading('The best Foo that ever Fooed') - .description( - ` - Executes all the files and interprets their output as - TAP formatted test result data. - - To parse TAP data from stdin, specify "-" as a filename. - `, - ) - - // flags don't take a value, they're boolean on or off, and can be - // turned off by prefixing with `--no-` - // so this adds support for -b to mean --bail, or -B to mean --no-bail - .flag({ - flag: { - // specify a short value if you like. this must be a single char - short: 'f', - // description is optional as well. - description: `Make the flags wave`, - // default value for flags is 'false', unless you change it - default: true, - }, - 'no-flag': { - // you can can always negate a flag with `--no-flag` - // specifying a negate option will let you define a short - // single-char option for negation. - short: 'F', - description: `Do not wave the flags`, - }, - }) - - // Options that take a value are specified with `opt()` - .opt({ - reporter: { - short: 'R', - description: 'the style of report to display', - }, - }) - - // if you want a number, say so, and jackspeak will enforce it - .num({ - jobs: { - short: 'j', - description: 'how many jobs to run in parallel', - default: 1, - }, - }) - - // A list is an option that can be specified multiple times, - // to expand into an array of all the settings. Normal opts - // will just give you the last value specified. - .optList({ - 'node-arg': {}, - }) - - // a flagList is an array of booleans, so `-ddd` is [true, true, true] - // count the `true` values to treat it as a counter. - .flagList({ - debug: { short: 'd' }, - }) - - // opts take a value, and is set to the string in the results - // you can combine multiple short-form flags together, but - // an opt will end the combine chain, posix-style. So, - // -bofilename would be like --bail --output-file=filename - .opt({ - 'output-file': { - short: 'o', - // optional: make it -o in the help output insead of -o - hint: 'file', - description: `Send the raw output to the specified file.`, - }, - }) - -// now we can parse argv like this: -const { values, positionals } = j.parse(process.argv) - -// or decide to show the usage banner -console.log(j.usage()) - -// or validate an object config we got from somewhere else -try { - j.validate(someConfig) -} catch (er) { - console.error('someConfig is not valid!', er) -} -``` - -## Name - -The inspiration for this module is [yargs](http://npm.im/yargs), which -is pirate talk themed. Yargs has all the features, and is infinitely -flexible. "Jackspeak" is the slang of the royal navy. This module -does not have all the features. It is declarative and rigid by design. diff --git a/node_modules/jackspeak/package.json b/node_modules/jackspeak/package.json deleted file mode 100644 index 51eaabdf35..0000000000 --- a/node_modules/jackspeak/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "name": "jackspeak", - "publishConfig": { - "tag": "v3-legacy" - }, - "version": "3.4.3", - "description": "A very strict and proper argument parser.", - "tshy": { - "main": true, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.js" - } - }, - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "type": "module", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "build-examples": "for i in examples/*.js ; do node $i -h > ${i/.js/.txt}; done", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" - }, - "license": "BlueOak-1.0.0", - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "devDependencies": { - "@types/node": "^20.7.0", - "@types/pkgjs__parseargs": "^0.10.1", - "prettier": "^3.2.5", - "tap": "^18.8.0", - "tshy": "^1.14.0", - "typedoc": "^0.25.1", - "typescript": "^5.2.2" - }, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/jackspeak.git" - }, - "keywords": [ - "argument", - "parser", - "args", - "option", - "flag", - "cli", - "command", - "line", - "parse", - "parsing" - ], - "author": "Isaac Z. Schlueter ", - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } -} diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md deleted file mode 100644 index ff2375e055..0000000000 --- a/node_modules/js-yaml/CHANGELOG.md +++ /dev/null @@ -1,616 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - - -## [4.1.0] - 2021-04-15 -### Added -- Types are now exported as `yaml.types.XXX`. -- Every type now has `options` property with original arguments kept as they were - (see `yaml.types.int.options` as an example). - -### Changed -- `Schema.extend()` now keeps old type order in case of conflicts - (e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`). - - -## [4.0.0] - 2021-01-03 -### Changed -- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes. -- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are - moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package. -- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump` - instead which are all now safe by default. -- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use - `yaml.DEFAULT_SCHEMA` instead. -- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead. -- `!!binary` now always mapped to `Uint8Array` on load. -- Reduced nesting of `/lib` folder. -- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal, - `0o1234` is octal, `1:23` is parsed as string instead of base60). -- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557. -- Line and column in exceptions are now formatted as `(X:Y)` instead of - `at line X, column Y` (also present in compact format), #332. -- Code snippet created in exceptions now contains multiple lines with line numbers. -- `dump()` now serializes `undefined` as `null` in collections and removes keys with - `undefined` in mappings, #571. -- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null. -- Custom tags starting with `!` are now dumped as `!tag` instead of `!`, #576. -- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258. - -### Added -- Added `.mjs` (es modules) support. -- Added `quotingType` and `forceQuotes` options for dumper to configure - string literal style, #290, #529. -- Added `styles: { '!!null': 'empty' }` option for dumper - (serializes `{ foo: null }` as "`foo: `"), #570. -- Added `replacer` option (similar to option in JSON.stringify), #339. -- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385. - -### Fixed -- Astral characters are no longer encoded by `dump()`, #587. -- "duplicate mapping key" exception now points at the correct column, #452. -- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception - instead of producing null, #321. -- `__proto__` key no longer overrides object prototype, #164. -- Removed `bower.json`. -- Tags are now url-decoded in `load()` and url-encoded in `dump()` - (previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed). -- Anchors now work correctly with empty nodes, #301. -- Fix incorrect parsing of invalid block mapping syntax, #418. -- Throw an error if block sequence/mapping indent contains a tab, #80. - - -## [3.14.1] - 2020-12-07 -### Security -- Fix possible code execution in (already unsafe) `.load()` (in &anchor). - - -## [3.14.0] - 2020-05-22 -### Changed -- Support `safe/loadAll(input, options)` variant of call. -- CI: drop outdated nodejs versions. -- Dev deps bump. - -### Fixed -- Quote `=` in plain scalars #519. -- Check the node type for `!` tag in case user manually specifies it. -- Verify that there are no null-bytes in input. -- Fix wrong quote position when writing condensed flow, #526. - - -## [3.13.1] - 2019-04-05 -### Security -- Fix possible code execution in (already unsafe) `.load()`, #480. - - -## [3.13.0] - 2019-03-20 -### Security -- Security fix: `safeLoad()` can hang when arrays with nested refs - used as key. Now throws exception for nested arrays. #475. - - -## [3.12.2] - 2019-02-26 -### Fixed -- Fix `noArrayIndent` option for root level, #468. - - -## [3.12.1] - 2019-01-05 -### Added -- Added `noArrayIndent` option, #432. - - -## [3.12.0] - 2018-06-02 -### Changed -- Support arrow functions without a block statement, #421. - - -## [3.11.0] - 2018-03-05 -### Added -- Add arrow functions suport for `!!js/function`. - -### Fixed -- Fix dump in bin/octal/hex formats for negative integers, #399. - - -## [3.10.0] - 2017-09-10 -### Fixed -- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. -- Dump astrals as codepoints instead of surrogate pair, #368. - - -## [3.9.1] - 2017-07-08 -### Fixed -- Ensure stack is present for custom errors in node 7.+, #351. - - -## [3.9.0] - 2017-07-08 -### Added -- Add `condenseFlow` option (to create pretty URL query params), #346. - -### Fixed -- Support array return from safeLoadAll/loadAll, #350. - - -## [3.8.4] - 2017-05-08 -### Fixed -- Dumper: prevent space after dash for arrays that wrap, #343. - - -## [3.8.3] - 2017-04-05 -### Fixed -- Should not allow numbers to begin and end with underscore, #335. - - -## [3.8.2] - 2017-03-02 -### Fixed -- Fix `!!float 123` (integers) parse, #333. -- Don't allow leading zeros in floats (except 0, 0.xxx). -- Allow positive exponent without sign in floats. - - -## [3.8.1] - 2017-02-07 -### Changed -- Maintenance: update browserified build. - - -## [3.8.0] - 2017-02-07 -### Fixed -- Fix reported position for `duplicated mapping key` errors. - Now points to block start instead of block end. - (#243, thanks to @shockey). - - -## [3.7.0] - 2016-11-12 -### Added -- Support polymorphism for tags (#300, thanks to @monken). - -### Fixed -- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). - - -## [3.6.1] - 2016-05-11 -### Fixed -- Fix output cut on a pipe, #286. - - -## [3.6.0] - 2016-04-16 -### Fixed -- Dumper rewrite, fix multiple bugs with trailing `\n`. - Big thanks to @aepsilon! -- Loader: fix leading/trailing newlines in block scalars, @aepsilon. - - -## [3.5.5] - 2016-03-17 -### Fixed -- Date parse fix: don't allow dates with on digit in month and day, #268. - - -## [3.5.4] - 2016-03-09 -### Added -- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. - - -## [3.5.3] - 2016-02-11 -### Changed -- Maintenance release. - - -## [3.5.2] - 2016-01-11 -### Changed -- Maintenance: missed comma in bower config. - - -## [3.5.1] - 2016-01-11 -### Changed -- Removed `inherit` dependency, #239. -- Better browserify workaround for esprima load. -- Demo rewrite. - - -## [3.5.0] - 2016-01-10 -### Fixed -- Dumper. Fold strings only, #217. -- Dumper. `norefs` option, to clone linked objects, #229. -- Loader. Throw a warning for duplicate keys, #166. -- Improved browserify support (mark `esprima` & `Buffer` excluded). - - -## [3.4.6] - 2015-11-26 -### Changed -- Use standalone `inherit` to keep browserified files clear. - - -## [3.4.5] - 2015-11-23 -### Added -- Added `lineWidth` option to dumper. - - -## [3.4.4] - 2015-11-21 -### Fixed -- Fixed floats dump (missed dot for scientific format), #220. -- Allow non-printable characters inside quoted scalars, #192. - - -## [3.4.3] - 2015-10-10 -### Changed -- Maintenance release - deps bump (esprima, argparse). - - -## [3.4.2] - 2015-09-09 -### Fixed -- Fixed serialization of duplicated entries in sequences, #205. - Thanks to @vogelsgesang. - - -## [3.4.1] - 2015-09-05 -### Fixed -- Fixed stacktrace handling in generated errors, for browsers (FF/IE). - - -## [3.4.0] - 2015-08-23 -### Changed -- Don't throw on warnings anymore. Use `onWarning` option to catch. -- Throw error on unknown tags (was warning before). -- Reworked internals of error class. - -### Fixed -- Fixed multiline keys dump, #197. Thanks to @tcr. -- Fixed heading line breaks in some scalars (regression). - - -## [3.3.1] - 2015-05-13 -### Added -- Added `.sortKeys` dumper option, thanks to @rjmunro. - -### Fixed -- Fixed astral characters support, #191. - - -## [3.3.0] - 2015-04-26 -### Changed -- Significantly improved long strings formatting in dumper, thanks to @isaacs. -- Strip BOM if exists. - - -## [3.2.7] - 2015-02-19 -### Changed -- Maintenance release. -- Updated dependencies. -- HISTORY.md -> CHANGELOG.md - - -## [3.2.6] - 2015-02-07 -### Fixed -- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). -- Fixed demo dates dump (#113, thanks to @Hypercubed). - - -## [3.2.5] - 2014-12-28 -### Fixed -- Fixed resolving of all built-in types on empty nodes. -- Fixed invalid warning on empty lines within quoted scalars and flow collections. -- Fixed bug: Tag on an empty node didn't resolve in some cases. - - -## [3.2.4] - 2014-12-19 -### Fixed -- Fixed resolving of !!null tag on an empty node. - - -## [3.2.3] - 2014-11-08 -### Fixed -- Implemented dumping of objects with circular and cross references. -- Partially fixed aliasing of constructed objects. (see issue #141 for details) - - -## [3.2.2] - 2014-09-07 -### Fixed -- Fixed infinite loop on unindented block scalars. -- Rewritten base64 encode/decode in binary type, to keep code licence clear. - - -## [3.2.1] - 2014-08-24 -### Fixed -- Nothig new. Just fix npm publish error. - - -## [3.2.0] - 2014-08-24 -### Added -- Added input piping support to CLI. - -### Fixed -- Fixed typo, that could cause hand on initial indent (#139). - - -## [3.1.0] - 2014-07-07 -### Changed -- 1.5x-2x speed boost. -- Removed deprecated `require('xxx.yml')` support. -- Significant code cleanup and refactoring. -- Internal API changed. If you used custom types - see updated examples. - Others are not affected. -- Even if the input string has no trailing line break character, - it will be parsed as if it has one. -- Added benchmark scripts. -- Moved bower files to /dist folder -- Bugfixes. - - -## [3.0.2] - 2014-02-27 -### Fixed -- Fixed bug: "constructor" string parsed as `null`. - - -## [3.0.1] - 2013-12-22 -### Fixed -- Fixed parsing of literal scalars. (issue #108) -- Prevented adding unnecessary spaces in object dumps. (issue #68) -- Fixed dumping of objects with very long (> 1024 in length) keys. - - -## [3.0.0] - 2013-12-16 -### Changed -- Refactored code. Changed API for custom types. -- Removed output colors in CLI, dump json by default. -- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser -- AMD support. -- Don't quote dumped strings because of `-` & `?` (if not first char). -- __Deprecated__ loading yaml files via `require()`, as not recommended - behaviour for node. - - -## [2.1.3] - 2013-10-16 -### Fixed -- Fix wrong loading of empty block scalars. - - -## [2.1.2] - 2013-10-07 -### Fixed -- Fix unwanted line breaks in folded scalars. - - -## [2.1.1] - 2013-10-02 -### Fixed -- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 -- Fixed reader bug in JSON-like sequences/mappings. - - -## [2.1.0] - 2013-06-05 -### Added -- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), - JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). -- Add `skipInvalid` dumper option. - -### Changed -- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` - and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. -- Use `safeLoad` for `require` extension. - -### Fixed -- Bug fix: export `NIL` constant from the public interface. - - -## [2.0.5] - 2013-04-26 -### Security -- Close security issue in !!js/function constructor. - Big thanks to @nealpoole for security audit. - - -## [2.0.4] - 2013-04-08 -### Changed -- Updated .npmignore to reduce package size - - -## [2.0.3] - 2013-02-26 -### Fixed -- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) - - -## [2.0.2] - 2013-02-15 -### Fixed -- Fixed input validation: tabs are printable characters. - - -## [2.0.1] - 2013-02-09 -### Fixed -- Fixed error, when options not passed to function cass - - -## [2.0.0] - 2013-02-09 -### Changed -- Full rewrite. New architecture. Fast one-stage parsing. -- Changed custom types API. -- Added YAML dumper. - - -## [1.0.3] - 2012-11-05 -### Fixed -- Fixed utf-8 files loading. - - -## [1.0.2] - 2012-08-02 -### Fixed -- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. -- Fix timstamps incorectly parsed in local time when no time part specified. - - -## [1.0.1] - 2012-07-07 -### Fixed -- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. -- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. - - -## [1.0.0] - 2012-07-01 -### Changed -- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. - Fixes #42. -- `require(filename)` now returns a single document and throws an Error if - file contains more than one document. -- CLI was merged back from js-yaml.bin - - -## [0.3.7] - 2012-02-28 -### Fixed -- Fix export of `addConstructor()`. Closes #39. - - -## [0.3.6] - 2012-02-22 -### Changed -- Removed AMD parts - too buggy to use. Need help to rewrite from scratch - -### Fixed -- Removed YUI compressor warning (renamed `double` variable). Closes #40. - - -## [0.3.5] - 2012-01-10 -### Fixed -- Workagound for .npmignore fuckup under windows. Thanks to airportyh. - - -## [0.3.4] - 2011-12-24 -### Fixed -- Fixes str[] for oldIEs support. -- Adds better has change support for browserified demo. -- improves compact output of Error. Closes #33. - - -## [0.3.3] - 2011-12-20 -### Added -- adds `compact` stringification of Errors. - -### Changed -- jsyaml executable moved to separate module. - - -## [0.3.2] - 2011-12-16 -### Added -- Added jsyaml executable. -- Added !!js/function support. Closes #12. - -### Fixed -- Fixes ug with block style scalars. Closes #26. -- All sources are passing JSLint now. -- Fixes bug in Safari. Closes #28. -- Fixes bug in Opers. Closes #29. -- Improves browser support. Closes #20. - - -## [0.3.1] - 2011-11-18 -### Added -- Added AMD support for browserified version. -- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. -- Added !!js/regexp and !!js/undefined types. Partially solves #12. - -### Changed -- Wrapped browserified js-yaml into closure. - -### Fixed -- Fixed the resolvement of non-specific tags. Closes #17. -- Fixed !!set mapping. -- Fixed month parse in dates. Closes #19. - - -## [0.3.0] - 2011-11-09 -### Added -- Added browserified version. Closes #13. -- Added live demo of browserified version. -- Ported some of the PyYAML tests. See #14. - -### Fixed -- Removed JS.Class dependency. Closes #3. -- Fixed timestamp bug when fraction was given. - - -## [0.2.2] - 2011-11-06 -### Fixed -- Fixed crash on docs without ---. Closes #8. -- Fixed multiline string parse -- Fixed tests/comments for using array as key - - -## [0.2.1] - 2011-11-02 -### Fixed -- Fixed short file read (<4k). Closes #9. - - -## [0.2.0] - 2011-11-02 -### Changed -- First public release - - -[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0 -[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0 -[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 -[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 -[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 -[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 -[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 -[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 -[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 -[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 -[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 -[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 -[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 -[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 -[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 -[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 -[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 -[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 -[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 -[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 -[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 -[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 -[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 -[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 -[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 -[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 -[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 -[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 -[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 -[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 -[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 -[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 -[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 -[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 -[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 -[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 -[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 -[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 -[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 -[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 -[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 -[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 -[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 -[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 -[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 -[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 -[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 -[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 -[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 -[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 -[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 -[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 -[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 -[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 -[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 -[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 -[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 -[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 -[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 -[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 -[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 -[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 -[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 -[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 -[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 -[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 -[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 -[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 -[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 -[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 -[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE deleted file mode 100644 index 09d3a29e93..0000000000 --- a/node_modules/js-yaml/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/js-yaml/README.md b/node_modules/js-yaml/README.md deleted file mode 100644 index 3cbc4bd2dd..0000000000 --- a/node_modules/js-yaml/README.md +++ /dev/null @@ -1,246 +0,0 @@ -JS-YAML - YAML 1.2 parser / writer for JavaScript -================================================= - -[![CI](https://github.com/nodeca/js-yaml/workflows/CI/badge.svg?branch=master)](https://github.com/nodeca/js-yaml/actions) -[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) - -__[Online Demo](http://nodeca.github.com/js-yaml/)__ - - -This is an implementation of [YAML](http://yaml.org/), a human-friendly data -serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was -completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. - - -Installation ------------- - -### YAML module for node.js - -``` -npm install js-yaml -``` - - -### CLI executable - -If you want to inspect your YAML files from CLI, install js-yaml globally: - -``` -npm install -g js-yaml -``` - -#### Usage - -``` -usage: js-yaml [-h] [-v] [-c] [-t] file - -Positional arguments: - file File with YAML document(s) - -Optional arguments: - -h, --help Show this help message and exit. - -v, --version Show program's version number and exit. - -c, --compact Display errors in compact mode - -t, --trace Show stack trace on error -``` - - -API ---- - -Here we cover the most 'useful' methods. If you need advanced details (creating -your own tags), see [examples](https://github.com/nodeca/js-yaml/tree/master/examples) -for more info. - -``` javascript -const yaml = require('js-yaml'); -const fs = require('fs'); - -// Get document, or throw exception on error -try { - const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8')); - console.log(doc); -} catch (e) { - console.log(e); -} -``` - - -### load (string [ , options ]) - -Parses `string` as single YAML document. Returns either a -plain object, a string, a number, `null` or `undefined`, or throws `YAMLException` on error. By default, does -not support regexps, functions and undefined. - -options: - -- `filename` _(default: null)_ - string to be used as a file path in - error/warning messages. -- `onWarning` _(default: null)_ - function to call on warning messages. - Loader will call this function with an instance of `YAMLException` for each warning. -- `schema` _(default: `DEFAULT_SCHEMA`)_ - specifies a schema to use. - - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: - http://www.yaml.org/spec/1.2/spec.html#id2802346 - - `JSON_SCHEMA` - all JSON-supported types: - http://www.yaml.org/spec/1.2/spec.html#id2803231 - - `CORE_SCHEMA` - same as `JSON_SCHEMA`: - http://www.yaml.org/spec/1.2/spec.html#id2804923 - - `DEFAULT_SCHEMA` - all supported YAML types. -- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. - -NOTE: This function **does not** understand multi-document sources, it throws -exception on those. - -NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. -So, the JSON schema is not as strictly defined in the YAML specification. -It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. -The core schema also has no such restrictions. It allows binary notation for integers. - - -### loadAll (string [, iterator] [, options ]) - -Same as `load()`, but understands multi-document sources. Applies -`iterator` to each document if specified, or returns array of documents. - -``` javascript -const yaml = require('js-yaml'); - -yaml.loadAll(data, function (doc) { - console.log(doc); -}); -``` - - -### dump (object [ , options ]) - -Serializes `object` as a YAML document. Uses `DEFAULT_SCHEMA`, so it will -throw an exception if you try to dump regexps or functions. However, you can -disable exceptions by setting the `skipInvalid` option to `true`. - -options: - -- `indent` _(default: 2)_ - indentation width to use (in spaces). -- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements -- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function - in the safe schema) and skip pairs and single values with such types. -- `flowLevel` _(default: -1)_ - specifies level of nesting, when to switch from - block to flow style for collections. -1 means block style everwhere -- `styles` - "tag" => "style" map. Each tag may have own set of styles. -- `schema` _(default: `DEFAULT_SCHEMA`)_ specifies a schema to use. -- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a - function, use the function to sort the keys. -- `lineWidth` _(default: `80`)_ - set max line width. Set `-1` for unlimited width. -- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references -- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older - yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 -- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. -- `quotingType` _(`'` or `"`, default: `'`)_ - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. -- `forceQuotes` _(default: `false`)_ - if `true`, all non-key strings will be quoted even if they normally don't need to. -- `replacer` - callback `function (key, value)` called recursively on each key/value in source object (see `replacer` docs for `JSON.stringify`). - -The following table show availlable styles (e.g. "canonical", -"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml -output is shown on the right side after `=>` (default setting) or `->`: - -``` none -!!null - "canonical" -> "~" - "lowercase" => "null" - "uppercase" -> "NULL" - "camelcase" -> "Null" - -!!int - "binary" -> "0b1", "0b101010", "0b1110001111010" - "octal" -> "0o1", "0o52", "0o16172" - "decimal" => "1", "42", "7290" - "hexadecimal" -> "0x1", "0x2A", "0x1C7A" - -!!bool - "lowercase" => "true", "false" - "uppercase" -> "TRUE", "FALSE" - "camelcase" -> "True", "False" - -!!float - "lowercase" => ".nan", '.inf' - "uppercase" -> ".NAN", '.INF' - "camelcase" -> ".NaN", '.Inf' -``` - -Example: - -``` javascript -dump(object, { - 'styles': { - '!!null': 'canonical' // dump null as ~ - }, - 'sortKeys': true // sort object keys -}); -``` - -Supported YAML types --------------------- - -The list of standard YAML tags and corresponding JavaScript types. See also -[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and -[YAML types repository](http://yaml.org/type/). - -``` -!!null '' # null -!!bool 'yes' # bool -!!int '3...' # number -!!float '3.14...' # number -!!binary '...base64...' # buffer -!!timestamp 'YYYY-...' # date -!!omap [ ... ] # array of key-value pairs -!!pairs [ ... ] # array or array pairs -!!set { ... } # array of objects with given keys and null values -!!str '...' # string -!!seq [ ... ] # array -!!map { ... } # object -``` - -**JavaScript-specific tags** - -See [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) for -extra types. - - -Caveats -------- - -Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects -or arrays as keys, and stringifies (by calling `toString()` method) them at the -moment of adding them. - -``` yaml ---- -? [ foo, bar ] -: - baz -? { foo: bar } -: - baz - - baz -``` - -``` javascript -{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } -``` - -Also, reading of properties on implicit block mapping keys is not supported yet. -So, the following YAML document cannot be loaded. - -``` yaml -&anchor foo: - foo: bar - *anchor: duplicate key - baz: bat - *anchor: duplicate key -``` - - -js-yaml for enterprise ----------------------- - -Available as part of the Tidelift Subscription - -The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/js-yaml/index.js b/node_modules/js-yaml/index.js deleted file mode 100644 index bcb7eba7ad..0000000000 --- a/node_modules/js-yaml/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - - -var loader = require('./lib/loader'); -var dumper = require('./lib/dumper'); - - -function renamed(from, to) { - return function () { - throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + - 'Use yaml.' + to + ' instead, which is now safe by default.'); - }; -} - - -module.exports.Type = require('./lib/type'); -module.exports.Schema = require('./lib/schema'); -module.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe'); -module.exports.JSON_SCHEMA = require('./lib/schema/json'); -module.exports.CORE_SCHEMA = require('./lib/schema/core'); -module.exports.DEFAULT_SCHEMA = require('./lib/schema/default'); -module.exports.load = loader.load; -module.exports.loadAll = loader.loadAll; -module.exports.dump = dumper.dump; -module.exports.YAMLException = require('./lib/exception'); - -// Re-export all types in case user wants to create custom schema -module.exports.types = { - binary: require('./lib/type/binary'), - float: require('./lib/type/float'), - map: require('./lib/type/map'), - null: require('./lib/type/null'), - pairs: require('./lib/type/pairs'), - set: require('./lib/type/set'), - timestamp: require('./lib/type/timestamp'), - bool: require('./lib/type/bool'), - int: require('./lib/type/int'), - merge: require('./lib/type/merge'), - omap: require('./lib/type/omap'), - seq: require('./lib/type/seq'), - str: require('./lib/type/str') -}; - -// Removed functions from JS-YAML 3.0.x -module.exports.safeLoad = renamed('safeLoad', 'load'); -module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); -module.exports.safeDump = renamed('safeDump', 'dump'); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json deleted file mode 100644 index 17574da805..0000000000 --- a/node_modules/js-yaml/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "js-yaml", - "version": "4.1.0", - "description": "YAML 1.2 parser and serializer", - "keywords": [ - "yaml", - "parser", - "serializer", - "pyyaml" - ], - "author": "Vladimir Zapparov ", - "contributors": [ - "Aleksey V Zapparov (http://www.ixti.net/)", - "Vitaly Puzrin (https://github.com/puzrin)", - "Martin Grenfell (http://got-ravings.blogspot.com)" - ], - "license": "MIT", - "repository": "nodeca/js-yaml", - "files": [ - "index.js", - "lib/", - "bin/", - "dist/" - ], - "bin": { - "js-yaml": "bin/js-yaml.js" - }, - "module": "./dist/js-yaml.mjs", - "exports": { - ".": { - "import": "./dist/js-yaml.mjs", - "require": "./index.js" - }, - "./package.json": "./package.json" - }, - "scripts": { - "lint": "eslint .", - "test": "npm run lint && mocha", - "coverage": "npm run lint && nyc mocha && nyc report --reporter html", - "demo": "npm run lint && node support/build_demo.js", - "gh-demo": "npm run demo && gh-pages -d demo -f", - "browserify": "rollup -c support/rollup.config.js", - "prepublishOnly": "npm run gh-demo" - }, - "unpkg": "dist/js-yaml.min.js", - "jsdelivr": "dist/js-yaml.min.js", - "dependencies": { - "argparse": "^2.0.1" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.0.0", - "ansi": "^0.3.1", - "benchmark": "^2.1.4", - "codemirror": "^5.13.4", - "eslint": "^7.0.0", - "fast-check": "^2.8.0", - "gh-pages": "^3.1.0", - "mocha": "^8.2.1", - "nyc": "^15.1.0", - "rollup": "^2.34.1", - "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-terser": "^7.0.2", - "shelljs": "^0.8.4" - } -} diff --git a/node_modules/jsonc-parser/CHANGELOG.md b/node_modules/jsonc-parser/CHANGELOG.md deleted file mode 100644 index 3414a3f1ff..0000000000 --- a/node_modules/jsonc-parser/CHANGELOG.md +++ /dev/null @@ -1,76 +0,0 @@ -3.3.0 2022-06-24 -================= -- `JSONVisitor.onObjectBegin` and `JSONVisitor.onArrayBegin` can now return `false` to instruct the visitor that no children should be visited. - - -3.2.0 2022-08-30 -================= -- update the version of the bundled Javascript files to `es2020`. -- include all `const enum` values in the bundled JavaScript files (`ScanError`, `SyntaxKind`, `ParseErrorCode`). - -3.1.0 2022-07-07 -================== - * added new API `FormattingOptions.keepLines` : It leaves the initial line positions in the formatting. - -3.0.0 2020-11-13 -================== - * fixed API spec for `parseTree`. Can return `undefine` for empty input. - * added new API `FormattingOptions.insertFinalNewline`. - - -2.3.0 2020-07-03 -================== - * new API `ModificationOptions.isArrayInsertion`: If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then `modify` will insert a new item at that location instead of overwriting its contents. - * `ModificationOptions.formattingOptions` is now optional. If not set, newly inserted content will not be formatted. - - -2.2.0 2019-10-25 -================== - * added `ParseOptions.allowEmptyContent`. Default is `false`. - * new API `getNodeType`: Returns the type of a value returned by parse. - * `parse`: Fix issue with empty property name - -2.1.0 2019-03-29 -================== - * `JSONScanner` and `JSONVisitor` return lineNumber / character. - -2.0.0 2018-04-12 -================== - * renamed `Node.columnOffset` to `Node.colonOffset` - * new API `getNodePath`: Gets the JSON path of the given JSON DOM node - * new API `findNodeAtOffset`: Finds the most inner node at the given offset. If `includeRightBound` is set, also finds nodes that end at the given offset. - -1.0.3 2018-03-07 -================== - * provide ems modules - -1.0.2 2018-03-05 -================== - * added the `visit.onComment` API, reported when comments are allowed. - * added the `ParseErrorCode.InvalidCommentToken` enum value, reported when comments are disallowed. - -1.0.1 -================== - * added the `format` API: computes edits to format a JSON document. - * added the `modify` API: computes edits to insert, remove or replace a property or value in a JSON document. - * added the `allyEdits` API: applies edits to a document - -1.0.0 -================== - * remove nls dependency (remove `getParseErrorMessage`) - -0.4.2 / 2017-05-05 -================== - * added `ParseError.offset` & `ParseError.length` - -0.4.1 / 2017-04-02 -================== - * added `ParseOptions.allowTrailingComma` - -0.4.0 / 2017-02-23 -================== - * fix for `getLocation`. Now `getLocation` inside an object will always return a property from inside that property. Can be empty string if the object has no properties or if the offset is before a actual property `{ "a": { | }} will return location ['a', ' ']` - -0.3.0 / 2017-01-17 -================== - * Updating to typescript 2.0 \ No newline at end of file diff --git a/node_modules/jsonc-parser/LICENSE.md b/node_modules/jsonc-parser/LICENSE.md deleted file mode 100644 index 1c65de1db3..0000000000 --- a/node_modules/jsonc-parser/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Microsoft - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/jsonc-parser/README.md b/node_modules/jsonc-parser/README.md deleted file mode 100644 index d569b7064f..0000000000 --- a/node_modules/jsonc-parser/README.md +++ /dev/null @@ -1,364 +0,0 @@ -# jsonc-parser -Scanner and parser for JSON with comments. - -[![npm Package](https://img.shields.io/npm/v/jsonc-parser.svg?style=flat-square)](https://www.npmjs.org/package/jsonc-parser) -[![NPM Downloads](https://img.shields.io/npm/dm/jsonc-parser.svg)](https://npmjs.org/package/jsonc-parser) -[![Build Status](https://github.com/microsoft/node-jsonc-parser/workflows/Tests/badge.svg)](https://github.com/microsoft/node-jsonc-parser/workflows/Tests) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - -Why? ----- -JSONC is JSON with JavaScript style comments. This node module provides a scanner and fault tolerant parser that can process JSONC but is also useful for standard JSON. - - the *scanner* tokenizes the input string into tokens and token offsets - - the *visit* function implements a 'SAX' style parser with callbacks for the encountered properties and values. - - the *parseTree* function computes a hierarchical DOM with offsets representing the encountered properties and values. - - the *parse* function evaluates the JavaScript object represented by JSON string in a fault tolerant fashion. - - the *getLocation* API returns a location object that describes the property or value located at a given offset in a JSON document. - - the *findNodeAtLocation* API finds the node at a given location path in a JSON DOM. - - the *format* API computes edits to format a JSON document. - - the *modify* API computes edits to insert, remove or replace a property or value in a JSON document. - - the *applyEdits* API applies edits to a document. - -Installation ------------- - -``` -npm install --save jsonc-parser -``` - -API ---- - -### Scanner: -```typescript - -/** - * Creates a JSON scanner on the given text. - * If ignoreTrivia is set, whitespaces or comments are ignored. - */ -export function createScanner(text: string, ignoreTrivia: boolean = false): JSONScanner; - -/** - * The scanner object, representing a JSON scanner at a position in the input string. - */ -export interface JSONScanner { - /** - * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token. - */ - setPosition(pos: number): any; - /** - * Read the next token. Returns the token code. - */ - scan(): SyntaxKind; - /** - * Returns the zero-based current scan position, which is after the last read token. - */ - getPosition(): number; - /** - * Returns the last read token. - */ - getToken(): SyntaxKind; - /** - * Returns the last read token value. The value for strings is the decoded string content. For numbers it's of type number, for boolean it's true or false. - */ - getTokenValue(): string; - /** - * The zero-based start offset of the last read token. - */ - getTokenOffset(): number; - /** - * The length of the last read token. - */ - getTokenLength(): number; - /** - * The zero-based start line number of the last read token. - */ - getTokenStartLine(): number; - /** - * The zero-based start character (column) of the last read token. - */ - getTokenStartCharacter(): number; - /** - * An error code of the last scan. - */ - getTokenError(): ScanError; -} -``` - -### Parser: -```typescript - -export interface ParseOptions { - disallowComments?: boolean; - allowTrailingComma?: boolean; - allowEmptyContent?: boolean; -} -/** - * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. - * Therefore always check the errors list to find out if the input was valid. - */ -export declare function parse(text: string, errors?: {error: ParseErrorCode;}[], options?: ParseOptions): any; - -/** - * Parses the given text and invokes the visitor functions for each object, array and literal reached. - */ -export declare function visit(text: string, visitor: JSONVisitor, options?: ParseOptions): any; - -/** - * Visitor called by {@linkcode visit} when parsing JSON. - * - * The visitor functions have the following common parameters: - * - `offset`: Global offset within the JSON document, starting at 0 - * - `startLine`: Line number, starting at 0 - * - `startCharacter`: Start character (column) within the current line, starting at 0 - * - * Additionally some functions have a `pathSupplier` parameter which can be used to obtain the - * current `JSONPath` within the document. - */ -export interface JSONVisitor { - /** - * Invoked when an open brace is encountered and an object is started. The offset and length represent the location of the open brace. - * When `false` is returned, the array items will not be visited. - */ - onObjectBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; - - /** - * Invoked when a property is encountered. The offset and length represent the location of the property name. - * The `JSONPath` created by the `pathSupplier` refers to the enclosing JSON object, it does not include the - * property name yet. - */ - onObjectProperty?: (property: string, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; - /** - * Invoked when a closing brace is encountered and an object is completed. The offset and length represent the location of the closing brace. - */ - onObjectEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * Invoked when an open bracket is encountered. The offset and length represent the location of the open bracket. - * When `false` is returned, the array items will not be visited.* - */ - onArrayBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; - /** - * Invoked when a closing bracket is encountered. The offset and length represent the location of the closing bracket. - */ - onArrayEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * Invoked when a literal value is encountered. The offset and length represent the location of the literal value. - */ - onLiteralValue?: (value: any, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; - /** - * Invoked when a comma or colon separator is encountered. The offset and length represent the location of the separator. - */ - onSeparator?: (character: string, offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * When comments are allowed, invoked when a line or block comment is encountered. The offset and length represent the location of the comment. - */ - onComment?: (offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * Invoked on an error. - */ - onError?: (error: ParseErrorCode, offset: number, length: number, startLine: number, startCharacter: number) => void; -} - -/** - * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. - */ -export declare function parseTree(text: string, errors?: ParseError[], options?: ParseOptions): Node | undefined; - -export declare type NodeType = "object" | "array" | "property" | "string" | "number" | "boolean" | "null"; -export interface Node { - type: NodeType; - value?: any; - offset: number; - length: number; - colonOffset?: number; - parent?: Node; - children?: Node[]; -} - -``` - -### Utilities: -```typescript -/** - * Takes JSON with JavaScript-style comments and remove - * them. Optionally replaces every none-newline character - * of comments with a replaceCharacter - */ -export declare function stripComments(text: string, replaceCh?: string): string; - -/** - * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index. - */ -export declare function getLocation(text: string, position: number): Location; - -/** - * A {@linkcode JSONPath} segment. Either a string representing an object property name - * or a number (starting at 0) for array indices. - */ -export declare type Segment = string | number; -export declare type JSONPath = Segment[]; -export interface Location { - /** - * The previous property key or literal value (string, number, boolean or null) or undefined. - */ - previousNode?: Node; - /** - * The path describing the location in the JSON document. The path consists of a sequence strings - * representing an object property or numbers for array indices. - */ - path: JSONPath; - /** - * Matches the locations path against a pattern consisting of strings (for properties) and numbers (for array indices). - * '*' will match a single segment, of any property name or index. - * '**' will match a sequence of segments or no segment, of any property name or index. - */ - matches: (patterns: JSONPath) => boolean; - /** - * If set, the location's offset is at a property key. - */ - isAtPropertyKey: boolean; -} - -/** - * Finds the node at the given path in a JSON DOM. - */ -export function findNodeAtLocation(root: Node, path: JSONPath): Node | undefined; - -/** - * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset. - */ -export function findNodeAtOffset(root: Node, offset: number, includeRightBound?: boolean) : Node | undefined; - -/** - * Gets the JSON path of the given JSON DOM node - */ -export function getNodePath(node: Node): JSONPath; - -/** - * Evaluates the JavaScript object of the given JSON DOM node - */ -export function getNodeValue(node: Node): any; - -/** - * Computes the edit operations needed to format a JSON document. - * - * @param documentText The input text - * @param range The range to format or `undefined` to format the full content - * @param options The formatting options - * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}. - * To apply the edit operations to the input, use {@linkcode applyEdits}. - */ -export function format(documentText: string, range: Range, options: FormattingOptions): EditResult; - -/** - * Computes the edit operations needed to modify a value in the JSON document. - * - * @param documentText The input text - * @param path The path of the value to change. The path represents either to the document root, a property or an array item. - * If the path points to an non-existing property or item, it will be created. - * @param value The new value for the specified property or item. If the value is undefined, - * the property or item will be removed. - * @param options Options - * @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}. - * To apply the edit operations to the input, use {@linkcode applyEdits}. - */ -export function modify(text: string, path: JSONPath, value: any, options: ModificationOptions): EditResult; - -/** - * Applies edits to an input string. - * @param text The input text - * @param edits Edit operations following the format described in {@linkcode EditResult}. - * @returns The text with the applied edits. - * @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}. - */ -export function applyEdits(text: string, edits: EditResult): string; - -/** - * An edit result describes a textual edit operation. It is the result of a {@linkcode format} and {@linkcode modify} operation. - * It consist of one or more edits describing insertions, replacements or removals of text segments. - * * The offsets of the edits refer to the original state of the document. - * * No two edits change or remove the same range of text in the original document. - * * Multiple edits can have the same offset if they are multiple inserts, or an insert followed by a remove or replace. - * * The order in the array defines which edit is applied first. - * To apply an edit result use {@linkcode applyEdits}. - * In general multiple EditResults must not be concatenated because they might impact each other, producing incorrect or malformed JSON data. - */ -export type EditResult = Edit[]; - -/** - * Represents a text modification - */ -export interface Edit { - /** - * The start offset of the modification. - */ - offset: number; - /** - * The length of the modification. Must not be negative. Empty length represents an *insert*. - */ - length: number; - /** - * The new content. Empty content represents a *remove*. - */ - content: string; -} - -/** - * A text range in the document -*/ -export interface Range { - /** - * The start offset of the range. - */ - offset: number; - /** - * The length of the range. Must not be negative. - */ - length: number; -} - -/** - * Options used by {@linkcode format} when computing the formatting edit operations - */ -export interface FormattingOptions { - /** - * If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent? - */ - tabSize: number; - /** - * Is indentation based on spaces? - */ - insertSpaces: boolean; - /** - * The default 'end of line' character - */ - eol: string; -} - -/** - * Options used by {@linkcode modify} when computing the modification edit operations - */ -export interface ModificationOptions { - /** - * Formatting options. If undefined, the newly inserted code will be inserted unformatted. - */ - formattingOptions?: FormattingOptions; - /** - * Default false. If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then - * {@linkcode modify} will insert a new item at that location instead of overwriting its contents. - */ - isArrayInsertion?: boolean; - /** - * Optional function to define the insertion index given an existing list of properties. - */ - getInsertionIndex?: (properties: string[]) => number; -} -``` - - -License -------- - -(MIT License) - -Copyright 2018, Microsoft diff --git a/node_modules/jsonc-parser/SECURITY.md b/node_modules/jsonc-parser/SECURITY.md deleted file mode 100644 index f7b89984f0..0000000000 --- a/node_modules/jsonc-parser/SECURITY.md +++ /dev/null @@ -1,41 +0,0 @@ - - -## Security - -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). - -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). - -If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). - -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). - -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: - - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) - * Full paths of source file(s) related to the manifestation of the issue - * The location of the affected source code (tag/branch/commit or direct URL) - * Any special configuration required to reproduce the issue - * Step-by-step instructions to reproduce the issue - * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. - -## Preferred Languages - -We prefer all communications to be in English. - -## Policy - -Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). - - \ No newline at end of file diff --git a/node_modules/jsonc-parser/package.json b/node_modules/jsonc-parser/package.json deleted file mode 100644 index 6536a20b66..0000000000 --- a/node_modules/jsonc-parser/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "jsonc-parser", - "version": "3.3.1", - "description": "Scanner and parser for JSON with comments.", - "main": "./lib/umd/main.js", - "typings": "./lib/umd/main.d.ts", - "module": "./lib/esm/main.js", - "author": "Microsoft Corporation", - "repository": { - "type": "git", - "url": "https://github.com/microsoft/node-jsonc-parser" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/microsoft/node-jsonc-parser/issues" - }, - "devDependencies": { - "@types/mocha": "^10.0.7", - "@types/node": "^18.x", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", - "eslint": "^8.57.0", - "mocha": "^10.4.0", - "rimraf": "^5.0.7", - "typescript": "^5.4.2" - }, - "scripts": { - "prepack": "npm run clean && npm run compile-esm && npm run test && npm run remove-sourcemap-refs", - "compile": "tsc -p ./src && npm run lint", - "compile-esm": "tsc -p ./src/tsconfig.esm.json", - "remove-sourcemap-refs": "node ./build/remove-sourcemap-refs.js", - "clean": "rimraf lib", - "watch": "tsc -w -p ./src", - "test": "npm run compile && mocha ./lib/umd/test", - "lint": "eslint src/**/*.ts" - } -} diff --git a/node_modules/jsonpointer/LICENSE.md b/node_modules/jsonpointer/LICENSE.md deleted file mode 100644 index ac32f5dfdd..0000000000 --- a/node_modules/jsonpointer/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/jsonpointer/README.md b/node_modules/jsonpointer/README.md deleted file mode 100644 index 81c1c3960d..0000000000 --- a/node_modules/jsonpointer/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# JSON Pointer for Node.js - -This is an implementation of [JSON Pointer](https://tools.ietf.org/html/rfc6901). - -## CLI - -Looking to filter JSON from the command line? Check out [jsonpointer-cli](https://github.com/joeyespo/jsonpointer-cli). - -## Usage -```javascript -var jsonpointer = require('jsonpointer'); -var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]}; - -jsonpointer.get(obj, '/foo'); // returns 1 -jsonpointer.get(obj, '/bar/baz'); // returns 2 -jsonpointer.get(obj, '/qux/0'); // returns 3 -jsonpointer.get(obj, '/qux/1'); // returns 4 -jsonpointer.get(obj, '/qux/2'); // returns 5 -jsonpointer.get(obj, '/quo'); // returns undefined - -jsonpointer.set(obj, '/foo', 6); // sets obj.foo = 6; -jsonpointer.set(obj, '/qux/-', 6) // sets obj.qux = [3, 4, 5, 6] - -var pointer = jsonpointer.compile('/foo') -pointer.get(obj) // returns 1 -pointer.set(obj, 1) // sets obj.foo = 1 -``` - -## Testing - - $ npm test - All tests pass. - $ - -[![Node.js CI](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml/badge.svg)](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml) - -## Author - -(c) 2011-2021 Jan Lehnardt & Marc Bachmann - -Thanks to all contributors. - -## License - -MIT License. diff --git a/node_modules/jsonpointer/jsonpointer.d.ts b/node_modules/jsonpointer/jsonpointer.d.ts deleted file mode 100644 index 705bebca0a..0000000000 --- a/node_modules/jsonpointer/jsonpointer.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -interface JSONPointer { - /** - * Looks up a JSON pointer in an object - */ - get(object: Object): any; - - - /** - * Set a value for a JSON pointer on object - */ - set(object: Object, value: any): void; -} - - -declare namespace JSONPointer { - /** - * Looks up a JSON pointer in an object - */ - function get(object: Object, pointer: string): any; - - - /** - * Set a value for a JSON pointer on object - */ - function set(object: Object, pointer: string, value: any): void; - - - /** - * Builds a JSONPointer instance from a pointer value. - */ - function compile(pointer: string): JSONPointer; -} - - -export = JSONPointer; diff --git a/node_modules/jsonpointer/jsonpointer.js b/node_modules/jsonpointer/jsonpointer.js deleted file mode 100644 index dad907d763..0000000000 --- a/node_modules/jsonpointer/jsonpointer.js +++ /dev/null @@ -1,100 +0,0 @@ -var hasExcape = /~/ -var escapeMatcher = /~[01]/g -function escapeReplacer (m) { - switch (m) { - case '~1': return '/' - case '~0': return '~' - } - throw new Error('Invalid tilde escape: ' + m) -} - -function untilde (str) { - if (!hasExcape.test(str)) return str - return str.replace(escapeMatcher, escapeReplacer) -} - -function setter (obj, pointer, value) { - var part - var hasNextPart - - for (var p = 1, len = pointer.length; p < len;) { - if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj - - part = untilde(pointer[p++]) - hasNextPart = len > p - - if (typeof obj[part] === 'undefined') { - // support setting of /- - if (Array.isArray(obj) && part === '-') { - part = obj.length - } - - // support nested objects/array when setting values - if (hasNextPart) { - if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] - else obj[part] = {} - } - } - - if (!hasNextPart) break - obj = obj[part] - } - - var oldValue = obj[part] - if (value === undefined) delete obj[part] - else obj[part] = value - return oldValue -} - -function compilePointer (pointer) { - if (typeof pointer === 'string') { - pointer = pointer.split('/') - if (pointer[0] === '') return pointer - throw new Error('Invalid JSON pointer.') - } else if (Array.isArray(pointer)) { - for (const part of pointer) { - if (typeof part !== 'string' && typeof part !== 'number') { - throw new Error('Invalid JSON pointer. Must be of type string or number.') - } - } - return pointer - } - - throw new Error('Invalid JSON pointer.') -} - -function get (obj, pointer) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - var len = pointer.length - if (len === 1) return obj - - for (var p = 1; p < len;) { - obj = obj[untilde(pointer[p++])] - if (len === p) return obj - if (typeof obj !== 'object' || obj === null) return undefined - } -} - -function set (obj, pointer, value) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') - return setter(obj, pointer, value) -} - -function compile (pointer) { - var compiled = compilePointer(pointer) - return { - get: function (object) { - return get(object, compiled) - }, - set: function (object, value) { - return set(object, compiled, value) - } - } -} - -exports.get = get -exports.set = set -exports.compile = compile diff --git a/node_modules/jsonpointer/package.json b/node_modules/jsonpointer/package.json deleted file mode 100644 index a832ba9fc4..0000000000 --- a/node_modules/jsonpointer/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "jsonpointer", - "description": "Simple JSON Addressing.", - "tags": [ - "util", - "simple", - "util", - "utility" - ], - "version": "5.0.1", - "author": "Jan Lehnardt ", - "contributors": [ - "Joe Hildebrand ", - "Marc Bachmann " - ], - "repository": { - "type": "git", - "url": "https://github.com/janl/node-jsonpointer.git" - }, - "bugs": { - "url": "http://github.com/janl/node-jsonpointer/issues" - }, - "engines": { - "node": ">=0.10.0" - }, - "main": "./jsonpointer", - "typings": "jsonpointer.d.ts", - "files": [ - "jsonpointer.js", - "jsonpointer.d.ts" - ], - "scripts": { - "test": "npm run test:standard && npm run test:all", - "test:standard": "standard", - "test:all": "node test.js", - "semantic-release": "semantic-release pre && npm publish && semantic-release post" - }, - "license": "MIT", - "devDependencies": { - "semantic-release": "^18.0.0", - "standard": "^16.0.4" - }, - "standard": { - "ignore": [ - "test.js" - ] - } -} diff --git a/node_modules/katex/LICENSE b/node_modules/katex/LICENSE deleted file mode 100644 index 37c6433e3b..0000000000 --- a/node_modules/katex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2020 Khan Academy and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/katex/README.md b/node_modules/katex/README.md deleted file mode 100644 index 09e86f575a..0000000000 --- a/node_modules/katex/README.md +++ /dev/null @@ -1,125 +0,0 @@ -

      - - - KaTeX - -

      - -[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) -[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) -[![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI) -[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/main/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) -[![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions) -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) -![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip) -[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX) -[![Financial Contributors on Open Collective](https://opencollective.com/katex/all/badge.svg?label=financial+contributors)](https://opencollective.com/katex) - -KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. - - * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](https://www.intmath.com/cg5/katex-mathjax-comparison.php). - * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. - * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. - * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. - -KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 11. - -KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). - -Try out KaTeX [on the demo page](https://katex.org/#demo)! - -## Getting started - -### Starter template - -```html - - - - - - - - - - - - - ... - -``` - -You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. - -For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). - -### API - -Call `katex.render` to render a TeX expression directly into a DOM element. -For example: - -```js -katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { - throwOnError: false -}); -``` - -Call `katex.renderToString` to generate an HTML string of the rendered math, -e.g., for server-side rendering. For example: - -```js -var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { - throwOnError: false -}); -// '...' -``` - -Make sure to include the CSS and font files in both cases. -If you are doing all rendering on the server, there is no need to include the -JavaScript on the client. - -The examples above use the `throwOnError: false` option, which renders invalid -inputs as the TeX source code in red (by default), with the error message as -hover text. For other available options, see the -[API documentation](https://katex.org/docs/api.html), -[options documentation](https://katex.org/docs/options.html), and -[handling errors documentation](https://katex.org/docs/error.html). - -## Demo and Documentation - -Learn more about using KaTeX [on the website](https://katex.org)! - -## Contributors - -### Code Contributors - -This project exists thanks to all the people who contribute code. If you'd like to help, see [our guide to contributing code](CONTRIBUTING.md). -Code contributors - -### Financial Contributors - -Become a financial contributor and help us sustain our community. - -#### Individuals - -Contribute on Open Collective - -#### Organizations - -Support this project with your organization. Your logo will show up here with a link to your website. - -Organization 1 -Organization 2 -Organization 3 -Organization 4 -Organization 5 -Organization 6 -Organization 7 -Organization 8 -Organization 9 -Organization 10 - -## License - -KaTeX is licensed under the [MIT License](https://opensource.org/licenses/MIT). diff --git a/node_modules/katex/cli.js b/node_modules/katex/cli.js deleted file mode 100755 index 20f6237b32..0000000000 --- a/node_modules/katex/cli.js +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env node -// Simple CLI for KaTeX. -// Reads TeX from stdin, outputs HTML to stdout. -// To run this from the repository, you must first build KaTeX by running -// `yarn` and `yarn build`. - -/* eslint no-console:0 */ - -let katex; -try { - katex = require("./"); -} catch (e) { - console.error( - "KaTeX could not import, likely because dist/katex.js is missing."); - console.error("Please run 'yarn' and 'yarn build' before running"); - console.error("cli.js from the KaTeX repository."); - console.error(); - throw e; -} -const {version} = require("./package.json"); -const fs = require("fs"); - -const program = require("commander").version(version); -for (const prop in katex.SETTINGS_SCHEMA) { - if (katex.SETTINGS_SCHEMA.hasOwnProperty(prop)) { - const opt = katex.SETTINGS_SCHEMA[prop]; - if (opt.cli !== false) { - program.option(opt.cli || "--" + prop, opt.cliDescription || - opt.description, opt.cliProcessor, opt.cliDefault); - } - } -} -program.option("-f, --macro-file ", - "Read macro definitions, one per line, from the given file.") - .option("-i, --input ", "Read LaTeX input from the given file.") - .option("-o, --output ", "Write html output to the given file."); - -let options; - -function readMacros() { - if (options.macroFile) { - fs.readFile(options.macroFile, "utf-8", function(err, data) { - if (err) {throw err;} - splitMacros(data.toString().split('\n')); - }); - } else { - splitMacros([]); - } -} - -function splitMacros(macroStrings) { - // Override macros from macro file (if any) - // with macros from command line (if any) - macroStrings = macroStrings.concat(options.macro); - - const macros = {}; - - for (const m of macroStrings) { - const i = m.search(":"); - if (i !== -1) { - macros[m.substring(0, i).trim()] = m.substring(i + 1).trim(); - } - } - - options.macros = macros; - readInput(); -} - -function readInput() { - let input = ""; - - if (options.input) { - fs.readFile(options.input, "utf-8", function(err, data) { - if (err) {throw err;} - input = data.toString(); - writeOutput(input); - }); - } else { - process.stdin.on("data", function(chunk) { - input += chunk.toString(); - }); - - process.stdin.on("end", function() { - writeOutput(input); - }); - } -} - -function writeOutput(input) { - // --format specifies the KaTeX output - const outputFile = options.output; - options.output = options.format; - - const output = katex.renderToString(input, options) + "\n"; - - if (outputFile) { - fs.writeFile(outputFile, output, function(err) { - if (err) { - return console.log(err); - } - }); - } else { - console.log(output); - } -} - -if (require.main !== module) { - module.exports = program; -} else { - options = program.parse(process.argv).opts(); - readMacros(); -} diff --git a/node_modules/katex/contrib/auto-render/README.md b/node_modules/katex/contrib/auto-render/README.md deleted file mode 100644 index ea793f1c09..0000000000 --- a/node_modules/katex/contrib/auto-render/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Auto-render extension - -This is an extension to automatically render all of the math inside of text. It -searches all of the text nodes in a given element for the given delimiters, and -renders the math in place. - -See [Auto-render extension documentation](https://katex.org/docs/autorender.html) -for more information. diff --git a/node_modules/katex/contrib/auto-render/auto-render.js b/node_modules/katex/contrib/auto-render/auto-render.js deleted file mode 100644 index eceee5b980..0000000000 --- a/node_modules/katex/contrib/auto-render/auto-render.js +++ /dev/null @@ -1,142 +0,0 @@ -/* eslint no-console:0 */ - -import katex from "katex"; -import splitAtDelimiters from "./splitAtDelimiters"; - -/* Note: optionsCopy is mutated by this method. If it is ever exposed in the - * API, we should copy it before mutating. - */ -const renderMathInText = function(text, optionsCopy) { - const data = splitAtDelimiters(text, optionsCopy.delimiters); - if (data.length === 1 && data[0].type === 'text') { - // There is no formula in the text. - // Let's return null which means there is no need to replace - // the current text node with a new one. - return null; - } - - const fragment = document.createDocumentFragment(); - - for (let i = 0; i < data.length; i++) { - if (data[i].type === "text") { - fragment.appendChild(document.createTextNode(data[i].data)); - } else { - const span = document.createElement("span"); - let math = data[i].data; - // Override any display mode defined in the settings with that - // defined by the text itself - optionsCopy.displayMode = data[i].display; - try { - if (optionsCopy.preProcess) { - math = optionsCopy.preProcess(math); - } - katex.render(math, span, optionsCopy); - } catch (e) { - if (!(e instanceof katex.ParseError)) { - throw e; - } - optionsCopy.errorCallback( - "KaTeX auto-render: Failed to parse `" + data[i].data + - "` with ", - e - ); - fragment.appendChild(document.createTextNode(data[i].rawData)); - continue; - } - fragment.appendChild(span); - } - } - - return fragment; -}; - -const renderElem = function(elem, optionsCopy) { - for (let i = 0; i < elem.childNodes.length; i++) { - const childNode = elem.childNodes[i]; - if (childNode.nodeType === 3) { - // Text node - // Concatenate all sibling text nodes. - // Webkit browsers split very large text nodes into smaller ones, - // so the delimiters may be split across different nodes. - let textContentConcat = childNode.textContent; - let sibling = childNode.nextSibling; - let nSiblings = 0; - while (sibling && (sibling.nodeType === Node.TEXT_NODE)) { - textContentConcat += sibling.textContent; - sibling = sibling.nextSibling; - nSiblings++; - } - const frag = renderMathInText(textContentConcat, optionsCopy); - if (frag) { - // Remove extra text nodes - for (let j = 0; j < nSiblings; j++) { - childNode.nextSibling.remove(); - } - i += frag.childNodes.length - 1; - elem.replaceChild(frag, childNode); - } else { - // If the concatenated text does not contain math - // the siblings will not either - i += nSiblings; - } - } else if (childNode.nodeType === 1) { - // Element node - const className = ' ' + childNode.className + ' '; - const shouldRender = optionsCopy.ignoredTags.indexOf( - childNode.nodeName.toLowerCase()) === -1 && - optionsCopy.ignoredClasses.every( - x => className.indexOf(' ' + x + ' ') === -1); - - if (shouldRender) { - renderElem(childNode, optionsCopy); - } - } - // Otherwise, it's something else, and ignore it. - } -}; - -const renderMathInElement = function(elem, options) { - if (!elem) { - throw new Error("No element provided to render"); - } - - const optionsCopy = {}; - - // Object.assign(optionsCopy, option) - for (const option in options) { - if (options.hasOwnProperty(option)) { - optionsCopy[option] = options[option]; - } - } - - // default options - optionsCopy.delimiters = optionsCopy.delimiters || [ - {left: "$$", right: "$$", display: true}, - {left: "\\(", right: "\\)", display: false}, - // LaTeX uses $…$, but it ruins the display of normal `$` in text: - // {left: "$", right: "$", display: false}, - // $ must come after $$ - - // Render AMS environments even if outside $$…$$ delimiters. - {left: "\\begin{equation}", right: "\\end{equation}", display: true}, - {left: "\\begin{align}", right: "\\end{align}", display: true}, - {left: "\\begin{alignat}", right: "\\end{alignat}", display: true}, - {left: "\\begin{gather}", right: "\\end{gather}", display: true}, - {left: "\\begin{CD}", right: "\\end{CD}", display: true}, - - {left: "\\[", right: "\\]", display: true}, - ]; - optionsCopy.ignoredTags = optionsCopy.ignoredTags || [ - "script", "noscript", "style", "textarea", "pre", "code", "option", - ]; - optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; - optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; - - // Enable sharing of global macros defined via `\gdef` between different - // math elements within a single call to `renderMathInElement`. - optionsCopy.macros = optionsCopy.macros || {}; - - renderElem(elem, optionsCopy); -}; - -export default renderMathInElement; diff --git a/node_modules/katex/contrib/auto-render/index.html b/node_modules/katex/contrib/auto-render/index.html deleted file mode 100644 index d0849b5c45..0000000000 --- a/node_modules/katex/contrib/auto-render/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Auto-render test - - - - - -
      - This is some text $math \frac12$ other text $\unsupported$ - - Other node \[ \text{displaymath} \frac{1}{2} \] blah $$ \int_2^3 $$ - - and some more text \(and math\) blah. And $math with a - \$ sign$. -
      -        Stuff in a $pre tag$
      -      
      -

      An AMS environment without $$…$$ delimiters.

      -

      \begin{equation} \begin{split} a &=b+c\\ &=e+f \end{split} \end{equation}

      -
      - - - diff --git a/node_modules/katex/contrib/auto-render/splitAtDelimiters.js b/node_modules/katex/contrib/auto-render/splitAtDelimiters.js deleted file mode 100644 index 21b59030a5..0000000000 --- a/node_modules/katex/contrib/auto-render/splitAtDelimiters.js +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint no-constant-condition:0 */ -const findEndOfMath = function(delimiter, text, startIndex) { - // Adapted from - // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx - let index = startIndex; - let braceLevel = 0; - - const delimLength = delimiter.length; - - while (index < text.length) { - const character = text[index]; - - if (braceLevel <= 0 && - text.slice(index, index + delimLength) === delimiter) { - return index; - } else if (character === "\\") { - index++; - } else if (character === "{") { - braceLevel++; - } else if (character === "}") { - braceLevel--; - } - - index++; - } - - return -1; -}; - -const escapeRegex = function(string) { - return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -const amsRegex = /^\\begin{/; - -const splitAtDelimiters = function(text, delimiters) { - let index; - const data = []; - - const regexLeft = new RegExp( - "(" + delimiters.map((x) => escapeRegex(x.left)).join("|") + ")" - ); - - while (true) { - index = text.search(regexLeft); - if (index === -1) { - break; - } - if (index > 0) { - data.push({ - type: "text", - data: text.slice(0, index), - }); - text = text.slice(index); // now text starts with delimiter - } - // ... so this always succeeds: - const i = delimiters.findIndex((delim) => text.startsWith(delim.left)); - index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); - if (index === -1) { - break; - } - const rawData = text.slice(0, index + delimiters[i].right.length); - const math = amsRegex.test(rawData) - ? rawData - : text.slice(delimiters[i].left.length, index); - data.push({ - type: "math", - data: math, - rawData, - display: delimiters[i].display, - }); - text = text.slice(index + delimiters[i].right.length); - } - - if (text !== "") { - data.push({ - type: "text", - data: text, - }); - } - - return data; -}; - -export default splitAtDelimiters; diff --git a/node_modules/katex/contrib/auto-render/test/auto-render-spec.js b/node_modules/katex/contrib/auto-render/test/auto-render-spec.js deleted file mode 100644 index e4038b59aa..0000000000 --- a/node_modules/katex/contrib/auto-render/test/auto-render-spec.js +++ /dev/null @@ -1,363 +0,0 @@ -/** - * @jest-environment jsdom - */ -import splitAtDelimiters from "../splitAtDelimiters"; -import renderMathInElement from "../auto-render"; - -beforeEach(function() { - expect.extend({ - toSplitInto: function(actual, result, delimiters) { - const message = { - pass: true, - message: () => "'" + actual + "' split correctly", - }; - - const split = - splitAtDelimiters(actual, delimiters); - - if (split.length !== result.length) { - message.pass = false; - message.message = () => "Different number of splits: " + - split.length + " vs. " + result.length + " (" + - JSON.stringify(split) + " vs. " + - JSON.stringify(result) + ")"; - return message; - } - - for (let i = 0; i < split.length; i++) { - const real = split[i]; - const correct = result[i]; - - let good = true; - let diff; - - if (real.type !== correct.type) { - good = false; - diff = "type"; - } else if (real.data !== correct.data) { - good = false; - diff = "data"; - } else if (real.display !== correct.display) { - good = false; - diff = "display"; - } - - if (!good) { - message.pass = false; - message.message = () => "Difference at split " + - (i + 1) + ": " + JSON.stringify(real) + - " vs. " + JSON.stringify(correct) + - " (" + diff + " differs)"; - break; - } - } - - return message; - }, - }); -}); - -describe("A delimiter splitter", function() { - it("doesn't split when there are no delimiters", function() { - expect("hello").toSplitInto( - [ - {type: "text", data: "hello"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("doesn't create a math node with only one left delimiter", function() { - expect("hello ( world").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "text", data: "( world"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("doesn't split when there's only a right delimiter", function() { - expect("hello ) world").toSplitInto( - [ - {type: "text", data: "hello ) world"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("splits when there are both delimiters", function() { - expect("hello ( world ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("splits on multi-character delimiters", function() { - expect("hello [[ world ]] boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "[[ world ]]", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "[[", right: "]]", display: false}, - ]); - expect("hello \\begin{equation} world \\end{equation} boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: "\\begin{equation} world \\end{equation}", - rawData: "\\begin{equation} world \\end{equation}", - display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "\\begin{equation}", right: "\\end{equation}", - display: false}, - ]); - }); - - it("splits multiple times", function() { - expect("hello ( world ) boo ( more ) stuff").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo "}, - {type: "math", data: " more ", - rawData: "( more )", display: false}, - {type: "text", data: " stuff"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("leaves the ending when there's only a left delimiter", function() { - expect("hello ( world ) boo ( left").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo "}, - {type: "text", data: "( left"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("doesn't split when close delimiters are in {}s", function() { - expect("hello ( world { ) } ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world { ) } ", - rawData: "( world { ) } )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - - expect("hello ( world { { } ) } ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world { { } ) } ", - rawData: "( world { { } ) } )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("correctly processes sequences of $..$", function() { - expect("$hello$$world$$boo$").toSplitInto( - [ - {type: "math", data: "hello", - rawData: "$hello$", display: false}, - {type: "math", data: "world", - rawData: "$world$", display: false}, - {type: "math", data: "boo", - rawData: "$boo$", display: false}, - ], - [ - {left: "$", right: "$", display: false}, - ]); - }); - - it("doesn't split at escaped delimiters", function() { - expect("hello ( world \\) ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world \\) ", - rawData: "( world \\) )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - - /* TODO(emily): make this work maybe? - expect("hello \\( ( world ) boo").toSplitInto( - "(", ")", - [ - {type: "text", data: "hello \\( "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo"}, - ]); - */ - }); - - it("splits when the right and left delimiters are the same", function() { - expect("hello $ world $ boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "$ world $", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "$", right: "$", display: false}, - ]); - }); - - it("ignores \\$", function() { - expect("$x = \\$5$").toSplitInto( - [ - {type: "math", data: "x = \\$5", - rawData: "$x = \\$5$", display: false}, - ], - [ - {left: "$", right: "$", display: false}, - ]); - }); - - it("remembers which delimiters are display-mode", function() { - const startData = "hello ( world ) boo"; - - expect(splitAtDelimiters(startData, - [{left:"(", right:")", display:true}])).toEqual( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: true}, - {type: "text", data: " boo"}, - ]); - }); - - it("handles nested delimiters irrespective of order", function() { - expect(splitAtDelimiters("$\\fbox{\\(hi\\)}$", - [ - {left:"\\(", right:"\\)", display:false}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "\\fbox{\\(hi\\)}", - rawData: "$\\fbox{\\(hi\\)}$", display: false}, - ]); - expect(splitAtDelimiters("\\(\\fbox{$hi$}\\)", - [ - {left:"\\(", right:"\\)", display:false}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "\\fbox{$hi$}", - rawData: "\\(\\fbox{$hi$}\\)", display: false}, - ]); - }); - - it("handles a mix of $ and $$", function() { - expect(splitAtDelimiters("$hello$world$$boo$$", - [ - {left:"$$", right:"$$", display:true}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "hello", - rawData: "$hello$", display: false}, - {type: "text", data: "world"}, - {type: "math", data: "boo", - rawData: "$$boo$$", display: true}, - ]); - expect(splitAtDelimiters("$hello$$world$$$boo$$", - [ - {left:"$$", right:"$$", display:true}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "hello", - rawData: "$hello$", display: false}, - {type: "math", data: "world", - rawData: "$world$", display: false}, - {type: "math", data: "boo", - rawData: "$$boo$$", display: true}, - ]); - }); -}); - -describe("Pre-process callback", function() { - it("replace `-squared` with `^2 `", function() { - const el1 = document.createElement('div'); - el1.textContent = 'Circle equation: $x-squared + y-squared = r-squared$.'; - const el2 = document.createElement('div'); - el2.textContent = 'Circle equation: $x^2 + y^2 = r^2$.'; - const delimiters = [{left: "$", right: "$", display: false}]; - renderMathInElement(el1, { - delimiters, - preProcess: math => math.replace(/-squared/g, '^2'), - }); - renderMathInElement(el2, {delimiters}); - expect(el1.innerHTML).toEqual(el2.innerHTML); - }); -}); - -describe("Parse adjacent text nodes", function() { - it("parse adjacent text nodes with math", function() { - const textNodes = ['\\[', - 'x^2 + y^2 = r^2', - '\\]']; - const el = document.createElement('div'); - for (let i = 0; i < textNodes.length; i++) { - const txt = document.createTextNode(textNodes[i]); - el.appendChild(txt); - } - const el2 = document.createElement('div'); - const txt = document.createTextNode(textNodes.join('')); - el2.appendChild(txt); - const delimiters = [{left: "\\[", right: "\\]", display: true}]; - renderMathInElement(el, {delimiters}); - renderMathInElement(el2, {delimiters}); - expect(el).toStrictEqual(el2); - }); - - it("parse adjacent text nodes without math", function() { - const textNodes = ['Lorem ipsum dolor', - 'sit amet', - 'consectetur adipiscing elit']; - const el = document.createElement('div'); - for (let i = 0; i < textNodes.length; i++) { - const txt = document.createTextNode(textNodes[i]); - el.appendChild(txt); - } - const el2 = document.createElement('div'); - for (let i = 0; i < textNodes.length; i++) { - const txt = document.createTextNode(textNodes[i]); - el2.appendChild(txt); - } - const delimiters = [{left: "\\[", right: "\\]", display: true}]; - renderMathInElement(el, {delimiters}); - expect(el).toStrictEqual(el2); - }); -}); diff --git a/node_modules/katex/contrib/copy-tex/README.md b/node_modules/katex/contrib/copy-tex/README.md deleted file mode 100644 index 614c796f0d..0000000000 --- a/node_modules/katex/contrib/copy-tex/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Copy-tex extension - -This extension modifies the copy/paste behavior in any browser supporting the -[Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent) -so that, when selecting and copying KaTeX-rendered elements, the text -content of the resulting clipboard renders KaTeX elements as their LaTeX source -surrounded by specified delimiters. (The HTML content of the resulting -clipboard remains the selected HTML content, as it normally would.) -The default delimiters are `$...$` for inline math and `$$...$$` for display -math, but you can easy switch them to e.g. `\(...\)` and `\[...\]` by -modifying `copyDelimiters` in [the source code](copy-tex.js). -Note that a selection containing part of a KaTeX formula gets extended to -include the entire KaTeX formula. - -## Usage - -This extension isn't part of KaTeX proper, so the script should be separately -included in the page. - -```html - -``` - -(Note that, as of KaTeX 0.16.0, there is no longer a corresponding CSS file.) - -See [index.html](index.html) for an example. -(To run this example from a clone of the repository, run `yarn start` -in the root KaTeX directory, and then visit -http://localhost:7936/contrib/copy-tex/index.html -with your web browser.) - -If you want to build your own custom copy handler based on this one, -copy the `copy-tex.js` into your codebase and replace the `require` -statement with `require('katex/contrib/copy-tex/katex2tex.js')`. - -ECMAScript module is also available: -```html - -``` diff --git a/node_modules/katex/contrib/copy-tex/copy-tex.js b/node_modules/katex/contrib/copy-tex/copy-tex.js deleted file mode 100644 index 79c91d5953..0000000000 --- a/node_modules/katex/contrib/copy-tex/copy-tex.js +++ /dev/null @@ -1,51 +0,0 @@ -// @flow - -import katexReplaceWithTex from './katex2tex'; - -// Return
      element containing node, or null if not found. -function closestKatex(node: Node): ?Element { - // If node is a Text Node, for example, go up to containing Element, - // where we can apply the `closest` method. - const element: ?Element = - (node instanceof Element ? node : node.parentElement); - return element && element.closest('.katex'); -} - -// Global copy handler to modify behavior on/within .katex elements. -document.addEventListener('copy', function(event: ClipboardEvent) { - const selection = window.getSelection(); - if (selection.isCollapsed || !event.clipboardData) { - return; // default action OK if selection is empty or unchangeable - } - const clipboardData = event.clipboardData; - const range = selection.getRangeAt(0); - - // When start point is within a formula, expand to entire formula. - const startKatex = closestKatex(range.startContainer); - if (startKatex) { - range.setStartBefore(startKatex); - } - - // Similarly, when end point is within a formula, expand to entire formula. - const endKatex = closestKatex(range.endContainer); - if (endKatex) { - range.setEndAfter(endKatex); - } - - const fragment = range.cloneContents(); - if (!fragment.querySelector('.katex-mathml')) { - return; // default action OK if no .katex-mathml elements - } - - const htmlContents = Array.prototype.map.call(fragment.childNodes, - (el) => (el instanceof Text ? el.textContent : el.outerHTML) - ).join(''); - - // Preserve usual HTML copy/paste behavior. - clipboardData.setData('text/html', htmlContents); - // Rewrite plain-text version. - clipboardData.setData('text/plain', - katexReplaceWithTex(fragment).textContent); - // Prevent normal copy handling. - event.preventDefault(); -}); diff --git a/node_modules/katex/contrib/copy-tex/index.html b/node_modules/katex/contrib/copy-tex/index.html deleted file mode 100644 index fa59d27326..0000000000 --- a/node_modules/katex/contrib/copy-tex/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - Copy-tex test - - - - - - -

      Copy-tex test

      -

      Try copy/pasting some of the text below!

      -

      - Here is some \(\KaTeX\) math: $$ x^2+y^2=z^2 $$ - The variables are \(x\), \(y\), and \(z\), - which are all in \(\mathbb{R}^+\). - Q.E.D. -

      - - - diff --git a/node_modules/katex/contrib/copy-tex/katex2tex.js b/node_modules/katex/contrib/copy-tex/katex2tex.js deleted file mode 100644 index 927003ca30..0000000000 --- a/node_modules/katex/contrib/copy-tex/katex2tex.js +++ /dev/null @@ -1,61 +0,0 @@ -// @flow - -export interface CopyDelimiters { - inline: [string, string], - display: [string, string], -} - -// Set these to how you want inline and display math to be delimited. -export const defaultCopyDelimiters: CopyDelimiters = { - inline: ['$', '$'], // alternative: ['\(', '\)'] - display: ['$$', '$$'], // alternative: ['\[', '\]'] -}; - -// Replace .katex elements with their TeX source ( element). -// Modifies fragment in-place. Useful for writing your own 'copy' handler, -// as in copy-tex.js. -export function katexReplaceWithTex( - fragment: DocumentFragment, - copyDelimiters: CopyDelimiters = defaultCopyDelimiters -): DocumentFragment { - // Remove .katex-html blocks that are preceded by .katex-mathml blocks - // (which will get replaced below). - const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); - for (let i = 0; i < katexHtml.length; i++) { - const element = katexHtml[i]; - if (element.remove) { - element.remove(); - } else if (element.parentNode) { - element.parentNode.removeChild(element); - } - } - // Replace .katex-mathml elements with their annotation (TeX source) - // descendant, with inline delimiters. - const katexMathml = fragment.querySelectorAll('.katex-mathml'); - for (let i = 0; i < katexMathml.length; i++) { - const element = katexMathml[i]; - const texSource = element.querySelector('annotation'); - if (texSource) { - if (element.replaceWith) { - element.replaceWith(texSource); - } else if (element.parentNode) { - element.parentNode.replaceChild(texSource, element); - } - texSource.innerHTML = copyDelimiters.inline[0] + - texSource.innerHTML + copyDelimiters.inline[1]; - } - } - // Switch display math to display delimiters. - const displays = fragment.querySelectorAll('.katex-display annotation'); - for (let i = 0; i < displays.length; i++) { - const element = displays[i]; - element.innerHTML = copyDelimiters.display[0] + - element.innerHTML.substr(copyDelimiters.inline[0].length, - element.innerHTML.length - copyDelimiters.inline[0].length - - copyDelimiters.inline[1].length) - + copyDelimiters.display[1]; - } - return fragment; -} - -export default katexReplaceWithTex; diff --git a/node_modules/katex/contrib/mathtex-script-type/README.md b/node_modules/katex/contrib/mathtex-script-type/README.md deleted file mode 100644 index 39b6dfc064..0000000000 --- a/node_modules/katex/contrib/mathtex-script-type/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# `math/tex` Custom Script Type Extension - -This is an extension to automatically display code inside `script` tags with `type=math/tex` using KaTeX. -This script type is commonly used by MathJax, so this can be used to support compatibility with MathJax. - -### Usage - -This extension isn't part of KaTeX proper, so the script should be separately -included in the page, in addition to KaTeX. - -Load the extension by adding the following line to your HTML file. - -```html - -``` -You can download the script and use it locally, or from a local KaTeX installation instead. - -For example, in the following simple page, we first load KaTeX as usual. -Then, in the body, we use a `math/tex` script to typeset the equation `x+\sqrt{1-x^2}`. - - -```html - - - - - - - - - - - -``` - -ECMAScript module is also available: -```html - diff --git a/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js b/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js deleted file mode 100644 index 592b201952..0000000000 --- a/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js +++ /dev/null @@ -1,22 +0,0 @@ -import katex from "katex"; - -let scripts = document.body.getElementsByTagName("script"); -scripts = Array.prototype.slice.call(scripts); -scripts.forEach(function(script) { - if (!script.type || !script.type.match(/math\/tex/i)) { - return -1; - } - const display = - (script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null); - - const katexElement = document.createElement(display ? "div" : "span"); - katexElement.setAttribute("class", - display ? "equation" : "inline-equation"); - try { - katex.render(script.text, katexElement, {displayMode: display}); - } catch (err) { - //console.error(err); linter doesn't like this - katexElement.textContent = script.text; - } - script.parentNode.replaceChild(katexElement, script); -}); diff --git a/node_modules/katex/contrib/mhchem/README.md b/node_modules/katex/contrib/mhchem/README.md deleted file mode 100644 index 515e5ce7e9..0000000000 --- a/node_modules/katex/contrib/mhchem/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# mhchem extension - -This extension adds to KaTeX the `\ce` and `\pu` functions from the [mhchem](https://mhchem.github.io/MathJax-mhchem/) package. - -### Usage - -This extension isn't part of core KaTeX, so the script should be separately included. Write the following line into the HTML page's ``. Place it *after* the line that calls `katex.js`, and if you make use of the [auto-render](https://katex.org/docs/autorender.html) extension, place it *before* the line that calls `auto-render.js`. - -```html - -``` - -If you remove the `defer` attribute from this tag, then you must also remove the `defer` attribute from the ` -``` - -And call it like so: - -```javascript -const options = { - "strings": { - "content": "Some Markdown to lint." - } -}; - -const results = globalThis.markdownlint.lintSync(options).toString(); -``` - -## Examples - -For ideas how to integrate `markdownlint` into your workflow, refer to the -following projects or one of the tools in the [Related section](#related): - -- [.NET Documentation][dot-net-doc] ([Search repository][dot-net-doc-search]) -- [ally.js][ally-js] ([Search repository][ally-js-search]) -- [Apache Airflow][airflow] ([Search repository][airflow-search]) -- [Boostnote][boostnote] ([Search repository][boostnote-search]) -- [CodiMD][codimd] ([Search repository][codimd-search]) -- [Electron][electron] ([Search repository][electron-search]) -- [ESLint][eslint] ([Search repository][eslint-search]) -- [Garden React Components][garden] ([Search repository][garden-search]) -- [MDN Web Docs][mdn] ([Search repository][mdn-search]) -- [MkDocs][mkdocs] ([Search repository][mkdocs-search]) -- [Mocha][mocha] ([Search repository][mocha-search]) -- [Pi-hole documentation][pi-hole] ([Search repository][pi-hole-search]) -- [Reactable][reactable] ([Search repository][reactable-search]) -- [V8][v8] ([Search repository][v8-search]) -- [webhint][webhint] ([Search repository][webhint-search]) -- [webpack][webpack] ([Search repository][webpack-search]) -- [WordPress][wordpress] ([Search repository][wordpress-search]) - -For more advanced integration scenarios: - -- [GitHub Docs content linter][content-linter] -- [GitHub's `markdownlint-github` repository][markdownlint-github] - -[ally-js]: https://allyjs.io/ -[ally-js-search]: https://github.com/medialize/ally.js/search?q=markdownlint -[airflow]: https://airflow.apache.org -[airflow-search]: https://github.com/apache/airflow/search?q=markdownlint -[boostnote]: https://boostnote.io/ -[boostnote-search]: https://github.com/BoostIO/Boostnote/search?q=markdownlint -[codimd]: https://github.com/hackmdio/codimd -[codimd-search]: https://github.com/hackmdio/codimd/search?q=markdownlint -[content-linter]: https://docs.github.com/en/contributing/collaborating-on-github-docs/using-the-content-linter -[dot-net-doc]: https://docs.microsoft.com/en-us/dotnet/ -[dot-net-doc-search]: https://github.com/dotnet/docs/search?q=markdownlint -[electron]: https://www.electronjs.org -[electron-search]: https://github.com/electron/electron/search?q=markdownlint -[eslint]: https://eslint.org/ -[eslint-search]: https://github.com/eslint/eslint/search?q=markdownlint -[garden]: https://zendeskgarden.github.io/react-components/ -[garden-search]: https://github.com/zendeskgarden/react-components/search?q=markdownlint -[markdownlint-github]: https://github.com/github/markdownlint-github -[mdn]: https://developer.mozilla.org/ -[mdn-search]: https://github.com/mdn/content/search?q=markdownlint -[mkdocs]: https://www.mkdocs.org/ -[mkdocs-search]: https://github.com/mkdocs/mkdocs/search?q=markdownlint -[mocha]: https://mochajs.org/ -[mocha-search]: https://github.com/mochajs/mocha/search?q=markdownlint -[pi-hole]: https://docs.pi-hole.net -[pi-hole-search]: https://github.com/pi-hole/docs/search?q=markdownlint -[reactable]: https://glittershark.github.io/reactable/ -[reactable-search]: https://github.com/glittershark/reactable/search?q=markdownlint -[v8]: https://v8.dev/ -[v8-search]: https://github.com/v8/v8.dev/search?q=markdownlint -[webhint]: https://webhint.io/ -[webhint-search]: https://github.com/webhintio/hint/search?q=markdownlint -[webpack]: https://webpack.js.org/ -[webpack-search]: https://github.com/webpack/webpack.js.org/search?q=markdownlint -[wordpress]: https://wordpress.org/gutenberg/ -[wordpress-search]: https://github.com/WordPress/gutenberg/search?q=markdownlint - -## Contributing - -See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. - -## Releasing - -See [ReleaseProcess.md](doc/ReleaseProcess.md) for more information. - -## History - -See [CHANGELOG.md](CHANGELOG.md). - -[npm-image]: https://img.shields.io/npm/v/markdownlint.svg -[npm-url]: https://www.npmjs.com/package/markdownlint -[license-image]: https://img.shields.io/npm/l/markdownlint.svg -[license-url]: https://opensource.org/licenses/MIT diff --git a/node_modules/markdownlint/doc/CustomRules.md b/node_modules/markdownlint/doc/CustomRules.md deleted file mode 100644 index 8f696ac47e..0000000000 --- a/node_modules/markdownlint/doc/CustomRules.md +++ /dev/null @@ -1,194 +0,0 @@ -# Custom Rules - -In addition to its built-in rules, `markdownlint` lets you enhance the linting -experience by passing an array of custom rules using the [`options.customRules` -property][options-custom-rules]. Custom rules can do everything the built-in -rules can and are defined inline or imported from another package ([keyword -`markdownlint-rule` on npm][markdownlint-rule]). When defined by a file or -package, the export can be a single rule object (see below) or an array of them. -Custom rules can be disabled, enabled, and customized using the same syntax as -built-in rules. - -## Implementing Simple Rules - -For simple requirements like disallowing certain characters or patterns, -the community-developed -[markdownlint-rule-search-replace][markdownlint-rule-search-replace] -plug-in can be used. This plug-in allows anyone to create a set of simple -text-replacement rules without needing to write code. - -[markdownlint-rule-search-replace]: https://www.npmjs.com/package/markdownlint-rule-search-replace - -## Authoring - -Rules are defined by a name (or multiple names), a description, an optional link -to more information, one or more tags, and a function that implements the rule's -behavior. That function is called once for each file/string input and is passed -the parsed input and a function to log any violations. - -Custom rules can (should) operate on a structured set of tokens based on the -[`micromark`][micromark] `parser` (this is preferred). Alternatively, custom -rules can operate on a structured set of tokens based on the -[`markdown-it`][markdown-it] `parser` (legacy support). Finally, custom rules -can operate directly on text with the `none` `parser`. - -A simple rule implementation using the `micromark` parser to report a violation -for any use of blockquotes might look like: - -```javascript -/** @type {import("markdownlint").Rule} */ -module.exports = { - "names": [ "any-blockquote-micromark" ], - "description": "Rule that reports an error for any blockquote", - "information": new URL("https://example.com/rules/any-blockquote"), - "tags": [ "test" ], - "parser": "micromark", - "function": (params, onError) => { - const blockquotes = params.parsers.micromark.tokens - .filter((token) => token.type === "blockQuote"); - for (const blockquote of blockquotes) { - const lines = blockquote.endLine - blockquote.startLine + 1; - onError({ - "lineNumber": blockquote.startLine, - "detail": "Blockquote spans " + lines + " line(s).", - "context": params.lines[blockquote.startLine - 1] - }); - } - } -} -``` - -That same rule implemented using the `markdown-it` parser might look like: - -```javascript -/** @type {import("markdownlint").Rule} */ -module.exports = { - "names": [ "any-blockquote-markdown-it" ], - "description": "Rule that reports an error for any blockquote", - "information": new URL("https://example.com/rules/any-blockquote"), - "tags": [ "test" ], - "parser": "markdownit", - "function": (params, onError) => { - const blockquotes = params.parsers.markdownit.tokens - .filter((token) => token.type === "blockquote_open"); - for (const blockquote of blockquotes) { - const [ startIndex, endIndex ] = blockquote.map; - const lines = endIndex - startIndex; - onError({ - "lineNumber": blockquote.lineNumber, - "detail": "Blockquote spans " + lines + " line(s).", - "context": blockquote.line - }); - } - } -} -``` - -A rule is implemented as an `Object`: - -- `names` is a required `Array` of `String` values that identify the rule in - output messages and config. -- `description` is a required `String` value that describes the rule in output - messages. -- `information` is an optional (absolute) `URL` of a link to more information - about the rule. -- `tags` is a required `Array` of `String` values that groups related rules for - easier customization. -- `parser` is a required `String` value `"markdownit" | "micromark" | "none"` - that specifies the parser data used via `params.parsers` (see below). -- `asynchronous` is an optional `Boolean` value that indicates whether the rule - returns a `Promise` and runs asynchronously. -- `function` is a required `Function` that implements the rule and is passed two - parameters: - - `params` is an `Object` with properties that describe the content being - analyzed: - - `name` is a `String` that identifies the input file/string. - - `parsers` is an `Object` with properties corresponding to the value of - `parser` in the rule definition (see above). - - `markdownit` is an `Object` that provides access to output from the - [`markdown-it`][markdown-it] parser. - - `tokens` is an `Array` of [`markdown-it` `Token`s][markdown-it-token] - with added `line` and `lineNumber` properties. (This property was - previously on the `params` object.) - - `micromark` is an `Object` that provides access to output from the - [`micromark`][micromark] parser. - - `tokens` is an `Array` of [`MicromarkToken`][micromark-token] objects. - - Samples for both `tokens` are available via [test snapshots][tokens]. - - `lines` is an `Array` of `String` values corresponding to the lines of the - input file/string. - - `frontMatterLines` is an `Array` of `String` values corresponding to any - front matter (not present in `lines`). - - `config` is an `Object` corresponding to the rule's entry in - `options.config` (if present). - - `version` is a `String` that corresponds to the version of `markdownlint` - - `onError` is a function that takes a single `Object` parameter with one - required and four optional properties: - - `lineNumber` is a required `Number` specifying the 1-based line number of - the error. - - `detail` is an optional `String` with information about what caused the - error. - - `context` is an optional `String` with relevant text surrounding the error - location. - - `information` is an optional (absolute) `URL` of a link to override the - same-named value provided by the rule definition. (Uncommon) - - `range` is an optional `Array` with two `Number` values identifying the - 1-based column and length of the error. - - `fixInfo` is an optional `Object` with information about how to fix the - error (all properties are optional, but at least one of `deleteCount` and - `insertText` should be present; when applying a fix, the delete should be - performed before the insert): - - `lineNumber` is an optional `Number` specifying the 1-based line number - of the edit. - - `editColumn` is an optional `Number` specifying the 1-based column - number of the edit. - - `deleteCount` is an optional `Number` specifying the number of - characters to delete (the value `-1` is used to delete the line). - - `insertText` is an optional `String` specifying the text to insert. `\n` - is the platform-independent way to add a line break; line breaks should - be added at the beginning of a line instead of at the end. - -The collection of helper functions shared by the built-in rules is available for -use by custom rules in the [markdownlint-rule-helpers package][rule-helpers]. - -### Asynchronous Rules - -If a rule needs to perform asynchronous operations (such as fetching a network -resource), it can specify the value `true` for its `asynchronous` property. -Asynchronous rules should return a `Promise` from their `function` -implementation that is resolved when the rule completes. (The value passed to -`resolve(...)` is ignored.) Linting violations from asynchronous rules are -reported via the `onError` function just like for synchronous rules. - -**Note**: Asynchronous rules cannot be referenced in a synchronous calling -context (i.e., `import { lint } from "markdownlint/sync"`). Attempting to do so -throws an exception. - -## Examples - -- [Simple rules used by the project's test cases][test-rules] -- [Code for all `markdownlint` built-in rules][lib] -- [Complete example rule including npm configuration][extended-ascii] -- [Custom rules from the github/docs repository][github-docs] -- [Custom rules from the electron/lint-roller repository][electron] -- [Custom rules from the webhintio/hint repository][hint] - -## References - -- [CommonMark documentation and specification][commonmark] -- [`markdown-it` Markdown parser project page][markdown-it] - -[commonmark]: https://commonmark.org/ -[electron]: https://github.com/electron/lint-roller/tree/main/markdownlint-rules -[extended-ascii]: https://github.com/DavidAnson/markdownlint-rule-extended-ascii -[github-docs]: https://github.com/github/docs/tree/main/src/content-linter/lib/linting-rules -[hint]: https://github.com/webhintio/hint/blob/main/scripts/lint-markdown.js -[lib]: ../lib -[markdown-it]: https://github.com/markdown-it/markdown-it -[markdown-it-token]: https://markdown-it.github.io/markdown-it/#Token -[markdownlint-rule]: https://www.npmjs.com/search?q=keywords:markdownlint-rule -[micromark]: https://github.com/micromark/micromark -[micromark-token]: ../lib/markdownlint.d.mts -[rule-helpers]: https://www.npmjs.com/package/markdownlint-rule-helpers -[options-custom-rules]: ../README.md#optionscustomrules -[test-rules]: ../test/rules -[tokens]: ../test/snapshots/markdownlint-test-custom-rules.mjs.md diff --git a/node_modules/markdownlint/doc/Prettier.md b/node_modules/markdownlint/doc/Prettier.md deleted file mode 100644 index 0ebde95d38..0000000000 --- a/node_modules/markdownlint/doc/Prettier.md +++ /dev/null @@ -1,27 +0,0 @@ -# Using `markdownlint` with Prettier - -[`Prettier`](https://prettier.io) is a popular code formatter. -For the most part, Prettier works seamlessly with `markdownlint`. - -You can `extend` the [`prettier.json`](../style/prettier.json) style to disable -all `markdownlint` rules that overlap with Prettier. - -Other scenarios are documented below. - -## List item indentation - -The default settings of `markdownlint` and `Prettier` are compatible and don't -result in any linting violations. If `Prettier` is used with `--tab-width` set -to `4` (vs. `2`), the following `markdownlint` configuration can be used: - -```json -{ - "list-marker-space": { - "ul_multi": 3, - "ul_single": 3 - }, - "ul-indent": { - "indent": 4 - } -} -``` diff --git a/node_modules/markdownlint/doc/ReleaseProcess.md b/node_modules/markdownlint/doc/ReleaseProcess.md deleted file mode 100644 index 05c7b70027..0000000000 --- a/node_modules/markdownlint/doc/ReleaseProcess.md +++ /dev/null @@ -1,20 +0,0 @@ -# Release Process - -The `markdownlint` library has some related dependencies that are updated along -with it. To prevent possible regressions from having a widespread impact, these -releases are separated by a few days to provide an opportunity to find issues. - -1. [`markdownlint`][markdownlint] -2. [`markdownlint-cli2`][markdownlint-cli2] -3. [`markdownlint-cli2-action`][markdownlint-cli2-action] -4. [`vscode-markdownlint`][vscode-markdownlint] -5. [`markdownlint-cli`][markdownlint-cli] - -This sequence is not strict and may be adjusted based on the content of the -release and the scope of feature work in each dependency. - -[markdownlint]: https://github.com/DavidAnson/markdownlint -[markdownlint-cli2]: https://github.com/DavidAnson/markdownlint-cli2 -[markdownlint-cli2-action]: https://github.com/marketplace/actions/markdownlint-cli2-action -[vscode-markdownlint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint -[markdownlint-cli]: https://github.com/igorshubovych/markdownlint-cli diff --git a/node_modules/markdownlint/doc/Rules.md b/node_modules/markdownlint/doc/Rules.md deleted file mode 100644 index ded40d8aa3..0000000000 --- a/node_modules/markdownlint/doc/Rules.md +++ /dev/null @@ -1,2535 +0,0 @@ -# Rules - -This document contains a description of all rules, what they are checking for, -as well as examples of documents that break the rule and corrected -versions of the examples. - - - -## `MD001` - Heading levels should only increment by one level at a time - -Tags: `headings` - -Aliases: `heading-increment` - -This rule is triggered when you skip heading levels in a Markdown document, for -example: - -```markdown -# Heading 1 - -### Heading 3 - -We skipped out a 2nd level heading in this document -``` - -When using multiple heading levels, nested headings should increase by only one -level at a time: - -```markdown -# Heading 1 - -## Heading 2 - -### Heading 3 - -#### Heading 4 - -## Another Heading 2 - -### Another Heading 3 -``` - -Rationale: Headings represent the structure of a document and can be confusing -when skipped - especially for accessibility scenarios. More information: -. - - - -## `MD003` - Heading style - -Tags: `headings` - -Aliases: `heading-style` - -Parameters: - -- `style`: Heading style (`string`, default `consistent`, values `atx` / - `atx_closed` / `consistent` / `setext` / `setext_with_atx` / - `setext_with_atx_closed`) - -This rule is triggered when different heading styles are used in the same -document: - -```markdown -# ATX style H1 - -## Closed ATX style H2 ## - -Setext style H1 -=============== -``` - -To fix the issue, use consistent heading styles throughout the document: - -```markdown -# ATX style H1 - -## ATX style H2 -``` - -The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style -headings of level 3 or more in documents with setext-style headings (which only -support level 1 and 2 headings): - -```markdown -Setext style H1 -=============== - -Setext style H2 ---------------- - -### ATX style H3 -``` - -Note: The configured heading style can be a specific style to require (`atx`, -`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can -require that all heading styles match the first heading style via `consistent`. - -Note: The placement of a horizontal rule directly below a line of text can -trigger this rule by turning that text into a level 2 setext-style heading: - -```markdown -A line of text followed by a horizontal rule becomes a heading ---- -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD004` - Unordered list style - -Tags: `bullet`, `ul` - -Aliases: `ul-style` - -Parameters: - -- `style`: List style (`string`, default `consistent`, values `asterisk` / - `consistent` / `dash` / `plus` / `sublist`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for unordered -list items do not match the configured unordered list style: - -```markdown -* Item 1 -+ Item 2 -- Item 3 -``` - -To fix this issue, use the configured style for list items throughout the -document: - -```markdown -* Item 1 -* Item 2 -* Item 3 -``` - -The configured list style can ensure all list styling is a specific symbol -(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that -differs from its parent list (`sublist`), or ensure all list styles match the -first list style (`consistent`). - -For example, the following is valid for the `sublist` style because the -outer-most indent uses asterisk, the middle indent uses plus, and the inner-most -indent uses dash: - -```markdown -* Item 1 - + Item 2 - - Item 3 - + Item 4 -* Item 4 - + Item 5 -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD005` - Inconsistent indentation for list items at the same level - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `list-indent` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are parsed as being at the same level, -but don't have the same indentation: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * A misaligned item -``` - -Usually, this rule will be triggered because of a typo. Correct the indentation -for the list to fix it: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * Nested Item 3 -``` - -Sequentially-ordered list markers are usually left-aligned such that all items -have the same starting column: - -```markdown -... -8. Item -9. Item -10. Item -11. Item -... -``` - -This rule also supports right-alignment of list markers such that all items have -the same ending column: - -```markdown -... - 8. Item - 9. Item -10. Item -11. Item -... -``` - -Rationale: Violations of this rule can lead to improperly rendered content. - - - -## `MD007` - Unordered list indentation - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `ul-indent` - -Parameters: - -- `indent`: Spaces for indent (`integer`, default `2`) -- `start_indent`: Spaces for first level indent (when start_indented is set) - (`integer`, default `2`) -- `start_indented`: Whether to indent the first level of the list (`boolean`, - default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are not indented by the configured -number of spaces (default: 2). - -Example: - -```markdown -* List item - * Nested list item indented by 3 spaces -``` - -Corrected Example: - -```markdown -* List item - * Nested list item indented by 2 spaces -``` - -Note: This rule applies to a sublist only if its parent lists are all also -unordered (otherwise, extra indentation of ordered lists interferes with the -rule). - -The `start_indented` parameter allows the first level of lists to be indented by -the configured number of spaces rather than starting at zero. The `start_indent` -parameter allows the first level of lists to be indented by a different number -of spaces than the rest (ignored when `start_indented` is not set). - -Rationale: Indenting by 2 spaces allows the content of a nested list to be in -line with the start of the content of the parent list when a single space is -used after the list marker. Indenting by 4 spaces is consistent with code blocks -and simpler for editors to implement. Additionally, this can be a compatibility -issue for other Markdown parsers, which require 4-space indents. More -information: [Markdown Style Guide][markdown-style-guide]. - -Note: See [Prettier.md](Prettier.md) for compatibility information. - -[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists - - - -## `MD009` - Trailing spaces - -Tags: `whitespace` - -Aliases: `no-trailing-spaces` - -Parameters: - -- `br_spaces`: Spaces for line break (`integer`, default `2`) -- `list_item_empty_lines`: Allow spaces for empty lines in list items - (`boolean`, default `false`) -- `strict`: Include unnecessary breaks (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any lines that end with unexpected whitespace. To fix -this, remove the trailing space from the end of the line. - -Note: Trailing space is allowed in indented and fenced code blocks because some -languages require it. - -The `br_spaces` parameter allows an exception to this rule for a specific number -of trailing spaces, typically used to insert an explicit line break. The default -value allows 2 spaces to indicate a hard break (\
      element). - -Note: You must set `br_spaces` to a value >= 2 for this parameter to take -effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing -spaces. - -By default, this rule will not trigger when the allowed number of spaces is -used, even when it doesn't create a hard break (for example, at the end of a -paragraph). To report such instances as well, set the `strict` parameter to -`true`. - -```markdown -Text text text -text[2 spaces] -``` - -Using spaces to indent blank lines inside a list item is usually not necessary, -but some parsers require it. Set the `list_item_empty_lines` parameter to `true` -to allow this (even when `strict` is `true`): - -```markdown -- list item text - [2 spaces] - list item text -``` - -Rationale: Except when being used to create a line break, trailing whitespace -has no purpose and does not affect the rendering of content. - - - -## `MD010` - Hard tabs - -Tags: `hard_tab`, `whitespace` - -Aliases: `no-hard-tabs` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default - `[]`) -- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered by any lines that contain hard tab characters instead -of using spaces for indentation. To fix this, replace any hard tab characters -with spaces instead. - -Example: - - - -```markdown -Some text - - * hard tab character used to indent the list item -``` - - - -Corrected example: - -```markdown -Some text - - * Spaces used to indent the list item instead -``` - -You have the option to exclude this rule for code blocks and spans. To do so, -set the `code_blocks` parameter to `false`. Code blocks and spans are included -by default since handling of tabs by Markdown tools can be inconsistent (e.g., -using 4 vs. 8 spaces). - -When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), -the `ignore_code_languages` parameter can be set to a list of languages that -should be ignored (i.e., hard tabs will be allowed, though not required). This -makes it easier for documents to include code for languages that require hard -tabs. - -By default, violations of this rule are fixed by replacing the tab with 1 space -character. To use a different number of spaces, set the `spaces_per_tab` -parameter to the desired value. - -Rationale: Hard tabs are often rendered inconsistently by different editors and -can be harder to work with than spaces. - - - -## `MD011` - Reversed link syntax - -Tags: `links` - -Aliases: `no-reversed-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when text that appears to be a link is encountered, but -where the syntax appears to have been reversed (the `[]` and `()` are -reversed): - -```markdown -(Incorrect link syntax)[https://www.example.com/] -``` - -To fix this, swap the `[]` and `()` around: - -```markdown -[Correct link syntax](https://www.example.com/) -``` - -Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style -footnotes do not trigger this rule: - -```markdown -For (example)[^1] -``` - -Rationale: Reversed links are not rendered as usable links. - - - -## `MD012` - Multiple consecutive blank lines - -Tags: `blank_lines`, `whitespace` - -Aliases: `no-multiple-blanks` - -Parameters: - -- `maximum`: Consecutive blank lines (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are multiple consecutive blank lines in the -document: - -```markdown -Some text here - - -Some more text here -``` - -To fix this, delete the offending lines: - -```markdown -Some text here - -Some more text here -``` - -Note: this rule will not be triggered if there are multiple consecutive blank -lines inside code blocks. - -Note: The `maximum` parameter can be used to configure the maximum number of -consecutive blank lines. - -Rationale: Except in a code block, blank lines serve no purpose and do not -affect the rendering of content. - - - -## `MD013` - Line length - -Tags: `line_length` - -Aliases: `line-length` - -Parameters: - -- `code_block_line_length`: Number of characters for code blocks (`integer`, - default `80`) -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `heading_line_length`: Number of characters for headings (`integer`, default - `80`) -- `headings`: Include headings (`boolean`, default `true`) -- `line_length`: Number of characters (`integer`, default `80`) -- `stern`: Stern length checking (`boolean`, default `false`) -- `strict`: Strict length checking (`boolean`, default `false`) -- `tables`: Include tables (`boolean`, default `true`) - -This rule is triggered when there are lines that are longer than the -configured `line_length` (default: 80 characters). To fix this, split the line -up into multiple lines. To set a different maximum length for headings, use -`heading_line_length`. To set a different maximum length for code blocks, use -`code_block_line_length` - -This rule has an exception when there is no whitespace beyond the configured -line length. This allows you to include items such as long URLs without being -forced to break them in the middle. To disable this exception, set the `strict` -parameter to `true` and an issue will be reported when any line is too long. To -warn for lines that are too long and could be fixed but allow long lines -without spaces, set the `stern` parameter to `true`. - -For example (assuming normal behavior): - -```markdown -IF THIS LINE IS THE MAXIMUM LENGTH -This line is okay because there are-no-spaces-beyond-that-length -This line is a violation because there are spaces beyond that length -This-line-is-okay-because-there-are-no-spaces-anywhere-within -``` - -In `strict` mode, the last three lines above are all violations. In `stern` -mode, the middle two lines above are both violations, but the last is okay. - -You have the option to exclude this rule for code blocks, tables, or headings. -To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. - -Code blocks are included in this rule by default since it is often a -requirement for document readability, and tentatively compatible with code -rules. Still, some languages do not lend themselves to short lines. - -Lines with link/image reference definitions and standalone lines (i.e., not part -of a paragraph) with only a link/image (possibly using (strong) emphasis) are -always exempted from this rule (even in `strict` mode) because there is often no -way to split such lines without breaking the URL. - -Rationale: Extremely long lines can be difficult to work with in some editors. -More information: . - - - -## `MD014` - Dollar signs used before commands without showing output - -Tags: `code` - -Aliases: `commands-show-output` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are code blocks showing shell commands to be -typed, and *all* of the shell commands are preceded by dollar signs ($): - - - -```markdown -$ ls -$ cat foo -$ less bar -``` - - - -The dollar signs are unnecessary in this situation, and should not be -included: - -```markdown -ls -cat foo -less bar -``` - -Showing output for commands preceded by dollar signs does not trigger this rule: - -```markdown -$ ls -foo bar -$ cat foo -Hello world -$ cat bar -baz -``` - -Because some commands do not produce output, it is not a violation if *some* -commands do not have output: - -```markdown -$ mkdir test -mkdir: created directory 'test' -$ ls test -``` - -Rationale: It is easier to copy/paste and less noisy if the dollar signs -are omitted when they are not needed. See - -for more information. - - - -## `MD018` - No space after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-missing-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing after the hash characters -in an atx style heading: - -```markdown -#Heading 1 - -##Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Violations of this rule can lead to improperly rendered content. - - - -## `MD019` - Multiple spaces after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-multiple-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in an atx style heading: - -```markdown -# Heading 1 - -## Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Extra space has no purpose and does not affect the rendering of -content. - - - -## `MD020` - No space inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-missing-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing inside the hash characters -in a closed atx style heading: - -```markdown -#Heading 1# - -##Heading 2## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading is missing spaces. - -Rationale: Violations of this rule can lead to improperly rendered content. - - - -## `MD021` - Multiple spaces inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-multiple-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in a closed atx style heading: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading contains multiple -spaces. - -Rationale: Extra space has no purpose and does not affect the rendering of -content. - - - -## `MD022` - Headings should be surrounded by blank lines - -Tags: `blank_lines`, `headings` - -Aliases: `blanks-around-headings` - -Parameters: - -- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) -- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when headings (any style) are either not preceded or not -followed by at least one blank line: - -```markdown -# Heading 1 -Some text - -Some more text -## Heading 2 -``` - -To fix this, ensure that all headings have a blank line both before and after -(except where the heading is at the beginning or end of the document): - -```markdown -# Heading 1 - -Some text - -Some more text - -## Heading 2 -``` - -The `lines_above` and `lines_below` parameters can be used to specify a -different number of blank lines (including `0`) above or below each heading. -If the value `-1` is used for either parameter, any number of blank lines is -allowed. To customize the number of lines above or below each heading level -individually, specify a `number[]` where values correspond to heading levels -1-6 (in order). - -Notes: If `lines_above` or `lines_below` are configured to require more than one -blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This -rule checks for *at least* as many blank lines as specified; any extra blank -lines are ignored. - -Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, -will not parse headings that don't have a blank line before, and will parse them -as regular text. - - - -## `MD023` - Headings must start at the beginning of the line - -Tags: `headings`, `spaces` - -Aliases: `heading-start-left` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a heading is indented by one or more spaces: - -```markdown -Some text - - # Indented heading -``` - -To fix this, ensure that all headings start at the beginning of the line: - -```markdown -Some text - -# Heading -``` - -Note that scenarios like block quotes "indent" the start of the line, so the -following is also correct: - -```markdown -> # Heading in Block Quote -``` - -Rationale: Headings that don't start at the beginning of the line will not be -parsed as headings, and will instead appear as regular text. - - - -## `MD024` - Multiple headings with the same content - -Tags: `headings` - -Aliases: `no-duplicate-heading` - -Parameters: - -- `siblings_only`: Only check sibling headings (`boolean`, default `false`) - -This rule is triggered if there are multiple headings in the document that have -the same text: - -```markdown -# Some text - -## Some text -``` - -To fix this, ensure that the content of each heading is different: - -```markdown -# Some text - -## Some more text -``` - -If the parameter `siblings_only` is set to `true`, duplication is allowed for -headings with different parents (as is common in changelogs): - -```markdown -# Change log - -## 1.0.0 - -### Features - -## 2.0.0 - -### Features -``` - -Rationale: Some Markdown parsers generate anchors for headings based on the -heading name; headings with the same content can cause problems with that. - - - -## `MD025` - Multiple top-level headings in the same document - -Tags: `headings` - -Aliases: `single-h1`, `single-title` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is triggered when a top-level heading is in use (the first line of -the file is an h1 heading), and more than one h1 heading is in use in the -document: - -```markdown -# Top level heading - -# Another top-level heading -``` - -To fix, structure your document so there is a single h1 heading that is -the title for the document. Subsequent headings must be -lower-level headings (h2, h3, etc.): - -```markdown -# Title - -## Heading - -## Another heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule treats -that as a top level heading and will report a violation for any subsequent -top-level headings. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: A top-level heading is an h1 on the first line of the file, and -serves as the title for the document. If this convention is in use, then there -can not be more than one title for the document, and the entire document should -be contained within this heading. - - - -## `MD026` - Trailing punctuation in heading - -Tags: `headings` - -Aliases: `no-trailing-punctuation` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any heading that has one of the specified normal or -full-width punctuation characters as the last character in the line: - -```markdown -# This is a heading. -``` - -To fix this, remove the trailing punctuation: - -```markdown -# This is a heading -``` - -Note: The `punctuation` parameter can be used to specify what characters count -as punctuation at the end of a heading. For example, you can change it to -`".,;:"` to allow headings that end with an exclamation point. `?` is -allowed by default because of how common it is in headings of FAQ-style -documents. Setting the `punctuation` parameter to `""` allows all characters - -and is equivalent to disabling the rule. - -Note: The trailing semicolon of [HTML entity references][html-entity-references] -like `©`, `©`, and `©` is ignored by this rule. - -Rationale: Headings are not meant to be full sentences. More information: -[Punctuation at the end of headers][end-punctuation]. - -[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers -[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references - - - -## `MD027` - Multiple spaces after blockquote symbol - -Tags: `blockquote`, `indentation`, `whitespace` - -Aliases: `no-multiple-space-blockquote` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when blockquotes have more than one space after the -blockquote (`>`) symbol: - -```markdown -> This is a blockquote with bad indentation -> there should only be one. -``` - -To fix, remove any extraneous space: - -```markdown -> This is a blockquote with correct -> indentation. -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD028` - Blank line inside blockquote - -Tags: `blockquote`, `whitespace` - -Aliases: `no-blanks-blockquote` - -This rule is triggered when two blockquote blocks are separated by nothing -except for a blank line: - -```markdown -> This is a blockquote -> which is immediately followed by - -> this blockquote. Unfortunately -> In some parsers, these are treated as the same blockquote. -``` - -To fix this, ensure that any blockquotes that are right next to each other -have some text in between: - -```markdown -> This is a blockquote. - -And Jimmy also said: - -> This too is a blockquote. -``` - -Alternatively, if they are supposed to be the same quote, then add the -blockquote symbol at the beginning of the blank line: - -```markdown -> This is a blockquote. -> -> This is the same blockquote. -``` - -Rationale: Some Markdown parsers will treat two blockquotes separated by one -or more blank lines as the same blockquote, while others will treat them as -separate blockquotes. - - - -## `MD029` - Ordered list item prefix - -Tags: `ol` - -Aliases: `ol-prefix` - -Parameters: - -- `style`: List style (`string`, default `one_or_ordered`, values `one` / - `one_or_ordered` / `ordered` / `zero`) - -This rule is triggered for ordered lists that do not either start with '1.' or -do not have a prefix that increases in numerical order (depending on the -configured style). The less-common pattern of using '0.' as a first prefix or -for all prefixes is also supported. - -Example valid list if the style is configured as 'one': - -```markdown -1. Do this. -1. Do that. -1. Done. -``` - -Examples of valid lists if the style is configured as 'ordered': - -```markdown -1. Do this. -2. Do that. -3. Done. -``` - -```markdown -0. Do this. -1. Do that. -2. Done. -``` - -All three examples are valid when the style is configured as 'one_or_ordered'. - -Example valid list if the style is configured as 'zero': - -```markdown -0. Do this. -0. Do that. -0. Done. -``` - -Example invalid list for all styles: - -```markdown -1. Do this. -3. Done. -``` - -This rule supports 0-prefixing ordered list items for uniform indentation: - -```markdown -... -08. Item -09. Item -10. Item -11. Item -... -``` - -Note: This rule will report violations for cases like the following where an -improperly-indented code block (or similar) appears between two list items and -"breaks" the list in two: - - - -~~~markdown -1. First list - -```text -Code block -``` - -1. Second list -~~~ - -The fix is to indent the code block so it becomes part of the preceding list -item as intended: - -~~~markdown -1. First list - - ```text - Code block - ``` - -2. Still first list -~~~ - - - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD030` - Spaces after list markers - -Tags: `ol`, `ul`, `whitespace` - -Aliases: `list-marker-space` - -Parameters: - -- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) -- `ol_single`: Spaces for single-line ordered list items (`integer`, default - `1`) -- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default - `1`) -- `ul_single`: Spaces for single-line unordered list items (`integer`, default - `1`) - -Fixable: Some violations can be fixed by tooling - -This rule checks for the number of spaces between a list marker (e.g. '`-`', -'`*`', '`+`' or '`1.`') and the text of the list item. - -The number of spaces checked for depends on the document style in use, but the -default is 1 space after any list marker: - -```markdown -* Foo -* Bar -* Baz - -1. Foo -1. Bar -1. Baz - -1. Foo - * Bar -1. Baz -``` - -A document style may change the number of spaces after unordered list items -and ordered list items independently, as well as based on whether the content -of every item in the list consists of a single paragraph or multiple -paragraphs (including sub-lists and code blocks). - -For example, the style guide at - -specifies that 1 space after the list marker should be used if every item in -the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered -and unordered lists respectively) if there are multiple paragraphs of content -inside the list: - -```markdown -* Foo -* Bar -* Baz -``` - -vs. - -```markdown -* Foo - - Second paragraph - -* Bar -``` - -or - -```markdown -1. Foo - - Second paragraph - -1. Bar -``` - -To fix this, ensure the correct number of spaces are used after the list marker -for your selected document style. - -Rationale: Violations of this rule can lead to improperly rendered content. - -Note: See [Prettier.md](Prettier.md) for compatibility information. - - - -## `MD031` - Fenced code blocks should be surrounded by blank lines - -Tags: `blank_lines`, `code` - -Aliases: `blanks-around-fences` - -Parameters: - -- `list_items`: Include list items (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when fenced code blocks are either not preceded or not -followed by a blank line: - -````markdown -Some text -``` -Code block -``` - -``` -Another code block -``` -Some more text -```` - -To fix this, ensure that all fenced code blocks have a blank line both before -and after (except where the block is at the beginning or end of the document): - -````markdown -Some text - -``` -Code block -``` - -``` -Another code block -``` - -Some more text -```` - -Set the `list_items` parameter to `false` to disable this rule for list items. -Disabling this behavior for lists can be useful if it is necessary to create a -[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. - -Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will -not parse fenced code blocks that don't have blank lines before and after them. - - - -## `MD032` - Lists should be surrounded by blank lines - -Tags: `blank_lines`, `bullet`, `ol`, `ul` - -Aliases: `blanks-around-lists` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when lists (of any kind) are either not preceded or not -followed by a blank line: - -```markdown -Some text -* List item -* List item - -1. List item -2. List item -*** -``` - -In the first case above, text immediately precedes the unordered list. In the -second case above, a thematic break immediately follows the ordered list. To fix -violations of this rule, ensure that all lists have a blank line both before and -after (except when the list is at the very beginning or end of the document): - -```markdown -Some text - -* List item -* List item - -1. List item -2. List item - -*** -``` - -Note that the following case is **not** a violation of this rule: - -```markdown -1. List item - More item 1 -2. List item -More item 2 -``` - -Although it is not indented, the text "More item 2" is referred to as a -[lazy continuation line][lazy-continuation] and considered part of the second -list item. - -Rationale: In addition to aesthetic reasons, some parsers, including kramdown, -will not parse lists that don't have blank lines before and after them. - -[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line - - - -## `MD033` - Inline HTML - -Tags: `html` - -Aliases: `no-inline-html` - -Parameters: - -- `allowed_elements`: Allowed elements (`string[]`, default `[]`) - -This rule is triggered whenever raw HTML is used in a Markdown document: - -```markdown -

      Inline HTML heading

      -``` - -To fix this, use 'pure' Markdown instead of including raw HTML: - -```markdown -# Markdown heading -``` - -Note: To allow specific HTML elements, use the `allowed_elements` parameter. - -Rationale: Raw HTML is allowed in Markdown, but this rule is included for -those who want their documents to only include "pure" Markdown, or for those -who are rendering Markdown documents into something other than HTML. - - - -## `MD034` - Bare URL used - -Tags: `links`, `url` - -Aliases: `no-bare-urls` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered whenever a URL or email address appears without -surrounding angle brackets: - -```markdown -For more info, visit https://www.example.com/ or email user@example.com. -``` - -To fix this, add angle brackets around the URL or email address: - -```markdown -For more info, visit or email . -``` - -If a URL or email address contains non-ASCII characters, it may be not be -handled as intended even when angle brackets are present. In such cases, -[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used -to comply with the required syntax for URL and email. - -Note: To include a bare URL or email without it being converted into a link, -wrap it in a code span: - -```markdown -Not a clickable link: `https://www.example.com` -``` - -Note: The following scenario does not trigger this rule because it could be a -shortcut link: - -```markdown -[https://www.example.com] -``` - -Note: The following syntax triggers this rule because the nested link could be -a shortcut link (which takes precedence): - -```markdown -[text [shortcut] text](https://example.com) -``` - -To avoid this, escape both inner brackets: - -```markdown -[link \[text\] link](https://example.com) -``` - -Rationale: Without angle brackets, a bare URL or email isn't converted into a -link by some Markdown parsers. - - - -## `MD035` - Horizontal rule style - -Tags: `hr` - -Aliases: `hr-style` - -Parameters: - -- `style`: Horizontal rule style (`string`, default `consistent`) - -This rule is triggered when inconsistent styles of horizontal rules are used -in the document: - -```markdown ---- - -- - - - -*** - -* * * - -**** -``` - -To fix this, use the same horizontal rule everywhere: - -```markdown ---- - ---- -``` - -The configured style can ensure all horizontal rules use a specific string or it -can ensure all horizontal rules match the first horizontal rule (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD036` - Emphasis used instead of a heading - -Tags: `emphasis`, `headings` - -Aliases: `no-emphasis-as-heading` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) - -This check looks for instances where emphasized (i.e. bold or italic) text is -used to separate sections, where a heading should be used instead: - -```markdown -**My document** - -Lorem ipsum dolor sit amet... - -_Another section_ - -Consectetur adipiscing elit, sed do eiusmod. -``` - -To fix this, use Markdown headings instead of emphasized text to denote -sections: - -```markdown -# My document - -Lorem ipsum dolor sit amet... - -## Another section - -Consectetur adipiscing elit, sed do eiusmod. -``` - -Note: This rule looks for single-line paragraphs that consist entirely -of emphasized text. It won't fire on emphasis used within regular text, -multi-line emphasized paragraphs, or paragraphs ending in punctuation -(normal or full-width). Similarly to rule MD026, you can configure what -characters are recognized as punctuation. - -Rationale: Using emphasis instead of a heading prevents tools from inferring -the structure of a document. More information: -. - - - -## `MD037` - Spaces inside emphasis markers - -Tags: `emphasis`, `whitespace` - -Aliases: `no-space-in-emphasis` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when emphasis markers (bold, italic) are used, but they -have spaces between the markers and the text: - -```markdown -Here is some ** bold ** text. - -Here is some * italic * text. - -Here is some more __ bold __ text. - -Here is some more _ italic _ text. -``` - -To fix this, remove the spaces around the emphasis markers: - -```markdown -Here is some **bold** text. - -Here is some *italic* text. - -Here is some more __bold__ text. - -Here is some more _italic_ text. -``` - -Rationale: Emphasis is only parsed as such when the asterisks/underscores -aren't surrounded by spaces. This rule attempts to detect where -they were surrounded by spaces, but it appears that emphasized text was -intended by the author. - - - -## `MD038` - Spaces inside code span elements - -Tags: `code`, `whitespace` - -Aliases: `no-space-in-code` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered for code span elements that have spaces adjacent to the -backticks: - -```markdown -`some text ` - -` some text` -``` - -To fix this, remove any spaces adjacent to the backticks: - -```markdown -`some text` -``` - -Note: A single leading and trailing space is allowed by the specification and -automatically trimmed (in order to allow for code spans that embed backticks): - -```markdown -`` `backticks` `` -``` - -Note: A single leading or trailing space is allowed if used to separate code -span markers from an embedded backtick (though the space is not trimmed): - -```markdown -`` ` embedded backtick`` -``` - -Rationale: Violations of this rule are usually unintentional and may lead to -improperly-rendered content. If spaces beside backticks are intentional, this -rule can be disabled for that line or file. - - - -## `MD039` - Spaces inside link text - -Tags: `links`, `whitespace` - -Aliases: `no-space-in-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on links that have spaces surrounding the link text: - -```markdown -[ a link ](https://www.example.com/) -``` - -To fix this, remove the spaces surrounding the link text: - -```markdown -[a link](https://www.example.com/) -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD040` - Fenced code blocks should have a language specified - -Tags: `code`, `language` - -Aliases: `fenced-code-language` - -Parameters: - -- `allowed_languages`: List of languages (`string[]`, default `[]`) -- `language_only`: Require language only (`boolean`, default `false`) - -This rule is triggered when fenced code blocks are used, but a language isn't -specified: - -````markdown -``` -#!/bin/bash -echo Hello world -``` -```` - -To fix this, add a language specifier to the code block: - -````markdown -```bash -#!/bin/bash -echo Hello world -``` -```` - -To display a code block without syntax highlighting, use: - -````markdown -```text -Plain text in a code block -``` -```` - -You can configure the `allowed_languages` parameter to specify a list of -languages code blocks could use. Languages are case sensitive. The default value -is `[]` which means any language specifier is valid. - -You can prevent extra data from being present in the info string of fenced code -blocks. To do so, set the `language_only` parameter to `true`. - - -Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: -`ruby startline=3`) will trigger this rule. - -Rationale: Specifying a language improves content rendering by using the -correct syntax highlighting for code. More information: -. - - - -## `MD041` - First line in a file should be a top-level heading - -Tags: `headings` - -Aliases: `first-line-h1`, `first-line-heading` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is intended to ensure documents have a title and is triggered when -the first line in the file isn't a top-level (h1) heading: - -```markdown -This is a file without a heading -``` - -To fix this, add a top-level heading to the beginning of the file: - -```markdown -# File with heading - -This is a file with a top-level heading -``` - -Because it is common for projects on GitHub to use an image for the heading of -`README.md` and that is not well-supported by Markdown, HTML headings are also -permitted by this rule. For example: - -```markdown -

      - -This is a file with a top-level HTML heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule will not -report a violation. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: The top-level heading often acts as the title of a document. More -information: . - - - -## `MD042` - No empty links - -Tags: `links` - -Aliases: `no-empty-links` - -This rule is triggered when an empty link is encountered: - -```markdown -[an empty link]() -``` - -To fix the violation, provide a destination for the link: - -```markdown -[a valid link](https://example.com/) -``` - -Empty fragments will trigger this rule: - -```markdown -[an empty fragment](#) -``` - -But non-empty fragments will not: - -```markdown -[a valid fragment](#fragment) -``` - -Rationale: Empty links do not lead anywhere and therefore don't function as -links. - - - -## `MD043` - Required heading structure - -Tags: `headings` - -Aliases: `required-headings` - -Parameters: - -- `headings`: List of headings (`string[]`, default `[]`) -- `match_case`: Match case of headings (`boolean`, default `false`) - -This rule is triggered when the headings in a file do not match the array of -headings passed to the rule. It can be used to enforce a standard heading -structure for a set of files. - -To require exactly the following structure: - -```markdown -# Head -## Item -### Detail -``` - -Set the `headings` parameter to: - -```json -[ - "# Head", - "## Item", - "### Detail" -] -``` - -To allow optional headings as with the following structure: - -```markdown -# Head -## Item -### Detail (optional) -## Foot -### Notes (optional) -``` - -Use the special value `"*"` meaning "zero or more unspecified headings" or the -special value `"+"` meaning "one or more unspecified headings" and set the -`headings` parameter to: - -```json -[ - "# Head", - "## Item", - "*", - "## Foot", - "*" -] -``` - -When an error is detected, this rule outputs the line number of the first -problematic heading (otherwise, it outputs the last line number of the file). - -Note that while the `headings` parameter uses the "## Text" ATX heading style -for simplicity, a file may use any supported heading style. - -By default, the case of headings in the document is not required to match that -of `headings`. To require that case match exactly, set the `match_case` -parameter to `true`. - -Rationale: Projects may wish to enforce a consistent document structure across -a set of similar content. - - - -## `MD044` - Proper names should have the correct capitalization - -Tags: `spelling` - -Aliases: `proper-names` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `html_elements`: Include HTML elements (`boolean`, default `true`) -- `names`: List of proper names (`string[]`, default `[]`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when any of the strings in the `names` array do not have -the specified capitalization. It can be used to enforce a standard letter case -for the names of projects and products. - -For example, the language "JavaScript" is usually written with both the 'J' and -'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To -enforce the proper capitalization, specify the desired letter case in the -`names` array: - -```json -[ - "JavaScript" -] -``` - -Sometimes a proper name is capitalized differently in certain contexts. In such -cases, add both forms to the `names` array: - -```json -[ - "GitHub", - "github.com" -] -``` - -Set the `code_blocks` parameter to `false` to disable this rule for code blocks -and spans. Set the `html_elements` parameter to `false` to disable this rule -for HTML elements and attributes (such as when using a proper name as part of -a path for `a`/`href` or `img`/`src`). - -Rationale: Incorrect capitalization of proper names is usually a mistake. - - - -## `MD045` - Images should have alternate text (alt text) - -Tags: `accessibility`, `images` - -Aliases: `no-alt-text` - -This rule is triggered when an image is missing alternate text (alt text) -information. - -Alternate text is commonly specified inline as: - -```markdown -![Alternate text](image.jpg) -``` - -Or with reference syntax as: - -```markdown -![Alternate text][ref] - -... - -[ref]: image.jpg "Optional title" -``` - -Or with HTML as: - -```html -Alternate text -``` - -Guidance for writing alternate text is available from the [W3C][w3c], -[Wikipedia][wikipedia], and [other locations][phase2technology]. - -Rationale: Alternate text is important for accessibility and describes the -content of an image for people who may not be able to see it. - -[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses -[w3c]: https://www.w3.org/WAI/alt/ -[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute - - - -## `MD046` - Code block style - -Tags: `code` - -Aliases: `code-block-style` - -Parameters: - -- `style`: Block style (`string`, default `consistent`, values `consistent` / - `fenced` / `indented`) - -This rule is triggered when unwanted or different code block styles are used in -the same document. - -In the default configuration this rule reports a violation for the following -document: - - - - Some text. - - # Indented code - - More text. - - ```ruby - # Fenced code - ``` - - More text. - - - -To fix violations of this rule, use a consistent style (either indenting or code -fences). - -The configured code block style can be specific (`fenced`, `indented`) or can -require all code blocks match the first code block (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD047` - Files should end with a single newline character - -Tags: `blank_lines` - -Aliases: `single-trailing-newline` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there is not a single newline character at the end -of a file. - -An example that triggers the rule: - -```markdown -# Heading - -This file ends without a newline.[EOF] -``` - -To fix the violation, add a newline character to the end of the file: - -```markdown -# Heading - -This file ends with a newline. -[EOF] -``` - -Rationale: Some programs have trouble with files that do not end with a newline. - -More information: [What's the point in adding a new line to the end of a -file?][stack-exchange] - -[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file - - - -## `MD048` - Code fence style - -Tags: `code` - -Aliases: `code-fence-style` - -Parameters: - -- `style`: Code fence style (`string`, default `consistent`, values `backtick` - / `consistent` / `tilde`) - -This rule is triggered when the symbols used in the document for fenced code -blocks do not match the configured code fence style: - -````markdown -```ruby -# Fenced code -``` - -~~~ruby -# Fenced code -~~~ -```` - -To fix this issue, use the configured code fence style throughout the -document: - -````markdown -```ruby -# Fenced code -``` - -```ruby -# Fenced code -``` -```` - -The configured code fence style can be a specific symbol to use (`backtick`, -`tilde`) or it can require all code fences match the first code fence -(`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD049` - Emphasis style - -Tags: `emphasis` - -Aliases: `emphasis-style` - -Parameters: - -- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for emphasis do not -match the configured emphasis style: - -```markdown -*Text* -_Text_ -``` - -To fix this issue, use the configured emphasis style throughout the document: - -```markdown -*Text* -*Text* -``` - -The configured emphasis style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all emphasis matches the first emphasis -(`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like_this_one. - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD050` - Strong style - -Tags: `emphasis` - -Aliases: `strong-style` - -Parameters: - -- `style`: Strong style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for strong do not -match the configured strong style: - -```markdown -**Text** -__Text__ -``` - -To fix this issue, use the configured strong style throughout the document: - -```markdown -**Text** -**Text** -``` - -The configured strong style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all strong matches the first strong (`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like__this__one. - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD051` - Link fragments should be valid - -Tags: `links` - -Aliases: `link-fragments` - -Parameters: - -- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a link fragment does not match any of the fragments -that are automatically generated for headings in a document: - -```markdown -# Heading Name - -[Link](#fragment) -``` - -To fix this issue, change the link fragment to reference an existing heading's -generated name (see below): - -```markdown -# Heading Name - -[Link](#heading-name) -``` - -For consistency, this rule requires fragments to exactly match the [GitHub -heading algorithm][github-heading-algorithm] which converts letters to -lowercase. Therefore, the following example is reported as a violation: - -```markdown -# Heading Name - -[Link](#Heading-Name) -``` - -To ignore case when comparing fragments with heading names, the `ignore_case` -parameter can be set to `true`. In this configuration, the previous example is -not reported as a violation. - -Alternatively, some platforms allow the syntax `{#named-anchor}` to be used -within a heading to provide a specific name (consisting of only lower-case -letters, numbers, `-`, and `_`): - -```markdown -# Heading Name {#custom-name} - -[Link](#custom-name) -``` - -Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` -attribute can be used to define a fragment: - -```markdown - - -[Link](#bookmark) -``` - -An `a` tag can be useful in scenarios where a heading is not appropriate or for -control over the text of the fragment identifier. - -This rule also recognizes the custom fragment syntax used by GitHub to highlight -[specific content in a document][github-linking-to-content]. - -For example, this link to line 20: - -```markdown -[Link](#L20) -``` - -And this link to content starting within line 19 running into line 21: - -```markdown -[Link](#L19C5-L21C11) -``` - -Rationale: [GitHub section links][github-section-links] are created -automatically for every heading when Markdown content is displayed on GitHub. -This makes it easy to link directly to different sections within a document. -However, section links change if headings are renamed or removed. This rule -helps identify broken section links within a document. - -Section links are **not** part of the CommonMark specification. This rule -enforces the [GitHub heading algorithm][github-heading-algorithm] which is: -convert heading to lowercase, remove punctuation, convert spaces to dashes, -append an incrementing integer as needed for uniqueness. - -[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links -[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb -[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown - - - -## `MD052` - Reference links and images should use a label that is defined - -Tags: `images`, `links` - -Aliases: `reference-links-images` - -Parameters: - -- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) - -Links and images in Markdown can provide the link destination or image source -at the time of use or can define it elsewhere and use a label for reference. -The reference format is convenient for keeping paragraph text clutter-free -and makes it easy to reuse the same URL in multiple places. - -There are three kinds of reference links and images: - -```markdown -Full: [text][label] -Collapsed: [label][] -Shortcut: [label] - -Full: ![text][image] -Collapsed: ![image][] -Shortcut: ![image] - -[label]: https://example.com/label -[image]: https://example.com/image -``` - -A link or image renders correctly when the corresponding label is defined, but -displays as text with brackets when the label is not present. By default, this -rule warns of undefined labels for "full" and "collapsed" reference syntax but -not for "shortcut" syntax because it is ambiguous. - -The text `[example]` could be a shortcut link or the text "example" in brackets, -so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set -the `include_shortcut` parameter to `true`. Note that doing so produces warnings -for *all* text in the document that *could* be a shortcut. If bracketed text is -intentional, brackets can be escaped with the `\` character: `\[example\]`. - - - -## `MD053` - Link and image reference definitions should be needed - -Tags: `images`, `links` - -Aliases: `link-image-reference-definitions` - -Parameters: - -- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source -at the time of use or can use a label to reference a definition elsewhere in -the document. The latter reference format is convenient for keeping paragraph -text clutter-free and makes it easy to reuse the same URL in multiple places. - -Because link and image reference definitions are located separately from -where they are used, there are two scenarios where a definition can be -unnecessary: - -1. If a label is not referenced by any link or image in a document, that - definition is unused and can be deleted. -2. If a label is defined multiple times in a document, the first definition is - used and the others can be deleted. - -This rule considers a reference definition to be used if any link or image -reference has the corresponding label. The "full", "collapsed", and "shortcut" -formats are all supported. - -If there are reference definitions that are deliberately unreferenced, they can -be ignored by setting the `ignored_definitions` parameter. The default value of -this parameter ignores the following convention for adding non-HTML comments to -Markdown: - -```markdown -[//]: # (This behaves like a comment) -``` - - - -## `MD054` - Link and image style - -Tags: `images`, `links` - -Aliases: `link-image-style` - -Parameters: - -- `autolink`: Allow autolinks (`boolean`, default `true`) -- `collapsed`: Allow collapsed reference links and images (`boolean`, default - `true`) -- `full`: Allow full reference links and images (`boolean`, default `true`) -- `inline`: Allow inline links and images (`boolean`, default `true`) -- `shortcut`: Allow shortcut reference links and images (`boolean`, default - `true`) -- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source at -the time of use or can use a label to reference a definition elsewhere in the -document. The three reference formats are convenient for keeping paragraph text -clutter-free and make it easy to reuse the same URL in multiple places. - -By default, this rule allows all link/image styles. - -Setting the `autolink` parameter to `false` disables autolinks: - -```markdown - -``` - -Setting the `inline` parameter to `false` disables inline links and images: - -```markdown -[link](https://example.com) - -![image](https://example.com) -``` - -Setting the `full` parameter to `false` disables full reference links and -images: - -```markdown -[link][url] - -![image][url] - -[url]: https://example.com -``` - -Setting the `collapsed` parameter to `false` disables collapsed reference links -and images: - -```markdown -[url][] - -![url][] - -[url]: https://example.com -``` - -Setting the `shortcut` parameter to `false` disables shortcut reference links -and images: - -```markdown -[url] - -![url] - -[url]: https://example.com -``` - -To fix violations of this rule, change the link or image to use an allowed -style. This rule can automatically fix violations when a link or image can be -converted to the `inline` style (preferred) or a link can be converted to the -`autolink` style (which does not support images and must be an absolute URL). -This rule does *not* fix scenarios that require converting a link or image to -the `full`, `collapsed`, or `shortcut` reference styles because that involves -naming the reference and determining where to insert it in the document. - -Setting the `url_inline` parameter to `false` prevents the use of inline links -with the same absolute URL text/destination and no title because such links can -be converted to autolinks: - -```markdown -[https://example.com](https://example.com) -``` - -To fix `url_inline` violations, use the simpler autolink syntax instead: - -```markdown - -``` - -Rationale: Consistent formatting makes it easier to understand a document. -Autolinks are concise, but appear as URLs which can be long and confusing. -Inline links and images can include descriptive text, but take up more space in -Markdown form. Reference links and images can be easier to read and manipulate -in Markdown form, but require a separate link reference definition. - - - -## `MD055` - Table pipe style - -Tags: `table` - -Aliases: `table-pipe-style` - -Parameters: - -- `style`: Table pipe style (`string`, default `consistent`, values - `consistent` / `leading_and_trailing` / `leading_only` / - `no_leading_or_trailing` / `trailing_only`) - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] -is inconsistent about its use of leading and trailing pipe characters (`|`). - -By default (`consistent` style), the header row of the first table in a document -is used to determine the style that is enforced for every table in the document. -A specific style can be used instead (`leading_and_trailing`, `leading_only`, -`no_leading_or_trailing`, `trailing_only`). - -This table's header row has leading and trailing pipes, but its delimiter row is -missing the trailing pipe and its first row of cells is missing the leading -pipe: - -```markdown -| Header | Header | -| ------ | ------ - Cell | Cell | -``` - -To fix these issues, make sure there is a pipe character at the beginning and -end of every row: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and may also -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table -``` - -Rationale: Some parsers have difficulty with tables that are missing their -leading or trailing pipe characters. The use of leading/trailing pipes can also -help provide visual clarity. - -[gfm-table-055]: https://github.github.com/gfm/#tables-extension- - - - -## `MD056` - Table column count - -Tags: `table` - -Aliases: `table-column-count` - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] -does not have the same number of cells in every row. - -This table's second data row has too few cells and its third data row has too -many cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | -| Cell | Cell | Cell | -``` - -To fix these issues, ensure every row has the same number of cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | Cell | -| Cell | Cell | -``` - -Note that a table's header row and its delimiter row must have the same number -of cells or it will not be recognized as a table (per specification). - -Rationale: Extra cells in a row are usually not shown, so their data is lost. -Missing cells in a row create holes in the table and suggest an omission. - -[gfm-table-056]: https://github.github.com/gfm/#tables-extension- - - - -## `MD058` - Tables should be surrounded by blank lines - -Tags: `table` - -Aliases: `blanks-around-tables` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when tables are either not preceded or not followed by a -blank line: - -```markdown -Some text -| Header | Header | -| ------ | ------ | -| Cell | Cell | -> Blockquote -``` - -To fix violations of this rule, ensure that all tables have a blank line both -before and after (except when the table is at the very beginning or end of the -document): - -```markdown -Some text - -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -> Blockquote -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and will not -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table and the next line is blank - -Some text -``` - -Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse -tables that don't have blank lines before and after them. - - diff --git a/node_modules/markdownlint/doc/md001.md b/node_modules/markdownlint/doc/md001.md deleted file mode 100644 index 72eff27136..0000000000 --- a/node_modules/markdownlint/doc/md001.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD001` - Heading levels should only increment by one level at a time - -Tags: `headings` - -Aliases: `heading-increment` - -This rule is triggered when you skip heading levels in a Markdown document, for -example: - -```markdown -# Heading 1 - -### Heading 3 - -We skipped out a 2nd level heading in this document -``` - -When using multiple heading levels, nested headings should increase by only one -level at a time: - -```markdown -# Heading 1 - -## Heading 2 - -### Heading 3 - -#### Heading 4 - -## Another Heading 2 - -### Another Heading 3 -``` - -Rationale: Headings represent the structure of a document and can be confusing -when skipped - especially for accessibility scenarios. More information: -. diff --git a/node_modules/markdownlint/doc/md003.md b/node_modules/markdownlint/doc/md003.md deleted file mode 100644 index 82da87755a..0000000000 --- a/node_modules/markdownlint/doc/md003.md +++ /dev/null @@ -1,59 +0,0 @@ -# `MD003` - Heading style - -Tags: `headings` - -Aliases: `heading-style` - -Parameters: - -- `style`: Heading style (`string`, default `consistent`, values `atx` / - `atx_closed` / `consistent` / `setext` / `setext_with_atx` / - `setext_with_atx_closed`) - -This rule is triggered when different heading styles are used in the same -document: - -```markdown -# ATX style H1 - -## Closed ATX style H2 ## - -Setext style H1 -=============== -``` - -To fix the issue, use consistent heading styles throughout the document: - -```markdown -# ATX style H1 - -## ATX style H2 -``` - -The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style -headings of level 3 or more in documents with setext-style headings (which only -support level 1 and 2 headings): - -```markdown -Setext style H1 -=============== - -Setext style H2 ---------------- - -### ATX style H3 -``` - -Note: The configured heading style can be a specific style to require (`atx`, -`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can -require that all heading styles match the first heading style via `consistent`. - -Note: The placement of a horizontal rule directly below a line of text can -trigger this rule by turning that text into a level 2 setext-style heading: - -```markdown -A line of text followed by a horizontal rule becomes a heading ---- -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md004.md b/node_modules/markdownlint/doc/md004.md deleted file mode 100644 index fa1576b5ac..0000000000 --- a/node_modules/markdownlint/doc/md004.md +++ /dev/null @@ -1,50 +0,0 @@ -# `MD004` - Unordered list style - -Tags: `bullet`, `ul` - -Aliases: `ul-style` - -Parameters: - -- `style`: List style (`string`, default `consistent`, values `asterisk` / - `consistent` / `dash` / `plus` / `sublist`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for unordered -list items do not match the configured unordered list style: - -```markdown -* Item 1 -+ Item 2 -- Item 3 -``` - -To fix this issue, use the configured style for list items throughout the -document: - -```markdown -* Item 1 -* Item 2 -* Item 3 -``` - -The configured list style can ensure all list styling is a specific symbol -(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that -differs from its parent list (`sublist`), or ensure all list styles match the -first list style (`consistent`). - -For example, the following is valid for the `sublist` style because the -outer-most indent uses asterisk, the middle indent uses plus, and the inner-most -indent uses dash: - -```markdown -* Item 1 - + Item 2 - - Item 3 - + Item 4 -* Item 4 - + Item 5 -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md005.md b/node_modules/markdownlint/doc/md005.md deleted file mode 100644 index 375b643886..0000000000 --- a/node_modules/markdownlint/doc/md005.md +++ /dev/null @@ -1,53 +0,0 @@ -# `MD005` - Inconsistent indentation for list items at the same level - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `list-indent` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are parsed as being at the same level, -but don't have the same indentation: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * A misaligned item -``` - -Usually, this rule will be triggered because of a typo. Correct the indentation -for the list to fix it: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * Nested Item 3 -``` - -Sequentially-ordered list markers are usually left-aligned such that all items -have the same starting column: - -```markdown -... -8. Item -9. Item -10. Item -11. Item -... -``` - -This rule also supports right-alignment of list markers such that all items have -the same ending column: - -```markdown -... - 8. Item - 9. Item -10. Item -11. Item -... -``` - -Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md007.md b/node_modules/markdownlint/doc/md007.md deleted file mode 100644 index 7dd7ed7165..0000000000 --- a/node_modules/markdownlint/doc/md007.md +++ /dev/null @@ -1,52 +0,0 @@ -# `MD007` - Unordered list indentation - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `ul-indent` - -Parameters: - -- `indent`: Spaces for indent (`integer`, default `2`) -- `start_indent`: Spaces for first level indent (when start_indented is set) - (`integer`, default `2`) -- `start_indented`: Whether to indent the first level of the list (`boolean`, - default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are not indented by the configured -number of spaces (default: 2). - -Example: - -```markdown -* List item - * Nested list item indented by 3 spaces -``` - -Corrected Example: - -```markdown -* List item - * Nested list item indented by 2 spaces -``` - -Note: This rule applies to a sublist only if its parent lists are all also -unordered (otherwise, extra indentation of ordered lists interferes with the -rule). - -The `start_indented` parameter allows the first level of lists to be indented by -the configured number of spaces rather than starting at zero. The `start_indent` -parameter allows the first level of lists to be indented by a different number -of spaces than the rest (ignored when `start_indented` is not set). - -Rationale: Indenting by 2 spaces allows the content of a nested list to be in -line with the start of the content of the parent list when a single space is -used after the list marker. Indenting by 4 spaces is consistent with code blocks -and simpler for editors to implement. Additionally, this can be a compatibility -issue for other Markdown parsers, which require 4-space indents. More -information: [Markdown Style Guide][markdown-style-guide]. - -Note: See [Prettier.md](Prettier.md) for compatibility information. - -[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists diff --git a/node_modules/markdownlint/doc/md009.md b/node_modules/markdownlint/doc/md009.md deleted file mode 100644 index 180008bc71..0000000000 --- a/node_modules/markdownlint/doc/md009.md +++ /dev/null @@ -1,51 +0,0 @@ -# `MD009` - Trailing spaces - -Tags: `whitespace` - -Aliases: `no-trailing-spaces` - -Parameters: - -- `br_spaces`: Spaces for line break (`integer`, default `2`) -- `list_item_empty_lines`: Allow spaces for empty lines in list items - (`boolean`, default `false`) -- `strict`: Include unnecessary breaks (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any lines that end with unexpected whitespace. To fix -this, remove the trailing space from the end of the line. - -Note: Trailing space is allowed in indented and fenced code blocks because some -languages require it. - -The `br_spaces` parameter allows an exception to this rule for a specific number -of trailing spaces, typically used to insert an explicit line break. The default -value allows 2 spaces to indicate a hard break (\
      element). - -Note: You must set `br_spaces` to a value >= 2 for this parameter to take -effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing -spaces. - -By default, this rule will not trigger when the allowed number of spaces is -used, even when it doesn't create a hard break (for example, at the end of a -paragraph). To report such instances as well, set the `strict` parameter to -`true`. - -```markdown -Text text text -text[2 spaces] -``` - -Using spaces to indent blank lines inside a list item is usually not necessary, -but some parsers require it. Set the `list_item_empty_lines` parameter to `true` -to allow this (even when `strict` is `true`): - -```markdown -- list item text - [2 spaces] - list item text -``` - -Rationale: Except when being used to create a line break, trailing whitespace -has no purpose and does not affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md010.md b/node_modules/markdownlint/doc/md010.md deleted file mode 100644 index 95c0ce29f8..0000000000 --- a/node_modules/markdownlint/doc/md010.md +++ /dev/null @@ -1,56 +0,0 @@ -# `MD010` - Hard tabs - -Tags: `hard_tab`, `whitespace` - -Aliases: `no-hard-tabs` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default - `[]`) -- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered by any lines that contain hard tab characters instead -of using spaces for indentation. To fix this, replace any hard tab characters -with spaces instead. - -Example: - - - -```markdown -Some text - - * hard tab character used to indent the list item -``` - - - -Corrected example: - -```markdown -Some text - - * Spaces used to indent the list item instead -``` - -You have the option to exclude this rule for code blocks and spans. To do so, -set the `code_blocks` parameter to `false`. Code blocks and spans are included -by default since handling of tabs by Markdown tools can be inconsistent (e.g., -using 4 vs. 8 spaces). - -When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), -the `ignore_code_languages` parameter can be set to a list of languages that -should be ignored (i.e., hard tabs will be allowed, though not required). This -makes it easier for documents to include code for languages that require hard -tabs. - -By default, violations of this rule are fixed by replacing the tab with 1 space -character. To use a different number of spaces, set the `spaces_per_tab` -parameter to the desired value. - -Rationale: Hard tabs are often rendered inconsistently by different editors and -can be harder to work with than spaces. diff --git a/node_modules/markdownlint/doc/md011.md b/node_modules/markdownlint/doc/md011.md deleted file mode 100644 index d574b34aa3..0000000000 --- a/node_modules/markdownlint/doc/md011.md +++ /dev/null @@ -1,30 +0,0 @@ -# `MD011` - Reversed link syntax - -Tags: `links` - -Aliases: `no-reversed-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when text that appears to be a link is encountered, but -where the syntax appears to have been reversed (the `[]` and `()` are -reversed): - -```markdown -(Incorrect link syntax)[https://www.example.com/] -``` - -To fix this, swap the `[]` and `()` around: - -```markdown -[Correct link syntax](https://www.example.com/) -``` - -Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style -footnotes do not trigger this rule: - -```markdown -For (example)[^1] -``` - -Rationale: Reversed links are not rendered as usable links. diff --git a/node_modules/markdownlint/doc/md012.md b/node_modules/markdownlint/doc/md012.md deleted file mode 100644 index 438c9fa643..0000000000 --- a/node_modules/markdownlint/doc/md012.md +++ /dev/null @@ -1,38 +0,0 @@ -# `MD012` - Multiple consecutive blank lines - -Tags: `blank_lines`, `whitespace` - -Aliases: `no-multiple-blanks` - -Parameters: - -- `maximum`: Consecutive blank lines (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are multiple consecutive blank lines in the -document: - -```markdown -Some text here - - -Some more text here -``` - -To fix this, delete the offending lines: - -```markdown -Some text here - -Some more text here -``` - -Note: this rule will not be triggered if there are multiple consecutive blank -lines inside code blocks. - -Note: The `maximum` parameter can be used to configure the maximum number of -consecutive blank lines. - -Rationale: Except in a code block, blank lines serve no purpose and do not -affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md013.md b/node_modules/markdownlint/doc/md013.md deleted file mode 100644 index e4ac8ac123..0000000000 --- a/node_modules/markdownlint/doc/md013.md +++ /dev/null @@ -1,58 +0,0 @@ -# `MD013` - Line length - -Tags: `line_length` - -Aliases: `line-length` - -Parameters: - -- `code_block_line_length`: Number of characters for code blocks (`integer`, - default `80`) -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `heading_line_length`: Number of characters for headings (`integer`, default - `80`) -- `headings`: Include headings (`boolean`, default `true`) -- `line_length`: Number of characters (`integer`, default `80`) -- `stern`: Stern length checking (`boolean`, default `false`) -- `strict`: Strict length checking (`boolean`, default `false`) -- `tables`: Include tables (`boolean`, default `true`) - -This rule is triggered when there are lines that are longer than the -configured `line_length` (default: 80 characters). To fix this, split the line -up into multiple lines. To set a different maximum length for headings, use -`heading_line_length`. To set a different maximum length for code blocks, use -`code_block_line_length` - -This rule has an exception when there is no whitespace beyond the configured -line length. This allows you to include items such as long URLs without being -forced to break them in the middle. To disable this exception, set the `strict` -parameter to `true` and an issue will be reported when any line is too long. To -warn for lines that are too long and could be fixed but allow long lines -without spaces, set the `stern` parameter to `true`. - -For example (assuming normal behavior): - -```markdown -IF THIS LINE IS THE MAXIMUM LENGTH -This line is okay because there are-no-spaces-beyond-that-length -This line is a violation because there are spaces beyond that length -This-line-is-okay-because-there-are-no-spaces-anywhere-within -``` - -In `strict` mode, the last three lines above are all violations. In `stern` -mode, the middle two lines above are both violations, but the last is okay. - -You have the option to exclude this rule for code blocks, tables, or headings. -To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. - -Code blocks are included in this rule by default since it is often a -requirement for document readability, and tentatively compatible with code -rules. Still, some languages do not lend themselves to short lines. - -Lines with link/image reference definitions and standalone lines (i.e., not part -of a paragraph) with only a link/image (possibly using (strong) emphasis) are -always exempted from this rule (even in `strict` mode) because there is often no -way to split such lines without breaking the URL. - -Rationale: Extremely long lines can be difficult to work with in some editors. -More information: . diff --git a/node_modules/markdownlint/doc/md014.md b/node_modules/markdownlint/doc/md014.md deleted file mode 100644 index 0786dfa343..0000000000 --- a/node_modules/markdownlint/doc/md014.md +++ /dev/null @@ -1,54 +0,0 @@ -# `MD014` - Dollar signs used before commands without showing output - -Tags: `code` - -Aliases: `commands-show-output` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are code blocks showing shell commands to be -typed, and *all* of the shell commands are preceded by dollar signs ($): - - - -```markdown -$ ls -$ cat foo -$ less bar -``` - - - -The dollar signs are unnecessary in this situation, and should not be -included: - -```markdown -ls -cat foo -less bar -``` - -Showing output for commands preceded by dollar signs does not trigger this rule: - -```markdown -$ ls -foo bar -$ cat foo -Hello world -$ cat bar -baz -``` - -Because some commands do not produce output, it is not a violation if *some* -commands do not have output: - -```markdown -$ mkdir test -mkdir: created directory 'test' -$ ls test -``` - -Rationale: It is easier to copy/paste and less noisy if the dollar signs -are omitted when they are not needed. See - -for more information. diff --git a/node_modules/markdownlint/doc/md018.md b/node_modules/markdownlint/doc/md018.md deleted file mode 100644 index 870297a8aa..0000000000 --- a/node_modules/markdownlint/doc/md018.md +++ /dev/null @@ -1,27 +0,0 @@ -# `MD018` - No space after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-missing-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing after the hash characters -in an atx style heading: - -```markdown -#Heading 1 - -##Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md019.md b/node_modules/markdownlint/doc/md019.md deleted file mode 100644 index 4bcb44f643..0000000000 --- a/node_modules/markdownlint/doc/md019.md +++ /dev/null @@ -1,28 +0,0 @@ -# `MD019` - Multiple spaces after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-multiple-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in an atx style heading: - -```markdown -# Heading 1 - -## Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Extra space has no purpose and does not affect the rendering of -content. diff --git a/node_modules/markdownlint/doc/md020.md b/node_modules/markdownlint/doc/md020.md deleted file mode 100644 index f711b26036..0000000000 --- a/node_modules/markdownlint/doc/md020.md +++ /dev/null @@ -1,29 +0,0 @@ -# `MD020` - No space inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-missing-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing inside the hash characters -in a closed atx style heading: - -```markdown -#Heading 1# - -##Heading 2## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading is missing spaces. - -Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md021.md b/node_modules/markdownlint/doc/md021.md deleted file mode 100644 index 5aa99a615f..0000000000 --- a/node_modules/markdownlint/doc/md021.md +++ /dev/null @@ -1,31 +0,0 @@ -# `MD021` - Multiple spaces inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-multiple-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in a closed atx style heading: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading contains multiple -spaces. - -Rationale: Extra space has no purpose and does not affect the rendering of -content. diff --git a/node_modules/markdownlint/doc/md022.md b/node_modules/markdownlint/doc/md022.md deleted file mode 100644 index c05edcc05c..0000000000 --- a/node_modules/markdownlint/doc/md022.md +++ /dev/null @@ -1,52 +0,0 @@ -# `MD022` - Headings should be surrounded by blank lines - -Tags: `blank_lines`, `headings` - -Aliases: `blanks-around-headings` - -Parameters: - -- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) -- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when headings (any style) are either not preceded or not -followed by at least one blank line: - -```markdown -# Heading 1 -Some text - -Some more text -## Heading 2 -``` - -To fix this, ensure that all headings have a blank line both before and after -(except where the heading is at the beginning or end of the document): - -```markdown -# Heading 1 - -Some text - -Some more text - -## Heading 2 -``` - -The `lines_above` and `lines_below` parameters can be used to specify a -different number of blank lines (including `0`) above or below each heading. -If the value `-1` is used for either parameter, any number of blank lines is -allowed. To customize the number of lines above or below each heading level -individually, specify a `number[]` where values correspond to heading levels -1-6 (in order). - -Notes: If `lines_above` or `lines_below` are configured to require more than one -blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This -rule checks for *at least* as many blank lines as specified; any extra blank -lines are ignored. - -Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, -will not parse headings that don't have a blank line before, and will parse them -as regular text. diff --git a/node_modules/markdownlint/doc/md023.md b/node_modules/markdownlint/doc/md023.md deleted file mode 100644 index 1644451b49..0000000000 --- a/node_modules/markdownlint/doc/md023.md +++ /dev/null @@ -1,33 +0,0 @@ -# `MD023` - Headings must start at the beginning of the line - -Tags: `headings`, `spaces` - -Aliases: `heading-start-left` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a heading is indented by one or more spaces: - -```markdown -Some text - - # Indented heading -``` - -To fix this, ensure that all headings start at the beginning of the line: - -```markdown -Some text - -# Heading -``` - -Note that scenarios like block quotes "indent" the start of the line, so the -following is also correct: - -```markdown -> # Heading in Block Quote -``` - -Rationale: Headings that don't start at the beginning of the line will not be -parsed as headings, and will instead appear as regular text. diff --git a/node_modules/markdownlint/doc/md024.md b/node_modules/markdownlint/doc/md024.md deleted file mode 100644 index 5c26c71201..0000000000 --- a/node_modules/markdownlint/doc/md024.md +++ /dev/null @@ -1,44 +0,0 @@ -# `MD024` - Multiple headings with the same content - -Tags: `headings` - -Aliases: `no-duplicate-heading` - -Parameters: - -- `siblings_only`: Only check sibling headings (`boolean`, default `false`) - -This rule is triggered if there are multiple headings in the document that have -the same text: - -```markdown -# Some text - -## Some text -``` - -To fix this, ensure that the content of each heading is different: - -```markdown -# Some text - -## Some more text -``` - -If the parameter `siblings_only` is set to `true`, duplication is allowed for -headings with different parents (as is common in changelogs): - -```markdown -# Change log - -## 1.0.0 - -### Features - -## 2.0.0 - -### Features -``` - -Rationale: Some Markdown parsers generate anchors for headings based on the -heading name; headings with the same content can cause problems with that. diff --git a/node_modules/markdownlint/doc/md025.md b/node_modules/markdownlint/doc/md025.md deleted file mode 100644 index 7c764b33d5..0000000000 --- a/node_modules/markdownlint/doc/md025.md +++ /dev/null @@ -1,49 +0,0 @@ -# `MD025` - Multiple top-level headings in the same document - -Tags: `headings` - -Aliases: `single-h1`, `single-title` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is triggered when a top-level heading is in use (the first line of -the file is an h1 heading), and more than one h1 heading is in use in the -document: - -```markdown -# Top level heading - -# Another top-level heading -``` - -To fix, structure your document so there is a single h1 heading that is -the title for the document. Subsequent headings must be -lower-level headings (h2, h3, etc.): - -```markdown -# Title - -## Heading - -## Another heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule treats -that as a top level heading and will report a violation for any subsequent -top-level headings. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: A top-level heading is an h1 on the first line of the file, and -serves as the title for the document. If this convention is in use, then there -can not be more than one title for the document, and the entire document should -be contained within this heading. diff --git a/node_modules/markdownlint/doc/md026.md b/node_modules/markdownlint/doc/md026.md deleted file mode 100644 index cf7161cda7..0000000000 --- a/node_modules/markdownlint/doc/md026.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD026` - Trailing punctuation in heading - -Tags: `headings` - -Aliases: `no-trailing-punctuation` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any heading that has one of the specified normal or -full-width punctuation characters as the last character in the line: - -```markdown -# This is a heading. -``` - -To fix this, remove the trailing punctuation: - -```markdown -# This is a heading -``` - -Note: The `punctuation` parameter can be used to specify what characters count -as punctuation at the end of a heading. For example, you can change it to -`".,;:"` to allow headings that end with an exclamation point. `?` is -allowed by default because of how common it is in headings of FAQ-style -documents. Setting the `punctuation` parameter to `""` allows all characters - -and is equivalent to disabling the rule. - -Note: The trailing semicolon of [HTML entity references][html-entity-references] -like `©`, `©`, and `©` is ignored by this rule. - -Rationale: Headings are not meant to be full sentences. More information: -[Punctuation at the end of headers][end-punctuation]. - -[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers -[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references diff --git a/node_modules/markdownlint/doc/md027.md b/node_modules/markdownlint/doc/md027.md deleted file mode 100644 index 0b910992f4..0000000000 --- a/node_modules/markdownlint/doc/md027.md +++ /dev/null @@ -1,24 +0,0 @@ -# `MD027` - Multiple spaces after blockquote symbol - -Tags: `blockquote`, `indentation`, `whitespace` - -Aliases: `no-multiple-space-blockquote` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when blockquotes have more than one space after the -blockquote (`>`) symbol: - -```markdown -> This is a blockquote with bad indentation -> there should only be one. -``` - -To fix, remove any extraneous space: - -```markdown -> This is a blockquote with correct -> indentation. -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md028.md b/node_modules/markdownlint/doc/md028.md deleted file mode 100644 index 94972ed275..0000000000 --- a/node_modules/markdownlint/doc/md028.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD028` - Blank line inside blockquote - -Tags: `blockquote`, `whitespace` - -Aliases: `no-blanks-blockquote` - -This rule is triggered when two blockquote blocks are separated by nothing -except for a blank line: - -```markdown -> This is a blockquote -> which is immediately followed by - -> this blockquote. Unfortunately -> In some parsers, these are treated as the same blockquote. -``` - -To fix this, ensure that any blockquotes that are right next to each other -have some text in between: - -```markdown -> This is a blockquote. - -And Jimmy also said: - -> This too is a blockquote. -``` - -Alternatively, if they are supposed to be the same quote, then add the -blockquote symbol at the beginning of the blank line: - -```markdown -> This is a blockquote. -> -> This is the same blockquote. -``` - -Rationale: Some Markdown parsers will treat two blockquotes separated by one -or more blank lines as the same blockquote, while others will treat them as -separate blockquotes. diff --git a/node_modules/markdownlint/doc/md029.md b/node_modules/markdownlint/doc/md029.md deleted file mode 100644 index 1f00e7761c..0000000000 --- a/node_modules/markdownlint/doc/md029.md +++ /dev/null @@ -1,98 +0,0 @@ -# `MD029` - Ordered list item prefix - -Tags: `ol` - -Aliases: `ol-prefix` - -Parameters: - -- `style`: List style (`string`, default `one_or_ordered`, values `one` / - `one_or_ordered` / `ordered` / `zero`) - -This rule is triggered for ordered lists that do not either start with '1.' or -do not have a prefix that increases in numerical order (depending on the -configured style). The less-common pattern of using '0.' as a first prefix or -for all prefixes is also supported. - -Example valid list if the style is configured as 'one': - -```markdown -1. Do this. -1. Do that. -1. Done. -``` - -Examples of valid lists if the style is configured as 'ordered': - -```markdown -1. Do this. -2. Do that. -3. Done. -``` - -```markdown -0. Do this. -1. Do that. -2. Done. -``` - -All three examples are valid when the style is configured as 'one_or_ordered'. - -Example valid list if the style is configured as 'zero': - -```markdown -0. Do this. -0. Do that. -0. Done. -``` - -Example invalid list for all styles: - -```markdown -1. Do this. -3. Done. -``` - -This rule supports 0-prefixing ordered list items for uniform indentation: - -```markdown -... -08. Item -09. Item -10. Item -11. Item -... -``` - -Note: This rule will report violations for cases like the following where an -improperly-indented code block (or similar) appears between two list items and -"breaks" the list in two: - - - -~~~markdown -1. First list - -```text -Code block -``` - -1. Second list -~~~ - -The fix is to indent the code block so it becomes part of the preceding list -item as intended: - -~~~markdown -1. First list - - ```text - Code block - ``` - -2. Still first list -~~~ - - - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md030.md b/node_modules/markdownlint/doc/md030.md deleted file mode 100644 index 59454d2983..0000000000 --- a/node_modules/markdownlint/doc/md030.md +++ /dev/null @@ -1,82 +0,0 @@ -# `MD030` - Spaces after list markers - -Tags: `ol`, `ul`, `whitespace` - -Aliases: `list-marker-space` - -Parameters: - -- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) -- `ol_single`: Spaces for single-line ordered list items (`integer`, default - `1`) -- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default - `1`) -- `ul_single`: Spaces for single-line unordered list items (`integer`, default - `1`) - -Fixable: Some violations can be fixed by tooling - -This rule checks for the number of spaces between a list marker (e.g. '`-`', -'`*`', '`+`' or '`1.`') and the text of the list item. - -The number of spaces checked for depends on the document style in use, but the -default is 1 space after any list marker: - -```markdown -* Foo -* Bar -* Baz - -1. Foo -1. Bar -1. Baz - -1. Foo - * Bar -1. Baz -``` - -A document style may change the number of spaces after unordered list items -and ordered list items independently, as well as based on whether the content -of every item in the list consists of a single paragraph or multiple -paragraphs (including sub-lists and code blocks). - -For example, the style guide at - -specifies that 1 space after the list marker should be used if every item in -the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered -and unordered lists respectively) if there are multiple paragraphs of content -inside the list: - -```markdown -* Foo -* Bar -* Baz -``` - -vs. - -```markdown -* Foo - - Second paragraph - -* Bar -``` - -or - -```markdown -1. Foo - - Second paragraph - -1. Bar -``` - -To fix this, ensure the correct number of spaces are used after the list marker -for your selected document style. - -Rationale: Violations of this rule can lead to improperly rendered content. - -Note: See [Prettier.md](Prettier.md) for compatibility information. diff --git a/node_modules/markdownlint/doc/md031.md b/node_modules/markdownlint/doc/md031.md deleted file mode 100644 index 9663e5da04..0000000000 --- a/node_modules/markdownlint/doc/md031.md +++ /dev/null @@ -1,50 +0,0 @@ -# `MD031` - Fenced code blocks should be surrounded by blank lines - -Tags: `blank_lines`, `code` - -Aliases: `blanks-around-fences` - -Parameters: - -- `list_items`: Include list items (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when fenced code blocks are either not preceded or not -followed by a blank line: - -````markdown -Some text -``` -Code block -``` - -``` -Another code block -``` -Some more text -```` - -To fix this, ensure that all fenced code blocks have a blank line both before -and after (except where the block is at the beginning or end of the document): - -````markdown -Some text - -``` -Code block -``` - -``` -Another code block -``` - -Some more text -```` - -Set the `list_items` parameter to `false` to disable this rule for list items. -Disabling this behavior for lists can be useful if it is necessary to create a -[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. - -Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will -not parse fenced code blocks that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/doc/md032.md b/node_modules/markdownlint/doc/md032.md deleted file mode 100644 index 41c8b41115..0000000000 --- a/node_modules/markdownlint/doc/md032.md +++ /dev/null @@ -1,55 +0,0 @@ -# `MD032` - Lists should be surrounded by blank lines - -Tags: `blank_lines`, `bullet`, `ol`, `ul` - -Aliases: `blanks-around-lists` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when lists (of any kind) are either not preceded or not -followed by a blank line: - -```markdown -Some text -* List item -* List item - -1. List item -2. List item -*** -``` - -In the first case above, text immediately precedes the unordered list. In the -second case above, a thematic break immediately follows the ordered list. To fix -violations of this rule, ensure that all lists have a blank line both before and -after (except when the list is at the very beginning or end of the document): - -```markdown -Some text - -* List item -* List item - -1. List item -2. List item - -*** -``` - -Note that the following case is **not** a violation of this rule: - -```markdown -1. List item - More item 1 -2. List item -More item 2 -``` - -Although it is not indented, the text "More item 2" is referred to as a -[lazy continuation line][lazy-continuation] and considered part of the second -list item. - -Rationale: In addition to aesthetic reasons, some parsers, including kramdown, -will not parse lists that don't have blank lines before and after them. - -[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line diff --git a/node_modules/markdownlint/doc/md033.md b/node_modules/markdownlint/doc/md033.md deleted file mode 100644 index d2f5ddecb2..0000000000 --- a/node_modules/markdownlint/doc/md033.md +++ /dev/null @@ -1,27 +0,0 @@ -# `MD033` - Inline HTML - -Tags: `html` - -Aliases: `no-inline-html` - -Parameters: - -- `allowed_elements`: Allowed elements (`string[]`, default `[]`) - -This rule is triggered whenever raw HTML is used in a Markdown document: - -```markdown -

      Inline HTML heading

      -``` - -To fix this, use 'pure' Markdown instead of including raw HTML: - -```markdown -# Markdown heading -``` - -Note: To allow specific HTML elements, use the `allowed_elements` parameter. - -Rationale: Raw HTML is allowed in Markdown, but this rule is included for -those who want their documents to only include "pure" Markdown, or for those -who are rendering Markdown documents into something other than HTML. diff --git a/node_modules/markdownlint/doc/md034.md b/node_modules/markdownlint/doc/md034.md deleted file mode 100644 index dc9c3cf618..0000000000 --- a/node_modules/markdownlint/doc/md034.md +++ /dev/null @@ -1,55 +0,0 @@ -# `MD034` - Bare URL used - -Tags: `links`, `url` - -Aliases: `no-bare-urls` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered whenever a URL or email address appears without -surrounding angle brackets: - -```markdown -For more info, visit https://www.example.com/ or email user@example.com. -``` - -To fix this, add angle brackets around the URL or email address: - -```markdown -For more info, visit or email . -``` - -If a URL or email address contains non-ASCII characters, it may be not be -handled as intended even when angle brackets are present. In such cases, -[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used -to comply with the required syntax for URL and email. - -Note: To include a bare URL or email without it being converted into a link, -wrap it in a code span: - -```markdown -Not a clickable link: `https://www.example.com` -``` - -Note: The following scenario does not trigger this rule because it could be a -shortcut link: - -```markdown -[https://www.example.com] -``` - -Note: The following syntax triggers this rule because the nested link could be -a shortcut link (which takes precedence): - -```markdown -[text [shortcut] text](https://example.com) -``` - -To avoid this, escape both inner brackets: - -```markdown -[link \[text\] link](https://example.com) -``` - -Rationale: Without angle brackets, a bare URL or email isn't converted into a -link by some Markdown parsers. diff --git a/node_modules/markdownlint/doc/md035.md b/node_modules/markdownlint/doc/md035.md deleted file mode 100644 index ee74516cbc..0000000000 --- a/node_modules/markdownlint/doc/md035.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD035` - Horizontal rule style - -Tags: `hr` - -Aliases: `hr-style` - -Parameters: - -- `style`: Horizontal rule style (`string`, default `consistent`) - -This rule is triggered when inconsistent styles of horizontal rules are used -in the document: - -```markdown ---- - -- - - - -*** - -* * * - -**** -``` - -To fix this, use the same horizontal rule everywhere: - -```markdown ---- - ---- -``` - -The configured style can ensure all horizontal rules use a specific string or it -can ensure all horizontal rules match the first horizontal rule (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md036.md b/node_modules/markdownlint/doc/md036.md deleted file mode 100644 index 1518904f79..0000000000 --- a/node_modules/markdownlint/doc/md036.md +++ /dev/null @@ -1,45 +0,0 @@ -# `MD036` - Emphasis used instead of a heading - -Tags: `emphasis`, `headings` - -Aliases: `no-emphasis-as-heading` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) - -This check looks for instances where emphasized (i.e. bold or italic) text is -used to separate sections, where a heading should be used instead: - -```markdown -**My document** - -Lorem ipsum dolor sit amet... - -_Another section_ - -Consectetur adipiscing elit, sed do eiusmod. -``` - -To fix this, use Markdown headings instead of emphasized text to denote -sections: - -```markdown -# My document - -Lorem ipsum dolor sit amet... - -## Another section - -Consectetur adipiscing elit, sed do eiusmod. -``` - -Note: This rule looks for single-line paragraphs that consist entirely -of emphasized text. It won't fire on emphasis used within regular text, -multi-line emphasized paragraphs, or paragraphs ending in punctuation -(normal or full-width). Similarly to rule MD026, you can configure what -characters are recognized as punctuation. - -Rationale: Using emphasis instead of a heading prevents tools from inferring -the structure of a document. More information: -. diff --git a/node_modules/markdownlint/doc/md037.md b/node_modules/markdownlint/doc/md037.md deleted file mode 100644 index c96ba3caf6..0000000000 --- a/node_modules/markdownlint/doc/md037.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD037` - Spaces inside emphasis markers - -Tags: `emphasis`, `whitespace` - -Aliases: `no-space-in-emphasis` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when emphasis markers (bold, italic) are used, but they -have spaces between the markers and the text: - -```markdown -Here is some ** bold ** text. - -Here is some * italic * text. - -Here is some more __ bold __ text. - -Here is some more _ italic _ text. -``` - -To fix this, remove the spaces around the emphasis markers: - -```markdown -Here is some **bold** text. - -Here is some *italic* text. - -Here is some more __bold__ text. - -Here is some more _italic_ text. -``` - -Rationale: Emphasis is only parsed as such when the asterisks/underscores -aren't surrounded by spaces. This rule attempts to detect where -they were surrounded by spaces, but it appears that emphasized text was -intended by the author. diff --git a/node_modules/markdownlint/doc/md038.md b/node_modules/markdownlint/doc/md038.md deleted file mode 100644 index 86cf525961..0000000000 --- a/node_modules/markdownlint/doc/md038.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD038` - Spaces inside code span elements - -Tags: `code`, `whitespace` - -Aliases: `no-space-in-code` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered for code span elements that have spaces adjacent to the -backticks: - -```markdown -`some text ` - -` some text` -``` - -To fix this, remove any spaces adjacent to the backticks: - -```markdown -`some text` -``` - -Note: A single leading and trailing space is allowed by the specification and -automatically trimmed (in order to allow for code spans that embed backticks): - -```markdown -`` `backticks` `` -``` - -Note: A single leading or trailing space is allowed if used to separate code -span markers from an embedded backtick (though the space is not trimmed): - -```markdown -`` ` embedded backtick`` -``` - -Rationale: Violations of this rule are usually unintentional and may lead to -improperly-rendered content. If spaces beside backticks are intentional, this -rule can be disabled for that line or file. diff --git a/node_modules/markdownlint/doc/md039.md b/node_modules/markdownlint/doc/md039.md deleted file mode 100644 index 8e854cde2f..0000000000 --- a/node_modules/markdownlint/doc/md039.md +++ /dev/null @@ -1,21 +0,0 @@ -# `MD039` - Spaces inside link text - -Tags: `links`, `whitespace` - -Aliases: `no-space-in-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on links that have spaces surrounding the link text: - -```markdown -[ a link ](https://www.example.com/) -``` - -To fix this, remove the spaces surrounding the link text: - -```markdown -[a link](https://www.example.com/) -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md040.md b/node_modules/markdownlint/doc/md040.md deleted file mode 100644 index 5272fc0986..0000000000 --- a/node_modules/markdownlint/doc/md040.md +++ /dev/null @@ -1,52 +0,0 @@ -# `MD040` - Fenced code blocks should have a language specified - -Tags: `code`, `language` - -Aliases: `fenced-code-language` - -Parameters: - -- `allowed_languages`: List of languages (`string[]`, default `[]`) -- `language_only`: Require language only (`boolean`, default `false`) - -This rule is triggered when fenced code blocks are used, but a language isn't -specified: - -````markdown -``` -#!/bin/bash -echo Hello world -``` -```` - -To fix this, add a language specifier to the code block: - -````markdown -```bash -#!/bin/bash -echo Hello world -``` -```` - -To display a code block without syntax highlighting, use: - -````markdown -```text -Plain text in a code block -``` -```` - -You can configure the `allowed_languages` parameter to specify a list of -languages code blocks could use. Languages are case sensitive. The default value -is `[]` which means any language specifier is valid. - -You can prevent extra data from being present in the info string of fenced code -blocks. To do so, set the `language_only` parameter to `true`. - - -Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: -`ruby startline=3`) will trigger this rule. - -Rationale: Specifying a language improves content rendering by using the -correct syntax highlighting for code. More information: -. diff --git a/node_modules/markdownlint/doc/md041.md b/node_modules/markdownlint/doc/md041.md deleted file mode 100644 index 5dfeee130e..0000000000 --- a/node_modules/markdownlint/doc/md041.md +++ /dev/null @@ -1,49 +0,0 @@ -# `MD041` - First line in a file should be a top-level heading - -Tags: `headings` - -Aliases: `first-line-h1`, `first-line-heading` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is intended to ensure documents have a title and is triggered when -the first line in the file isn't a top-level (h1) heading: - -```markdown -This is a file without a heading -``` - -To fix this, add a top-level heading to the beginning of the file: - -```markdown -# File with heading - -This is a file with a top-level heading -``` - -Because it is common for projects on GitHub to use an image for the heading of -`README.md` and that is not well-supported by Markdown, HTML headings are also -permitted by this rule. For example: - -```markdown -

      - -This is a file with a top-level HTML heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule will not -report a violation. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: The top-level heading often acts as the title of a document. More -information: . diff --git a/node_modules/markdownlint/doc/md042.md b/node_modules/markdownlint/doc/md042.md deleted file mode 100644 index df2026a3ce..0000000000 --- a/node_modules/markdownlint/doc/md042.md +++ /dev/null @@ -1,32 +0,0 @@ -# `MD042` - No empty links - -Tags: `links` - -Aliases: `no-empty-links` - -This rule is triggered when an empty link is encountered: - -```markdown -[an empty link]() -``` - -To fix the violation, provide a destination for the link: - -```markdown -[a valid link](https://example.com/) -``` - -Empty fragments will trigger this rule: - -```markdown -[an empty fragment](#) -``` - -But non-empty fragments will not: - -```markdown -[a valid fragment](#fragment) -``` - -Rationale: Empty links do not lead anywhere and therefore don't function as -links. diff --git a/node_modules/markdownlint/doc/md043.md b/node_modules/markdownlint/doc/md043.md deleted file mode 100644 index 8d6267016a..0000000000 --- a/node_modules/markdownlint/doc/md043.md +++ /dev/null @@ -1,69 +0,0 @@ -# `MD043` - Required heading structure - -Tags: `headings` - -Aliases: `required-headings` - -Parameters: - -- `headings`: List of headings (`string[]`, default `[]`) -- `match_case`: Match case of headings (`boolean`, default `false`) - -This rule is triggered when the headings in a file do not match the array of -headings passed to the rule. It can be used to enforce a standard heading -structure for a set of files. - -To require exactly the following structure: - -```markdown -# Head -## Item -### Detail -``` - -Set the `headings` parameter to: - -```json -[ - "# Head", - "## Item", - "### Detail" -] -``` - -To allow optional headings as with the following structure: - -```markdown -# Head -## Item -### Detail (optional) -## Foot -### Notes (optional) -``` - -Use the special value `"*"` meaning "zero or more unspecified headings" or the -special value `"+"` meaning "one or more unspecified headings" and set the -`headings` parameter to: - -```json -[ - "# Head", - "## Item", - "*", - "## Foot", - "*" -] -``` - -When an error is detected, this rule outputs the line number of the first -problematic heading (otherwise, it outputs the last line number of the file). - -Note that while the `headings` parameter uses the "## Text" ATX heading style -for simplicity, a file may use any supported heading style. - -By default, the case of headings in the document is not required to match that -of `headings`. To require that case match exactly, set the `match_case` -parameter to `true`. - -Rationale: Projects may wish to enforce a consistent document structure across -a set of similar content. diff --git a/node_modules/markdownlint/doc/md044.md b/node_modules/markdownlint/doc/md044.md deleted file mode 100644 index e8f34e4804..0000000000 --- a/node_modules/markdownlint/doc/md044.md +++ /dev/null @@ -1,45 +0,0 @@ -# `MD044` - Proper names should have the correct capitalization - -Tags: `spelling` - -Aliases: `proper-names` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `html_elements`: Include HTML elements (`boolean`, default `true`) -- `names`: List of proper names (`string[]`, default `[]`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when any of the strings in the `names` array do not have -the specified capitalization. It can be used to enforce a standard letter case -for the names of projects and products. - -For example, the language "JavaScript" is usually written with both the 'J' and -'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To -enforce the proper capitalization, specify the desired letter case in the -`names` array: - -```json -[ - "JavaScript" -] -``` - -Sometimes a proper name is capitalized differently in certain contexts. In such -cases, add both forms to the `names` array: - -```json -[ - "GitHub", - "github.com" -] -``` - -Set the `code_blocks` parameter to `false` to disable this rule for code blocks -and spans. Set the `html_elements` parameter to `false` to disable this rule -for HTML elements and attributes (such as when using a proper name as part of -a path for `a`/`href` or `img`/`src`). - -Rationale: Incorrect capitalization of proper names is usually a mistake. diff --git a/node_modules/markdownlint/doc/md045.md b/node_modules/markdownlint/doc/md045.md deleted file mode 100644 index 5d214f6f29..0000000000 --- a/node_modules/markdownlint/doc/md045.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD045` - Images should have alternate text (alt text) - -Tags: `accessibility`, `images` - -Aliases: `no-alt-text` - -This rule is triggered when an image is missing alternate text (alt text) -information. - -Alternate text is commonly specified inline as: - -```markdown -![Alternate text](image.jpg) -``` - -Or with reference syntax as: - -```markdown -![Alternate text][ref] - -... - -[ref]: image.jpg "Optional title" -``` - -Or with HTML as: - -```html -Alternate text -``` - -Guidance for writing alternate text is available from the [W3C][w3c], -[Wikipedia][wikipedia], and [other locations][phase2technology]. - -Rationale: Alternate text is important for accessibility and describes the -content of an image for people who may not be able to see it. - -[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses -[w3c]: https://www.w3.org/WAI/alt/ -[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute diff --git a/node_modules/markdownlint/doc/md046.md b/node_modules/markdownlint/doc/md046.md deleted file mode 100644 index 25c9611b68..0000000000 --- a/node_modules/markdownlint/doc/md046.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD046` - Code block style - -Tags: `code` - -Aliases: `code-block-style` - -Parameters: - -- `style`: Block style (`string`, default `consistent`, values `consistent` / - `fenced` / `indented`) - -This rule is triggered when unwanted or different code block styles are used in -the same document. - -In the default configuration this rule reports a violation for the following -document: - - - - Some text. - - # Indented code - - More text. - - ```ruby - # Fenced code - ``` - - More text. - - - -To fix violations of this rule, use a consistent style (either indenting or code -fences). - -The configured code block style can be specific (`fenced`, `indented`) or can -require all code blocks match the first code block (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md047.md b/node_modules/markdownlint/doc/md047.md deleted file mode 100644 index 494937d057..0000000000 --- a/node_modules/markdownlint/doc/md047.md +++ /dev/null @@ -1,34 +0,0 @@ -# `MD047` - Files should end with a single newline character - -Tags: `blank_lines` - -Aliases: `single-trailing-newline` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there is not a single newline character at the end -of a file. - -An example that triggers the rule: - -```markdown -# Heading - -This file ends without a newline.[EOF] -``` - -To fix the violation, add a newline character to the end of the file: - -```markdown -# Heading - -This file ends with a newline. -[EOF] -``` - -Rationale: Some programs have trouble with files that do not end with a newline. - -More information: [What's the point in adding a new line to the end of a -file?][stack-exchange] - -[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file diff --git a/node_modules/markdownlint/doc/md048.md b/node_modules/markdownlint/doc/md048.md deleted file mode 100644 index 3776576019..0000000000 --- a/node_modules/markdownlint/doc/md048.md +++ /dev/null @@ -1,42 +0,0 @@ -# `MD048` - Code fence style - -Tags: `code` - -Aliases: `code-fence-style` - -Parameters: - -- `style`: Code fence style (`string`, default `consistent`, values `backtick` - / `consistent` / `tilde`) - -This rule is triggered when the symbols used in the document for fenced code -blocks do not match the configured code fence style: - -````markdown -```ruby -# Fenced code -``` - -~~~ruby -# Fenced code -~~~ -```` - -To fix this issue, use the configured code fence style throughout the -document: - -````markdown -```ruby -# Fenced code -``` - -```ruby -# Fenced code -``` -```` - -The configured code fence style can be a specific symbol to use (`backtick`, -`tilde`) or it can require all code fences match the first code fence -(`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md049.md b/node_modules/markdownlint/doc/md049.md deleted file mode 100644 index e16316d3bb..0000000000 --- a/node_modules/markdownlint/doc/md049.md +++ /dev/null @@ -1,36 +0,0 @@ -# `MD049` - Emphasis style - -Tags: `emphasis` - -Aliases: `emphasis-style` - -Parameters: - -- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for emphasis do not -match the configured emphasis style: - -```markdown -*Text* -_Text_ -``` - -To fix this issue, use the configured emphasis style throughout the document: - -```markdown -*Text* -*Text* -``` - -The configured emphasis style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all emphasis matches the first emphasis -(`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like_this_one. - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md050.md b/node_modules/markdownlint/doc/md050.md deleted file mode 100644 index 2f249c2c6c..0000000000 --- a/node_modules/markdownlint/doc/md050.md +++ /dev/null @@ -1,35 +0,0 @@ -# `MD050` - Strong style - -Tags: `emphasis` - -Aliases: `strong-style` - -Parameters: - -- `style`: Strong style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for strong do not -match the configured strong style: - -```markdown -**Text** -__Text__ -``` - -To fix this issue, use the configured strong style throughout the document: - -```markdown -**Text** -**Text** -``` - -The configured strong style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all strong matches the first strong (`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like__this__one. - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md051.md b/node_modules/markdownlint/doc/md051.md deleted file mode 100644 index 947aba330f..0000000000 --- a/node_modules/markdownlint/doc/md051.md +++ /dev/null @@ -1,95 +0,0 @@ -# `MD051` - Link fragments should be valid - -Tags: `links` - -Aliases: `link-fragments` - -Parameters: - -- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a link fragment does not match any of the fragments -that are automatically generated for headings in a document: - -```markdown -# Heading Name - -[Link](#fragment) -``` - -To fix this issue, change the link fragment to reference an existing heading's -generated name (see below): - -```markdown -# Heading Name - -[Link](#heading-name) -``` - -For consistency, this rule requires fragments to exactly match the [GitHub -heading algorithm][github-heading-algorithm] which converts letters to -lowercase. Therefore, the following example is reported as a violation: - -```markdown -# Heading Name - -[Link](#Heading-Name) -``` - -To ignore case when comparing fragments with heading names, the `ignore_case` -parameter can be set to `true`. In this configuration, the previous example is -not reported as a violation. - -Alternatively, some platforms allow the syntax `{#named-anchor}` to be used -within a heading to provide a specific name (consisting of only lower-case -letters, numbers, `-`, and `_`): - -```markdown -# Heading Name {#custom-name} - -[Link](#custom-name) -``` - -Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` -attribute can be used to define a fragment: - -```markdown - - -[Link](#bookmark) -``` - -An `a` tag can be useful in scenarios where a heading is not appropriate or for -control over the text of the fragment identifier. - -This rule also recognizes the custom fragment syntax used by GitHub to highlight -[specific content in a document][github-linking-to-content]. - -For example, this link to line 20: - -```markdown -[Link](#L20) -``` - -And this link to content starting within line 19 running into line 21: - -```markdown -[Link](#L19C5-L21C11) -``` - -Rationale: [GitHub section links][github-section-links] are created -automatically for every heading when Markdown content is displayed on GitHub. -This makes it easy to link directly to different sections within a document. -However, section links change if headings are renamed or removed. This rule -helps identify broken section links within a document. - -Section links are **not** part of the CommonMark specification. This rule -enforces the [GitHub heading algorithm][github-heading-algorithm] which is: -convert heading to lowercase, remove punctuation, convert spaces to dashes, -append an incrementing integer as needed for uniqueness. - -[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links -[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb -[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown diff --git a/node_modules/markdownlint/doc/md052.md b/node_modules/markdownlint/doc/md052.md deleted file mode 100644 index 994d98eefa..0000000000 --- a/node_modules/markdownlint/doc/md052.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD052` - Reference links and images should use a label that is defined - -Tags: `images`, `links` - -Aliases: `reference-links-images` - -Parameters: - -- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) - -Links and images in Markdown can provide the link destination or image source -at the time of use or can define it elsewhere and use a label for reference. -The reference format is convenient for keeping paragraph text clutter-free -and makes it easy to reuse the same URL in multiple places. - -There are three kinds of reference links and images: - -```markdown -Full: [text][label] -Collapsed: [label][] -Shortcut: [label] - -Full: ![text][image] -Collapsed: ![image][] -Shortcut: ![image] - -[label]: https://example.com/label -[image]: https://example.com/image -``` - -A link or image renders correctly when the corresponding label is defined, but -displays as text with brackets when the label is not present. By default, this -rule warns of undefined labels for "full" and "collapsed" reference syntax but -not for "shortcut" syntax because it is ambiguous. - -The text `[example]` could be a shortcut link or the text "example" in brackets, -so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set -the `include_shortcut` parameter to `true`. Note that doing so produces warnings -for *all* text in the document that *could* be a shortcut. If bracketed text is -intentional, brackets can be escaped with the `\` character: `\[example\]`. diff --git a/node_modules/markdownlint/doc/md053.md b/node_modules/markdownlint/doc/md053.md deleted file mode 100644 index 7caf0290ce..0000000000 --- a/node_modules/markdownlint/doc/md053.md +++ /dev/null @@ -1,38 +0,0 @@ -# `MD053` - Link and image reference definitions should be needed - -Tags: `images`, `links` - -Aliases: `link-image-reference-definitions` - -Parameters: - -- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source -at the time of use or can use a label to reference a definition elsewhere in -the document. The latter reference format is convenient for keeping paragraph -text clutter-free and makes it easy to reuse the same URL in multiple places. - -Because link and image reference definitions are located separately from -where they are used, there are two scenarios where a definition can be -unnecessary: - -1. If a label is not referenced by any link or image in a document, that - definition is unused and can be deleted. -2. If a label is defined multiple times in a document, the first definition is - used and the others can be deleted. - -This rule considers a reference definition to be used if any link or image -reference has the corresponding label. The "full", "collapsed", and "shortcut" -formats are all supported. - -If there are reference definitions that are deliberately unreferenced, they can -be ignored by setting the `ignored_definitions` parameter. The default value of -this parameter ignores the following convention for adding non-HTML comments to -Markdown: - -```markdown -[//]: # (This behaves like a comment) -``` diff --git a/node_modules/markdownlint/doc/md054.md b/node_modules/markdownlint/doc/md054.md deleted file mode 100644 index 01d661cd5e..0000000000 --- a/node_modules/markdownlint/doc/md054.md +++ /dev/null @@ -1,100 +0,0 @@ -# `MD054` - Link and image style - -Tags: `images`, `links` - -Aliases: `link-image-style` - -Parameters: - -- `autolink`: Allow autolinks (`boolean`, default `true`) -- `collapsed`: Allow collapsed reference links and images (`boolean`, default - `true`) -- `full`: Allow full reference links and images (`boolean`, default `true`) -- `inline`: Allow inline links and images (`boolean`, default `true`) -- `shortcut`: Allow shortcut reference links and images (`boolean`, default - `true`) -- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source at -the time of use or can use a label to reference a definition elsewhere in the -document. The three reference formats are convenient for keeping paragraph text -clutter-free and make it easy to reuse the same URL in multiple places. - -By default, this rule allows all link/image styles. - -Setting the `autolink` parameter to `false` disables autolinks: - -```markdown - -``` - -Setting the `inline` parameter to `false` disables inline links and images: - -```markdown -[link](https://example.com) - -![image](https://example.com) -``` - -Setting the `full` parameter to `false` disables full reference links and -images: - -```markdown -[link][url] - -![image][url] - -[url]: https://example.com -``` - -Setting the `collapsed` parameter to `false` disables collapsed reference links -and images: - -```markdown -[url][] - -![url][] - -[url]: https://example.com -``` - -Setting the `shortcut` parameter to `false` disables shortcut reference links -and images: - -```markdown -[url] - -![url] - -[url]: https://example.com -``` - -To fix violations of this rule, change the link or image to use an allowed -style. This rule can automatically fix violations when a link or image can be -converted to the `inline` style (preferred) or a link can be converted to the -`autolink` style (which does not support images and must be an absolute URL). -This rule does *not* fix scenarios that require converting a link or image to -the `full`, `collapsed`, or `shortcut` reference styles because that involves -naming the reference and determining where to insert it in the document. - -Setting the `url_inline` parameter to `false` prevents the use of inline links -with the same absolute URL text/destination and no title because such links can -be converted to autolinks: - -```markdown -[https://example.com](https://example.com) -``` - -To fix `url_inline` violations, use the simpler autolink syntax instead: - -```markdown - -``` - -Rationale: Consistent formatting makes it easier to understand a document. -Autolinks are concise, but appear as URLs which can be long and confusing. -Inline links and images can include descriptive text, but take up more space in -Markdown form. Reference links and images can be easier to read and manipulate -in Markdown form, but require a separate link reference definition. diff --git a/node_modules/markdownlint/doc/md055.md b/node_modules/markdownlint/doc/md055.md deleted file mode 100644 index 9b6f7f086a..0000000000 --- a/node_modules/markdownlint/doc/md055.md +++ /dev/null @@ -1,55 +0,0 @@ -# `MD055` - Table pipe style - -Tags: `table` - -Aliases: `table-pipe-style` - -Parameters: - -- `style`: Table pipe style (`string`, default `consistent`, values - `consistent` / `leading_and_trailing` / `leading_only` / - `no_leading_or_trailing` / `trailing_only`) - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] -is inconsistent about its use of leading and trailing pipe characters (`|`). - -By default (`consistent` style), the header row of the first table in a document -is used to determine the style that is enforced for every table in the document. -A specific style can be used instead (`leading_and_trailing`, `leading_only`, -`no_leading_or_trailing`, `trailing_only`). - -This table's header row has leading and trailing pipes, but its delimiter row is -missing the trailing pipe and its first row of cells is missing the leading -pipe: - -```markdown -| Header | Header | -| ------ | ------ - Cell | Cell | -``` - -To fix these issues, make sure there is a pipe character at the beginning and -end of every row: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and may also -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table -``` - -Rationale: Some parsers have difficulty with tables that are missing their -leading or trailing pipe characters. The use of leading/trailing pipes can also -help provide visual clarity. - -[gfm-table-055]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md056.md b/node_modules/markdownlint/doc/md056.md deleted file mode 100644 index 0fe87b522d..0000000000 --- a/node_modules/markdownlint/doc/md056.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD056` - Table column count - -Tags: `table` - -Aliases: `table-column-count` - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] -does not have the same number of cells in every row. - -This table's second data row has too few cells and its third data row has too -many cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | -| Cell | Cell | Cell | -``` - -To fix these issues, ensure every row has the same number of cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | Cell | -| Cell | Cell | -``` - -Note that a table's header row and its delimiter row must have the same number -of cells or it will not be recognized as a table (per specification). - -Rationale: Extra cells in a row are usually not shown, so their data is lost. -Missing cells in a row create holes in the table and suggest an omission. - -[gfm-table-056]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md058.md b/node_modules/markdownlint/doc/md058.md deleted file mode 100644 index 8600751242..0000000000 --- a/node_modules/markdownlint/doc/md058.md +++ /dev/null @@ -1,48 +0,0 @@ -# `MD058` - Tables should be surrounded by blank lines - -Tags: `table` - -Aliases: `blanks-around-tables` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when tables are either not preceded or not followed by a -blank line: - -```markdown -Some text -| Header | Header | -| ------ | ------ | -| Cell | Cell | -> Blockquote -``` - -To fix violations of this rule, ensure that all tables have a blank line both -before and after (except when the table is at the very beginning or end of the -document): - -```markdown -Some text - -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -> Blockquote -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and will not -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table and the next line is blank - -Some text -``` - -Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse -tables that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/helpers/LICENSE b/node_modules/markdownlint/helpers/LICENSE deleted file mode 100644 index 71ff07a3e3..0000000000 --- a/node_modules/markdownlint/helpers/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) David Anson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/markdownlint/helpers/README.md b/node_modules/markdownlint/helpers/README.md deleted file mode 100644 index 605df84a94..0000000000 --- a/node_modules/markdownlint/helpers/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# markdownlint-rule-helpers - -> A collection of `markdownlint` helper functions for custom rules - -## Overview - -The [Markdown][markdown] linter [`markdownlint`][markdownlint] offers a variety -of built-in validation [rules][rules] and supports the creation of [custom -rules][custom-rules]. The internal rules share various helper functions; this -package exposes those for reuse by custom rules. - -## API - -*Undocumented* - This package exports the internal functions as-is. The APIs -were not originally meant to be public, are not officially supported, and may -change from release to release. There are brief descriptive comments above each -function, but no [JSDoc][jsdoc] annotations. That said, some of what's here will -be useful to custom rule authors and may avoid duplicating code. - -## Tests - -*None* - The entire body of code is tested to 100% coverage by the core -`markdownlint` project, so there are no additional tests here. - -[custom-rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/CustomRules.md -[jsdoc]: https://en.m.wikipedia.org/wiki/JSDoc -[markdown]: https://en.wikipedia.org/wiki/Markdown -[markdownlint]: https://github.com/DavidAnson/markdownlint -[rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/Rules.md diff --git a/node_modules/markdownlint/helpers/helpers.cjs b/node_modules/markdownlint/helpers/helpers.cjs deleted file mode 100644 index 6b42f0ab65..0000000000 --- a/node_modules/markdownlint/helpers/helpers.cjs +++ /dev/null @@ -1,542 +0,0 @@ -// @ts-check - -"use strict"; - -const micromark = require("./micromark-helpers.cjs"); - -const { newLineRe, nextLinesRe } = require("./shared.cjs"); - -module.exports.newLineRe = newLineRe; -module.exports.nextLinesRe = nextLinesRe; - -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").RuleOnError} RuleOnError */ -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").RuleOnErrorFixInfo} RuleOnErrorFixInfo */ -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").MicromarkToken} MicromarkToken */ -// eslint-disable-next-line jsdoc/valid-types -/** @typedef {import("micromark-extension-gfm-footnote", { with: { "resolution-mode": "import" } })} */ -// eslint-disable-next-line jsdoc/valid-types -/** @typedef {import("../lib/micromark-types.d.mts", { with: { "resolution-mode": "import" } })} */ - -// Regular expression for matching common front matter (YAML and TOML) -// @ts-ignore -module.exports.frontMatterRe = - /((^---[^\S\r\n\u2028\u2029]*$[\s\S]+?^---\s*)|(^\+\+\+[^\S\r\n\u2028\u2029]*$[\s\S]+?^(\+\+\+|\.\.\.)\s*)|(^\{[^\S\r\n\u2028\u2029]*$[\s\S]+?^\}\s*))(\r\n|\r|\n|$)/m; - -// Regular expression for matching the start of inline disable/enable comments -const inlineCommentStartRe = - /()/gi; -module.exports.inlineCommentStartRe = inlineCommentStartRe; - -// Regular expression for identifying an HTML entity at the end of a line -module.exports.endOfLineHtmlEntityRe = - /&(?:#\d+|#[xX][\da-fA-F]+|[a-zA-Z]{2,31}|blk\d{2}|emsp1[34]|frac\d{2}|sup\d|there4);$/; - -// Regular expression for identifying a GitHub emoji code at the end of a line -module.exports.endOfLineGemojiCodeRe = - /:(?:[abmovx]|[-+]1|100|1234|(?:1st|2nd|3rd)_place_medal|8ball|clock\d{1,4}|e-mail|non-potable_water|o2|t-rex|u5272|u5408|u55b6|u6307|u6708|u6709|u6e80|u7121|u7533|u7981|u7a7a|[a-z]{2,15}2?|[a-z]{1,14}(?:_[a-z\d]{1,16})+):$/; - -// All punctuation characters (normal and full-width) -const allPunctuation = ".,;:!?。,;:!?"; -module.exports.allPunctuation = allPunctuation; - -// All punctuation characters without question mark (normal and full-width) -module.exports.allPunctuationNoQuestion = allPunctuation.replace(/[??]/gu, ""); - -/** - * Returns true iff the input is a Number. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is a Number. - */ -function isNumber(obj) { - return typeof obj === "number"; -} -module.exports.isNumber = isNumber; - -/** - * Returns true iff the input is a String. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is a String. - */ -function isString(obj) { - return typeof obj === "string"; -} -module.exports.isString = isString; - -/** - * Returns true iff the input String is empty. - * - * @param {string} str String of unknown length. - * @returns {boolean} True iff the input String is empty. - */ -function isEmptyString(str) { - return str.length === 0; -} -module.exports.isEmptyString = isEmptyString; - -/** - * Returns true iff the input is an Object. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is an Object. - */ -function isObject(obj) { - return !!obj && (typeof obj === "object") && !Array.isArray(obj); -} -module.exports.isObject = isObject; - -/** - * Returns true iff the input is a URL. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is a URL. - */ -function isUrl(obj) { - return !!obj && (Object.getPrototypeOf(obj) === URL.prototype); -} -module.exports.isUrl = isUrl; - -/** - * Clones the input if it is an Array. - * - * @param {Object} arr Object of unknown type. - * @returns {Object} Clone of obj iff obj is an Array. - */ -function cloneIfArray(arr) { - return Array.isArray(arr) ? [ ...arr ] : arr; -} -module.exports.cloneIfArray = cloneIfArray; - -/** - * Clones the input if it is a URL. - * - * @param {Object} url Object of unknown type. - * @returns {Object} Clone of obj iff obj is a URL. - */ -function cloneIfUrl(url) { - return isUrl(url) ? new URL(url) : url; -} -module.exports.cloneIfUrl = cloneIfUrl; - -/** - * Gets a Regular Expression for matching the specified HTML attribute. - * - * @param {string} name HTML attribute name. - * @returns {RegExp} Regular Expression for matching. - */ -module.exports.getHtmlAttributeRe = function getHtmlAttributeRe(name) { - return new RegExp(`\\s${name}\\s*=\\s*['"]?([^'"\\s>]*)`, "iu"); -}; - -/** - * Returns true iff the input line is blank (contains nothing, whitespace, or - * comments (unclosed start/end comments allowed)). - * - * @param {string} line Input line. - * @returns {boolean} True iff line is blank. - */ -function isBlankLine(line) { - const startComment = ""; - const removeComments = (s) => { - while (true) { - const start = s.indexOf(startComment); - const end = s.indexOf(endComment); - if ((end !== -1) && ((start === -1) || (end < start))) { - // Unmatched end comment is first - s = s.slice(end + endComment.length); - } else if ((start !== -1) && (end !== -1)) { - // Start comment is before end comment - s = s.slice(0, start) + s.slice(end + endComment.length); - } else if ((start !== -1) && (end === -1)) { - // Unmatched start comment is last - s = s.slice(0, start); - } else { - // No more comments to remove - return s; - } - } - }; - return ( - !line || - !line.trim() || - !removeComments(line).replace(/>/g, "").trim() - ); -} -module.exports.isBlankLine = isBlankLine; - -// Replaces the content of properly-formatted CommonMark comments with "." -// This preserves the line/column information for the rest of the document -// https://spec.commonmark.org/0.29/#html-blocks -// https://spec.commonmark.org/0.29/#html-comment -const htmlCommentBegin = ""; -const safeCommentCharacter = "."; -const startsWithPipeRe = /^ *\|/; -const notCrLfRe = /[^\r\n]/g; -const notSpaceCrLfRe = /[^ \r\n]/g; -const trailingSpaceRe = / +[\r\n]/g; -const replaceTrailingSpace = (s) => s.replace(notCrLfRe, safeCommentCharacter); -module.exports.clearHtmlCommentText = function clearHtmlCommentText(text) { - let i = 0; - while ((i = text.indexOf(htmlCommentBegin, i)) !== -1) { - const j = text.indexOf(htmlCommentEnd, i + 2); - if (j === -1) { - // Un-terminated comments are treated as text - break; - } - // If the comment has content... - if (j > i + htmlCommentBegin.length) { - const content = text.slice(i + htmlCommentBegin.length, j); - const lastLf = text.lastIndexOf("\n", i) + 1; - const preText = text.slice(lastLf, i); - const isBlock = preText.trim().length === 0; - const couldBeTable = startsWithPipeRe.test(preText); - const spansTableCells = couldBeTable && content.includes("\n"); - const isValid = - isBlock || - !( - spansTableCells || - content.startsWith(">") || - content.startsWith("->") || - content.endsWith("-") || - content.includes("--") - ); - // If a valid block/inline comment... - if (isValid) { - const clearedContent = content - .replace(notSpaceCrLfRe, safeCommentCharacter) - .replace(trailingSpaceRe, replaceTrailingSpace); - text = - text.slice(0, i + htmlCommentBegin.length) + - clearedContent + - text.slice(j); - } - } - i = j + htmlCommentEnd.length; - } - return text; -}; - -// Escapes a string for use in a RegExp -module.exports.escapeForRegExp = function escapeForRegExp(str) { - return str.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -/** - * Adds ellipsis to the left/right/middle of the specified text. - * - * @param {string} text Text to ellipsify. - * @param {boolean} [start] True iff the start of the text is important. - * @param {boolean} [end] True iff the end of the text is important. - * @returns {string} Ellipsified text. - */ -function ellipsify(text, start, end) { - if (text.length <= 30) { - // Nothing to do - } else if (start && end) { - text = text.slice(0, 15) + "..." + text.slice(-15); - } else if (end) { - text = "..." + text.slice(-30); - } else { - text = text.slice(0, 30) + "..."; - } - return text; -} -module.exports.ellipsify = ellipsify; - -/** - * Adds a generic error object via the onError callback. - * - * @param {RuleOnError} onError RuleOnError instance. - * @param {number} lineNumber Line number. - * @param {string} [detail] Error details. - * @param {string} [context] Error context. - * @param {number[]} [range] Column and length of error. - * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. - * @returns {void} - */ -function addError(onError, lineNumber, detail, context, range, fixInfo) { - onError({ - lineNumber, - detail, - context, - range, - fixInfo - }); -} -module.exports.addError = addError; - -/** - * Adds an error object with details conditionally via the onError callback. - * - * @param {RuleOnError} onError RuleOnError instance. - * @param {number} lineNumber Line number. - * @param {Object} expected Expected value. - * @param {Object} actual Actual value. - * @param {string} [detail] Error details. - * @param {string} [context] Error context. - * @param {number[]} [range] Column and length of error. - * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. - * @returns {void} - */ -function addErrorDetailIf( - onError, lineNumber, expected, actual, detail, context, range, fixInfo) { - if (expected !== actual) { - addError( - onError, - lineNumber, - "Expected: " + expected + "; Actual: " + actual + - (detail ? "; " + detail : ""), - context, - range, - fixInfo); - } -} -module.exports.addErrorDetailIf = addErrorDetailIf; - -/** - * Adds an error object with context via the onError callback. - * - * @param {RuleOnError} onError RuleOnError instance. - * @param {number} lineNumber Line number. - * @param {string} context Error context. - * @param {boolean} [start] True iff the start of the text is important. - * @param {boolean} [end] True iff the end of the text is important. - * @param {number[]} [range] Column and length of error. - * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. - * @returns {void} - */ -function addErrorContext( - onError, lineNumber, context, start, end, range, fixInfo) { - context = ellipsify(context, start, end); - addError(onError, lineNumber, undefined, context, range, fixInfo); -} -module.exports.addErrorContext = addErrorContext; - -/** - * Defines a range within a file (start line/column to end line/column, subset of MicromarkToken). - * - * @typedef {Object} FileRange - * @property {number} startLine Start line (1-based). - * @property {number} startColumn Start column (1-based). - * @property {number} endLine End line (1-based). - * @property {number} endColumn End column (1-based). - */ - -/** - * Returns whether line/column A is less than or equal to line/column B. - * - * @param {number} lineA Line A. - * @param {number} columnA Column A. - * @param {number} lineB Line B. - * @param {number} columnB Column B. - * @returns {boolean} True iff A is less than or equal to B. - */ -const positionLessThanOrEqual = (lineA, columnA, lineB, columnB) => ( - (lineA < lineB) || - ((lineA === lineB) && (columnA <= columnB)) -); - -/** - * Returns whether two ranges (or MicromarkTokens) overlap anywhere. - * - * @param {FileRange|MicromarkToken} rangeA Range A. - * @param {FileRange|MicromarkToken} rangeB Range B. - * @returns {boolean} True iff the two ranges overlap. - */ -module.exports.hasOverlap = function hasOverlap(rangeA, rangeB) { - const lte = positionLessThanOrEqual(rangeA.startLine, rangeA.startColumn, rangeB.startLine, rangeB.startColumn); - const first = lte ? rangeA : rangeB; - const second = lte ? rangeB : rangeA; - return positionLessThanOrEqual(second.startLine, second.startColumn, first.endLine, first.endColumn); -}; - -// Determines if the front matter includes a title -module.exports.frontMatterHasTitle = - function frontMatterHasTitle(frontMatterLines, frontMatterTitlePattern) { - const ignoreFrontMatter = - (frontMatterTitlePattern !== undefined) && !frontMatterTitlePattern; - const frontMatterTitleRe = - new RegExp( - String(frontMatterTitlePattern || "^\\s*\"?title\"?\\s*[:=]"), - "i" - ); - return !ignoreFrontMatter && - frontMatterLines.some((line) => frontMatterTitleRe.test(line)); - }; - -/** - * Returns an object with information about reference links and images. - * - * @param {MicromarkToken[]} tokens Micromark tokens. - * @returns {Object} Reference link/image data. - */ -function getReferenceLinkImageData(tokens) { - const normalizeReference = (s) => s.toLowerCase().trim().replace(/\s+/g, " "); - const references = new Map(); - const shortcuts = new Map(); - const addReferenceToDictionary = (token, label, isShortcut) => { - const referenceDatum = [ - token.startLine - 1, - token.startColumn - 1, - token.text.length - ]; - const reference = normalizeReference(label); - const dictionary = isShortcut ? shortcuts : references; - const referenceData = dictionary.get(reference) || []; - referenceData.push(referenceDatum); - dictionary.set(reference, referenceData); - }; - const definitions = new Map(); - const definitionLineIndices = []; - const duplicateDefinitions = []; - const filteredTokens = - micromark.filterByTypes( - tokens, - [ - // definitionLineIndices - "definition", "gfmFootnoteDefinition", - // definitions and definitionLineIndices - "definitionLabelString", "gfmFootnoteDefinitionLabelString", - // references and shortcuts - "gfmFootnoteCall", "image", "link", - // undefined link labels - "undefinedReferenceCollapsed", "undefinedReferenceFull", "undefinedReferenceShortcut" - ] - ); - for (const token of filteredTokens) { - let labelPrefix = ""; - // eslint-disable-next-line default-case - switch (token.type) { - case "definition": - case "gfmFootnoteDefinition": - // definitionLineIndices - for (let i = token.startLine; i <= token.endLine; i++) { - definitionLineIndices.push(i - 1); - } - break; - case "gfmFootnoteDefinitionLabelString": - labelPrefix = "^"; - case "definitionLabelString": // eslint-disable-line no-fallthrough - { - // definitions and definitionLineIndices - const reference = normalizeReference(`${labelPrefix}${token.text}`); - if (definitions.has(reference)) { - duplicateDefinitions.push([ reference, token.startLine - 1 ]); - } else { - const parent = - micromark.getParentOfType(token, [ "definition" ]); - const destinationString = parent && - micromark.getDescendantsByType(parent, [ "definitionDestination", "definitionDestinationRaw", "definitionDestinationString" ])[0]?.text; - definitions.set( - reference, - [ token.startLine - 1, destinationString ] - ); - } - } - break; - case "gfmFootnoteCall": - case "image": - case "link": - { - // Identify if shortcut or full/collapsed - let isShortcut = (token.children.length === 1); - const isFullOrCollapsed = (token.children.length === 2) && !token.children.some((t) => t.type === "resource"); - const [ labelText ] = micromark.getDescendantsByType(token, [ "label", "labelText" ]); - const [ referenceString ] = micromark.getDescendantsByType(token, [ "reference", "referenceString" ]); - let label = labelText?.text; - // Identify if footnote - if (!isShortcut && !isFullOrCollapsed) { - const [ footnoteCallMarker, footnoteCallString ] = token.children.filter( - (t) => [ "gfmFootnoteCallMarker", "gfmFootnoteCallString" ].includes(t.type) - ); - if (footnoteCallMarker && footnoteCallString) { - label = `${footnoteCallMarker.text}${footnoteCallString.text}`; - isShortcut = true; - } - } - // Track link (handle shortcuts separately due to ambiguity in "text [text] text") - if (isShortcut || isFullOrCollapsed) { - addReferenceToDictionary(token, referenceString?.text || label, isShortcut); - } - } - break; - case "undefinedReferenceCollapsed": - case "undefinedReferenceFull": - case "undefinedReferenceShortcut": - { - const undefinedReference = micromark.getDescendantsByType(token, [ "undefinedReference" ])[0]; - const label = undefinedReference.children.map((t) => t.text).join(""); - const isShortcut = (token.type === "undefinedReferenceShortcut"); - addReferenceToDictionary(token, label, isShortcut); - } - break; - } - } - return { - references, - shortcuts, - definitions, - duplicateDefinitions, - definitionLineIndices - }; -} -module.exports.getReferenceLinkImageData = getReferenceLinkImageData; - -/** - * Gets the most common line ending, falling back to the platform default. - * - * @param {string} input Markdown content to analyze. - * @param {Object} [os] Node.js "os" module. - * @returns {string} Preferred line ending. - */ -function getPreferredLineEnding(input, os) { - let cr = 0; - let lf = 0; - let crlf = 0; - const endings = input.match(newLineRe) || []; - for (const ending of endings) { - // eslint-disable-next-line default-case - switch (ending) { - case "\r": - cr++; - break; - case "\n": - lf++; - break; - case "\r\n": - crlf++; - break; - } - } - let preferredLineEnding = null; - if (!cr && !lf && !crlf) { - preferredLineEnding = (os && os.EOL) || "\n"; - } else if ((lf >= crlf) && (lf >= cr)) { - preferredLineEnding = "\n"; - } else if (crlf >= cr) { - preferredLineEnding = "\r\n"; - } else { - preferredLineEnding = "\r"; - } - return preferredLineEnding; -} -module.exports.getPreferredLineEnding = getPreferredLineEnding; - -/** - * Expands a path with a tilde to an absolute path. - * - * @param {string} file Path that may begin with a tilde. - * @param {Object} os Node.js "os" module. - * @returns {string} Absolute path (or original path). - */ -function expandTildePath(file, os) { - const homedir = os && os.homedir && os.homedir(); - return homedir ? file.replace(/^~($|\/|\\)/, `${homedir}$1`) : file; -} -module.exports.expandTildePath = expandTildePath; diff --git a/node_modules/markdownlint/helpers/micromark-helpers.cjs b/node_modules/markdownlint/helpers/micromark-helpers.cjs deleted file mode 100644 index 87e75cbe63..0000000000 --- a/node_modules/markdownlint/helpers/micromark-helpers.cjs +++ /dev/null @@ -1,301 +0,0 @@ -// @ts-check - -"use strict"; - -const { flatTokensSymbol, htmlFlowSymbol } = require("./shared.cjs"); - -// eslint-disable-next-line jsdoc/valid-types -/** @typedef {import("micromark-util-types", { with: { "resolution-mode": "import" } }).TokenType} TokenType */ -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").MicromarkToken} Token */ - -/** - * Determines if a Micromark token is within an htmlFlow type. - * - * @param {Token} token Micromark token. - * @returns {boolean} True iff the token is within an htmlFlow type. - */ -function inHtmlFlow(token) { - return Boolean(token[htmlFlowSymbol]); -} - -/** - * Returns whether a token is an htmlFlow type containing an HTML comment. - * - * @param {Token} token Micromark token. - * @returns {boolean} True iff token is htmlFlow containing a comment. - */ -function isHtmlFlowComment(token) { - const { text, type } = token; - if ( - (type === "htmlFlow") && - text.startsWith("") - ) { - const comment = text.slice(4, -3); - return ( - !comment.startsWith(">") && - !comment.startsWith("->") && - !comment.endsWith("-") - // The following condition from the CommonMark specification is commented - // to avoid parsing HTML comments that include "--" because that is NOT a - // condition of the HTML specification. - // https://spec.commonmark.org/0.30/#raw-html - // https://html.spec.whatwg.org/multipage/syntax.html#comments - // && !comment.includes("--") - ); - } - return false; -} - -/** - * Adds a range of numbers to a set. - * - * @param {Set} set Set of numbers. - * @param {number} start Starting number. - * @param {number} end Ending number. - * @returns {void} - */ -function addRangeToSet(set, start, end) { - for (let i = start; i <= end; i++) { - set.add(i); - } -} - -/** - * @callback AllowedPredicate - * @param {Token} token Micromark token. - * @returns {boolean} True iff allowed. - */ - -/** - * @callback TransformPredicate - * @param {Token} token Micromark token. - * @returns {Token[]} Child tokens. - */ - -/** - * Filter a list of Micromark tokens by predicate. - * - * @param {Token[]} tokens Micromark tokens. - * @param {AllowedPredicate} allowed Allowed token predicate. - * @param {TransformPredicate} [transformChildren] Transform predicate. - * @returns {Token[]} Filtered tokens. - */ -function filterByPredicate(tokens, allowed, transformChildren) { - const result = []; - const queue = [ - { - "array": tokens, - "index": 0 - } - ]; - while (queue.length > 0) { - const current = queue[queue.length - 1]; - const { array, index } = current; - if (index < array.length) { - const token = array[current.index++]; - if (allowed(token)) { - result.push(token); - } - const { children } = token; - if (children.length > 0) { - const transformed = - transformChildren ? transformChildren(token) : children; - queue.push( - { - "array": transformed, - "index": 0 - } - ); - } - } else { - queue.pop(); - } - } - return result; -} - -/** - * Filter a list of Micromark tokens by type. - * - * @param {Token[]} tokens Micromark tokens. - * @param {TokenType[]} types Types to allow. - * @param {boolean} [htmlFlow] Whether to include htmlFlow content. - * @returns {Token[]} Filtered tokens. - */ -function filterByTypes(tokens, types, htmlFlow) { - const predicate = (token) => types.includes(token.type) && (htmlFlow || !inHtmlFlow(token)); - const flatTokens = tokens[flatTokensSymbol]; - if (flatTokens) { - return flatTokens.filter(predicate); - } - return filterByPredicate(tokens, predicate); -} - -/** - * Gets the blockquote prefix text (if any) for the specified line number. - * - * @param {Token[]} tokens Micromark tokens. - * @param {number} lineNumber Line number to examine. - * @param {number} [count] Number of times to repeat. - * @returns {string} Blockquote prefix text. - */ -function getBlockQuotePrefixText(tokens, lineNumber, count = 1) { - return filterByTypes(tokens, [ "blockQuotePrefix", "linePrefix" ]) - .filter((prefix) => prefix.startLine === lineNumber) - .map((prefix) => prefix.text) - .join("") - .trimEnd() - // eslint-disable-next-line unicorn/prefer-spread - .concat("\n") - .repeat(count); -}; - -/** - * Gets a list of nested Micromark token descendants by type path. - * - * @param {Token|Token[]} parent Micromark token parent or parents. - * @param {(TokenType|TokenType[])[]} typePath Micromark token type path. - * @returns {Token[]} Micromark token descendants. - */ -function getDescendantsByType(parent, typePath) { - let tokens = Array.isArray(parent) ? parent : [ parent ]; - for (const type of typePath) { - const predicate = (token) => Array.isArray(type) ? type.includes(token.type) : (type === token.type); - tokens = tokens.flatMap((t) => t.children.filter(predicate)); - } - return tokens; -} - -/** - * Gets the heading level of a Micromark heading tokan. - * - * @param {Token} heading Micromark heading token. - * @returns {number} Heading level. - */ -function getHeadingLevel(heading) { - let level = 1; - const headingSequence = heading.children.find( - (child) => [ "atxHeadingSequence", "setextHeadingLine" ].includes(child.type) - ); - // @ts-ignore - const { text } = headingSequence; - if (text[0] === "#") { - level = Math.min(text.length, 6); - } else if (text[0] === "-") { - level = 2; - } - return level; -} - -/** - * Gets the heading style of a Micromark heading tokan. - * - * @param {Token} heading Micromark heading token. - * @returns {"atx" | "atx_closed" | "setext"} Heading style. - */ -function getHeadingStyle(heading) { - if (heading.type === "setextHeading") { - return "setext"; - } - const atxHeadingSequenceLength = heading.children.filter( - (child) => child.type === "atxHeadingSequence" - ).length; - if (atxHeadingSequenceLength === 1) { - return "atx"; - } - return "atx_closed"; -} - -/** - * Gets the heading text of a Micromark heading token. - * - * @param {Token} heading Micromark heading token. - * @returns {string} Heading text. - */ -function getHeadingText(heading) { - const headingTexts = getDescendantsByType(heading, [ [ "atxHeadingText", "setextHeadingText" ] ]); - return headingTexts[0]?.text.replace(/[\r\n]+/g, " ") || ""; -} - -/** - * HTML tag information. - * - * @typedef {Object} HtmlTagInfo - * @property {boolean} close True iff close tag. - * @property {string} name Tag name. - */ - -/** - * Gets information about the tag in an HTML token. - * - * @param {Token} token Micromark token. - * @returns {HtmlTagInfo | null} HTML tag information. - */ -function getHtmlTagInfo(token) { - const htmlTagNameRe = /^<([^!>][^/\s>]*)/; - if (token.type === "htmlText") { - const match = htmlTagNameRe.exec(token.text); - if (match) { - const name = match[1]; - const close = name.startsWith("/"); - return { - close, - "name": close ? name.slice(1) : name - }; - } - } - return null; -} - -/** - * Gets the nearest parent of the specified type for a Micromark token. - * - * @param {Token} token Micromark token. - * @param {TokenType[]} types Types to allow. - * @returns {Token | null} Parent token. - */ -function getParentOfType(token, types) { - /** @type {Token | null} */ - let current = token; - while ((current = current.parent) && !types.includes(current.type)) { - // Empty - } - return current; -} - -/** - * Set containing token types that do not contain content. - * - * @type {Set} - */ -const nonContentTokens = new Set([ - "blockQuoteMarker", - "blockQuotePrefix", - "blockQuotePrefixWhitespace", - "lineEnding", - "lineEndingBlank", - "linePrefix", - "listItemIndent", - "undefinedReference", - "undefinedReferenceCollapsed", - "undefinedReferenceFull", - "undefinedReferenceShortcut" -]); - -module.exports = { - addRangeToSet, - filterByPredicate, - filterByTypes, - getBlockQuotePrefixText, - getDescendantsByType, - getHeadingLevel, - getHeadingStyle, - getHeadingText, - getHtmlTagInfo, - getParentOfType, - inHtmlFlow, - isHtmlFlowComment, - nonContentTokens -}; diff --git a/node_modules/markdownlint/helpers/package.json b/node_modules/markdownlint/helpers/package.json deleted file mode 100644 index a5ef55520a..0000000000 --- a/node_modules/markdownlint/helpers/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "markdownlint-rule-helpers", - "version": "0.28.0", - "description": "A collection of markdownlint helper functions for custom rules", - "main": "./helpers.cjs", - "exports": { - ".": "./helpers.cjs", - "./micromark": "./micromark-helpers.cjs" - }, - "author": "David Anson (https://dlaa.me/)", - "license": "MIT", - "homepage": "https://github.com/DavidAnson/markdownlint", - "repository": { - "type": "git", - "url": "git+https://github.com/DavidAnson/markdownlint.git" - }, - "bugs": "https://github.com/DavidAnson/markdownlint/issues", - "funding": "https://github.com/sponsors/DavidAnson", - "engines": { - "node": ">=18" - }, - "keywords": [ - "markdownlint", - "markdownlint-rule" - ] -} diff --git a/node_modules/markdownlint/helpers/shared.cjs b/node_modules/markdownlint/helpers/shared.cjs deleted file mode 100644 index dfb38c313d..0000000000 --- a/node_modules/markdownlint/helpers/shared.cjs +++ /dev/null @@ -1,16 +0,0 @@ -// @ts-check - -"use strict"; - -// Symbol for identifing the flat tokens array from micromark parse -module.exports.flatTokensSymbol = Symbol("flat-tokens"); - -// Symbol for identifying the htmlFlow token from micromark parse -module.exports.htmlFlowSymbol = Symbol("html-flow"); - -// Regular expression for matching common newline characters -// See NEWLINES_RE in markdown-it/lib/rules_core/normalize.js -module.exports.newLineRe = /\r\n?|\n/g; - -// Regular expression for matching next lines -module.exports.nextLinesRe = /[\r\n][\s\S]*$/; diff --git a/node_modules/markdownlint/package.json b/node_modules/markdownlint/package.json deleted file mode 100644 index cee17b2634..0000000000 --- a/node_modules/markdownlint/package.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "name": "markdownlint", - "version": "0.37.4", - "description": "A Node.js style checker and lint tool for Markdown/CommonMark files.", - "type": "module", - "exports": { - ".": "./lib/exports.mjs", - "./async": "./lib/exports-async.mjs", - "./promise": "./lib/exports-promise.mjs", - "./sync": "./lib/exports-sync.mjs", - "./helpers": "./helpers/helpers.cjs", - "./style/all": "./style/all.json", - "./style/cirosantilli": "./style/cirosantilli.json", - "./style/prettier": "./style/prettier.json", - "./style/relaxed": "./style/relaxed.json" - }, - "imports": { - "#node-imports": { - "markdownlint-imports-browser": "./lib/node-imports-browser.mjs", - "markdownlint-imports-node": "./lib/node-imports-node.mjs", - "browser": "./lib/node-imports-browser.mjs", - "default": "./lib/node-imports-node.mjs" - } - }, - "types": "./lib/types.d.mts", - "author": "David Anson (https://dlaa.me/)", - "license": "MIT", - "homepage": "https://github.com/DavidAnson/markdownlint", - "repository": { - "type": "git", - "url": "git+https://github.com/DavidAnson/markdownlint.git" - }, - "bugs": "https://github.com/DavidAnson/markdownlint/issues", - "funding": "https://github.com/sponsors/DavidAnson", - "scripts": { - "build-config": "npm run build-config-schema && npm run build-config-example", - "build-config-example": "node schema/build-config-example.mjs", - "build-config-schema": "node schema/build-config-schema.mjs", - "build-declaration": "tsc --allowJs --checkJs --declaration --emitDeclarationOnly --module nodenext --outDir dts --rootDir . --target es2015 lib/exports.mjs lib/exports-async.mjs lib/exports-promise.mjs lib/exports-sync.mjs lib/markdownlint.mjs lib/resolve-module.cjs && node scripts/index.mjs copy dts/lib/exports.d.mts lib/exports.d.mts && node scripts/index.mjs copy dts/lib/exports-async.d.mts lib/exports-async.d.mts && node scripts/index.mjs copy dts/lib/exports-promise.d.mts lib/exports-promise.d.mts && node scripts/index.mjs copy dts/lib/exports-sync.d.mts lib/exports-sync.d.mts && node scripts/index.mjs copy dts/lib/markdownlint.d.mts lib/markdownlint.d.mts && node scripts/index.mjs copy dts/lib/resolve-module.d.cts lib/resolve-module.d.cts && node scripts/index.mjs remove dts", - "build-demo": "node scripts/index.mjs copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && cd demo && webpack --no-stats", - "build-docs": "node doc-build/build-rules.mjs", - "build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2", - "ci": "npm-run-all --continue-on-error --parallel lint serial-config-docs serial-declaration-demo test-cover && git diff --exit-code", - "clone-test-repos-apache-airflow": "cd test-repos && git clone https://github.com/apache/airflow apache-airflow --depth 1 --no-tags --quiet", - "clone-test-repos-dotnet-docs": "cd test-repos && git clone https://github.com/dotnet/docs dotnet-docs --depth 1 --no-tags --quiet", - "clone-test-repos-electron-electron": "cd test-repos && git clone https://github.com/electron/electron electron-electron --depth 1 --no-tags --quiet && cd electron-electron && npm install --ignore-scripts @electron/lint-roller typescript@4", - "clone-test-repos-eslint-eslint": "cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet", - "clone-test-repos-mdn-content": "cd test-repos && git clone https://github.com/mdn/content mdn-content --depth 1 --no-tags --quiet", - "clone-test-repos-mkdocs-mkdocs": "cd test-repos && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet", - "clone-test-repos-mochajs-mocha": "cd test-repos && git clone https://github.com/mochajs/mocha mochajs-mocha --depth 1 --no-tags --quiet", - "clone-test-repos-pi-hole-docs": "cd test-repos && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet", - "clone-test-repos-v8-v8-dev": "cd test-repos && git clone https://github.com/v8/v8.dev v8-v8-dev --depth 1 --no-tags --quiet", - "clone-test-repos-webhintio-hint": "cd test-repos && git clone https://github.com/webhintio/hint webhintio-hint --depth 1 --no-tags --quiet", - "clone-test-repos-webpack-webpack-js-org": "cd test-repos && git clone https://github.com/webpack/webpack.js.org webpack-webpack-js-org --depth 1 --no-tags --quiet", - "clone-test-repos": "mkdir test-repos && cd test-repos && npm run clone-test-repos-apache-airflow && npm run clone-test-repos-dotnet-docs && npm run clone-test-repos-electron-electron && npm run clone-test-repos-eslint-eslint && npm run clone-test-repos-mdn-content && npm run clone-test-repos-mkdocs-mkdocs && npm run clone-test-repos-mochajs-mocha && npm run clone-test-repos-pi-hole-docs && npm run clone-test-repos-v8-v8-dev && npm run clone-test-repos-webhintio-hint && npm run clone-test-repos-webpack-webpack-js-org", - "declaration": "npm run build-declaration && npm run test-declaration", - "example": "cd example && node standalone.mjs && grunt markdownlint --force && gulp markdownlint", - "lint": "eslint --max-warnings 0", - "lint-test-repos": "ava --timeout=10m test/markdownlint-test-repos-*.mjs", - "serial-config-docs": "npm run build-config && npm run build-docs", - "serial-declaration-demo": "npm run build-declaration && npm-run-all --continue-on-error --parallel build-demo test-declaration", - "test": "ava --timeout=30s test/markdownlint-test.mjs test/markdownlint-test-config.mjs test/markdownlint-test-custom-rules.mjs test/markdownlint-test-fixes.mjs test/markdownlint-test-helpers.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-result-object.mjs test/markdownlint-test-scenarios.mjs test/resolve-module-test.mjs helpers/test.cjs", - "test-cover": "c8 --100 npm test", - "test-declaration": "cd example/typescript && tsc --module commonjs && tsc --module nodenext && node type-check.js", - "test-extra": "ava --timeout=10m test/markdownlint-test-extra-parse.mjs test/markdownlint-test-extra-type.mjs", - "update-snapshots": "ava --update-snapshots test/markdownlint-test-custom-rules.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-scenarios.mjs", - "update-snapshots-test-repos": "ava --timeout=10m --update-snapshots test/markdownlint-test-repos-*.mjs", - "upgrade": "npx --yes npm-check-updates --upgrade" - }, - "engines": { - "node": ">=18" - }, - "dependencies": { - "markdown-it": "14.1.0", - "micromark": "4.0.1", - "micromark-core-commonmark": "2.0.2", - "micromark-extension-directive": "3.0.2", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.0", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.1" - }, - "devDependencies": { - "@eslint/js": "9.18.0", - "@stylistic/eslint-plugin": "2.13.0", - "ajv": "8.17.1", - "ava": "6.2.0", - "c8": "10.1.3", - "character-entities": "2.0.2", - "eslint": "9.18.0", - "eslint-plugin-jsdoc": "50.6.1", - "eslint-plugin-n": "17.15.1", - "eslint-plugin-regexp": "2.7.0", - "eslint-plugin-unicorn": "56.0.1", - "gemoji": "8.1.0", - "globby": "14.0.2", - "js-yaml": "4.1.0", - "json-schema-to-typescript": "15.0.4", - "jsonc-parser": "3.3.1", - "markdown-it-for-inline": "2.0.1", - "markdown-it-sub": "2.0.0", - "markdown-it-sup": "2.0.0", - "markdownlint-rule-extended-ascii": "0.1.0", - "nano-spawn": "0.2.0", - "npm-run-all": "4.1.5", - "terser-webpack-plugin": "5.3.11", - "toml": "3.0.0", - "typescript": "5.7.3", - "webpack": "5.97.1", - "webpack-cli": "6.0.1" - }, - "keywords": [ - "markdown", - "lint", - "md", - "CommonMark", - "markdownlint" - ] -} diff --git a/node_modules/markdownlint/schema/.markdownlint.jsonc b/node_modules/markdownlint/schema/.markdownlint.jsonc deleted file mode 100644 index f0f2f93cff..0000000000 --- a/node_modules/markdownlint/schema/.markdownlint.jsonc +++ /dev/null @@ -1,310 +0,0 @@ -// Example markdownlint configuration with all properties set to their default value -{ - - // Default state for all rules - "default": true, - - // Path to configuration file to extend - "extends": null, - - // MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md - "MD001": true, - - // MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md - "MD003": { - // Heading style - "style": "consistent" - }, - - // MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md - "MD004": { - // List style - "style": "consistent" - }, - - // MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md - "MD005": true, - - // MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md - "MD007": { - // Spaces for indent - "indent": 2, - // Whether to indent the first level of the list - "start_indented": false, - // Spaces for first level indent (when start_indented is set) - "start_indent": 2 - }, - - // MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md - "MD009": { - // Spaces for line break - "br_spaces": 2, - // Allow spaces for empty lines in list items - "list_item_empty_lines": false, - // Include unnecessary breaks - "strict": false - }, - - // MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md - "MD010": { - // Include code blocks - "code_blocks": true, - // Fenced code languages to ignore - "ignore_code_languages": [], - // Number of spaces for each hard tab - "spaces_per_tab": 1 - }, - - // MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md - "MD011": true, - - // MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md - "MD012": { - // Consecutive blank lines - "maximum": 1 - }, - - // MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md - "MD013": { - // Number of characters - "line_length": 80, - // Number of characters for headings - "heading_line_length": 80, - // Number of characters for code blocks - "code_block_line_length": 80, - // Include code blocks - "code_blocks": true, - // Include tables - "tables": true, - // Include headings - "headings": true, - // Strict length checking - "strict": false, - // Stern length checking - "stern": false - }, - - // MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md - "MD014": true, - - // MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md - "MD018": true, - - // MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md - "MD019": true, - - // MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md - "MD020": true, - - // MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md - "MD021": true, - - // MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md - "MD022": { - // Blank lines above heading - "lines_above": 1, - // Blank lines below heading - "lines_below": 1 - }, - - // MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md - "MD023": true, - - // MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md - "MD024": { - // Only check sibling headings - "siblings_only": false - }, - - // MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md - "MD025": { - // Heading level - "level": 1, - // RegExp for matching title in front matter - "front_matter_title": "^\\s*title\\s*[:=]" - }, - - // MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md - "MD026": { - // Punctuation characters - "punctuation": ".,;:!。,;:!" - }, - - // MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md - "MD027": true, - - // MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md - "MD028": true, - - // MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md - "MD029": { - // List style - "style": "one_or_ordered" - }, - - // MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md - "MD030": { - // Spaces for single-line unordered list items - "ul_single": 1, - // Spaces for single-line ordered list items - "ol_single": 1, - // Spaces for multi-line unordered list items - "ul_multi": 1, - // Spaces for multi-line ordered list items - "ol_multi": 1 - }, - - // MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md - "MD031": { - // Include list items - "list_items": true - }, - - // MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md - "MD032": true, - - // MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md - "MD033": { - // Allowed elements - "allowed_elements": [] - }, - - // MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md - "MD034": true, - - // MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md - "MD035": { - // Horizontal rule style - "style": "consistent" - }, - - // MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md - "MD036": { - // Punctuation characters - "punctuation": ".,;:!?。,;:!?" - }, - - // MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md - "MD037": true, - - // MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md - "MD038": true, - - // MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md - "MD039": true, - - // MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md - "MD040": { - // List of languages - "allowed_languages": [], - // Require language only - "language_only": false - }, - - // MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md - "MD041": { - // Heading level - "level": 1, - // RegExp for matching title in front matter - "front_matter_title": "^\\s*title\\s*[:=]" - }, - - // MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md - "MD042": true, - - // MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md - "MD043": { - // List of headings - "headings": [], - // Match case of headings - "match_case": false - }, - - // MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md - "MD044": { - // List of proper names - "names": [], - // Include code blocks - "code_blocks": true, - // Include HTML elements - "html_elements": true - }, - - // MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md - "MD045": true, - - // MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md - "MD046": { - // Block style - "style": "consistent" - }, - - // MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md - "MD047": true, - - // MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md - "MD048": { - // Code fence style - "style": "consistent" - }, - - // MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md - "MD049": { - // Emphasis style - "style": "consistent" - }, - - // MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md - "MD050": { - // Strong style - "style": "consistent" - }, - - // MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md - "MD051": { - // Ignore case of fragments - "ignore_case": false - }, - - // MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md - "MD052": { - // Include shortcut syntax - "shortcut_syntax": false - }, - - // MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md - "MD053": { - // Ignored definitions - "ignored_definitions": [ - "//" - ] - }, - - // MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md - "MD054": { - // Allow autolinks - "autolink": true, - // Allow inline links and images - "inline": true, - // Allow full reference links and images - "full": true, - // Allow collapsed reference links and images - "collapsed": true, - // Allow shortcut reference links and images - "shortcut": true, - // Allow URLs as inline links - "url_inline": true - }, - - // MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md - "MD055": { - // Table pipe style - "style": "consistent" - }, - - // MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md - "MD056": true, - - // MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md - "MD058": true -} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/.markdownlint.yaml b/node_modules/markdownlint/schema/.markdownlint.yaml deleted file mode 100644 index 6e71bfd133..0000000000 --- a/node_modules/markdownlint/schema/.markdownlint.yaml +++ /dev/null @@ -1,277 +0,0 @@ -# Example markdownlint configuration with all properties set to their default value - -# Default state for all rules -default: true - -# Path to configuration file to extend -extends: null - -# MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md -MD001: true - -# MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md -MD003: - # Heading style - style: "consistent" - -# MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md -MD004: - # List style - style: "consistent" - -# MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md -MD005: true - -# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md -MD007: - # Spaces for indent - indent: 2 - # Whether to indent the first level of the list - start_indented: false - # Spaces for first level indent (when start_indented is set) - start_indent: 2 - -# MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md -MD009: - # Spaces for line break - br_spaces: 2 - # Allow spaces for empty lines in list items - list_item_empty_lines: false - # Include unnecessary breaks - strict: false - -# MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md -MD010: - # Include code blocks - code_blocks: true - # Fenced code languages to ignore - ignore_code_languages: [] - # Number of spaces for each hard tab - spaces_per_tab: 1 - -# MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md -MD011: true - -# MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md -MD012: - # Consecutive blank lines - maximum: 1 - -# MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md -MD013: - # Number of characters - line_length: 80 - # Number of characters for headings - heading_line_length: 80 - # Number of characters for code blocks - code_block_line_length: 80 - # Include code blocks - code_blocks: true - # Include tables - tables: true - # Include headings - headings: true - # Strict length checking - strict: false - # Stern length checking - stern: false - -# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md -MD014: true - -# MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md -MD018: true - -# MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md -MD019: true - -# MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md -MD020: true - -# MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md -MD021: true - -# MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md -MD022: - # Blank lines above heading - lines_above: 1 - # Blank lines below heading - lines_below: 1 - -# MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md -MD023: true - -# MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md -MD024: - # Only check sibling headings - siblings_only: false - -# MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md -MD025: - # Heading level - level: 1 - # RegExp for matching title in front matter - front_matter_title: "^\\s*title\\s*[:=]" - -# MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md -MD026: - # Punctuation characters - punctuation: ".,;:!。,;:!" - -# MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md -MD027: true - -# MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md -MD028: true - -# MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md -MD029: - # List style - style: "one_or_ordered" - -# MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md -MD030: - # Spaces for single-line unordered list items - ul_single: 1 - # Spaces for single-line ordered list items - ol_single: 1 - # Spaces for multi-line unordered list items - ul_multi: 1 - # Spaces for multi-line ordered list items - ol_multi: 1 - -# MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md -MD031: - # Include list items - list_items: true - -# MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md -MD032: true - -# MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md -MD033: - # Allowed elements - allowed_elements: [] - -# MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md -MD034: true - -# MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md -MD035: - # Horizontal rule style - style: "consistent" - -# MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md -MD036: - # Punctuation characters - punctuation: ".,;:!?。,;:!?" - -# MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md -MD037: true - -# MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md -MD038: true - -# MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md -MD039: true - -# MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md -MD040: - # List of languages - allowed_languages: [] - # Require language only - language_only: false - -# MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md -MD041: - # Heading level - level: 1 - # RegExp for matching title in front matter - front_matter_title: "^\\s*title\\s*[:=]" - -# MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md -MD042: true - -# MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md -MD043: - # List of headings - headings: [] - # Match case of headings - match_case: false - -# MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md -MD044: - # List of proper names - names: [] - # Include code blocks - code_blocks: true - # Include HTML elements - html_elements: true - -# MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md -MD045: true - -# MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md -MD046: - # Block style - style: "consistent" - -# MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md -MD047: true - -# MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md -MD048: - # Code fence style - style: "consistent" - -# MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md -MD049: - # Emphasis style - style: "consistent" - -# MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md -MD050: - # Strong style - style: "consistent" - -# MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md -MD051: - # Ignore case of fragments - ignore_case: false - -# MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md -MD052: - # Include shortcut syntax - shortcut_syntax: false - -# MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md -MD053: - # Ignored definitions - ignored_definitions: - - "//" - -# MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md -MD054: - # Allow autolinks - autolink: true - # Allow inline links and images - inline: true - # Allow full reference links and images - full: true - # Allow collapsed reference links and images - collapsed: true - # Allow shortcut reference links and images - shortcut: true - # Allow URLs as inline links - url_inline: true - -# MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md -MD055: - # Table pipe style - style: "consistent" - -# MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md -MD056: true - -# MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md -MD058: true diff --git a/node_modules/markdownlint/schema/ValidatingConfiguration.md b/node_modules/markdownlint/schema/ValidatingConfiguration.md deleted file mode 100644 index 5d842c4981..0000000000 --- a/node_modules/markdownlint/schema/ValidatingConfiguration.md +++ /dev/null @@ -1,26 +0,0 @@ -# Validating Configuration - -A [JSON Schema][json-schema] is provided to enable validating configuration -objects: [`markdownlint-config-schema.json`][markdownlint-config-schema]. - -Some editors automatically use a JSON Schema with files that reference it. For -example, a `.markdownlint.json` file with: - -```json -"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json" -``` - -A JSON Schema validator can be used to check configuration files like so: - -```bash -npx ajv-cli validate -s ./markdownlint/schema/markdownlint-config-schema.json -d "**/.markdownlint.{json,yaml}" --strict=false -``` - -By default, any rule name is valid because of custom rules. To allow only -built-in rules, use the -[`markdownlint-config-schema-strict.json`][markdownlint-config-schema-strict] -JSON Schema instead. - -[json-schema]: https://json-schema.org -[markdownlint-config-schema]: markdownlint-config-schema.json -[markdownlint-config-schema-strict]: markdownlint-config-schema-strict.json diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json b/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json deleted file mode 100644 index fe1692651e..0000000000 --- a/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json +++ /dev/null @@ -1,1841 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema-strict.json", - "title": "markdownlint configuration schema", - "type": "object", - "properties": { - "$schema": { - "description": "JSON Schema URI (expected by some editors)", - "type": "string", - "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" - }, - "default": { - "description": "Default state for all rules", - "type": "boolean", - "default": true - }, - "extends": { - "description": "Path to configuration file to extend", - "type": [ - "string", - "null" - ], - "default": null - }, - "MD001": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "heading-increment": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "MD003": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "heading-style": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD004": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "ul-style": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD005": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "list-indent": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "MD007": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "ul-indent": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "MD009": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-trailing-spaces": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD010": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-hard-tabs": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD011": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "no-reversed-links": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "MD012": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-multiple-blanks": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD013": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "line-length": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD014": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "commands-show-output": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "MD018": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "no-missing-space-atx": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "MD019": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-atx": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "MD020": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "no-missing-space-closed-atx": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "MD021": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-closed-atx": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "MD022": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "blanks-around-headings": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD023": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "heading-start-left": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "MD024": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-duplicate-heading": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD025": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-title": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-h1": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD026": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "no-trailing-punctuation": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "MD027": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-blockquote": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "MD028": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "no-blanks-blockquote": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "MD029": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "ol-prefix": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "MD030": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "list-marker-space": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD031": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "blanks-around-fences": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD032": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "blanks-around-lists": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "MD033": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "no-inline-html": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "MD034": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "no-bare-urls": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "MD035": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "hr-style": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD036": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "no-emphasis-as-heading": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "MD037": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "no-space-in-emphasis": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "MD038": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "no-space-in-code": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "MD039": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "no-space-in-links": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "MD040": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "fenced-code-language": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD041": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-heading": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-h1": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD042": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "no-empty-links": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "MD043": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "required-headings": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD044": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "proper-names": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD045": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "no-alt-text": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "MD046": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-block-style": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD047": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "single-trailing-newline": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "MD048": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-fence-style": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD049": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "emphasis-style": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD050": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "strong-style": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD051": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "link-fragments": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD052": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "reference-links-images": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD053": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "link-image-reference-definitions": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "MD054": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "link-image-style": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD055": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "table-pipe-style": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD056": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "table-column-count": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "MD058": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "blanks-around-tables": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "headings": { - "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", - "type": "boolean", - "default": true - }, - "bullet": { - "description": "bullet : MD004, MD005, MD007, MD032", - "type": "boolean", - "default": true - }, - "ul": { - "description": "ul : MD004, MD005, MD007, MD030, MD032", - "type": "boolean", - "default": true - }, - "indentation": { - "description": "indentation : MD005, MD007, MD027", - "type": "boolean", - "default": true - }, - "whitespace": { - "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", - "type": "boolean", - "default": true - }, - "hard_tab": { - "description": "hard_tab : MD010", - "type": "boolean", - "default": true - }, - "links": { - "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "blank_lines": { - "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", - "type": "boolean", - "default": true - }, - "line_length": { - "description": "line_length : MD013", - "type": "boolean", - "default": true - }, - "code": { - "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", - "type": "boolean", - "default": true - }, - "atx": { - "description": "atx : MD018, MD019", - "type": "boolean", - "default": true - }, - "spaces": { - "description": "spaces : MD018, MD019, MD020, MD021, MD023", - "type": "boolean", - "default": true - }, - "atx_closed": { - "description": "atx_closed : MD020, MD021", - "type": "boolean", - "default": true - }, - "blockquote": { - "description": "blockquote : MD027, MD028", - "type": "boolean", - "default": true - }, - "ol": { - "description": "ol : MD029, MD030, MD032", - "type": "boolean", - "default": true - }, - "html": { - "description": "html : MD033", - "type": "boolean", - "default": true - }, - "url": { - "description": "url : MD034", - "type": "boolean", - "default": true - }, - "hr": { - "description": "hr : MD035", - "type": "boolean", - "default": true - }, - "emphasis": { - "description": "emphasis : MD036, MD037, MD049, MD050", - "type": "boolean", - "default": true - }, - "language": { - "description": "language : MD040", - "type": "boolean", - "default": true - }, - "spelling": { - "description": "spelling : MD044", - "type": "boolean", - "default": true - }, - "accessibility": { - "description": "accessibility : MD045", - "type": "boolean", - "default": true - }, - "images": { - "description": "images : MD045, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "table": { - "description": "table : MD055, MD056, MD058", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false -} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema.json b/node_modules/markdownlint/schema/markdownlint-config-schema.json deleted file mode 100644 index 58005e01c7..0000000000 --- a/node_modules/markdownlint/schema/markdownlint-config-schema.json +++ /dev/null @@ -1,1846 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json", - "title": "markdownlint configuration schema", - "type": "object", - "properties": { - "$schema": { - "description": "JSON Schema URI (expected by some editors)", - "type": "string", - "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" - }, - "default": { - "description": "Default state for all rules", - "type": "boolean", - "default": true - }, - "extends": { - "description": "Path to configuration file to extend", - "type": [ - "string", - "null" - ], - "default": null - }, - "MD001": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "heading-increment": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "MD003": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "heading-style": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD004": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "ul-style": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD005": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "list-indent": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "MD007": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "ul-indent": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "MD009": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-trailing-spaces": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD010": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-hard-tabs": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD011": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "no-reversed-links": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "MD012": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-multiple-blanks": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD013": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "line-length": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD014": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "commands-show-output": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "MD018": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "no-missing-space-atx": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "MD019": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-atx": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "MD020": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "no-missing-space-closed-atx": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "MD021": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-closed-atx": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "MD022": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "blanks-around-headings": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD023": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "heading-start-left": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "MD024": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-duplicate-heading": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD025": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-title": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-h1": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD026": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "no-trailing-punctuation": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "MD027": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-blockquote": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "MD028": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "no-blanks-blockquote": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "MD029": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "ol-prefix": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "MD030": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "list-marker-space": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD031": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "blanks-around-fences": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD032": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "blanks-around-lists": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "MD033": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "no-inline-html": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "MD034": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "no-bare-urls": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "MD035": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "hr-style": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD036": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "no-emphasis-as-heading": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "MD037": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "no-space-in-emphasis": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "MD038": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "no-space-in-code": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "MD039": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "no-space-in-links": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "MD040": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "fenced-code-language": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD041": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-heading": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-h1": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD042": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "no-empty-links": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "MD043": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "required-headings": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD044": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "proper-names": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD045": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "no-alt-text": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "MD046": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-block-style": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD047": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "single-trailing-newline": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "MD048": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-fence-style": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD049": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "emphasis-style": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD050": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "strong-style": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD051": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "link-fragments": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD052": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "reference-links-images": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD053": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "link-image-reference-definitions": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "MD054": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "link-image-style": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD055": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "table-pipe-style": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD056": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "table-column-count": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "MD058": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "blanks-around-tables": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "headings": { - "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", - "type": "boolean", - "default": true - }, - "bullet": { - "description": "bullet : MD004, MD005, MD007, MD032", - "type": "boolean", - "default": true - }, - "ul": { - "description": "ul : MD004, MD005, MD007, MD030, MD032", - "type": "boolean", - "default": true - }, - "indentation": { - "description": "indentation : MD005, MD007, MD027", - "type": "boolean", - "default": true - }, - "whitespace": { - "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", - "type": "boolean", - "default": true - }, - "hard_tab": { - "description": "hard_tab : MD010", - "type": "boolean", - "default": true - }, - "links": { - "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "blank_lines": { - "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", - "type": "boolean", - "default": true - }, - "line_length": { - "description": "line_length : MD013", - "type": "boolean", - "default": true - }, - "code": { - "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", - "type": "boolean", - "default": true - }, - "atx": { - "description": "atx : MD018, MD019", - "type": "boolean", - "default": true - }, - "spaces": { - "description": "spaces : MD018, MD019, MD020, MD021, MD023", - "type": "boolean", - "default": true - }, - "atx_closed": { - "description": "atx_closed : MD020, MD021", - "type": "boolean", - "default": true - }, - "blockquote": { - "description": "blockquote : MD027, MD028", - "type": "boolean", - "default": true - }, - "ol": { - "description": "ol : MD029, MD030, MD032", - "type": "boolean", - "default": true - }, - "html": { - "description": "html : MD033", - "type": "boolean", - "default": true - }, - "url": { - "description": "url : MD034", - "type": "boolean", - "default": true - }, - "hr": { - "description": "hr : MD035", - "type": "boolean", - "default": true - }, - "emphasis": { - "description": "emphasis : MD036, MD037, MD049, MD050", - "type": "boolean", - "default": true - }, - "language": { - "description": "language : MD040", - "type": "boolean", - "default": true - }, - "spelling": { - "description": "spelling : MD044", - "type": "boolean", - "default": true - }, - "accessibility": { - "description": "accessibility : MD045", - "type": "boolean", - "default": true - }, - "images": { - "description": "images : MD045, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "table": { - "description": "table : MD055, MD056, MD058", - "type": "boolean", - "default": true - } - }, - "additionalProperties": { - "type": [ - "boolean", - "object" - ] - } -} \ No newline at end of file diff --git a/node_modules/markdownlint/style/all.json b/node_modules/markdownlint/style/all.json deleted file mode 100644 index edfdd6d736..0000000000 --- a/node_modules/markdownlint/style/all.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "comment": "All rules", - - "default": true -} diff --git a/node_modules/markdownlint/style/cirosantilli.json b/node_modules/markdownlint/style/cirosantilli.json deleted file mode 100644 index 609a3bfe16..0000000000 --- a/node_modules/markdownlint/style/cirosantilli.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "comment": "Rules for the style guide at https://www.cirosantilli.com/markdown-style-guide/", - - "default": true, - "MD003": { - "style": "atx" - }, - "MD004": { - "style": "dash" - }, - "MD007": { - "indent": 4 - }, - "MD030": { - "ul_multi": 3, - "ol_multi": 2 - }, - "MD033": false, - "MD035": { - "style": "---" - } -} diff --git a/node_modules/markdownlint/style/prettier.json b/node_modules/markdownlint/style/prettier.json deleted file mode 100644 index 29a24e6279..0000000000 --- a/node_modules/markdownlint/style/prettier.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "comment": "Disables rules that may conflict with Prettier", - - "blanks-around-fences": false, - "blanks-around-headings": false, - "blanks-around-lists": false, - "code-fence-style": false, - "emphasis-style": false, - "heading-start-left": false, - "heading-style": false, - "hr-style": false, - "line-length": false, - "list-indent": false, - "list-marker-space": false, - "no-blanks-blockquote": false, - "no-hard-tabs": false, - "no-missing-space-atx": false, - "no-missing-space-closed-atx": false, - "no-multiple-blanks": false, - "no-multiple-space-atx": false, - "no-multiple-space-blockquote": false, - "no-multiple-space-closed-atx": false, - "no-trailing-spaces": false, - "ol-prefix": false, - "strong-style": false, - "ul-indent": false -} diff --git a/node_modules/markdownlint/style/relaxed.json b/node_modules/markdownlint/style/relaxed.json deleted file mode 100644 index 1070b5982a..0000000000 --- a/node_modules/markdownlint/style/relaxed.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "comment": "Relaxed rules", - - "default": true, - "whitespace": false, - "line_length": false, - "ul-indent": false, - "no-inline-html": false, - "no-bare-urls": false, - "fenced-code-language": false, - "first-line-h1": false -} diff --git a/node_modules/mdurl/LICENSE b/node_modules/mdurl/LICENSE deleted file mode 100644 index 3b2c7bfb15..0000000000 --- a/node_modules/mdurl/LICENSE +++ /dev/null @@ -1,45 +0,0 @@ -Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -.parse() is based on Joyent's node.js `url` code: - -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/mdurl/README.md b/node_modules/mdurl/README.md deleted file mode 100644 index c7f9e959a0..0000000000 --- a/node_modules/mdurl/README.md +++ /dev/null @@ -1,102 +0,0 @@ -# mdurl - -[![CI](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml) -[![NPM version](https://img.shields.io/npm/v/mdurl.svg?style=flat)](https://www.npmjs.org/package/mdurl) - -> URL utilities for [markdown-it](https://github.com/markdown-it/markdown-it) parser. - - -## API - -### .encode(str [, exclude, keepEncoded]) -> String - -Percent-encode a string, avoiding double encoding. Don't touch `/a-zA-Z0-9/` + -excluded chars + `/%[a-fA-F0-9]{2}/` (if not disabled). Broken surrorates are -replaced with `U+FFFD`. - -Params: - -- __str__ - input string. -- __exclude__ - optional, `;/?:@&=+$,-_.!~*'()#`. Additional chars to keep intact - (except `/a-zA-Z0-9/`). -- __keepEncoded__ - optional, `true`. By default it skips already encoded sequences - (`/%[a-fA-F0-9]{2}/`). If set to `false`, `%` will be encoded. - - -### encode.defaultChars, encode.componentChars - -You can use these constants as second argument to `encode` function. - - - `encode.defaultChars` is the same exclude set as in the standard `encodeURI()` function - - `encode.componentChars` is the same exclude set as in the `encodeURIComponent()` function - -For example, `encode('something', encode.componentChars, true)` is roughly the equivalent of -the `encodeURIComponent()` function (except `encode()` doesn't throw). - - -### .decode(str [, exclude]) -> String - -Decode percent-encoded string. Invalid percent-encoded sequences (e.g. `%2G`) -are left as is. Invalid UTF-8 characters are replaced with `U+FFFD`. - - -Params: - -- __str__ - input string. -- __exclude__ - set of characters to leave encoded, optional, `;/?:@&=+$,#`. - - -### decode.defaultChars, decode.componentChars - -You can use these constants as second argument to `decode` function. - - - `decode.defaultChars` is the same exclude set as in the standard `decodeURI()` function - - `decode.componentChars` is the same exclude set as in the `decodeURIComponent()` function - -For example, `decode('something', decode.defaultChars)` has the same behavior as -`decodeURI('something')` on a correctly encoded input. - - -### .parse(url, slashesDenoteHost) -> urlObs - -Parse url string. Similar to node's [url.parse](http://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost), but without any -normalizations and query string parse. - - - __url__ - input url (string) - - __slashesDenoteHost__ - if url starts with `//`, expect a hostname after it. Optional, `false`. - -Result (hash): - -- protocol -- slashes -- auth -- port -- hostname -- hash -- search -- pathname - -Difference with node's `url`: - -1. No leading slash in paths, e.g. in `url.parse('http://foo?bar')` pathname is - ``, not `/` -2. Backslashes are not replaced with slashes, so `http:\\example.org\` is - treated like a relative path -3. Trailing colon is treated like a part of the path, i.e. in - `http://example.org:foo` pathname is `:foo` -4. Nothing is URL-encoded in the resulting object, (in joyent/node some chars - in auth and paths are encoded) -5. `url.parse()` does not have `parseQueryString` argument -6. Removed extraneous result properties: `host`, `path`, `query`, etc., - which can be constructed using other parts of the url. - - -### .format(urlObject) - -Format an object previously obtained with `.parse()` function. Similar to node's -[url.format](http://nodejs.org/api/url.html#url_url_format_urlobj). - - -## License - -[MIT](https://github.com/markdown-it/mdurl/blob/master/LICENSE) diff --git a/node_modules/mdurl/index.mjs b/node_modules/mdurl/index.mjs deleted file mode 100644 index fd78c377f5..0000000000 --- a/node_modules/mdurl/index.mjs +++ /dev/null @@ -1,11 +0,0 @@ -import decode from './lib/decode.mjs' -import encode from './lib/encode.mjs' -import format from './lib/format.mjs' -import parse from './lib/parse.mjs' - -export { - decode, - encode, - format, - parse -} diff --git a/node_modules/mdurl/package.json b/node_modules/mdurl/package.json deleted file mode 100644 index 6e89bebc93..0000000000 --- a/node_modules/mdurl/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "mdurl", - "version": "2.0.0", - "description": "URL utilities for markdown-it", - "repository": "markdown-it/mdurl", - "license": "MIT", - "main": "build/index.cjs.js", - "module": "index.mjs", - "exports": { - ".": { - "require": "./build/index.cjs.js", - "import": "./index.mjs" - }, - "./*": { - "require": "./*", - "import": "./*" - } - }, - "scripts": { - "lint": "eslint .", - "build": "rollup -c", - "test": "npm run lint && npm run build && c8 --exclude build --exclude test -r text -r html -r lcov mocha", - "prepublishOnly": "npm run lint && npm run build" - }, - "files": [ - "index.mjs", - "lib/", - "build/" - ], - "devDependencies": { - "c8": "^8.0.1", - "eslint": "^8.54.0", - "eslint-config-standard": "^17.1.0", - "mocha": "^10.2.0", - "rollup": "^4.6.1" - } -} diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts b/node_modules/micromark-core-commonmark/dev/index.d.ts deleted file mode 100644 index bd832f665c..0000000000 --- a/node_modules/micromark-core-commonmark/dev/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { attention } from "./lib/attention.js"; -export { autolink } from "./lib/autolink.js"; -export { blankLine } from "./lib/blank-line.js"; -export { blockQuote } from "./lib/block-quote.js"; -export { characterEscape } from "./lib/character-escape.js"; -export { characterReference } from "./lib/character-reference.js"; -export { codeFenced } from "./lib/code-fenced.js"; -export { codeIndented } from "./lib/code-indented.js"; -export { codeText } from "./lib/code-text.js"; -export { content } from "./lib/content.js"; -export { definition } from "./lib/definition.js"; -export { hardBreakEscape } from "./lib/hard-break-escape.js"; -export { headingAtx } from "./lib/heading-atx.js"; -export { htmlFlow } from "./lib/html-flow.js"; -export { htmlText } from "./lib/html-text.js"; -export { labelEnd } from "./lib/label-end.js"; -export { labelStartImage } from "./lib/label-start-image.js"; -export { labelStartLink } from "./lib/label-start-link.js"; -export { lineEnding } from "./lib/line-ending.js"; -export { list } from "./lib/list.js"; -export { setextUnderline } from "./lib/setext-underline.js"; -export { thematicBreak } from "./lib/thematic-break.js"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts.map b/node_modules/micromark-core-commonmark/dev/index.d.ts.map deleted file mode 100644 index ca7a93a9a2..0000000000 --- a/node_modules/micromark-core-commonmark/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.js b/node_modules/micromark-core-commonmark/dev/index.js deleted file mode 100644 index f9143e0937..0000000000 --- a/node_modules/micromark-core-commonmark/dev/index.js +++ /dev/null @@ -1,22 +0,0 @@ -export {attention} from './lib/attention.js' -export {autolink} from './lib/autolink.js' -export {blankLine} from './lib/blank-line.js' -export {blockQuote} from './lib/block-quote.js' -export {characterEscape} from './lib/character-escape.js' -export {characterReference} from './lib/character-reference.js' -export {codeFenced} from './lib/code-fenced.js' -export {codeIndented} from './lib/code-indented.js' -export {codeText} from './lib/code-text.js' -export {content} from './lib/content.js' -export {definition} from './lib/definition.js' -export {hardBreakEscape} from './lib/hard-break-escape.js' -export {headingAtx} from './lib/heading-atx.js' -export {htmlFlow} from './lib/html-flow.js' -export {htmlText} from './lib/html-text.js' -export {labelEnd} from './lib/label-end.js' -export {labelStartImage} from './lib/label-start-image.js' -export {labelStartLink} from './lib/label-start-link.js' -export {lineEnding} from './lib/line-ending.js' -export {list} from './lib/list.js' -export {setextUnderline} from './lib/setext-underline.js' -export {thematicBreak} from './lib/thematic-break.js' diff --git a/node_modules/micromark-core-commonmark/index.d.ts b/node_modules/micromark-core-commonmark/index.d.ts deleted file mode 100644 index bd832f665c..0000000000 --- a/node_modules/micromark-core-commonmark/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { attention } from "./lib/attention.js"; -export { autolink } from "./lib/autolink.js"; -export { blankLine } from "./lib/blank-line.js"; -export { blockQuote } from "./lib/block-quote.js"; -export { characterEscape } from "./lib/character-escape.js"; -export { characterReference } from "./lib/character-reference.js"; -export { codeFenced } from "./lib/code-fenced.js"; -export { codeIndented } from "./lib/code-indented.js"; -export { codeText } from "./lib/code-text.js"; -export { content } from "./lib/content.js"; -export { definition } from "./lib/definition.js"; -export { hardBreakEscape } from "./lib/hard-break-escape.js"; -export { headingAtx } from "./lib/heading-atx.js"; -export { htmlFlow } from "./lib/html-flow.js"; -export { htmlText } from "./lib/html-text.js"; -export { labelEnd } from "./lib/label-end.js"; -export { labelStartImage } from "./lib/label-start-image.js"; -export { labelStartLink } from "./lib/label-start-link.js"; -export { lineEnding } from "./lib/line-ending.js"; -export { list } from "./lib/list.js"; -export { setextUnderline } from "./lib/setext-underline.js"; -export { thematicBreak } from "./lib/thematic-break.js"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.d.ts.map b/node_modules/micromark-core-commonmark/index.d.ts.map deleted file mode 100644 index ca7a93a9a2..0000000000 --- a/node_modules/micromark-core-commonmark/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.js b/node_modules/micromark-core-commonmark/index.js deleted file mode 100644 index 969b1cdf12..0000000000 --- a/node_modules/micromark-core-commonmark/index.js +++ /dev/null @@ -1,22 +0,0 @@ -export { attention } from './lib/attention.js'; -export { autolink } from './lib/autolink.js'; -export { blankLine } from './lib/blank-line.js'; -export { blockQuote } from './lib/block-quote.js'; -export { characterEscape } from './lib/character-escape.js'; -export { characterReference } from './lib/character-reference.js'; -export { codeFenced } from './lib/code-fenced.js'; -export { codeIndented } from './lib/code-indented.js'; -export { codeText } from './lib/code-text.js'; -export { content } from './lib/content.js'; -export { definition } from './lib/definition.js'; -export { hardBreakEscape } from './lib/hard-break-escape.js'; -export { headingAtx } from './lib/heading-atx.js'; -export { htmlFlow } from './lib/html-flow.js'; -export { htmlText } from './lib/html-text.js'; -export { labelEnd } from './lib/label-end.js'; -export { labelStartImage } from './lib/label-start-image.js'; -export { labelStartLink } from './lib/label-start-link.js'; -export { lineEnding } from './lib/line-ending.js'; -export { list } from './lib/list.js'; -export { setextUnderline } from './lib/setext-underline.js'; -export { thematicBreak } from './lib/thematic-break.js'; \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/license b/node_modules/micromark-core-commonmark/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-core-commonmark/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-core-commonmark/package.json b/node_modules/micromark-core-commonmark/package.json deleted file mode 100644 index 6e158168cc..0000000000 --- a/node_modules/micromark-core-commonmark/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "micromark-core-commonmark", - "version": "2.0.2", - "description": "The CommonMark markdown constructs", - "license": "MIT", - "keywords": [ - "micromark", - "core", - "commonmark" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-core-commonmark", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "max-depth": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-core-commonmark/readme.md b/node_modules/micromark-core-commonmark/readme.md deleted file mode 100644 index 5a47520de9..0000000000 --- a/node_modules/micromark-core-commonmark/readme.md +++ /dev/null @@ -1,171 +0,0 @@ -# micromark-core-commonmark - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] constructs that make up the core of CommonMark. -Some of these can be [turned off][disable], but they are often essential to -markdown and weird things might happen. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes the default constructs. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-core-commonmark -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import * as core from 'https://esm.sh/micromark-core-commonmark@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {autolink} from 'micromark-core-commonmark' - -console.log(autolink) // Do things with `autolink`. -``` - -## API - -This module exports the following identifiers: `attention`, `autolink`, -`blankLine`, `blockQuote`, `characterEscape`, `characterReference`, -`codeFenced`, `codeIndented`, `codeText`, `content`, `definition`, -`hardBreakEscape`, `headingAtx`, `htmlFlow`, `htmlText`, `labelEnd`, -`labelStartImage`, `labelStartLink`, `lineEnding`, `list`, `setextUnderline`, -`thematicBreak`. -There is no default export. - -Each identifier refers to a [construct][]. - -See the code for more on the exported constructs. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-core-commonmark@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-core-commonmark.svg - -[downloads]: https://www.npmjs.com/package/micromark-core-commonmark - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-core-commonmark - -[bundle-size]: https://bundlejs.com/?q=micromark-core-commonmark - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[disable]: https://github.com/micromark/micromark#case-turn-off-constructs - -[construct]: https://github.com/micromark/micromark#constructs - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark diff --git a/node_modules/micromark-extension-directive/dev/index.d.ts b/node_modules/micromark-extension-directive/dev/index.d.ts deleted file mode 100644 index b5bac9fe47..0000000000 --- a/node_modules/micromark-extension-directive/dev/index.d.ts +++ /dev/null @@ -1,156 +0,0 @@ -import type {CompileContext} from 'micromark-util-types' - -export {directive} from './lib/syntax.js' -export {directiveHtml} from './lib/html.js' - -/** - * Internal tuple representing an attribute. - */ -type AttributeTuple = [key: string, value: string] - -/** - * Directive attribute. - */ -interface Attributes { - /** - * Key to value. - */ - [key: string]: string -} - -/** - * Structure representing a directive. - */ -export interface Directive { - /** - * Private :) - */ - _fenceCount?: number | undefined - /** - * Object w/ HTML attributes. - */ - attributes?: Attributes | undefined - /** - * Compiled HTML content inside container directive. - */ - content?: string | undefined - /** - * Compiled HTML content that was in `[brackets]`. - */ - label?: string | undefined - /** - * Name of directive. - */ - name: string - /** - * Kind. - */ - type: 'containerDirective' | 'leafDirective' | 'textDirective' -} - -/** - * Handle a directive. - * - * @param this - * Current context. - * @param directive - * Directive. - * @returns - * Signal whether the directive was handled. - * - * Yield `false` to let the fallback (a special handle for `'*'`) handle it. - */ -export type Handle = ( - this: CompileContext, - directive: Directive -) => boolean | undefined - -/** - * Configuration. - * - * > 👉 **Note**: the special field `'*'` can be used to specify a fallback - * > handle to handle all otherwise unhandled directives. - */ -export interface HtmlOptions { - [name: string]: Handle -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - directiveAttributes?: Array - directiveStack?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - directiveContainer: 'directiveContainer' - directiveContainerAttributes: 'directiveContainerAttributes' - directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' - directiveContainerAttribute: 'directiveContainerAttribute' - directiveContainerAttributeId: 'directiveContainerAttributeId' - directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' - directiveContainerAttributeClass: 'directiveContainerAttributeClass' - directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' - directiveContainerAttributeName: 'directiveContainerAttributeName' - directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' - directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' - directiveContainerAttributeValue: 'directiveContainerAttributeValue' - directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' - directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' - directiveContainerContent: 'directiveContainerContent' - directiveContainerFence: 'directiveContainerFence' - directiveContainerLabel: 'directiveContainerLabel' - directiveContainerLabelMarker: 'directiveContainerLabelMarker' - directiveContainerLabelString: 'directiveContainerLabelString' - directiveContainerName: 'directiveContainerName' - directiveContainerSequence: 'directiveContainerSequence' - - directiveLeaf: 'directiveLeaf' - directiveLeafAttributes: 'directiveLeafAttributes' - directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' - directiveLeafAttribute: 'directiveLeafAttribute' - directiveLeafAttributeId: 'directiveLeafAttributeId' - directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' - directiveLeafAttributeClass: 'directiveLeafAttributeClass' - directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' - directiveLeafAttributeName: 'directiveLeafAttributeName' - directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' - directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' - directiveLeafAttributeValue: 'directiveLeafAttributeValue' - directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' - directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' - directiveLeafLabel: 'directiveLeafLabel' - directiveLeafLabelMarker: 'directiveLeafLabelMarker' - directiveLeafLabelString: 'directiveLeafLabelString' - directiveLeafName: 'directiveLeafName' - directiveLeafSequence: 'directiveLeafSequence' - - directiveText: 'directiveText' - directiveTextAttributes: 'directiveTextAttributes' - directiveTextAttributesMarker: 'directiveTextAttributesMarker' - directiveTextAttribute: 'directiveTextAttribute' - directiveTextAttributeId: 'directiveTextAttributeId' - directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' - directiveTextAttributeClass: 'directiveTextAttributeClass' - directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' - directiveTextAttributeName: 'directiveTextAttributeName' - directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' - directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' - directiveTextAttributeValue: 'directiveTextAttributeValue' - directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' - directiveTextAttributeValueData: 'directiveTextAttributeValueData' - directiveTextLabel: 'directiveTextLabel' - directiveTextLabelMarker: 'directiveTextLabelMarker' - directiveTextLabelString: 'directiveTextLabelString' - directiveTextMarker: 'directiveTextMarker' - directiveTextName: 'directiveTextName' - } -} diff --git a/node_modules/micromark-extension-directive/dev/index.js b/node_modules/micromark-extension-directive/dev/index.js deleted file mode 100644 index f290efe57b..0000000000 --- a/node_modules/micromark-extension-directive/dev/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: more types exported from `index.d.ts`. -export {directive} from './lib/syntax.js' -export {directiveHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-directive/index.d.ts b/node_modules/micromark-extension-directive/index.d.ts deleted file mode 100644 index b5bac9fe47..0000000000 --- a/node_modules/micromark-extension-directive/index.d.ts +++ /dev/null @@ -1,156 +0,0 @@ -import type {CompileContext} from 'micromark-util-types' - -export {directive} from './lib/syntax.js' -export {directiveHtml} from './lib/html.js' - -/** - * Internal tuple representing an attribute. - */ -type AttributeTuple = [key: string, value: string] - -/** - * Directive attribute. - */ -interface Attributes { - /** - * Key to value. - */ - [key: string]: string -} - -/** - * Structure representing a directive. - */ -export interface Directive { - /** - * Private :) - */ - _fenceCount?: number | undefined - /** - * Object w/ HTML attributes. - */ - attributes?: Attributes | undefined - /** - * Compiled HTML content inside container directive. - */ - content?: string | undefined - /** - * Compiled HTML content that was in `[brackets]`. - */ - label?: string | undefined - /** - * Name of directive. - */ - name: string - /** - * Kind. - */ - type: 'containerDirective' | 'leafDirective' | 'textDirective' -} - -/** - * Handle a directive. - * - * @param this - * Current context. - * @param directive - * Directive. - * @returns - * Signal whether the directive was handled. - * - * Yield `false` to let the fallback (a special handle for `'*'`) handle it. - */ -export type Handle = ( - this: CompileContext, - directive: Directive -) => boolean | undefined - -/** - * Configuration. - * - * > 👉 **Note**: the special field `'*'` can be used to specify a fallback - * > handle to handle all otherwise unhandled directives. - */ -export interface HtmlOptions { - [name: string]: Handle -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - directiveAttributes?: Array - directiveStack?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - directiveContainer: 'directiveContainer' - directiveContainerAttributes: 'directiveContainerAttributes' - directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' - directiveContainerAttribute: 'directiveContainerAttribute' - directiveContainerAttributeId: 'directiveContainerAttributeId' - directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' - directiveContainerAttributeClass: 'directiveContainerAttributeClass' - directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' - directiveContainerAttributeName: 'directiveContainerAttributeName' - directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' - directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' - directiveContainerAttributeValue: 'directiveContainerAttributeValue' - directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' - directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' - directiveContainerContent: 'directiveContainerContent' - directiveContainerFence: 'directiveContainerFence' - directiveContainerLabel: 'directiveContainerLabel' - directiveContainerLabelMarker: 'directiveContainerLabelMarker' - directiveContainerLabelString: 'directiveContainerLabelString' - directiveContainerName: 'directiveContainerName' - directiveContainerSequence: 'directiveContainerSequence' - - directiveLeaf: 'directiveLeaf' - directiveLeafAttributes: 'directiveLeafAttributes' - directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' - directiveLeafAttribute: 'directiveLeafAttribute' - directiveLeafAttributeId: 'directiveLeafAttributeId' - directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' - directiveLeafAttributeClass: 'directiveLeafAttributeClass' - directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' - directiveLeafAttributeName: 'directiveLeafAttributeName' - directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' - directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' - directiveLeafAttributeValue: 'directiveLeafAttributeValue' - directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' - directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' - directiveLeafLabel: 'directiveLeafLabel' - directiveLeafLabelMarker: 'directiveLeafLabelMarker' - directiveLeafLabelString: 'directiveLeafLabelString' - directiveLeafName: 'directiveLeafName' - directiveLeafSequence: 'directiveLeafSequence' - - directiveText: 'directiveText' - directiveTextAttributes: 'directiveTextAttributes' - directiveTextAttributesMarker: 'directiveTextAttributesMarker' - directiveTextAttribute: 'directiveTextAttribute' - directiveTextAttributeId: 'directiveTextAttributeId' - directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' - directiveTextAttributeClass: 'directiveTextAttributeClass' - directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' - directiveTextAttributeName: 'directiveTextAttributeName' - directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' - directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' - directiveTextAttributeValue: 'directiveTextAttributeValue' - directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' - directiveTextAttributeValueData: 'directiveTextAttributeValueData' - directiveTextLabel: 'directiveTextLabel' - directiveTextLabelMarker: 'directiveTextLabelMarker' - directiveTextLabelString: 'directiveTextLabelString' - directiveTextMarker: 'directiveTextMarker' - directiveTextName: 'directiveTextName' - } -} diff --git a/node_modules/micromark-extension-directive/index.js b/node_modules/micromark-extension-directive/index.js deleted file mode 100644 index 47666d68ef..0000000000 --- a/node_modules/micromark-extension-directive/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: more types exported from `index.d.ts`. -export { directive } from './lib/syntax.js'; -export { directiveHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-directive/license b/node_modules/micromark-extension-directive/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-directive/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-directive/package.json b/node_modules/micromark-extension-directive/package.json deleted file mode 100644 index 3e4b8ffdaf..0000000000 --- a/node_modules/micromark-extension-directive/package.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "name": "micromark-extension-directive", - "version": "3.0.2", - "description": "micromark extension to support generic directives (`:cite[smith04]`)", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "generic", - "directive", - "container", - "extension", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-directive", - "bugs": "https://github.com/micromark/micromark-extension-directive/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "c8": "^10.0.0", - "html-void-elements": "^3.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.59.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "overrides": [ - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": true - } - ], - "@typescript-eslint/consistent-indexed-object-style": [ - "error", - "index-signature" - ], - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface" - ] - } - } - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "max-params": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off" - } - } -} diff --git a/node_modules/micromark-extension-directive/readme.md b/node_modules/micromark-extension-directive/readme.md deleted file mode 100644 index f333822e26..0000000000 --- a/node_modules/micromark-extension-directive/readme.md +++ /dev/null @@ -1,424 +0,0 @@ -# micromark-extension-directive - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support [directives][prop] (`:cite[smith04]` and -such). - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`directive()`](#directive) - * [`directiveHtml(options?)`](#directivehtmloptions) - * [`Directive`](#directive-1) - * [`Handle`](#handle) - * [`HtmlOptions`](#htmloptions) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains two extensions that add support for directive syntax in -markdown to [`micromark`][micromark]. - -## When to use this - -This project is useful when you want to solve the need for an infinite number -of potential extensions to markdown in a single markdown-esque way. - -You can use these extensions when you are working with [`micromark`][micromark] -already. - -When you need a syntax tree, you can combine this package with -[`mdast-util-directive`][mdast-util-directive]. - -All these packages are used [`remark-directive`][remark-directive], which -focusses on making it easier to transform content by abstracting these -internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -[npm][]: - -```sh -npm install micromark-extension-directive -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {directive, directiveHtml} from 'https://esm.sh/micromark-extension-directive@3' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say our document `example.md` contains: - -```markdown -A lovely language know as :abbr[HTML]{title="HyperText Markup Language"}. -``` - -…and our module `example.js` looks as follows: - -```js -/** - * @import {Handle} from 'micromark-extension-directive' - * @import {CompileContext} from 'micromark-util-types' - */ - -import fs from 'node:fs/promises' -import {micromark} from 'micromark' -import {directive, directiveHtml} from 'micromark-extension-directive' - -const output = micromark(await fs.readFile('example.md'), { - extensions: [directive()], - htmlExtensions: [directiveHtml({abbr})] -}) - -console.log(output) - -/** - * @this {CompileContext} - * @type {Handle} - * @returns {undefined} - */ -function abbr(d) { - if (d.type !== 'textDirective') return false - - this.tag('') - this.raw(d.label || '') - this.tag('') -} -``` - -…now running `node example.js` yields: - -```html -

      A lovely language know as HTML.

      -``` - -## API - -This package exports the identifiers [`directive`][api-directive] and -[`directiveHtml`][api-directive-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `directive()` - -Create an extension for `micromark` to enable directive syntax. - -###### Returns - -Extension for `micromark` that can be passed in `extensions`, to enable -directive syntax ([`Extension`][micromark-extension]). - -### `directiveHtml(options?)` - -Create an extension for `micromark` to support directives when serializing to -HTML. - -> 👉 **Note**: this uses KaTeX to render math. - -###### Parameters - -* `options` ([`HtmlOptions`][api-html-options], default: `{}`) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions`, to -support directives when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -### `Directive` - -Structure representing a directive (TypeScript type). - -###### Fields - -* `type` (`'containerDirective'`, `'leafDirective'`, or `'textDirective'`) - — kind -* `name` (`string`) - — name of directive -* `label` (`string` or `undefined`) - — compiled HTML content that was in `[brackets]` -* `attributes` (`Record` or `undefined`) - — object w/ HTML attributes -* `content` (`string` or `undefined`) - — compiled HTML content inside container directive - -### `Handle` - -Handle a directive (TypeScript type). - -###### Parameters - -* `this` ([`CompileContext`][micromark-compile-context]) - — current context -* `directive` ([`Directive`][api-directive-type]) - — directive - -###### Returns - -Signal whether the directive was handled (`boolean`, default: `true`). -Yield `false` to let the fallback (a special handle for `'*'`) handle it. - -### `HtmlOptions` - -Configuration (TypeScript type). - -> 👉 **Note**: the special field `'*'` can be used to specify a fallback handle -> to handle all otherwise unhandled directives. - -###### Type - -```ts -type HtmlOptions = Record -``` - -## Authoring - -When authoring markdown with directives, keep in mind that they don’t work in -most places. -On your own site it can be great! - -## HTML - -You can define how directives are turned into HTML. -If directives are not handled, they do not emit anything. - -## CSS - -How to display directives is left as an exercise for the reader. - -## Syntax - -The syntax looks like this: - -```markdown -Directives in text can form with a single colon, such as :cite[smith04]. -Their syntax is `:name[label]{attributes}`. - -Leafs (block without content) can form by using two colons: - -::youtube[Video of a cat in a box]{vid=01ab2cd3efg} - -Their syntax is `::name[label]{attributes}` on its own line. - -Containers (blocks with content) can form by using three colons: - -:::spoiler -He dies. -::: - -The `name` part is required. The first character must be a letter, other -characters can be alphanumerical, `-`, and `_`. -`-` or `_` cannot end a name. - -The `[label]` part is optional (`:x` and `:x[]` are equivalent)†. -When used, it can include text constructs such as emphasis and so on: `x[a *b* -c]`. - -The `{attributes}` part is optional (`:x` and `:x{}` are equivalent)†. -When used, it is handled like HTML attributes, such as that `{a}`, `{a=""}`, -, `{a=''}` but also `{a=b}`, `{a="b"}`, and `{a='b'}` are equivalent. -Shortcuts are available for `id=` (`{#readme}` for `{id=readme}`) and -`class` (`{.big}` for `{class=big}`). -When multiple ids are found, the last is used; when multiple classes are found, -they are combined: `{.red class=green .blue}` is equivalent to -`{.red .green .blue}` and `{class="red green blue"}`. - -† there is one case where a name must be followed by an empty label or empty -attributes: a *text* directive that only has a name, cannot be followed by a -colon. So, `:red:` doesn’t work. Use either `:red[]` or `:red{}` instead. -The reason for this is to allow GitHub emoji (gemoji) and directives to coexist. - -Containers can be nested by using more colons outside: - -::::spoiler -He dies. - -:::spoiler -She is born. -::: -:::: - -The closing fence must include the same or more colons as the opening. -If no closing is found, the container runs to the end of its parent container -(block quote, list item, document, or other container). - -::::spoiler -These three are not enough to close -::: -So this line is also part of the container. -``` - -Note that while other implementations are sometimes loose in what they allow, -this implementation mimics CommonMark as closely as possible: - -* Whitespace is not allowed between colons and name (~~`: a`~~), name and - label (~~`:a []`~~), name and attributes (~~`:a {}`~~), or label and - attributes (~~`:a[] {}`~~) — because it’s not allowed in links either - (~~`[] ()`~~) -* No trailing colons allowed on the opening fence of a container - (~~`:::a:::`~~) — because it’s not allowed in fenced code either -* The label and attributes in a leaf or container cannot include line endings - (~~`::a[b\nc]`~~) — because it’s not allowed in fenced code either - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types [`Directive`][api-directive-type], -[`Handle`][api-handle], and [`HtmlOptions`][api-html-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-directive@^3`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe assuming that you write safe handlers. -Any vulnerability in your code could open you to a -[cross-site scripting (XSS)][xss] attack. - -## Related - -* [`remark-directive`][remark-directive] - — remark plugin to support directives -* [`mdast-util-directive`][mdast-util-directive] - — mdast utility to support directives - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-directive/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-directive/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-directive.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-directive - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-directive.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-directive - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-directive - -[size]: https://bundlejs.com/?q=micromark-extension-directive - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-compile-context]: https://github.com/micromark/micromark/blob/41e3c4c/packages/micromark-util-types/index.js#L457 - -[mdast-util-directive]: https://github.com/syntax-tree/mdast-util-directive - -[remark-directive]: https://github.com/remarkjs/remark-directive - -[prop]: https://talk.commonmark.org/t/generic-directives-plugins-syntax/444 - -[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting - -[api-directive]: #directive - -[api-directive-html]: #directivehtmloptions - -[api-directive-type]: #directive-1 - -[api-handle]: #handle - -[api-html-options]: #htmloptions diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts deleted file mode 100644 index 36f53b55bf..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export {gfmAutolinkLiteral} from './lib/syntax.js' -export {gfmAutolinkLiteralHtml} from './lib/html.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token with a field to improve performance. - */ - interface Token { - _gfmAutolinkLiteralWalkedInto?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - literalAutolink: 'literalAutolink' - literalAutolinkEmail: 'literalAutolinkEmail' - literalAutolinkHttp: 'literalAutolinkHttp' - literalAutolinkWww: 'literalAutolinkWww' - } -} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js deleted file mode 100644 index 928d4456ab..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export {gfmAutolinkLiteral} from './lib/syntax.js' -export {gfmAutolinkLiteralHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts deleted file mode 100644 index 36f53b55bf..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export {gfmAutolinkLiteral} from './lib/syntax.js' -export {gfmAutolinkLiteralHtml} from './lib/html.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token with a field to improve performance. - */ - interface Token { - _gfmAutolinkLiteralWalkedInto?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - literalAutolink: 'literalAutolink' - literalAutolinkEmail: 'literalAutolinkEmail' - literalAutolinkHttp: 'literalAutolinkHttp' - literalAutolinkWww: 'literalAutolinkWww' - } -} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.js b/node_modules/micromark-extension-gfm-autolink-literal/index.js deleted file mode 100644 index 5194682ad9..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { gfmAutolinkLiteral } from './lib/syntax.js'; -export { gfmAutolinkLiteralHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-autolink-literal/license b/node_modules/micromark-extension-gfm-autolink-literal/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-autolink-literal/package.json b/node_modules/micromark-extension-gfm-autolink-literal/package.json deleted file mode 100644 index 2b1b6bd476..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "micromark-extension-gfm-autolink-literal", - "version": "2.1.0", - "description": "micromark extension to support GFM autolink literals", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "literal", - "url", - "autolink", - "auto", - "link", - "gfm", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-gfm-autolink-literal", - "bugs": "https://github.com/micromark/micromark-extension-gfm-autolink-literal/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "create-gfm-fixtures": "^1.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "rehype": "^13.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "prettier": true, - "rules": { - "complexity": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-string-replace-all": "off" - }, - "overrides": [ - { - "files": [ - "**/*.ts" - ], - "rules": { - "@typescript-eslint/consistent-type-definitions": 0 - } - }, - { - "files": [ - "test/**/*.js" - ], - "rules": { - "no-await-in-loop": 0 - } - } - ] - } -} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/readme.md b/node_modules/micromark-extension-gfm-autolink-literal/readme.md deleted file mode 100644 index 61651de01a..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/readme.md +++ /dev/null @@ -1,422 +0,0 @@ -# micromark-extension-gfm-autolink-literal - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support GFM [literal autolinks][spec]. - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`gfmAutolinkLiteral()`](#gfmautolinkliteral) - * [`gfmAutolinkLiteralHtml()`](#gfmautolinkliteralhtml) -* [Bugs](#bugs) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains extensions that add support for the extra autolink syntax -enabled by GFM to [`micromark`][micromark]. - -GitHub employs different algorithms to autolink: one at parse time and one at -transform time (similar to how @mentions are done at transform time). -This difference can be observed because character references and escapes are -handled differently. -But also because issues/PRs/comments omit (perhaps by accident?) the second -algorithm for `www.`, `http://`, and `https://` links (but not for email links). - -As this is a syntax extension, it focuses on the first algorithm. -The second algorithm is performed by -[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. -The `html` part of this micromark extension does not operate on an AST and hence -can’t perform the second algorithm. - -The implementation of autolink literal on github.com is currently buggy. -The bugs have been reported on [`cmark-gfm`][cmark-gfm]. -This micromark extension matches github.com except for its bugs. - -## When to use this - -This project is useful when you want to support autolink literals in markdown. - -You can use these extensions when you are working with [`micromark`][micromark]. -To support all GFM features, use -[`micromark-extension-gfm`][micromark-extension-gfm] instead. - -When you need a syntax tree, combine this package with -[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. - -All these packages are used in [`remark-gfm`][remark-gfm], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-extension-gfm-autolink-literal -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {gfmAutolinkLiteral, gfmAutolinkLiteralHtml} from 'https://esm.sh/micromark-extension-gfm-autolink-literal@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {micromark} from 'micromark' -import { - gfmAutolinkLiteral, - gfmAutolinkLiteralHtml -} from 'micromark-extension-gfm-autolink-literal' - -const output = micromark('Just a URL: www.example.com.', { - extensions: [gfmAutolinkLiteral()], - htmlExtensions: [gfmAutolinkLiteralHtml()] -}) - -console.log(output) -``` - -Yields: - -```html -

      Just a URL: www.example.com.

      -``` - -## API - -This package exports the identifiers -[`gfmAutolinkLiteral`][api-gfm-autolink-literal] and -[`gfmAutolinkLiteralHtml`][api-gfm-autolink-literal-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `gfmAutolinkLiteral()` - -Create an extension for `micromark` to support GitHub autolink literal -syntax. - -###### Parameters - -Extension for `micromark` that can be passed in `extensions` to enable GFM -autolink literal syntax ([`Extension`][micromark-extension]). - -### `gfmAutolinkLiteralHtml()` - -Create an HTML extension for `micromark` to support GitHub autolink literal -when serializing to HTML. - -###### Parameters - -Extension for `micromark` that can be passed in `htmlExtensions` to support -GitHub autolink literal when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -## Bugs - -GitHub’s own algorithm to parse autolink literals contains three bugs. -A smaller bug is left unfixed in this project for consistency. -Two main bugs are not present in this project. -The issues relating to autolink literals are: - -* [GFM autolink extension (`www.`, `https?://` parts): links don’t work when - after bracket](https://github.com/github/cmark-gfm/issues/278)\ - fixed here ✅ -* [GFM autolink extension (`www.` part): uppercase does not match on - issues/PRs/comments](https://github.com/github/cmark-gfm/issues/280)\ - fixed here ✅ -* [GFM autolink extension (`www.` part): the word `www` - matches](https://github.com/github/cmark-gfm/issues/279)\ - present here for consistency - -## Authoring - -It is recommended to use labels, either with a resource or a definition, -instead of autolink literals, as those allow relative URLs and descriptive -text to explain the URL in prose. - -## HTML - -GFM autolink literals relate to the `` element in HTML. -See [*§ 4.5.1 The `a` element*][html-a] in the HTML spec for more info. -When an email autolink is used, the string `mailto:` is prepended when -generating the `href` attribute of the hyperlink. -When a www autolink is used, the string `http://` is prepended. - -## CSS - -As hyperlinks are the fundamental thing that makes the web, you will most -definitely have CSS for `a` elements already. -The same CSS can be used for autolink literals, too. - -GitHub itself does not apply interesting CSS to autolink literals. -For any link, it currently (June 2022) [uses][css]: - -```css -a { - background-color: transparent; - color: #58a6ff; - text-decoration: none; -} - -a:active, -a:hover { - outline-width: 0; -} - -a:hover { - text-decoration: underline; -} - -a:not([href]) { - color: inherit; - text-decoration: none; -} -``` - -## Syntax - -Autolink literals form with, roughly, the following BNF: - -```bnf -gfm_autolink_literal ::= gfm_protocol_autolink | gfm_www_autolink | gfm_email_autolink - -; Restriction: the code before must be `www_autolink_before`. -; Restriction: the code after `.` must not be eof. -www_autolink ::= 3('w' | 'W') '.' [domain [path]] -www_autolink_before ::= eof | eol | space_or_tab | '(' | '*' | '_' | '[' | ']' | '~' - -; Restriction: the code before must be `http_autolink_before`. -; Restriction: the code after the protocol must be `http_autolink_protocol_after`. -http_autolink ::= ('h' | 'H') 2('t' | 'T') ('p' | 'P') ['s' | 'S'] ':' 2'/' domain [path] -http_autolink_before ::= byte - ascii_alpha -http_autolink_protocol_after ::= byte - eof - eol - ascii_control - unicode_whitespace - ode_punctuation - -; Restriction: the code before must be `email_autolink_before`. -; Restriction: `ascii_digit` may not occur in the last label part of the label. -email_autolink ::= 1*('+' | '-' | '.' | '_' | ascii_alphanumeric) '@' 1*(1*label_segment l_dot_cont) 1*label_segment -email_autolink_before ::= byte - ascii_alpha - '/' - -; Restriction: `_` may not occur in the last two domain parts. -domain ::= 1*(url_ampt_cont | domain_punct_cont | '-' | byte - eof - ascii_control - ode_whitespace - unicode_punctuation) -; Restriction: must not be followed by `punct`. -domain_punct_cont ::= '.' | '_' -; Restriction: must not be followed by `char-ref`. -url_ampt_cont ::= '&' - -; Restriction: a counter `balance = 0` is increased for every `(`, and decreased for every `)`. -; Restriction: `)` must not be `paren_at_end`. -path ::= 1*(url_ampt_cont | path_punctuation_cont | '(' | ')' | byte - eof - eol - space_or_tab) -; Restriction: must not be followed by `punct`. -path_punctuation_cont ::= trailing_punctuation - '<' -; Restriction: must be followed by `punct` and `balance` must be less than `0`. -paren_at_end ::= ')' - -label_segment ::= label_dash_underscore_cont | ascii_alpha | ascii_digit -; Restriction: if followed by `punct`, the whole email autolink is invalid. -label_dash_underscore_cont ::= '-' | '_' -; Restriction: must not be followed by `punct`. -label_dot_cont ::= '.' - -punct ::= *trailing_punctuation ( byte - eof - eol - space_or_tab - '<' ) -char_ref ::= *ascii_alpha ';' path_end -trailing_punctuation ::= '!' | '"' | '\'' | ')' | '*' | ',' | '.' | ':' | ';' | '<' | '?' | '_' | '~' -``` - -The grammar for GFM autolink literal is very relaxed: basically anything -except for whitespace is allowed after a prefix. -To use whitespace characters and otherwise impossible characters, in URLs, -you can use percent encoding: - -```markdown -https://example.com/alpha%20bravo -``` - -Yields: - -```html -

      https://example.com/alpha%20bravo

      -``` - -There are several cases where incorrect encoding of URLs would, in other -languages, result in a parse error. -In markdown, there are no errors, and URLs are normalized. -In addition, many characters are percent encoded -([`sanitizeUri`][micromark-util-sanitize-uri]). -For example: - -```markdown -www.a👍b% -``` - -Yields: - -```html -

      www.a👍b%

      -``` - -There is a big difference between how www and protocol literals work -compared to how email literals work. -The first two are done when parsing, and work like anything else in -markdown. -But email literals are handled afterwards: when everything is parsed, we -look back at the events to figure out if there were email addresses. -This particularly affects how they interleave with character escapes and -character references. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-gfm-autolink-literal@^2`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe. -Unlike other links in CommonMark, which allow arbitrary protocols, this -construct always produces safe links. - -## Related - -* [`micromark-extension-gfm`][micromark-extension-gfm] - — support all of GFM -* [`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal] - — support all of GFM in mdast -* [`mdast-util-gfm`][mdast-util-gfm] - — support all of GFM in mdast -* [`remark-gfm`][remark-gfm] - — support all of GFM in remark - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-autolink-literal.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-autolink-literal - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-autolink-literal.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-autolink-literal - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-autolink-literal - -[size]: https://bundlejs.com/?q=micromark-extension-gfm-autolink-literal - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[micromark-util-sanitize-uri]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm - -[mdast-util-gfm-autolink-literal]: https://github.com/syntax-tree/mdast-util-gfm-autolink-literal - -[remark-gfm]: https://github.com/remarkjs/remark-gfm - -[spec]: https://github.github.com/gfm/#autolinks-extension- - -[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element - -[css]: https://github.com/sindresorhus/github-markdown-css - -[cmark-gfm]: https://github.com/github/cmark-gfm - -[api-gfm-autolink-literal]: #gfmautolinkliteral - -[api-gfm-autolink-literal-html]: #gfmautolinkliteralhtml diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts b/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts deleted file mode 100644 index 1be286871d..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts +++ /dev/null @@ -1,164 +0,0 @@ -export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' -export {gfmFootnote} from './lib/syntax.js' - -/** - * Generate a back label dynamically. - * - * For the following markdown: - * - * ```markdown - * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. - * - * [^remark]: things about remark - * [^micromark]: things about micromark - * ``` - * - * This function will be called with: - * - * * `0` and `0` for the backreference from `things about micromark` to - * `alpha`, as it is the first used definition, and the first call to it - * * `0` and `1` for the backreference from `things about micromark` to - * `bravo`, as it is the first used definition, and the second call to it - * * `1` and `0` for the backreference from `things about remark` to - * `charlie`, as it is the second used definition - * - * @param referenceIndex - * Index of the definition in the order that they are first referenced, - * 0-indexed. - * @param rereferenceIndex - * Index of calls to the same definition, 0-indexed. - * @returns - * Back label to use when linking back from definitions to their reference. - */ -export type BackLabelTemplate = ( - referenceIndex: number, - rereferenceIndex: number -) => string - -/** - * Configuration. - */ -export interface HtmlOptions { - /** - * Prefix to use before the `id` attribute on footnotes to prevent them from - * *clobbering* (default: `'user-content-'`). - * - * Pass `''` for trusted markdown and when you are careful with - * polyfilling. - * You could pass a different prefix. - * - * DOM clobbering is this: - * - * ```html - *

      - * - * ``` - * - * The above example shows that elements are made available by browsers, by - * their ID, on the `window` object. - * This is a security risk because you might be expecting some other variable - * at that place. - * It can also break polyfills. - * Using a prefix solves these problems. - */ - clobberPrefix?: string | null | undefined - /** - * Textual label to use for the footnotes section (default: `'Footnotes'`). - * - * Change it when the markdown is not in English. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - label?: string | null | undefined - /** - * Attributes to use on the footnote label (default: `'class="sr-only"'`). - * - * Change it to show the label and add other attributes. - * - * This label is typically hidden visually (assuming an `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass an empty string. - * You can also add different attributes. - * - * > 👉 **Note**: `id="footnote-label"` is always added, because footnote - * > calls use it with `aria-describedby` to provide an accessible label. - */ - labelAttributes?: string | null | undefined - /** - * HTML tag name to use for the footnote label element (default: `'h2'`). - * - * Change it to match your document structure. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - labelTagName?: string | null | undefined - /** - * Textual label to describe the backreference back to references (default: - * `defaultBackLabel`). - * - * The default value is: - * - * ```js - * function defaultBackLabel(referenceIndex, rereferenceIndex) { - * return ( - * 'Back to reference ' + - * (referenceIndex + 1) + - * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') - * ) - * } - * ``` - * - * Change it when the markdown is not in English. - * - * This label is used in the `aria-label` attribute on each backreference - * (the `↩` links). - * It affects users of assistive technology. - */ - backLabel?: BackLabelTemplate | string | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - gfmFootnoteDefinitions?: Record - gfmFootnoteDefinitionStack?: Array - gfmFootnoteCallCounts?: Record - gfmFootnoteCallOrder?: Array - } - - /** - * Parse context. - */ - interface ParseContext { - gfmFootnotes?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - gfmFootnoteCall: 'gfmFootnoteCall' - gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' - gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' - gfmFootnoteCallString: 'gfmFootnoteCallString' - gfmFootnoteDefinition: 'gfmFootnoteDefinition' - gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' - gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' - gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' - gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' - gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' - gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' - } -} diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.js b/node_modules/micromark-extension-gfm-footnote/dev/index.js deleted file mode 100644 index a399a81f45..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/dev/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types are exported from `dev/index.d.ts`. -export {gfmFootnote} from './lib/syntax.js' -export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-footnote/index.d.ts b/node_modules/micromark-extension-gfm-footnote/index.d.ts deleted file mode 100644 index 1be286871d..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/index.d.ts +++ /dev/null @@ -1,164 +0,0 @@ -export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' -export {gfmFootnote} from './lib/syntax.js' - -/** - * Generate a back label dynamically. - * - * For the following markdown: - * - * ```markdown - * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. - * - * [^remark]: things about remark - * [^micromark]: things about micromark - * ``` - * - * This function will be called with: - * - * * `0` and `0` for the backreference from `things about micromark` to - * `alpha`, as it is the first used definition, and the first call to it - * * `0` and `1` for the backreference from `things about micromark` to - * `bravo`, as it is the first used definition, and the second call to it - * * `1` and `0` for the backreference from `things about remark` to - * `charlie`, as it is the second used definition - * - * @param referenceIndex - * Index of the definition in the order that they are first referenced, - * 0-indexed. - * @param rereferenceIndex - * Index of calls to the same definition, 0-indexed. - * @returns - * Back label to use when linking back from definitions to their reference. - */ -export type BackLabelTemplate = ( - referenceIndex: number, - rereferenceIndex: number -) => string - -/** - * Configuration. - */ -export interface HtmlOptions { - /** - * Prefix to use before the `id` attribute on footnotes to prevent them from - * *clobbering* (default: `'user-content-'`). - * - * Pass `''` for trusted markdown and when you are careful with - * polyfilling. - * You could pass a different prefix. - * - * DOM clobbering is this: - * - * ```html - *

      - * - * ``` - * - * The above example shows that elements are made available by browsers, by - * their ID, on the `window` object. - * This is a security risk because you might be expecting some other variable - * at that place. - * It can also break polyfills. - * Using a prefix solves these problems. - */ - clobberPrefix?: string | null | undefined - /** - * Textual label to use for the footnotes section (default: `'Footnotes'`). - * - * Change it when the markdown is not in English. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - label?: string | null | undefined - /** - * Attributes to use on the footnote label (default: `'class="sr-only"'`). - * - * Change it to show the label and add other attributes. - * - * This label is typically hidden visually (assuming an `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass an empty string. - * You can also add different attributes. - * - * > 👉 **Note**: `id="footnote-label"` is always added, because footnote - * > calls use it with `aria-describedby` to provide an accessible label. - */ - labelAttributes?: string | null | undefined - /** - * HTML tag name to use for the footnote label element (default: `'h2'`). - * - * Change it to match your document structure. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - labelTagName?: string | null | undefined - /** - * Textual label to describe the backreference back to references (default: - * `defaultBackLabel`). - * - * The default value is: - * - * ```js - * function defaultBackLabel(referenceIndex, rereferenceIndex) { - * return ( - * 'Back to reference ' + - * (referenceIndex + 1) + - * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') - * ) - * } - * ``` - * - * Change it when the markdown is not in English. - * - * This label is used in the `aria-label` attribute on each backreference - * (the `↩` links). - * It affects users of assistive technology. - */ - backLabel?: BackLabelTemplate | string | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - gfmFootnoteDefinitions?: Record - gfmFootnoteDefinitionStack?: Array - gfmFootnoteCallCounts?: Record - gfmFootnoteCallOrder?: Array - } - - /** - * Parse context. - */ - interface ParseContext { - gfmFootnotes?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - gfmFootnoteCall: 'gfmFootnoteCall' - gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' - gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' - gfmFootnoteCallString: 'gfmFootnoteCallString' - gfmFootnoteDefinition: 'gfmFootnoteDefinition' - gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' - gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' - gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' - gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' - gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' - gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' - } -} diff --git a/node_modules/micromark-extension-gfm-footnote/index.js b/node_modules/micromark-extension-gfm-footnote/index.js deleted file mode 100644 index b210cb3dae..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types are exported from `dev/index.d.ts`. -export { gfmFootnote } from './lib/syntax.js'; -export { gfmFootnoteHtml, defaultBackLabel } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-footnote/license b/node_modules/micromark-extension-gfm-footnote/license deleted file mode 100644 index f4fb31fe44..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2021 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-footnote/package.json b/node_modules/micromark-extension-gfm-footnote/package.json deleted file mode 100644 index bcbf3e6c46..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/package.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "name": "micromark-extension-gfm-footnote", - "version": "2.1.0", - "description": "micromark extension to support GFM footnotes", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "gfm", - "footnote", - "note", - "definition", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-gfm-footnote", - "bugs": "https://github.com/micromark/micromark-extension-gfm-footnote/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "create-gfm-fixtures": "^1.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-string-replace-all": "off" - }, - "overrides": [ - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": true - } - ], - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface" - ] - } - }, - { - "files": [ - "test/**/*.js" - ], - "rules": { - "no-await-in-loop": 0 - } - } - ] - } -} diff --git a/node_modules/micromark-extension-gfm-footnote/readme.md b/node_modules/micromark-extension-gfm-footnote/readme.md deleted file mode 100644 index 4c446ae20b..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/readme.md +++ /dev/null @@ -1,656 +0,0 @@ -# micromark-extension-gfm-footnote - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support GFM [footnotes][post]. - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`defaultBackLabel(referenceIndex, rereferenceIndex)`](#defaultbacklabelreferenceindex-rereferenceindex) - * [`gfmFootnote()`](#gfmfootnote) - * [`gfmFootnoteHtml(options?)`](#gfmfootnotehtmloptions) - * [`BackLabelTemplate`](#backlabeltemplate) - * [`HtmlOptions`](#htmloptions) -* [Bugs](#bugs) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains extensions that add support for footnotes as enabled by -GFM to [`micromark`][micromark]. - -GitHub announced footnotes [on September 30, 2021][post] but did not specify -them in their GFM spec. -As they are implemented in their parser and supported in all places where -other GFM features work, they can be considered part of GFM. -GitHub employs several other features (such as mentions or frontmatter) that -are either not in their parser, or not in all places where GFM features work, -which should not be considered GFM. - -The implementation of footnotes on github.com is currently buggy. -The bugs have been reported on [`cmark-gfm`][cmark-gfm]. -This micromark extension matches github.com except for its bugs. - -## When to use this - -This project is useful when you want to support footnotes in markdown. - -You can use these extensions when you are working with [`micromark`][micromark]. -To support all GFM features, use -[`micromark-extension-gfm`][micromark-extension-gfm] instead. - -When you need a syntax tree, combine this package with -[`mdast-util-gfm-footnote`][mdast-util-gfm-footnote]. - -All these packages are used in [`remark-gfm`][remark-gfm], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-extension-gfm-footnote -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {gfmFootnote, gfmFootnoteHtml} from 'https://esm.sh/micromark-extension-gfm-footnote@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say our document `example.md` contains: - -````markdown -Using footnotes is fun![^1] They let you reference relevant information without disrupting the flow of what you’re trying to say.[^bignote] - -[^1]: This is the first footnote. -[^bignote]: Here’s one with multiple paragraphs and code. - - Indent paragraphs to include them in the footnote. - - ``` - my code - ``` - - Add as many paragraphs as you like. - -Text here and here and here. -[Learn more about markdown and footnotes in markdown](https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#footnotes) -```` - -…and our module `example.js` looks as follows: - -```js -import fs from 'node:fs/promises' -import {micromark} from 'micromark' -import {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote' - -const output = micromark(await fs.readFile('example.md'), { - extensions: [gfmFootnote()], - htmlExtensions: [gfmFootnoteHtml()] -}) - -console.log(output) -``` - -…now running `node example.js` yields: - -```html -

      Using footnotes is fun!1 They let you reference relevant information without disrupting the flow of what you’re trying to say.2

      -

      Text here and here and here. -Learn more about markdown and footnotes in markdown

      -

      Footnotes

      -
        -
      1. -

        This is the first footnote.

        -
      2. -
      3. -

        Here’s one with multiple paragraphs and code.

        -

        Indent paragraphs to include them in the footnote.

        -
        my code
        -
        -

        Add as many paragraphs as you like.

        -
      4. -
      -
      -``` - -## API - -This package exports the identifiers -[`defaultBackLabel`][api-default-back-label], -[`gfmFootnote`][api-gfm-footnote], and -[`gfmFootnoteHtml`][api-gfm-footnote-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `defaultBackLabel(referenceIndex, rereferenceIndex)` - -Generate the default label that GitHub uses on backreferences -([`BackLabelTemplate`][api-back-label-template]). - -### `gfmFootnote()` - -Create an extension for `micromark` to enable GFM footnote syntax. - -###### Returns - -Extension for `micromark` that can be passed in `extensions` to enable GFM -footnote syntax ([`Extension`][micromark-extension]). - -### `gfmFootnoteHtml(options?)` - -Create an extension for `micromark` to support GFM footnotes when serializing -to HTML. - -###### Parameters - -* `options` ([`HtmlOptions`][api-html-options], optional) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions` to support GFM -footnotes when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -### `BackLabelTemplate` - -Generate a back label dynamically (TypeScript type). - -For the following markdown: - -```markdown -Alpha[^micromark], bravo[^micromark], and charlie[^remark]. - -[^remark]: things about remark -[^micromark]: things about micromark -``` - -This function will be called with: - -* `0` and `0` for the backreference from `things about micromark` to - `alpha`, as it is the first used definition, and the first call to it -* `0` and `1` for the backreference from `things about micromark` to - `bravo`, as it is the first used definition, and the second call to it -* `1` and `0` for the backreference from `things about remark` to - `charlie`, as it is the second used definition - -###### Parameters - -* `referenceIndex` (`number`) - — index of the definition in the order that they are first referenced, - 0-indexed -* `rereferenceIndex` (`number`) - — index of calls to the same definition, 0-indexed - -###### Returns - -Back label to use when linking back from definitions to their reference -(`string`). - -### `HtmlOptions` - -Configuration (TypeScript type). - -##### Fields - -###### `clobberPrefix` - -Prefix to use before the `id` attribute on footnotes to prevent them from -*clobbering* (`string`, default: `'user-content-'`). - -Pass `''` for trusted markdown and when you are careful with polyfilling. -You could pass a different prefix. - -DOM clobbering is this: - -```html -

      - -``` - -The above example shows that elements are made available by browsers, by their -ID, on the `window` object. -This is a security risk because you might be expecting some other variable at -that place. -It can also break polyfills. -Using a prefix solves these problems. - -###### `label` - -Textual label to use for the footnotes section (`string`, default: -`'Footnotes'`). - -Change it when the markdown is not in English. - -This label is typically hidden visually (assuming a `sr-only` CSS class -is defined that does that) and so affects screen readers only. - -###### `labelAttributes` - -Attributes to use on the footnote label (`string`, default: -`'class="sr-only"'`). - -Change it to show the label and add other attributes. - -This label is typically hidden visually (assuming an `sr-only` CSS class -is defined that does that) and so affects screen readers only. -If you do have such a class, but want to show this section to everyone, -pass an empty string. -You can also add different attributes. - -> 👉 **Note**: `id="footnote-label"` is always added, because footnote -> calls use it with `aria-describedby` to provide an accessible label. - -###### `labelTagName` - -HTML tag name to use for the footnote label element (`string`, default: -`'h2'`). - -Change it to match your document structure. - -This label is typically hidden visually (assuming a `sr-only` CSS class -is defined that does that) and so affects screen readers only. - -###### `backLabel` - -Textual label to describe the backreference back to footnote calls -([`BackLabelTemplate`][api-back-label-template] or `string`, -default: [`defaultBackLabel`][api-default-back-label]). - -Change it when the markdown is not in English. - -This label is used in the [`aria-label`][aria-label] attribute on each -backreference (the `↩` links). -It affects users of assistive technology. - -## Bugs - -GitHub’s own algorithm to parse footnote definitions contains several bugs. -These are not present in this project. -The issues relating to footnote definitions are: - -* [Footnote reference call identifiers are trimmed, but definition - identifiers aren’t](https://github.com/github/cmark-gfm/issues/237)\ - — initial and final whitespace in labels causes them not to match -* [Footnotes are matched case-insensitive, but links keep their casing, - breaking them](https://github.com/github/cmark-gfm/issues/239)\ - — using uppercase (or any character that will be percent encoded) in - identifiers breaks links -* [Colons in footnotes generate links w/o - `href`](https://github.com/github/cmark-gfm/issues/250)\ - — colons in identifiers generate broken links -* [Character escape of `]` does not work in footnote - identifiers](https://github.com/github/cmark-gfm/issues/240)\ - — some character escapes don’t work -* [Footnotes in links are - broken](https://github.com/github/cmark-gfm/issues/249)\ - — while `CommonMark` prevents links in links, GitHub does not prevent - footnotes (which turn into links) in links -* [Footnote-like brackets around image, break that - image](https://github.com/github/cmark-gfm/issues/275)\ - — images can’t be used in what looks like a footnote call -* [GFM footnotes: line ending in footnote definition label causes text to - disappear](https://github.com/github/cmark-gfm/issues/282)\ - — line endings in footnote definitions cause text to disappear - -## Authoring - -When authoring markdown with footnotes it’s recommended to use words instead -of numbers (or letters or anything with an order) as identifiers. -That makes it easier to reuse and reorder footnotes. - -It’s recommended to place footnotes definitions at the bottom of the document. - -## HTML - -GFM footnotes do not, on their own, relate to anything in HTML. -When a footnote reference matches with a definition, they each relate to several -elements in HTML. - -The reference relates to `` and `` elements in HTML: - -```html -1

      -``` - -…where `x` is the identifier used in the markdown source and `1` the number of -corresponding, listed, definition. - -See [*§ 4.5.19 The `sub` and `sup` elements*][html-sup], -[*§ 4.5.1 The `a` element*][html-a], and -[*§ 3.2.6.6 Embedding custom non-visible data with the `data-*` -attributes*][html-data] -in the HTML spec, and -[*§ 6.8 `aria-describedby` property*][aria-describedby] -in WAI-ARIA, for more info. - -When one or more definitions are referenced, a footnote section is generated at -the end of the document, using `
      `, `

      `, and `
        ` elements: - -```html -

        Footnotes

        -
        -
        -``` - -Each definition is generated as a `
      1. ` in the `
          ` in the order they were -first referenced: - -```html -
        1. -``` - -Backreferences are injected at the end of the first paragraph, or, when there -is no paragraph, at the end of the definition. -When a definition is referenced multiple times, multiple backreferences are -generated. -Further backreferences use an extra counter in the `href` attribute and -visually in a `` after `↩`. - -```html - 2 -``` - -See -[*§ 4.5.1 The `a` element*][html-a], -[*§ 4.3.6 The `h1`, `h2`, `h3`, `h4`, `h5`, and `h6` elements*][html-h], -[*§ 4.4.8 The `li` element*][html-li], -[*§ 4.4.5 The `ol` element*][html-ol], -[*§ 4.4.1 The `p` element*][html-p], -[*§ 4.3.3 The `section` element*][html-section], and -[*§ 4.5.19 The `sub` and `sup` elements*][html-sup] -in the HTML spec, and -[*§ 6.8 `aria-label` property*][aria-label] -in WAI-ARIA, for more info. - -## CSS - -The following CSS is needed to make footnotes look a bit like GitHub (and fixes -a bug). -For the complete actual CSS see -[`sindresorhus/github-markdown-css`](https://github.com/sindresorhus/github-markdown-css). - -```css -/* Style the footnotes section. */ -.footnotes { - font-size: smaller; - color: #8b949e; - border-top: 1px solid #30363d; -} - -/* Hide the section label for visual users. */ -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - word-wrap: normal; - border: 0; -} - -/* Place `[` and `]` around footnote references. */ -[data-footnote-ref]::before { - content: '['; -} - -[data-footnote-ref]::after { - content: ']'; -} -``` - -## Syntax - -Footnotes form with, roughly, the following BNF: - -```bnf -gfm_footnote_reference ::= gfm_footnote_label - -gfm_footnote_definition_start ::= gfm_footnote_label ':' *space_or_tab -; Restriction: blank line allowed. -gfm_footnote_definition_cont ::= 4(space_or_tab) - -; Restriction: maximum `999` codes between `^` and `]`. -gfm_footnote_label ::= '[' '^' 1*(gfm_footnote_label_byte | gfm_footnote_label_escape) ']' -gfm_footnote_label_byte ::= text - '[' - '\\' - ']' -gfm_footnote_label_escape ::= '\\' ['[' | '\\' | ']'] - -; Any byte (u8) -byte ::= 0x00..=0xFFFF -space_or_tab ::= '\t' | ' ' -eol ::= '\n' | '\r' | '\r\n' -line ::= byte - eol -text ::= line - space_or_tab -``` - -Further lines after `gfm_footnote_definition_start` that are not prefixed with -`gfm_footnote_definition_cont` cause the footnote definition to be exited, -except when those lines are lazy continuation or blank. -Like so many things in markdown, footnote definition too are complex. -See [*§ Phase 1: block structure* in `CommonMark`][commonmark-block] for more -on parsing details. - -The identifiers in the `label` parts are interpreted as the -[string][micromark-content-types] content type. -That means that character escapes and character references are allowed. - -Definitions match to references through identifiers. -To match, both labels must be equal after normalizing with -[`normalizeIdentifier`][micromark-normalize-identifier]. -One definition can match to multiple calls. -Multiple definitions with the same, normalized, identifier are ignored: the -first definition is preferred. -To illustrate, the definition with the content of `x` wins: - -```markdown -[^a]: x -[^a]: y - -[^a] -``` - -Importantly, while labels *can* include [string][micromark-content-types] -content (character escapes and character references), these are not considered -when matching. -To illustrate, neither definition matches the reference: - -```markdown -[^a&b]: x -[^a\&b]: y - -[^a&b] -``` - -Because footnote definitions are containers (like block quotes and list items), -they can contain more footnote definitions. -They can even include references to themselves. - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types [`BackLabelTemplate`][api-back-label-template] -and [`HtmlOptions`][api-html-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-gfm-footnote@^2`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe. -Setting `clobberPrefix = ''` is dangerous, it opens you up to DOM clobbering. -The `labelTagName` and `labelAttributes` options are unsafe when used with user -content, they allow defining arbitrary HTML. - -## Related - -* [`micromark-extension-gfm`][micromark-extension-gfm] - — support all of GFM -* [`mdast-util-gfm-footnote`][mdast-util-gfm-footnote] - — support all of GFM in mdast -* [`mdast-util-gfm`][mdast-util-gfm] - — support all of GFM in mdast -* [`remark-gfm`][remark-gfm] - — support all of GFM in remark - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-gfm-footnote/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-gfm-footnote/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-footnote.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-footnote - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-footnote.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-footnote - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-footnote - -[size]: https://bundlejs.com/?q=micromark-extension-gfm-footnote - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-content-types]: https://github.com/micromark/micromark#content-types - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-normalize-identifier]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[mdast-util-gfm-footnote]: https://github.com/syntax-tree/mdast-util-gfm-footnote - -[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm - -[remark-gfm]: https://github.com/remarkjs/remark-gfm - -[post]: https://github.blog/changelog/2021-09-30-footnotes-now-supported-in-markdown-fields/ - -[cmark-gfm]: https://github.com/github/cmark-gfm - -[commonmark-block]: https://spec.commonmark.org/0.30/#phase-1-block-structure - -[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element - -[html-data]: https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes - -[html-h]: https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements - -[html-li]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-li-element - -[html-ol]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-ol-element - -[html-p]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-p-element - -[html-section]: https://html.spec.whatwg.org/multipage/sections.html#the-section-element - -[html-sup]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-sub-and-sup-elements - -[aria-describedby]: https://w3c.github.io/aria/#aria-describedby - -[aria-label]: https://w3c.github.io/aria/#aria-label - -[api-gfm-footnote]: #gfmfootnote - -[api-gfm-footnote-html]: #gfmfootnotehtmloptions - -[api-html-options]: #htmloptions - -[api-default-back-label]: #defaultbacklabelreferenceindex-rereferenceindex - -[api-back-label-template]: #backlabeltemplate diff --git a/node_modules/micromark-extension-gfm-table/dev/index.d.ts b/node_modules/micromark-extension-gfm-table/dev/index.d.ts deleted file mode 100644 index 1625d64dcb..0000000000 --- a/node_modules/micromark-extension-gfm-table/dev/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type {Align} from './lib/infer.js' - -export {gfmTableHtml} from './lib/html.js' -export {gfmTable} from './lib/syntax.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token; - * `align` is patched on `table` tokens. - */ - interface Token { - _align?: Align[] - } - - interface TokenTypeMap { - table: 'table' - tableBody: 'tableBody' - tableCellDivider: 'tableCellDivider' - tableContent: 'tableContent' - tableData: 'tableData' - tableDelimiter: 'tableDelimiter' - tableDelimiterFiller: 'tableDelimiterFiller' - tableDelimiterMarker: 'tableDelimiterMarker' - tableDelimiterRow: 'tableDelimiterRow' - tableHead: 'tableHead' - tableHeader: 'tableHeader' - tableRow: 'tableRow' - } - - interface CompileData { - tableAlign?: Align[] - tableColumn?: number - } -} diff --git a/node_modules/micromark-extension-gfm-table/dev/index.js b/node_modules/micromark-extension-gfm-table/dev/index.js deleted file mode 100644 index dcb556083f..0000000000 --- a/node_modules/micromark-extension-gfm-table/dev/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export {gfmTableHtml} from './lib/html.js' -export {gfmTable} from './lib/syntax.js' diff --git a/node_modules/micromark-extension-gfm-table/index.d.ts b/node_modules/micromark-extension-gfm-table/index.d.ts deleted file mode 100644 index 1625d64dcb..0000000000 --- a/node_modules/micromark-extension-gfm-table/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type {Align} from './lib/infer.js' - -export {gfmTableHtml} from './lib/html.js' -export {gfmTable} from './lib/syntax.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token; - * `align` is patched on `table` tokens. - */ - interface Token { - _align?: Align[] - } - - interface TokenTypeMap { - table: 'table' - tableBody: 'tableBody' - tableCellDivider: 'tableCellDivider' - tableContent: 'tableContent' - tableData: 'tableData' - tableDelimiter: 'tableDelimiter' - tableDelimiterFiller: 'tableDelimiterFiller' - tableDelimiterMarker: 'tableDelimiterMarker' - tableDelimiterRow: 'tableDelimiterRow' - tableHead: 'tableHead' - tableHeader: 'tableHeader' - tableRow: 'tableRow' - } - - interface CompileData { - tableAlign?: Align[] - tableColumn?: number - } -} diff --git a/node_modules/micromark-extension-gfm-table/index.js b/node_modules/micromark-extension-gfm-table/index.js deleted file mode 100644 index 8f9afc67d3..0000000000 --- a/node_modules/micromark-extension-gfm-table/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { gfmTableHtml } from './lib/html.js'; -export { gfmTable } from './lib/syntax.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-table/license b/node_modules/micromark-extension-gfm-table/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-gfm-table/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-table/package.json b/node_modules/micromark-extension-gfm-table/package.json deleted file mode 100644 index 49909daa90..0000000000 --- a/node_modules/micromark-extension-gfm-table/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "micromark-extension-gfm-table", - "version": "2.1.0", - "description": "micromark extension to support GFM tables", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "table", - "row", - "column", - "cell", - "tabular", - "gfm", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-gfm-table", - "bugs": "https://github.com/micromark/micromark-extension-gfm-table/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "create-gfm-fixtures": "^1.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "overrides": [ - { - "files": [ - "test/**/*.js" - ], - "rules": { - "no-await-in-loop": 0 - } - }, - { - "files": [ - "**/*.ts" - ], - "rules": { - "@typescript-eslint/consistent-type-definitions": 0 - } - } - ], - "prettier": true, - "rules": { - "complexity": "off", - "max-depth": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-string-replace-all": "off" - } - } -} diff --git a/node_modules/micromark-extension-gfm-table/readme.md b/node_modules/micromark-extension-gfm-table/readme.md deleted file mode 100644 index 35e1e1966d..0000000000 --- a/node_modules/micromark-extension-gfm-table/readme.md +++ /dev/null @@ -1,515 +0,0 @@ -# micromark-extension-gfm-table - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support GFM [tables][]. - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`gfmTable()`](#gfmtable) - * [`gfmTableHtml()`](#gfmtablehtml) -* [Bugs](#bugs) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains extensions that add support for the table syntax enabled -by GFM to [`micromark`][micromark]. -These extensions match github.com. - -## When to use this - -This project is useful when you want to support tables in markdown. - -You can use these extensions when you are working with [`micromark`][micromark]. -To support all GFM features, use -[`micromark-extension-gfm`][micromark-extension-gfm] instead. - -When you need a syntax tree, combine this package with -[`mdast-util-gfm-table`][mdast-util-gfm-table]. - -All these packages are used in [`remark-gfm`][remark-gfm], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-extension-gfm-table -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {gfmTable, gfmTableHtml} from 'https://esm.sh/micromark-extension-gfm-table@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {micromark} from 'micromark' -import {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table' - -const output = micromark('| a |\n| - |', { - extensions: [gfmTable()], - htmlExtensions: [gfmTableHtml()] -}) - -console.log(output) -``` - -Yields: - -```html - - - - - - -
          a
          -``` - -## API - -This package exports the identifiers [`gfmTable`][api-gfm-table] and -[`gfmTableHtml`][api-gfm-table-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `gfmTable()` - -Create an HTML extension for `micromark` to support GitHub tables syntax. - -###### Returns - -Extension for `micromark` that can be passed in `extensions` to enable GFM -table syntax ([`Extension`][micromark-extension]). - -### `gfmTableHtml()` - -Create an HTML extension for `micromark` to support GitHub tables when -serializing to HTML. - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions` to support -GFM tables when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -## Bugs - -GitHub’s own algorithm to parse tables contains a bug. -This bug is not present in this project. -The issue relating to tables is: - -* [GFM tables: escaped escapes are incorrectly treated as - escapes](https://github.com/github/cmark-gfm/issues/277) - -## Authoring - -When authoring markdown with GFM tables, it’s recommended to *always* put -pipes around cells. -Without them, it can be hard to infer whether the table will work, how many -columns there are, and which column you are currently editing. - -It is recommended to not use many columns, as it results in very long lines, -making it hard to infer which column you are currently editing. - -For larger tables, particularly when cells vary in size, it is recommended -*not* to manually “pad” cell text. -While it can look better, it results in a lot of time spent realigning -everything when a new, longer cell is added or the longest cell removed, as -every row then must be changed. -Other than costing time, it also causes large diffs in Git. - -To illustrate, when authoring large tables, it is discouraged to pad cells -like this: - -```markdown -| Alpha bravo charlie | delta | -| ------------------- | -----------------: | -| Echo | Foxtrot golf hotel | -``` - -Instead, use single spaces (and single filler dashes): - -```markdown -| Alpha bravo charlie | delta | -| - | -: | -| Echo | Foxtrot golf hotel | -``` - -## HTML - -GFM tables relate to several HTML elements: ``, ``, ``, and ``. -See -[*§ 4.9.1 The `table` element*][html-table], -[*§ 4.9.5 The `tbody` element*][html-tbody], -[*§ 4.9.9 The `td` element*][html-td], -[*§ 4.9.10 The `th` element*][html-th], -[*§ 4.9.6 The `thead` element*][html-thead], and -[*§ 4.9.8 The `tr` element*][html-tr] -in the HTML spec for more info. - -If the alignment of a column is left, right, or center, a deprecated -`align` attribute is added to each `
          `, -``, `
          ` and `` element belonging to -that column. -That attribute is interpreted by browsers as if a CSS `text-align` property -was included, with its value set to that same keyword. - -## CSS - -The following CSS is needed to make tables look a bit like GitHub. -For the complete actual CSS see -[`sindresorhus/github-markdown-css`][github-markdown-css] - -```css -/* Light theme. */ -:root { - --color-canvas-default: #ffffff; - --color-canvas-subtle: #f6f8fa; - --color-border-default: #d0d7de; - --color-border-muted: hsla(210, 18%, 87%, 1); -} - -/* Dark theme. */ -@media (prefers-color-scheme: dark) { - :root { - --color-canvas-default: #0d1117; - --color-canvas-subtle: #161b22; - --color-border-default: #30363d; - --color-border-muted: #21262d; - } -} - -table { - border-spacing: 0; - border-collapse: collapse; - display: block; - margin-top: 0; - margin-bottom: 16px; - width: max-content; - max-width: 100%; - overflow: auto; -} - -tr { - background-color: var(--color-canvas-default); - border-top: 1px solid var(--color-border-muted); -} - -tr:nth-child(2n) { - background-color: var(--color-canvas-subtle); -} - -td, -th { - padding: 6px 13px; - border: 1px solid var(--color-border-default); -} - -th { - font-weight: 600; -} - -table img { - background-color: transparent; -} -``` - -## Syntax - -Tables form with the following BNF: - -```bnf -gfm_table ::= gfm_table_head 0*(eol gfm_table_body_row) - -; Restriction: both rows must have the same number of cells. -gfm_table_head ::= gfm_table_row eol gfm_table_delimiter_row - -gfm_table_row ::= ['|'] gfm_table_cell 0*('|' gfm_table_cell) ['|'] *space_or_tab -gfm_table_cell ::= *space_or_tab gfm_table_text *space_or_tab -gfm_table_text ::= 0*(line - '\\' - '|' | '\\' ['\\' | '|']) - -gfm_table_delimiter_row ::= ['|'] gfm_table_delimiter_cell 0*('|' gfm_table_delimiter_cell) ['|'] *space_or_tab -gfm_table_delimiter_cell ::= *space_or_tab gfm_table_delimiter_value *space_or_tab -gfm_table_delimiter_value ::= [':'] 1*'-' [':'] -``` - -As this construct occurs in flow, like all flow constructs, it must be -followed by an eol (line ending) or eof (end of file). - -The above grammar shows that basically anything can be a cell or a row. -The main thing that makes something a row, is that it occurs directly before -or after a delimiter row, or after another row. - -It is not required for a table to have a body: it can end right after the -delimiter row. - -Each column can be marked with an alignment. -The alignment marker is a colon (`:`) used before and/or after delimiter row -filler. -To illustrate: - -```markdown -| none | left | right | center | -| ---- | :--- | ----: | :----: | -``` - -The number of cells in the delimiter row, is the number of columns of the -table. -Only the head row is required to have the same number of cells. -Body rows are not required to have a certain number of cells. -For body rows that have less cells than the number of columns of the table, -empty cells are injected. -When a row has more cells than the number of columns of the table, the -superfluous cells are dropped. -To illustrate: - -```markdown -| a | b | -| - | - | -| c | -| d | e | f | -``` - -Yields: - -```html - - - - - - - - - - - - - - - - - -
          ab
          c
          de
          -``` - -Each cell’s text is interpreted as the [text][micromark-content-type] content -type. -That means that it can include constructs such as attention (emphasis, strong). - -The grammar for cells prohibits the use of `|` in them. -To use pipes in cells, encode them as a character reference or character -escape: `|` (or `|`, `|`, `|`, `|`) or -`\|`. - -Escapes will typically work, but they are not supported in -code (text) (and the math (text) extension). -To work around this, GitHub came up with a rather weird “trick”. -When inside a table cell *and* inside code, escaped pipes *are* decoded. -To illustrate: - -```markdown -| Name | Character | -| - | - | -| Left curly brace | `{` | -| Pipe | `\|` | -| Right curly brace | `}` | -``` - -Yields: - -```html - - - - - - - - - - - - - - - - - - - - - -
          NameCharacter
          Left curly brace{
          Pipe|
          Right curly brace}
          -``` - -> 👉 **Note**: no other character can be escaped like this. -> Escaping pipes in code does not work when not inside a table, either. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-gfm-table@^2`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe. - -## Related - -* [`micromark-extension-gfm`][micromark-extension-gfm] - — support all of GFM -* [`mdast-util-gfm-table`][mdast-util-gfm-table] - — support all of GFM in mdast -* [`mdast-util-gfm`][mdast-util-gfm] - — support all of GFM in mdast -* [`remark-gfm`][remark-gfm] - — support all of GFM in remark - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-gfm-table/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-gfm-table/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-table.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-table - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-table.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-table - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-table - -[size]: https://bundlejs.com/?q=micromark-extension-gfm-table - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-content-type]: https://github.com/micromark/micromark#content-types - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm - -[mdast-util-gfm-table]: https://github.com/syntax-tree/mdast-util-gfm-table - -[remark-gfm]: https://github.com/remarkjs/remark-gfm - -[tables]: https://github.github.com/gfm/#tables-extension- - -[html-table]: https://html.spec.whatwg.org/multipage/tables.html#the-table-element - -[html-tbody]: https://html.spec.whatwg.org/multipage/tables.html#the-tbody-element - -[html-thead]: https://html.spec.whatwg.org/multipage/tables.html#the-thead-element - -[html-tr]: https://html.spec.whatwg.org/multipage/tables.html#the-tr-element - -[html-td]: https://html.spec.whatwg.org/multipage/tables.html#the-td-element - -[html-th]: https://html.spec.whatwg.org/multipage/tables.html#the-th-element - -[github-markdown-css]: https://github.com/sindresorhus/github-markdown-css - -[api-gfm-table]: #gfmtable - -[api-gfm-table-html]: #gfmtablehtml diff --git a/node_modules/micromark-extension-math/dev/index.d.ts b/node_modules/micromark-extension-math/dev/index.d.ts deleted file mode 100644 index d09f0e576d..0000000000 --- a/node_modules/micromark-extension-math/dev/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type {KatexOptions} from 'katex' - -export {mathHtml} from './lib/html.js' -export {math} from './lib/syntax.js' - -/** - * Configuration for HTML output. - * - * > 👉 **Note**: passed to `katex.renderToString`. - * > `displayMode` is overwritten by this plugin, to `false` for math in - * > text (inline), and `true` for math in flow (block). - */ -export interface HtmlOptions extends KatexOptions { - /** - * The field `displayMode` cannot be passed to `micromark-extension-math`. - * It is overwritten by it, - * to `false` for math in text (inline) and `true` for math in flow (block). - */ - displayMode?: never -} - -/** - * Configuration. - */ -export interface Options { - /** - * Whether to support math (text) with a single dollar (default: `true`). - * - * Single dollars work in Pandoc and many other places, but often interfere - * with “normal” dollars in text. - * If you turn this off, you can use two or more dollars for text math. - */ - singleDollarTextMath?: boolean | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - mathFlowOpen?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - mathFlow: 'mathFlow' - mathFlowFence: 'mathFlowFence' - mathFlowFenceMeta: 'mathFlowFenceMeta' - mathFlowFenceSequence: 'mathFlowFenceSequence' - mathFlowValue: 'mathFlowValue' - mathText: 'mathText' - mathTextData: 'mathTextData' - mathTextPadding: 'mathTextPadding' - mathTextSequence: 'mathTextSequence' - } -} diff --git a/node_modules/micromark-extension-math/dev/index.js b/node_modules/micromark-extension-math/dev/index.js deleted file mode 100644 index 120c39c7fc..0000000000 --- a/node_modules/micromark-extension-math/dev/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types exported from `index.d.ts`. -export {math} from './lib/syntax.js' -export {mathHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-math/index.d.ts b/node_modules/micromark-extension-math/index.d.ts deleted file mode 100644 index d09f0e576d..0000000000 --- a/node_modules/micromark-extension-math/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type {KatexOptions} from 'katex' - -export {mathHtml} from './lib/html.js' -export {math} from './lib/syntax.js' - -/** - * Configuration for HTML output. - * - * > 👉 **Note**: passed to `katex.renderToString`. - * > `displayMode` is overwritten by this plugin, to `false` for math in - * > text (inline), and `true` for math in flow (block). - */ -export interface HtmlOptions extends KatexOptions { - /** - * The field `displayMode` cannot be passed to `micromark-extension-math`. - * It is overwritten by it, - * to `false` for math in text (inline) and `true` for math in flow (block). - */ - displayMode?: never -} - -/** - * Configuration. - */ -export interface Options { - /** - * Whether to support math (text) with a single dollar (default: `true`). - * - * Single dollars work in Pandoc and many other places, but often interfere - * with “normal” dollars in text. - * If you turn this off, you can use two or more dollars for text math. - */ - singleDollarTextMath?: boolean | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - mathFlowOpen?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - mathFlow: 'mathFlow' - mathFlowFence: 'mathFlowFence' - mathFlowFenceMeta: 'mathFlowFenceMeta' - mathFlowFenceSequence: 'mathFlowFenceSequence' - mathFlowValue: 'mathFlowValue' - mathText: 'mathText' - mathTextData: 'mathTextData' - mathTextPadding: 'mathTextPadding' - mathTextSequence: 'mathTextSequence' - } -} diff --git a/node_modules/micromark-extension-math/index.js b/node_modules/micromark-extension-math/index.js deleted file mode 100644 index 59bed9f691..0000000000 --- a/node_modules/micromark-extension-math/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types exported from `index.d.ts`. -export { math } from './lib/syntax.js'; -export { mathHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-math/license b/node_modules/micromark-extension-math/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-math/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-math/package.json b/node_modules/micromark-extension-math/package.json deleted file mode 100644 index 1f7c882e2e..0000000000 --- a/node_modules/micromark-extension-math/package.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "name": "micromark-extension-math", - "version": "3.1.0", - "description": "micromark extension to support math (`$C_L$`)", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "math", - "katex", - "latex", - "tex", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-math", - "bugs": "https://github.com/micromark/micromark-extension-math/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "overrides": [ - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": true - } - ], - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface" - ] - } - } - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off" - } - } -} diff --git a/node_modules/micromark-extension-math/readme.md b/node_modules/micromark-extension-math/readme.md deleted file mode 100644 index 6b57c2ab8c..0000000000 --- a/node_modules/micromark-extension-math/readme.md +++ /dev/null @@ -1,429 +0,0 @@ -# micromark-extension-math - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support math (`$C_L$`). - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`math(options?)`](#mathoptions) - * [`mathHtml(options?)`](#mathhtmloptions) - * [`HtmlOptions`](#htmloptions) - * [`Options`](#options) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains two extensions that add support for math syntax -in markdown to [`micromark`][micromark]. - -As there is no spec for math in markdown, this extension follows how code -(fenced and text) works in Commonmark, but uses dollars. - -## When to use this - -This project is useful when you want to support math in markdown. -Extending markdown with a syntax extension makes the markdown less portable. -LaTeX equations are also quite hard. -But this mechanism works well when you want authors, that have some LaTeX -experience, to be able to embed rich diagrams of math in scientific text. - -You can use these extensions when you are working with [`micromark`][micromark] -already. - -When you need a syntax tree, you can combine this package with -[`mdast-util-math`][mdast-util-math]. - -All these packages are used [`remark-math`][remark-math], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -[npm][]: - -```sh -npm install micromark-extension-math -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {math, mathHtml} from 'https://esm.sh/micromark-extension-math@3' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say our document `example.md` contains: - -```markdown -Lift($L$) can be determined by Lift Coefficient ($C_L$) like the following equation. - -$$ -L = \frac{1}{2} \rho v^2 S C_L -$$ -``` - -…and our module `example.js` looks as follows: - -```js -import fs from 'node:fs/promises' -import {micromark} from 'micromark' -import {math, mathHtml} from 'micromark-extension-math' - -const output = micromark(await fs.readFile('example.md'), { - extensions: [math()], - htmlExtensions: [mathHtml()] -}) - -console.log(output) -``` - -…now running `node example.js` yields (abbreviated): - -```html -

          Lift() can be determined by Lift Coefficient () like the following equation.

          -
          -``` - -## API - -This package exports the identifiers [`math`][api-math] and -[`mathHtml`][api-math-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `math(options?)` - -Create an extension for `micromark` to enable math syntax. - -###### Parameters - -* `options` ([`Options`][api-options], default: `{}`) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `extensions`, to enable math -syntax ([`Extension`][micromark-extension]). - -### `mathHtml(options?)` - -Create an extension for `micromark` to support math when serializing to HTML. - -> 👉 **Note**: this uses KaTeX to render math. - -###### Parameters - -* `options` ([`HtmlOptions`][api-html-options], default: `{}`) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions`, to support -math when serializing to HTML ([`HtmlExtension`][micromark-html-extension]). - -### `HtmlOptions` - -Configuration for HTML output (optional). - -> 👉 **Note**: passed to [`katex.renderToString`][katex-options]. -> `displayMode` is overwritten by this plugin, to `false` for math in text -> (inline), and `true` for math in flow (block). - -###### Type - -```ts -type Options = Omit -``` - -### `Options` - -Configuration (TypeScript type). - -###### Fields - -* `singleDollarTextMath` (`boolean`, default: `true`) - — whether to support math (text, inline) with a single dollar. - Single dollars work in Pandoc and many other places, but often interfere - with “normal” dollars in text. - If you turn this off, you use two or more dollars for text math. - -## Authoring - -When authoring markdown with math, keep in mind that math doesn’t work in most -places. -Notably, GitHub currently has a really weird crappy client-side regex-based -thing. -But on your own (math-heavy?) site it can be great! -You can use code (fenced) with an info string of `math` to improve this, as -that works in many places. - -## HTML - -Math (flow) does not relate to HTML elements. -`MathML`, which is sort of like SVG but for math, exists but it doesn’t work -well and isn’t widely supported. -Instead, this uses [KaTeX][], which generates MathML as a fallback but also -generates a bunch of divs and spans so math look pretty. -The KaTeX result is wrapped in `
          ` (for flow, block) and `` (for text, -inline) elements, with two classes: `math` and either `math-display` or -`math-inline`. - -When turning markdown into HTML, each line ending in math (text) is turned -into a space. - -## CSS - -The HTML produced by KaTeX requires CSS to render correctly. -You should use `katex.css` somewhere on the page where the math is shown to -style it properly. -At the time of writing, the last version is: - - - -```html - -``` - -## Syntax - -Math forms with the following BNF: - -```bnf -; Restriction: the number of markers in the closing sequence must be equal -; to the number of markers in the opening sequence. -math_text ::= sequence_text 1*byte sequence_text -math_flow ::= fence_open *( eol *line ) [ eol fence_close ] - -; Restriction: not preceded or followed by the marker. -sequence_text ::= 1*'$' - -fence_open ::= sequence_flow meta -; Restriction: the number of markers in the closing fence sequence must be -; equal to or greater than the number of markers in the opening fence -; sequence. -fence_close ::= sequence_flow *space_or_tab -sequence_flow ::= 2*'$' -; Restriction: the marker cannot occur in `meta` -meta ::= 1*line - -; Character groups for informational purposes. -byte ::= 0x00..=0xFFFF -eol ::= '\n' | '\r' | '\r\n' -line ::= byte - eol -``` - -The above grammar shows that it is not possible to create empty math (text). -It is possible to include the sequence marker (dollar) in math (text), by -wrapping it in bigger or smaller sequences: - -```markdown -Include more: $a$$b$ or include less: $$a$b$$. -``` - -It is also possible to include just one marker: - -```markdown -Include just one: $$ $ $$. -``` - -Sequences are “gready”, in that they cannot be preceded or followed by more -markers. -To illustrate: - -```markdown -Not math: $$x$. - -Not math: $x$$. - -Escapes work, this is math: \$$x$. - -Escapes work, this is math: $x$\$. -``` - -Yields: - -```html -

          Not math: $$x$.

          -

          Not math: $x$$.

          -

          Escapes work, this is math: $.

          -

          Escapes work, this is math: $.

          -``` - -That is because, when turning markdown into HTML, the first and last space, -if both exist and there is also a non-space in the math, are removed. -Line endings, at that stage, are considered as spaces. - -As the math (flow) construct occurs in flow, like all flow constructs, it must -be followed by an eol (line ending) or eof (end of file). - -The above grammar does not show how indentation of each line is handled. -To parse math (flow), let `x` be the number of `space_or_tab` characters -before the opening fence sequence, after interpreting tabs based on how many -virtual spaces they represent. -Each line of text is then allowed (not required) to be indented with up -to `x` spaces or tabs, which are then ignored as an indent instead of being -considered as part of the content. -This indent does not affect the closing fence. -It can be indented up to a separate 3 real or virtual spaces. -A bigger indent makes it part of the content instead of a fence. - -The `meta` part is interpreted as the [string][micromark-content-types] content -type. -That means that character escapes and character references are allowed. - -The optional `meta` part is ignored: it is not used when parsing or -rendering. - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types [`HtmlOptions`][api-html-options] -and [`Options`][api-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-math@^3`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe assuming that you trust KaTeX. -Any vulnerability in it could open you to a [cross-site scripting (XSS)][xss] -attack. - -## Related - -* [`remark-math`][remark-math] - — remark (and rehype) plugins to support math -* [`mdast-util-math`][mdast-util-math] - — mdast utility to support math - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-math/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-math/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-math.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-math - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-math.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-math - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-math - -[size]: https://bundlejs.com/?q=micromark-extension-math - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-content-types]: https://github.com/micromark/micromark#content-types - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[mdast-util-math]: https://github.com/syntax-tree/mdast-util-math - -[remark-math]: https://github.com/remarkjs/remark-math - -[katex]: https://katex.org - -[katex-options]: https://katex.org/docs/options.html - -[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting - -[api-math]: #mathoptions - -[api-math-html]: #mathhtmloptions - -[api-options]: #options - -[api-html-options]: #htmloptions diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts b/node_modules/micromark-factory-destination/dev/index.d.ts deleted file mode 100644 index 1d5e02a5d8..0000000000 --- a/node_modules/micromark-factory-destination/dev/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts.map b/node_modules/micromark-factory-destination/dev/index.d.ts.map deleted file mode 100644 index 84746ee217..0000000000 --- a/node_modules/micromark-factory-destination/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.js b/node_modules/micromark-factory-destination/dev/index.js deleted file mode 100644 index a4816fdc0d..0000000000 --- a/node_modules/micromark-factory-destination/dev/index.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import { - asciiControl, - markdownLineEndingOrSpace, - markdownLineEnding -} from 'micromark-util-character' -import {codes, constants, types} from 'micromark-util-symbol' - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - - return start - - /** - * Start of destination. - * - * ```markdown - * > | - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === codes.lessThan) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if ( - code === codes.eof || - code === codes.space || - code === codes.rightParenthesis || - asciiControl(code) - ) { - return nok(code) - } - - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === codes.greaterThan) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - - effects.enter(stringType) - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === codes.greaterThan) { - effects.exit(types.chunkString) - effects.exit(stringType) - return enclosedBefore(code) - } - - if ( - code === codes.eof || - code === codes.lessThan || - markdownLineEnding(code) - ) { - return nok(code) - } - - effects.consume(code) - return code === codes.backslash ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if ( - code === codes.lessThan || - code === codes.greaterThan || - code === codes.backslash - ) { - effects.consume(code) - return enclosed - } - - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === codes.eof || - code === codes.rightParenthesis || - markdownLineEndingOrSpace(code)) - ) { - effects.exit(types.chunkString) - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - - if (balance < limit && code === codes.leftParenthesis) { - effects.consume(code) - balance++ - return raw - } - - if (code === codes.rightParenthesis) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if ( - code === codes.eof || - code === codes.space || - code === codes.leftParenthesis || - asciiControl(code) - ) { - return nok(code) - } - - effects.consume(code) - return code === codes.backslash ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if ( - code === codes.leftParenthesis || - code === codes.rightParenthesis || - code === codes.backslash - ) { - effects.consume(code) - return raw - } - - return raw(code) - } -} diff --git a/node_modules/micromark-factory-destination/index.d.ts b/node_modules/micromark-factory-destination/index.d.ts deleted file mode 100644 index 1d5e02a5d8..0000000000 --- a/node_modules/micromark-factory-destination/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.d.ts.map b/node_modules/micromark-factory-destination/index.d.ts.map deleted file mode 100644 index 84746ee217..0000000000 --- a/node_modules/micromark-factory-destination/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.js b/node_modules/micromark-factory-destination/index.js deleted file mode 100644 index eeb60de6d7..0000000000 --- a/node_modules/micromark-factory-destination/index.js +++ /dev/null @@ -1,206 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character'; -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) { - const limit = max || Number.POSITIVE_INFINITY; - let balance = 0; - return start; - - /** - * Start of destination. - * - * ```markdown - * > | - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type); - effects.enter(literalType); - effects.enter(literalMarkerType); - effects.consume(code); - effects.exit(literalMarkerType); - return enclosedBefore; - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code); - } - effects.enter(type); - effects.enter(rawType); - effects.enter(stringType); - effects.enter("chunkString", { - contentType: "string" - }); - return raw(code); - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType); - effects.consume(code); - effects.exit(literalMarkerType); - effects.exit(literalType); - effects.exit(type); - return ok; - } - effects.enter(stringType); - effects.enter("chunkString", { - contentType: "string" - }); - return enclosed(code); - } - - /** - * In enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit("chunkString"); - effects.exit(stringType); - return enclosedBefore(code); - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code); - } - effects.consume(code); - return code === 92 ? enclosedEscape : enclosed; - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code); - return enclosed; - } - return enclosed(code); - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) { - effects.exit("chunkString"); - effects.exit(stringType); - effects.exit(rawType); - effects.exit(type); - return ok(code); - } - if (balance < limit && code === 40) { - effects.consume(code); - balance++; - return raw; - } - if (code === 41) { - effects.consume(code); - balance--; - return raw; - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code); - } - effects.consume(code); - return code === 92 ? rawEscape : raw; - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code); - return raw; - } - return raw(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/license b/node_modules/micromark-factory-destination/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-destination/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-destination/package.json b/node_modules/micromark-factory-destination/package.json deleted file mode 100644 index 0863cb696d..0000000000 --- a/node_modules/micromark-factory-destination/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-factory-destination", - "version": "2.0.1", - "description": "micromark factory to parse destinations (found in resources, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "destination" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-destination", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "max-params": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-destination/readme.md b/node_modules/micromark-factory-destination/readme.md deleted file mode 100644 index f4899d74da..0000000000 --- a/node_modules/micromark-factory-destination/readme.md +++ /dev/null @@ -1,234 +0,0 @@ -# micromark-factory-destination - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse destinations (found in resources, definitions). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryDestination(…)`](#factorydestination) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse destinations. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-destination -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factoryDestination} from 'https://esm.sh/micromark-factory-destination@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factoryDestination} from 'micromark-factory-destination' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function open(code) { - if (code === codes.rightParenthesis) { - return end(code) - } - - return factoryDestination( - effects, - destinationAfter, - nok, - types.resourceDestination, - types.resourceDestinationLiteral, - types.resourceDestinationLiteralMarker, - types.resourceDestinationRaw, - types.resourceDestinationString, - constants.linkResourceDestinationBalanceMax - )(code) - } - - // … -} -``` - -## API - -This module exports the identifier -[`factoryDestination`][api-factory-destination]. -There is no default export. - -### `factoryDestination(…)` - -Parse destinations. - -###### Examples - -```markdown - -b> - - -a -a\)b -a(b)c -a(b) -``` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `nok` (`State`) - — state switched to when unsuccessful -* `type` (`string`) - — type for whole (`` or `b`) -* `literalType` (`string`) - — type when enclosed (``) -* `literalMarkerType` (`string`) - — type for enclosing (`<` and `>`) -* `rawType` (`string`) - — type when not enclosed (`b`) -* `stringType` (`string`) - — type for the value (`a` or `b`) -* `max` (`number`, default: `Infinity`) - — depth of nested parens (inclusive) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-destination@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-destination.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-destination - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-destination - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-destination - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-destination]: #factorydestination diff --git a/node_modules/micromark-factory-label/dev/index.d.ts b/node_modules/micromark-factory-label/dev/index.d.ts deleted file mode 100644 index 99f5bdad42..0000000000 --- a/node_modules/micromark-factory-label/dev/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -import type { TokenizeContext } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.d.ts.map b/node_modules/micromark-factory-label/dev/index.d.ts.map deleted file mode 100644 index fe94eeea2d..0000000000 --- a/node_modules/micromark-factory-label/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.js b/node_modules/micromark-factory-label/dev/index.js deleted file mode 100644 index 242f0ced9c..0000000000 --- a/node_modules/micromark-factory-label/dev/index.js +++ /dev/null @@ -1,172 +0,0 @@ -/** - * @import { - * Effects, - * State, - * TokenizeContext, - * TokenType - * } from 'micromark-util-types' - */ - -import {ok as assert} from 'devlop' -import {markdownLineEnding, markdownSpace} from 'micromark-util-character' -import {codes, constants, types} from 'micromark-util-symbol' - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - assert(code === codes.leftSquareBracket, 'expected `[`') - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > constants.linkReferenceSizeMax || - code === codes.eof || - code === codes.leftSquareBracket || - (code === codes.rightSquareBracket && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === codes.caret && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - - if (code === codes.rightSquareBracket) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter(types.lineEnding) - effects.consume(code) - effects.exit(types.lineEnding) - return atBreak - } - - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === codes.eof || - code === codes.leftSquareBracket || - code === codes.rightSquareBracket || - markdownLineEnding(code) || - size++ > constants.linkReferenceSizeMax - ) { - effects.exit(types.chunkString) - return atBreak(code) - } - - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === codes.backslash ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if ( - code === codes.leftSquareBracket || - code === codes.backslash || - code === codes.rightSquareBracket - ) { - effects.consume(code) - size++ - return labelInside - } - - return labelInside(code) - } -} diff --git a/node_modules/micromark-factory-label/index.d.ts b/node_modules/micromark-factory-label/index.d.ts deleted file mode 100644 index 99f5bdad42..0000000000 --- a/node_modules/micromark-factory-label/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -import type { TokenizeContext } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.d.ts.map b/node_modules/micromark-factory-label/index.d.ts.map deleted file mode 100644 index fe94eeea2d..0000000000 --- a/node_modules/micromark-factory-label/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.js b/node_modules/micromark-factory-label/index.js deleted file mode 100644 index 269340bb85..0000000000 --- a/node_modules/micromark-factory-label/index.js +++ /dev/null @@ -1,148 +0,0 @@ -/** - * @import { - * Effects, - * State, - * TokenizeContext, - * TokenType - * } from 'micromark-util-types' - */ - -import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this; - let size = 0; - /** @type {boolean} */ - let seen; - return start; - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.enter(stringType); - return atBreak; - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (size > 999 || code === null || code === 91 || code === 93 && !seen || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) { - return nok(code); - } - if (code === 93) { - effects.exit(stringType); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.exit(type); - return ok; - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter("lineEnding"); - effects.consume(code); - effects.exit("lineEnding"); - return atBreak; - } - effects.enter("chunkString", { - contentType: "string" - }); - return labelInside(code); - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) { - effects.exit("chunkString"); - return atBreak(code); - } - effects.consume(code); - if (!seen) seen = !markdownSpace(code); - return code === 92 ? labelEscape : labelInside; - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code); - size++; - return labelInside; - } - return labelInside(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/license b/node_modules/micromark-factory-label/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-label/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-label/package.json b/node_modules/micromark-factory-label/package.json deleted file mode 100644 index db6dca2650..0000000000 --- a/node_modules/micromark-factory-label/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "micromark-factory-label", - "version": "2.0.1", - "description": "micromark factory to parse labels (found in media, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "label" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-label", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "max-params": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-label/readme.md b/node_modules/micromark-factory-label/readme.md deleted file mode 100644 index f4b4eab835..0000000000 --- a/node_modules/micromark-factory-label/readme.md +++ /dev/null @@ -1,224 +0,0 @@ -# micromark-factory-label - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse labels (found in media, definitions). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryLabel(…)`](#factorylabel) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse labels. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-label -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factoryLabel} from 'https://esm.sh/micromark-factory-label@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {ok as assert} from 'devlop' -import {factoryLabel} from 'micromark-factory-label' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function start(code) { - assert(code === codes.leftSquareBracket, 'expected `[`') - effects.enter(types.definition) - return factoryLabel.call( - self, - effects, - labelAfter, - nok, - types.definitionLabel, - types.definitionLabelMarker, - types.definitionLabelString - )(code) - } - - // … -} -``` - -## API - -This module exports the identifier [`factoryLabel`][api-factory-label]. -There is no default export. - -### `factoryLabel(…)` - -Parse labels. - -> 👉 **Note**: labels in markdown are capped at 999 characters in the string. - -###### Examples - -```markdown -[a] -[a -b] -[a\]b] -``` - -###### Parameters - -* `this` (`TokenizeContext`) - — tokenize context -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `nok` (`State`) - — state switched to when unsuccessful -* `type` (`string`) - — type of the whole label (`[a]`) -* `markerType` (`string`) - — type for the markers (`[` and `]`) -* `stringType` (`string`) - — type for the identifier (`a`) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-label@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-label.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-label - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-label - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-label - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-label]: #factorylabel diff --git a/node_modules/micromark-factory-space/dev/index.d.ts b/node_modules/micromark-factory-space/dev/index.d.ts deleted file mode 100644 index d9a30cab17..0000000000 --- a/node_modules/micromark-factory-space/dev/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.d.ts.map b/node_modules/micromark-factory-space/dev/index.d.ts.map deleted file mode 100644 index 42d1279235..0000000000 --- a/node_modules/micromark-factory-space/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.js b/node_modules/micromark-factory-space/dev/index.js deleted file mode 100644 index 5cead758c1..0000000000 --- a/node_modules/micromark-factory-space/dev/index.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import {markdownSpace} from 'micromark-util-character' - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - - effects.exit(type) - return ok(code) - } -} diff --git a/node_modules/micromark-factory-space/index.d.ts b/node_modules/micromark-factory-space/index.d.ts deleted file mode 100644 index d9a30cab17..0000000000 --- a/node_modules/micromark-factory-space/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.d.ts.map b/node_modules/micromark-factory-space/index.d.ts.map deleted file mode 100644 index 42d1279235..0000000000 --- a/node_modules/micromark-factory-space/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.js b/node_modules/micromark-factory-space/index.js deleted file mode 100644 index 646117df2d..0000000000 --- a/node_modules/micromark-factory-space/index.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import { markdownSpace } from 'micromark-util-character'; - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY; - let size = 0; - return start; - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type); - return prefix(code); - } - return ok(code); - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code); - return prefix; - } - effects.exit(type); - return ok(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/license b/node_modules/micromark-factory-space/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-space/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-space/package.json b/node_modules/micromark-factory-space/package.json deleted file mode 100644 index 45828c493e..0000000000 --- a/node_modules/micromark-factory-space/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "micromark-factory-space", - "version": "2.0.1", - "description": "micromark factory to parse markdown space (found in lots of places)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "space" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-space", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-space/readme.md b/node_modules/micromark-factory-space/readme.md deleted file mode 100644 index b9c01776d8..0000000000 --- a/node_modules/micromark-factory-space/readme.md +++ /dev/null @@ -1,225 +0,0 @@ -# micromark-factory-space - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse [markdown space][markdown-space] (found in lots -of places). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factorySpace(…)`](#factoryspace) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse spaces and/or tabs. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-space -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factorySpace} from 'https://esm.sh/micromark-factory-space@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factorySpace} from 'micromark-factory-space' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function info(code) { - if (code === codes.eof || markdownLineEndingOrSpace(code)) { - effects.exit(types.chunkString) - effects.exit(types.codeFencedFenceInfo) - return factorySpace(effects, infoAfter, types.whitespace)(code) - } - - if (code === codes.graveAccent && code === marker) return nok(code) - effects.consume(code) - return info - } - - // … -} -``` - -## API - -This module exports the identifier [`factorySpace`][api-factory-space]. -There is no default export. - -### `factorySpace(…)` - -Parse spaces and tabs. - -There is no `nok` parameter: - -* spaces in markdown are often optional, in which case this factory can be - used and `ok` will be switched to whether spaces were found or not -* one line ending or space can be detected with `markdownSpace(code)` right - before using `factorySpace` - -###### Examples - -Where `␉` represents a tab (plus how much it expands) and `␠` represents a -single space. - -```markdown -␉ -␠␠␠␠ -␉␠ -``` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `type` (`string`) - — type (`' \t'`) -* `max` (`number`, default: `Infinity`) - — max (exclusive) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-space@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-space.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-space - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-space - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-space - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[markdown-space]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownspacecode - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-space]: #factoryspace diff --git a/node_modules/micromark-factory-title/dev/index.d.ts b/node_modules/micromark-factory-title/dev/index.d.ts deleted file mode 100644 index 6d4b4be203..0000000000 --- a/node_modules/micromark-factory-title/dev/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.d.ts.map b/node_modules/micromark-factory-title/dev/index.d.ts.map deleted file mode 100644 index 0108e7c976..0000000000 --- a/node_modules/micromark-factory-title/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.js b/node_modules/micromark-factory-title/dev/index.js deleted file mode 100644 index 4774214cbb..0000000000 --- a/node_modules/micromark-factory-title/dev/index.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * @import { - * Code, - * Effects, - * State, - * TokenType - * } from 'micromark-util-types' - */ - -import {factorySpace} from 'micromark-factory-space' -import {markdownLineEnding} from 'micromark-util-character' -import {codes, constants, types} from 'micromark-util-symbol' - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable} */ - let marker - - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if ( - code === codes.quotationMark || - code === codes.apostrophe || - code === codes.leftParenthesis - ) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === codes.leftParenthesis ? codes.rightParenthesis : code - return begin - } - - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - - if (code === codes.eof) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter(types.lineEnding) - effects.consume(code) - effects.exit(types.lineEnding) - return factorySpace(effects, atBreak, types.linePrefix) - } - - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === codes.eof || markdownLineEnding(code)) { - effects.exit(types.chunkString) - return atBreak(code) - } - - effects.consume(code) - return code === codes.backslash ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === codes.backslash) { - effects.consume(code) - return inside - } - - return inside(code) - } -} diff --git a/node_modules/micromark-factory-title/index.d.ts b/node_modules/micromark-factory-title/index.d.ts deleted file mode 100644 index 6d4b4be203..0000000000 --- a/node_modules/micromark-factory-title/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.d.ts.map b/node_modules/micromark-factory-title/index.d.ts.map deleted file mode 100644 index 0108e7c976..0000000000 --- a/node_modules/micromark-factory-title/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.js b/node_modules/micromark-factory-title/index.js deleted file mode 100644 index 02c8026c1e..0000000000 --- a/node_modules/micromark-factory-title/index.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * @import { - * Code, - * Effects, - * State, - * TokenType - * } from 'micromark-util-types' - */ - -import { factorySpace } from 'micromark-factory-space'; -import { markdownLineEnding } from 'micromark-util-character'; -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable} */ - let marker; - return start; - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - marker = code === 40 ? 41 : code; - return begin; - } - return nok(code); - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.exit(type); - return ok; - } - effects.enter(stringType); - return atBreak(code); - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType); - return begin(marker); - } - if (code === null) { - return nok(code); - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter("lineEnding"); - effects.consume(code); - effects.exit("lineEnding"); - return factorySpace(effects, atBreak, "linePrefix"); - } - effects.enter("chunkString", { - contentType: "string" - }); - return inside(code); - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit("chunkString"); - return atBreak(code); - } - effects.consume(code); - return code === 92 ? escape : inside; - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code); - return inside; - } - return inside(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/license b/node_modules/micromark-factory-title/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-title/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-title/package.json b/node_modules/micromark-factory-title/package.json deleted file mode 100644 index f643a5dea3..0000000000 --- a/node_modules/micromark-factory-title/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "micromark-factory-title", - "version": "2.0.1", - "description": "micromark factory to parse markdown titles (found in resources, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "title" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-title", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "max-params": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-title/readme.md b/node_modules/micromark-factory-title/readme.md deleted file mode 100644 index ff51cbdebe..0000000000 --- a/node_modules/micromark-factory-title/readme.md +++ /dev/null @@ -1,229 +0,0 @@ -# micromark-factory-title - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse markdown titles (found in resources, -definitions). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryTitle(…)`](#factorytitle) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse titles. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-title -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factorySpace} from 'https://esm.sh/micromark-factory-title@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factoryTitle} from 'micromark-factory-title' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function before(code) { - if ( - code === codes.quotationMark || - code === codes.apostrophe || - code === codes.leftParenthesis - ) { - return factoryTitle( - effects, - factorySpace(effects, after, types.whitespace), - nok, - types.definitionTitle, - types.definitionTitleMarker, - types.definitionTitleString - )(code) - } - - return nok(code) - } - - // … -} -``` - -## API - -This module exports the identifier [`factoryTitle`][api-factory-title]. -There is no default export. - -### `factoryTitle(…)` - -Parse titles. - -###### Examples - -```markdown -"a" -'b' -(c) -"a -b" -'a - b' -(a\)b) -``` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `nok` (`State`) - — state switched to when unsuccessful -* `type` (`string`) - — type of the whole title (`"a"`, `'b'`, `(c)`) -* `markerType` (`string`) - — type for the markers (`"`, `'`, `(`, and `)`) -* `stringType` (`string`) - — type for the value (`a`) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-title@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-title.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-title - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-title - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-title - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-title]: #factorytitle diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts b/node_modules/micromark-factory-whitespace/dev/index.d.ts deleted file mode 100644 index 52ca4b85bc..0000000000 --- a/node_modules/micromark-factory-whitespace/dev/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects: Effects, ok: State): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts.map b/node_modules/micromark-factory-whitespace/dev/index.d.ts.map deleted file mode 100644 index 5169dc46ad..0000000000 --- a/node_modules/micromark-factory-whitespace/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.js b/node_modules/micromark-factory-whitespace/dev/index.js deleted file mode 100644 index 3aa9e37b2d..0000000000 --- a/node_modules/micromark-factory-whitespace/dev/index.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @import {Effects, State} from 'micromark-util-types' - */ - -import {factorySpace} from 'micromark-factory-space' -import {markdownLineEnding, markdownSpace} from 'micromark-util-character' -import {types} from 'micromark-util-symbol' - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter(types.lineEnding) - effects.consume(code) - effects.exit(types.lineEnding) - seen = true - return start - } - - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? types.linePrefix : types.lineSuffix - )(code) - } - - return ok(code) - } -} diff --git a/node_modules/micromark-factory-whitespace/index.d.ts b/node_modules/micromark-factory-whitespace/index.d.ts deleted file mode 100644 index 52ca4b85bc..0000000000 --- a/node_modules/micromark-factory-whitespace/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects: Effects, ok: State): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.d.ts.map b/node_modules/micromark-factory-whitespace/index.d.ts.map deleted file mode 100644 index 5169dc46ad..0000000000 --- a/node_modules/micromark-factory-whitespace/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.js b/node_modules/micromark-factory-whitespace/index.js deleted file mode 100644 index 02243add41..0000000000 --- a/node_modules/micromark-factory-whitespace/index.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @import {Effects, State} from 'micromark-util-types' - */ - -import { factorySpace } from 'micromark-factory-space'; -import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen; - return start; - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter("lineEnding"); - effects.consume(code); - effects.exit("lineEnding"); - seen = true; - return start; - } - if (markdownSpace(code)) { - return factorySpace(effects, start, seen ? "linePrefix" : "lineSuffix")(code); - } - return ok(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/license b/node_modules/micromark-factory-whitespace/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-whitespace/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-whitespace/package.json b/node_modules/micromark-factory-whitespace/package.json deleted file mode 100644 index ce733bd06e..0000000000 --- a/node_modules/micromark-factory-whitespace/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-factory-whitespace", - "version": "2.0.1", - "description": "micromark factory to parse markdown whitespace (found in lots of places)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "whitespace" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-whitespace", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-whitespace/readme.md b/node_modules/micromark-factory-whitespace/readme.md deleted file mode 100644 index a846406a52..0000000000 --- a/node_modules/micromark-factory-whitespace/readme.md +++ /dev/null @@ -1,205 +0,0 @@ -# micromark-factory-whitespace - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse [markdown line endings or spaces][ws] (found in -lots of places). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryWhitespace(…)`](#factorywhitespace) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse whitespace. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-whitespace -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factoryWhitespace} from 'https://esm.sh/micromark-factory-whitespace@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factoryWhitespace} from 'micromark-factory-whitespace' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeTitle(effects, ok, nok) { - return start - - /** @type {State} */ - function start(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, before)(code) - : nok(code) - } - - // … -} -``` - -## API - -This module exports the identifier -[`factoryWhitespace`][api-factory-whitespace]. -There is no default export. - -### `factoryWhitespace(…)` - -Parse spaces and tabs. - -There is no `nok` parameter: - -* line endings or spaces in markdown are often optional, in which case this - factory can be used and `ok` will be switched to whether spaces were found - or not -* one line ending or space can be detected with - [`markdownLineEndingOrSpace(code)`][ws] right before using - `factoryWhitespace` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-whitespace@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-whitespace.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-whitespace - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-whitespace - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-whitespace - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[ws]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownlineendingorspacecode - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-whitespace]: #factorywhitespace diff --git a/node_modules/micromark-util-character/dev/index.d.ts b/node_modules/micromark-util-character/dev/index.d.ts deleted file mode 100644 index fe5289573d..0000000000 --- a/node_modules/micromark-util-character/dev/index.d.ts +++ /dev/null @@ -1,195 +0,0 @@ -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code: Code): boolean; -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code: Code): boolean; -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit: (code: Code) => boolean; -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace: (code: Code) => boolean; -import type { Code } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.d.ts.map b/node_modules/micromark-util-character/dev/index.d.ts.map deleted file mode 100644 index 8ded3c1570..0000000000 --- a/node_modules/micromark-util-character/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.js b/node_modules/micromark-util-character/dev/index.js deleted file mode 100644 index 123745e860..0000000000 --- a/node_modules/micromark-util-character/dev/index.js +++ /dev/null @@ -1,252 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -import {codes} from 'micromark-util-symbol' - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < codes.space || code === codes.del) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code) { - return code !== null && code < codes.horizontalTab -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code) { - return code !== null && (code < codes.nul || code === codes.space) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code) { - return ( - code === codes.horizontalTab || - code === codes.virtualSpace || - code === codes.space - ) -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * Expression. - * @returns {(code: Code) => boolean} - * Check. - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && code > -1 && regex.test(String.fromCharCode(code)) - } -} diff --git a/node_modules/micromark-util-character/index.d.ts b/node_modules/micromark-util-character/index.d.ts deleted file mode 100644 index fe5289573d..0000000000 --- a/node_modules/micromark-util-character/index.d.ts +++ /dev/null @@ -1,195 +0,0 @@ -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code: Code): boolean; -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code: Code): boolean; -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit: (code: Code) => boolean; -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace: (code: Code) => boolean; -import type { Code } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.d.ts.map b/node_modules/micromark-util-character/index.d.ts.map deleted file mode 100644 index 8ded3c1570..0000000000 --- a/node_modules/micromark-util-character/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.js b/node_modules/micromark-util-character/index.js deleted file mode 100644 index 13698f04f2..0000000000 --- a/node_modules/micromark-util-character/index.js +++ /dev/null @@ -1,246 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha = regexCheck(/[A-Za-z]/); - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/); - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ); -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit = regexCheck(/\d/); - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/); - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/); - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code) { - return code !== null && code < -2; -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32); -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code) { - return code === -2 || code === -1 || code === 32; -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u); - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace = regexCheck(/\s/); - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * Expression. - * @returns {(code: Code) => boolean} - * Check. - */ -function regexCheck(regex) { - return check; - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && code > -1 && regex.test(String.fromCharCode(code)); - } -} \ No newline at end of file diff --git a/node_modules/micromark-util-character/license b/node_modules/micromark-util-character/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-character/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-character/package.json b/node_modules/micromark-util-character/package.json deleted file mode 100644 index 8af57e3999..0000000000 --- a/node_modules/micromark-util-character/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-util-character", - "version": "2.1.1", - "description": "micromark utility to handle character codes", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "character" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-character", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-character/readme.md b/node_modules/micromark-util-character/readme.md deleted file mode 100644 index 2356e4720f..0000000000 --- a/node_modules/micromark-util-character/readme.md +++ /dev/null @@ -1,446 +0,0 @@ -# micromark-util-character - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to handle [character codes][code]. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`asciiAlpha(code)`](#asciialphacode) - * [`asciiAlphanumeric(code)`](#asciialphanumericcode) - * [`asciiAtext(code)`](#asciiatextcode) - * [`asciiControl(code)`](#asciicontrolcode) - * [`asciiDigit(code)`](#asciidigitcode) - * [`asciiHexDigit(code)`](#asciihexdigitcode) - * [`asciiPunctuation(code)`](#asciipunctuationcode) - * [`markdownLineEnding(code)`](#markdownlineendingcode) - * [`markdownLineEndingOrSpace(code)`](#markdownlineendingorspacecode) - * [`markdownSpace(code)`](#markdownspacecode) - * [`unicodePunctuation(code)`](#unicodepunctuationcode) - * [`unicodeWhitespace(code)`](#unicodewhitespacecode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes algorithms to check whether characters match groups. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-character -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import * as character from 'https://esm.sh/micromark-util-character@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {asciiAlpha} from 'micromark-util-character' - -console.log(asciiAlpha(64)) // false -console.log(asciiAlpha(65)) // true -``` - -## API - -This module exports the identifiers -[`asciiAlpha`][api-ascii-alpha], -[`asciiAlphanumeric`][api-ascii-alphanumeric], -[`asciiAtext`][api-ascii-atext], -[`asciiControl`][api-ascii-control], -[`asciiDigit`][api-ascii-digit], -[`asciiHexDigit`][api-ascii-hex-digit], -[`asciiPunctuation`][api-ascii-punctuation], -[`markdownLineEnding`][api-markdown-line-ending], -[`markdownLineEndingOrSpace`][api-markdown-line-ending-or-space], -[`markdownSpace`][api-markdown-space], -[`unicodePunctuation`][api-unicode-punctuation], -[`unicodeWhitespace`][api-unicode-whitespace]. -There is no default export. - -### `asciiAlpha(code)` - -Check whether the [character code][code] represents an ASCII alpha (`a` through -`z`, case insensitive). - -An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - -An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) -to U+005A (`Z`). - -An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) -to U+007A (`z`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiAlphanumeric(code)` - -Check whether the [character code][code] represents an ASCII alphanumeric (`a` -through `z`, case insensitive, or `0` through `9`). - -An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha -(see `asciiAlpha`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiAtext(code)` - -Check whether the [character code][code] represents an ASCII atext. - -atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in -the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), -U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F -SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E -CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE -(`{`) to U+007E TILDE (`~`) (**\[RFC5322]**). - -See **\[RFC5322]**:\ -[Internet Message Format](https://tools.ietf.org/html/rfc5322).\ -P. Resnick.\ -IETF. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiControl(code)` - -Check whether a [character code][code] is an ASCII control character. - -An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) -to U+001F (US), or U+007F (DEL). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiDigit(code)` - -Check whether the [character code][code] represents an ASCII digit (`0` through -`9`). - -An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to -U+0039 (`9`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiHexDigit(code)` - -Check whether the [character code][code] represents an ASCII hex digit (`a` -through `f`, case insensitive, or `0` through `9`). - -An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex -digit, or an ASCII lower hex digit. - -An **ASCII upper hex digit** is a character in the inclusive range U+0041 -(`A`) to U+0046 (`F`). - -An **ASCII lower hex digit** is a character in the inclusive range U+0061 -(`a`) to U+0066 (`f`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiPunctuation(code)` - -Check whether the [character code][code] represents ASCII punctuation. - -An **ASCII punctuation** is a character in the inclusive ranges U+0021 -EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT -SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT -(`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `markdownLineEnding(code)` - -Check whether a [character code][code] is a markdown line ending. - -A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN -LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - -In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE -RETURN (CR) are replaced by these virtual characters depending on whether -they occurred together. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `markdownLineEndingOrSpace(code)` - -Check whether a [character code][code] is a markdown line ending (see -`markdownLineEnding`) or markdown space (see `markdownSpace`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `markdownSpace(code)` - -Check whether a [character code][code] is a markdown space. - -A **markdown space** is the concrete character U+0020 SPACE (SP) and the -virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - -In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is -replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL -SPACE (VS) characters, depending on the column at which the tab occurred. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `unicodePunctuation(code)` - -Check whether the [character code][code] represents Unicode punctuation. - -A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, -Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` -(Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` -(Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII -punctuation (see `asciiPunctuation`) (**\[UNICODE]**). - -See **\[UNICODE]**:\ -[The Unicode Standard](https://www.unicode.org/versions/).\ -Unicode Consortium. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `unicodeWhitespace(code)` - -Check whether the [character code][code] represents Unicode whitespace. - -Note that this does handle micromark specific markdown whitespace characters. -See `markdownLineEndingOrSpace` to check that. - -A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, -Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), -U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - -See **\[UNICODE]**:\ -[The Unicode Standard](https://www.unicode.org/versions/).\ -Unicode Consortium. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-character@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-character.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-character - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-character - -[bundle-size]: https://bundlejs.com/?q=micromark-util-character - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[code]: https://github.com/micromark/micromark#preprocess - -[api-ascii-alpha]: #asciialphacode - -[api-ascii-alphanumeric]: #asciialphanumericcode - -[api-ascii-atext]: #asciiatextcode - -[api-ascii-control]: #asciicontrolcode - -[api-ascii-digit]: #asciidigitcode - -[api-ascii-hex-digit]: #asciihexdigitcode - -[api-ascii-punctuation]: #asciipunctuationcode - -[api-markdown-line-ending]: #markdownlineendingcode - -[api-markdown-line-ending-or-space]: #markdownlineendingorspacecode - -[api-markdown-space]: #markdownspacecode - -[api-unicode-punctuation]: #unicodepunctuationcode - -[api-unicode-whitespace]: #unicodewhitespacecode diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts b/node_modules/micromark-util-chunked/dev/index.d.ts deleted file mode 100644 index ed04ba20d0..0000000000 --- a/node_modules/micromark-util-chunked/dev/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list: Array, start: number, remove: number, items: Array): undefined; -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list: Array, items: Array): Array; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts.map b/node_modules/micromark-util-chunked/dev/index.d.ts.map deleted file mode 100644 index 432125397d..0000000000 --- a/node_modules/micromark-util-chunked/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.js b/node_modules/micromark-util-chunked/dev/index.js deleted file mode 100644 index 7b6a18f871..0000000000 --- a/node_modules/micromark-util-chunked/dev/index.js +++ /dev/null @@ -1,89 +0,0 @@ -import {constants} from 'micromark-util-symbol' - -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < constants.v8MaxSafeChunkSize) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice( - chunkStart, - chunkStart + constants.v8MaxSafeChunkSize - ) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - - chunkStart += constants.v8MaxSafeChunkSize - start += constants.v8MaxSafeChunkSize - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - - return items -} diff --git a/node_modules/micromark-util-chunked/index.d.ts b/node_modules/micromark-util-chunked/index.d.ts deleted file mode 100644 index ed04ba20d0..0000000000 --- a/node_modules/micromark-util-chunked/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list: Array, start: number, remove: number, items: Array): undefined; -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list: Array, items: Array): Array; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.d.ts.map b/node_modules/micromark-util-chunked/index.d.ts.map deleted file mode 100644 index 432125397d..0000000000 --- a/node_modules/micromark-util-chunked/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.js b/node_modules/micromark-util-chunked/index.js deleted file mode 100644 index 3a4b262400..0000000000 --- a/node_modules/micromark-util-chunked/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list, start, remove, items) { - const end = list.length; - let chunkStart = 0; - /** @type {Array} */ - let parameters; - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start; - } else { - start = start > end ? end : start; - } - remove = remove > 0 ? remove : 0; - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items); - parameters.unshift(start, remove); - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters); - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove); - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000); - parameters.unshift(start, 0); - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters); - chunkStart += 10000; - start += 10000; - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items); - return list; - } - return items; -} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/license b/node_modules/micromark-util-chunked/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-chunked/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-chunked/package.json b/node_modules/micromark-util-chunked/package.json deleted file mode 100644 index 8a5c91d395..0000000000 --- a/node_modules/micromark-util-chunked/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-util-chunked", - "version": "2.0.1", - "description": "micromark utility to splice and push with giant arrays", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "chunk", - "splice", - "push" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-chunked", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-chunked/readme.md b/node_modules/micromark-util-chunked/readme.md deleted file mode 100644 index 6628fad732..0000000000 --- a/node_modules/micromark-util-chunked/readme.md +++ /dev/null @@ -1,219 +0,0 @@ -# micromark-util-chunked - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to splice and push with giant arrays. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`push(list, items)`](#pushlist-items) - * [`splice(list, start, remove, items)`](#splicelist-start-remove-items) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to splice for giant arrays, which V8 bugs -out on. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-chunked -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {push, splice} from 'https://esm.sh/micromark-util-chunked@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {push, splice} from 'micromark-util-chunked' - -// … - -nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] -]) - -// … - -splice(events, open - 1, index - open + 3, nextEvents) - -// … -``` - -## API - -This module exports the identifiers [`push`][api-push] -and [`splice`][api-splice]. -There is no default export. - -### `push(list, items)` - -Append `items` (an array) at the end of `list` (another array). -When `list` was empty, returns `items` instead. - -This prevents a potentially expensive operation when `list` is empty, -and adds items in batches to prevent V8 from hanging. - -###### Parameters - -* `list` (`Array`) - — list to operate on -* `items` (`Array`) - — items to add to `list` - -###### Returns - -Either `list` or `items` (`Array`). - -### `splice(list, start, remove, items)` - -Like `Array#splice`, but smarter for giant arrays. - -`Array#splice` takes all items to be inserted as individual argument which -causes a stack overflow in V8 when trying to insert 100k items for instance. - -Otherwise, this does not return the removed items, and takes `items` as an -array instead of rest parameters. - -###### Parameters - -* `list` (`Array`) - — list to operate on -* `start` (`number`) - — index to remove/insert at (can be negative) -* `remove` (`number`) - — number of items to remove -* `items` (`Array`) - — items to inject into `list` - -###### Returns - -Nothing (`undefined`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-chunked@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-chunked.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-chunked - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-chunked - -[bundle-size]: https://bundlejs.com/?q=micromark-util-chunked - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-push]: #pushlist-items - -[api-splice]: #splicelist-start-remove-items diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts b/node_modules/micromark-util-classify-character/dev/index.d.ts deleted file mode 100644 index db98cd1fe9..0000000000 --- a/node_modules/micromark-util-classify-character/dev/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; -import type { Code } from 'micromark-util-types'; -import { constants } from 'micromark-util-symbol'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts.map b/node_modules/micromark-util-classify-character/dev/index.d.ts.map deleted file mode 100644 index 9b63a5bedd..0000000000 --- a/node_modules/micromark-util-classify-character/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.js b/node_modules/micromark-util-classify-character/dev/index.js deleted file mode 100644 index 0d82474555..0000000000 --- a/node_modules/micromark-util-classify-character/dev/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -import { - markdownLineEndingOrSpace, - unicodePunctuation, - unicodeWhitespace -} from 'micromark-util-character' -import {codes, constants} from 'micromark-util-symbol' - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code) { - if ( - code === codes.eof || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return constants.characterGroupWhitespace - } - - if (unicodePunctuation(code)) { - return constants.characterGroupPunctuation - } -} diff --git a/node_modules/micromark-util-classify-character/index.d.ts b/node_modules/micromark-util-classify-character/index.d.ts deleted file mode 100644 index db98cd1fe9..0000000000 --- a/node_modules/micromark-util-classify-character/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; -import type { Code } from 'micromark-util-types'; -import { constants } from 'micromark-util-symbol'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.d.ts.map b/node_modules/micromark-util-classify-character/index.d.ts.map deleted file mode 100644 index 9b63a5bedd..0000000000 --- a/node_modules/micromark-util-classify-character/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.js b/node_modules/micromark-util-classify-character/index.js deleted file mode 100644 index a9aebc6cb8..0000000000 --- a/node_modules/micromark-util-classify-character/index.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -import { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character'; -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code) { - if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) { - return 1; - } - if (unicodePunctuation(code)) { - return 2; - } -} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/license b/node_modules/micromark-util-classify-character/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-classify-character/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-classify-character/package.json b/node_modules/micromark-util-classify-character/package.json deleted file mode 100644 index f424ff97e6..0000000000 --- a/node_modules/micromark-util-classify-character/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "micromark-util-classify-character", - "version": "2.0.1", - "description": "micromark utility to classify whether a character is whitespace or punctuation", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "attention", - "classify", - "character" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-classify-character", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-classify-character/readme.md b/node_modules/micromark-util-classify-character/readme.md deleted file mode 100644 index f0b3ee78dc..0000000000 --- a/node_modules/micromark-util-classify-character/readme.md +++ /dev/null @@ -1,205 +0,0 @@ -# micromark-util-classify-character - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to classify whether a character is whitespace or -punctuation. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`classifyCharacter(code)`](#classifycharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to classify characters into 3 categories. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-classify-character -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {classifyCharacter} from 'https://esm.sh/micromark-util-classify-character@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - return start - - // … - - /** @type {State} */ - function sequence(code) { - if (code === marker) { - // … - } - - const token = effects.exit('attentionSequence') - const after = classifyCharacter(code) - const open = - !after || (after === constants.characterGroupPunctuation && before) - const close = - !before || (before === constants.characterGroupPunctuation && after) - // … - } - - // … -} -``` - -## API - -This module exports the identifier -[`classifyCharacter`][api-classify-character]. -There is no default export. - -### `classifyCharacter(code)` - -Classify whether a code represents whitespace, punctuation, or something -else. - -Used for attention (emphasis, strong), whose sequences can open or close -based on the class of surrounding characters. - -> 👉 **Note**: eof (`null`) is seen as whitespace. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Group (`constants.characterGroupWhitespace`, -`constants.characterGroupPunctuation`, or `undefined`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-classify-character@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-classify-character.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-classify-character - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-classify-character - -[bundle-size]: https://bundlejs.com/?q=micromark-util-classify-character - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-classify-character]: #classifycharactercode diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts b/node_modules/micromark-util-combine-extensions/index.d.ts deleted file mode 100644 index dbd674cb8b..0000000000 --- a/node_modules/micromark-util-combine-extensions/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Combine multiple syntax extensions into one. - * - * @param {ReadonlyArray} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -export function combineExtensions(extensions: ReadonlyArray): NormalizedExtension; -/** - * Combine multiple HTML extensions into one. - * - * @param {ReadonlyArray} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * Single combined HTML extension. - */ -export function combineHtmlExtensions(htmlExtensions: ReadonlyArray): HtmlExtension; -import type { Extension } from 'micromark-util-types'; -import type { NormalizedExtension } from 'micromark-util-types'; -import type { HtmlExtension } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts.map b/node_modules/micromark-util-combine-extensions/index.d.ts.map deleted file mode 100644 index e0ea7bf1ee..0000000000 --- a/node_modules/micromark-util-combine-extensions/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,8CALW,aAAa,CAAC,SAAS,CAAC,GAEtB,mBAAmB,CAa/B;AA+DD;;;;;;;GAOG;AACH,sDALW,aAAa,CAAC,aAAa,CAAC,GAE1B,aAAa,CAazB;+BA1GS,sBAAsB;yCAAtB,sBAAsB;mCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.js b/node_modules/micromark-util-combine-extensions/index.js deleted file mode 100644 index bc28f6d9c3..0000000000 --- a/node_modules/micromark-util-combine-extensions/index.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @import { - * Extension, - * Handles, - * HtmlExtension, - * NormalizedExtension - * } from 'micromark-util-types' - */ - -import {splice} from 'micromark-util-chunked' - -const hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {ReadonlyArray} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -export function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {undefined} - * Nothing. - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record} */ - const left = maybe || (all[hook] = {}) - /** @type {Record | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array} existing - * List of constructs to merge into. - * @param {Array} list - * List of constructs to merge. - * @returns {undefined} - * Nothing. - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {ReadonlyArray} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * Single combined HTML extension. - */ -export function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {undefined} - * Nothing. - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} diff --git a/node_modules/micromark-util-combine-extensions/license b/node_modules/micromark-util-combine-extensions/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-combine-extensions/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-combine-extensions/package.json b/node_modules/micromark-util-combine-extensions/package.json deleted file mode 100644 index f46ff4099f..0000000000 --- a/node_modules/micromark-util-combine-extensions/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "micromark-util-combine-extensions", - "version": "2.0.1", - "description": "micromark utility to combine syntax or html extensions", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "extension", - "combine", - "merge" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-combine-extensions", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "guard-for-in": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-combine-extensions/readme.md b/node_modules/micromark-util-combine-extensions/readme.md deleted file mode 100644 index b9b6fc13e9..0000000000 --- a/node_modules/micromark-util-combine-extensions/readme.md +++ /dev/null @@ -1,201 +0,0 @@ -# micromark-util-combine-extensions - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to combine [syntax][] or [html][] extensions. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`combineExtensions(extensions)`](#combineextensionsextensions) - * [`combineHtmlExtensions(htmlExtensions)`](#combinehtmlextensionshtmlextensions) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package can merge multiple extensions into one. - -## When should I use this? - -This package might be useful when you are making “presets”, such as -[`micromark-extension-gfm`][micromark-extension-gfm]. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-combine-extensions -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {combineExtensions} from 'https://esm.sh/micromark-util-combine-extensions@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {gfmAutolinkLiteral} from 'micromark-extension-gfm-autolink-literal' -import {gfmStrikethrough} from 'micromark-extension-gfm-strikethrough' -import {gfmTable} from 'micromark-extension-gfm-table' -import {gfmTaskListItem} from 'micromark-extension-gfm-task-list-item' -import {combineExtensions} from 'micromark-util-combine-extensions' - -const gfm = combineExtensions([gfmAutolinkLiteral, gfmStrikethrough(), gfmTable, gfmTaskListItem]) -``` - -## API - -This module exports the identifiers -[`combineExtensions`][api-combine-extensions] and -[`combineHtmlExtensions`][api-combine-html-extensions]. -There is no default export. - -### `combineExtensions(extensions)` - -Combine multiple syntax extensions into one. - -###### Parameters - -* `extensions` (`Array`) - — list of syntax extensions - -###### Returns - -A single combined extension (`Extension`). - -### `combineHtmlExtensions(htmlExtensions)` - -Combine multiple html extensions into one. - -###### Parameters - -* `htmlExtensions` (`Array`) - — list of HTML extensions - -###### Returns - -A single combined HTML extension (`HtmlExtension`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-combine-extensions@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-combine-extensions.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-combine-extensions - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-combine-extensions - -[bundle-size]: https://bundlejs.com/?q=micromark-util-combine-extensions - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[syntax]: https://github.com/micromark/micromark#syntaxextension - -[html]: https://github.com/micromark/micromark#htmlextension - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[api-combine-extensions]: #combineextensionsextensions - -[api-combine-html-extensions]: #combinehtmlextensionshtmlextensions diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts deleted file mode 100644 index 333bdbbd0e..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value: string, base: number): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map deleted file mode 100644 index 17f668f104..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js deleted file mode 100644 index a96c423833..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js +++ /dev/null @@ -1,42 +0,0 @@ -import {codes, values} from 'micromark-util-symbol' - -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - - if ( - // C0 except for HT, LF, FF, CR, space. - code < codes.ht || - code === codes.vt || - (code > codes.cr && code < codes.space) || - // Control character (DEL) of C0, and C1 controls. - (code > codes.tilde && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55_295 && code < 57_344) || - // Noncharacters. - (code > 64_975 && code < 65_008) || - /* eslint-disable no-bitwise */ - (code & 65_535) === 65_535 || - (code & 65_535) === 65_534 || - /* eslint-enable no-bitwise */ - // Out of range - code > 1_114_111 - ) { - return values.replacementCharacter - } - - return String.fromCodePoint(code) -} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts deleted file mode 100644 index 333bdbbd0e..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value: string, base: number): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map deleted file mode 100644 index 17f668f104..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.js b/node_modules/micromark-util-decode-numeric-character-reference/index.js deleted file mode 100644 index 1d75d7ba5c..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base); - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || code === 11 || code > 13 && code < 32 || - // Control character (DEL) of C0, and C1 controls. - code > 126 && code < 160 || - // Lone high surrogates and low surrogates. - code > 55_295 && code < 57_344 || - // Noncharacters. - code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */ - (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */ - // Out of range - code > 1_114_111) { - return "\uFFFD"; - } - return String.fromCodePoint(code); -} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/license b/node_modules/micromark-util-decode-numeric-character-reference/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-decode-numeric-character-reference/package.json b/node_modules/micromark-util-decode-numeric-character-reference/package.json deleted file mode 100644 index 759e989b07..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "micromark-util-decode-numeric-character-reference", - "version": "2.0.2", - "description": "micromark utility to decode numeric character references", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "decode", - "numeric", - "number", - "character", - "reference" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-decode-numeric-character-reference", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/readme.md b/node_modules/micromark-util-decode-numeric-character-reference/readme.md deleted file mode 100644 index 4610c59bc9..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/readme.md +++ /dev/null @@ -1,184 +0,0 @@ -# micromark-util-decode-numeric-character-reference - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to decode numeric character references. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`decodeNumericCharacterReference(value, base)`](#decodenumericcharacterreferencevalue-base) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to decode numeric character references. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-decode-numeric-character-reference -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {decodeNumericCharacterReference} from 'https://esm.sh/micromark-util-decode-numeric-character-reference@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference' - -decodeNumericCharacterReference('41', 16) // 'A' -decodeNumericCharacterReference('65', 10) // 'A' -decodeNumericCharacterReference('A', 16) // '\n' -decodeNumericCharacterReference('7F', 16) // '�' - Control -decodeNumericCharacterReference('110000', 16) // '�' - Out of range -``` - -## API - -This module exports the identifier: -[`decodeNumericCharacterReference`][api-decode-numeric-character-reference]. -There is no default export. - -### `decodeNumericCharacterReference(value, base)` - -Turn the number (in string form as either hexa- or plain decimal) coming from -a numeric character reference into a character. - -Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes -non-characters and control characters safe. - -###### Parameters - -* `value` (`string`) - — value to decode -* `base` (`number`, probably `10` or `16`) - — numeric base - -###### Returns - -Character (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-decode-numeric-character-reference@2`, compatible with -Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier - -[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-decode-numeric-character-reference]: #decodenumericcharacterreferencevalue-base diff --git a/node_modules/micromark-util-encode/index.d.ts b/node_modules/micromark-util-encode/index.d.ts deleted file mode 100644 index 760226f618..0000000000 --- a/node_modules/micromark-util-encode/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Encode only the dangerous HTML characters. - * - * This ensures that certain characters which have special meaning in HTML are - * dealt with. - * Technically, we can skip `>` and `"` in many cases, but CM includes them. - * - * @param {string} value - * Value to encode. - * @returns {string} - * Encoded value. - */ -export function encode(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.d.ts.map b/node_modules/micromark-util-encode/index.d.ts.map deleted file mode 100644 index 16eebb1cc4..0000000000 --- a/node_modules/micromark-util-encode/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,8BALW,MAAM,GAEJ,MAAM,CAqBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.js b/node_modules/micromark-util-encode/index.js deleted file mode 100644 index 397f1d4041..0000000000 --- a/node_modules/micromark-util-encode/index.js +++ /dev/null @@ -1,33 +0,0 @@ -const characterReferences = {'"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'} - -/** - * Encode only the dangerous HTML characters. - * - * This ensures that certain characters which have special meaning in HTML are - * dealt with. - * Technically, we can skip `>` and `"` in many cases, but CM includes them. - * - * @param {string} value - * Value to encode. - * @returns {string} - * Encoded value. - */ -export function encode(value) { - return value.replace(/["&<>]/g, replace) - - /** - * @param {string} value - * Value to replace. - * @returns {string} - * Encoded value. - */ - function replace(value) { - return ( - '&' + - characterReferences[ - /** @type {keyof typeof characterReferences} */ (value) - ] + - ';' - ) - } -} diff --git a/node_modules/micromark-util-encode/license b/node_modules/micromark-util-encode/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-encode/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-encode/package.json b/node_modules/micromark-util-encode/package.json deleted file mode 100644 index a56c6b3b04..0000000000 --- a/node_modules/micromark-util-encode/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "micromark-util-encode", - "version": "2.0.1", - "description": "micromark utility to encode dangerous html characters", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "html", - "encode" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-string-replace-all": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-encode/readme.md b/node_modules/micromark-util-encode/readme.md deleted file mode 100644 index cd27292fe1..0000000000 --- a/node_modules/micromark-util-encode/readme.md +++ /dev/null @@ -1,176 +0,0 @@ -# micromark-util-encode - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to encode dangerous html characters. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`encode(value)`](#encodevalue) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to make text safe for embedding in HTML. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-encode -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {encode} from 'https://esm.sh/micromark-util-encode@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {encode} from 'micromark-util-encode' - -encode('<3') // '<3' -``` - -## API - -This module exports the identifier [`encode`][api-encode]. -There is no default export. - -### `encode(value)` - -Encode only the dangerous HTML characters. - -This ensures that certain characters which have special meaning in HTML are -dealt with. -Technically, we can skip `>` and `"` in many cases, but CM includes them. - -###### Parameters - -* `value` (`string`) - — value to encode - -###### Returns - -Encoded value (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-encode@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-encode.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-encode - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-encode - -[bundle-size]: https://bundlejs.com/?q=micromark-util-encode - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-encode]: #encodevalue diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts b/node_modules/micromark-util-html-tag-name/index.d.ts deleted file mode 100644 index cd5ef317cd..0000000000 --- a/node_modules/micromark-util-html-tag-name/index.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * . - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -export const htmlBlockNames: string[]; -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * . - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -export const htmlRawNames: string[]; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts.map b/node_modules/micromark-util-html-tag-name/index.d.ts.map deleted file mode 100644 index 56f2fc0f2e..0000000000 --- a/node_modules/micromark-util-html-tag-name/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,sCA+DC;AAED;;;;;;;;;;;GAWG;AACH,oCAAkE"} \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.js b/node_modules/micromark-util-html-tag-name/index.js deleted file mode 100644 index fa0a0fd950..0000000000 --- a/node_modules/micromark-util-html-tag-name/index.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * . - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -export const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * . - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -export const htmlRawNames = ['pre', 'script', 'style', 'textarea'] diff --git a/node_modules/micromark-util-html-tag-name/license b/node_modules/micromark-util-html-tag-name/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-html-tag-name/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-html-tag-name/package.json b/node_modules/micromark-util-html-tag-name/package.json deleted file mode 100644 index 9015e128c8..0000000000 --- a/node_modules/micromark-util-html-tag-name/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "micromark-util-html-tag-name", - "version": "2.0.1", - "description": "micromark utility with list of html tag names", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "html", - "tag", - "name" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-html-tag-name", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-html-tag-name/readme.md b/node_modules/micromark-util-html-tag-name/readme.md deleted file mode 100644 index ff16f68e74..0000000000 --- a/node_modules/micromark-util-html-tag-name/readme.md +++ /dev/null @@ -1,193 +0,0 @@ -# micromark-util-html-tag-name - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility with list of html tag names. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`htmlBlockNames`](#htmlblocknames) - * [`htmlRawNames`](#htmlrawnames) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes a list of known tag names to markdown. - -## When should I use this? - -This package is only useful if you want to build an alternative to micromark. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-html-tag-name -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {htmlBlockNames, htmlRawNames} from 'https://esm.sh/micromark-util-html-tag-name@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name' - -console.log(htmlBlockNames) // ['address', 'article', …] -console.log(htmlRawNames) // ['pre', 'script', …] -``` - -## API - -This module exports the identifiers [`htmlBlockNames`][api-html-block-names] -and [`htmlRawNames`][api-html-raw-names]. -There is no default export. - -### `htmlBlockNames` - -List of lowercase HTML “block” tag names (`Array`). - -The list, when parsing HTML (flow), results in more relaxed rules (condition -6\). -Because they are known blocks, the HTML-like syntax doesn’t have to be strictly -parsed. -For tag names not in this list, a more strict algorithm (condition 7) is used -to detect whether the HTML-like syntax is seen as HTML (flow) or not. - -This is copied from: -. - -> 👉 **Note**: `search` was added in `CommonMark@0.31`. - -### `htmlRawNames` - -List of lowercase HTML “raw” tag names (`Array`). - -The list, when parsing HTML (flow), results in HTML that can include lines -without exiting, until a closing tag also in this list is found (condition -1\). - -This module is copied from: -. - -> 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-html-tag-name@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-html-tag-name.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-html-tag-name - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-html-tag-name - -[bundle-size]: https://bundlejs.com/?q=micromark-util-html-tag-name - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-html-block-names]: #htmlblocknames - -[api-html-raw-names]: #htmlrawnames diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts deleted file mode 100644 index 96074f6031..0000000000 --- a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map deleted file mode 100644 index 684ad8d872..0000000000 --- a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.js b/node_modules/micromark-util-normalize-identifier/dev/index.js deleted file mode 100644 index ce4ce9b61c..0000000000 --- a/node_modules/micromark-util-normalize-identifier/dev/index.js +++ /dev/null @@ -1,38 +0,0 @@ -import {values} from 'micromark-util-symbol' - -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, values.space) - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts b/node_modules/micromark-util-normalize-identifier/index.d.ts deleted file mode 100644 index 96074f6031..0000000000 --- a/node_modules/micromark-util-normalize-identifier/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/index.d.ts.map deleted file mode 100644 index 684ad8d872..0000000000 --- a/node_modules/micromark-util-normalize-identifier/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.js b/node_modules/micromark-util-normalize-identifier/index.js deleted file mode 100644 index f206021427..0000000000 --- a/node_modules/micromark-util-normalize-identifier/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value) { - return value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, " ") - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase().toUpperCase(); -} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/license b/node_modules/micromark-util-normalize-identifier/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-normalize-identifier/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-normalize-identifier/package.json b/node_modules/micromark-util-normalize-identifier/package.json deleted file mode 100644 index 4fb1982df2..0000000000 --- a/node_modules/micromark-util-normalize-identifier/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "micromark-util-normalize-identifier", - "version": "2.0.1", - "description": "micromark utility normalize identifiers (as found in references, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "normalize", - "id", - "identifier" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off", - "unicorn/prefer-string-replace-all": "off" - } - } -} diff --git a/node_modules/micromark-util-normalize-identifier/readme.md b/node_modules/micromark-util-normalize-identifier/readme.md deleted file mode 100644 index 97e2383a1e..0000000000 --- a/node_modules/micromark-util-normalize-identifier/readme.md +++ /dev/null @@ -1,187 +0,0 @@ -# micromark-util-normalize-identifier - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility normalize identifiers. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`normalizeIdentifier(value)`](#normalizeidentifiervalue) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to normalize identifiers found in markdown. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-normalize-identifier -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {normalizeIdentifier} from 'https://esm.sh/micromark-util-normalize-identifier@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {normalizeIdentifier} from 'micromark-util-normalize-identifier' - -normalizeIdentifier(' a ') // 'A' -normalizeIdentifier('a\t\r\nb') // 'A B' -normalizeIdentifier('ТОЛПОЙ') // 'ТОЛПОЙ' -normalizeIdentifier('Толпой') // 'ТОЛПОЙ' -``` - -## API - -This module exports the identifier -[`normalizeIdentifier`][api-normalize-identifier]. -There is no default export. - -### `normalizeIdentifier(value)` - -Normalize an identifier (as found in references, definitions). - -Collapses markdown whitespace, trim, and then lower- and uppercase. - -Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their -lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different -uppercase character (U+0398 (`Θ`)). -So, to get a canonical form, we perform both lower- and uppercase. - -Using uppercase last makes sure keys will never interact with default -prototypal values (such as `constructor`): nothing in the prototype of `Object` -is uppercase. - -###### Parameters - -* `value` (`string`) - — identifier to normalize - -###### Returns - -Normalized identifier (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-normalize-identifier@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier - -[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-normalize-identifier]: #normalizeidentifiervalue diff --git a/node_modules/micromark-util-resolve-all/index.d.ts b/node_modules/micromark-util-resolve-all/index.d.ts deleted file mode 100644 index c9cbe16b64..0000000000 --- a/node_modules/micromark-util-resolve-all/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' - */ -/** - * Call all `resolveAll`s. - * - * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array} - * Changed events. - */ -export function resolveAll(constructs: ReadonlyArray<{ - resolveAll?: Resolver | undefined; -}>, events: Array, context: TokenizeContext): Array; -import type { Resolver } from 'micromark-util-types'; -import type { Event } from 'micromark-util-types'; -import type { TokenizeContext } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.d.ts.map b/node_modules/micromark-util-resolve-all/index.d.ts.map deleted file mode 100644 index 8ba707e732..0000000000 --- a/node_modules/micromark-util-resolve-all/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,uCATW,aAAa,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAC,CAAC,UAElD,KAAK,CAAC,KAAK,CAAC,WAEZ,eAAe,GAEb,KAAK,CAAC,KAAK,CAAC,CAkBxB;8BA9BkD,sBAAsB;2BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.js b/node_modules/micromark-util-resolve-all/index.js deleted file mode 100644 index 69eb32b604..0000000000 --- a/node_modules/micromark-util-resolve-all/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' - */ - -/** - * Call all `resolveAll`s. - * - * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array} - * Changed events. - */ -export function resolveAll(constructs, events, context) { - /** @type {Array} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} diff --git a/node_modules/micromark-util-resolve-all/license b/node_modules/micromark-util-resolve-all/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-resolve-all/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-resolve-all/package.json b/node_modules/micromark-util-resolve-all/package.json deleted file mode 100644 index f1d7c2b2af..0000000000 --- a/node_modules/micromark-util-resolve-all/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "micromark-util-resolve-all", - "version": "2.0.1", - "description": "micromark utility to resolve subtokens", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "resolve" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-resolve-all", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-resolve-all/readme.md b/node_modules/micromark-util-resolve-all/readme.md deleted file mode 100644 index 11eefd47ae..0000000000 --- a/node_modules/micromark-util-resolve-all/readme.md +++ /dev/null @@ -1,238 +0,0 @@ -# micromark-util-resolve-all - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to resolve subtokens. - -[Resolvers][resolver] are functions that take events and manipulate them. -This is needed for example because media (links, images) and attention (strong, -italic) aren’t parsed left-to-right. -Instead, their openings and closings are parsed, and when done, their openings -and closings are matched, and left overs are turned into plain text. -Because media and attention can’t overlap, we need to perform that operation -when one closing matches an opening, too. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`resolveAll(constructs, events, context)`](#resolveallconstructs-events-context) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes a micromark internal that you probably don’t need. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-resolve-all -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {resolveAll} from 'https://esm.sh/micromark-util-resolve-all@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {push} from 'micromark-util-chunked' -import {resolveAll} from 'micromark-util-resolve-all' - -/** - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - // … - - // Walk through all events. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - // … - ) { - // … - - // Opening. - nextEvents = push(nextEvents, [ - // … - ]) - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - // … - ]) - - // … - } - } - } - } - - // … -} -``` - -## API - -This module exports the identifier [`resolveAll`][api-resolve-all]. -There is no default export. - -### `resolveAll(constructs, events, context)` - -Call all `resolveAll`s in `constructs`. - -###### Parameters - -* `constructs` (`Array`) - — list of constructs, optionally with `resolveAll`s -* `events` (`Array`) - — list of events -* `context` (`TokenizeContext`) - — context used by `tokenize` - -###### Returns - -Changed events (`Array`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-resolve-all@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-resolve-all.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-resolve-all - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-resolve-all - -[bundle-size]: https://bundlejs.com/?q=micromark-util-resolve-all - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[resolver]: https://github.com/micromark/micromark/blob/a571c09/packages/micromark-util-types/index.js#L219 - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-resolve-all]: #resolveallconstructs-events-context diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts deleted file mode 100644 index a105f230e8..0000000000 --- a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map deleted file mode 100644 index cab9483524..0000000000 --- a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.js b/node_modules/micromark-util-sanitize-uri/dev/index.js deleted file mode 100644 index cc454b5e02..0000000000 --- a/node_modules/micromark-util-sanitize-uri/dev/index.js +++ /dev/null @@ -1,124 +0,0 @@ -import {asciiAlphanumeric} from 'micromark-util-character' -import {encode} from 'micromark-util-encode' -import {codes, values} from 'micromark-util-symbol' - -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url, protocol) { - const value = encode(normalizeUri(url || '')) - - if (!protocol) { - return value - } - - const colon = value.indexOf(':') - const questionMark = value.indexOf('?') - const numberSign = value.indexOf('#') - const slash = value.indexOf('/') - - if ( - // If there is no protocol, it’s relative. - colon < 0 || - // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. - (slash > -1 && colon > slash) || - (questionMark > -1 && colon > questionMark) || - (numberSign > -1 && colon > numberSign) || - // It is a protocol, it should be allowed. - protocol.test(value.slice(0, colon)) - ) { - return value - } - - return '' -} - -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value) { - /** @type {Array} */ - const result = [] - let index = -1 - let start = 0 - let skip = 0 - - while (++index < value.length) { - const code = value.charCodeAt(index) - /** @type {string} */ - let replace = '' - - // A correct percent encoded value. - if ( - code === codes.percentSign && - asciiAlphanumeric(value.charCodeAt(index + 1)) && - asciiAlphanumeric(value.charCodeAt(index + 2)) - ) { - skip = 2 - } - // ASCII. - else if (code < 128) { - if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { - replace = String.fromCharCode(code) - } - } - // Astral. - else if (code > 55_295 && code < 57_344) { - const next = value.charCodeAt(index + 1) - - // A correct surrogate pair. - if (code < 56_320 && next > 56_319 && next < 57_344) { - replace = String.fromCharCode(code, next) - skip = 1 - } - // Lone surrogate. - else { - replace = values.replacementCharacter - } - } - // Unicode. - else { - replace = String.fromCharCode(code) - } - - if (replace) { - result.push(value.slice(start, index), encodeURIComponent(replace)) - start = index + skip + 1 - replace = '' - } - - if (skip) { - index += skip - skip = 0 - } - } - - return result.join('') + value.slice(start) -} diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts b/node_modules/micromark-util-sanitize-uri/index.d.ts deleted file mode 100644 index a105f230e8..0000000000 --- a/node_modules/micromark-util-sanitize-uri/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/index.d.ts.map deleted file mode 100644 index cab9483524..0000000000 --- a/node_modules/micromark-util-sanitize-uri/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.js b/node_modules/micromark-util-sanitize-uri/index.js deleted file mode 100644 index fb6fe6fbb8..0000000000 --- a/node_modules/micromark-util-sanitize-uri/index.js +++ /dev/null @@ -1,107 +0,0 @@ -import { asciiAlphanumeric } from 'micromark-util-character'; -import { encode } from 'micromark-util-encode'; -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url, protocol) { - const value = encode(normalizeUri(url || '')); - if (!protocol) { - return value; - } - const colon = value.indexOf(':'); - const questionMark = value.indexOf('?'); - const numberSign = value.indexOf('#'); - const slash = value.indexOf('/'); - if ( - // If there is no protocol, it’s relative. - colon < 0 || - // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. - slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign || - // It is a protocol, it should be allowed. - protocol.test(value.slice(0, colon))) { - return value; - } - return ''; -} - -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value) { - /** @type {Array} */ - const result = []; - let index = -1; - let start = 0; - let skip = 0; - while (++index < value.length) { - const code = value.charCodeAt(index); - /** @type {string} */ - let replace = ''; - - // A correct percent encoded value. - if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) { - skip = 2; - } - // ASCII. - else if (code < 128) { - if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { - replace = String.fromCharCode(code); - } - } - // Astral. - else if (code > 55_295 && code < 57_344) { - const next = value.charCodeAt(index + 1); - - // A correct surrogate pair. - if (code < 56_320 && next > 56_319 && next < 57_344) { - replace = String.fromCharCode(code, next); - skip = 1; - } - // Lone surrogate. - else { - replace = "\uFFFD"; - } - } - // Unicode. - else { - replace = String.fromCharCode(code); - } - if (replace) { - result.push(value.slice(start, index), encodeURIComponent(replace)); - start = index + skip + 1; - replace = ''; - } - if (skip) { - index += skip; - skip = 0; - } - } - return result.join('') + value.slice(start); -} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/license b/node_modules/micromark-util-sanitize-uri/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-sanitize-uri/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-sanitize-uri/package.json b/node_modules/micromark-util-sanitize-uri/package.json deleted file mode 100644 index 068ecbc7a4..0000000000 --- a/node_modules/micromark-util-sanitize-uri/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "micromark-util-sanitize-uri", - "version": "2.0.1", - "description": "micromark utility to sanitize urls", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "sanitize", - "clear", - "url" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-sanitize-uri/readme.md b/node_modules/micromark-util-sanitize-uri/readme.md deleted file mode 100644 index 2d08fc51fb..0000000000 --- a/node_modules/micromark-util-sanitize-uri/readme.md +++ /dev/null @@ -1,214 +0,0 @@ -# micromark-util-sanitize-uri - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to sanitize urls. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`normalizeUri(value)`](#normalizeurivalue) - * [`sanitizeUri(url[, pattern])`](#sanitizeuriurl-pattern) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to make URLs safe. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-sanitize-uri -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {sanitizeUri} from 'https://esm.sh/micromark-util-sanitize-uri@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {sanitizeUri} from 'micromark-util-sanitize-uri' - -sanitizeUri('https://example.com/a&b') // 'https://example.com/a&amp;b' -sanitizeUri('https://example.com/a%b') // 'https://example.com/a%25b' -sanitizeUri('https://example.com/a%20b') // 'https://example.com/a%20b' -sanitizeUri('https://example.com/👍') // 'https://example.com/%F0%9F%91%8D' -sanitizeUri('https://example.com/', /^https?$/i) // 'https://example.com/' -sanitizeUri('javascript:alert(1)', /^https?$/i) // '' -sanitizeUri('./example.jpg', /^https?$/i) // './example.jpg' -sanitizeUri('#a', /^https?$/i) // '#a' -``` - -## API - -This module exports the identifiers [`normalizeUri`][api-normalize-uri] and -[`sanitizeUri`][api-sanitize-uri]. -There is no default export. - -### `normalizeUri(value)` - -Normalize a URL. - -Encode unsafe characters with percent-encoding, skipping already encoded -sequences. - -###### Parameters - -* `value` (`string`) - — URI to normalize - -###### Returns - -Normalized URI (`string`). - -### `sanitizeUri(url[, pattern])` - -Make a value safe for injection as a URL. - -This encodes unsafe characters with percent-encoding and skips already -encoded sequences (see [`normalizeUri`][api-normalize-uri]). -Further unsafe characters are encoded as character references (see -[`micromark-util-encode`][micromark-util-encode]). - -A regex of allowed protocols can be given, in which case the URL is sanitized. -For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or -`/^https?$/i` for `img[src]` (this is what `github.com` allows). -If the URL includes an unknown protocol (one not matched by `protocol`, such -as a dangerous example, `javascript:`), the value is ignored. - -###### Parameters - -* `url` (`string`) - — URI to sanitize -* `pattern` (`RegExp`, optional) - — allowed protocols - -###### Returns - -Sanitized URI (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-sanitize-uri@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-sanitize-uri.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-sanitize-uri - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-sanitize-uri - -[bundle-size]: https://bundlejs.com/?q=micromark-util-sanitize-uri - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[micromark-util-encode]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode - -[api-normalize-uri]: #normalizeurivalue - -[api-sanitize-uri]: #sanitizeuriurl-pattern diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts b/node_modules/micromark-util-subtokenize/dev/index.d.ts deleted file mode 100644 index b252238a88..0000000000 --- a/node_modules/micromark-util-subtokenize/dev/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -export function subtokenize(eventsArray: Array): boolean; -export { SpliceBuffer } from "./lib/splice-buffer.js"; -import type { Event } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts.map b/node_modules/micromark-util-subtokenize/dev/index.d.ts.map deleted file mode 100644 index 1738691d8e..0000000000 --- a/node_modules/micromark-util-subtokenize/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.js b/node_modules/micromark-util-subtokenize/dev/index.js deleted file mode 100644 index f506fd9a12..0000000000 --- a/node_modules/micromark-util-subtokenize/dev/index.js +++ /dev/null @@ -1,272 +0,0 @@ -/** - * @import {Chunk, Event, Token} from 'micromark-util-types' - */ - -import {ok as assert} from 'devlop' -import {splice} from 'micromark-util-chunked' -import {codes, types} from 'micromark-util-symbol' -import {SpliceBuffer} from './lib/splice-buffer.js' - -// Hidden API exposed for testing. -export {SpliceBuffer} from './lib/splice-buffer.js' - -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -// eslint-disable-next-line complexity -export function subtokenize(eventsArray) { - /** @type {Record} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array} */ - let parameters - /** @type {Array} */ - let subevents - /** @type {boolean | undefined} */ - let more - const events = new SpliceBuffer(eventsArray) - - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - - event = events.get(index) - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === types.chunkFlow && - events.get(index - 1)[1].type === types.listItemPrefix - ) { - assert(event[1]._tokenizer, 'expected `_tokenizer` on subtokens') - subevents = event[1]._tokenizer.events - otherIndex = 0 - - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === types.lineEndingBlank - ) { - otherIndex += 2 - } - - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === types.content - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === types.content) { - break - } - - if (subevents[otherIndex][1].type === types.chunkText) { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - - while (otherIndex--) { - otherEvent = events.get(otherIndex) - - if ( - otherEvent[1].type === types.lineEnding || - otherEvent[1].type === types.lineEndingBlank - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events.get(lineIndex)[1].type = types.lineEndingBlank - } - - otherEvent[1].type = types.lineEnding - lineIndex = otherIndex - } - } else if (otherEvent[1].type === types.linePrefix) { - // Move past. - } else { - break - } - } - - if (lineIndex) { - // Fix position. - event[1].end = {...events.get(lineIndex)[1].start} - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - events.splice(lineIndex, index - lineIndex + 1, parameters) - } - } - } - - // The changes to the `events` buffer must be copied back into the eventsArray - splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)) - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {SpliceBuffer} events - * Events. - * @param {number} eventIndex - * Index. - * @returns {Record} - * Gaps. - */ -function subcontent(events, eventIndex) { - const token = events.get(eventIndex)[1] - const context = events.get(eventIndex)[2] - let startPosition = eventIndex - 1 - /** @type {Array} */ - const startPositions = [] - assert(token.contentType, 'expected `contentType` on subtokens') - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record} */ - const gaps = {} - /** @type {Array} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events.get(++startPosition)[1] !== current) { - // Empty. - } - - assert( - !previous || current.previous === previous, - 'expected previous to match' - ) - assert(!previous || previous.next === current, 'expected next to match') - - startPositions.push(startPosition) - - if (!current._tokenizer) { - stream = context.sliceStream(current) - - if (!current.next) { - stream.push(codes.eof) - } - - if (previous) { - tokenizer.defineSkip(current.start) - } - - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - - tokenizer.write(stream) - - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - assert(current, 'expected a current token') - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - assert(!current.next, 'expected no next token') - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - assert(start !== undefined, 'expected a start position when splicing') - jumps.push([start, start + slice.length - 1]) - events.splice(start, 2, slice) - } - - jumps.reverse() - index = -1 - - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - - return gaps -} diff --git a/node_modules/micromark-util-subtokenize/index.d.ts b/node_modules/micromark-util-subtokenize/index.d.ts deleted file mode 100644 index b252238a88..0000000000 --- a/node_modules/micromark-util-subtokenize/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -export function subtokenize(eventsArray: Array): boolean; -export { SpliceBuffer } from "./lib/splice-buffer.js"; -import type { Event } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.d.ts.map b/node_modules/micromark-util-subtokenize/index.d.ts.map deleted file mode 100644 index 1738691d8e..0000000000 --- a/node_modules/micromark-util-subtokenize/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.js b/node_modules/micromark-util-subtokenize/index.js deleted file mode 100644 index de77c382c2..0000000000 --- a/node_modules/micromark-util-subtokenize/index.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * @import {Chunk, Event, Token} from 'micromark-util-types' - */ - -import { splice } from 'micromark-util-chunked'; -import { SpliceBuffer } from './lib/splice-buffer.js'; - -// Hidden API exposed for testing. -export { SpliceBuffer } from './lib/splice-buffer.js'; - -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -// eslint-disable-next-line complexity -export function subtokenize(eventsArray) { - /** @type {Record} */ - const jumps = {}; - let index = -1; - /** @type {Event} */ - let event; - /** @type {number | undefined} */ - let lineIndex; - /** @type {number} */ - let otherIndex; - /** @type {Event} */ - let otherEvent; - /** @type {Array} */ - let parameters; - /** @type {Array} */ - let subevents; - /** @type {boolean | undefined} */ - let more; - const events = new SpliceBuffer(eventsArray); - while (++index < events.length) { - while (index in jumps) { - index = jumps[index]; - } - event = events.get(index); - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if (index && event[1].type === "chunkFlow" && events.get(index - 1)[1].type === "listItemPrefix") { - subevents = event[1]._tokenizer.events; - otherIndex = 0; - if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { - otherIndex += 2; - } - if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === "content") { - break; - } - if (subevents[otherIndex][1].type === "chunkText") { - subevents[otherIndex][1]._isInFirstContentOfListItem = true; - otherIndex++; - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)); - index = jumps[index]; - more = true; - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index; - lineIndex = undefined; - while (otherIndex--) { - otherEvent = events.get(otherIndex); - if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events.get(lineIndex)[1].type = "lineEndingBlank"; - } - otherEvent[1].type = "lineEnding"; - lineIndex = otherIndex; - } - } else if (otherEvent[1].type === "linePrefix") { - // Move past. - } else { - break; - } - } - if (lineIndex) { - // Fix position. - event[1].end = { - ...events.get(lineIndex)[1].start - }; - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index); - parameters.unshift(event); - events.splice(lineIndex, index - lineIndex + 1, parameters); - } - } - } - - // The changes to the `events` buffer must be copied back into the eventsArray - splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)); - return !more; -} - -/** - * Tokenize embedded tokens. - * - * @param {SpliceBuffer} events - * Events. - * @param {number} eventIndex - * Index. - * @returns {Record} - * Gaps. - */ -function subcontent(events, eventIndex) { - const token = events.get(eventIndex)[1]; - const context = events.get(eventIndex)[2]; - let startPosition = eventIndex - 1; - /** @type {Array} */ - const startPositions = []; - const tokenizer = token._tokenizer || context.parser[token.contentType](token.start); - const childEvents = tokenizer.events; - /** @type {Array<[number, number]>} */ - const jumps = []; - /** @type {Record} */ - const gaps = {}; - /** @type {Array} */ - let stream; - /** @type {Token | undefined} */ - let previous; - let index = -1; - /** @type {Token | undefined} */ - let current = token; - let adjust = 0; - let start = 0; - const breaks = [start]; - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events.get(++startPosition)[1] !== current) { - // Empty. - } - startPositions.push(startPosition); - if (!current._tokenizer) { - stream = context.sliceStream(current); - if (!current.next) { - stream.push(null); - } - if (previous) { - tokenizer.defineSkip(current.start); - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true; - } - tokenizer.write(stream); - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined; - } - } - - // Unravel the next token. - previous = current; - current = current.next; - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token; - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) { - start = index + 1; - breaks.push(start); - // Help GC. - current._tokenizer = undefined; - current.previous = undefined; - current = current.next; - } - } - - // Help GC. - tokenizer.events = []; - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined; - current.previous = undefined; - } else { - breaks.pop(); - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length; - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]); - const start = startPositions.pop(); - jumps.push([start, start + slice.length - 1]); - events.splice(start, 2, slice); - } - jumps.reverse(); - index = -1; - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; - adjust += jumps[index][1] - jumps[index][0] - 1; - } - return gaps; -} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/license b/node_modules/micromark-util-subtokenize/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-subtokenize/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-subtokenize/package.json b/node_modules/micromark-util-subtokenize/package.json deleted file mode 100644 index f68102cc5a..0000000000 --- a/node_modules/micromark-util-subtokenize/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "micromark-util-subtokenize", - "version": "2.0.4", - "description": "micromark utility to tokenize subtokens", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "tokenize" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-subtokenize", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "max-depth": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-subtokenize/readme.md b/node_modules/micromark-util-subtokenize/readme.md deleted file mode 100644 index 388e423542..0000000000 --- a/node_modules/micromark-util-subtokenize/readme.md +++ /dev/null @@ -1,181 +0,0 @@ -# micromark-util-subtokenize - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to tokenize subtokens. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`subtokenize(events)`](#subtokenizeevents) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes a micromark internal that you probably don’t need. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-subtokenize -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {subtokenize} from 'https://esm.sh/micromark-util-subtokenize@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {subtokenize} from 'micromark-util-subtokenize' - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} -``` - -## API - -This module exports the identifiers [`subtokenize`][api-subtokenize]. -There is no default export. - -### `subtokenize(events)` - -Tokenize subcontent. - -###### Parameters - -* `events` (`Array`) - — list of events - -###### Returns - -Whether subtokens were found (`boolean`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-subtokenize@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-subtokenize.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-subtokenize - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-subtokenize - -[bundle-size]: https://bundlejs.com/?q=micromark-util-subtokenize - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-subtokenize]: #subtokenizeevents diff --git a/node_modules/micromark-util-symbol/license b/node_modules/micromark-util-symbol/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-symbol/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-symbol/package.json b/node_modules/micromark-util-symbol/package.json deleted file mode 100644 index b557140a60..0000000000 --- a/node_modules/micromark-util-symbol/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "micromark-util-symbol", - "version": "2.0.1", - "description": "micromark utility with symbols", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "symbol" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-symbol", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "lib/" - ], - "exports": "./lib/default.js", - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-symbol/readme.md b/node_modules/micromark-util-symbol/readme.md deleted file mode 100644 index 4bad177259..0000000000 --- a/node_modules/micromark-util-symbol/readme.md +++ /dev/null @@ -1,168 +0,0 @@ -# micromark-util-symbol - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility with symbols. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes constants used throughout the micromark ecosystem. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. -It’s useful to reference these constants by name instead of value while -developing. -[`micromark-build`][micromark-build] compiles them away for production code. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-symbol -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import * as symbol from 'https://esm.sh/micromark-util-symbol@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {codes, constants, types, values} from 'micromark-util-symbol' - -console.log(codes.atSign) // 64 -console.log(constants.characterReferenceNamedSizeMax) // 31 -console.log(types.definitionDestinationRaw) // 'definitionDestinationRaw' -console.log(values.atSign) // '@' -``` - -## API - -This package exports the identifiers `codes`, `constants`, `types`, and -`values`. -There is no default export. - -Each identifier is an object mapping strings to values. -See the code for the exposed data. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-symbol@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-symbol.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-symbol - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-symbol - -[bundle-size]: https://bundlejs.com/?q=micromark-util-symbol - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[micromark-build]: https://github.com/micromark/micromark/tree/main/packages/micromark-build diff --git a/node_modules/micromark-util-types/index.d.ts b/node_modules/micromark-util-types/index.d.ts deleted file mode 100644 index 3da4c708ee..0000000000 --- a/node_modules/micromark-util-types/index.d.ts +++ /dev/null @@ -1,1294 +0,0 @@ -// Note: this file is authored manually, not generated from `index.js`. - -/** - * A character code. - * - * This is often the same as what `String#charCodeAt()` yields but micromark - * adds meaning to certain other values. - * - * `null` represents the end of the input stream (called eof). - * Negative integers are used instead of certain sequences of characters (such - * as line endings and tabs). - */ -export type Code = number | null - -/** - * A chunk is either a character code or a slice of a buffer in the form of a - * string. - * - * Chunks are used because strings are more efficient storage that character - * codes, but limited in what they can represent. - */ -export type Chunk = Code | string - -/** - * Enumeration of the content types. - * - * Technically `document` is also a content type, which includes containers - * (lists, block quotes) and flow. - * As `ContentType` is used on tokens to define the type of subcontent but - * `document` is the highest level of content, so it’s not listed here. - * - * Containers in markdown come from the margin and include more constructs - * on the lines that define them. - * Take for example a block quote with a paragraph inside it (such as - * `> asd`). - * - * `flow` represents the sections, such as headings, code, and content, which - * is also parsed per line - * An example is HTML, which has a certain starting condition (such as - * ` -``` - -## Use - - - -Typical use (buffering): - -```js -import {micromark} from 'micromark' - -console.log(micromark('## Hello, *world*!')) -``` - -Yields: - -```html -

          Hello, world!

          -``` - -You can pass extensions (in this case [`micromark-extension-gfm`][gfm]): - -```js -import {micromark} from 'micromark' -import {gfmHtml, gfm} from 'micromark-extension-gfm' - -const value = '* [x] contact@example.com ~~strikethrough~~' - -const result = micromark(value, { - extensions: [gfm()], - htmlExtensions: [gfmHtml()] -}) - -console.log(result) -``` - -Yields: - -```html -
          -``` - -Streaming interface: - -```js -import {createReadStream} from 'node:fs' -import {stream} from 'micromark/stream' - -createReadStream('example.md') - .on('error', handleError) - .pipe(stream()) - .pipe(process.stdout) - -function handleError(error) { - // Handle your error here! - throw error -} -``` - -## API - -`micromark` core has two entries in its export map: `micromark` and -`micromark/stream`. - -`micromark` exports the identifier [`micromark`][api-micromark]. -`micromark/stream` exports the identifier [`stream`][api-stream]. -There are no default exports. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. -See [§ Size & debug][size-debug] for more info. - -### `micromark(value[, encoding][, options])` - -Compile markdown to HTML. - -> Note: which encodings are supported depends on the engine. -> For info on Node.js, see *[WHATWG supported encodings][encoding]*. - -###### Parameters - -* `value` (`string` or [`Uint8Array`][uint8-array]) - — markdown to parse -* `encoding` (`string`, default: `'utf8'`) - — [character encoding][encoding] to understand `value` as when it’s a - [`Uint8Array`][uint8-array] -* `options` ([`Options`][api-options], optional) - — configuration - -###### Returns - -Compiled HTML (`string`). - -### `stream(options?)` - -Create a duplex (readable and writable) stream. - -Some of the work to parse markdown can be done streaming, but in the -end buffering is required. - -micromark does not handle errors for you, so you must handle errors on whatever -streams you pipe into it. -As markdown does not know errors, `micromark` itself does not emit errors. - -###### Parameters - -* `options` ([`Options`][api-options], optional) - — configuration - -###### Returns - -Duplex stream. - -### `Options` - -Configuration (TypeScript type). - -##### Fields - -###### `allowDangerousHtml` - -Whether to allow (dangerous) HTML (`boolean`, default: `false`). - -The default is `false`, which still parses the HTML according to `CommonMark` -but shows the HTML as text instead of as elements. - -Pass `true` for trusted content to get actual HTML elements. -See [§ Security][security]. - -###### `allowDangerousProtocol` - -Whether to allow dangerous protocols in links and images (`boolean`, default: -`false`). - -The default is `false`, which drops URLs in links and images that use dangerous -protocols. - -Pass `true` for trusted content to support all protocols. - -URLs that have no protocol (which means it’s relative to the current page, such -as `./some/page.html`) and URLs that have a safe protocol (for images: `http`, -`https`; for links: `http`, `https`, `irc`, `ircs`, `mailto`, `xmpp`), are -safe. -All other URLs are dangerous and dropped. -See [§ Security][security]. - -###### `defaultLineEnding` - -Default line ending to use when compiling to HTML, for line endings not in -`value` (`'\r'`, `'\n'`, or `'\r\n'`; default: first line ending or `'\n'`). - -Generally, `micromark` copies line endings (`\r`, `\n`, `\r\n`) in the markdown -document over to the compiled HTML. -In some cases, such as `> a`, CommonMark requires that extra line endings are -added: `
          \n

          a

          \n
          `. - -To create that line ending, the document is checked for the first line ending -that is used. -If there is no line ending, `defaultLineEnding` is used. -If that isn’t configured, `\n` is used. - -###### `extensions` - -Array of syntax extensions (`Array`, default: `[]`). -See [§ Extensions][extensions]. - -###### `htmlExtensions` - -Array of syntax extensions (`Array`, default: `[]`). -See [§ Extensions][extensions]. - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional type [`Options`][api-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, `micromark@4`, compatible -with Node.js 16. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## Sponsor - - - -Support this effort and give back by sponsoring on [OpenCollective][]! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          -
          - Salesforce 🏅

          - -
          - Vercel

          - -
          - Motif

          - -
          - HashiCorp

          - -
          - GitBook

          - -
          - Gatsby

          - -
          - Netlify

          - - -
          - Coinbase

          - -
          - ThemeIsle

          - -
          - Expo

          - -
          - Boost Note

          - -
          - Markdown Space

          - -
          - Holloway

          - -
          -
          - You? -

          -
          - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark.svg - -[downloads]: https://www.npmjs.com/package/micromark - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark - -[bundle-size]: https://bundlejs.com/?q=micromark - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[cheat]: https://commonmark.org/help/ - -[twitter]: https://twitter.com/unifiedjs - -[site]: https://unifiedjs.com - -[contribute]: #contribute - -[uint8-array]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array - -[encoding]: https://nodejs.org/api/util.html#whatwg-supported-encodings - -[commonmark]: https://commonmark.org - -[directives]: https://github.com/micromark/micromark-extension-directive - -[frontmatter]: https://github.com/micromark/micromark-extension-frontmatter - -[gfm]: https://github.com/micromark/micromark-extension-gfm - -[math]: https://github.com/micromark/micromark-extension-math - -[mdxjs]: https://github.com/micromark/micromark-extension-mdxjs - -[security]: #security - -[sponsor]: #sponsor - -[micromark]: https://github.com/micromark/micromark - -[extensions]: https://github.com/micromark/micromark#extensions - -[test]: https://github.com/micromark/micromark#test - -[size-debug]: https://github.com/micromark/micromark#size--debug - -[comparison]: https://github.com/micromark/micromark#comparison - -[markdown-rs]: https://github.com/wooorm/markdown-rs - -[mdast-util-to-markdown]: https://github.com/syntax-tree/mdast-util-to-markdown - -[api-micromark]: #micromarkvalue-encoding-options - -[api-stream]: #streamoptions - -[api-options]: #options diff --git a/node_modules/micromark/stream.d.ts b/node_modules/micromark/stream.d.ts deleted file mode 100644 index 2b05447e81..0000000000 --- a/node_modules/micromark/stream.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Create a duplex (readable and writable) stream. - * - * Some of the work to parse markdown can be done streaming, but in the - * end buffering is required. - * - * micromark does not handle errors for you, so you must handle errors on whatever - * streams you pipe into it. - * As markdown does not know errors, `micromark` itself does not emit errors. - * - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {MinimalDuplex} - * Duplex stream. - */ -export function stream(options?: Options | null | undefined): MinimalDuplex; -export type Options = import("micromark-util-types").Options; -/** - * Function called when write was successful. - */ -export type Callback = () => undefined; -/** - * Configuration for piping. - */ -export type PipeOptions = { - /** - * Whether to end the destination stream when the source stream ends. - */ - end?: boolean | null | undefined; -}; -/** - * Duplex stream. - */ -export type MinimalDuplex = Omit; -//# sourceMappingURL=stream.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark/stream.d.ts.map b/node_modules/micromark/stream.d.ts.map deleted file mode 100644 index f89c748fa5..0000000000 --- a/node_modules/micromark/stream.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["stream.js"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;GAcG;AACH,iCALW,OAAO,GAAG,IAAI,GAAG,SAAS,GAExB,aAAa,CAoOzB;sBAxQY,OAAO,sBAAsB,EAAE,OAAO;;;;6BAMtC,SAAS;;;;;;;;UAKR,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;4BAG3B,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/micromark/stream.js b/node_modules/micromark/stream.js deleted file mode 100644 index 7561620013..0000000000 --- a/node_modules/micromark/stream.js +++ /dev/null @@ -1,256 +0,0 @@ -/** - * @import {Encoding, Value} from 'micromark-util-types' - */ - -/** - * @typedef {import('micromark-util-types').Options} Options - */ - -/** - * @callback Callback - * Function called when write was successful. - * @returns {undefined} - * Nothing. - * - * @typedef PipeOptions - * Configuration for piping. - * @property {boolean | null | undefined} [end] - * Whether to end the destination stream when the source stream ends. - * - * @typedef {Omit} MinimalDuplex - * Duplex stream. - */ - -import { EventEmitter } from 'node:events'; -import { compile } from './lib/compile.js'; -import { parse } from './lib/parse.js'; -import { postprocess } from './lib/postprocess.js'; -import { preprocess } from './lib/preprocess.js'; - -/** - * Create a duplex (readable and writable) stream. - * - * Some of the work to parse markdown can be done streaming, but in the - * end buffering is required. - * - * micromark does not handle errors for you, so you must handle errors on whatever - * streams you pipe into it. - * As markdown does not know errors, `micromark` itself does not emit errors. - * - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {MinimalDuplex} - * Duplex stream. - */ -export function stream(options) { - const prep = preprocess(); - const tokenize = parse(options).document().write; - const comp = compile(options); - /** @type {boolean} */ - let ended; - const emitter = /** @type {MinimalDuplex} */new EventEmitter(); - // @ts-expect-error: fine. - emitter.end = end; - emitter.pipe = pipe; - emitter.readable = true; - emitter.writable = true; - // @ts-expect-error: fine. - emitter.write = write; - return emitter; - - /** - * Write a chunk into memory. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - */ - function write(chunk, encoding, callback) { - if (typeof encoding === 'function') { - callback = encoding; - encoding = undefined; - } - if (ended) { - throw new Error('Did not expect `write` after `end`'); - } - tokenize(prep(chunk || '', encoding)); - if (callback) { - callback(); - } - - // Signal successful write. - return true; - } - - /** - * End the writing. - * - * Passes all arguments as a final `write`. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @overload - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @param {Callback | Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - */ - function end(chunk, encoding, callback) { - if (typeof chunk === 'function') { - encoding = chunk; - chunk = undefined; - } - if (typeof encoding === 'function') { - callback = encoding; - encoding = undefined; - } - write(chunk, encoding, callback); - emitter.emit('data', comp(postprocess(tokenize(prep('', encoding, true))))); - emitter.emit('end'); - ended = true; - return true; - } - - /** - * Pipe the processor into a writable stream. - * - * Basically `Stream#pipe`, but inlined and simplified to keep the bundled - * size down. - * See: . - * - * @template {NodeJS.WritableStream} Stream - * Writable stream. - * @param {Stream} destination - * Stream to pipe into. - * @param {PipeOptions | null | undefined} [options] - * Configuration. - * @returns {Stream} - * Destination stream. - */ - function pipe(destination, options) { - emitter.on('data', ondata); - emitter.on('error', onerror); - emitter.on('end', cleanup); - emitter.on('close', cleanup); - - // If the `end` option is not supplied, `destination.end()` will be - // called when the `end` or `close` events are received. - // @ts-expect-error `_isStdio` is available on `std{err,out}` - if (!destination._isStdio && (!options || options.end !== false)) { - emitter.on('end', onend); - } - destination.on('error', onerror); - destination.on('close', cleanup); - destination.emit('pipe', emitter); - return destination; - - /** - * End destination stream. - * - * @returns {undefined} - * Nothing. - */ - function onend() { - if (destination.end) { - destination.end(); - } - } - - /** - * Handle data. - * - * @param {string} chunk - * Data. - * @returns {undefined} - * Nothing. - */ - function ondata(chunk) { - if (destination.writable) { - destination.write(chunk); - } - } - - /** - * Clean listeners. - * - * @returns {undefined} - * Nothing. - */ - function cleanup() { - emitter.removeListener('data', ondata); - emitter.removeListener('end', onend); - emitter.removeListener('error', onerror); - emitter.removeListener('end', cleanup); - emitter.removeListener('close', cleanup); - destination.removeListener('error', onerror); - destination.removeListener('close', cleanup); - } - - /** - * Close dangling pipes and handle unheard errors. - * - * @param {Error | null | undefined} [error] - * Error, if any. - * @returns {undefined} - * Nothing. - */ - function onerror(error) { - cleanup(); - if (!emitter.listenerCount('error')) { - throw error; // Unhandled stream error in pipe. - } - } - } -} \ No newline at end of file diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE deleted file mode 100644 index 1493534e60..0000000000 --- a/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md deleted file mode 100644 index 3c97a02fbe..0000000000 --- a/node_modules/minimatch/README.md +++ /dev/null @@ -1,454 +0,0 @@ -# minimatch - -A minimal matching utility. - -This is the matching library used internally by npm. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```js -// hybrid module, load with require() or import -import { minimatch } from 'minimatch' -// or: -const { minimatch } = require('minimatch') - -minimatch('bar.foo', '*.foo') // true! -minimatch('bar.foo', '*.bar') // false! -minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -- Brace Expansion -- Extended glob matching -- "Globstar" `**` matching -- [Posix character - classes](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html), - like `[[:alpha:]]`, supporting the full range of Unicode - characters. For example, `[[:alpha:]]` will match against - `'é'`, though `[a-zA-Z]` will not. Collating symbol and set - matching is not supported, so `[[=e=]]` will _not_ match `'é'` - and `[[.ch.]]` will not match `'ch'` in locales where `ch` is - considered a single character. - -See: - -- `man sh` -- `man bash` [Pattern - Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) -- `man 3 fnmatch` -- `man 5 gitignore` - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes in patterns -will always be interpreted as escape characters, not path separators. - -Note that `\` or `/` _will_ be interpreted as path separators in paths on -Windows, and will match against `/` in glob expressions. - -So just always use `/` in patterns. - -### UNC Paths - -On Windows, UNC paths like `//?/c:/...` or -`//ComputerName/Share/...` are handled specially. - -- Patterns starting with a double-slash followed by some - non-slash characters will preserve their double-slash. As a - result, a pattern like `//*` will match `//x`, but not `/x`. -- Patterns staring with `//?/:` will _not_ treat - the `?` as a wildcard character. Instead, it will be treated - as a normal string. -- Patterns starting with `//?/:/...` will match - file paths starting with `:/...`, and vice versa, - as if the `//?/` was not present. This behavior only is - present when the drive letters are a case-insensitive match to - one another. The remaining portions of the path/pattern are - compared case sensitively, unless `nocase:true` is set. - -Note that specifying a UNC path using `\` characters as path -separators is always allowed in the file path argument, but only -allowed in the pattern argument when `windowsPathsNoEscape: true` -is set in the options. - -## Minimatch Class - -Create a minimatch object by instantiating the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require('minimatch').Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -- `pattern` The original pattern the minimatch object represents. -- `options` The options supplied to the constructor. -- `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -- `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -- `negate` True if the pattern is negated. -- `comment` True if the pattern is a comment. -- `empty` True if the pattern is `""`. - -### Methods - -- `makeRe()` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -- `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -- `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. -- `hasMagic()` Returns true if the parsed pattern contains any - magic characters. Returns false if all comparator parts are - string literals. If the `magicalBraces` option is set on the - constructor, then it will consider brace expansions which are - not otherwise magical to be magic. If not set, then a pattern - like `a{b,c}d` will return `false`, because neither `abd` nor - `acd` contain any special glob characters. - - This does **not** mean that the pattern string can be used as a - literal filename, as it may contain magic glob characters that - are escaped. For example, the pattern `\\*` or `[*]` would not - be considered to have magic, as the matching portion parses to - the literal string `'*'` and would match a path named `'*'`, - not `'\\*'` or `'[*]'`. The `minimatch.unescape()` method may - be used to remove escape characters. - -All other methods are internal, and will be called as necessary. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, '*.js', { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true })) -``` - -### minimatch.escape(pattern, options = {}) - -Escape all magic characters in a glob pattern, so that it will -only ever match literal strings - -If the `windowsPathsNoEscape` option is used, then characters are -escaped by wrapping in `[]`, because a magic character wrapped in -a character class can only be satisfied by that exact character. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -### minimatch.unescape(pattern, options = {}) - -Un-escape a glob string that may contain some escaped characters. - -If the `windowsPathsNoEscape` option is used, then square-brace -escapes are removed, but not backslash escapes. For example, it -will turn the string `'[*]'` into `*`, but it will not turn -`'\\*'` into `'*'`, because `\` is a path separator in -`windowsPathsNoEscape` mode. - -When `windowsPathsNoEscape` is not set, then both brace escapes -and backslash escapes are removed. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, '*.js', { matchBase: true }) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nocaseMagicOnly - -When used with `{nocase: true}`, create regular expressions that -are case-insensitive, but leave string match portions untouched. -Has no effect when used without `{nocase: true}` - -Useful when some other form of case-insensitive matching is used, -or if the original string representation is useful in some other -way. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself if this option is set. When not set, an empty list -is returned if there are no matches. - -### magicalBraces - -This only affects the results of the `Minimatch.hasMagic` method. - -If the pattern contains brace expansions, such as `a{b,c}d`, but -no other magic characters, then the `Minimatch.hasMagic()` method -will return `false` by default. When this option set, it will -return `true` for brace expansion as well as other magic glob -characters. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - -### partial - -Compare a partial path to a pattern. As long as the parts of the path that -are present are not contradicted by the pattern, it will be treated as a -match. This is useful in applications where you're walking through a -folder structure, and don't yet have the full path, but want to ensure that -you do not walk down paths that can never be a match. - -For example, - -```js -minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d -minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d -minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a -``` - -### windowsPathsNoEscape - -Use `\\` as a path separator _only_, and _never_ as an escape -character. If set, all `\\` characters are replaced with `/` in -the pattern. Note that this makes it **impossible** to match -against paths containing literal glob pattern characters, but -allows matching with patterns constructed using `path.join()` and -`path.resolve()` on Windows platforms, mimicking the (buggy!) -behavior of earlier versions on Windows. Please use with -caution, and be mindful of [the caveat about Windows -paths](#windows). - -For legacy reasons, this is also set if -`options.allowWindowsEscape` is set to the exact value `false`. - -### windowsNoMagicRoot - -When a pattern starts with a UNC path or drive letter, and in -`nocase:true` mode, do not convert the root portions of the -pattern into a case-insensitive regular expression, and instead -leave them as strings. - -This is the default when the platform is `win32` and -`nocase:true` is set. - -### preserveMultipleSlashes - -By default, multiple `/` characters (other than the leading `//` -in a UNC path, see "UNC Paths" above) are treated as a single -`/`. - -That is, a pattern like `a///b` will match the file path `a/b`. - -Set `preserveMultipleSlashes: true` to suppress this behavior. - -### optimizationLevel - -A number indicating the level of optimization that should be done -to the pattern prior to parsing and using it for matches. - -Globstar parts `**` are always converted to `*` when `noglobstar` -is set, and multiple adjacent `**` parts are converted into a -single `**` (ie, `a/**/**/b` will be treated as `a/**/b`, as this -is equivalent in all cases). - -- `0` - Make no further changes. In this mode, `.` and `..` are - maintained in the pattern, meaning that they must also appear - in the same position in the test path string. Eg, a pattern - like `a/*/../c` will match the string `a/b/../c` but not the - string `a/c`. -- `1` - (default) Remove cases where a double-dot `..` follows a - pattern portion that is not `**`, `.`, `..`, or empty `''`. For - example, the pattern `./a/b/../*` is converted to `./a/*`, and - so it will match the path string `./a/c`, but not the path - string `./a/b/../c`. Dots and empty path portions in the - pattern are preserved. -- `2` (or higher) - Much more aggressive optimizations, suitable - for use with file-walking cases: - - - Remove cases where a double-dot `..` follows a pattern - portion that is not `**`, `.`, or empty `''`. Remove empty - and `.` portions of the pattern, where safe to do so (ie, - anywhere other than the last position, the first position, or - the second position in a pattern starting with `/`, as this - may indicate a UNC path on Windows). - - Convert patterns containing `
          /**/../

          /` into the - equivalent `

          /{..,**}/

          /`, where `

          ` is a - a pattern portion other than `.`, `..`, `**`, or empty - `''`. - - Dedupe patterns where a `**` portion is present in one and - omitted in another, and it is not the final path portion, and - they are otherwise equivalent. So `{a/**/b,a/b}` becomes - `a/**/b`, because `**` matches against an empty path portion. - - Dedupe patterns where a `*` portion is present in one, and a - non-dot pattern other than `**`, `.`, `..`, or `''` is in the - same position in the other. So `a/{*,x}/b` becomes `a/*/b`, - because `*` can match against `x`. - - While these optimizations improve the performance of - file-walking use cases such as [glob](http://npm.im/glob) (ie, - the reason this module exists), there are cases where it will - fail to match a literal string that would have been matched in - optimization level 1 or 0. - - Specifically, while the `Minimatch.match()` method will - optimize the file path string in the same ways, resulting in - the same matches, it will fail when tested with the regular - expression provided by `Minimatch.makeRe()`, unless the path - string is first processed with - `minimatch.levelTwoFileOptimize()` or similar. - -### platform - -When set to `win32`, this will trigger all windows-specific -behaviors (special handling for UNC paths, and treating `\` as -separators in file paths for comparison.) - -Defaults to the value of `process.platform`. - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a -worthwhile goal, some discrepancies exist between minimatch and -other implementations. Some are intentional, and some are -unavoidable. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -Negated extglob patterns are handled as closely as possible to -Bash semantics, but there are some cases with negative extglobs -which are exceedingly difficult to express in a JavaScript -regular expression. In particular the negated pattern -`!(*|)*` will in bash match anything that does -not start with ``. However, -`!(*)*` _will_ match paths starting with -``, because the empty string can match against -the negated portion. In this library, `!(*|)*` -will _not_ match any pattern starting with ``, due to a -difference in precisely which patterns are considered "greedy" in -Regular Expressions vs bash path expansion. This may be fixable, -but not without incurring some complexity and performance costs, -and the trade-off seems to not be worth pursuing. - -Note that `fnmatch(3)` in libc is an extremely naive string comparison -matcher, which does not do anything special for slashes. This library is -designed to be used in glob searching and file walkers, and so it does do -special things with `/`. Thus, `foo*` will not match `foo/bar` in this -library, even though it would in `fnmatch(3)`. diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json deleted file mode 100644 index 01fc48ecfd..0000000000 --- a/node_modules/minimatch/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "9.0.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --loglevel warn", - "benchmark": "node benchmark/index.js", - "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" - }, - "prettier": { - "semi": false, - "printWidth": 80, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "devDependencies": { - "@types/brace-expansion": "^1.1.0", - "@types/node": "^18.15.11", - "@types/tap": "^15.0.8", - "eslint-config-prettier": "^8.6.0", - "mkdirp": "1", - "prettier": "^2.8.2", - "tap": "^18.7.2", - "ts-node": "^10.9.1", - "tshy": "^1.12.0", - "typedoc": "^0.23.21", - "typescript": "^4.9.3" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "license": "ISC", - "tshy": { - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "type": "module" -} diff --git a/node_modules/minimist/.eslintrc b/node_modules/minimist/.eslintrc deleted file mode 100644 index bd1a5e046b..0000000000 --- a/node_modules/minimist/.eslintrc +++ /dev/null @@ -1,29 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb/eslint-config/node/0.4", - - "rules": { - "array-element-newline": 0, - "complexity": 0, - "func-style": [2, "declaration"], - "max-lines-per-function": 0, - "max-nested-callbacks": 1, - "max-statements-per-line": 1, - "max-statements": 0, - "multiline-comment-style": 0, - "no-continue": 1, - "no-param-reassign": 1, - "no-restricted-syntax": 1, - "object-curly-newline": 0, - }, - - "overrides": [ - { - "files": "test/**", - "rules": { - "camelcase": 0, - }, - }, - ] -} diff --git a/node_modules/minimist/.github/FUNDING.yml b/node_modules/minimist/.github/FUNDING.yml deleted file mode 100644 index a9366222e9..0000000000 --- a/node_modules/minimist/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/minimist -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/minimist/.nycrc b/node_modules/minimist/.nycrc deleted file mode 100644 index 55c3d29367..0000000000 --- a/node_modules/minimist/.nycrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "example", - "test" - ] -} diff --git a/node_modules/minimist/CHANGELOG.md b/node_modules/minimist/CHANGELOG.md deleted file mode 100644 index c9a1e15e6c..0000000000 --- a/node_modules/minimist/CHANGELOG.md +++ /dev/null @@ -1,298 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 - -### Merged - -- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) -- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) -- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) - -### Fixed - -- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) -- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) -- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) -- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) -- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) -- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) -- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) - -### Commits - -- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) -- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) -- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) -- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) -- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) -- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) -- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) -- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) -- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) -- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) -- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) -- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) -- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) -- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) -- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) -- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) -- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) -- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) -- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) -- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) -- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) -- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) -- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) -- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) -- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) - -## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 - -### Commits - -- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) -- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) -- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) -- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) -- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) -- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) -- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) -- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) -- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) -- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) -- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) -- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) - -## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 - -### Commits - -- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) -- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) -- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) - -## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 - -## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 - -### Commits - -- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) -- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) - -## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 - -### Commits - -- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) -- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) - -## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 - -### Commits - -- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) -- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) -- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) -- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) - -## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 - -### Merged - -- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) - -### Commits - -- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) -- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) - -## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 - -### Commits - -- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) -- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) -- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) -- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) -- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) - -## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 - -### Commits - -- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) -- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) - -## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 - -### Commits - -- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) -- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) -- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) - -## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 - -### Commits - -- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) -- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) -- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) -- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) - -## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 - -### Commits - -- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) -- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) -- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) -- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) - -## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 - -### Commits - -- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) -- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) - -## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 - -### Merged - -- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) -- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) -- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) - -### Fixed - -- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) -- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) -- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) - -### Commits - -- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) -- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) -- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) -- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) -- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) -- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) - -## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 - -### Commits - -- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) -- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) -- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) -- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) -- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) -- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) -- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) -- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) -- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) -- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) -- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) -- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) - -## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 - -## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 - -### Commits - -- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) - -## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 - -### Commits - -- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) -- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) -- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) - -## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 - -### Commits - -- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) -- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) -- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) -- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) -- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) - -## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 - -### Commits - -- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) - -## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 - -### Commits - -- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) -- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) - -## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 - -### Commits - -- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) - -## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 - -### Commits - -- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) - -## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 - -### Commits - -- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) - -## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 - -## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 - -### Commits - -- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) -- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) - -## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 - -### Commits - -- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) -- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) - -## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 - -### Commits - -- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) - -## v0.0.0 - 2013-06-25 - -### Commits - -- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) -- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) -- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) -- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) -- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) -- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) -- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) -- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) -- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) -- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) -- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b44..0000000000 --- a/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/README.md b/node_modules/minimist/README.md deleted file mode 100644 index 74da3234b4..0000000000 --- a/node_modules/minimist/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# minimist [![Version Badge][npm-version-svg]][package-url] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.log(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ - _: ['foo', 'bar', 'baz'], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' -} -``` - -# security - -Previous versions had a prototype pollution bug that could cause privilege -escalation in some circumstances when handling untrusted user input. - -Please use version 1.2.6 or later: - -* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) -* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: - - ``` - > require('./')('one two three -- four five --six'.split(' '), { '--': true }) - { - _: ['one', 'two', 'three'], - '--': ['four', 'five', '--six'] - } - ``` - - Note that with `opts['--']` set, parsing for arguments still stops after the - `--`. - -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT - -[package-url]: https://npmjs.org/package/minimist -[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg -[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/minimist.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/minimist.svg -[downloads-url]: https://npm-stat.com/charts.html?package=minimist -[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist -[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js deleted file mode 100644 index 9d90ffb264..0000000000 --- a/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -var argv = require('../')(process.argv.slice(2)); -console.log(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js deleted file mode 100644 index f020f3940e..0000000000 --- a/node_modules/minimist/index.js +++ /dev/null @@ -1,263 +0,0 @@ -'use strict'; - -function hasKey(obj, keys) { - var o = obj; - keys.slice(0, -1).forEach(function (key) { - o = o[key] || {}; - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber(x) { - if (typeof x === 'number') { return true; } - if ((/^0x[0-9a-f]+$/i).test(x)) { return true; } - return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x); -} - -function isConstructorOrProto(obj, key) { - return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__'; -} - -module.exports = function (args, opts) { - if (!opts) { opts = {}; } - - var flags = { - bools: {}, - strings: {}, - unknownFn: null, - }; - - if (typeof opts.unknown === 'function') { - flags.unknownFn = opts.unknown; - } - - if (typeof opts.boolean === 'boolean' && opts.boolean) { - flags.allBools = true; - } else { - [].concat(opts.boolean).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - [].concat(aliases[key]).forEach(function (k) { - flags.strings[k] = true; - }); - } - }); - - var defaults = opts.default || {}; - - var argv = { _: [] }; - - function argDefined(key, arg) { - return (flags.allBools && (/^--[^=]+$/).test(arg)) - || flags.strings[key] - || flags.bools[key] - || aliases[key]; - } - - function setKey(obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length - 1; i++) { - var key = keys[i]; - if (isConstructorOrProto(o, key)) { return; } - if (o[key] === undefined) { o[key] = {}; } - if ( - o[key] === Object.prototype - || o[key] === Number.prototype - || o[key] === String.prototype - ) { - o[key] = {}; - } - if (o[key] === Array.prototype) { o[key] = []; } - o = o[key]; - } - - var lastKey = keys[keys.length - 1]; - if (isConstructorOrProto(o, lastKey)) { return; } - if ( - o === Object.prototype - || o === Number.prototype - || o === String.prototype - ) { - o = {}; - } - if (o === Array.prototype) { o = []; } - if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') { - o[lastKey] = value; - } else if (Array.isArray(o[lastKey])) { - o[lastKey].push(value); - } else { - o[lastKey] = [o[lastKey], value]; - } - } - - function setArg(key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) { return; } - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) - : val; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--') + 1); - args = args.slice(0, args.indexOf('--')); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - var key; - var next; - - if ((/^--.+=/).test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } else if ((/^--no-.+/).test(arg)) { - key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } else if ((/^--.+/).test(arg)) { - key = arg.match(/^--(.+)/)[1]; - next = args[i + 1]; - if ( - next !== undefined - && !(/^(-|--)[^-]/).test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true) - ) { - setArg(key, next, arg); - i += 1; - } else if ((/^(true|false)$/).test(next)) { - setArg(key, next === 'true', arg); - i += 1; - } else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } else if ((/^-[^-]+/).test(arg)) { - var letters = arg.slice(1, -1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - next = arg.slice(j + 2); - - if (next === '-') { - setArg(letters[j], next, arg); - continue; - } - - if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') { - setArg(letters[j], next.slice(1), arg); - broken = true; - break; - } - - if ( - (/[A-Za-z]/).test(letters[j]) - && (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next) - ) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j + 1] && letters[j + 1].match(/\W/)) { - setArg(letters[j], arg.slice(j + 2), arg); - broken = true; - break; - } else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if ( - args[i + 1] - && !(/^(-|--)[^-]/).test(args[i + 1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true) - ) { - setArg(key, args[i + 1], arg); - i += 1; - } else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) { - setArg(key, args[i + 1] === 'true', arg); - i += 1; - } else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg)); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (k) { - if (!hasKey(argv, k.split('.'))) { - setKey(argv, k.split('.'), defaults[k]); - - (aliases[k] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[k]); - }); - } - }); - - if (opts['--']) { - argv['--'] = notFlags.slice(); - } else { - notFlags.forEach(function (k) { - argv._.push(k); - }); - } - - return argv; -}; diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json deleted file mode 100644 index c10a334441..0000000000 --- a/node_modules/minimist/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "minimist", - "version": "1.2.8", - "description": "parse argument options", - "main": "index.js", - "devDependencies": { - "@ljharb/eslint-config": "^21.0.1", - "aud": "^2.0.2", - "auto-changelog": "^2.4.0", - "eslint": "=8.8.0", - "in-publish": "^2.0.1", - "npmignore": "^0.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" - }, - "scripts": { - "prepack": "npmignore --auto --commentLines=auto", - "prepublishOnly": "safe-publish-latest", - "prepublish": "not-in-publish || npm run prepublishOnly", - "lint": "eslint --ext=js,mjs .", - "pretest": "npm run lint", - "tests-only": "nyc tape 'test/**/*.js'", - "test": "npm run tests-only", - "posttest": "aud --production", - "version": "auto-changelog && git add CHANGELOG.md", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/minimistjs/minimist.git" - }, - "homepage": "https://github.com/minimistjs/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "license": "MIT", - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "publishConfig": { - "ignore": [ - ".github/workflows" - ] - } -} diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js deleted file mode 100644 index befa0c9976..0000000000 --- a/node_modules/minimist/test/all_bool.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('flag boolean true (default all --args to boolean)', function (t) { - var argv = parse(['moo', '--honk', 'cow'], { - boolean: true, - }); - - t.deepEqual(argv, { - honk: true, - _: ['moo', 'cow'], - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); - -test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { - var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { - boolean: true, - }); - - t.deepEqual(argv, { - honk: true, - tacos: 'good', - p: 55, - _: ['moo', 'cow'], - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js deleted file mode 100644 index e58d47e442..0000000000 --- a/node_modules/minimist/test/bool.js +++ /dev/null @@ -1,177 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false }, - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'], - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse(['-x', '-z', 'one', 'two', 'three'], { - boolean: ['x', 'y', 'z'], - }); - - t.deepEqual(argv, { - x: true, - y: false, - z: true, - _: ['one', 'two', 'three'], - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); -test('boolean and alias with chainable api', function (t) { - var aliased = ['-h', 'derp']; - var regular = ['--herp', 'derp']; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' }, - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' }, - }); - var expected = { - herp: true, - h: true, - _: ['derp'], - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = ['-h', 'derp']; - var regular = ['--herp', 'derp']; - var opts = { - alias: { h: 'herp' }, - boolean: 'herp', - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - _: ['derp'], - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias array with options hash', function (t) { - var aliased = ['-h', 'derp']; - var regular = ['--herp', 'derp']; - var alt = ['--harp', 'derp']; - var opts = { - alias: { h: ['herp', 'harp'] }, - boolean: 'h', - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var altPropertyArgv = parse(alt, opts); - var expected = { - harp: true, - herp: true, - h: true, - _: ['derp'], - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.same(altPropertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = ['-h', 'true']; - var regular = ['--herp', 'true']; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - _: [], - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function (t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool', - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool', - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); - -test('boolean --boool=true', function (t) { - var parsed = parse(['--boool=true'], { - default: { - boool: false, - }, - boolean: ['boool'], - }); - - t.same(parsed.boool, true); - t.end(); -}); - -test('boolean --boool=false', function (t) { - var parsed = parse(['--boool=false'], { - default: { - boool: true, - }, - boolean: ['boool'], - }); - - t.same(parsed.boool, false); - t.end(); -}); - -test('boolean using something similar to true', function (t) { - var opts = { boolean: 'h' }; - var result = parse(['-h', 'true.txt'], opts); - var expected = { - h: true, - _: ['true.txt'], - }; - - t.same(result, expected); - t.end(); -}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js deleted file mode 100644 index 707881771e..0000000000 --- a/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(6); - t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); - t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); - t.deepEqual(parse(['-']), { _: ['-'] }); - t.deepEqual(parse(['-f-']), { f: '-', _: [] }); - t.deepEqual( - parse(['-b', '-'], { boolean: 'b' }), - { b: true, _: ['-'] } - ); - t.deepEqual( - parse(['-s', '-'], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(2); - t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); - t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); -}); - -test('move arguments after the -- into their own `--` array', function (t) { - t.plan(1); - t.deepEqual( - parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), - { name: 'John', _: ['before'], '--': ['after'] } - ); -}); - -test('--- option value', function (t) { - // A multi-dash value is largely an edge case, but check the behaviour is as expected, - // and in particular the same for short option and long option (as made consistent in Jan 2023). - t.plan(2); - t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); - t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); -}); - diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js deleted file mode 100644 index 4e9f6250f0..0000000000 --- a/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true }, - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false }, - }); - t.equal(argv.somefalse, false); - t.end(); -}); - -test('boolean default to null', function (t) { - var argv = parse([], { - boolean: 'maybe', - default: { maybe: null }, - }); - t.equal(argv.maybe, null); - - var argvLong = parse(['--maybe'], { - boolean: 'maybe', - default: { maybe: null }, - }); - t.equal(argvLong.maybe, true); - t.end(); -}); diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js deleted file mode 100644 index 126ff033b4..0000000000 --- a/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); - -test('dotted default with no alias', function (t) { - var argv = parse('', { default: { 'a.b': 11 } }); - t.equal(argv.a.b, 11); - t.end(); -}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js deleted file mode 100644 index 6d1b53a7a7..0000000000 --- a/node_modules/minimist/test/kv_short.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('short -k=v', function (t) { - t.plan(1); - - var argv = parse(['-b=123']); - t.deepEqual(argv, { b: 123, _: [] }); -}); - -test('multi short -k=v', function (t) { - t.plan(1); - - var argv = parse(['-a=whatever', '-b=robots']); - t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); -}); - -test('short with embedded equals -k=a=b', function (t) { - t.plan(1); - - var argv = parse(['-k=a=b']); - t.deepEqual(argv, { k: 'a=b', _: [] }); -}); - -test('short with later equals like -ab=c', function (t) { - t.plan(1); - - var argv = parse(['-ab=c']); - t.deepEqual(argv, { a: true, b: 'c', _: [] }); -}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js deleted file mode 100644 index 9fef51f1fa..0000000000 --- a/node_modules/minimist/test/long.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse(['--bool']), - { bool: true, _: [] }, - 'long boolean' - ); - t.deepEqual( - parse(['--pow', 'xixxle']), - { pow: 'xixxle', _: [] }, - 'long capture sp' - ); - t.deepEqual( - parse(['--pow=xixxle']), - { pow: 'xixxle', _: [] }, - 'long capture eq' - ); - t.deepEqual( - parse(['--host', 'localhost', '--port', '555']), - { host: 'localhost', port: 555, _: [] }, - 'long captures sp' - ); - t.deepEqual( - parse(['--host=localhost', '--port=555']), - { host: 'localhost', port: 555, _: [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js deleted file mode 100644 index 074393ecaf..0000000000 --- a/node_modules/minimist/test/num.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789', - ]); - t.deepEqual(argv, { - x: 1234, - y: 5.67, - z: 1e7, - w: '10f', - hex: 0xdeadbeef, - _: [789], - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('already a number', function (t) { - var argv = parse(['-x', 1234, 789]); - t.deepEqual(argv, { x: 1234, _: [789] }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js deleted file mode 100644 index 65d9d90927..0000000000 --- a/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,209 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse(['--no-moo']), - { moo: false, _: [] }, - 'no' - ); - t.deepEqual( - parse(['-v', 'a', '-v', 'b', '-v', 'c']), - { v: ['a', 'b', 'c'], _: [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek', - ]), - { - c: true, - a: true, - t: true, - s: 'woo', - h: 'awesome', - b: true, - bool: true, - key: 'value', - multi: ['quux', 'baz'], - meep: false, - name: 'meowmers', - _: ['bare', '--not-a-flag', 'eek'], - } - ); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse(['-t', 'moo'], { boolean: 't' }); - t.deepEqual(argv, { t: true, _: ['moo'] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: ['t', 'verbose'], - default: { verbose: true }, - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'], - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('newlines in params', function (t) { - var args = parse(['-s', 'X\nX']); - t.deepEqual(args, { _: [], s: 'X\nX' }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse(['--s=X\nX']); - t.deepEqual(args, { _: [], s: 'X\nX' }); - t.end(); -}); - -test('strings', function (t) { - var s = parse(['-s', '0001234'], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse(['-x', '56'], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([' ', ' '], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function (t) { - var s = parse(['-s'], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse(['--str'], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse(['-art'], { - string: ['a', 't'], - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - -test('string and alias', function (t) { - var x = parse(['--str', '000123'], { - string: 's', - alias: { s: 'str' }, - }); - - t.equal(x.str, '000123'); - t.equal(typeof x.str, 'string'); - t.equal(x.s, '000123'); - t.equal(typeof x.s, 'string'); - - var y = parse(['-s', '000123'], { - string: 'str', - alias: { str: 's' }, - }); - - t.equal(y.str, '000123'); - t.equal(typeof y.str, 'string'); - t.equal(y.s, '000123'); - t.equal(typeof y.s, 'string'); - - var z = parse(['-s123'], { - alias: { str: ['s', 'S'] }, - string: ['str'], - }); - - t.deepEqual( - z, - { _: [], s: '123', S: '123', str: '123' }, - 'opt.string works with multiple aliases' - ); - t.end(); -}); - -test('slashBreak', function (t) { - t.same( - parse(['-I/foo/bar/baz']), - { I: '/foo/bar/baz', _: [] } - ); - t.same( - parse(['-xyz/foo/bar/baz']), - { x: true, y: true, z: '/foo/bar/baz', _: [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse(['-f', '11', '--zoom', '55'], { - alias: { z: 'zoom' }, - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse(['-f', '11', '--zoom', '55'], { - alias: { z: ['zm', 'zoom'] }, - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop', - ]); - - t.same(argv.foo, { - bar: 3, - baz: 4, - quux: { - quibble: 5, - o_O: true, - }, - }); - t.same(argv.beep, { boop: true }); - t.end(); -}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 32965d130f..0000000000 --- a/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions', function (t) { - t.plan(1); - - var argv = parse(['-b', '123'], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: [123] }); -}); diff --git a/node_modules/minimist/test/proto.js b/node_modules/minimist/test/proto.js deleted file mode 100644 index 6e629dd34e..0000000000 --- a/node_modules/minimist/test/proto.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -/* eslint no-proto: 0 */ - -var parse = require('../'); -var test = require('tape'); - -test('proto pollution', function (t) { - var argv = parse(['--__proto__.x', '123']); - t.equal({}.x, undefined); - t.equal(argv.__proto__.x, undefined); - t.equal(argv.x, undefined); - t.end(); -}); - -test('proto pollution (array)', function (t) { - var argv = parse(['--x', '4', '--x', '5', '--x.__proto__.z', '789']); - t.equal({}.z, undefined); - t.deepEqual(argv.x, [4, 5]); - t.equal(argv.x.z, undefined); - t.equal(argv.x.__proto__.z, undefined); - t.end(); -}); - -test('proto pollution (number)', function (t) { - var argv = parse(['--x', '5', '--x.__proto__.z', '100']); - t.equal({}.z, undefined); - t.equal((4).z, undefined); - t.equal(argv.x, 5); - t.equal(argv.x.z, undefined); - t.end(); -}); - -test('proto pollution (string)', function (t) { - var argv = parse(['--x', 'abc', '--x.__proto__.z', 'def']); - t.equal({}.z, undefined); - t.equal('...'.z, undefined); - t.equal(argv.x, 'abc'); - t.equal(argv.x.z, undefined); - t.end(); -}); - -test('proto pollution (constructor)', function (t) { - var argv = parse(['--constructor.prototype.y', '123']); - t.equal({}.y, undefined); - t.equal(argv.y, undefined); - t.end(); -}); - -test('proto pollution (constructor function)', function (t) { - var argv = parse(['--_.concat.constructor.prototype.y', '123']); - function fnToBeTested() {} - t.equal(fnToBeTested.y, undefined); - t.equal(argv.y, undefined); - t.end(); -}); - -// powered by snyk - https://github.com/backstage/backstage/issues/10343 -test('proto pollution (constructor function) snyk', function (t) { - var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); - t.equal(function () {}.foo, undefined); - t.equal(argv.y, undefined); - t.end(); -}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js deleted file mode 100644 index 4a7b84385b..0000000000 --- a/node_modules/minimist/test/short.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse(['-n123']), { n: 123, _: [] }); - t.deepEqual( - parse(['-123', '456']), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse(['-b']), - { b: true, _: [] }, - 'short boolean' - ); - t.deepEqual( - parse(['foo', 'bar', 'baz']), - { _: ['foo', 'bar', 'baz'] }, - 'bare' - ); - t.deepEqual( - parse(['-cats']), - { c: true, a: true, t: true, s: true, _: [] }, - 'group' - ); - t.deepEqual( - parse(['-cats', 'meow']), - { c: true, a: true, t: true, s: 'meow', _: [] }, - 'short group next' - ); - t.deepEqual( - parse(['-h', 'localhost']), - { h: 'localhost', _: [] }, - 'short capture' - ); - t.deepEqual( - parse(['-h', 'localhost', '-p', '555']), - { h: 'localhost', p: 555, _: [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse(['-h', 'localhost', '-fp', '555', 'script.js']), - { - f: true, p: 555, h: 'localhost', - _: ['script.js'], - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse(['-h', 'localhost', '-fp', '555', 'script.js']), - { - f: true, p: 555, h: 'localhost', - _: ['script.js'], - } - ); - t.end(); -}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js deleted file mode 100644 index 52a6a91903..0000000000 --- a/node_modules/minimist/test/stop_early.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('stops parsing on the first non-option when stopEarly is set', function (t) { - var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { - stopEarly: true, - }); - - t.deepEqual(argv, { - aaa: 'bbb', - _: ['ccc', '--ddd'], - }); - - t.end(); -}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js deleted file mode 100644 index 4f2e0ca447..0000000000 --- a/node_modules/minimist/test/unknown.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('boolean and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['-h', 'true', '--derp', 'true']; - var regular = ['--herp', 'true', '-d', 'true']; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - unknown: unknownFn, - }; - parse(aliased, opts); - parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('flag boolean true any double hyphen argument is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { - boolean: true, - unknown: unknownFn, - }); - t.same(unknown, ['--tacos=good', 'cow', '-p']); - t.same(argv, { - honk: true, - _: [], - }); - t.end(); -}); - -test('string and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['-h', 'hello', '--derp', 'goodbye']; - var regular = ['--herp', 'hello', '-d', 'moon']; - var opts = { - alias: { h: 'herp' }, - string: 'h', - unknown: unknownFn, - }; - parse(aliased, opts); - parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('default and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['-h', 'hello']; - var regular = ['--herp', 'hello']; - var opts = { - default: { h: 'bar' }, - alias: { h: 'herp' }, - unknown: unknownFn, - }; - parse(aliased, opts); - parse(regular, opts); - - t.same(unknown, []); - t.end(); - unknownFn(); // exercise fn for 100% coverage -}); - -test('value following -- is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['--bad', '--', 'good', 'arg']; - var opts = { - '--': true, - unknown: unknownFn, - }; - var argv = parse(aliased, opts); - - t.same(unknown, ['--bad']); - t.same(argv, { - '--': ['good', 'arg'], - _: [], - }); - t.end(); -}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 4fdaf1d394..0000000000 --- a/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace', function (t) { - t.plan(1); - var x = parse(['-x', '\t']).x; - t.equal(x, '\t'); -}); diff --git a/node_modules/minipass/LICENSE b/node_modules/minipass/LICENSE deleted file mode 100644 index 97f8e32ed8..0000000000 --- a/node_modules/minipass/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minipass/README.md b/node_modules/minipass/README.md deleted file mode 100644 index 1126330582..0000000000 --- a/node_modules/minipass/README.md +++ /dev/null @@ -1,825 +0,0 @@ -# minipass - -A _very_ minimal implementation of a [PassThrough -stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough) - -[It's very -fast](https://docs.google.com/spreadsheets/d/1K_HR5oh3r80b8WVMWCPPjfuWXUgfkmhlX7FGI6JJ8tY/edit?usp=sharing) -for objects, strings, and buffers. - -Supports `pipe()`ing (including multi-`pipe()` and backpressure -transmission), buffering data until either a `data` event handler -or `pipe()` is added (so you don't lose the first chunk), and -most other cases where PassThrough is a good idea. - -There is a `read()` method, but it's much more efficient to -consume data from this stream via `'data'` events or by calling -`pipe()` into some other stream. Calling `read()` requires the -buffer to be flattened in some cases, which requires copying -memory. - -If you set `objectMode: true` in the options, then whatever is -written will be emitted. Otherwise, it'll do a minimal amount of -Buffer copying to ensure proper Streams semantics when `read(n)` -is called. - -`objectMode` can only be set at instantiation. Attempting to -write something other than a String or Buffer without having set -`objectMode` in the options will throw an error. - -This is not a `through` or `through2` stream. It doesn't -transform the data, it just passes it right through. If you want -to transform the data, extend the class, and override the -`write()` method. Once you're done transforming the data however -you want, call `super.write()` with the transform output. - -For some examples of streams that extend Minipass in various -ways, check out: - -- [minizlib](http://npm.im/minizlib) -- [fs-minipass](http://npm.im/fs-minipass) -- [tar](http://npm.im/tar) -- [minipass-collect](http://npm.im/minipass-collect) -- [minipass-flush](http://npm.im/minipass-flush) -- [minipass-pipeline](http://npm.im/minipass-pipeline) -- [tap](http://npm.im/tap) -- [tap-parser](http://npm.im/tap-parser) -- [treport](http://npm.im/treport) -- [minipass-fetch](http://npm.im/minipass-fetch) -- [pacote](http://npm.im/pacote) -- [make-fetch-happen](http://npm.im/make-fetch-happen) -- [cacache](http://npm.im/cacache) -- [ssri](http://npm.im/ssri) -- [npm-registry-fetch](http://npm.im/npm-registry-fetch) -- [minipass-json-stream](http://npm.im/minipass-json-stream) -- [minipass-sized](http://npm.im/minipass-sized) - -## Usage in TypeScript - -The `Minipass` class takes three type template definitions: - -- `RType` the type being read, which defaults to `Buffer`. If - `RType` is `string`, then the constructor _must_ get an options - object specifying either an `encoding` or `objectMode: true`. - If it's anything other than `string` or `Buffer`, then it - _must_ get an options object specifying `objectMode: true`. -- `WType` the type being written. If `RType` is `Buffer` or - `string`, then this defaults to `ContiguousData` (Buffer, - string, ArrayBuffer, or ArrayBufferView). Otherwise, it - defaults to `RType`. -- `Events` type mapping event names to the arguments emitted - with that event, which extends `Minipass.Events`. - -To declare types for custom events in subclasses, extend the -third parameter with your own event signatures. For example: - -```js -import { Minipass } from 'minipass' - -// a NDJSON stream that emits 'jsonError' when it can't stringify -export interface Events extends Minipass.Events { - jsonError: [e: Error] -} - -export class NDJSONStream extends Minipass { - constructor() { - super({ objectMode: true }) - } - - // data is type `any` because that's WType - write(data, encoding, cb) { - try { - const json = JSON.stringify(data) - return super.write(json + '\n', encoding, cb) - } catch (er) { - if (!er instanceof Error) { - er = Object.assign(new Error('json stringify failed'), { - cause: er, - }) - } - // trying to emit with something OTHER than an error will - // fail, because we declared the event arguments type. - this.emit('jsonError', er) - } - } -} - -const s = new NDJSONStream() -s.on('jsonError', e => { - // here, TS knows that e is an Error -}) -``` - -Emitting/handling events that aren't declared in this way is -fine, but the arguments will be typed as `unknown`. - -## Differences from Node.js Streams - -There are several things that make Minipass streams different -from (and in some ways superior to) Node.js core streams. - -Please read these caveats if you are familiar with node-core -streams and intend to use Minipass streams in your programs. - -You can avoid most of these differences entirely (for a very -small performance penalty) by setting `{async: true}` in the -constructor options. - -### Timing - -Minipass streams are designed to support synchronous use-cases. -Thus, data is emitted as soon as it is available, always. It is -buffered until read, but no longer. Another way to look at it is -that Minipass streams are exactly as synchronous as the logic -that writes into them. - -This can be surprising if your code relies on -`PassThrough.write()` always providing data on the next tick -rather than the current one, or being able to call `resume()` and -not have the entire buffer disappear immediately. - -However, without this synchronicity guarantee, there would be no -way for Minipass to achieve the speeds it does, or support the -synchronous use cases that it does. Simply put, waiting takes -time. - -This non-deferring approach makes Minipass streams much easier to -reason about, especially in the context of Promises and other -flow-control mechanisms. - -Example: - -```js -// hybrid module, either works -import { Minipass } from 'minipass' -// or: -const { Minipass } = require('minipass') - -const stream = new Minipass() -stream.on('data', () => console.log('data event')) -console.log('before write') -stream.write('hello') -console.log('after write') -// output: -// before write -// data event -// after write -``` - -### Exception: Async Opt-In - -If you wish to have a Minipass stream with behavior that more -closely mimics Node.js core streams, you can set the stream in -async mode either by setting `async: true` in the constructor -options, or by setting `stream.async = true` later on. - -```js -// hybrid module, either works -import { Minipass } from 'minipass' -// or: -const { Minipass } = require('minipass') - -const asyncStream = new Minipass({ async: true }) -asyncStream.on('data', () => console.log('data event')) -console.log('before write') -asyncStream.write('hello') -console.log('after write') -// output: -// before write -// after write -// data event <-- this is deferred until the next tick -``` - -Switching _out_ of async mode is unsafe, as it could cause data -corruption, and so is not enabled. Example: - -```js -import { Minipass } from 'minipass' -const stream = new Minipass({ encoding: 'utf8' }) -stream.on('data', chunk => console.log(chunk)) -stream.async = true -console.log('before writes') -stream.write('hello') -setStreamSyncAgainSomehow(stream) // <-- this doesn't actually exist! -stream.write('world') -console.log('after writes') -// hypothetical output would be: -// before writes -// world -// after writes -// hello -// NOT GOOD! -``` - -To avoid this problem, once set into async mode, any attempt to -make the stream sync again will be ignored. - -```js -const { Minipass } = require('minipass') -const stream = new Minipass({ encoding: 'utf8' }) -stream.on('data', chunk => console.log(chunk)) -stream.async = true -console.log('before writes') -stream.write('hello') -stream.async = false // <-- no-op, stream already async -stream.write('world') -console.log('after writes') -// actual output: -// before writes -// after writes -// hello -// world -``` - -### No High/Low Water Marks - -Node.js core streams will optimistically fill up a buffer, -returning `true` on all writes until the limit is hit, even if -the data has nowhere to go. Then, they will not attempt to draw -more data in until the buffer size dips below a minimum value. - -Minipass streams are much simpler. The `write()` method will -return `true` if the data has somewhere to go (which is to say, -given the timing guarantees, that the data is already there by -the time `write()` returns). - -If the data has nowhere to go, then `write()` returns false, and -the data sits in a buffer, to be drained out immediately as soon -as anyone consumes it. - -Since nothing is ever buffered unnecessarily, there is much less -copying data, and less bookkeeping about buffer capacity levels. - -### Hazards of Buffering (or: Why Minipass Is So Fast) - -Since data written to a Minipass stream is immediately written -all the way through the pipeline, and `write()` always returns -true/false based on whether the data was fully flushed, -backpressure is communicated immediately to the upstream caller. -This minimizes buffering. - -Consider this case: - -```js -const { PassThrough } = require('stream') -const p1 = new PassThrough({ highWaterMark: 1024 }) -const p2 = new PassThrough({ highWaterMark: 1024 }) -const p3 = new PassThrough({ highWaterMark: 1024 }) -const p4 = new PassThrough({ highWaterMark: 1024 }) - -p1.pipe(p2).pipe(p3).pipe(p4) -p4.on('data', () => console.log('made it through')) - -// this returns false and buffers, then writes to p2 on next tick (1) -// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2) -// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3) -// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain' -// on next tick (4) -// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and -// 'drain' on next tick (5) -// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6) -// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next -// tick (7) - -p1.write(Buffer.alloc(2048)) // returns false -``` - -Along the way, the data was buffered and deferred at each stage, -and multiple event deferrals happened, for an unblocked pipeline -where it was perfectly safe to write all the way through! - -Furthermore, setting a `highWaterMark` of `1024` might lead -someone reading the code to think an advisory maximum of 1KiB is -being set for the pipeline. However, the actual advisory -buffering level is the _sum_ of `highWaterMark` values, since -each one has its own bucket. - -Consider the Minipass case: - -```js -const m1 = new Minipass() -const m2 = new Minipass() -const m3 = new Minipass() -const m4 = new Minipass() - -m1.pipe(m2).pipe(m3).pipe(m4) -m4.on('data', () => console.log('made it through')) - -// m1 is flowing, so it writes the data to m2 immediately -// m2 is flowing, so it writes the data to m3 immediately -// m3 is flowing, so it writes the data to m4 immediately -// m4 is flowing, so it fires the 'data' event immediately, returns true -// m4's write returned true, so m3 is still flowing, returns true -// m3's write returned true, so m2 is still flowing, returns true -// m2's write returned true, so m1 is still flowing, returns true -// No event deferrals or buffering along the way! - -m1.write(Buffer.alloc(2048)) // returns true -``` - -It is extremely unlikely that you _don't_ want to buffer any data -written, or _ever_ buffer data that can be flushed all the way -through. Neither node-core streams nor Minipass ever fail to -buffer written data, but node-core streams do a lot of -unnecessary buffering and pausing. - -As always, the faster implementation is the one that does less -stuff and waits less time to do it. - -### Immediately emit `end` for empty streams (when not paused) - -If a stream is not paused, and `end()` is called before writing -any data into it, then it will emit `end` immediately. - -If you have logic that occurs on the `end` event which you don't -want to potentially happen immediately (for example, closing file -descriptors, moving on to the next entry in an archive parse -stream, etc.) then be sure to call `stream.pause()` on creation, -and then `stream.resume()` once you are ready to respond to the -`end` event. - -However, this is _usually_ not a problem because: - -### Emit `end` When Asked - -One hazard of immediately emitting `'end'` is that you may not -yet have had a chance to add a listener. In order to avoid this -hazard, Minipass streams safely re-emit the `'end'` event if a -new listener is added after `'end'` has been emitted. - -Ie, if you do `stream.on('end', someFunction)`, and the stream -has already emitted `end`, then it will call the handler right -away. (You can think of this somewhat like attaching a new -`.then(fn)` to a previously-resolved Promise.) - -To prevent calling handlers multiple times who would not expect -multiple ends to occur, all listeners are removed from the -`'end'` event whenever it is emitted. - -### Emit `error` When Asked - -The most recent error object passed to the `'error'` event is -stored on the stream. If a new `'error'` event handler is added, -and an error was previously emitted, then the event handler will -be called immediately (or on `process.nextTick` in the case of -async streams). - -This makes it much more difficult to end up trying to interact -with a broken stream, if the error handler is added after an -error was previously emitted. - -### Impact of "immediate flow" on Tee-streams - -A "tee stream" is a stream piping to multiple destinations: - -```js -const tee = new Minipass() -t.pipe(dest1) -t.pipe(dest2) -t.write('foo') // goes to both destinations -``` - -Since Minipass streams _immediately_ process any pending data -through the pipeline when a new pipe destination is added, this -can have surprising effects, especially when a stream comes in -from some other function and may or may not have data in its -buffer. - -```js -// WARNING! WILL LOSE DATA! -const src = new Minipass() -src.write('foo') -src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone -src.pipe(dest2) // gets nothing! -``` - -One solution is to create a dedicated tee-stream junction that -pipes to both locations, and then pipe to _that_ instead. - -```js -// Safe example: tee to both places -const src = new Minipass() -src.write('foo') -const tee = new Minipass() -tee.pipe(dest1) -tee.pipe(dest2) -src.pipe(tee) // tee gets 'foo', pipes to both locations -``` - -The same caveat applies to `on('data')` event listeners. The -first one added will _immediately_ receive all of the data, -leaving nothing for the second: - -```js -// WARNING! WILL LOSE DATA! -const src = new Minipass() -src.write('foo') -src.on('data', handler1) // receives 'foo' right away -src.on('data', handler2) // nothing to see here! -``` - -Using a dedicated tee-stream can be used in this case as well: - -```js -// Safe example: tee to both data handlers -const src = new Minipass() -src.write('foo') -const tee = new Minipass() -tee.on('data', handler1) -tee.on('data', handler2) -src.pipe(tee) -``` - -All of the hazards in this section are avoided by setting `{ -async: true }` in the Minipass constructor, or by setting -`stream.async = true` afterwards. Note that this does add some -overhead, so should only be done in cases where you are willing -to lose a bit of performance in order to avoid having to refactor -program logic. - -## USAGE - -It's a stream! Use it like a stream and it'll most likely do what -you want. - -```js -import { Minipass } from 'minipass' -const mp = new Minipass(options) // options is optional -mp.write('foo') -mp.pipe(someOtherStream) -mp.end('bar') -``` - -### OPTIONS - -- `encoding` How would you like the data coming _out_ of the - stream to be encoded? Accepts any values that can be passed to - `Buffer.toString()`. -- `objectMode` Emit data exactly as it comes in. This will be - flipped on by default if you write() something other than a - string or Buffer at any point. Setting `objectMode: true` will - prevent setting any encoding value. -- `async` Defaults to `false`. Set to `true` to defer data - emission until next tick. This reduces performance slightly, - but makes Minipass streams use timing behavior closer to Node - core streams. See [Timing](#timing) for more details. -- `signal` An `AbortSignal` that will cause the stream to unhook - itself from everything and become as inert as possible. Note - that providing a `signal` parameter will make `'error'` events - no longer throw if they are unhandled, but they will still be - emitted to handlers if any are attached. - -### API - -Implements the user-facing portions of Node.js's `Readable` and -`Writable` streams. - -### Methods - -- `write(chunk, [encoding], [callback])` - Put data in. (Note - that, in the base Minipass class, the same data will come out.) - Returns `false` if the stream will buffer the next write, or - true if it's still in "flowing" mode. -- `end([chunk, [encoding]], [callback])` - Signal that you have - no more data to write. This will queue an `end` event to be - fired when all the data has been consumed. -- `pause()` - No more data for a while, please. This also - prevents `end` from being emitted for empty streams until the - stream is resumed. -- `resume()` - Resume the stream. If there's data in the buffer, - it is all discarded. Any buffered events are immediately - emitted. -- `pipe(dest)` - Send all output to the stream provided. When - data is emitted, it is immediately written to any and all pipe - destinations. (Or written on next tick in `async` mode.) -- `unpipe(dest)` - Stop piping to the destination stream. This is - immediate, meaning that any asynchronously queued data will - _not_ make it to the destination when running in `async` mode. - - `options.end` - Boolean, end the destination stream when the - source stream ends. Default `true`. - - `options.proxyErrors` - Boolean, proxy `error` events from - the source stream to the destination stream. Note that errors - are _not_ proxied after the pipeline terminates, either due - to the source emitting `'end'` or manually unpiping with - `src.unpipe(dest)`. Default `false`. -- `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are - EventEmitters. Some events are given special treatment, - however. (See below under "events".) -- `promise()` - Returns a Promise that resolves when the stream - emits `end`, or rejects if the stream emits `error`. -- `collect()` - Return a Promise that resolves on `end` with an - array containing each chunk of data that was emitted, or - rejects if the stream emits `error`. Note that this consumes - the stream data. -- `concat()` - Same as `collect()`, but concatenates the data - into a single Buffer object. Will reject the returned promise - if the stream is in objectMode, or if it goes into objectMode - by the end of the data. -- `read(n)` - Consume `n` bytes of data out of the buffer. If `n` - is not provided, then consume all of it. If `n` bytes are not - available, then it returns null. **Note** consuming streams in - this way is less efficient, and can lead to unnecessary Buffer - copying. -- `destroy([er])` - Destroy the stream. If an error is provided, - then an `'error'` event is emitted. If the stream has a - `close()` method, and has not emitted a `'close'` event yet, - then `stream.close()` will be called. Any Promises returned by - `.promise()`, `.collect()` or `.concat()` will be rejected. - After being destroyed, writing to the stream will emit an - error. No more data will be emitted if the stream is destroyed, - even if it was previously buffered. - -### Properties - -- `bufferLength` Read-only. Total number of bytes buffered, or in - the case of objectMode, the total number of objects. -- `encoding` Read-only. The encoding that has been set. -- `flowing` Read-only. Boolean indicating whether a chunk written - to the stream will be immediately emitted. -- `emittedEnd` Read-only. Boolean indicating whether the end-ish - events (ie, `end`, `prefinish`, `finish`) have been emitted. - Note that listening on any end-ish event will immediateyl - re-emit it if it has already been emitted. -- `writable` Whether the stream is writable. Default `true`. Set - to `false` when `end()` -- `readable` Whether the stream is readable. Default `true`. -- `pipes` An array of Pipe objects referencing streams that this - stream is piping into. -- `destroyed` A getter that indicates whether the stream was - destroyed. -- `paused` True if the stream has been explicitly paused, - otherwise false. -- `objectMode` Indicates whether the stream is in `objectMode`. -- `aborted` Readonly property set when the `AbortSignal` - dispatches an `abort` event. - -### Events - -- `data` Emitted when there's data to read. Argument is the data - to read. This is never emitted while not flowing. If a listener - is attached, that will resume the stream. -- `end` Emitted when there's no more data to read. This will be - emitted immediately for empty streams when `end()` is called. - If a listener is attached, and `end` was already emitted, then - it will be emitted again. All listeners are removed when `end` - is emitted. -- `prefinish` An end-ish event that follows the same logic as - `end` and is emitted in the same conditions where `end` is - emitted. Emitted after `'end'`. -- `finish` An end-ish event that follows the same logic as `end` - and is emitted in the same conditions where `end` is emitted. - Emitted after `'prefinish'`. -- `close` An indication that an underlying resource has been - released. Minipass does not emit this event, but will defer it - until after `end` has been emitted, since it throws off some - stream libraries otherwise. -- `drain` Emitted when the internal buffer empties, and it is - again suitable to `write()` into the stream. -- `readable` Emitted when data is buffered and ready to be read - by a consumer. -- `resume` Emitted when stream changes state from buffering to - flowing mode. (Ie, when `resume` is called, `pipe` is called, - or a `data` event listener is added.) - -### Static Methods - -- `Minipass.isStream(stream)` Returns `true` if the argument is a - stream, and false otherwise. To be considered a stream, the - object must be either an instance of Minipass, or an - EventEmitter that has either a `pipe()` method, or both - `write()` and `end()` methods. (Pretty much any stream in - node-land will return `true` for this.) - -## EXAMPLES - -Here are some examples of things you can do with Minipass -streams. - -### simple "are you done yet" promise - -```js -mp.promise().then( - () => { - // stream is finished - }, - er => { - // stream emitted an error - } -) -``` - -### collecting - -```js -mp.collect().then(all => { - // all is an array of all the data emitted - // encoding is supported in this case, so - // so the result will be a collection of strings if - // an encoding is specified, or buffers/objects if not. - // - // In an async function, you may do - // const data = await stream.collect() -}) -``` - -### collecting into a single blob - -This is a bit slower because it concatenates the data into one -chunk for you, but if you're going to do it yourself anyway, it's -convenient this way: - -```js -mp.concat().then(onebigchunk => { - // onebigchunk is a string if the stream - // had an encoding set, or a buffer otherwise. -}) -``` - -### iteration - -You can iterate over streams synchronously or asynchronously in -platforms that support it. - -Synchronous iteration will end when the currently available data -is consumed, even if the `end` event has not been reached. In -string and buffer mode, the data is concatenated, so unless -multiple writes are occurring in the same tick as the `read()`, -sync iteration loops will generally only have a single iteration. - -To consume chunks in this way exactly as they have been written, -with no flattening, create the stream with the `{ objectMode: -true }` option. - -```js -const mp = new Minipass({ objectMode: true }) -mp.write('a') -mp.write('b') -for (let letter of mp) { - console.log(letter) // a, b -} -mp.write('c') -mp.write('d') -for (let letter of mp) { - console.log(letter) // c, d -} -mp.write('e') -mp.end() -for (let letter of mp) { - console.log(letter) // e -} -for (let letter of mp) { - console.log(letter) // nothing -} -``` - -Asynchronous iteration will continue until the end event is reached, -consuming all of the data. - -```js -const mp = new Minipass({ encoding: 'utf8' }) - -// some source of some data -let i = 5 -const inter = setInterval(() => { - if (i-- > 0) mp.write(Buffer.from('foo\n', 'utf8')) - else { - mp.end() - clearInterval(inter) - } -}, 100) - -// consume the data with asynchronous iteration -async function consume() { - for await (let chunk of mp) { - console.log(chunk) - } - return 'ok' -} - -consume().then(res => console.log(res)) -// logs `foo\n` 5 times, and then `ok` -``` - -### subclass that `console.log()`s everything written into it - -```js -class Logger extends Minipass { - write(chunk, encoding, callback) { - console.log('WRITE', chunk, encoding) - return super.write(chunk, encoding, callback) - } - end(chunk, encoding, callback) { - console.log('END', chunk, encoding) - return super.end(chunk, encoding, callback) - } -} - -someSource.pipe(new Logger()).pipe(someDest) -``` - -### same thing, but using an inline anonymous class - -```js -// js classes are fun -someSource - .pipe( - new (class extends Minipass { - emit(ev, ...data) { - // let's also log events, because debugging some weird thing - console.log('EMIT', ev) - return super.emit(ev, ...data) - } - write(chunk, encoding, callback) { - console.log('WRITE', chunk, encoding) - return super.write(chunk, encoding, callback) - } - end(chunk, encoding, callback) { - console.log('END', chunk, encoding) - return super.end(chunk, encoding, callback) - } - })() - ) - .pipe(someDest) -``` - -### subclass that defers 'end' for some reason - -```js -class SlowEnd extends Minipass { - emit(ev, ...args) { - if (ev === 'end') { - console.log('going to end, hold on a sec') - setTimeout(() => { - console.log('ok, ready to end now') - super.emit('end', ...args) - }, 100) - return true - } else { - return super.emit(ev, ...args) - } - } -} -``` - -### transform that creates newline-delimited JSON - -```js -class NDJSONEncode extends Minipass { - write(obj, cb) { - try { - // JSON.stringify can throw, emit an error on that - return super.write(JSON.stringify(obj) + '\n', 'utf8', cb) - } catch (er) { - this.emit('error', er) - } - } - end(obj, cb) { - if (typeof obj === 'function') { - cb = obj - obj = undefined - } - if (obj !== undefined) { - this.write(obj) - } - return super.end(cb) - } -} -``` - -### transform that parses newline-delimited JSON - -```js -class NDJSONDecode extends Minipass { - constructor(options) { - // always be in object mode, as far as Minipass is concerned - super({ objectMode: true }) - this._jsonBuffer = '' - } - write(chunk, encoding, cb) { - if ( - typeof chunk === 'string' && - typeof encoding === 'string' && - encoding !== 'utf8' - ) { - chunk = Buffer.from(chunk, encoding).toString() - } else if (Buffer.isBuffer(chunk)) { - chunk = chunk.toString() - } - if (typeof encoding === 'function') { - cb = encoding - } - const jsonData = (this._jsonBuffer + chunk).split('\n') - this._jsonBuffer = jsonData.pop() - for (let i = 0; i < jsonData.length; i++) { - try { - // JSON.parse can throw, emit an error on that - super.write(JSON.parse(jsonData[i])) - } catch (er) { - this.emit('error', er) - continue - } - } - if (cb) cb() - } -} -``` diff --git a/node_modules/minipass/package.json b/node_modules/minipass/package.json deleted file mode 100644 index 771969b028..0000000000 --- a/node_modules/minipass/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "minipass", - "version": "7.1.2", - "description": "minimal implementation of a PassThrough stream", - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "type": "module", - "tshy": { - "selfLink": false, - "main": true, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --loglevel warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" - }, - "prettier": { - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "devDependencies": { - "@types/end-of-stream": "^1.4.2", - "@types/node": "^20.1.2", - "end-of-stream": "^1.4.0", - "node-abort-controller": "^3.1.1", - "prettier": "^2.6.2", - "tap": "^19.0.0", - "through2": "^2.0.3", - "tshy": "^1.14.0", - "typedoc": "^0.25.1" - }, - "repository": "https://github.com/isaacs/minipass", - "keywords": [ - "passthrough", - "stream" - ], - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "tap": { - "typecheck": true, - "include": [ - "test/*.ts" - ] - } -} diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js deleted file mode 100644 index ea734fb738..0000000000 --- a/node_modules/ms/index.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function (val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - return ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); -} diff --git a/node_modules/ms/license.md b/node_modules/ms/license.md deleted file mode 100644 index fa5d39b621..0000000000 --- a/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2020 Vercel, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json deleted file mode 100644 index 49971890df..0000000000 --- a/node_modules/ms/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "ms", - "version": "2.1.3", - "description": "Tiny millisecond conversion utility", - "repository": "vercel/ms", - "main": "./index", - "files": [ - "index.js" - ], - "scripts": { - "precommit": "lint-staged", - "lint": "eslint lib/* bin/*", - "test": "mocha tests.js" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "license": "MIT", - "devDependencies": { - "eslint": "4.18.2", - "expect.js": "0.3.1", - "husky": "0.14.3", - "lint-staged": "5.0.0", - "mocha": "4.0.1", - "prettier": "2.0.5" - } -} diff --git a/node_modules/ms/readme.md b/node_modules/ms/readme.md deleted file mode 100644 index 0fc1abb3b8..0000000000 --- a/node_modules/ms/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# ms - -![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -ms('-3 days') // -259200000 -ms('-1h') // -3600000 -ms('-200') // -200 -``` - -### Convert from Milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(-3 * 60000) // "-3m" -ms(ms('10 hours')) // "10h" -``` - -### Time Format Written-Out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(-3 * 60000, { long: true }) // "-3 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [Node.js](https://nodejs.org) and in the browser -- If a number is supplied to `ms`, a string with a unit is returned -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) -- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned - -## Related Packages - -- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. - -## Caught a Bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/node_modules/package-json-from-dist/LICENSE.md b/node_modules/package-json-from-dist/LICENSE.md deleted file mode 100644 index 881248b6d7..0000000000 --- a/node_modules/package-json-from-dist/LICENSE.md +++ /dev/null @@ -1,63 +0,0 @@ -All packages under `src/` are licensed according to the terms in -their respective `LICENSE` or `LICENSE.md` files. - -The remainder of this project is licensed under the Blue Oak -Model License, as follows: - ------ - -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. - -## Notices - -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. - -## Excuse - -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. - -## Patent - -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. - -## Reliability - -No contributor can revoke this license. - -## No Liability - -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.*** diff --git a/node_modules/package-json-from-dist/README.md b/node_modules/package-json-from-dist/README.md deleted file mode 100644 index a9e1344851..0000000000 --- a/node_modules/package-json-from-dist/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# package-json-from-dist - -Sometimes you want to load the `package.json` into your -TypeScript program, and it's tempting to just `import -'../package.json'`, since that seems to work. - -However, this requires `tsc` to make an entire copy of your -`package.json` file into the `dist` folder, which is a problem if -you're using something like -[tshy](https://github.com/isaacs/tshy), which uses the -`package.json` file in dist for another purpose. Even when that -does work, it's asking the module system to do a bunch of extra -fs system calls, just to load a version number or something. (See -[this issue](https://github.com/isaacs/tshy/issues/61).) - -This module helps by just finding the package.json file -appropriately, and reading and parsing it in the most normal -fashion. - -## Caveats - -This _only_ works if your code builds into a target folder called -`dist`, which is in the root of the package. It also requires -that you do not have a folder named `node_modules` anywhere -within your dev environment, or else it'll get the wrong answers -there. (But, at least, that'll be in dev, so you're pretty likely -to notice.) - -If you build to some other location, then you'll need a different -approach. (Feel free to fork this module and make it your own, or -just put the code right inline, there's not much of it.) - -## USAGE - -```js -// src/index.ts -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' - -const pj = findPackageJson(import.meta.url) -console.log(`package.json found at ${pj}`) - -const pkg = loadPackageJson(import.meta.url) -console.log(`Hello from ${pkg.name}@${pkg.version}`) -``` - -If your module is not directly in the `./src` folder, then you need -to specify the path that you would expect to find the -`package.json` when it's _not_ built to the `dist` folder. - -```js -// src/components/something.ts -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' - -const pj = findPackageJson(import.meta.url, '../../package.json') -console.log(`package.json found at ${pj}`) - -const pkg = loadPackageJson(import.meta.url, '../../package.json') -console.log(`Hello from ${pkg.name}@${pkg.version}`) -``` - -When running from CommmonJS, use `__filename` instead of -`import.meta.url`. - -```js -// src/index.cts -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' - -const pj = findPackageJson(__filename) -console.log(`package.json found at ${pj}`) - -const pkg = loadPackageJson(__filename) -console.log(`Hello from ${pkg.name}@${pkg.version}`) -``` - -Since [tshy](https://github.com/isaacs/tshy) builds _both_ -CommonJS and ESM by default, you may find that you need a -CommonJS override and some `//@ts-ignore` magic to make it work. - -`src/pkg.ts`: - -```js -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' -//@ts-ignore -export const pkg = loadPackageJson(import.meta.url) -//@ts-ignore -export const pj = findPackageJson(import.meta.url) -``` - -`src/pkg-cjs.cts`: - -```js -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' -export const pkg = loadPackageJson(__filename) -export const pj = findPackageJson(__filename) -``` diff --git a/node_modules/package-json-from-dist/package.json b/node_modules/package-json-from-dist/package.json deleted file mode 100644 index a2d03c3269..0000000000 --- a/node_modules/package-json-from-dist/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "package-json-from-dist", - "version": "1.0.1", - "description": "Load the local package.json from either src or dist folder", - "main": "./dist/commonjs/index.js", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc" - }, - "author": "Isaac Z. Schlueter (https://izs.me)", - "license": "BlueOak-1.0.0", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/package-json-from-dist.git" - }, - "devDependencies": { - "@types/node": "^20.12.12", - "prettier": "^3.2.5", - "tap": "^18.5.3", - "typedoc": "^0.24.8", - "typescript": "^5.1.6", - "tshy": "^1.14.0" - }, - "prettier": { - "semi": false, - "printWidth": 70, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf", - "experimentalTernaries": true - }, - "tshy": { - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "types": "./dist/commonjs/index.d.ts", - "type": "module" -} diff --git a/node_modules/parse-entities/index.d.ts b/node_modules/parse-entities/index.d.ts deleted file mode 100644 index 4e94341887..0000000000 --- a/node_modules/parse-entities/index.d.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type {Point, Position} from 'unist' - -// To do: next major: remove `void` from allowed return types. - -/** - * @typeParam Context - * Value used as `this`. - * @this - * The `warningContext` given to `parseEntities` - * @param reason - * Human readable reason for emitting a parse error. - * @param point - * Place where the error occurred. - * @param code - * Machine readable code the error. - */ -export type WarningHandler = ( - this: Context, - reason: string, - point: Point, - code: number -) => undefined | void - -/** - * @typeParam Context - * Value used as `this`. - * @this - * The `referenceContext` given to `parseEntities` - * @param value - * Decoded character reference. - * @param position - * Place where `value` starts and ends. - * @param source - * Raw source of character reference. - */ -export type ReferenceHandler = ( - this: Context, - value: string, - position: Position, - source: string -) => undefined | void - -/** - * @typeParam Context - * Value used as `this`. - * @this - * The `textContext` given to `parseEntities`. - * @param value - * String of content. - * @param position - * Place where `value` starts and ends. - */ -export type TextHandler = ( - this: Context, - value: string, - position: Position -) => undefined | void - -/** - * Configuration. - * - * @typeParam WarningContext - * Value used as `this` in the `warning` handler. - * @typeParam ReferenceContext - * Value used as `this` in the `reference` handler. - * @typeParam TextContext - * Value used as `this` in the `text` handler. - */ -export interface Options< - WarningContext = undefined, - ReferenceContext = undefined, - TextContext = undefined -> { - /** - * Additional character to accept. - * This allows other characters, without error, when following an ampersand. - * - * @default '' - */ - additional?: string | null | undefined - /** - * Whether to parse `value` as an attribute value. - * This results in slightly different behavior. - * - * @default false - */ - attribute?: boolean | null | undefined - /** - * Whether to allow nonterminated character references. - * For example, `©cat` for `©cat`. - * This behavior is compliant to the spec but can lead to unexpected results. - * - * @default true - */ - nonTerminated?: boolean | null | undefined - /** - * Starting `position` of `value` (`Point` or `Position`). Useful when dealing with values nested in some sort of syntax tree. - */ - position?: Readonly | Readonly | null | undefined - /** - * Context used when calling `warning`. - */ - warningContext?: WarningContext | null | undefined - /** - * Context used when calling `reference`. - */ - referenceContext?: ReferenceContext | null | undefined - /** - * Context used when calling `text`. - */ - textContext?: TextContext | null | undefined - /** - * Warning handler. - */ - warning?: WarningHandler | null | undefined - /** - * Reference handler. - */ - reference?: ReferenceHandler | null | undefined - /** - * Text handler. - */ - text?: TextHandler | null | undefined -} - -export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/index.js b/node_modules/parse-entities/index.js deleted file mode 100644 index 60157967c0..0000000000 --- a/node_modules/parse-entities/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: more types exposed from `index.d.ts`. -// To do: refactor to include type parameters in JS. -export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/license b/node_modules/parse-entities/license deleted file mode 100644 index 8fbc47ddb9..0000000000 --- a/node_modules/parse-entities/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/parse-entities/package.json b/node_modules/parse-entities/package.json deleted file mode 100644 index cb3820aa91..0000000000 --- a/node_modules/parse-entities/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "parse-entities", - "version": "4.0.2", - "description": "Parse HTML character references", - "license": "MIT", - "keywords": [ - "parse", - "html", - "character", - "reference", - "entity", - "entities" - ], - "repository": "wooorm/parse-entities", - "bugs": "https://github.com/wooorm/parse-entities/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "lib/", - "index.d.ts", - "index.js" - ], - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "c8": "^10.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.60.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true, - "rules": { - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/ban-types": "off", - "complexity": "off", - "max-depth": "off", - "no-bitwise": "off", - "unicorn/numeric-separators-style": "off", - "unicorn/prefer-code-point": "off" - } - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/parse-entities/readme.md b/node_modules/parse-entities/readme.md deleted file mode 100644 index cdc8c3279f..0000000000 --- a/node_modules/parse-entities/readme.md +++ /dev/null @@ -1,266 +0,0 @@ -# parse-entities - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Parse HTML character references. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`parseEntities(value[, options])`](#parseentitiesvalue-options) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a small and powerful decoder of HTML character references (often called -entities). - -## When should I use this? - -You can use this for spec-compliant decoding of character references. -It’s small and fast enough to do that well. -You can also use this when making a linter, because there are different warnings -emitted with reasons for why and positional info on where they happened. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 14.14+, 16.0+), install with [npm][]: - -```sh -npm install parse-entities -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {parseEntities} from 'https://esm.sh/parse-entities@3' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {parseEntities} from 'parse-entities' - -console.log(parseEntities('alpha & bravo'))) -// => alpha & bravo - -console.log(parseEntities('charlie ©cat; delta')) -// => charlie ©cat; delta - -console.log(parseEntities('echo © foxtrot ≠ golf 𝌆 hotel')) -// => echo © foxtrot ≠ golf 𝌆 hotel -``` - -## API - -This package exports the identifier `parseEntities`. -There is no default export. - -### `parseEntities(value[, options])` - -Parse HTML character references. - -##### `options` - -Configuration (optional). - -###### `options.additional` - -Additional character to accept (`string?`, default: `''`). -This allows other characters, without error, when following an ampersand. - -###### `options.attribute` - -Whether to parse `value` as an attribute value (`boolean?`, default: `false`). -This results in slightly different behavior. - -###### `options.nonTerminated` - -Whether to allow nonterminated references (`boolean`, default: `true`). -For example, `©cat` for `©cat`. -This behavior is compliant to the spec but can lead to unexpected results. - -###### `options.position` - -Starting `position` of `value` (`Position` or `Point`, optional). -Useful when dealing with values nested in some sort of syntax tree. -The default is: - -```js -{line: 1, column: 1, offset: 0} -``` - -###### `options.warning` - -Error handler ([`Function?`][warning]). - -###### `options.text` - -Text handler ([`Function?`][text]). - -###### `options.reference` - -Reference handler ([`Function?`][reference]). - -###### `options.warningContext` - -Context used when calling `warning` (`'*'`, optional). - -###### `options.textContext` - -Context used when calling `text` (`'*'`, optional). - -###### `options.referenceContext` - -Context used when calling `reference` (`'*'`, optional) - -##### Returns - -`string` — decoded `value`. - -#### `function warning(reason, point, code)` - -Error handler. - -###### Parameters - -* `this` (`*`) — refers to `warningContext` when given to `parseEntities` -* `reason` (`string`) — human readable reason for emitting a parse error -* `point` ([`Point`][point]) — place where the error occurred -* `code` (`number`) — machine readable code the error - -The following codes are used: - -| Code | Example | Note | -| ---- | ------------------ | --------------------------------------------- | -| `1` | `foo & bar` | Missing semicolon (named) | -| `2` | `foo { bar` | Missing semicolon (numeric) | -| `3` | `Foo &bar baz` | Empty (named) | -| `4` | `Foo &#` | Empty (numeric) | -| `5` | `Foo &bar; baz` | Unknown (named) | -| `6` | `Foo € baz` | [Disallowed reference][invalid] | -| `7` | `Foo � baz` | Prohibited: outside permissible unicode range | - -#### `function text(value, position)` - -Text handler. - -###### Parameters - -* `this` (`*`) — refers to `textContext` when given to `parseEntities` -* `value` (`string`) — string of content -* `position` ([`Position`][position]) — place where `value` starts and ends - -#### `function reference(value, position, source)` - -Character reference handler. - -###### Parameters - -* `this` (`*`) — refers to `referenceContext` when given to `parseEntities` -* `value` (`string`) — decoded character reference -* `position` ([`Position`][position]) — place where `source` starts and ends -* `source` (`string`) — raw source of character reference - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types `Options`, `WarningHandler`, -`ReferenceHandler`, and `TextHandler`. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 14.14+ and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe: it matches the HTML spec to parse character references. - -## Related - -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — encode HTML character references -* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) - — info on character references -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — info on HTML4 character references -* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) - — info on legacy character references -* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) - — info on invalid numeric character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/parse-entities/workflows/main/badge.svg - -[build]: https://github.com/wooorm/parse-entities/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/parse-entities.svg - -[coverage]: https://codecov.io/github/wooorm/parse-entities - -[downloads-badge]: https://img.shields.io/npm/dm/parse-entities.svg - -[downloads]: https://www.npmjs.com/package/parse-entities - -[size-badge]: https://img.shields.io/bundlephobia/minzip/parse-entities.svg - -[size]: https://bundlephobia.com/result?p=parse-entities - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[warning]: #function-warningreason-point-code - -[text]: #function-textvalue-position - -[reference]: #function-referencevalue-position-source - -[invalid]: https://github.com/wooorm/character-reference-invalid - -[point]: https://github.com/syntax-tree/unist#point - -[position]: https://github.com/syntax-tree/unist#position - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/path-key/index.d.ts b/node_modules/path-key/index.d.ts deleted file mode 100644 index 7c575d1975..0000000000 --- a/node_modules/path-key/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -/// - -declare namespace pathKey { - interface Options { - /** - Use a custom environment variables object. Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env). - */ - readonly env?: {[key: string]: string | undefined}; - - /** - Get the PATH key for a specific platform. Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform). - */ - readonly platform?: NodeJS.Platform; - } -} - -declare const pathKey: { - /** - Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform. - - @example - ``` - import pathKey = require('path-key'); - - const key = pathKey(); - //=> 'PATH' - - const PATH = process.env[key]; - //=> '/usr/local/bin:/usr/bin:/bin' - ``` - */ - (options?: pathKey.Options): string; - - // TODO: Remove this for the next major release, refactor the whole definition to: - // declare function pathKey(options?: pathKey.Options): string; - // export = pathKey; - default: typeof pathKey; -}; - -export = pathKey; diff --git a/node_modules/path-key/index.js b/node_modules/path-key/index.js deleted file mode 100644 index 0cf6415d60..0000000000 --- a/node_modules/path-key/index.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const pathKey = (options = {}) => { - const environment = options.env || process.env; - const platform = options.platform || process.platform; - - if (platform !== 'win32') { - return 'PATH'; - } - - return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path'; -}; - -module.exports = pathKey; -// TODO: Remove this for the next major release -module.exports.default = pathKey; diff --git a/node_modules/path-key/license b/node_modules/path-key/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/path-key/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/path-key/package.json b/node_modules/path-key/package.json deleted file mode 100644 index c8cbd383af..0000000000 --- a/node_modules/path-key/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "path-key", - "version": "3.1.1", - "description": "Get the PATH environment variable key cross-platform", - "license": "MIT", - "repository": "sindresorhus/path-key", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "path", - "key", - "environment", - "env", - "variable", - "var", - "get", - "cross-platform", - "windows" - ], - "devDependencies": { - "@types/node": "^11.13.0", - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - } -} diff --git a/node_modules/path-key/readme.md b/node_modules/path-key/readme.md deleted file mode 100644 index a9052d7a69..0000000000 --- a/node_modules/path-key/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key) - -> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform - -It's usually `PATH`, but on Windows it can be any casing like `Path`... - - -## Install - -``` -$ npm install path-key -``` - - -## Usage - -```js -const pathKey = require('path-key'); - -const key = pathKey(); -//=> 'PATH' - -const PATH = process.env[key]; -//=> '/usr/local/bin:/usr/bin:/bin' -``` - - -## API - -### pathKey(options?) - -#### options - -Type: `object` - -##### env - -Type: `object`
          -Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env) - -Use a custom environment variables object. - -#### platform - -Type: `string`
          -Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform) - -Get the PATH key for a specific platform. - - ---- - -

          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/path-scurry/LICENSE.md b/node_modules/path-scurry/LICENSE.md deleted file mode 100644 index c5402b9577..0000000000 --- a/node_modules/path-scurry/LICENSE.md +++ /dev/null @@ -1,55 +0,0 @@ -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. - -## Notices - -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. - -## Excuse - -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. - -## Patent - -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. - -## Reliability - -No contributor can revoke this license. - -## No Liability - -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.*** diff --git a/node_modules/path-scurry/README.md b/node_modules/path-scurry/README.md deleted file mode 100644 index b5cb495c0b..0000000000 --- a/node_modules/path-scurry/README.md +++ /dev/null @@ -1,636 +0,0 @@ -# path-scurry - -Extremely high performant utility for building tools that read -the file system, minimizing filesystem and path string munging -operations to the greatest degree possible. - -## Ugh, yet another file traversal thing on npm? - -Yes. None of the existing ones gave me exactly what I wanted. - -## Well what is it you wanted? - -While working on [glob](http://npm.im/glob), I found that I -needed a module to very efficiently manage the traversal over a -folder tree, such that: - -1. No `readdir()` or `stat()` would ever be called on the same - file or directory more than one time. -2. No `readdir()` calls would be made if we can be reasonably - sure that the path is not a directory. (Ie, a previous - `readdir()` or `stat()` covered the path, and - `ent.isDirectory()` is false.) -3. `path.resolve()`, `dirname()`, `basename()`, and other - string-parsing/munging operations are be minimized. This means - it has to track "provisional" child nodes that may not exist - (and if we find that they _don't_ exist, store that - information as well, so we don't have to ever check again). -4. The API is not limited to use as a stream/iterator/etc. There - are many cases where an API like node's `fs` is preferrable. -5. It's more important to prevent excess syscalls than to be up - to date, but it should be smart enough to know what it - _doesn't_ know, and go get it seamlessly when requested. -6. Do not blow up the JS heap allocation if operating on a - directory with a huge number of entries. -7. Handle all the weird aspects of Windows paths, like UNC paths - and drive letters and wrongway slashes, so that the consumer - can return canonical platform-specific paths without having to - parse or join or do any error-prone string munging. - -## PERFORMANCE - -JavaScript people throw around the word "blazing" a lot. I hope -that this module doesn't blaze anyone. But it does go very fast, -in the cases it's optimized for, if used properly. - -PathScurry provides ample opportunities to get extremely good -performance, as well as several options to trade performance for -convenience. - -Benchmarks can be run by executing `npm run bench`. - -As is always the case, doing more means going slower, doing less -means going faster, and there are trade offs between speed and -memory usage. - -PathScurry makes heavy use of [LRUCache](http://npm.im/lru-cache) -to efficiently cache whatever it can, and `Path` objects remain -in the graph for the lifetime of the walker, so repeated calls -with a single PathScurry object will be extremely fast. However, -adding items to a cold cache means "doing more", so in those -cases, we pay a price. Nothing is free, but every effort has been -made to reduce costs wherever possible. - -Also, note that a "cache as long as possible" approach means that -changes to the filesystem may not be reflected in the results of -repeated PathScurry operations. - -For resolving string paths, `PathScurry` ranges from 5-50 times -faster than `path.resolve` on repeated resolutions, but around -100 to 1000 times _slower_ on the first resolution. If your -program is spending a lot of time resolving the _same_ paths -repeatedly (like, thousands or millions of times), then this can -be beneficial. But both implementations are pretty fast, and -speeding up an infrequent operation from 4µs to 400ns is not -going to move the needle on your app's performance. - -For walking file system directory trees, a lot depends on how -often a given PathScurry object will be used, and also on the -walk method used. - -With default settings on a folder tree of 100,000 items, -consisting of around a 10-to-1 ratio of normal files to -directories, PathScurry performs comparably to -[@nodelib/fs.walk](http://npm.im/@nodelib/fs.walk), which is the -fastest and most reliable file system walker I could find. As far -as I can tell, it's almost impossible to go much faster in a -Node.js program, just based on how fast you can push syscalls out -to the fs thread pool. - -On my machine, that is about 1000-1200 completed walks per second -for async or stream walks, and around 500-600 walks per second -synchronously. - -In the warm cache state, PathScurry's performance increases -around 4x for async `for await` iteration, 10-15x faster for -streams and synchronous `for of` iteration, and anywhere from 30x -to 80x faster for the rest. - -``` -# walk 100,000 fs entries, 10/1 file/dir ratio -# operations / ms - New PathScurry object | Reuse PathScurry object - stream: 1112.589 | 13974.917 -sync stream: 492.718 | 15028.343 - async walk: 1095.648 | 32706.395 - sync walk: 527.632 | 46129.772 - async iter: 1288.821 | 5045.510 - sync iter: 498.496 | 17920.746 -``` - -A hand-rolled walk calling `entry.readdir()` and recursing -through the entries can benefit even more from caching, with -greater flexibility and without the overhead of streams or -generators. - -The cold cache state is still limited by the costs of file system -operations, but with a warm cache, the only bottleneck is CPU -speed and VM optimizations. Of course, in that case, some care -must be taken to ensure that you don't lose performance as a -result of silly mistakes, like calling `readdir()` on entries -that you know are not directories. - -``` -# manual recursive iteration functions - cold cache | warm cache -async: 1164.901 | 17923.320 - cb: 1101.127 | 40999.344 -zalgo: 1082.240 | 66689.936 - sync: 526.935 | 87097.591 -``` - -In this case, the speed improves by around 10-20x in the async -case, 40x in the case of using `entry.readdirCB` with protections -against synchronous callbacks, and 50-100x with callback -deferrals disabled, and _several hundred times faster_ for -synchronous iteration. - -If you can think of a case that is not covered in these -benchmarks, or an implementation that performs significantly -better than PathScurry, please [let me -know](https://github.com/isaacs/path-scurry/issues). - -## USAGE - -```ts -// hybrid module, load with either method -import { PathScurry, Path } from 'path-scurry' -// or: -const { PathScurry, Path } = require('path-scurry') - -// very simple example, say we want to find and -// delete all the .DS_Store files in a given path -// note that the API is very similar to just a -// naive walk with fs.readdir() -import { unlink } from 'fs/promises' - -// easy way, iterate over the directory and do the thing -const pw = new PathScurry(process.cwd()) -for await (const entry of pw) { - if (entry.isFile() && entry.name === '.DS_Store') { - unlink(entry.fullpath()) - } -} - -// here it is as a manual recursive method -const walk = async (entry: Path) => { - const promises: Promise = [] - // readdir doesn't throw on non-directories, it just doesn't - // return any entries, to save stack trace costs. - // Items are returned in arbitrary unsorted order - for (const child of await pw.readdir(entry)) { - // each child is a Path object - if (child.name === '.DS_Store' && child.isFile()) { - // could also do pw.resolve(entry, child.name), - // just like fs.readdir walking, but .fullpath is - // a *slightly* more efficient shorthand. - promises.push(unlink(child.fullpath())) - } else if (child.isDirectory()) { - promises.push(walk(child)) - } - } - return Promise.all(promises) -} - -walk(pw.cwd).then(() => { - console.log('all .DS_Store files removed') -}) - -const pw2 = new PathScurry('/a/b/c') // pw2.cwd is the Path for /a/b/c -const relativeDir = pw2.cwd.resolve('../x') // Path entry for '/a/b/x' -const relative2 = pw2.cwd.resolve('/a/b/d/../x') // same path, same entry -assert.equal(relativeDir, relative2) -``` - -## API - -[Full TypeDoc API](https://isaacs.github.io/path-scurry) - -There are platform-specific classes exported, but for the most -part, the default `PathScurry` and `Path` exports are what you -most likely need, unless you are testing behavior for other -platforms. - -Intended public API is documented here, but the full -documentation does include internal types, which should not be -accessed directly. - -### Interface `PathScurryOpts` - -The type of the `options` argument passed to the `PathScurry` -constructor. - -- `nocase`: Boolean indicating that file names should be compared - case-insensitively. Defaults to `true` on darwin and win32 - implementations, `false` elsewhere. - - **Warning** Performing case-insensitive matching on a - case-sensitive filesystem will result in occasionally very - bizarre behavior. Performing case-sensitive matching on a - case-insensitive filesystem may negatively impact performance. - -- `childrenCacheSize`: Number of child entries to cache, in order - to speed up `resolve()` and `readdir()` calls. Defaults to - `16 * 1024` (ie, `16384`). - - Setting it to a higher value will run the risk of JS heap - allocation errors on large directory trees. Setting it to `256` - or smaller will significantly reduce the construction time and - data consumption overhead, but with the downside of operations - being slower on large directory trees. Setting it to `0` will - mean that effectively no operations are cached, and this module - will be roughly the same speed as `fs` for file system - operations, and _much_ slower than `path.resolve()` for - repeated path resolution. - -- `fs` An object that will be used to override the default `fs` - methods. Any methods that are not overridden will use Node's - built-in implementations. - - - lstatSync - - readdir (callback `withFileTypes` Dirent variant, used for - readdirCB and most walks) - - readdirSync - - readlinkSync - - realpathSync - - promises: Object containing the following async methods: - - lstat - - readdir (Dirent variant only) - - readlink - - realpath - -### Interface `WalkOptions` - -The options object that may be passed to all walk methods. - -- `withFileTypes`: Boolean, default true. Indicates that `Path` - objects should be returned. Set to `false` to get string paths - instead. -- `follow`: Boolean, default false. Attempt to read directory - entries from symbolic links. Otherwise, only actual directories - are traversed. Regardless of this setting, a given target path - will only ever be walked once, meaning that a symbolic link to - a previously traversed directory will never be followed. - - Setting this imposes a slight performance penalty, because - `readlink` must be called on all symbolic links encountered, in - order to avoid infinite cycles. - -- `filter`: Function `(entry: Path) => boolean`. If provided, - will prevent the inclusion of any entry for which it returns a - falsey value. This will not prevent directories from being - traversed if they do not pass the filter, though it will - prevent the directories themselves from being included in the - results. By default, if no filter is provided, then all entries - are included in the results. -- `walkFilter`: Function `(entry: Path) => boolean`. If provided, - will prevent the traversal of any directory (or in the case of - `follow:true` symbolic links to directories) for which the - function returns false. This will not prevent the directories - themselves from being included in the result set. Use `filter` - for that. - -Note that TypeScript return types will only be inferred properly -from static analysis if the `withFileTypes` option is omitted, or -a constant `true` or `false` value. - -### Class `PathScurry` - -The main interface. Defaults to an appropriate class based on the -current platform. - -Use `PathScurryWin32`, `PathScurryDarwin`, or `PathScurryPosix` -if implementation-specific behavior is desired. - -All walk methods may be called with a `WalkOptions` argument to -walk over the object's current working directory with the -supplied options. - -#### `async pw.walk(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Walk the directory tree according to the options provided, -resolving to an array of all entries found. - -#### `pw.walkSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Walk the directory tree according to the options provided, -returning an array of all entries found. - -#### `pw.iterate(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Iterate over the directory asynchronously, for use with `for -await of`. This is also the default async iterator method. - -#### `pw.iterateSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Iterate over the directory synchronously, for use with `for of`. -This is also the default sync iterator method. - -#### `pw.stream(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Return a [Minipass](http://npm.im/minipass) stream that emits -each entry or path string in the walk. Results are made available -asynchronously. - -#### `pw.streamSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Return a [Minipass](http://npm.im/minipass) stream that emits -each entry or path string in the walk. Results are made available -synchronously, meaning that the walk will complete in a single -tick if the stream is fully consumed. - -#### `pw.cwd` - -Path object representing the current working directory for the -PathScurry. - -#### `pw.chdir(path: string)` - -Set the new effective current working directory for the scurry -object, so that `path.relative()` and `path.relativePosix()` -return values relative to the new cwd path. - -#### `pw.depth(path?: Path | string): number` - -Return the depth of the specified path (or the PathScurry cwd) -within the directory tree. - -Root entries have a depth of `0`. - -#### `pw.resolve(...paths: string[])` - -Caching `path.resolve()`. - -Significantly faster than `path.resolve()` if called repeatedly -with the same paths. Significantly slower otherwise, as it builds -out the cached Path entries. - -To get a `Path` object resolved from the `PathScurry`, use -`pw.cwd.resolve(path)`. Note that `Path.resolve` only takes a -single string argument, not multiple. - -#### `pw.resolvePosix(...paths: string[])` - -Caching `path.resolve()`, but always using posix style paths. - -This is identical to `pw.resolve(...paths)` on posix systems (ie, -everywhere except Windows). - -On Windows, it returns the full absolute UNC path using `/` -separators. Ie, instead of `'C:\\foo\\bar`, it would return -`//?/C:/foo/bar`. - -#### `pw.relative(path: string | Path): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -#### `pw.relativePosix(path: string | Path): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry, using `/` path separators. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -On posix platforms (ie, all platforms except Windows), this is -identical to `pw.relative(path)`. - -On Windows systems, it returns the resulting string as a -`/`-delimited path. If an absolute path is returned (because the -target does not share a common ancestor with `pw.cwd`), then a -full absolute UNC path will be returned. Ie, instead of -`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. - -#### `pw.basename(path: string | Path): string` - -Return the basename of the provided string or Path. - -#### `pw.dirname(path: string | Path): string` - -Return the parent directory of the supplied string or Path. - -#### `async pw.readdir(dir = pw.cwd, opts = { withFileTypes: true })` - -Read the directory and resolve to an array of strings if -`withFileTypes` is explicitly set to `false` or Path objects -otherwise. - -Can be called as `pw.readdir({ withFileTypes: boolean })` as -well. - -Returns `[]` if no entries are found, or if any error occurs. - -Note that TypeScript return types will only be inferred properly -from static analysis if the `withFileTypes` option is omitted, or -a constant `true` or `false` value. - -#### `pw.readdirSync(dir = pw.cwd, opts = { withFileTypes: true })` - -Synchronous `pw.readdir()` - -#### `async pw.readlink(link = pw.cwd, opts = { withFileTypes: false })` - -Call `fs.readlink` on the supplied string or Path object, and -return the result. - -Can be called as `pw.readlink({ withFileTypes: boolean })` as -well. - -Returns `undefined` if any error occurs (for example, if the -argument is not a symbolic link), or a `Path` object if -`withFileTypes` is explicitly set to `true`, or a string -otherwise. - -Note that TypeScript return types will only be inferred properly -from static analysis if the `withFileTypes` option is omitted, or -a constant `true` or `false` value. - -#### `pw.readlinkSync(link = pw.cwd, opts = { withFileTypes: false })` - -Synchronous `pw.readlink()` - -#### `async pw.lstat(entry = pw.cwd)` - -Call `fs.lstat` on the supplied string or Path object, and fill -in as much information as possible, returning the updated `Path` -object. - -Returns `undefined` if the entry does not exist, or if any error -is encountered. - -Note that some `Stats` data (such as `ino`, `dev`, and `mode`) -will not be supplied. For those things, you'll need to call -`fs.lstat` yourself. - -#### `pw.lstatSync(entry = pw.cwd)` - -Synchronous `pw.lstat()` - -#### `pw.realpath(entry = pw.cwd, opts = { withFileTypes: false })` - -Call `fs.realpath` on the supplied string or Path object, and -return the realpath if available. - -Returns `undefined` if any error occurs. - -May be called as `pw.realpath({ withFileTypes: boolean })` to run -on `pw.cwd`. - -#### `pw.realpathSync(entry = pw.cwd, opts = { withFileTypes: false })` - -Synchronous `pw.realpath()` - -### Class `Path` implements [fs.Dirent](https://nodejs.org/docs/latest/api/fs.html#class-fsdirent) - -Object representing a given path on the filesystem, which may or -may not exist. - -Note that the actual class in use will be either `PathWin32` or -`PathPosix`, depending on the implementation of `PathScurry` in -use. They differ in the separators used to split and join path -strings, and the handling of root paths. - -In `PathPosix` implementations, paths are split and joined using -the `'/'` character, and `'/'` is the only root path ever in use. - -In `PathWin32` implementations, paths are split using either -`'/'` or `'\\'` and joined using `'\\'`, and multiple roots may -be in use based on the drives and UNC paths encountered. UNC -paths such as `//?/C:/` that identify a drive letter, will be -treated as an alias for the same root entry as their associated -drive letter (in this case `'C:\\'`). - -#### `path.name` - -Name of this file system entry. - -**Important**: _always_ test the path name against any test -string using the `isNamed` method, and not by directly comparing -this string. Otherwise, unicode path strings that the system sees -as identical will not be properly treated as the same path, -leading to incorrect behavior and possible security issues. - -#### `path.isNamed(name: string): boolean` - -Return true if the path is a match for the given path name. This -handles case sensitivity and unicode normalization. - -Note: even on case-sensitive systems, it is **not** safe to test -the equality of the `.name` property to determine whether a given -pathname matches, due to unicode normalization mismatches. - -Always use this method instead of testing the `path.name` -property directly. - -#### `path.isCWD` - -Set to true if this `Path` object is the current working -directory of the `PathScurry` collection that contains it. - -#### `path.getType()` - -Returns the type of the Path object, `'File'`, `'Directory'`, -etc. - -#### `path.isType(t: type)` - -Returns true if `is{t}()` returns true. - -For example, `path.isType('Directory')` is equivalent to -`path.isDirectory()`. - -#### `path.depth()` - -Return the depth of the Path entry within the directory tree. -Root paths have a depth of `0`. - -#### `path.fullpath()` - -The fully resolved path to the entry. - -#### `path.fullpathPosix()` - -The fully resolved path to the entry, using `/` separators. - -On posix systems, this is identical to `path.fullpath()`. On -windows, this will return a fully resolved absolute UNC path -using `/` separators. Eg, instead of `'C:\\foo\\bar'`, it will -return `'//?/C:/foo/bar'`. - -#### `path.isFile()`, `path.isDirectory()`, etc. - -Same as the identical `fs.Dirent.isX()` methods. - -#### `path.isUnknown()` - -Returns true if the path's type is unknown. Always returns true -when the path is known to not exist. - -#### `path.resolve(p: string)` - -Return a `Path` object associated with the provided path string -as resolved from the current Path object. - -#### `path.relative(): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -#### `path.relativePosix(): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry, using `/` path separators. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -On posix platforms (ie, all platforms except Windows), this is -identical to `pw.relative(path)`. - -On Windows systems, it returns the resulting string as a -`/`-delimited path. If an absolute path is returned (because the -target does not share a common ancestor with `pw.cwd`), then a -full absolute UNC path will be returned. Ie, instead of -`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. - -#### `async path.readdir()` - -Return an array of `Path` objects found by reading the associated -path entry. - -If path is not a directory, or if any error occurs, returns `[]`, -and marks all children as provisional and non-existent. - -#### `path.readdirSync()` - -Synchronous `path.readdir()` - -#### `async path.readlink()` - -Return the `Path` object referenced by the `path` as a symbolic -link. - -If the `path` is not a symbolic link, or any error occurs, -returns `undefined`. - -#### `path.readlinkSync()` - -Synchronous `path.readlink()` - -#### `async path.lstat()` - -Call `lstat` on the path object, and fill it in with details -determined. - -If path does not exist, or any other error occurs, returns -`undefined`, and marks the path as "unknown" type. - -#### `path.lstatSync()` - -Synchronous `path.lstat()` - -#### `async path.realpath()` - -Call `realpath` on the path, and return a Path object -corresponding to the result, or `undefined` if any error occurs. - -#### `path.realpathSync()` - -Synchornous `path.realpath()` diff --git a/node_modules/path-scurry/package.json b/node_modules/path-scurry/package.json deleted file mode 100644 index e176615789..0000000000 --- a/node_modules/path-scurry/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "path-scurry", - "version": "1.11.1", - "description": "walk paths fast and efficiently", - "author": "Isaac Z. Schlueter (https://blog.izs.me)", - "main": "./dist/commonjs/index.js", - "type": "module", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "license": "BlueOak-1.0.0", - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --loglevel warn", - "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts", - "bench": "bash ./scripts/bench.sh" - }, - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "devDependencies": { - "@nodelib/fs.walk": "^1.2.8", - "@types/node": "^20.12.11", - "c8": "^7.12.0", - "eslint-config-prettier": "^8.6.0", - "mkdirp": "^3.0.0", - "prettier": "^3.2.5", - "rimraf": "^5.0.1", - "tap": "^18.7.2", - "ts-node": "^10.9.2", - "tshy": "^1.14.0", - "typedoc": "^0.25.12", - "typescript": "^5.4.3" - }, - "tap": { - "typecheck": true - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/path-scurry" - }, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "tshy": { - "selfLink": false, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "types": "./dist/commonjs/index.d.ts" -} diff --git a/node_modules/punycode.js/LICENSE-MIT.txt b/node_modules/punycode.js/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/punycode.js/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/punycode.js/README.md b/node_modules/punycode.js/README.md deleted file mode 100644 index f611016b01..0000000000 --- a/node_modules/punycode.js/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Punycode.js [![punycode on npm](https://img.shields.io/npm/v/punycode)](https://www.npmjs.com/package/punycode) [![](https://data.jsdelivr.com/v1/package/npm/punycode/badge)](https://www.jsdelivr.com/package/npm/punycode) - -Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). - -This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: - -* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) -* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) -* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) -* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) -* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) - -This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). - -This project provides a CommonJS module that uses ES2015+ features and JavaScript module, which work in modern Node.js versions and browsers. For the old Punycode.js version that offers the same functionality in a UMD build with support for older pre-ES2015 runtimes, including Rhino, Ringo, and Narwhal, see [v1.4.1](https://github.com/mathiasbynens/punycode.js/releases/tag/v1.4.1). - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install punycode --save -``` - -In [Node.js](https://nodejs.org/): - -> ⚠️ Note that userland modules don't hide core modules. -> For example, `require('punycode')` still imports the deprecated core module even if you executed `npm install punycode`. -> Use `require('punycode/')` to import userland modules rather than core modules. - -```js -const punycode = require('punycode/'); -``` - -## API - -### `punycode.decode(string)` - -Converts a Punycode string of ASCII symbols to a string of Unicode symbols. - -```js -// decode domain name parts -punycode.decode('maana-pta'); // 'mañana' -punycode.decode('--dqo34k'); // '☃-⌘' -``` - -### `punycode.encode(string)` - -Converts a string of Unicode symbols to a Punycode string of ASCII symbols. - -```js -// encode domain name parts -punycode.encode('mañana'); // 'maana-pta' -punycode.encode('☃-⌘'); // '--dqo34k' -``` - -### `punycode.toUnicode(input)` - -Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. - -```js -// decode domain names -punycode.toUnicode('xn--maana-pta.com'); -// → 'mañana.com' -punycode.toUnicode('xn----dqo34k.com'); -// → '☃-⌘.com' - -// decode email addresses -punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); -// → 'джумла@джpумлатест.bрфa' -``` - -### `punycode.toASCII(input)` - -Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. - -```js -// encode domain names -punycode.toASCII('mañana.com'); -// → 'xn--maana-pta.com' -punycode.toASCII('☃-⌘.com'); -// → 'xn----dqo34k.com' - -// encode email addresses -punycode.toASCII('джумла@джpумлатест.bрфa'); -// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' -``` - -### `punycode.ucs2` - -#### `punycode.ucs2.decode(string)` - -Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. - -```js -punycode.ucs2.decode('abc'); -// → [0x61, 0x62, 0x63] -// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: -punycode.ucs2.decode('\uD834\uDF06'); -// → [0x1D306] -``` - -#### `punycode.ucs2.encode(codePoints)` - -Creates a string based on an array of numeric code point values. - -```js -punycode.ucs2.encode([0x61, 0x62, 0x63]); -// → 'abc' -punycode.ucs2.encode([0x1D306]); -// → '\uD834\uDF06' -``` - -### `punycode.version` - -A string representing the current Punycode.js version number. - -## For maintainers - -### How to publish a new release - -1. On the `main` branch, bump the version number in `package.json`: - - ```sh - npm version patch -m 'Release v%s' - ``` - - Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). - - Note that this produces a Git commit + tag. - -1. Push the release commit and tag: - - ```sh - git push && git push --tags - ``` - - Our CI then automatically publishes the new release to npm, under both the [`punycode`](https://www.npmjs.com/package/punycode) and [`punycode.js`](https://www.npmjs.com/package/punycode.js) names. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode.js/package.json b/node_modules/punycode.js/package.json deleted file mode 100644 index 7794798516..0000000000 --- a/node_modules/punycode.js/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "punycode.js", - "version": "2.3.1", - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "homepage": "https://mths.be/punycode", - "main": "punycode.js", - "jsnext:main": "punycode.es6.js", - "module": "punycode.es6.js", - "engines": { - "node": ">=6" - }, - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "contributors": [ - { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/punycode.js.git" - }, - "bugs": "https://github.com/mathiasbynens/punycode.js/issues", - "files": [ - "LICENSE-MIT.txt", - "punycode.js", - "punycode.es6.js" - ], - "scripts": { - "test": "mocha tests", - "build": "node scripts/prepublish.js" - }, - "devDependencies": { - "codecov": "^3.8.3", - "nyc": "^15.1.0", - "mocha": "^10.2.0" - }, - "jspm": { - "map": { - "./punycode.js": { - "node": "@node/punycode" - } - } - } -} diff --git a/node_modules/punycode.js/punycode.es6.js b/node_modules/punycode.js/punycode.es6.js deleted file mode 100644 index dadece25b3..0000000000 --- a/node_modules/punycode.js/punycode.es6.js +++ /dev/null @@ -1,444 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, callback) { - const result = []; - let length = array.length; - while (length--) { - result[length] = callback(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {String} A new string of characters returned by the callback - * function. - */ -function mapDomain(domain, callback) { - const parts = domain.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - domain = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - domain = domain.replace(regexSeparators, '\x2E'); - const labels = domain.split('.'); - const encoded = map(labels, callback).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = codePoints => String.fromCodePoint(...codePoints); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint >= 0x30 && codePoint < 0x3A) { - return 26 + (codePoint - 0x30); - } - if (codePoint >= 0x41 && codePoint < 0x5B) { - return codePoint - 0x41; - } - if (codePoint >= 0x61 && codePoint < 0x7B) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - const oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base) { - error('invalid-input'); - } - if (digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - const inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - const basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue === n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.3.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; -export default punycode; diff --git a/node_modules/punycode.js/punycode.js b/node_modules/punycode.js/punycode.js deleted file mode 100644 index a1ef251924..0000000000 --- a/node_modules/punycode.js/punycode.js +++ /dev/null @@ -1,443 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, callback) { - const result = []; - let length = array.length; - while (length--) { - result[length] = callback(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {String} A new string of characters returned by the callback - * function. - */ -function mapDomain(domain, callback) { - const parts = domain.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - domain = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - domain = domain.replace(regexSeparators, '\x2E'); - const labels = domain.split('.'); - const encoded = map(labels, callback).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = codePoints => String.fromCodePoint(...codePoints); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint >= 0x30 && codePoint < 0x3A) { - return 26 + (codePoint - 0x30); - } - if (codePoint >= 0x41 && codePoint < 0x5B) { - return codePoint - 0x41; - } - if (codePoint >= 0x61 && codePoint < 0x7B) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - const oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base) { - error('invalid-input'); - } - if (digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - const inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - const basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue === n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.3.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -module.exports = punycode; diff --git a/node_modules/run-con/.circleci/config.yml b/node_modules/run-con/.circleci/config.yml deleted file mode 100644 index 6eaa0c8e10..0000000000 --- a/node_modules/run-con/.circleci/config.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: 2.1 -orbs: - node: circleci/node@5.1.0 -workflows: - node-tests: - jobs: - - node/test diff --git a/node_modules/run-con/.github/FUNDING.yml b/node_modules/run-con/.github/FUNDING.yml deleted file mode 100644 index f9d9ce5cb8..0000000000 --- a/node_modules/run-con/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -# These are supported funding model platforms - -issuehunt: goatandsheep/rc diff --git a/node_modules/run-con/.github/dependabot.yml b/node_modules/run-con/.github/dependabot.yml deleted file mode 100644 index f45b33e280..0000000000 --- a/node_modules/run-con/.github/dependabot.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: 2 -updates: -- package-ecosystem: npm - directory: "/" - schedule: - interval: daily - time: "10:00" - open-pull-requests-limit: 10 - versioning-strategy: increase diff --git a/node_modules/run-con/.github/workflows/coverage.yml b/node_modules/run-con/.github/workflows/coverage.yml deleted file mode 100644 index 0e6653cd91..0000000000 --- a/node_modules/run-con/.github/workflows/coverage.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Running Code Coverage - -on: [push, pull_request] - -permissions: read-all - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x, 16.x, 18.x, 20.x] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 2 - - - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: npm install - - - name: Run the tests - run: npm test -- --coverage - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - verbose: true diff --git a/node_modules/run-con/.github/workflows/dependabot.yml b/node_modules/run-con/.github/workflows/dependabot.yml deleted file mode 100644 index a4679eb58e..0000000000 --- a/node_modules/run-con/.github/workflows/dependabot.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: CreateDependabotIssue -on: - workflow_dispatch: - pull_request: - types: [opened, reopened] - -permissions: - actions: none - checks: none - contents: read - deployments: none - id-token: write - issues: write - discussions: none - packages: none - pages: none - pull-requests: none - repository-projects: none - security-events: none - statuses: none - -jobs: - issue: - runs-on: ubuntu-latest - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - steps: - - name: Checks if Dependabot PR - if: ${{github.event_name != 'pull_request'}} - run: echo "no dependabot" - - uses: actions/checkout@v3 - if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} - - - name: Open issue if Dependabot PR - if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} - env: - pr_title: ${{github.event.pull_request.title}} - pr_number: ${{github.event.pull_request.number}} - pr_url: ${{github.event.pull_request.url}} - run: | - title="Dependabot PR $pr_title opened" - body="Dependabot has opened PR #$pr_number - Link: $pr_url" - gh issue create --title "$title" --body "$body" diff --git a/node_modules/run-con/.github/workflows/issuehunt.yml b/node_modules/run-con/.github/workflows/issuehunt.yml deleted file mode 100644 index 67881e8ae7..0000000000 --- a/node_modules/run-con/.github/workflows/issuehunt.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Auto message for Issues -on: - issues: - types: [opened, reopened] - -permissions: - actions: none - checks: none - contents: read - deployments: none - id-token: write - issues: write - discussions: none - packages: none - pages: none - pull-requests: none - repository-projects: none - security-events: none - statuses: none - -jobs: - comment: - name: Hello new contributor - runs-on: ubuntu-latest - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v3 - - name: Posts comment - env: - issue_num: ${{github.event.issue.number}} - comment_message: "Hey, thank you for opening this issue! 🙂 To boost priority on this issue and support open source please tip the team at https://issuehunt.io/r/${{github.repository}}/issues/${{github.event.issue.number }}" - run: gh issue comment $issue_num --body "$comment_message" diff --git a/node_modules/run-con/LICENSE.APACHE2 b/node_modules/run-con/LICENSE.APACHE2 deleted file mode 100644 index c65fbe9d29..0000000000 --- a/node_modules/run-con/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/run-con/LICENSE.BSD b/node_modules/run-con/LICENSE.BSD deleted file mode 100644 index dd83f1731c..0000000000 --- a/node_modules/run-con/LICENSE.BSD +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2013, Dominic Tarr -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. diff --git a/node_modules/run-con/LICENSE.MIT b/node_modules/run-con/LICENSE.MIT deleted file mode 100644 index 2cb7d7e207..0000000000 --- a/node_modules/run-con/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/run-con/README.md b/node_modules/run-con/README.md deleted file mode 100644 index f3d146441c..0000000000 --- a/node_modules/run-con/README.md +++ /dev/null @@ -1,239 +0,0 @@ -# run-con - -Based on -[RC ![npm downloads](https://img.shields.io/npm/dt/rc.svg?style=flat-square)](https://www.npmjs.com/package/rc) - -> The non-configurable runtime configuration loader for lazy people. - -[![npm version](https://badgen.net/npm/v/run-con)](https://www.npmjs.com/package/run-con) -![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/npm/run-con) -[![codecov](https://codecov.io/gh/goatandsheep/rc/branch/main/graph/badge.svg?token=8XbycgIgai)](https://codecov.io/gh/goatandsheep/rc) -[![npm downloads](https://img.shields.io/npm/dt/run-con.svg?style=flat-square)](https://www.npmjs.com/package/run-con) -[![Known Vulnerabilities](https://snyk.io/test/github/goatandsheep/rc/badge.svg)](https://snyk.io/test/github/goatandsheep/rc) - -## Usage - -The only option is to pass run-con the name of your app, and your default configuration. - -```javascript -var conf = require('run-con')(appname, { - //defaults go here. - port: 2468, - - //defaults which are objects will be merged, not replaced - views: { - engine: 'jade' - } -}); -``` - -`run-con` will return your configuration options merged with the defaults you specify. -If you pass in a predefined defaults object, it will be mutated: - -```javascript -var conf = {}; -require('run-con')(appname, conf); -``` - -If `run-con` finds any config files for your app, the returned config object will have -a `configs` array containing their paths: - -```javascript -var appCfg = require('run-con')(appname, conf); -appCfg.configs[0] // /etc/appnamerc -appCfg.configs[1] // /home/dominictarr/.config/appname -appCfg.config // same as appCfg.configs[appCfg.configs.length - 1] -``` - -## Standards - -Given your application name (`appname`), run-con will look in all the obvious places for configuration. - - * command line arguments, parsed by minimist _(e.g. `--foo baz`, also nested: `--foo.bar=baz`)_ - * environment variables prefixed with `${appname}_` - * or use "\_\_" to indicate nested properties
          _(e.g. `appname_foo__bar__baz` => `foo.bar.baz`)_ - * if you passed an option `--config file` then from that file - * a local `.${appname}rc` or the first found looking in `./ ../ ../../ ../../../` etc. - * `$HOME/.${appname}rc` - * `$HOME/.${appname}/config` - * `$HOME/.config/${appname}` - * `$HOME/.config/${appname}/config` - * `/etc/${appname}rc` - * `/etc/${appname}/config` - * the defaults object you passed in. - -All configuration sources that were found will be flattened into one object, -so that sources **earlier** in this list override later ones. - - -## Configuration File Formats - -Configuration files (e.g. `.appnamerc`) may be in either [json](http://json.org/example) or [ini](http://en.wikipedia.org/wiki/INI_file) format. **No** file extension (`.json` or `.ini`) should be used. The example configurations below are equivalent: - - -#### Formatted as `ini` - -``` -; You can include comments in `ini` format if you want. - -dependsOn=0.10.0 - - -; `run-con` has built-in support for ini sections, see? - -[commands] - www = ./commands/www - console = ./commands/repl - - -; You can even do nested sections - -[generators.options] - engine = ejs - -[generators.modules] - new = generate-new - engine = generate-backend - -``` - -#### Formatted as `json` - -```javascript -{ - // You can even comment your JSON, if you want - "dependsOn": "0.10.0", - "commands": { - "www": "./commands/www", - "console": "./commands/repl" - }, - "generators": { - "options": { - "engine": "ejs" - }, - "modules": { - "new": "generate-new", - "backend": "generate-backend" - } - } -} -``` - -Comments are stripped from JSON config via [strip-json-comments](https://github.com/sindresorhus/strip-json-comments). - -> Since ini, and env variables do not have a standard for types, your application needs be prepared for strings. - -To ensure that string representations of booleans and numbers are always converted into their proper types (especially useful if you intend to do strict `===` comparisons), consider using a module such as [parse-strings-in-object](https://github.com/anselanza/parse-strings-in-object) to wrap the config object returned from run-con. - - -## Simple example demonstrating precedence -Assume you have an application like this (notice the hard-coded defaults passed to run-con): -``` -const conf = require('run-con')('myapp', { - port: 12345, - mode: 'test' -}); - -console.log(JSON.stringify(conf, null, 2)); -``` -You also have a file `config.json`, with these contents: -``` -{ - "port": 9000, - "foo": "from config json", - "something": "else" -} -``` -And a file `.myapprc` in the same folder, with these contents: -``` -{ - "port": "3001", - "foo": "bar" -} -``` -Here is the expected output from various commands: - -`node .` -``` -{ - "port": "3001", - "mode": "test", - "foo": "bar", - "_": [], - "configs": [ - "/Users/stephen/repos/conftest/.myapprc" - ], - "config": "/Users/stephen/repos/conftest/.myapprc" -} -``` -*Default `mode` from hard-coded object is retained, but port is overridden by `.myapprc` file (automatically found based on appname match), and `foo` is added.* - - -`node . --foo baz` -``` -{ - "port": "3001", - "mode": "test", - "foo": "baz", - "_": [], - "configs": [ - "/Users/stephen/repos/conftest/.myapprc" - ], - "config": "/Users/stephen/repos/conftest/.myapprc" -} -``` -*Same result as above but `foo` is overridden because command-line arguments take precedence over `.myapprc` file.* - -`node . --foo barbar --config config.json` -``` -{ - "port": 9000, - "mode": "test", - "foo": "barbar", - "something": "else", - "_": [], - "config": "config.json", - "configs": [ - "/Users/stephen/repos/conftest/.myapprc", - "config.json" - ] -} -``` -*Now the `port` comes from the `config.json` file specified (overriding the value from `.myapprc`), and `foo` value is overridden by command-line despite also being specified in the `config.json` file.* - - - -## Advanced Usage - -#### Pass in your own `argv` - -You may pass in your own `argv` as the third argument to `run-con`. This is in case you want to [use your own command-line opts parser](https://github.com/dominictarr/rc/pull/12). - -```javascript -require('run-con')(appname, defaults, customArgvParser); -``` - -## Pass in your own parser - -If you have a special need to use a non-standard parser, -you can do so by passing in the parser as the 4th argument. -(leave the 3rd as null to get the default args parser) - -```javascript -require('run-con')(appname, defaults, null, parser); -``` - -This may also be used to force a more strict format, -such as strict, valid JSON only. - -## Note on Performance - -`run-con` is running `fs.statSync`-- so make sure you don't use it in a hot code path (e.g. a request handler) - -## Credit - -Original author is @dominictarr - -## License - -Multi-licensed under the two-clause BSD License, MIT License, or Apache License, version 2.0 diff --git a/node_modules/run-con/browser.js b/node_modules/run-con/browser.js deleted file mode 100644 index 2a9767c9a3..0000000000 --- a/node_modules/run-con/browser.js +++ /dev/null @@ -1,7 +0,0 @@ - -// when this is loaded into the browser, -// just use the defaults... - -module.exports = function (name, defaults) { - return defaults -} diff --git a/node_modules/run-con/cli.js b/node_modules/run-con/cli.js deleted file mode 100755 index 34f1c04e6a..0000000000 --- a/node_modules/run-con/cli.js +++ /dev/null @@ -1,4 +0,0 @@ -#! /usr/bin/env node -var rc = require('./index') - -console.log(JSON.stringify(rc(process.argv[2]), false, 2)) diff --git a/node_modules/run-con/index.js b/node_modules/run-con/index.js deleted file mode 100644 index ef1c31987e..0000000000 --- a/node_modules/run-con/index.js +++ /dev/null @@ -1,53 +0,0 @@ -var cc = require('./lib/utils') -var join = require('path').join -var deepExtend = require('deep-extend') -var etc = '/etc' -var win = process.platform === "win32" -var home = win - ? process.env.USERPROFILE - : process.env.HOME - -module.exports = function (name, defaults, argv, parse) { - if('string' !== typeof name) - throw new Error('rc(name): name *must* be string') - if(!argv) - argv = require('minimist')(process.argv.slice(2)) - defaults = ( - 'string' === typeof defaults - ? cc.json(defaults) : defaults - ) || {} - - parse = parse || cc.parse - - var env = cc.env(name + '_') - - var configs = [defaults] - var configFiles = [] - function addConfigFile (file) { - if (configFiles.indexOf(file) >= 0) return - var fileConfig = cc.file(file) - if (fileConfig) { - configs.push(parse(fileConfig)) - configFiles.push(file) - } - } - - // which files do we look at? - if (!win) - [join(etc, name, 'config'), - join(etc, name + 'rc')].forEach(addConfigFile) - if (home) - [join(home, '.config', name, 'config'), - join(home, '.config', name), - join(home, '.' + name, 'config'), - join(home, '.' + name + 'rc')].forEach(addConfigFile) - addConfigFile(cc.find('.'+name+'rc')) - if (env.config) addConfigFile(env.config) - if (argv.config) addConfigFile(argv.config) - - return deepExtend.apply(null, configs.concat([ - env, - argv, - configFiles.length ? {configs: configFiles, config: configFiles[configFiles.length - 1]} : undefined, - ])) -} diff --git a/node_modules/run-con/package.json b/node_modules/run-con/package.json deleted file mode 100644 index a9e6ee4405..0000000000 --- a/node_modules/run-con/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "run-con", - "version": "1.3.2", - "description": "hardwired configuration loader", - "main": "index.js", - "browser": "browser.js", - "scripts": { - "test": "node test/test.js && node test/ini.js && node test/nested-env-vars.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/goatandsheep/rc.git" - }, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "keywords": [ - "config", - "rc", - "unix", - "defaults" - ], - "bin": "./cli.js", - "author": "Kemal Ahmed ", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - } -} diff --git a/node_modules/run-con/renovate.json b/node_modules/run-con/renovate.json deleted file mode 100644 index 8b1edd8cd3..0000000000 --- a/node_modules/run-con/renovate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" - ] -} diff --git a/node_modules/shebang-command/index.js b/node_modules/shebang-command/index.js deleted file mode 100644 index f35db30851..0000000000 --- a/node_modules/shebang-command/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; -const shebangRegex = require('shebang-regex'); - -module.exports = (string = '') => { - const match = string.match(shebangRegex); - - if (!match) { - return null; - } - - const [path, argument] = match[0].replace(/#! ?/, '').split(' '); - const binary = path.split('/').pop(); - - if (binary === 'env') { - return argument; - } - - return argument ? `${binary} ${argument}` : binary; -}; diff --git a/node_modules/shebang-command/license b/node_modules/shebang-command/license deleted file mode 100644 index db6bc32cc7..0000000000 --- a/node_modules/shebang-command/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Kevin Mårtensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-command/package.json b/node_modules/shebang-command/package.json deleted file mode 100644 index 18e3c04638..0000000000 --- a/node_modules/shebang-command/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "shebang-command", - "version": "2.0.0", - "description": "Get the command from a shebang", - "license": "MIT", - "repository": "kevva/shebang-command", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "github.com/kevva" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "cmd", - "command", - "parse", - "shebang" - ], - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "devDependencies": { - "ava": "^2.3.0", - "xo": "^0.24.0" - } -} diff --git a/node_modules/shebang-command/readme.md b/node_modules/shebang-command/readme.md deleted file mode 100644 index 84feb442d7..0000000000 --- a/node_modules/shebang-command/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command) - -> Get the command from a shebang - - -## Install - -``` -$ npm install shebang-command -``` - - -## Usage - -```js -const shebangCommand = require('shebang-command'); - -shebangCommand('#!/usr/bin/env node'); -//=> 'node' - -shebangCommand('#!/bin/bash'); -//=> 'bash' -``` - - -## API - -### shebangCommand(string) - -#### string - -Type: `string` - -String containing a shebang. diff --git a/node_modules/shebang-regex/index.d.ts b/node_modules/shebang-regex/index.d.ts deleted file mode 100644 index 61d034b31e..0000000000 --- a/node_modules/shebang-regex/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** -Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line. - -@example -``` -import shebangRegex = require('shebang-regex'); - -const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; - -shebangRegex.test(string); -//=> true - -shebangRegex.exec(string)[0]; -//=> '#!/usr/bin/env node' - -shebangRegex.exec(string)[1]; -//=> '/usr/bin/env node' -``` -*/ -declare const shebangRegex: RegExp; - -export = shebangRegex; diff --git a/node_modules/shebang-regex/index.js b/node_modules/shebang-regex/index.js deleted file mode 100644 index 63fc4a0b67..0000000000 --- a/node_modules/shebang-regex/index.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -module.exports = /^#!(.*)/; diff --git a/node_modules/shebang-regex/license b/node_modules/shebang-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/shebang-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-regex/package.json b/node_modules/shebang-regex/package.json deleted file mode 100644 index 00ab30feee..0000000000 --- a/node_modules/shebang-regex/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "shebang-regex", - "version": "3.0.0", - "description": "Regular expression for matching a shebang line", - "license": "MIT", - "repository": "sindresorhus/shebang-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "regex", - "regexp", - "shebang", - "match", - "test", - "line" - ], - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - } -} diff --git a/node_modules/shebang-regex/readme.md b/node_modules/shebang-regex/readme.md deleted file mode 100644 index 5ecf863aa3..0000000000 --- a/node_modules/shebang-regex/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex) - -> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line - - -## Install - -``` -$ npm install shebang-regex -``` - - -## Usage - -```js -const shebangRegex = require('shebang-regex'); - -const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; - -shebangRegex.test(string); -//=> true - -shebangRegex.exec(string)[0]; -//=> '#!/usr/bin/env node' - -shebangRegex.exec(string)[1]; -//=> '/usr/bin/env node' -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt deleted file mode 100644 index 954f2fa823..0000000000 --- a/node_modules/signal-exit/LICENSE.txt +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md deleted file mode 100644 index c55cd45ee3..0000000000 --- a/node_modules/signal-exit/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# signal-exit - -When you want to fire an event no matter how a process exits: - -- reaching the end of execution. -- explicitly having `process.exit(code)` called. -- having `process.kill(pid, sig)` called. -- receiving a fatal signal from outside the process - -Use `signal-exit`. - -```js -// Hybrid module, either works -import { onExit } from 'signal-exit' -// or: -// const { onExit } = require('signal-exit') - -onExit((code, signal) => { - console.log('process exited!', code, signal) -}) -``` - -## API - -`remove = onExit((code, signal) => {}, options)` - -The return value of the function is a function that will remove -the handler. - -Note that the function _only_ fires for signals if the signal -would cause the process to exit. That is, there are no other -listeners, and it is a fatal signal. - -If the global `process` object is not suitable for this purpose -(ie, it's unset, or doesn't have an `emit` method, etc.) then the -`onExit` function is a no-op that returns a no-op `remove` method. - -### Options - -- `alwaysLast`: Run this handler after any other signal or exit - handlers. This causes `process.emit` to be monkeypatched. - -### Capturing Signal Exits - -If the handler returns an exact boolean `true`, and the exit is a -due to signal, then the signal will be considered handled, and -will _not_ trigger a synthetic `process.kill(process.pid, -signal)` after firing the `onExit` handlers. - -In this case, it your responsibility as the caller to exit with a -signal (for example, by calling `process.kill()`) if you wish to -preserve the same exit status that would otherwise have occurred. -If you do not, then the process will likely exit gracefully with -status 0 at some point, assuming that no other terminating signal -or other exit trigger occurs. - -Prior to calling handlers, the `onExit` machinery is unloaded, so -any subsequent exits or signals will not be handled, even if the -signal is captured and the exit is thus prevented. - -Note that numeric code exits may indicate that the process is -already committed to exiting, for example due to a fatal -exception or unhandled promise rejection, and so there is no way to -prevent it safely. - -### Browser Fallback - -The `'signal-exit/browser'` module is the same fallback shim that -just doesn't do anything, but presents the same function -interface. - -Patches welcome to add something that hooks onto -`window.onbeforeunload` or similar, but it might just not be a -thing that makes sense there. diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json deleted file mode 100644 index ac176cec74..0000000000 --- a/node_modules/signal-exit/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "signal-exit", - "version": "4.1.0", - "description": "when you want to fire an event no matter how a process exits.", - "main": "./dist/cjs/index.js", - "module": "./dist/mjs/index.js", - "browser": "./dist/mjs/browser.js", - "types": "./dist/mjs/index.d.ts", - "exports": { - ".": { - "import": { - "types": "./dist/mjs/index.d.ts", - "default": "./dist/mjs/index.js" - }, - "require": { - "types": "./dist/cjs/index.d.ts", - "default": "./dist/cjs/index.js" - } - }, - "./signals": { - "import": { - "types": "./dist/mjs/signals.d.ts", - "default": "./dist/mjs/signals.js" - }, - "require": { - "types": "./dist/cjs/signals.d.ts", - "default": "./dist/cjs/signals.js" - } - }, - "./browser": { - "import": { - "types": "./dist/mjs/browser.d.ts", - "default": "./dist/mjs/browser.js" - }, - "require": { - "types": "./dist/cjs/browser.d.ts", - "default": "./dist/cjs/browser.js" - } - } - }, - "files": [ - "dist" - ], - "engines": { - "node": ">=14" - }, - "repository": { - "type": "git", - "url": "https://github.com/tapjs/signal-exit.git" - }, - "keywords": [ - "signal", - "exit" - ], - "author": "Ben Coe ", - "license": "ISC", - "devDependencies": { - "@types/cross-spawn": "^6.0.2", - "@types/node": "^18.15.11", - "@types/signal-exit": "^3.0.1", - "@types/tap": "^15.0.8", - "c8": "^7.13.0", - "prettier": "^2.8.6", - "tap": "^16.3.4", - "ts-node": "^10.9.1", - "typedoc": "^0.23.28", - "typescript": "^5.0.2" - }, - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "preprepare": "rm -rf dist", - "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json && bash ./scripts/fixup.sh", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "c8 tap", - "snap": "c8 tap", - "format": "prettier --write . --loglevel warn", - "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" - }, - "prettier": { - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "tap": { - "coverage": false, - "jobs": 1, - "node-arg": [ - "--no-warnings", - "--loader", - "ts-node/esm" - ], - "ts": false - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } -} diff --git a/node_modules/smol-toml/LICENSE b/node_modules/smol-toml/LICENSE deleted file mode 100644 index 1ed1c049b4..0000000000 --- a/node_modules/smol-toml/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) Squirrel Chat et al., All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/smol-toml/README.md b/node_modules/smol-toml/README.md deleted file mode 100644 index 0809b5e8c6..0000000000 --- a/node_modules/smol-toml/README.md +++ /dev/null @@ -1,192 +0,0 @@ -# smol-toml -[![TOML 1.0.0](https://img.shields.io/badge/TOML-1.0.0-9c4221?style=flat-square)](https://toml.io/en/v1.0.0) -[![License](https://img.shields.io/github/license/squirrelchat/smol-toml.svg?style=flat-square)](https://github.com/squirrelchat/smol-toml/blob/mistress/LICENSE) -[![npm](https://img.shields.io/npm/v/smol-toml?style=flat-square)](https://npm.im/smol-toml) -[![Build](https://img.shields.io/github/actions/workflow/status/squirrelchat/smol-toml/build.yml?style=flat-square&logo=github)](https://github.com/squirrelchat/smol-toml/actions/workflows/build.yml) - -A small, fast, and correct TOML parser and serializer. smol-toml is fully(ish) spec-compliant with TOML v1.0.0. - -Why yet another TOML parser? Well, the ecosystem of TOML parsers in JavaScript is quite underwhelming, most likely due -to a lack of interest. With most parsers being outdated, unmaintained, non-compliant, or a combination of these, a new -parser didn't feel too out of place. - -*[insert xkcd 927]* - -smol-toml passes most of the tests from the [`toml-test` suite](https://github.com/toml-lang/toml-test); use the -`run-toml-test.bash` script to run the tests. Due to the nature of JavaScript and the limits of the language, -it doesn't pass certain tests, namely: -- Invalid UTF-8 strings are not rejected -- Certain invalid UTF-8 codepoints are not rejected -- Certain invalid dates are not rejected - - For instance, `2023-02-30` would be accepted and parsed as `2023-03-02`. While additional checks could be performed - to reject these, they've not been added for performance reasons. -- smol-toml doesn't preserve type information between integers and floats (in JS, everything is a float) - -You can see a list of all tests smol-toml fails (and the reason why it fails these) in the list of skipped tests in -`run-toml-test.bash`. Note that some failures are *not* specification violations per-se. For instance, the TOML spec -does not require 64-bit integer range support or sub-millisecond time precision, but are included in the `toml-test` -suite. See https://github.com/toml-lang/toml-test/issues/154 and https://github.com/toml-lang/toml-test/issues/155 - -## Installation -``` -[pnpm | yarn | npm] i smol-toml -``` - -## Usage -```js -import { parse, stringify } from 'smol-toml' - -const doc = '...' -const parsed = parse(doc) -console.log(parsed) - -const toml = stringify(parsed) -console.log(toml) -``` - -Alternatively, if you prefer something similar to the JSON global, you can import the library as follows -```js -import TOML from 'smol-toml' - -TOML.stringify({ ... }) -``` - -A few notes on the `stringify` function: -- `undefined` and `null` values on objects are ignored (does not produce a key/value). -- `undefined` and `null` values in arrays are **rejected**. -- Functions, classes and symbols are **rejected**. -- floats will be serialized as integers if they don't have a decimal part. - - `stringify(parse('a = 1.0')) === 'a = 1'` -- JS `Date` will be serialized as Offset Date Time - - Use the [`TomlDate` object](#dates) for representing other types. - -### Dates -`smol-toml` uses an extended `Date` object to represent all types of TOML Dates. In the future, `smol-toml` will use -objects from the Temporal proposal, but for now we're stuck with the legacy Date object. - -```js -import { TomlDate } from 'smol-toml' - -// Offset Date Time -const date = new TomlDate('1979-05-27T07:32:00.000-08:00') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, false -console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000-08:00 - -// Local Date Time -const date = new TomlDate('1979-05-27T07:32:00.000') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, true -console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000 - -// Local Date -const date = new TomlDate('1979-05-27') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, true, false, true -console.log(date.toISOString()) // ~> 1979-05-27 - -// Local Time -const date = new TomlDate('07:32:00') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, false, true, true -console.log(date.toISOString()) // ~> 07:32:00.000 -``` - -You can also wrap a native `Date` object and specify using different methods depending on the type of date you wish -to represent: - -```js -import { TomlDate } from 'smol-toml' - -const jsDate = new Date() - -const offsetDateTime = TomlDate.wrapAsOffsetDateTime(jsDate) -const localDateTime = TomlDate.wrapAsLocalDateTime(jsDate) -const localDate = TomlDate.wrapAsLocalDate(jsDate) -const localTime = TomlDate.wrapAsLocalTime(jsDate) -``` - -## Performance -A note on these performance numbers: in some highly synthetic tests, other parsers such as `fast-toml` greatly -outperform other parsers, mostly due to their lack of compliance with the spec. For example, to parse a string, -`fast-toml` skips the entire string while `smol-toml` does validate the string, costing a fair share of performance. - -The ~5MB test file used for benchmark here is filled with random data which attempts to be close-ish to reality in -terms of structure. The idea is to have a file relatively close to a real-world application, with moderately sized -strings etc. - -The large TOML generator can be found [here](https://gist.github.com/cyyynthia/e77c744cb6494dabe37d0182506526b9) - -| **Parse** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | fast-toml | -|----------------|---------------------|-------------------|-----------------|-----------------| -| Spec example | **71,356.51 op/s** | 33,629.31 op/s | 16,433.86 op/s | 29,421.60 op/s | -| ~5MB test file | **3.8091 op/s** | *DNF* | 2.4369 op/s | 2.6078 op/s | - -| **Stringify** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | -|----------------|----------------------|-------------------|----------------| -| Spec example | **195,191.99 op/s** | 46,583.07 op/s | 5,670.12 op/s | -| ~5MB test file | **14.6709 op/s** | 3.5941 op/s | 0.7856 op/s | - -
          -Detailed benchmark data - -Tests ran using Vitest v0.31.0 on commit f58cb6152e667e9cea09f31c93d90652e3b82bf5 - -CPU: Intel Core i7 7700K (4.2GHz) - -``` - RUN v0.31.0 - - ✓ bench/parseSpecExample.bench.ts (4) 2462ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 71,356.51 0.0132 0.2633 0.0140 0.0137 0.0219 0.0266 0.1135 ±0.37% 35679 fastest - · @iarna/toml 33,629.31 0.0272 0.2629 0.0297 0.0287 0.0571 0.0650 0.1593 ±0.45% 16815 - · @ltd/j-toml 16,433.86 0.0523 1.3088 0.0608 0.0550 0.1140 0.1525 0.7348 ±1.47% 8217 slowest - · fast-toml 29,421.60 0.0305 0.2995 0.0340 0.0312 0.0618 0.0640 0.1553 ±0.47% 14711 - ✓ bench/parseLargeMixed.bench.ts (3) 16062ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 3.8091 239.60 287.30 262.53 274.17 287.30 287.30 287.30 ±3.66% 10 fastest - · @ltd/j-toml 2.4369 376.73 493.49 410.35 442.58 493.49 493.49 493.49 ±7.08% 10 slowest - · fast-toml 2.6078 373.88 412.79 383.47 388.62 412.79 412.79 412.79 ±2.72% 10 - ✓ bench/stringifySpecExample.bench.ts (3) 1886ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 195,191.99 0.0047 0.2704 0.0051 0.0050 0.0099 0.0110 0.0152 ±0.41% 97596 fastest - · @iarna/toml 46,583.07 0.0197 0.2808 0.0215 0.0208 0.0448 0.0470 0.1704 ±0.47% 23292 - · @ltd/j-toml 5,670.12 0.1613 0.5768 0.1764 0.1726 0.3036 0.3129 0.4324 ±0.56% 2836 slowest - ✓ bench/stringifyLargeMixed.bench.ts (3) 24057ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 14.6709 65.1071 79.2199 68.1623 67.1088 79.2199 79.2199 79.2199 ±5.25% 10 fastest - · @iarna/toml 3.5941 266.48 295.24 278.24 290.10 295.24 295.24 295.24 ±2.83% 10 - · @ltd/j-toml 0.7856 1,254.33 1,322.05 1,272.87 1,286.82 1,322.05 1,322.05 1,322.05 ±1.37% 10 slowest - - - BENCH Summary - - smol-toml - bench/parseLargeMixed.bench.ts > - 1.46x faster than fast-toml - 1.56x faster than @ltd/j-toml - - smol-toml - bench/parseSpecExample.bench.ts > - 2.12x faster than @iarna/toml - 2.43x faster than fast-toml - 4.34x faster than @ltd/j-toml - - smol-toml - bench/stringifyLargeMixed.bench.ts > - 4.00x faster than @iarna/toml - 18.33x faster than @ltd/j-toml - - smol-toml - bench/stringifySpecExample.bench.ts > - 4.19x faster than @iarna/toml - 34.42x faster than @ltd/j-toml -``` - ---- -Additional notes: - -I initially tried to benchmark `toml-nodejs`, but the 0.3.0 package is broken. -I initially reported this to the library author, but the author decided to -- a) advise to use a custom loader (via *experimental* flag) to circumvent the invalid imports. - - Said flag, `--experimental-specifier-resolution`, has been removed in Node v20. -- b) [delete the issue](https://github.com/huan231/toml-nodejs/issues/12) when pointed out links to the NodeJS -documentation about the flag removal and standard resolution algorithm. - -For the reference anyway, `toml-nodejs` (with proper imports) is ~8x slower on both parse benchmark with: -- spec example: 7,543.47 op/s -- 5mb mixed: 0.7006 op/s -
          diff --git a/node_modules/smol-toml/package.json b/node_modules/smol-toml/package.json deleted file mode 100644 index b144aea9ce..0000000000 --- a/node_modules/smol-toml/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "smol-toml", - "license": "BSD-3-Clause", - "version": "1.3.1", - "description": "A small, fast, and correct TOML parser/serializer", - "author": "Cynthia ", - "repository": "github:squirrelchat/smol-toml", - "bugs": "https://github.com/squirrelchat/smol-toml/issues", - "funding": "https://github.com/sponsors/cyyynthia", - "keywords": [ - "toml", - "parser", - "serializer" - ], - "type": "module", - "packageManager": "pnpm@9.12.3", - "engines": { - "node": ">= 18" - }, - "scripts": { - "test": "vitest", - "test-ui": "vitest --ui", - "bench": "vitest bench", - "build": "pnpm run build:mjs && pnpm run build:cjs && node test/package/package-test.mjs", - "build:mjs": "tsc", - "build:cjs": "esbuild dist/index.js --bundle --platform=node --target=node18 --format=cjs --outfile=dist/index.cjs" - }, - "devDependencies": { - "@iarna/toml": "3.0.0", - "@ltd/j-toml": "^1.38.0", - "@tsconfig/node-lts": "^22.0.0", - "@tsconfig/strictest": "^2.0.5", - "@types/node": "^22.9.0", - "@vitest/ui": "^2.1.5", - "esbuild": "^0.24.0", - "fast-toml": "^0.5.4", - "typescript": "^5.6.3", - "vitest": "^2.1.5" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.cjs" - }, - "files": [ - "README.md", - "LICENSE", - "dist" - ] -} diff --git a/node_modules/string-width-cjs/index.d.ts b/node_modules/string-width-cjs/index.d.ts deleted file mode 100644 index 12b5309751..0000000000 --- a/node_modules/string-width-cjs/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -declare const stringWidth: { - /** - Get the visual width of a string - the number of columns required to display it. - - Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - - @example - ``` - import stringWidth = require('string-width'); - - stringWidth('a'); - //=> 1 - - stringWidth('古'); - //=> 2 - - stringWidth('\u001B[1m古\u001B[22m'); - //=> 2 - ``` - */ - (string: string): number; - - // TODO: remove this in the next major version, refactor the whole definition to: - // declare function stringWidth(string: string): number; - // export = stringWidth; - default: typeof stringWidth; -} - -export = stringWidth; diff --git a/node_modules/string-width-cjs/index.js b/node_modules/string-width-cjs/index.js deleted file mode 100644 index f4d261a96a..0000000000 --- a/node_modules/string-width-cjs/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -const stripAnsi = require('strip-ansi'); -const isFullwidthCodePoint = require('is-fullwidth-code-point'); -const emojiRegex = require('emoji-regex'); - -const stringWidth = string => { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - string = stripAnsi(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - let width = 0; - - for (let i = 0; i < string.length; i++) { - const code = string.codePointAt(i); - - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } - - // Surrogates - if (code > 0xFFFF) { - i++; - } - - width += isFullwidthCodePoint(code) ? 2 : 1; - } - - return width; -}; - -module.exports = stringWidth; -// TODO: remove this in the next major version -module.exports.default = stringWidth; diff --git a/node_modules/string-width-cjs/license b/node_modules/string-width-cjs/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/string-width-cjs/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 2dbf6af2b6..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -declare namespace ansiRegex { - interface Options { - /** - Match only the first ANSI escape. - - @default false - */ - onlyFirst: boolean; - } -} - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -declare function ansiRegex(options?: ansiRegex.Options): RegExp; - -export = ansiRegex; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js deleted file mode 100644 index 616ff837d3..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/license b/node_modules/string-width-cjs/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/package.json b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json deleted file mode 100644 index 017f53116a..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "ansi-regex", - "version": "5.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.9.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md deleted file mode 100644 index 4d848bc36f..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`
          -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md deleted file mode 100644 index f10e173335..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) - -_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. - -This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install emoji-regex -``` - -In [Node.js](https://nodejs.org/): - -```js -const emojiRegex = require('emoji-regex'); -// Note: because the regular expression has the global flag set, this module -// exports a function that returns the regex rather than exporting the regular -// expression itself, to make it impossible to (accidentally) mutate the -// original regular expression. - -const text = ` -\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) -\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji -\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) -\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier -`; - -const regex = emojiRegex(); -let match; -while (match = regex.exec(text)) { - const emoji = match[0]; - console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); -} -``` - -Console output: - -``` -Matched sequence ⌚ — code points: 1 -Matched sequence ⌚ — code points: 1 -Matched sequence ↔️ — code points: 2 -Matched sequence ↔️ — code points: 2 -Matched sequence 👩 — code points: 1 -Matched sequence 👩 — code points: 1 -Matched sequence 👩🏿 — code points: 2 -Matched sequence 👩🏿 — code points: 2 -``` - -To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: - -```js -const emojiRegex = require('emoji-regex/text.js'); -``` - -Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: - -```js -const emojiRegex = require('emoji-regex/es2015/index.js'); -const emojiRegexText = require('emoji-regex/es2015/text.js'); -``` - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js deleted file mode 100644 index b4cf3dcd38..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js deleted file mode 100644 index 780309df58..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts deleted file mode 100644 index 1955b4704e..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'emoji-regex' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js deleted file mode 100644 index d993a3a99c..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json deleted file mode 100644 index 6d32352829..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "emoji-regex", - "version": "8.0.0", - "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", - "homepage": "https://mths.be/emoji-regex", - "main": "index.js", - "types": "index.d.ts", - "keywords": [ - "unicode", - "regex", - "regexp", - "regular expressions", - "code points", - "symbols", - "characters", - "emoji" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/emoji-regex.git" - }, - "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", - "files": [ - "LICENSE-MIT.txt", - "index.js", - "index.d.ts", - "text.js", - "es2015/index.js", - "es2015/text.js" - ], - "scripts": { - "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", - "test": "mocha", - "test:watch": "npm run test -- --watch" - }, - "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/preset-env": "^7.3.4", - "mocha": "^6.0.2", - "regexgen": "^1.3.0", - "unicode-12.0.0": "^0.7.9" - } -} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js deleted file mode 100644 index 0a55ce2f23..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts deleted file mode 100644 index 907fccc292..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -declare function stripAnsi(string: string): string; - -export = stripAnsi; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js deleted file mode 100644 index 9a593dfcd1..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/license b/node_modules/string-width-cjs/node_modules/strip-ansi/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/package.json b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json deleted file mode 100644 index 1a41108d42..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "strip-ansi", - "version": "6.0.1", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.10.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md deleted file mode 100644 index 7c4b56d46d..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/string-width-cjs/package.json b/node_modules/string-width-cjs/package.json deleted file mode 100644 index 28ba7b4cae..0000000000 --- a/node_modules/string-width-cjs/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "string-width", - "version": "4.2.3", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "string", - "character", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.1", - "xo": "^0.24.0" - } -} diff --git a/node_modules/string-width-cjs/readme.md b/node_modules/string-width-cjs/readme.md deleted file mode 100644 index bdd314129c..0000000000 --- a/node_modules/string-width-cjs/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/string-width/index.d.ts b/node_modules/string-width/index.d.ts deleted file mode 100644 index aed9fdffeb..0000000000 --- a/node_modules/string-width/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export interface Options { - /** - Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). - - @default true - */ - readonly ambiguousIsNarrow: boolean; -} - -/** -Get the visual width of a string - the number of columns required to display it. - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -@example -``` -import stringWidth from 'string-width'; - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` -*/ -export default function stringWidth(string: string, options?: Options): number; diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js deleted file mode 100644 index 9294488f88..0000000000 --- a/node_modules/string-width/index.js +++ /dev/null @@ -1,54 +0,0 @@ -import stripAnsi from 'strip-ansi'; -import eastAsianWidth from 'eastasianwidth'; -import emojiRegex from 'emoji-regex'; - -export default function stringWidth(string, options = {}) { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - options = { - ambiguousIsNarrow: true, - ...options - }; - - string = stripAnsi(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2; - let width = 0; - - for (const character of string) { - const codePoint = character.codePointAt(0); - - // Ignore control characters - if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (codePoint >= 0x300 && codePoint <= 0x36F) { - continue; - } - - const code = eastAsianWidth.eastAsianWidth(character); - switch (code) { - case 'F': - case 'W': - width += 2; - break; - case 'A': - width += ambiguousCharacterWidth; - break; - default: - width += 1; - } - } - - return width; -} diff --git a/node_modules/string-width/license b/node_modules/string-width/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/string-width/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json deleted file mode 100644 index f46d6770f9..0000000000 --- a/node_modules/string-width/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "string-width", - "version": "5.1.2", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "funding": "https://github.com/sponsors/sindresorhus", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "string", - "character", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "devDependencies": { - "ava": "^3.15.0", - "tsd": "^0.14.0", - "xo": "^0.38.2" - } -} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md deleted file mode 100644 index 52910df1ab..0000000000 --- a/node_modules/string-width/readme.md +++ /dev/null @@ -1,67 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - -## Install - -``` -$ npm install string-width -``` - -## Usage - -```js -import stringWidth from 'string-width'; - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - -## API - -### stringWidth(string, options?) - -#### string - -Type: `string` - -The string to be counted. - -#### options - -Type: `object` - -##### ambiguousIsNarrow - -Type: `boolean`\ -Default: `false` - -Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/strip-ansi-cjs/index.d.ts b/node_modules/strip-ansi-cjs/index.d.ts deleted file mode 100644 index 907fccc292..0000000000 --- a/node_modules/strip-ansi-cjs/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -declare function stripAnsi(string: string): string; - -export = stripAnsi; diff --git a/node_modules/strip-ansi-cjs/index.js b/node_modules/strip-ansi-cjs/index.js deleted file mode 100644 index 9a593dfcd1..0000000000 --- a/node_modules/strip-ansi-cjs/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/strip-ansi-cjs/license b/node_modules/strip-ansi-cjs/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/strip-ansi-cjs/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 2dbf6af2b6..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -declare namespace ansiRegex { - interface Options { - /** - Match only the first ANSI escape. - - @default false - */ - onlyFirst: boolean; - } -} - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -declare function ansiRegex(options?: ansiRegex.Options): RegExp; - -export = ansiRegex; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js deleted file mode 100644 index 616ff837d3..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json deleted file mode 100644 index 017f53116a..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "ansi-regex", - "version": "5.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.9.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md deleted file mode 100644 index 4d848bc36f..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`
          -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/strip-ansi-cjs/package.json b/node_modules/strip-ansi-cjs/package.json deleted file mode 100644 index 1a41108d42..0000000000 --- a/node_modules/strip-ansi-cjs/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "strip-ansi", - "version": "6.0.1", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.10.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/strip-ansi-cjs/readme.md b/node_modules/strip-ansi-cjs/readme.md deleted file mode 100644 index 7c4b56d46d..0000000000 --- a/node_modules/strip-ansi-cjs/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/strip-ansi/index.d.ts b/node_modules/strip-ansi/index.d.ts deleted file mode 100644 index 44e954d0c7..0000000000 --- a/node_modules/strip-ansi/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi from 'strip-ansi'; - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -export default function stripAnsi(string: string): string; diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js deleted file mode 100644 index ba19750e64..0000000000 --- a/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import ansiRegex from 'ansi-regex'; - -const regex = ansiRegex(); - -export default function stripAnsi(string) { - if (typeof string !== 'string') { - throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); - } - - // Even though the regex is global, we don't need to reset the `.lastIndex` - // because unlike `.exec()` and `.test()`, `.replace()` does it automatically - // and doing it manually has a performance penalty. - return string.replace(regex, ''); -} diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json deleted file mode 100644 index e1f455c325..0000000000 --- a/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "strip-ansi", - "version": "7.1.0", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "funding": "https://github.com/chalk/strip-ansi?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "devDependencies": { - "ava": "^3.15.0", - "tsd": "^0.17.0", - "xo": "^0.44.0" - } -} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md deleted file mode 100644 index 562785107b..0000000000 --- a/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -# strip-ansi - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - -## Install - -``` -$ npm install strip-ansi -``` - -## Usage - -```js -import stripAnsi from 'strip-ansi'; - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/strip-json-comments/index.d.ts b/node_modules/strip-json-comments/index.d.ts deleted file mode 100644 index 28ba3c8a80..0000000000 --- a/node_modules/strip-json-comments/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -declare namespace stripJsonComments { - interface Options { - /** - Replace comments with whitespace instead of stripping them entirely. - - @default true - */ - readonly whitespace?: boolean; - } -} - -/** -Strip comments from JSON. Lets you use comments in your JSON files! - -It will replace single-line comments `//` and multi-line comments `/**\/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. - -@param jsonString - Accepts a string with JSON. -@returns A JSON string without comments. - -@example -``` -const json = `{ - // Rainbows - "unicorn": "cake" -}`; - -JSON.parse(stripJsonComments(json)); -//=> {unicorn: 'cake'} -``` -*/ -declare function stripJsonComments( - jsonString: string, - options?: stripJsonComments.Options -): string; - -export = stripJsonComments; diff --git a/node_modules/strip-json-comments/index.js b/node_modules/strip-json-comments/index.js deleted file mode 100644 index bb00b38baf..0000000000 --- a/node_modules/strip-json-comments/index.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; -const singleComment = Symbol('singleComment'); -const multiComment = Symbol('multiComment'); -const stripWithoutWhitespace = () => ''; -const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' '); - -const isEscaped = (jsonString, quotePosition) => { - let index = quotePosition - 1; - let backslashCount = 0; - - while (jsonString[index] === '\\') { - index -= 1; - backslashCount += 1; - } - - return Boolean(backslashCount % 2); -}; - -module.exports = (jsonString, options = {}) => { - if (typeof jsonString !== 'string') { - throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``); - } - - const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; - - let insideString = false; - let insideComment = false; - let offset = 0; - let result = ''; - - for (let i = 0; i < jsonString.length; i++) { - const currentCharacter = jsonString[i]; - const nextCharacter = jsonString[i + 1]; - - if (!insideComment && currentCharacter === '"') { - const escaped = isEscaped(jsonString, i); - if (!escaped) { - insideString = !insideString; - } - } - - if (insideString) { - continue; - } - - if (!insideComment && currentCharacter + nextCharacter === '//') { - result += jsonString.slice(offset, i); - offset = i; - insideComment = singleComment; - i++; - } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') { - i++; - insideComment = false; - result += strip(jsonString, offset, i); - offset = i; - continue; - } else if (insideComment === singleComment && currentCharacter === '\n') { - insideComment = false; - result += strip(jsonString, offset, i); - offset = i; - } else if (!insideComment && currentCharacter + nextCharacter === '/*') { - result += jsonString.slice(offset, i); - offset = i; - insideComment = multiComment; - i++; - continue; - } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') { - i++; - insideComment = false; - result += strip(jsonString, offset, i + 1); - offset = i + 1; - continue; - } - } - - return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset)); -}; diff --git a/node_modules/strip-json-comments/license b/node_modules/strip-json-comments/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/strip-json-comments/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-json-comments/package.json b/node_modules/strip-json-comments/package.json deleted file mode 100644 index ce7875aa0d..0000000000 --- a/node_modules/strip-json-comments/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "strip-json-comments", - "version": "3.1.1", - "description": "Strip comments from JSON. Lets you use comments in your JSON files!", - "license": "MIT", - "repository": "sindresorhus/strip-json-comments", - "funding": "https://github.com/sponsors/sindresorhus", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "bench": "matcha benchmark.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "json", - "strip", - "comments", - "remove", - "delete", - "trim", - "multiline", - "parse", - "config", - "configuration", - "settings", - "util", - "env", - "environment", - "jsonc" - ], - "devDependencies": { - "ava": "^1.4.1", - "matcha": "^0.7.0", - "tsd": "^0.7.2", - "xo": "^0.24.0" - } -} diff --git a/node_modules/strip-json-comments/readme.md b/node_modules/strip-json-comments/readme.md deleted file mode 100644 index cc542e50cf..0000000000 --- a/node_modules/strip-json-comments/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# strip-json-comments [![Build Status](https://travis-ci.com/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.com/github/sindresorhus/strip-json-comments) - -> Strip comments from JSON. Lets you use comments in your JSON files! - -This is now possible: - -```js -{ - // Rainbows - "unicorn": /* ❤ */ "cake" -} -``` - -It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. - -Also available as a [Gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[Grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[Broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. - -## Install - -``` -$ npm install strip-json-comments -``` - -## Usage - -```js -const json = `{ - // Rainbows - "unicorn": /* ❤ */ "cake" -}`; - -JSON.parse(stripJsonComments(json)); -//=> {unicorn: 'cake'} -``` - -## API - -### stripJsonComments(jsonString, options?) - -#### jsonString - -Type: `string` - -Accepts a string with JSON and returns a string without comments. - -#### options - -Type: `object` - -##### whitespace - -Type: `boolean`\ -Default: `true` - -Replace comments with whitespace instead of stripping them entirely. - -## Benchmark - -``` -$ npm run bench -``` - -## Related - -- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module -- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/uc.micro/LICENSE.txt b/node_modules/uc.micro/LICENSE.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/uc.micro/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/uc.micro/README.md b/node_modules/uc.micro/README.md deleted file mode 100644 index 7707da48cc..0000000000 --- a/node_modules/uc.micro/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# uc.micro - -[![CI](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml) -[![NPM version](https://img.shields.io/npm/v/uc.micro.svg?style=flat)](https://www.npmjs.org/package/uc.micro) - -> Micro subset of unicode data files for [markdown-it](https://github.com/markdown-it) projects. - -Content of this repo is autogenerated from `unicode-` package, -maintained by [Mathias Bynens](https://github.com/mathiasbynens). - -That's just a proxy to reduce dependencies/install size. - -**This package content is ONLY for [markdown-it](https://github.com/markdown-it) -projects needs. Don't ask to extend it!** diff --git a/node_modules/uc.micro/categories/Cc/regex.mjs b/node_modules/uc.micro/categories/Cc/regex.mjs deleted file mode 100644 index 91cd397c32..0000000000 --- a/node_modules/uc.micro/categories/Cc/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\0-\x1F\x7F-\x9F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Cf/regex.mjs b/node_modules/uc.micro/categories/Cf/regex.mjs deleted file mode 100644 index bb58c7d3eb..0000000000 --- a/node_modules/uc.micro/categories/Cf/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/P/regex.mjs b/node_modules/uc.micro/categories/P/regex.mjs deleted file mode 100644 index b084264585..0000000000 --- a/node_modules/uc.micro/categories/P/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[!-#%-\*,-\/:;\?@\[-\]_\{\}\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]|\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\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\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]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/S/regex.mjs b/node_modules/uc.micro/categories/S/regex.mjs deleted file mode 100644 index 45a2624c7e..0000000000 --- a/node_modules/uc.micro/categories/S/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\$\+<->\^`\|~\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-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\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]|\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\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Z/regex.mjs b/node_modules/uc.micro/categories/Z/regex.mjs deleted file mode 100644 index 6f154197bb..0000000000 --- a/node_modules/uc.micro/categories/Z/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ \ No newline at end of file diff --git a/node_modules/uc.micro/index.mjs b/node_modules/uc.micro/index.mjs deleted file mode 100644 index 21b80d34ac..0000000000 --- a/node_modules/uc.micro/index.mjs +++ /dev/null @@ -1,8 +0,0 @@ -import Any from './properties/Any/regex.mjs'; -import Cc from './categories/Cc/regex.mjs'; -import Cf from './categories/Cf/regex.mjs'; -import P from './categories/P/regex.mjs'; -import S from './categories/S/regex.mjs'; -import Z from './categories/Z/regex.mjs'; - -export { Any, Cc, Cf, P, S, Z }; diff --git a/node_modules/uc.micro/package.json b/node_modules/uc.micro/package.json deleted file mode 100644 index 73102ce5a5..0000000000 --- a/node_modules/uc.micro/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "uc.micro", - "version": "2.1.0", - "description": "Micro subset of unicode data files for markdown-it projects.", - "repository": "markdown-it/uc.micro", - "license": "MIT", - "main": "build/index.cjs.js", - "module": "index.mjs", - "exports": { - ".": { - "require": "./build/index.cjs.js", - "import": "./index.mjs" - }, - "./*": { - "require": "./*", - "import": "./*" - } - }, - "files": [ - "index.mjs", - "categories/", - "properties/", - "build/" - ], - "scripts": { - "test": "npm run build && mocha", - "build": "rollup -c", - "update": "node update.mjs && npm test", - "prepublishOnly": "npm run build" - }, - "devDependencies": { - "@unicode/unicode-15.1.0": "^1.5.2", - "mocha": "^10.2.0", - "rollup": "^4.6.1", - "shelljs": "^0.8.5" - } -} diff --git a/node_modules/uc.micro/properties/Any/regex.mjs b/node_modules/uc.micro/properties/Any/regex.mjs deleted file mode 100644 index 72d3b16d55..0000000000 --- a/node_modules/uc.micro/properties/Any/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ \ No newline at end of file diff --git a/node_modules/which/CHANGELOG.md b/node_modules/which/CHANGELOG.md deleted file mode 100644 index 7fb1f2033c..0000000000 --- a/node_modules/which/CHANGELOG.md +++ /dev/null @@ -1,166 +0,0 @@ -# Changes - - -## 2.0.2 - -* Rename bin to `node-which` - -## 2.0.1 - -* generate changelog and publish on version bump -* enforce 100% test coverage -* Promise interface - -## 2.0.0 - -* Parallel tests, modern JavaScript, and drop support for node < 8 - -## 1.3.1 - -* update deps -* update travis - -## v1.3.0 - -* Add nothrow option to which.sync -* update tap - -## v1.2.14 - -* appveyor: drop node 5 and 0.x -* travis-ci: add node 6, drop 0.x - -## v1.2.13 - -* test: Pass missing option to pass on windows -* update tap -* update isexe to 2.0.0 -* neveragain.tech pledge request - -## v1.2.12 - -* Removed unused require - -## v1.2.11 - -* Prevent changelog script from being included in package - -## v1.2.10 - -* Use env.PATH only, not env.Path - -## v1.2.9 - -* fix for paths starting with ../ -* Remove unused `is-absolute` module - -## v1.2.8 - -* bullet items in changelog that contain (but don't start with) # - -## v1.2.7 - -* strip 'update changelog' changelog entries out of changelog - -## v1.2.6 - -* make the changelog bulleted - -## v1.2.5 - -* make a changelog, and keep it up to date -* don't include tests in package -* Properly handle relative-path executables -* appveyor -* Attach error code to Not Found error -* Make tests pass on Windows - -## v1.2.4 - -* Fix typo - -## v1.2.3 - -* update isexe, fix regression in pathExt handling - -## v1.2.2 - -* update deps, use isexe module, test windows - -## v1.2.1 - -* Sometimes windows PATH entries are quoted -* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode. -* doc cli - -## v1.2.0 - -* Add support for opt.all and -as cli flags -* test the bin -* update travis -* Allow checking for multiple programs in bin/which -* tap 2 - -## v1.1.2 - -* travis -* Refactored and fixed undefined error on Windows -* Support strict mode - -## v1.1.1 - -* test +g exes against secondary groups, if available -* Use windows exe semantics on cygwin & msys -* cwd should be first in path on win32, not last -* Handle lower-case 'env.Path' on Windows -* Update docs -* use single-quotes - -## v1.1.0 - -* Add tests, depend on is-absolute - -## v1.0.9 - -* which.js: root is allowed to execute files owned by anyone - -## v1.0.8 - -* don't use graceful-fs - -## v1.0.7 - -* add license to package.json - -## v1.0.6 - -* isc license - -## 1.0.5 - -* Awful typo - -## 1.0.4 - -* Test for path absoluteness properly -* win: Allow '' as a pathext if cmd has a . in it - -## 1.0.3 - -* Remove references to execPath -* Make `which.sync()` work on Windows by honoring the PATHEXT variable. -* Make `isExe()` always return true on Windows. -* MIT - -## 1.0.2 - -* Only files can be exes - -## 1.0.1 - -* Respect the PATHEXT env for win32 support -* should 0755 the bin -* binary -* guts -* package -* 1st diff --git a/node_modules/which/LICENSE b/node_modules/which/LICENSE deleted file mode 100644 index 19129e315f..0000000000 --- a/node_modules/which/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/which/README.md b/node_modules/which/README.md deleted file mode 100644 index cd833509f3..0000000000 --- a/node_modules/which/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# which - -Like the unix `which` utility. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. - -## USAGE - -```javascript -var which = require('which') - -// async usage -which('node', function (er, resolvedPath) { - // er is returned if no "node" is found on the PATH - // if it is found, then the absolute path to the exec is returned -}) - -// or promise -which('node').then(resolvedPath => { ... }).catch(er => { ... not found ... }) - -// sync usage -// throws if not found -var resolved = which.sync('node') - -// if nothrow option is used, returns null if not found -resolved = which.sync('node', {nothrow: true}) - -// Pass options to override the PATH and PATHEXT environment vars. -which('node', { path: someOtherPath }, function (er, resolved) { - if (er) - throw er - console.log('found at %j', resolved) -}) -``` - -## CLI USAGE - -Same as the BSD `which(1)` binary. - -``` -usage: which [-as] program ... -``` - -## OPTIONS - -You may pass an options object as the second argument. - -- `path`: Use instead of the `PATH` environment variable. -- `pathExt`: Use instead of the `PATHEXT` environment variable. -- `all`: Return all matches, instead of just the first one. Note that - this means the function returns an array of strings instead of a - single string. diff --git a/node_modules/which/package.json b/node_modules/which/package.json deleted file mode 100644 index 97ad7fbabc..0000000000 --- a/node_modules/which/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "2.0.2", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "node-which": "./bin/node-which" - }, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "devDependencies": { - "mkdirp": "^0.5.0", - "rimraf": "^2.6.2", - "tap": "^14.6.9" - }, - "scripts": { - "test": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublish": "npm run changelog", - "prechangelog": "bash gen-changelog.sh", - "changelog": "git add CHANGELOG.md", - "postchangelog": "git commit -m 'update changelog - '${npm_package_version}", - "postpublish": "git push origin --follow-tags" - }, - "files": [ - "which.js", - "bin/node-which" - ], - "tap": { - "check-coverage": true - }, - "engines": { - "node": ">= 8" - } -} diff --git a/node_modules/which/which.js b/node_modules/which/which.js deleted file mode 100644 index 82afffd214..0000000000 --- a/node_modules/which/which.js +++ /dev/null @@ -1,125 +0,0 @@ -const isWindows = process.platform === 'win32' || - process.env.OSTYPE === 'cygwin' || - process.env.OSTYPE === 'msys' - -const path = require('path') -const COLON = isWindows ? ';' : ':' -const isexe = require('isexe') - -const getNotFoundError = (cmd) => - Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) - -const getPathInfo = (cmd, opt) => { - const colon = opt.colon || COLON - - // If it has a slash, then we don't bother searching the pathenv. - // just check the file itself, and that's it. - const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] - : ( - [ - // windows always checks the cwd first - ...(isWindows ? [process.cwd()] : []), - ...(opt.path || process.env.PATH || - /* istanbul ignore next: very unusual */ '').split(colon), - ] - ) - const pathExtExe = isWindows - ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' - : '' - const pathExt = isWindows ? pathExtExe.split(colon) : [''] - - if (isWindows) { - if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') - pathExt.unshift('') - } - - return { - pathEnv, - pathExt, - pathExtExe, - } -} - -const which = (cmd, opt, cb) => { - if (typeof opt === 'function') { - cb = opt - opt = {} - } - if (!opt) - opt = {} - - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] - - const step = i => new Promise((resolve, reject) => { - if (i === pathEnv.length) - return opt.all && found.length ? resolve(found) - : reject(getNotFoundError(cmd)) - - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw - - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd - - resolve(subStep(p, i, 0)) - }) - - const subStep = (p, i, ii) => new Promise((resolve, reject) => { - if (ii === pathExt.length) - return resolve(step(i + 1)) - const ext = pathExt[ii] - isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { - if (!er && is) { - if (opt.all) - found.push(p + ext) - else - return resolve(p + ext) - } - return resolve(subStep(p, i, ii + 1)) - }) - }) - - return cb ? step(0).then(res => cb(null, res), cb) : step(0) -} - -const whichSync = (cmd, opt) => { - opt = opt || {} - - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] - - for (let i = 0; i < pathEnv.length; i ++) { - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw - - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd - - for (let j = 0; j < pathExt.length; j ++) { - const cur = p + pathExt[j] - try { - const is = isexe.sync(cur, { pathExt: pathExtExe }) - if (is) { - if (opt.all) - found.push(cur) - else - return cur - } - } catch (ex) {} - } - } - - if (opt.all && found.length) - return found - - if (opt.nothrow) - return null - - throw getNotFoundError(cmd) -} - -module.exports = which -which.sync = whichSync diff --git a/node_modules/wrap-ansi-cjs/index.js b/node_modules/wrap-ansi-cjs/index.js deleted file mode 100755 index d502255bd1..0000000000 --- a/node_modules/wrap-ansi-cjs/index.js +++ /dev/null @@ -1,216 +0,0 @@ -'use strict'; -const stringWidth = require('string-width'); -const stripAnsi = require('strip-ansi'); -const ansiStyles = require('ansi-styles'); - -const ESCAPES = new Set([ - '\u001B', - '\u009B' -]); - -const END_CODE = 39; - -const ANSI_ESCAPE_BELL = '\u0007'; -const ANSI_CSI = '['; -const ANSI_OSC = ']'; -const ANSI_SGR_TERMINATOR = 'm'; -const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; - -const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; -const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; - -// Calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes -const wordLengths = string => string.split(' ').map(character => stringWidth(character)); - -// Wrap a long word across multiple rows -// Ansi escape codes do not count towards length -const wrapWord = (rows, word, columns) => { - const characters = [...word]; - - let isInsideEscape = false; - let isInsideLinkEscape = false; - let visible = stringWidth(stripAnsi(rows[rows.length - 1])); - - for (const [index, character] of characters.entries()) { - const characterLength = stringWidth(character); - - if (visible + characterLength <= columns) { - rows[rows.length - 1] += character; - } else { - rows.push(character); - visible = 0; - } - - if (ESCAPES.has(character)) { - isInsideEscape = true; - isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); - } - - if (isInsideEscape) { - if (isInsideLinkEscape) { - if (character === ANSI_ESCAPE_BELL) { - isInsideEscape = false; - isInsideLinkEscape = false; - } - } else if (character === ANSI_SGR_TERMINATOR) { - isInsideEscape = false; - } - - continue; - } - - visible += characterLength; - - if (visible === columns && index < characters.length - 1) { - rows.push(''); - visible = 0; - } - } - - // It's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case - if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { - rows[rows.length - 2] += rows.pop(); - } -}; - -// Trims spaces from a string ignoring invisible sequences -const stringVisibleTrimSpacesRight = string => { - const words = string.split(' '); - let last = words.length; - - while (last > 0) { - if (stringWidth(words[last - 1]) > 0) { - break; - } - - last--; - } - - if (last === words.length) { - return string; - } - - return words.slice(0, last).join(' ') + words.slice(last).join(''); -}; - -// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode -// -// 'hard' will never allow a string to take up more than columns characters -// -// 'soft' allows long words to expand past the column length -const exec = (string, columns, options = {}) => { - if (options.trim !== false && string.trim() === '') { - return ''; - } - - let returnValue = ''; - let escapeCode; - let escapeUrl; - - const lengths = wordLengths(string); - let rows = ['']; - - for (const [index, word] of string.split(' ').entries()) { - if (options.trim !== false) { - rows[rows.length - 1] = rows[rows.length - 1].trimStart(); - } - - let rowLength = stringWidth(rows[rows.length - 1]); - - if (index !== 0) { - if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { - // If we start with a new word but the current row length equals the length of the columns, add a new row - rows.push(''); - rowLength = 0; - } - - if (rowLength > 0 || options.trim === false) { - rows[rows.length - 1] += ' '; - rowLength++; - } - } - - // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' - if (options.hard && lengths[index] > columns) { - const remainingColumns = (columns - rowLength); - const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); - const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); - if (breaksStartingNextLine < breaksStartingThisLine) { - rows.push(''); - } - - wrapWord(rows, word, columns); - continue; - } - - if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { - if (options.wordWrap === false && rowLength < columns) { - wrapWord(rows, word, columns); - continue; - } - - rows.push(''); - } - - if (rowLength + lengths[index] > columns && options.wordWrap === false) { - wrapWord(rows, word, columns); - continue; - } - - rows[rows.length - 1] += word; - } - - if (options.trim !== false) { - rows = rows.map(stringVisibleTrimSpacesRight); - } - - const pre = [...rows.join('\n')]; - - for (const [index, character] of pre.entries()) { - returnValue += character; - - if (ESCAPES.has(character)) { - const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; - if (groups.code !== undefined) { - const code = Number.parseFloat(groups.code); - escapeCode = code === END_CODE ? undefined : code; - } else if (groups.uri !== undefined) { - escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; - } - } - - const code = ansiStyles.codes.get(Number(escapeCode)); - - if (pre[index + 1] === '\n') { - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(''); - } - - if (escapeCode && code) { - returnValue += wrapAnsi(code); - } - } else if (character === '\n') { - if (escapeCode && code) { - returnValue += wrapAnsi(escapeCode); - } - - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(escapeUrl); - } - } - } - - return returnValue; -}; - -// For each newline, invoke the method separately -module.exports = (string, columns, options) => { - return String(string) - .normalize() - .replace(/\r\n/g, '\n') - .split('\n') - .map(line => exec(line, columns, options)) - .join('\n'); -}; diff --git a/node_modules/wrap-ansi-cjs/license b/node_modules/wrap-ansi-cjs/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/wrap-ansi-cjs/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 2dbf6af2b6..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -declare namespace ansiRegex { - interface Options { - /** - Match only the first ANSI escape. - - @default false - */ - onlyFirst: boolean; - } -} - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -declare function ansiRegex(options?: ansiRegex.Options): RegExp; - -export = ansiRegex; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js deleted file mode 100644 index 616ff837d3..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json deleted file mode 100644 index 017f53116a..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "ansi-regex", - "version": "5.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.9.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md deleted file mode 100644 index 4d848bc36f..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`
          -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts deleted file mode 100644 index 44a907e580..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts +++ /dev/null @@ -1,345 +0,0 @@ -declare type CSSColor = - | 'aliceblue' - | 'antiquewhite' - | 'aqua' - | 'aquamarine' - | 'azure' - | 'beige' - | 'bisque' - | 'black' - | 'blanchedalmond' - | 'blue' - | 'blueviolet' - | 'brown' - | 'burlywood' - | 'cadetblue' - | 'chartreuse' - | 'chocolate' - | 'coral' - | 'cornflowerblue' - | 'cornsilk' - | 'crimson' - | 'cyan' - | 'darkblue' - | 'darkcyan' - | 'darkgoldenrod' - | 'darkgray' - | 'darkgreen' - | 'darkgrey' - | 'darkkhaki' - | 'darkmagenta' - | 'darkolivegreen' - | 'darkorange' - | 'darkorchid' - | 'darkred' - | 'darksalmon' - | 'darkseagreen' - | 'darkslateblue' - | 'darkslategray' - | 'darkslategrey' - | 'darkturquoise' - | 'darkviolet' - | 'deeppink' - | 'deepskyblue' - | 'dimgray' - | 'dimgrey' - | 'dodgerblue' - | 'firebrick' - | 'floralwhite' - | 'forestgreen' - | 'fuchsia' - | 'gainsboro' - | 'ghostwhite' - | 'gold' - | 'goldenrod' - | 'gray' - | 'green' - | 'greenyellow' - | 'grey' - | 'honeydew' - | 'hotpink' - | 'indianred' - | 'indigo' - | 'ivory' - | 'khaki' - | 'lavender' - | 'lavenderblush' - | 'lawngreen' - | 'lemonchiffon' - | 'lightblue' - | 'lightcoral' - | 'lightcyan' - | 'lightgoldenrodyellow' - | 'lightgray' - | 'lightgreen' - | 'lightgrey' - | 'lightpink' - | 'lightsalmon' - | 'lightseagreen' - | 'lightskyblue' - | 'lightslategray' - | 'lightslategrey' - | 'lightsteelblue' - | 'lightyellow' - | 'lime' - | 'limegreen' - | 'linen' - | 'magenta' - | 'maroon' - | 'mediumaquamarine' - | 'mediumblue' - | 'mediumorchid' - | 'mediumpurple' - | 'mediumseagreen' - | 'mediumslateblue' - | 'mediumspringgreen' - | 'mediumturquoise' - | 'mediumvioletred' - | 'midnightblue' - | 'mintcream' - | 'mistyrose' - | 'moccasin' - | 'navajowhite' - | 'navy' - | 'oldlace' - | 'olive' - | 'olivedrab' - | 'orange' - | 'orangered' - | 'orchid' - | 'palegoldenrod' - | 'palegreen' - | 'paleturquoise' - | 'palevioletred' - | 'papayawhip' - | 'peachpuff' - | 'peru' - | 'pink' - | 'plum' - | 'powderblue' - | 'purple' - | 'rebeccapurple' - | 'red' - | 'rosybrown' - | 'royalblue' - | 'saddlebrown' - | 'salmon' - | 'sandybrown' - | 'seagreen' - | 'seashell' - | 'sienna' - | 'silver' - | 'skyblue' - | 'slateblue' - | 'slategray' - | 'slategrey' - | 'snow' - | 'springgreen' - | 'steelblue' - | 'tan' - | 'teal' - | 'thistle' - | 'tomato' - | 'turquoise' - | 'violet' - | 'wheat' - | 'white' - | 'whitesmoke' - | 'yellow' - | 'yellowgreen'; - -declare namespace ansiStyles { - interface ColorConvert { - /** - The RGB color space. - - @param red - (`0`-`255`) - @param green - (`0`-`255`) - @param blue - (`0`-`255`) - */ - rgb(red: number, green: number, blue: number): string; - - /** - The RGB HEX color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hex(hex: string): string; - - /** - @param keyword - A CSS color name. - */ - keyword(keyword: CSSColor): string; - - /** - The HSL color space. - - @param hue - (`0`-`360`) - @param saturation - (`0`-`100`) - @param lightness - (`0`-`100`) - */ - hsl(hue: number, saturation: number, lightness: number): string; - - /** - The HSV color space. - - @param hue - (`0`-`360`) - @param saturation - (`0`-`100`) - @param value - (`0`-`100`) - */ - hsv(hue: number, saturation: number, value: number): string; - - /** - The HSV color space. - - @param hue - (`0`-`360`) - @param whiteness - (`0`-`100`) - @param blackness - (`0`-`100`) - */ - hwb(hue: number, whiteness: number, blackness: number): string; - - /** - Use a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color. - */ - ansi(ansi: number): string; - - /** - Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. - */ - ansi256(ansi: number): string; - } - - interface CSPair { - /** - The ANSI terminal control sequence for starting this style. - */ - readonly open: string; - - /** - The ANSI terminal control sequence for ending this style. - */ - readonly close: string; - } - - interface ColorBase { - readonly ansi: ColorConvert; - readonly ansi256: ColorConvert; - readonly ansi16m: ColorConvert; - - /** - The ANSI terminal control sequence for ending this color. - */ - readonly close: string; - } - - interface Modifier { - /** - Resets the current color chain. - */ - readonly reset: CSPair; - - /** - Make text bold. - */ - readonly bold: CSPair; - - /** - Emitting only a small amount of light. - */ - readonly dim: CSPair; - - /** - Make text italic. (Not widely supported) - */ - readonly italic: CSPair; - - /** - Make text underline. (Not widely supported) - */ - readonly underline: CSPair; - - /** - Inverse background and foreground colors. - */ - readonly inverse: CSPair; - - /** - Prints the text, but makes it invisible. - */ - readonly hidden: CSPair; - - /** - Puts a horizontal line through the center of the text. (Not widely supported) - */ - readonly strikethrough: CSPair; - } - - interface ForegroundColor { - readonly black: CSPair; - readonly red: CSPair; - readonly green: CSPair; - readonly yellow: CSPair; - readonly blue: CSPair; - readonly cyan: CSPair; - readonly magenta: CSPair; - readonly white: CSPair; - - /** - Alias for `blackBright`. - */ - readonly gray: CSPair; - - /** - Alias for `blackBright`. - */ - readonly grey: CSPair; - - readonly blackBright: CSPair; - readonly redBright: CSPair; - readonly greenBright: CSPair; - readonly yellowBright: CSPair; - readonly blueBright: CSPair; - readonly cyanBright: CSPair; - readonly magentaBright: CSPair; - readonly whiteBright: CSPair; - } - - interface BackgroundColor { - readonly bgBlack: CSPair; - readonly bgRed: CSPair; - readonly bgGreen: CSPair; - readonly bgYellow: CSPair; - readonly bgBlue: CSPair; - readonly bgCyan: CSPair; - readonly bgMagenta: CSPair; - readonly bgWhite: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGray: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGrey: CSPair; - - readonly bgBlackBright: CSPair; - readonly bgRedBright: CSPair; - readonly bgGreenBright: CSPair; - readonly bgYellowBright: CSPair; - readonly bgBlueBright: CSPair; - readonly bgCyanBright: CSPair; - readonly bgMagentaBright: CSPair; - readonly bgWhiteBright: CSPair; - } -} - -declare const ansiStyles: { - readonly modifier: ansiStyles.Modifier; - readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase; - readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase; - readonly codes: ReadonlyMap; -} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier; - -export = ansiStyles; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js deleted file mode 100644 index 5d82581a13..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,163 +0,0 @@ -'use strict'; - -const wrapAnsi16 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${code + offset}m`; -}; - -const wrapAnsi256 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${38 + offset};5;${code}m`; -}; - -const wrapAnsi16m = (fn, offset) => (...args) => { - const rgb = fn(...args); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; - -const ansi2ansi = n => n; -const rgb2rgb = (r, g, b) => [r, g, b]; - -const setLazyProperty = (object, property, get) => { - Object.defineProperty(object, property, { - get: () => { - const value = get(); - - Object.defineProperty(object, property, { - value, - enumerable: true, - configurable: true - }); - - return value; - }, - enumerable: true, - configurable: true - }); -}; - -/** @type {typeof import('color-convert')} */ -let colorConvert; -const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { - if (colorConvert === undefined) { - colorConvert = require('color-convert'); - } - - const offset = isBackground ? 10 : 0; - const styles = {}; - - for (const [sourceSpace, suite] of Object.entries(colorConvert)) { - const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; - if (sourceSpace === targetSpace) { - styles[name] = wrap(identity, offset); - } else if (typeof suite === 'object') { - styles[name] = wrap(suite[targetSpace], offset); - } - } - - return styles; -}; - -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - - // Bright color - blackBright: [90, 39], - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Alias bright black as gray (and grey) - styles.color.gray = styles.color.blackBright; - styles.bgColor.bgGray = styles.bgColor.bgBlackBright; - styles.color.grey = styles.color.blackBright; - styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; - - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - } - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); - setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); - - return styles; -} - -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json deleted file mode 100644 index 75393284d7..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "ansi-styles", - "version": "4.3.0", - "description": "ANSI escape codes for styling strings in the terminal", - "license": "MIT", - "repository": "chalk/ansi-styles", - "funding": "https://github.com/chalk/ansi-styles?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "color-convert": "^2.0.1" - }, - "devDependencies": { - "@types/color-convert": "^1.9.0", - "ava": "^2.3.0", - "svg-term-cli": "^2.1.1", - "tsd": "^0.11.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md deleted file mode 100644 index 24883de808..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,152 +0,0 @@ -# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) - -> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - - - -## Install - -``` -$ npm install ansi-styles -``` - -## Usage - -```js -const style = require('ansi-styles'); - -console.log(`${style.green.open}Hello world!${style.green.close}`); - - -// Color conversion between 16/256/truecolor -// NOTE: If conversion goes to 16 colors or 256 colors, the original color -// may be degraded to fit that color palette. This means terminals -// that do not support 16 million colors will best-match the -// original color. -console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); -console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); -console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close); -``` - -## API - -Each style has an `open` and `close` property. - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(Not widely supported)* -- `underline` -- `inverse` -- `hidden` -- `strikethrough` *(Not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `blackBright` (alias: `gray`, `grey`) -- `redBright` -- `greenBright` -- `yellowBright` -- `blueBright` -- `magentaBright` -- `cyanBright` -- `whiteBright` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` -- `bgBlackBright` (alias: `bgGray`, `bgGrey`) -- `bgRedBright` -- `bgGreenBright` -- `bgYellowBright` -- `bgBlueBright` -- `bgMagentaBright` -- `bgCyanBright` -- `bgWhiteBright` - -## Advanced usage - -By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `style.modifier` -- `style.color` -- `style.bgColor` - -###### Example - -```js -console.log(style.color.green.open); -``` - -Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. - -###### Example - -```js -console.log(style.codes.get(36)); -//=> 39 -``` - -## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) - -`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. - -The following color spaces from `color-convert` are supported: - -- `rgb` -- `hex` -- `keyword` -- `hsl` -- `hsv` -- `hwb` -- `ansi` -- `ansi256` - -To use these, call the associated conversion function with the intended output, for example: - -```js -style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code -style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code - -style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code -style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code - -style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code -style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code -``` - -## Related - -- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - -## For enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md deleted file mode 100644 index f10e173335..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) - -_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. - -This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install emoji-regex -``` - -In [Node.js](https://nodejs.org/): - -```js -const emojiRegex = require('emoji-regex'); -// Note: because the regular expression has the global flag set, this module -// exports a function that returns the regex rather than exporting the regular -// expression itself, to make it impossible to (accidentally) mutate the -// original regular expression. - -const text = ` -\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) -\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji -\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) -\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier -`; - -const regex = emojiRegex(); -let match; -while (match = regex.exec(text)) { - const emoji = match[0]; - console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); -} -``` - -Console output: - -``` -Matched sequence ⌚ — code points: 1 -Matched sequence ⌚ — code points: 1 -Matched sequence ↔️ — code points: 2 -Matched sequence ↔️ — code points: 2 -Matched sequence 👩 — code points: 1 -Matched sequence 👩 — code points: 1 -Matched sequence 👩🏿 — code points: 2 -Matched sequence 👩🏿 — code points: 2 -``` - -To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: - -```js -const emojiRegex = require('emoji-regex/text.js'); -``` - -Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: - -```js -const emojiRegex = require('emoji-regex/es2015/index.js'); -const emojiRegexText = require('emoji-regex/es2015/text.js'); -``` - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js deleted file mode 100644 index b4cf3dcd38..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js deleted file mode 100644 index 780309df58..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts deleted file mode 100644 index 1955b4704e..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'emoji-regex' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js deleted file mode 100644 index d993a3a99c..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json deleted file mode 100644 index 6d32352829..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "emoji-regex", - "version": "8.0.0", - "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", - "homepage": "https://mths.be/emoji-regex", - "main": "index.js", - "types": "index.d.ts", - "keywords": [ - "unicode", - "regex", - "regexp", - "regular expressions", - "code points", - "symbols", - "characters", - "emoji" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/emoji-regex.git" - }, - "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", - "files": [ - "LICENSE-MIT.txt", - "index.js", - "index.d.ts", - "text.js", - "es2015/index.js", - "es2015/text.js" - ], - "scripts": { - "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", - "test": "mocha", - "test:watch": "npm run test -- --watch" - }, - "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/preset-env": "^7.3.4", - "mocha": "^6.0.2", - "regexgen": "^1.3.0", - "unicode-12.0.0": "^0.7.9" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js deleted file mode 100644 index 0a55ce2f23..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts deleted file mode 100644 index 12b5309751..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -declare const stringWidth: { - /** - Get the visual width of a string - the number of columns required to display it. - - Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - - @example - ``` - import stringWidth = require('string-width'); - - stringWidth('a'); - //=> 1 - - stringWidth('古'); - //=> 2 - - stringWidth('\u001B[1m古\u001B[22m'); - //=> 2 - ``` - */ - (string: string): number; - - // TODO: remove this in the next major version, refactor the whole definition to: - // declare function stringWidth(string: string): number; - // export = stringWidth; - default: typeof stringWidth; -} - -export = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js deleted file mode 100644 index f4d261a96a..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -const stripAnsi = require('strip-ansi'); -const isFullwidthCodePoint = require('is-fullwidth-code-point'); -const emojiRegex = require('emoji-regex'); - -const stringWidth = string => { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - string = stripAnsi(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - let width = 0; - - for (let i = 0; i < string.length; i++) { - const code = string.codePointAt(i); - - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } - - // Surrogates - if (code > 0xFFFF) { - i++; - } - - width += isFullwidthCodePoint(code) ? 2 : 1; - } - - return width; -}; - -module.exports = stringWidth; -// TODO: remove this in the next major version -module.exports.default = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/license b/node_modules/wrap-ansi-cjs/node_modules/string-width/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json deleted file mode 100644 index 28ba7b4cae..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "string-width", - "version": "4.2.3", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "string", - "character", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.1", - "xo": "^0.24.0" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md deleted file mode 100644 index bdd314129c..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts deleted file mode 100644 index 907fccc292..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -declare function stripAnsi(string: string): string; - -export = stripAnsi; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js deleted file mode 100644 index 9a593dfcd1..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json deleted file mode 100644 index 1a41108d42..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "strip-ansi", - "version": "6.0.1", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.10.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md deleted file mode 100644 index 7c4b56d46d..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/wrap-ansi-cjs/package.json b/node_modules/wrap-ansi-cjs/package.json deleted file mode 100644 index dfb2f4f108..0000000000 --- a/node_modules/wrap-ansi-cjs/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "wrap-ansi", - "version": "7.0.0", - "description": "Wordwrap a string with ANSI escape codes", - "license": "MIT", - "repository": "chalk/wrap-ansi", - "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "engines": { - "node": ">=10" - }, - "scripts": { - "test": "xo && nyc ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "wrap", - "break", - "wordwrap", - "wordbreak", - "linewrap", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "devDependencies": { - "ava": "^2.1.0", - "chalk": "^4.0.0", - "coveralls": "^3.0.3", - "has-ansi": "^4.0.0", - "nyc": "^15.0.1", - "xo": "^0.29.1" - } -} diff --git a/node_modules/wrap-ansi-cjs/readme.md b/node_modules/wrap-ansi-cjs/readme.md deleted file mode 100644 index 68779ba5f4..0000000000 --- a/node_modules/wrap-ansi-cjs/readme.md +++ /dev/null @@ -1,91 +0,0 @@ -# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) - -> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) - -## Install - -``` -$ npm install wrap-ansi -``` - -## Usage - -```js -const chalk = require('chalk'); -const wrapAnsi = require('wrap-ansi'); - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` - - - -## API - -### wrapAnsi(string, columns, options?) - -Wrap words to the specified column width. - -#### string - -Type: `string` - -String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. - -#### columns - -Type: `number` - -Number of columns to wrap the text to. - -#### options - -Type: `object` - -##### hard - -Type: `boolean`\ -Default: `false` - -By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - -##### wordWrap - -Type: `boolean`\ -Default: `true` - -By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. - -##### trim - -Type: `boolean`\ -Default: `true` - -Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. - -## Related - -- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes -- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right -- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) -- [Benjamin Coe](https://github.com/bcoe) - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          diff --git a/node_modules/wrap-ansi/index.d.ts b/node_modules/wrap-ansi/index.d.ts deleted file mode 100644 index 95471cade4..0000000000 --- a/node_modules/wrap-ansi/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -export type Options = { - /** - By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - - @default false - */ - readonly hard?: boolean; - - /** - By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. - - @default true - */ - readonly wordWrap?: boolean; - - /** - Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. - - @default true - */ - readonly trim?: boolean; -}; - -/** -Wrap words to the specified column width. - -@param string - String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. -@param columns - Number of columns to wrap the text to. - -@example -``` -import chalk from 'chalk'; -import wrapAnsi from 'wrap-ansi'; - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` -*/ -export default function wrapAnsi(string: string, columns: number, options?: Options): string; diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js deleted file mode 100755 index d80c74c19c..0000000000 --- a/node_modules/wrap-ansi/index.js +++ /dev/null @@ -1,214 +0,0 @@ -import stringWidth from 'string-width'; -import stripAnsi from 'strip-ansi'; -import ansiStyles from 'ansi-styles'; - -const ESCAPES = new Set([ - '\u001B', - '\u009B', -]); - -const END_CODE = 39; -const ANSI_ESCAPE_BELL = '\u0007'; -const ANSI_CSI = '['; -const ANSI_OSC = ']'; -const ANSI_SGR_TERMINATOR = 'm'; -const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; - -const wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; -const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; - -// Calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes -const wordLengths = string => string.split(' ').map(character => stringWidth(character)); - -// Wrap a long word across multiple rows -// Ansi escape codes do not count towards length -const wrapWord = (rows, word, columns) => { - const characters = [...word]; - - let isInsideEscape = false; - let isInsideLinkEscape = false; - let visible = stringWidth(stripAnsi(rows[rows.length - 1])); - - for (const [index, character] of characters.entries()) { - const characterLength = stringWidth(character); - - if (visible + characterLength <= columns) { - rows[rows.length - 1] += character; - } else { - rows.push(character); - visible = 0; - } - - if (ESCAPES.has(character)) { - isInsideEscape = true; - isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); - } - - if (isInsideEscape) { - if (isInsideLinkEscape) { - if (character === ANSI_ESCAPE_BELL) { - isInsideEscape = false; - isInsideLinkEscape = false; - } - } else if (character === ANSI_SGR_TERMINATOR) { - isInsideEscape = false; - } - - continue; - } - - visible += characterLength; - - if (visible === columns && index < characters.length - 1) { - rows.push(''); - visible = 0; - } - } - - // It's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case - if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { - rows[rows.length - 2] += rows.pop(); - } -}; - -// Trims spaces from a string ignoring invisible sequences -const stringVisibleTrimSpacesRight = string => { - const words = string.split(' '); - let last = words.length; - - while (last > 0) { - if (stringWidth(words[last - 1]) > 0) { - break; - } - - last--; - } - - if (last === words.length) { - return string; - } - - return words.slice(0, last).join(' ') + words.slice(last).join(''); -}; - -// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode -// -// 'hard' will never allow a string to take up more than columns characters -// -// 'soft' allows long words to expand past the column length -const exec = (string, columns, options = {}) => { - if (options.trim !== false && string.trim() === '') { - return ''; - } - - let returnValue = ''; - let escapeCode; - let escapeUrl; - - const lengths = wordLengths(string); - let rows = ['']; - - for (const [index, word] of string.split(' ').entries()) { - if (options.trim !== false) { - rows[rows.length - 1] = rows[rows.length - 1].trimStart(); - } - - let rowLength = stringWidth(rows[rows.length - 1]); - - if (index !== 0) { - if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { - // If we start with a new word but the current row length equals the length of the columns, add a new row - rows.push(''); - rowLength = 0; - } - - if (rowLength > 0 || options.trim === false) { - rows[rows.length - 1] += ' '; - rowLength++; - } - } - - // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' - if (options.hard && lengths[index] > columns) { - const remainingColumns = (columns - rowLength); - const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); - const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); - if (breaksStartingNextLine < breaksStartingThisLine) { - rows.push(''); - } - - wrapWord(rows, word, columns); - continue; - } - - if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { - if (options.wordWrap === false && rowLength < columns) { - wrapWord(rows, word, columns); - continue; - } - - rows.push(''); - } - - if (rowLength + lengths[index] > columns && options.wordWrap === false) { - wrapWord(rows, word, columns); - continue; - } - - rows[rows.length - 1] += word; - } - - if (options.trim !== false) { - rows = rows.map(row => stringVisibleTrimSpacesRight(row)); - } - - const pre = [...rows.join('\n')]; - - for (const [index, character] of pre.entries()) { - returnValue += character; - - if (ESCAPES.has(character)) { - const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; - if (groups.code !== undefined) { - const code = Number.parseFloat(groups.code); - escapeCode = code === END_CODE ? undefined : code; - } else if (groups.uri !== undefined) { - escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; - } - } - - const code = ansiStyles.codes.get(Number(escapeCode)); - - if (pre[index + 1] === '\n') { - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(''); - } - - if (escapeCode && code) { - returnValue += wrapAnsiCode(code); - } - } else if (character === '\n') { - if (escapeCode && code) { - returnValue += wrapAnsiCode(escapeCode); - } - - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(escapeUrl); - } - } - } - - return returnValue; -}; - -// For each newline, invoke the method separately -export default function wrapAnsi(string, columns, options) { - return String(string) - .normalize() - .replace(/\r\n/g, '\n') - .split('\n') - .map(line => exec(line, columns, options)) - .join('\n'); -} diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/wrap-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json deleted file mode 100644 index 198a5dbcb7..0000000000 --- a/node_modules/wrap-ansi/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "wrap-ansi", - "version": "8.1.0", - "description": "Wordwrap a string with ANSI escape codes", - "license": "MIT", - "repository": "chalk/wrap-ansi", - "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": { - "types": "./index.d.ts", - "default": "./index.js" - }, - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && nyc ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "wrap", - "break", - "wordwrap", - "wordbreak", - "linewrap", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "devDependencies": { - "ava": "^3.15.0", - "chalk": "^4.1.2", - "coveralls": "^3.1.1", - "has-ansi": "^5.0.1", - "nyc": "^15.1.0", - "tsd": "^0.25.0", - "xo": "^0.44.0" - } -} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md deleted file mode 100644 index 21f6fed7b6..0000000000 --- a/node_modules/wrap-ansi/readme.md +++ /dev/null @@ -1,91 +0,0 @@ -# wrap-ansi - -> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) - -## Install - -``` -$ npm install wrap-ansi -``` - -## Usage - -```js -import chalk from 'chalk'; -import wrapAnsi from 'wrap-ansi'; - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` - - - -## API - -### wrapAnsi(string, columns, options?) - -Wrap words to the specified column width. - -#### string - -Type: `string` - -String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. - -#### columns - -Type: `number` - -Number of columns to wrap the text to. - -#### options - -Type: `object` - -##### hard - -Type: `boolean`\ -Default: `false` - -By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - -##### wordWrap - -Type: `boolean`\ -Default: `true` - -By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. - -##### trim - -Type: `boolean`\ -Default: `true` - -Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. - -## Related - -- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes -- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right -- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) -- [Benjamin Coe](https://github.com/bcoe) - ---- - -
          - - Get professional support for this package with a Tidelift subscription - -
          - - Tidelift helps make open source sustainable for maintainers while giving companies
          assurances about security, maintenance, and licensing for their dependencies. -
          -
          From 5fc3478ef52c0ef6959780de1c78fbab8ac04785 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 11 Feb 2025 15:10:00 -0500 Subject: [PATCH 36/51] updated code for another round of fixes --- .gitignore | 2 +- pyiceberg/table/upsert_util.py | 23 +++++------------------ pyproject.toml | 4 ++++ 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 10f45797b7..56797d7d71 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,4 @@ pyiceberg/avro/*.html pyiceberg/avro/*.so # node modules -node_modules/ \ No newline at end of file +node_modules/ diff --git a/pyiceberg/table/upsert_util.py b/pyiceberg/table/upsert_util.py index 513a59760d..87ff6a6a6e 100644 --- a/pyiceberg/table/upsert_util.py +++ b/pyiceberg/table/upsert_util.py @@ -14,6 +14,9 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. +import functools +import operator + import pyarrow as pa from pyarrow import Table as pyarrow_table from pyarrow import compute as pc @@ -53,16 +56,7 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols non_key_cols = list(all_columns - join_cols_set) - match_expr = None - - for col in join_cols: - target_values = target_table.column(col).to_pylist() - expr = pc.field(col).isin(target_values) - - if match_expr is None: - match_expr = expr - else: - match_expr = match_expr & expr + match_expr = functools.reduce(operator.and_, [pc.field(col).isin(target_table.column(col).to_pylist()) for col in join_cols]) matching_source_rows = source_table.filter(match_expr) @@ -71,14 +65,7 @@ def get_rows_to_update(source_table: pa.Table, target_table: pa.Table, join_cols for index in range(matching_source_rows.num_rows): source_row = matching_source_rows.slice(index, 1) - target_filter = None - - for col in join_cols: - target_value = source_row.column(col)[0].as_py() - if target_filter is None: - target_filter = pc.field(col) == target_value - else: - target_filter = target_filter & (pc.field(col) == target_value) + target_filter = functools.reduce(operator.and_, [pc.field(col) == source_row.column(col)[0].as_py() for col in join_cols]) matching_target_row = target_table.filter(target_filter) diff --git a/pyproject.toml b/pyproject.toml index 59a642ed5f..49a86c53e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1944,6 +1944,10 @@ ignore_missing_imports = true module = "tenacity.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "datafusion.*" +ignore_missing_imports = true + [tool.poetry.scripts] pyiceberg = "pyiceberg.cli.console:run" From 6cef789b8b4c5275e3dd1246314a325bf0c23f21 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Tue, 11 Feb 2025 15:11:38 -0500 Subject: [PATCH 37/51] removed npm uneeded files --- package-lock.json | 1420 --------------------------------------------- package.json | 5 - 2 files changed, 1425 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 034daec2fb..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,1420 +0,0 @@ -{ - "name": "iceberg-python", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "markdownlint-cli": "github:igorshubovych/markdownlint-cli" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/katex": { - "version": "0.16.21", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", - "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdownlint": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", - "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", - "license": "MIT", - "dependencies": { - "markdown-it": "14.1.0", - "micromark": "4.0.1", - "micromark-core-commonmark": "2.0.2", - "micromark-extension-directive": "3.0.2", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.0", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli": { - "version": "0.44.0", - "resolved": "git+ssh://git@github.com/igorshubovych/markdownlint-cli.git#586c3ea3f51230da42bab657c6a32e9e66c364f0", - "license": "MIT", - "dependencies": { - "commander": "~13.1.0", - "glob": "~10.4.5", - "ignore": "~7.0.3", - "js-yaml": "~4.1.0", - "jsonc-parser": "~3.3.1", - "jsonpointer": "~5.0.1", - "markdownlint": "~0.37.4", - "minimatch": "~9.0.5", - "run-con": "~1.3.2", - "smol-toml": "~1.3.1" - }, - "bin": { - "markdownlint": "markdownlint.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "license": "MIT" - }, - "node_modules/micromark": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", - "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", - "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", - "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", - "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/run-con": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", - "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - }, - "bin": { - "run-con": "cli.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/smol-toml": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", - "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index a992bedc26..0000000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "markdownlint-cli": "github:igorshubovych/markdownlint-cli" - } -} From 40b69b8805cdc4f4033caccf3c2c07dafdbac334 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 09:22:12 -0500 Subject: [PATCH 38/51] fixed formatting on upsert function for docs build --- pyiceberg/table/__init__.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 66330bbc9d..384dee2562 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1100,29 +1100,29 @@ def upsert( """Shorthand API for performing an upsert to an iceberg table. Args: - self: the target Iceberg table to execute the upsert on + df: The input dataframe to upsert with the table's data. join_cols: The columns to join on. These are essentially analogous to primary keys when_matched_update_all: Bool indicating to update rows that are matched but require an update due to a value in a non-key column changing when_not_matched_insert_all: Bool indicating new rows to be inserted that do not match any existing rows in the table - Example Use Cases: - Case 1: Both Parameters = True (Full Upsert) - Existing row found → Update it - New row found → Insert it + Example Use Cases: + Case 1: Both Parameters = True (Full Upsert) + Existing row found → Update it + New row found → Insert it - Case 2: when_matched_update_all = False, when_not_matched_insert_all = True - Existing row found → Do nothing (no updates) - New row found → Insert it + Case 2: when_matched_update_all = False, when_not_matched_insert_all = True + Existing row found → Do nothing (no updates) + New row found → Insert it - Case 3: when_matched_update_all = True, when_not_matched_insert_all = False - Existing row found → Update it - New row found → Do nothing (no inserts) + Case 3: when_matched_update_all = True, when_not_matched_insert_all = False + Existing row found → Update it + New row found → Do nothing (no inserts) - Case 4: Both Parameters = False (No Merge Effect) - Existing row found → Do nothing - New row found → Do nothing - (Function effectively does nothing) + Case 4: Both Parameters = False (No Merge Effect) + Existing row found → Do nothing + New row found → Do nothing + (Function effectively does nothing) Returns: From 09e03473007d1785787247717a6d2c76c533f281 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 10:15:38 -0500 Subject: [PATCH 39/51] rebased for poetry lock files --- poetry.lock | 35 +-- pyproject.toml | 764 +------------------------------------------------ 2 files changed, 17 insertions(+), 782 deletions(-) diff --git a/poetry.lock b/poetry.lock index f7feb8772a..2049dc4071 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1107,6 +1107,19 @@ files = [ {file = "cython-3.0.12.tar.gz", hash = "sha256:b988bb297ce76c671e28c97d017b95411010f7c77fa6623dd0bb47eed1aee1bc"}, ] +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = true +python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"gcsfs\"" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "datafusion" version = "44.0.0" @@ -1123,23 +1136,6 @@ files = [ {file = "datafusion-44.0.0.tar.gz", hash = "sha256:5fc3740406ff531527aa8baa5954fe0bf1f02ea72170e172746b38cffc0d8d50"}, ] -[package.dependencies] -pyarrow = ">=11.0.0" -typing-extensions = {version = "*", markers = "python_version < \"3.13\""} - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = true -python-versions = ">=3.5" -groups = ["main"] -markers = "extra == \"gcsfs\"" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - [[package]] name = "deptry" version = "0.23.0" @@ -3671,7 +3667,7 @@ files = [ name = "pyarrow" version = "19.0.0" description = "Python library for Apache Arrow" -optional = false +optional = true python-versions = ">=3.9" groups = ["main"] markers = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\"" @@ -3719,7 +3715,6 @@ files = [ {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"}, {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"}, ] -markers = {main = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\""} [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] @@ -5656,4 +5651,4 @@ zstandard = ["zstandard"] [metadata] lock-version = "2.1" python-versions = "^3.9.2, !=3.9.7" -content-hash = "f8d052c8ef957bbb66f94093ef9dfa5805073cc938bba282c957a814c605a1f2" +content-hash = "f8d052c8ef957bbb66f94093ef9dfa5805073cc938bba282c957a814c605a1f2" \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 857a9a8df9..88366b3ab3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -95,8 +95,8 @@ pytest-mock = "3.14.0" pyspark = "3.5.3" cython = "3.0.12" deptry = ">=0.14,<0.24" -docutils = "!=0.21.post1" # https://github.com/python-poetry/poetry/issues/9248#issuecomment-2026240520 datafusion = "^44.0.0" +docutils = "!=0.21.post1" # https://github.com/python-poetry/poetry/issues/9248#issuecomment-2026240520 [tool.poetry.group.docs.dependencies] # for mkdocs @@ -1184,766 +1184,6 @@ ignore_missing_imports = true module = "tenacity.*" ignore_missing_imports = true -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyarrow.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pandas.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "snappy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "zstandard.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pydantic_core.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pytest.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fastavro.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mmh3.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "hive_metastore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "thrift.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "requests_mock.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "click.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "rich.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "fsspec.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "s3fs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "azure.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "adlfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "gcsfs.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "packaging.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tests.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "boto3" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "botocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "mypy_boto3_glue.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "moto" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiobotocore.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "aiohttp.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "duckdb.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "ray.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "daft.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyparsing.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "pyspark.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "strictyaml.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sortedcontainers.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "sqlalchemy.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "Cython.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "setuptools.*" -ignore_missing_imports = true - -[[tool.mypy.overrides]] -module = "tenacity.*" -ignore_missing_imports = true - [[tool.mypy.overrides]] module = "datafusion.*" ignore_missing_imports = true @@ -2174,4 +1414,4 @@ module = "tenacity.*" ignore_missing_imports = true [tool.coverage.run] -source = ['pyiceberg/'] +source = ['pyiceberg/'] \ No newline at end of file From ca2d904e5ad9827899f9804f2a6706735400f31e Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 11:32:27 -0500 Subject: [PATCH 40/51] updated lock files. thanks kevin --- poetry.lock | 38 +++++++++++++++++++++----------------- pyproject.toml | 2 +- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2049dc4071..e5b091a2fa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1107,19 +1107,6 @@ files = [ {file = "cython-3.0.12.tar.gz", hash = "sha256:b988bb297ce76c671e28c97d017b95411010f7c77fa6623dd0bb47eed1aee1bc"}, ] -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = true -python-versions = ">=3.5" -groups = ["main"] -markers = "extra == \"gcsfs\"" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - [[package]] name = "datafusion" version = "44.0.0" @@ -1136,6 +1123,23 @@ files = [ {file = "datafusion-44.0.0.tar.gz", hash = "sha256:5fc3740406ff531527aa8baa5954fe0bf1f02ea72170e172746b38cffc0d8d50"}, ] +[package.dependencies] +pyarrow = ">=11.0.0" +typing-extensions = {version = "*", markers = "python_version < \"3.13\""} + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = true +python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"gcsfs\"" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deptry" version = "0.23.0" @@ -3667,10 +3671,9 @@ files = [ name = "pyarrow" version = "19.0.0" description = "Python library for Apache Arrow" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\"" +groups = ["main", "dev"] files = [ {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c318eda14f6627966997a7d8c374a87d084a94e4e38e9abbe97395c215830e0c"}, {file = "pyarrow-19.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:62ef8360ff256e960f57ce0299090fb86423afed5e46f18f1225f960e05aae3d"}, @@ -3715,6 +3718,7 @@ files = [ {file = "pyarrow-19.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:597360ffc71fc8cceea1aec1fb60cb510571a744fffc87db33d551d5de919bec"}, {file = "pyarrow-19.0.0.tar.gz", hash = "sha256:8d47c691765cf497aaeed4954d226568563f1b3b74ff61139f2d77876717084b"}, ] +markers = {main = "extra == \"pyarrow\" or extra == \"pandas\" or extra == \"duckdb\" or extra == \"ray\" or extra == \"daft\""} [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] @@ -5651,4 +5655,4 @@ zstandard = ["zstandard"] [metadata] lock-version = "2.1" python-versions = "^3.9.2, !=3.9.7" -content-hash = "f8d052c8ef957bbb66f94093ef9dfa5805073cc938bba282c957a814c605a1f2" \ No newline at end of file +content-hash = "33d632240f5521ea647ea1e1f6936f48c369f457be139faa7e4351267aa7e86f" diff --git a/pyproject.toml b/pyproject.toml index 88366b3ab3..6f5e219d10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1414,4 +1414,4 @@ module = "tenacity.*" ignore_missing_imports = true [tool.coverage.run] -source = ['pyiceberg/'] \ No newline at end of file +source = ['pyiceberg/'] From 77375fb814b52a9b58768cede2f9b95f5eaf7489 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 11:37:07 -0500 Subject: [PATCH 41/51] fixed other changes --- vendor/hive_metastore/ThriftHiveMetastore.py | 1339 +++++++++++------- vendor/hive_metastore/ttypes.py | 628 ++++---- 2 files changed, 1112 insertions(+), 855 deletions(-) diff --git a/vendor/hive_metastore/ThriftHiveMetastore.py b/vendor/hive_metastore/ThriftHiveMetastore.py index 92ba9eaeae..a4804c1a8e 100644 --- a/vendor/hive_metastore/ThriftHiveMetastore.py +++ b/vendor/hive_metastore/ThriftHiveMetastore.py @@ -52,6 +52,7 @@ def getMetaConf(self, key): - key """ + pass def setMetaConf(self, key, value): """ @@ -60,6 +61,7 @@ def setMetaConf(self, key, value): - value """ + pass def create_catalog(self, catalog): """ @@ -67,6 +69,7 @@ def create_catalog(self, catalog): - catalog """ + pass def alter_catalog(self, rqst): """ @@ -74,6 +77,7 @@ def alter_catalog(self, rqst): - rqst """ + pass def get_catalog(self, catName): """ @@ -81,6 +85,7 @@ def get_catalog(self, catName): - catName """ + pass def get_catalogs(self): pass @@ -91,6 +96,7 @@ def drop_catalog(self, catName): - catName """ + pass def create_database(self, database): """ @@ -98,6 +104,7 @@ def create_database(self, database): - database """ + pass def get_database(self, name): """ @@ -105,6 +112,7 @@ def get_database(self, name): - name """ + pass def get_database_req(self, request): """ @@ -112,6 +120,7 @@ def get_database_req(self, request): - request """ + pass def drop_database(self, name, deleteData, cascade): """ @@ -121,6 +130,7 @@ def drop_database(self, name, deleteData, cascade): - cascade """ + pass def drop_database_req(self, req): """ @@ -128,6 +138,7 @@ def drop_database_req(self, req): - req """ + pass def get_databases(self, pattern): """ @@ -135,6 +146,7 @@ def get_databases(self, pattern): - pattern """ + pass def get_all_databases(self): pass @@ -146,6 +158,7 @@ def alter_database(self, dbname, db): - db """ + pass def create_dataconnector(self, connector): """ @@ -153,6 +166,7 @@ def create_dataconnector(self, connector): - connector """ + pass def get_dataconnector_req(self, request): """ @@ -160,6 +174,7 @@ def get_dataconnector_req(self, request): - request """ + pass def drop_dataconnector(self, name, ifNotExists, checkReferences): """ @@ -169,6 +184,7 @@ def drop_dataconnector(self, name, ifNotExists, checkReferences): - checkReferences """ + pass def get_dataconnectors(self): pass @@ -180,6 +196,7 @@ def alter_dataconnector(self, name, connector): - connector """ + pass def get_type(self, name): """ @@ -187,6 +204,7 @@ def get_type(self, name): - name """ + pass def create_type(self, type): """ @@ -194,6 +212,7 @@ def create_type(self, type): - type """ + pass def drop_type(self, type): """ @@ -201,6 +220,7 @@ def drop_type(self, type): - type """ + pass def get_type_all(self, name): """ @@ -208,6 +228,7 @@ def get_type_all(self, name): - name """ + pass def get_fields(self, db_name, table_name): """ @@ -216,6 +237,7 @@ def get_fields(self, db_name, table_name): - table_name """ + pass def get_fields_with_environment_context(self, db_name, table_name, environment_context): """ @@ -225,6 +247,7 @@ def get_fields_with_environment_context(self, db_name, table_name, environment_c - environment_context """ + pass def get_fields_req(self, req): """ @@ -232,6 +255,7 @@ def get_fields_req(self, req): - req """ + pass def get_schema(self, db_name, table_name): """ @@ -240,6 +264,7 @@ def get_schema(self, db_name, table_name): - table_name """ + pass def get_schema_with_environment_context(self, db_name, table_name, environment_context): """ @@ -249,6 +274,7 @@ def get_schema_with_environment_context(self, db_name, table_name, environment_c - environment_context """ + pass def get_schema_req(self, req): """ @@ -256,6 +282,7 @@ def get_schema_req(self, req): - req """ + pass def create_table(self, tbl): """ @@ -263,6 +290,7 @@ def create_table(self, tbl): - tbl """ + pass def create_table_with_environment_context(self, tbl, environment_context): """ @@ -271,6 +299,7 @@ def create_table_with_environment_context(self, tbl, environment_context): - environment_context """ + pass def create_table_with_constraints( self, tbl, primaryKeys, foreignKeys, uniqueConstraints, notNullConstraints, defaultConstraints, checkConstraints @@ -286,6 +315,7 @@ def create_table_with_constraints( - checkConstraints """ + pass def create_table_req(self, request): """ @@ -293,6 +323,7 @@ def create_table_req(self, request): - request """ + pass def drop_constraint(self, req): """ @@ -300,6 +331,7 @@ def drop_constraint(self, req): - req """ + pass def add_primary_key(self, req): """ @@ -307,6 +339,7 @@ def add_primary_key(self, req): - req """ + pass def add_foreign_key(self, req): """ @@ -314,6 +347,7 @@ def add_foreign_key(self, req): - req """ + pass def add_unique_constraint(self, req): """ @@ -321,6 +355,7 @@ def add_unique_constraint(self, req): - req """ + pass def add_not_null_constraint(self, req): """ @@ -328,6 +363,7 @@ def add_not_null_constraint(self, req): - req """ + pass def add_default_constraint(self, req): """ @@ -335,6 +371,7 @@ def add_default_constraint(self, req): - req """ + pass def add_check_constraint(self, req): """ @@ -342,6 +379,7 @@ def add_check_constraint(self, req): - req """ + pass def translate_table_dryrun(self, request): """ @@ -349,6 +387,7 @@ def translate_table_dryrun(self, request): - request """ + pass def drop_table(self, dbname, name, deleteData): """ @@ -358,6 +397,7 @@ def drop_table(self, dbname, name, deleteData): - deleteData """ + pass def drop_table_with_environment_context(self, dbname, name, deleteData, environment_context): """ @@ -368,6 +408,7 @@ def drop_table_with_environment_context(self, dbname, name, deleteData, environm - environment_context """ + pass def truncate_table(self, dbName, tableName, partNames): """ @@ -377,6 +418,7 @@ def truncate_table(self, dbName, tableName, partNames): - partNames """ + pass def truncate_table_req(self, req): """ @@ -384,6 +426,7 @@ def truncate_table_req(self, req): - req """ + pass def get_tables(self, db_name, pattern): """ @@ -392,6 +435,7 @@ def get_tables(self, db_name, pattern): - pattern """ + pass def get_tables_by_type(self, db_name, pattern, tableType): """ @@ -401,6 +445,7 @@ def get_tables_by_type(self, db_name, pattern, tableType): - tableType """ + pass def get_all_materialized_view_objects_for_rewriting(self): pass @@ -411,6 +456,7 @@ def get_materialized_views_for_rewriting(self, db_name): - db_name """ + pass def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): """ @@ -420,6 +466,7 @@ def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): - tbl_types """ + pass def get_all_tables(self, db_name): """ @@ -427,6 +474,7 @@ def get_all_tables(self, db_name): - db_name """ + pass def get_table(self, dbname, tbl_name): """ @@ -435,6 +483,7 @@ def get_table(self, dbname, tbl_name): - tbl_name """ + pass def get_table_objects_by_name(self, dbname, tbl_names): """ @@ -443,6 +492,7 @@ def get_table_objects_by_name(self, dbname, tbl_names): - tbl_names """ + pass def get_tables_ext(self, req): """ @@ -450,6 +500,7 @@ def get_tables_ext(self, req): - req """ + pass def get_table_req(self, req): """ @@ -457,6 +508,7 @@ def get_table_req(self, req): - req """ + pass def get_table_objects_by_name_req(self, req): """ @@ -464,6 +516,7 @@ def get_table_objects_by_name_req(self, req): - req """ + pass def get_materialization_invalidation_info(self, creation_metadata, validTxnList): """ @@ -472,6 +525,7 @@ def get_materialization_invalidation_info(self, creation_metadata, validTxnList) - validTxnList """ + pass def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata): """ @@ -482,6 +536,7 @@ def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata) - creation_metadata """ + pass def get_table_names_by_filter(self, dbname, filter, max_tables): """ @@ -491,6 +546,7 @@ def get_table_names_by_filter(self, dbname, filter, max_tables): - max_tables """ + pass def alter_table(self, dbname, tbl_name, new_tbl): """ @@ -500,6 +556,7 @@ def alter_table(self, dbname, tbl_name, new_tbl): - new_tbl """ + pass def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, environment_context): """ @@ -510,6 +567,7 @@ def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, enviro - environment_context """ + pass def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): """ @@ -520,6 +578,7 @@ def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): - cascade """ + pass def alter_table_req(self, req): """ @@ -527,6 +586,7 @@ def alter_table_req(self, req): - req """ + pass def add_partition(self, new_part): """ @@ -534,6 +594,7 @@ def add_partition(self, new_part): - new_part """ + pass def add_partition_with_environment_context(self, new_part, environment_context): """ @@ -542,6 +603,7 @@ def add_partition_with_environment_context(self, new_part, environment_context): - environment_context """ + pass def add_partitions(self, new_parts): """ @@ -549,6 +611,7 @@ def add_partitions(self, new_parts): - new_parts """ + pass def add_partitions_pspec(self, new_parts): """ @@ -556,6 +619,7 @@ def add_partitions_pspec(self, new_parts): - new_parts """ + pass def append_partition(self, db_name, tbl_name, part_vals): """ @@ -565,6 +629,7 @@ def append_partition(self, db_name, tbl_name, part_vals): - part_vals """ + pass def add_partitions_req(self, request): """ @@ -572,6 +637,7 @@ def add_partitions_req(self, request): - request """ + pass def append_partition_with_environment_context(self, db_name, tbl_name, part_vals, environment_context): """ @@ -582,6 +648,7 @@ def append_partition_with_environment_context(self, db_name, tbl_name, part_vals - environment_context """ + pass def append_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -591,6 +658,7 @@ def append_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ + pass def append_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, environment_context): """ @@ -601,6 +669,7 @@ def append_partition_by_name_with_environment_context(self, db_name, tbl_name, p - environment_context """ + pass def drop_partition(self, db_name, tbl_name, part_vals, deleteData): """ @@ -611,6 +680,7 @@ def drop_partition(self, db_name, tbl_name, part_vals, deleteData): - deleteData """ + pass def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, deleteData, environment_context): """ @@ -622,6 +692,7 @@ def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, - environment_context """ + pass def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): """ @@ -632,6 +703,7 @@ def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): - deleteData """ + pass def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, deleteData, environment_context): """ @@ -643,6 +715,7 @@ def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, par - environment_context """ + pass def drop_partitions_req(self, req): """ @@ -650,6 +723,7 @@ def drop_partitions_req(self, req): - req """ + pass def get_partition(self, db_name, tbl_name, part_vals): """ @@ -659,6 +733,7 @@ def get_partition(self, db_name, tbl_name, part_vals): - part_vals """ + pass def get_partition_req(self, req): """ @@ -666,6 +741,7 @@ def get_partition_req(self, req): - req """ + pass def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -677,6 +753,7 @@ def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_ - dest_table_name """ + pass def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -688,6 +765,7 @@ def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest - dest_table_name """ + pass def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group_names): """ @@ -699,6 +777,7 @@ def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group - group_names """ + pass def get_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -708,6 +787,7 @@ def get_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ + pass def get_partitions(self, db_name, tbl_name, max_parts): """ @@ -717,6 +797,7 @@ def get_partitions(self, db_name, tbl_name, max_parts): - max_parts """ + pass def get_partitions_req(self, req): """ @@ -724,6 +805,7 @@ def get_partitions_req(self, req): - req """ + pass def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, group_names): """ @@ -735,6 +817,7 @@ def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, grou - group_names """ + pass def get_partitions_pspec(self, db_name, tbl_name, max_parts): """ @@ -744,6 +827,7 @@ def get_partitions_pspec(self, db_name, tbl_name, max_parts): - max_parts """ + pass def get_partition_names(self, db_name, tbl_name, max_parts): """ @@ -753,6 +837,7 @@ def get_partition_names(self, db_name, tbl_name, max_parts): - max_parts """ + pass def get_partition_values(self, request): """ @@ -760,6 +845,7 @@ def get_partition_values(self, request): - request """ + pass def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -770,6 +856,7 @@ def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ + pass def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, user_name, group_names): """ @@ -782,6 +869,7 @@ def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, u - group_names """ + pass def get_partitions_ps_with_auth_req(self, req): """ @@ -789,6 +877,7 @@ def get_partitions_ps_with_auth_req(self, req): - req """ + pass def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -799,6 +888,7 @@ def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ + pass def get_partition_names_ps_req(self, req): """ @@ -806,6 +896,7 @@ def get_partition_names_ps_req(self, req): - req """ + pass def get_partition_names_req(self, req): """ @@ -813,6 +904,7 @@ def get_partition_names_req(self, req): - req """ + pass def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -823,6 +915,7 @@ def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ + pass def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -833,6 +926,7 @@ def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ + pass def get_partitions_by_expr(self, req): """ @@ -840,6 +934,7 @@ def get_partitions_by_expr(self, req): - req """ + pass def get_partitions_spec_by_expr(self, req): """ @@ -847,6 +942,7 @@ def get_partitions_spec_by_expr(self, req): - req """ + pass def get_num_partitions_by_filter(self, db_name, tbl_name, filter): """ @@ -856,6 +952,7 @@ def get_num_partitions_by_filter(self, db_name, tbl_name, filter): - filter """ + pass def get_partitions_by_names(self, db_name, tbl_name, names): """ @@ -865,6 +962,7 @@ def get_partitions_by_names(self, db_name, tbl_name, names): - names """ + pass def get_partitions_by_names_req(self, req): """ @@ -872,6 +970,7 @@ def get_partitions_by_names_req(self, req): - req """ + pass def alter_partition(self, db_name, tbl_name, new_part): """ @@ -881,6 +980,7 @@ def alter_partition(self, db_name, tbl_name, new_part): - new_part """ + pass def alter_partitions(self, db_name, tbl_name, new_parts): """ @@ -890,6 +990,7 @@ def alter_partitions(self, db_name, tbl_name, new_parts): - new_parts """ + pass def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts, environment_context): """ @@ -900,6 +1001,7 @@ def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts - environment_context """ + pass def alter_partitions_req(self, req): """ @@ -907,6 +1009,7 @@ def alter_partitions_req(self, req): - req """ + pass def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, environment_context): """ @@ -917,6 +1020,7 @@ def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, - environment_context """ + pass def rename_partition(self, db_name, tbl_name, part_vals, new_part): """ @@ -927,6 +1031,7 @@ def rename_partition(self, db_name, tbl_name, part_vals, new_part): - new_part """ + pass def rename_partition_req(self, req): """ @@ -934,6 +1039,7 @@ def rename_partition_req(self, req): - req """ + pass def partition_name_has_valid_characters(self, part_vals, throw_exception): """ @@ -942,6 +1048,7 @@ def partition_name_has_valid_characters(self, part_vals, throw_exception): - throw_exception """ + pass def get_config_value(self, name, defaultValue): """ @@ -950,6 +1057,7 @@ def get_config_value(self, name, defaultValue): - defaultValue """ + pass def partition_name_to_vals(self, part_name): """ @@ -957,6 +1065,7 @@ def partition_name_to_vals(self, part_name): - part_name """ + pass def partition_name_to_spec(self, part_name): """ @@ -964,6 +1073,7 @@ def partition_name_to_spec(self, part_name): - part_name """ + pass def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -974,6 +1084,7 @@ def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ + pass def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -984,6 +1095,7 @@ def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ + pass def get_primary_keys(self, request): """ @@ -991,6 +1103,7 @@ def get_primary_keys(self, request): - request """ + pass def get_foreign_keys(self, request): """ @@ -998,6 +1111,7 @@ def get_foreign_keys(self, request): - request """ + pass def get_unique_constraints(self, request): """ @@ -1005,6 +1119,7 @@ def get_unique_constraints(self, request): - request """ + pass def get_not_null_constraints(self, request): """ @@ -1012,6 +1127,7 @@ def get_not_null_constraints(self, request): - request """ + pass def get_default_constraints(self, request): """ @@ -1019,6 +1135,7 @@ def get_default_constraints(self, request): - request """ + pass def get_check_constraints(self, request): """ @@ -1026,6 +1143,7 @@ def get_check_constraints(self, request): - request """ + pass def get_all_table_constraints(self, request): """ @@ -1033,6 +1151,7 @@ def get_all_table_constraints(self, request): - request """ + pass def update_table_column_statistics(self, stats_obj): """ @@ -1040,6 +1159,7 @@ def update_table_column_statistics(self, stats_obj): - stats_obj """ + pass def update_partition_column_statistics(self, stats_obj): """ @@ -1047,6 +1167,7 @@ def update_partition_column_statistics(self, stats_obj): - stats_obj """ + pass def update_table_column_statistics_req(self, req): """ @@ -1054,6 +1175,7 @@ def update_table_column_statistics_req(self, req): - req """ + pass def update_partition_column_statistics_req(self, req): """ @@ -1061,6 +1183,7 @@ def update_partition_column_statistics_req(self, req): - req """ + pass def update_transaction_statistics(self, req): """ @@ -1068,6 +1191,7 @@ def update_transaction_statistics(self, req): - req """ + pass def get_table_column_statistics(self, db_name, tbl_name, col_name): """ @@ -1077,6 +1201,7 @@ def get_table_column_statistics(self, db_name, tbl_name, col_name): - col_name """ + pass def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name): """ @@ -1087,6 +1212,7 @@ def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name - col_name """ + pass def get_table_statistics_req(self, request): """ @@ -1094,6 +1220,7 @@ def get_table_statistics_req(self, request): - request """ + pass def get_partitions_statistics_req(self, request): """ @@ -1101,6 +1228,7 @@ def get_partitions_statistics_req(self, request): - request """ + pass def get_aggr_stats_for(self, request): """ @@ -1108,6 +1236,7 @@ def get_aggr_stats_for(self, request): - request """ + pass def set_aggr_stats_for(self, request): """ @@ -1115,6 +1244,7 @@ def set_aggr_stats_for(self, request): - request """ + pass def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_name, engine): """ @@ -1126,6 +1256,7 @@ def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_n - engine """ + pass def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): """ @@ -1136,6 +1267,7 @@ def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): - engine """ + pass def create_function(self, func): """ @@ -1143,6 +1275,7 @@ def create_function(self, func): - func """ + pass def drop_function(self, dbName, funcName): """ @@ -1151,6 +1284,7 @@ def drop_function(self, dbName, funcName): - funcName """ + pass def alter_function(self, dbName, funcName, newFunc): """ @@ -1160,6 +1294,7 @@ def alter_function(self, dbName, funcName, newFunc): - newFunc """ + pass def get_functions(self, dbName, pattern): """ @@ -1168,6 +1303,7 @@ def get_functions(self, dbName, pattern): - pattern """ + pass def get_function(self, dbName, funcName): """ @@ -1176,6 +1312,7 @@ def get_function(self, dbName, funcName): - funcName """ + pass def get_all_functions(self): pass @@ -1186,6 +1323,7 @@ def create_role(self, role): - role """ + pass def drop_role(self, role_name): """ @@ -1193,6 +1331,7 @@ def drop_role(self, role_name): - role_name """ + pass def get_role_names(self): pass @@ -1208,6 +1347,7 @@ def grant_role(self, role_name, principal_name, principal_type, grantor, grantor - grant_option """ + pass def revoke_role(self, role_name, principal_name, principal_type): """ @@ -1217,6 +1357,7 @@ def revoke_role(self, role_name, principal_name, principal_type): - principal_type """ + pass def list_roles(self, principal_name, principal_type): """ @@ -1225,6 +1366,7 @@ def list_roles(self, principal_name, principal_type): - principal_type """ + pass def grant_revoke_role(self, request): """ @@ -1232,6 +1374,7 @@ def grant_revoke_role(self, request): - request """ + pass def get_principals_in_role(self, request): """ @@ -1239,6 +1382,7 @@ def get_principals_in_role(self, request): - request """ + pass def get_role_grants_for_principal(self, request): """ @@ -1246,6 +1390,7 @@ def get_role_grants_for_principal(self, request): - request """ + pass def get_privilege_set(self, hiveObject, user_name, group_names): """ @@ -1255,6 +1400,7 @@ def get_privilege_set(self, hiveObject, user_name, group_names): - group_names """ + pass def list_privileges(self, principal_name, principal_type, hiveObject): """ @@ -1264,6 +1410,7 @@ def list_privileges(self, principal_name, principal_type, hiveObject): - hiveObject """ + pass def grant_privileges(self, privileges): """ @@ -1271,6 +1418,7 @@ def grant_privileges(self, privileges): - privileges """ + pass def revoke_privileges(self, privileges): """ @@ -1278,6 +1426,7 @@ def revoke_privileges(self, privileges): - privileges """ + pass def grant_revoke_privileges(self, request): """ @@ -1285,6 +1434,7 @@ def grant_revoke_privileges(self, request): - request """ + pass def refresh_privileges(self, objToRefresh, authorizer, grantRequest): """ @@ -1294,6 +1444,7 @@ def refresh_privileges(self, objToRefresh, authorizer, grantRequest): - grantRequest """ + pass def set_ugi(self, user_name, group_names): """ @@ -1302,6 +1453,7 @@ def set_ugi(self, user_name, group_names): - group_names """ + pass def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): """ @@ -1310,6 +1462,7 @@ def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): - renewer_kerberos_principal_name """ + pass def renew_delegation_token(self, token_str_form): """ @@ -1317,6 +1470,7 @@ def renew_delegation_token(self, token_str_form): - token_str_form """ + pass def cancel_delegation_token(self, token_str_form): """ @@ -1324,6 +1478,7 @@ def cancel_delegation_token(self, token_str_form): - token_str_form """ + pass def add_token(self, token_identifier, delegation_token): """ @@ -1332,6 +1487,7 @@ def add_token(self, token_identifier, delegation_token): - delegation_token """ + pass def remove_token(self, token_identifier): """ @@ -1339,6 +1495,7 @@ def remove_token(self, token_identifier): - token_identifier """ + pass def get_token(self, token_identifier): """ @@ -1346,6 +1503,7 @@ def get_token(self, token_identifier): - token_identifier """ + pass def get_all_token_identifiers(self): pass @@ -1356,6 +1514,7 @@ def add_master_key(self, key): - key """ + pass def update_master_key(self, seq_number, key): """ @@ -1364,6 +1523,7 @@ def update_master_key(self, seq_number, key): - key """ + pass def remove_master_key(self, key_seq): """ @@ -1371,6 +1531,7 @@ def remove_master_key(self, key_seq): - key_seq """ + pass def get_master_keys(self): pass @@ -1387,6 +1548,7 @@ def open_txns(self, rqst): - rqst """ + pass def abort_txn(self, rqst): """ @@ -1394,6 +1556,7 @@ def abort_txn(self, rqst): - rqst """ + pass def abort_txns(self, rqst): """ @@ -1401,6 +1564,7 @@ def abort_txns(self, rqst): - rqst """ + pass def commit_txn(self, rqst): """ @@ -1408,6 +1572,7 @@ def commit_txn(self, rqst): - rqst """ + pass def get_latest_txnid_in_conflict(self, txnId): """ @@ -1415,6 +1580,7 @@ def get_latest_txnid_in_conflict(self, txnId): - txnId """ + pass def repl_tbl_writeid_state(self, rqst): """ @@ -1422,6 +1588,7 @@ def repl_tbl_writeid_state(self, rqst): - rqst """ + pass def get_valid_write_ids(self, rqst): """ @@ -1429,6 +1596,7 @@ def get_valid_write_ids(self, rqst): - rqst """ + pass def allocate_table_write_ids(self, rqst): """ @@ -1436,6 +1604,7 @@ def allocate_table_write_ids(self, rqst): - rqst """ + pass def get_max_allocated_table_write_id(self, rqst): """ @@ -1443,6 +1612,7 @@ def get_max_allocated_table_write_id(self, rqst): - rqst """ + pass def seed_write_id(self, rqst): """ @@ -1450,6 +1620,7 @@ def seed_write_id(self, rqst): - rqst """ + pass def seed_txn_id(self, rqst): """ @@ -1457,6 +1628,7 @@ def seed_txn_id(self, rqst): - rqst """ + pass def lock(self, rqst): """ @@ -1464,6 +1636,7 @@ def lock(self, rqst): - rqst """ + pass def check_lock(self, rqst): """ @@ -1471,6 +1644,7 @@ def check_lock(self, rqst): - rqst """ + pass def unlock(self, rqst): """ @@ -1478,6 +1652,7 @@ def unlock(self, rqst): - rqst """ + pass def show_locks(self, rqst): """ @@ -1485,6 +1660,7 @@ def show_locks(self, rqst): - rqst """ + pass def heartbeat(self, ids): """ @@ -1492,6 +1668,7 @@ def heartbeat(self, ids): - ids """ + pass def heartbeat_txn_range(self, txns): """ @@ -1499,6 +1676,7 @@ def heartbeat_txn_range(self, txns): - txns """ + pass def compact(self, rqst): """ @@ -1506,6 +1684,7 @@ def compact(self, rqst): - rqst """ + pass def compact2(self, rqst): """ @@ -1513,6 +1692,7 @@ def compact2(self, rqst): - rqst """ + pass def show_compact(self, rqst): """ @@ -1520,6 +1700,7 @@ def show_compact(self, rqst): - rqst """ + pass def add_dynamic_partitions(self, rqst): """ @@ -1527,6 +1708,7 @@ def add_dynamic_partitions(self, rqst): - rqst """ + pass def find_next_compact(self, workerId): """ @@ -1534,6 +1716,7 @@ def find_next_compact(self, workerId): - workerId """ + pass def find_next_compact2(self, rqst): """ @@ -1541,6 +1724,7 @@ def find_next_compact2(self, rqst): - rqst """ + pass def update_compactor_state(self, cr, txn_id): """ @@ -1549,6 +1733,7 @@ def update_compactor_state(self, cr, txn_id): - txn_id """ + pass def find_columns_with_stats(self, cr): """ @@ -1556,6 +1741,7 @@ def find_columns_with_stats(self, cr): - cr """ + pass def mark_cleaned(self, cr): """ @@ -1563,6 +1749,7 @@ def mark_cleaned(self, cr): - cr """ + pass def mark_compacted(self, cr): """ @@ -1570,6 +1757,7 @@ def mark_compacted(self, cr): - cr """ + pass def mark_failed(self, cr): """ @@ -1577,6 +1765,7 @@ def mark_failed(self, cr): - cr """ + pass def mark_refused(self, cr): """ @@ -1584,6 +1773,7 @@ def mark_refused(self, cr): - cr """ + pass def update_compaction_metrics_data(self, data): """ @@ -1591,6 +1781,7 @@ def update_compaction_metrics_data(self, data): - data """ + pass def remove_compaction_metrics_data(self, request): """ @@ -1598,6 +1789,7 @@ def remove_compaction_metrics_data(self, request): - request """ + pass def set_hadoop_jobid(self, jobId, cq_id): """ @@ -1606,6 +1798,7 @@ def set_hadoop_jobid(self, jobId, cq_id): - cq_id """ + pass def get_latest_committed_compaction_info(self, rqst): """ @@ -1613,6 +1806,7 @@ def get_latest_committed_compaction_info(self, rqst): - rqst """ + pass def get_next_notification(self, rqst): """ @@ -1620,6 +1814,7 @@ def get_next_notification(self, rqst): - rqst """ + pass def get_current_notificationEventId(self): pass @@ -1630,6 +1825,7 @@ def get_notification_events_count(self, rqst): - rqst """ + pass def fire_listener_event(self, rqst): """ @@ -1637,6 +1833,7 @@ def fire_listener_event(self, rqst): - rqst """ + pass def flushCache(self): pass @@ -1647,6 +1844,7 @@ def add_write_notification_log(self, rqst): - rqst """ + pass def add_write_notification_log_in_batch(self, rqst): """ @@ -1654,6 +1852,7 @@ def add_write_notification_log_in_batch(self, rqst): - rqst """ + pass def cm_recycle(self, request): """ @@ -1661,6 +1860,7 @@ def cm_recycle(self, request): - request """ + pass def get_file_metadata_by_expr(self, req): """ @@ -1668,6 +1868,7 @@ def get_file_metadata_by_expr(self, req): - req """ + pass def get_file_metadata(self, req): """ @@ -1675,6 +1876,7 @@ def get_file_metadata(self, req): - req """ + pass def put_file_metadata(self, req): """ @@ -1682,6 +1884,7 @@ def put_file_metadata(self, req): - req """ + pass def clear_file_metadata(self, req): """ @@ -1689,6 +1892,7 @@ def clear_file_metadata(self, req): - req """ + pass def cache_file_metadata(self, req): """ @@ -1696,6 +1900,7 @@ def cache_file_metadata(self, req): - req """ + pass def get_metastore_db_uuid(self): pass @@ -1706,6 +1911,7 @@ def create_resource_plan(self, request): - request """ + pass def get_resource_plan(self, request): """ @@ -1713,6 +1919,7 @@ def get_resource_plan(self, request): - request """ + pass def get_active_resource_plan(self, request): """ @@ -1720,6 +1927,7 @@ def get_active_resource_plan(self, request): - request """ + pass def get_all_resource_plans(self, request): """ @@ -1727,6 +1935,7 @@ def get_all_resource_plans(self, request): - request """ + pass def alter_resource_plan(self, request): """ @@ -1734,6 +1943,7 @@ def alter_resource_plan(self, request): - request """ + pass def validate_resource_plan(self, request): """ @@ -1741,6 +1951,7 @@ def validate_resource_plan(self, request): - request """ + pass def drop_resource_plan(self, request): """ @@ -1748,6 +1959,7 @@ def drop_resource_plan(self, request): - request """ + pass def create_wm_trigger(self, request): """ @@ -1755,6 +1967,7 @@ def create_wm_trigger(self, request): - request """ + pass def alter_wm_trigger(self, request): """ @@ -1762,6 +1975,7 @@ def alter_wm_trigger(self, request): - request """ + pass def drop_wm_trigger(self, request): """ @@ -1769,6 +1983,7 @@ def drop_wm_trigger(self, request): - request """ + pass def get_triggers_for_resourceplan(self, request): """ @@ -1776,6 +1991,7 @@ def get_triggers_for_resourceplan(self, request): - request """ + pass def create_wm_pool(self, request): """ @@ -1783,6 +1999,7 @@ def create_wm_pool(self, request): - request """ + pass def alter_wm_pool(self, request): """ @@ -1790,6 +2007,7 @@ def alter_wm_pool(self, request): - request """ + pass def drop_wm_pool(self, request): """ @@ -1797,6 +2015,7 @@ def drop_wm_pool(self, request): - request """ + pass def create_or_update_wm_mapping(self, request): """ @@ -1804,6 +2023,7 @@ def create_or_update_wm_mapping(self, request): - request """ + pass def drop_wm_mapping(self, request): """ @@ -1811,6 +2031,7 @@ def drop_wm_mapping(self, request): - request """ + pass def create_or_drop_wm_trigger_to_pool_mapping(self, request): """ @@ -1818,6 +2039,7 @@ def create_or_drop_wm_trigger_to_pool_mapping(self, request): - request """ + pass def create_ischema(self, schema): """ @@ -1825,6 +2047,7 @@ def create_ischema(self, schema): - schema """ + pass def alter_ischema(self, rqst): """ @@ -1832,6 +2055,7 @@ def alter_ischema(self, rqst): - rqst """ + pass def get_ischema(self, name): """ @@ -1839,6 +2063,7 @@ def get_ischema(self, name): - name """ + pass def drop_ischema(self, name): """ @@ -1846,6 +2071,7 @@ def drop_ischema(self, name): - name """ + pass def add_schema_version(self, schemaVersion): """ @@ -1853,6 +2079,7 @@ def add_schema_version(self, schemaVersion): - schemaVersion """ + pass def get_schema_version(self, schemaVersion): """ @@ -1860,6 +2087,7 @@ def get_schema_version(self, schemaVersion): - schemaVersion """ + pass def get_schema_latest_version(self, schemaName): """ @@ -1867,6 +2095,7 @@ def get_schema_latest_version(self, schemaName): - schemaName """ + pass def get_schema_all_versions(self, schemaName): """ @@ -1874,6 +2103,7 @@ def get_schema_all_versions(self, schemaName): - schemaName """ + pass def drop_schema_version(self, schemaVersion): """ @@ -1881,6 +2111,7 @@ def drop_schema_version(self, schemaVersion): - schemaVersion """ + pass def get_schemas_by_cols(self, rqst): """ @@ -1888,6 +2119,7 @@ def get_schemas_by_cols(self, rqst): - rqst """ + pass def map_schema_version_to_serde(self, rqst): """ @@ -1895,6 +2127,7 @@ def map_schema_version_to_serde(self, rqst): - rqst """ + pass def set_schema_version_state(self, rqst): """ @@ -1902,6 +2135,7 @@ def set_schema_version_state(self, rqst): - rqst """ + pass def add_serde(self, serde): """ @@ -1909,6 +2143,7 @@ def add_serde(self, serde): - serde """ + pass def get_serde(self, rqst): """ @@ -1916,6 +2151,7 @@ def get_serde(self, rqst): - rqst """ + pass def get_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -1925,6 +2161,7 @@ def get_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ + pass def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -1934,6 +2171,7 @@ def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ + pass def add_runtime_stats(self, stat): """ @@ -1941,6 +2179,7 @@ def add_runtime_stats(self, stat): - stat """ + pass def get_runtime_stats(self, rqst): """ @@ -1948,6 +2187,7 @@ def get_runtime_stats(self, rqst): - rqst """ + pass def get_partitions_with_specs(self, request): """ @@ -1955,6 +2195,7 @@ def get_partitions_with_specs(self, request): - request """ + pass def scheduled_query_poll(self, request): """ @@ -1962,6 +2203,7 @@ def scheduled_query_poll(self, request): - request """ + pass def scheduled_query_maintenance(self, request): """ @@ -1969,6 +2211,7 @@ def scheduled_query_maintenance(self, request): - request """ + pass def scheduled_query_progress(self, info): """ @@ -1976,6 +2219,7 @@ def scheduled_query_progress(self, info): - info """ + pass def get_scheduled_query(self, scheduleKey): """ @@ -1983,6 +2227,7 @@ def get_scheduled_query(self, scheduleKey): - scheduleKey """ + pass def add_replication_metrics(self, replicationMetricList): """ @@ -1990,6 +2235,7 @@ def add_replication_metrics(self, replicationMetricList): - replicationMetricList """ + pass def get_replication_metrics(self, rqst): """ @@ -1997,6 +2243,7 @@ def get_replication_metrics(self, rqst): - rqst """ + pass def get_open_txns_req(self, getOpenTxnsRequest): """ @@ -2004,6 +2251,7 @@ def get_open_txns_req(self, getOpenTxnsRequest): - getOpenTxnsRequest """ + pass def create_stored_procedure(self, proc): """ @@ -2011,6 +2259,7 @@ def create_stored_procedure(self, proc): - proc """ + pass def get_stored_procedure(self, request): """ @@ -2018,6 +2267,7 @@ def get_stored_procedure(self, request): - request """ + pass def drop_stored_procedure(self, request): """ @@ -2025,6 +2275,7 @@ def drop_stored_procedure(self, request): - request """ + pass def get_all_stored_procedures(self, request): """ @@ -2032,6 +2283,7 @@ def get_all_stored_procedures(self, request): - request """ + pass def find_package(self, request): """ @@ -2039,6 +2291,7 @@ def find_package(self, request): - request """ + pass def add_package(self, request): """ @@ -2046,6 +2299,7 @@ def add_package(self, request): - request """ + pass def get_all_packages(self, request): """ @@ -2053,6 +2307,7 @@ def get_all_packages(self, request): - request """ + pass def drop_package(self, request): """ @@ -2060,6 +2315,7 @@ def drop_package(self, request): - request """ + pass def get_all_write_event_info(self, request): """ @@ -2067,6 +2323,7 @@ def get_all_write_event_info(self, request): - request """ + pass class Client(fb303.FacebookService.Client, Iface): @@ -19984,7 +20241,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20073,7 +20330,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20170,7 +20427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20252,7 +20509,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20328,7 +20585,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20427,7 +20684,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20517,7 +20774,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20616,7 +20873,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20706,7 +20963,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20806,7 +21063,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20873,7 +21130,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20952,7 +21209,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21034,7 +21291,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21133,7 +21390,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21223,7 +21480,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21322,7 +21579,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21413,7 +21670,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21513,7 +21770,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21602,7 +21859,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21702,7 +21959,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21816,7 +22073,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21929,7 +22186,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22019,7 +22276,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22118,7 +22375,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22209,7 +22466,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22308,7 +22565,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22368,7 +22625,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22458,7 +22715,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22554,7 +22811,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22648,7 +22905,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22731,7 +22988,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22830,7 +23087,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22920,7 +23177,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23020,7 +23277,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23134,7 +23391,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23224,7 +23481,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23292,7 +23549,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23382,7 +23639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23478,7 +23735,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23572,7 +23829,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23656,7 +23913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23756,7 +24013,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23845,7 +24102,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23956,7 +24213,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24053,7 +24310,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24152,7 +24409,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24242,7 +24499,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24344,7 +24601,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24441,7 +24698,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24568,7 +24825,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24692,7 +24949,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24826,7 +25083,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24922,7 +25179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25034,7 +25291,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25145,7 +25402,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25272,7 +25529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25396,7 +25653,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25530,7 +25787,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25626,7 +25883,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25738,7 +25995,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25834,7 +26091,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25945,7 +26202,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26055,7 +26312,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26173,7 +26430,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26396,7 +26653,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26549,7 +26806,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26646,7 +26903,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26757,7 +27014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26854,7 +27111,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26941,7 +27198,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27024,7 +27281,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27111,7 +27368,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27194,7 +27451,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27281,7 +27538,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27364,7 +27621,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27451,7 +27708,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27534,7 +27791,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27621,7 +27878,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27704,7 +27961,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27791,7 +28048,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27874,7 +28131,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27961,7 +28218,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28044,7 +28301,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28168,7 +28425,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28298,7 +28555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28399,7 +28656,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28522,7 +28779,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28630,7 +28887,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28752,7 +29009,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28841,7 +29098,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28917,7 +29174,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29005,7 +29262,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29102,7 +29359,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29208,7 +29465,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29319,7 +29576,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29432,7 +29689,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29492,7 +29749,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29579,7 +29836,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29662,7 +29919,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29761,7 +30018,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29882,7 +30139,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29992,7 +30249,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30075,7 +30332,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30174,7 +30431,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30271,7 +30528,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30378,7 +30635,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30492,7 +30749,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30583,7 +30840,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30658,7 +30915,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30754,7 +31011,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30836,7 +31093,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30936,7 +31193,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31025,7 +31282,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31137,7 +31394,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31247,7 +31504,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31366,7 +31623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31504,7 +31761,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31624,7 +31881,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31741,7 +31998,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31878,7 +32135,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32002,7 +32259,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32103,7 +32360,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32227,7 +32484,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32335,7 +32592,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32458,7 +32715,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32566,7 +32823,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32649,7 +32906,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32749,7 +33006,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32838,7 +33095,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32950,7 +33207,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33059,7 +33316,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33178,7 +33435,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33282,7 +33539,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33393,7 +33650,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33497,7 +33754,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33608,7 +33865,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33743,7 +34000,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33869,7 +34126,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33965,7 +34222,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34077,7 +34334,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34225,7 +34482,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34358,7 +34615,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34483,7 +34740,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34609,7 +34866,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34747,7 +35004,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34880,7 +35137,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35027,7 +35284,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35147,7 +35404,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35300,7 +35557,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35427,7 +35684,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35557,7 +35814,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35677,7 +35934,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35820,7 +36077,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35947,7 +36204,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36036,7 +36293,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36136,7 +36393,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36264,7 +36521,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36378,7 +36635,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36467,7 +36724,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36567,7 +36824,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36729,7 +36986,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36881,7 +37138,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37057,7 +37314,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37217,7 +37474,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37397,7 +37654,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37525,7 +37782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37643,7 +37900,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37757,7 +38014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37873,7 +38130,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37995,7 +38252,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38084,7 +38341,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38184,7 +38441,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38338,7 +38595,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38474,7 +38731,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38590,7 +38847,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38712,7 +38969,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38828,7 +39085,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38953,7 +39210,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39042,7 +39299,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39142,7 +39399,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39282,7 +39539,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39411,7 +39668,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39589,7 +39846,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39732,7 +39989,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39821,7 +40078,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39921,7 +40178,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40061,7 +40318,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40193,7 +40450,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40282,7 +40539,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40382,7 +40639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40471,7 +40728,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40582,7 +40839,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40712,7 +40969,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40841,7 +41098,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40971,7 +41228,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41100,7 +41357,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41189,7 +41446,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41289,7 +41546,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41378,7 +41635,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41478,7 +41735,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41596,7 +41853,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41709,7 +41966,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41837,7 +42094,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41959,7 +42216,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42048,7 +42305,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42148,7 +42405,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42265,7 +42522,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42366,7 +42623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42485,7 +42742,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42586,7 +42843,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42718,7 +42975,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42826,7 +43083,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42909,7 +43166,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43009,7 +43266,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43139,7 +43396,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43247,7 +43504,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43382,7 +43639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43490,7 +43747,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43573,7 +43830,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43673,7 +43930,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43785,7 +44042,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43879,7 +44136,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43976,7 +44233,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44072,7 +44329,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44155,7 +44412,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44254,7 +44511,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44337,7 +44594,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44442,7 +44699,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44581,7 +44838,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44737,7 +44994,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44905,7 +45162,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45073,7 +45330,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45190,7 +45447,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45290,7 +45547,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45379,7 +45636,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45479,7 +45736,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45568,7 +45825,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45668,7 +45925,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45757,7 +46014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45857,7 +46114,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45946,7 +46203,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46046,7 +46303,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46135,7 +46392,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46235,7 +46492,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46324,7 +46581,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46424,7 +46681,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46513,7 +46770,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46636,7 +46893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46739,7 +46996,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46862,7 +47119,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46965,7 +47222,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47089,7 +47346,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47192,7 +47449,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47316,7 +47573,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47419,7 +47676,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47494,7 +47751,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47599,7 +47856,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47737,7 +47994,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47883,7 +48140,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48028,7 +48285,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48131,7 +48388,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48231,7 +48488,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48320,7 +48577,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48420,7 +48677,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48509,7 +48766,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48609,7 +48866,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48698,7 +48955,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48821,7 +49078,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48981,7 +49238,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49132,7 +49389,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49278,7 +49535,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49422,7 +49679,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49525,7 +49782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49636,7 +49893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49748,7 +50005,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49842,7 +50099,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49953,7 +50210,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50054,7 +50311,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50152,7 +50409,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50258,7 +50515,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50355,7 +50612,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50462,7 +50719,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50529,7 +50786,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50608,7 +50865,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50690,7 +50947,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50777,7 +51034,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50860,7 +51117,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50947,7 +51204,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51007,7 +51264,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51097,7 +51354,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51244,7 +51501,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51366,7 +51623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51475,7 +51732,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51576,7 +51833,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51671,7 +51928,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51774,7 +52031,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51856,7 +52113,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51944,7 +52201,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52026,7 +52283,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52114,7 +52371,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52196,7 +52453,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52284,7 +52541,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52404,7 +52661,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52506,7 +52763,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52614,7 +52871,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52724,7 +52981,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52806,7 +53063,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52893,7 +53150,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52975,7 +53232,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53062,7 +53319,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53144,7 +53401,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53232,7 +53489,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53341,7 +53598,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53443,7 +53700,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53550,7 +53807,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53656,7 +53913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53757,7 +54014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53853,7 +54110,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53936,7 +54193,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54023,7 +54280,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54106,7 +54363,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54181,7 +54438,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54272,7 +54529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54354,7 +54611,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54430,7 +54687,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54505,7 +54762,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54581,7 +54838,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54658,7 +54915,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54711,7 +54968,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54789,7 +55046,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54865,7 +55122,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54952,7 +55209,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55047,7 +55304,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55141,7 +55398,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55223,7 +55480,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55298,7 +55555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55351,7 +55608,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55429,7 +55686,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55482,7 +55739,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55549,7 +55806,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55602,7 +55859,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55669,7 +55926,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55744,7 +56001,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55820,7 +56077,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55895,7 +56152,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55970,7 +56227,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56046,7 +56303,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56121,7 +56378,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56197,7 +56454,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56284,7 +56541,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56366,7 +56623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56453,7 +56710,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56535,7 +56792,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56589,7 +56846,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56656,7 +56913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56756,7 +57013,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56845,7 +57102,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56957,7 +57214,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57053,7 +57310,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57141,7 +57398,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57223,7 +57480,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57298,7 +57555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57374,7 +57631,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57449,7 +57706,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57525,7 +57782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57625,7 +57882,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57714,7 +57971,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57826,7 +58083,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57922,7 +58179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58009,7 +58266,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58092,7 +58349,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58168,7 +58425,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58243,7 +58500,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58342,7 +58599,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58432,7 +58689,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58508,7 +58765,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58583,7 +58840,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58637,7 +58894,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58704,7 +58961,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58780,7 +59037,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58855,7 +59112,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58931,7 +59188,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59006,7 +59263,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59093,7 +59350,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59177,7 +59434,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59265,7 +59522,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59347,7 +59604,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59435,7 +59692,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59529,7 +59786,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59590,7 +59847,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59657,7 +59914,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59744,7 +60001,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59819,7 +60076,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59894,7 +60151,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59970,7 +60227,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60045,7 +60302,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60121,7 +60378,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60196,7 +60453,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60272,7 +60529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60347,7 +60604,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60423,7 +60680,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60510,7 +60767,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60592,7 +60849,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60667,7 +60924,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60756,7 +61013,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60817,7 +61074,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60884,7 +61141,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60960,7 +61217,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61035,7 +61292,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61111,7 +61368,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61164,7 +61421,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61231,7 +61488,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61306,7 +61563,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61382,7 +61639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61457,7 +61714,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61533,7 +61790,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61586,7 +61843,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61631,7 +61888,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61698,7 +61955,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61774,7 +62031,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61849,7 +62106,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61925,7 +62182,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62000,7 +62257,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62088,7 +62345,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62170,7 +62427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62246,7 +62503,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62321,7 +62578,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62397,7 +62654,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62472,7 +62729,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62548,7 +62805,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62623,7 +62880,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62699,7 +62956,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62774,7 +63031,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62850,7 +63107,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62903,7 +63160,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62983,7 +63240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63065,7 +63322,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63177,7 +63434,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63273,7 +63530,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63373,7 +63630,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63462,7 +63719,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63550,7 +63807,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63632,7 +63889,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63720,7 +63977,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63802,7 +64059,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63914,7 +64171,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64010,7 +64267,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64110,7 +64367,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64199,7 +64456,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64311,7 +64568,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64407,7 +64664,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64531,7 +64788,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64634,7 +64891,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64746,7 +65003,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64842,7 +65099,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64954,7 +65211,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65050,7 +65307,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65150,7 +65407,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65239,7 +65496,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65363,7 +65620,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65466,7 +65723,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65590,7 +65847,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65693,7 +65950,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65805,7 +66062,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65901,7 +66158,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66025,7 +66282,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66128,7 +66385,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66240,7 +66497,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66336,7 +66593,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66460,7 +66717,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66563,7 +66820,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66662,7 +66919,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66752,7 +67009,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66839,7 +67096,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66922,7 +67179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67022,7 +67279,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67111,7 +67368,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67210,7 +67467,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67300,7 +67557,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67399,7 +67656,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67489,7 +67746,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67589,7 +67846,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67678,7 +67935,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67778,7 +68035,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67867,7 +68124,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67975,7 +68232,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68064,7 +68321,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68151,7 +68408,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68234,7 +68491,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68322,7 +68579,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68404,7 +68661,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68491,7 +68748,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68574,7 +68831,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68673,7 +68930,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68763,7 +69020,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68850,7 +69107,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68933,7 +69190,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69033,7 +69290,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69149,7 +69406,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69239,7 +69496,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69341,7 +69598,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69430,7 +69687,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69505,7 +69762,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69580,7 +69837,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69656,7 +69913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69752,7 +70009,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69834,7 +70091,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69922,7 +70179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70004,7 +70261,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70092,7 +70349,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70174,7 +70431,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70285,7 +70542,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70382,7 +70639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70469,7 +70726,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70552,7 +70809,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70652,7 +70909,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70741,7 +70998,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70816,7 +71073,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70892,7 +71149,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70980,7 +71237,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71062,7 +71319,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71138,7 +71395,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71213,7 +71470,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71300,7 +71557,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71383,7 +71640,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71483,7 +71740,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71572,7 +71829,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71647,7 +71904,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71723,7 +71980,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71822,7 +72079,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71904,7 +72161,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72004,7 +72261,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72093,7 +72350,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72168,7 +72425,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72244,7 +72501,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72343,7 +72600,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72425,7 +72682,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72500,7 +72757,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72576,7 +72833,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72672,7 +72929,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72700,4 +72957,4 @@ def __ne__(self, other): ), # 1 ) fix_spec(all_structs) -del all_structs +del all_structs \ No newline at end of file diff --git a/vendor/hive_metastore/ttypes.py b/vendor/hive_metastore/ttypes.py index fd279207cb..075fed6fa3 100644 --- a/vendor/hive_metastore/ttypes.py +++ b/vendor/hive_metastore/ttypes.py @@ -643,7 +643,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -735,7 +735,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -815,7 +815,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -983,7 +983,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1231,7 +1231,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1399,7 +1399,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1555,7 +1555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1725,7 +1725,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1895,7 +1895,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2071,7 +2071,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2184,7 +2184,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2326,7 +2326,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2440,7 +2440,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2556,7 +2556,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2627,7 +2627,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2782,7 +2782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2869,7 +2869,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2931,7 +2931,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3076,7 +3076,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3117,7 +3117,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3207,7 +3207,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3347,7 +3347,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3427,7 +3427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3500,7 +3500,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3566,7 +3566,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3639,7 +3639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3779,7 +3779,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3841,7 +3841,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3945,7 +3945,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4008,7 +4008,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4085,7 +4085,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4149,7 +4149,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4212,7 +4212,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4286,7 +4286,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4350,7 +4350,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4591,7 +4591,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4753,7 +4753,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4829,7 +4829,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4973,7 +4973,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5223,7 +5223,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5394,7 +5394,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5498,7 +5498,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5612,7 +5612,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5726,7 +5726,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5844,7 +5844,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5948,7 +5948,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6026,7 +6026,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6142,7 +6142,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6206,7 +6206,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6322,7 +6322,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6386,7 +6386,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6502,7 +6502,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6656,7 +6656,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6753,7 +6753,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6889,7 +6889,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7003,7 +7003,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7097,7 +7097,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7183,7 +7183,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7640,7 +7640,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7747,7 +7747,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7993,7 +7993,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8148,7 +8148,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8232,7 +8232,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8303,7 +8303,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8459,7 +8459,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8558,7 +8558,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8685,7 +8685,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8749,7 +8749,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8850,7 +8850,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8972,7 +8972,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9045,7 +9045,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9191,7 +9191,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9264,7 +9264,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9388,7 +9388,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9461,7 +9461,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9585,7 +9585,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9658,7 +9658,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9782,7 +9782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9855,7 +9855,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9979,7 +9979,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10052,7 +10052,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10176,7 +10176,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10241,7 +10241,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10353,7 +10353,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10426,7 +10426,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10499,7 +10499,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10572,7 +10572,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10645,7 +10645,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10718,7 +10718,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10791,7 +10791,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10878,7 +10878,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10965,7 +10965,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11143,7 +11143,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11228,7 +11228,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11327,7 +11327,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11491,7 +11491,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11669,7 +11669,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11752,7 +11752,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11911,7 +11911,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11982,7 +11982,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12058,7 +12058,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12153,7 +12153,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12325,7 +12325,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12529,7 +12529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12605,7 +12605,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12678,7 +12678,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12886,7 +12886,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12972,7 +12972,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13146,7 +13146,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13222,7 +13222,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13399,7 +13399,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13573,7 +13573,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13660,7 +13660,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13772,7 +13772,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13928,7 +13928,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14000,7 +14000,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14090,7 +14090,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14162,7 +14162,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14258,7 +14258,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14412,7 +14412,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14544,7 +14544,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14650,7 +14650,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14799,7 +14799,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14953,7 +14953,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15055,7 +15055,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15183,7 +15183,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15256,7 +15256,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15334,7 +15334,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15471,7 +15471,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15544,7 +15544,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15626,7 +15626,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15690,7 +15690,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15786,7 +15786,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15850,7 +15850,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16008,7 +16008,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16163,7 +16163,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16255,7 +16255,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16343,7 +16343,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16407,7 +16407,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16523,7 +16523,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16791,7 +16791,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16862,7 +16862,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16936,7 +16936,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17014,7 +17014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17108,7 +17108,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17290,7 +17290,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17556,7 +17556,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17619,7 +17619,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17771,7 +17771,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17834,7 +17834,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17944,7 +17944,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18052,7 +18052,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18093,7 +18093,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18403,7 +18403,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18476,7 +18476,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18594,7 +18594,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18667,7 +18667,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18745,7 +18745,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18893,7 +18893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19023,7 +19023,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19123,7 +19123,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19289,7 +19289,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19362,7 +19362,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19426,7 +19426,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19544,7 +19544,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19608,7 +19608,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19768,7 +19768,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19852,7 +19852,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19997,7 +19997,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20067,7 +20067,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20216,7 +20216,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20257,7 +20257,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20378,7 +20378,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20419,7 +20419,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20493,7 +20493,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20582,7 +20582,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20692,7 +20692,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20780,7 +20780,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20852,7 +20852,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20893,7 +20893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20999,7 +20999,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21040,7 +21040,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21112,7 +21112,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21176,7 +21176,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21284,7 +21284,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21355,7 +21355,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21427,7 +21427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21533,7 +21533,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21732,7 +21732,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21809,7 +21809,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21991,7 +21991,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22064,7 +22064,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22226,7 +22226,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22352,7 +22352,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22468,7 +22468,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22626,7 +22626,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22706,7 +22706,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22747,7 +22747,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22873,7 +22873,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22951,7 +22951,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23069,7 +23069,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23209,7 +23209,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23343,7 +23343,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23489,7 +23489,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23625,7 +23625,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23763,7 +23763,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23859,7 +23859,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24010,7 +24010,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24087,7 +24087,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24128,7 +24128,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24192,7 +24192,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24255,7 +24255,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24333,7 +24333,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24396,7 +24396,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24460,7 +24460,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24531,7 +24531,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24658,7 +24658,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24721,7 +24721,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24799,7 +24799,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24897,7 +24897,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24975,7 +24975,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25016,7 +25016,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25079,7 +25079,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25120,7 +25120,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25183,7 +25183,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25224,7 +25224,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25316,7 +25316,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25357,7 +25357,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25435,7 +25435,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25506,7 +25506,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25569,7 +25569,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25610,7 +25610,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25687,7 +25687,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25728,7 +25728,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25820,7 +25820,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25861,7 +25861,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25936,7 +25936,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25977,7 +25977,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26040,7 +26040,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26081,7 +26081,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26199,7 +26199,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26240,7 +26240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26408,7 +26408,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26500,7 +26500,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26576,7 +26576,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26765,7 +26765,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26840,7 +26840,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26932,7 +26932,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27003,7 +27003,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27080,7 +27080,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27155,7 +27155,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27219,7 +27219,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27309,7 +27309,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27387,7 +27387,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27629,7 +27629,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27860,7 +27860,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27923,7 +27923,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27989,7 +27989,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28055,7 +28055,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28137,7 +28137,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28240,7 +28240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28371,7 +28371,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28450,7 +28450,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28558,7 +28558,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28716,7 +28716,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28757,7 +28757,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28932,7 +28932,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28973,7 +28973,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29161,7 +29161,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29202,7 +29202,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29288,7 +29288,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29359,7 +29359,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29579,7 +29579,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29714,7 +29714,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29787,7 +29787,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29922,7 +29922,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29995,7 +29995,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30143,7 +30143,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30208,7 +30208,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30342,7 +30342,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30415,7 +30415,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30573,7 +30573,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30649,7 +30649,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30845,7 +30845,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30918,7 +30918,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31054,7 +31054,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31127,7 +31127,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31215,7 +31215,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31285,7 +31285,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31383,7 +31383,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31463,7 +31463,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31583,7 +31583,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31717,7 +31717,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31815,7 +31815,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31913,7 +31913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31993,7 +31993,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32127,7 +32127,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32219,7 +32219,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32299,7 +32299,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32379,7 +32379,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32459,7 +32459,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32539,7 +32539,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32619,7 +32619,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32699,7 +32699,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32779,7 +32779,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32859,7 +32859,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32939,7 +32939,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33019,7 +33019,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33099,7 +33099,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33179,7 +33179,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33259,7 +33259,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33339,7 +33339,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33419,7 +33419,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42512,4 +42512,4 @@ def __ne__(self, other): ), # 1 ) fix_spec(all_structs) -del all_structs +del all_structs \ No newline at end of file From ba4db4953ccb0b23c0ac2ed6a8b8bf565bd33058 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 11:37:32 -0500 Subject: [PATCH 42/51] fixed gitignore file --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 56797d7d71..7043f0e7d4 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,3 @@ htmlcov pyiceberg/avro/decoder_fast.c pyiceberg/avro/*.html pyiceberg/avro/*.so - -# node modules -node_modules/ From 622e66c50d691cf658d67191251ca5a86c1f4348 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 11:48:42 -0500 Subject: [PATCH 43/51] no whitespace --- pyiceberg/table/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 05a63e873e..9255720ee2 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -1105,7 +1105,7 @@ def upsert( """Shorthand API for performing an upsert to an iceberg table. Args: - + df: The input dataframe to upsert with the table's data. join_cols: The columns to join on. These are essentially analogous to primary keys when_matched_update_all: Bool indicating to update rows that are matched but require an update due to a value in a non-key column changing From 9e79dad3339dfe13d8847478dd8876343850de32 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 13:14:08 -0500 Subject: [PATCH 44/51] fixed vendor fb file from kevins changes --- vendor/fb303/FacebookService.py | 64 ++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/vendor/fb303/FacebookService.py b/vendor/fb303/FacebookService.py index 7115e8a0d8..16510de70d 100644 --- a/vendor/fb303/FacebookService.py +++ b/vendor/fb303/FacebookService.py @@ -1,3 +1,4 @@ + # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -50,18 +51,21 @@ def getName(self): Returns a descriptive name of the service """ + pass def getVersion(self): """ Returns the version of the service """ + pass def getStatus(self): """ Gets the status of this service """ + pass def getStatusDetails(self): """ @@ -69,12 +73,14 @@ def getStatusDetails(self): the dead or warning state, or what is being started or stopped. """ + pass def getCounters(self): """ Gets the counters for this service """ + pass def getCounter(self, key): """ @@ -84,6 +90,7 @@ def getCounter(self, key): - key """ + pass def setOption(self, key, value): """ @@ -94,6 +101,7 @@ def setOption(self, key, value): - value """ + pass def getOption(self, key): """ @@ -103,12 +111,14 @@ def getOption(self, key): - key """ + pass def getOptions(self): """ Gets all options """ + pass def getCpuProfile(self, profileDurationInSec): """ @@ -119,24 +129,28 @@ def getCpuProfile(self, profileDurationInSec): - profileDurationInSec """ + pass def aliveSince(self): """ Returns the unix time that the server has been running since """ + pass def reinitialize(self): """ Tell the server to reload its configuration, reopen log files, etc """ + pass def shutdown(self): """ Suggest a shutdown to the server """ + pass class Client(Iface): @@ -877,7 +891,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -945,7 +959,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -998,7 +1012,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1066,7 +1080,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1119,7 +1133,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1185,7 +1199,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1238,7 +1252,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1306,7 +1320,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1359,7 +1373,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1439,7 +1453,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1515,7 +1529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1590,7 +1604,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1680,7 +1694,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1741,7 +1755,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1809,7 +1823,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1886,7 +1900,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1939,7 +1953,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2023,7 +2037,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2097,7 +2111,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2174,7 +2188,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2227,7 +2241,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2293,7 +2307,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2346,7 +2360,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2391,7 +2405,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2404,4 +2418,4 @@ def __ne__(self, other): all_structs.append(shutdown_args) shutdown_args.thrift_spec = () fix_spec(all_structs) -del all_structs +del all_structs \ No newline at end of file From 4cbf3e3e31c87bf0c63955ba89dc44bd53af5a21 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 14:30:20 -0500 Subject: [PATCH 45/51] reverting vendor changes --- node_modules/.bin/glob | 1 + node_modules/.bin/js-yaml | 1 + node_modules/.bin/katex | 1 + node_modules/.bin/markdown-it | 1 + node_modules/.bin/markdownlint | 1 + node_modules/.bin/node-which | 1 + node_modules/.bin/run-con | 1 + node_modules/.package-lock.json | 1415 +++++++ node_modules/@isaacs/cliui/LICENSE.txt | 14 + node_modules/@isaacs/cliui/README.md | 143 + node_modules/@isaacs/cliui/index.mjs | 14 + node_modules/@isaacs/cliui/package.json | 86 + node_modules/@pkgjs/parseargs/.editorconfig | 14 + node_modules/@pkgjs/parseargs/CHANGELOG.md | 147 + node_modules/@pkgjs/parseargs/LICENSE | 201 + node_modules/@pkgjs/parseargs/README.md | 413 ++ .../parseargs/examples/is-default-value.js | 25 + .../parseargs/examples/limit-long-syntax.js | 35 + .../@pkgjs/parseargs/examples/negate.js | 43 + .../parseargs/examples/no-repeated-options.js | 31 + .../parseargs/examples/ordered-options.mjs | 41 + .../parseargs/examples/simple-hard-coded.js | 26 + node_modules/@pkgjs/parseargs/index.js | 396 ++ .../@pkgjs/parseargs/internal/errors.js | 47 + .../@pkgjs/parseargs/internal/primordials.js | 393 ++ .../@pkgjs/parseargs/internal/util.js | 14 + .../@pkgjs/parseargs/internal/validators.js | 89 + node_modules/@pkgjs/parseargs/package.json | 36 + node_modules/@pkgjs/parseargs/utils.js | 198 + node_modules/@types/debug/LICENSE | 21 + node_modules/@types/debug/README.md | 69 + node_modules/@types/debug/index.d.ts | 50 + node_modules/@types/debug/package.json | 57 + node_modules/@types/katex/LICENSE | 21 + node_modules/@types/katex/README.md | 15 + .../@types/katex/contrib/auto-render.d.ts | 67 + node_modules/@types/katex/index.d.ts | 151 + node_modules/@types/katex/package.json | 50 + node_modules/@types/ms/LICENSE | 21 + node_modules/@types/ms/README.md | 82 + node_modules/@types/ms/index.d.ts | 63 + node_modules/@types/ms/package.json | 26 + node_modules/@types/unist/LICENSE | 21 + node_modules/@types/unist/README.md | 122 + node_modules/@types/unist/index.d.ts | 103 + node_modules/@types/unist/package.json | 55 + node_modules/ansi-regex/index.d.ts | 33 + node_modules/ansi-regex/index.js | 10 + node_modules/ansi-regex/license | 9 + node_modules/ansi-regex/package.json | 61 + node_modules/ansi-regex/readme.md | 60 + node_modules/ansi-styles/index.d.ts | 236 ++ node_modules/ansi-styles/index.js | 223 + node_modules/ansi-styles/license | 9 + node_modules/ansi-styles/package.json | 54 + node_modules/ansi-styles/readme.md | 173 + node_modules/argparse/CHANGELOG.md | 216 + node_modules/argparse/LICENSE | 254 ++ node_modules/argparse/README.md | 84 + node_modules/argparse/argparse.js | 3707 +++++++++++++++++ node_modules/argparse/package.json | 31 + .../balanced-match/.github/FUNDING.yml | 2 + node_modules/balanced-match/LICENSE.md | 21 + node_modules/balanced-match/README.md | 97 + node_modules/balanced-match/index.js | 62 + node_modules/balanced-match/package.json | 48 + .../brace-expansion/.github/FUNDING.yml | 2 + node_modules/brace-expansion/LICENSE | 21 + node_modules/brace-expansion/README.md | 135 + node_modules/brace-expansion/index.js | 203 + node_modules/brace-expansion/package.json | 46 + .../character-entities-legacy/index.d.ts | 6 + .../character-entities-legacy/index.js | 113 + .../character-entities-legacy/license | 22 + .../character-entities-legacy/package.json | 77 + .../character-entities-legacy/readme.md | 157 + node_modules/character-entities/index.d.ts | 6 + node_modules/character-entities/index.js | 2132 ++++++++++ node_modules/character-entities/license | 22 + node_modules/character-entities/package.json | 78 + node_modules/character-entities/readme.md | 152 + .../character-reference-invalid/index.d.ts | 6 + .../character-reference-invalid/index.js | 35 + .../character-reference-invalid/license | 22 + .../character-reference-invalid/package.json | 83 + .../character-reference-invalid/readme.md | 156 + node_modules/color-convert/CHANGELOG.md | 54 + node_modules/color-convert/LICENSE | 21 + node_modules/color-convert/README.md | 68 + node_modules/color-convert/conversions.js | 839 ++++ node_modules/color-convert/index.js | 81 + node_modules/color-convert/package.json | 48 + node_modules/color-convert/route.js | 97 + node_modules/color-name/LICENSE | 8 + node_modules/color-name/README.md | 11 + node_modules/color-name/index.js | 152 + node_modules/color-name/package.json | 28 + node_modules/commander/LICENSE | 22 + node_modules/commander/Readme.md | 1149 +++++ node_modules/commander/esm.mjs | 16 + node_modules/commander/index.js | 24 + node_modules/commander/package-support.json | 16 + node_modules/commander/package.json | 82 + node_modules/commander/typings/esm.d.mts | 3 + node_modules/commander/typings/index.d.ts | 1045 +++++ node_modules/cross-spawn/LICENSE | 21 + node_modules/cross-spawn/README.md | 89 + node_modules/cross-spawn/index.js | 39 + node_modules/cross-spawn/package.json | 73 + node_modules/debug/LICENSE | 20 + node_modules/debug/README.md | 481 +++ node_modules/debug/package.json | 65 + node_modules/debug/src/browser.js | 272 ++ node_modules/debug/src/common.js | 292 ++ node_modules/debug/src/index.js | 10 + node_modules/debug/src/node.js | 263 ++ .../index.d.ts | 12 + .../index.dom.d.ts | 6 + .../index.dom.js | 33 + .../decode-named-character-reference/index.js | 18 + .../decode-named-character-reference/license | 22 + .../package.json | 89 + .../readme.md | 135 + node_modules/deep-extend/CHANGELOG.md | 46 + node_modules/deep-extend/LICENSE | 20 + node_modules/deep-extend/README.md | 91 + node_modules/deep-extend/index.js | 1 + node_modules/deep-extend/package.json | 62 + node_modules/dequal/index.d.ts | 1 + node_modules/dequal/license | 21 + node_modules/dequal/lite/index.d.ts | 1 + node_modules/dequal/lite/index.js | 31 + node_modules/dequal/lite/index.min.js | 1 + node_modules/dequal/lite/index.mjs | 29 + node_modules/dequal/package.json | 57 + node_modules/dequal/readme.md | 112 + node_modules/devlop/license | 22 + node_modules/devlop/package.json | 80 + node_modules/devlop/readme.md | 360 ++ node_modules/eastasianwidth/README.md | 32 + node_modules/eastasianwidth/eastasianwidth.js | 311 ++ node_modules/eastasianwidth/package.json | 18 + node_modules/emoji-regex/LICENSE-MIT.txt | 20 + node_modules/emoji-regex/README.md | 137 + node_modules/emoji-regex/RGI_Emoji.d.ts | 5 + node_modules/emoji-regex/RGI_Emoji.js | 6 + .../emoji-regex/es2015/RGI_Emoji.d.ts | 5 + node_modules/emoji-regex/es2015/RGI_Emoji.js | 6 + node_modules/emoji-regex/es2015/index.d.ts | 5 + node_modules/emoji-regex/es2015/index.js | 6 + node_modules/emoji-regex/es2015/text.d.ts | 5 + node_modules/emoji-regex/es2015/text.js | 6 + node_modules/emoji-regex/index.d.ts | 5 + node_modules/emoji-regex/index.js | 6 + node_modules/emoji-regex/package.json | 52 + node_modules/emoji-regex/text.d.ts | 5 + node_modules/emoji-regex/text.js | 6 + node_modules/entities/LICENSE | 11 + node_modules/entities/package.json | 90 + node_modules/entities/readme.md | 122 + node_modules/foreground-child/LICENSE | 15 + node_modules/foreground-child/README.md | 128 + node_modules/foreground-child/package.json | 111 + node_modules/glob/LICENSE | 15 + node_modules/glob/README.md | 1265 ++++++ node_modules/glob/package.json | 99 + node_modules/ignore/LICENSE-MIT | 21 + node_modules/ignore/README.md | 452 ++ node_modules/ignore/index.d.ts | 81 + node_modules/ignore/index.js | 779 ++++ node_modules/ignore/legacy.js | 673 +++ node_modules/ignore/package.json | 88 + node_modules/ini/LICENSE | 15 + node_modules/ini/README.md | 180 + node_modules/ini/package.json | 45 + node_modules/is-alphabetical/index.d.ts | 8 + node_modules/is-alphabetical/index.js | 16 + node_modules/is-alphabetical/license | 22 + node_modules/is-alphabetical/package.json | 73 + node_modules/is-alphabetical/readme.md | 141 + node_modules/is-alphanumerical/index.d.ts | 8 + node_modules/is-alphanumerical/index.js | 13 + node_modules/is-alphanumerical/license | 22 + node_modules/is-alphanumerical/package.json | 79 + node_modules/is-alphanumerical/readme.md | 142 + node_modules/is-decimal/index.d.ts | 8 + node_modules/is-decimal/index.js | 13 + node_modules/is-decimal/license | 22 + node_modules/is-decimal/package.json | 73 + node_modules/is-decimal/readme.md | 139 + .../is-fullwidth-code-point/index.d.ts | 17 + node_modules/is-fullwidth-code-point/index.js | 50 + node_modules/is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 42 + .../is-fullwidth-code-point/readme.md | 39 + node_modules/is-hexadecimal/index.d.ts | 8 + node_modules/is-hexadecimal/index.js | 17 + node_modules/is-hexadecimal/license | 22 + node_modules/is-hexadecimal/package.json | 73 + node_modules/is-hexadecimal/readme.md | 141 + node_modules/isexe/.npmignore | 2 + node_modules/isexe/LICENSE | 15 + node_modules/isexe/README.md | 51 + node_modules/isexe/index.js | 57 + node_modules/isexe/mode.js | 41 + node_modules/isexe/package.json | 31 + node_modules/isexe/test/basic.js | 221 + node_modules/isexe/windows.js | 42 + node_modules/jackspeak/LICENSE.md | 55 + node_modules/jackspeak/README.md | 357 ++ node_modules/jackspeak/package.json | 95 + node_modules/js-yaml/CHANGELOG.md | 616 +++ node_modules/js-yaml/LICENSE | 21 + node_modules/js-yaml/README.md | 246 ++ node_modules/js-yaml/index.js | 47 + node_modules/js-yaml/package.json | 66 + node_modules/jsonc-parser/CHANGELOG.md | 76 + node_modules/jsonc-parser/LICENSE.md | 21 + node_modules/jsonc-parser/README.md | 364 ++ node_modules/jsonc-parser/SECURITY.md | 41 + node_modules/jsonc-parser/package.json | 37 + node_modules/jsonpointer/LICENSE.md | 21 + node_modules/jsonpointer/README.md | 45 + node_modules/jsonpointer/jsonpointer.d.ts | 35 + node_modules/jsonpointer/jsonpointer.js | 100 + node_modules/jsonpointer/package.json | 48 + node_modules/katex/LICENSE | 21 + node_modules/katex/README.md | 125 + node_modules/katex/cli.js | 112 + .../katex/contrib/auto-render/README.md | 8 + .../katex/contrib/auto-render/auto-render.js | 142 + .../katex/contrib/auto-render/index.html | 56 + .../contrib/auto-render/splitAtDelimiters.js | 85 + .../auto-render/test/auto-render-spec.js | 363 ++ node_modules/katex/contrib/copy-tex/README.md | 39 + .../katex/contrib/copy-tex/copy-tex.js | 51 + .../katex/contrib/copy-tex/index.html | 38 + .../katex/contrib/copy-tex/katex2tex.js | 61 + .../contrib/mathtex-script-type/README.md | 38 + .../mathtex-script-type.js | 22 + node_modules/katex/contrib/mhchem/README.md | 23 + node_modules/katex/contrib/mhchem/mhchem.js | 1695 ++++++++ .../render-a11y-string/render-a11y-string.js | 746 ++++ .../test/render-a11y-string-spec.js | 549 +++ node_modules/katex/katex.js | 247 ++ .../katex/node_modules/commander/LICENSE | 22 + .../katex/node_modules/commander/Readme.md | 1015 +++++ .../katex/node_modules/commander/esm.mjs | 15 + .../katex/node_modules/commander/index.js | 27 + .../commander/package-support.json | 16 + .../katex/node_modules/commander/package.json | 69 + .../node_modules/commander/typings/index.d.ts | 774 ++++ node_modules/katex/package.json | 195 + node_modules/katex/src/Lexer.js | 122 + node_modules/katex/src/MacroExpander.js | 470 +++ node_modules/katex/src/Namespace.js | 129 + node_modules/katex/src/Options.js | 319 ++ node_modules/katex/src/ParseError.js | 86 + node_modules/katex/src/Parser.js | 1029 +++++ node_modules/katex/src/Settings.js | 360 ++ node_modules/katex/src/SourceLocation.js | 42 + node_modules/katex/src/Style.js | 130 + node_modules/katex/src/Token.js | 47 + node_modules/katex/src/buildCommon.js | 784 ++++ node_modules/katex/src/buildHTML.js | 406 ++ node_modules/katex/src/buildMathML.js | 322 ++ node_modules/katex/src/buildTree.js | 67 + node_modules/katex/src/defineEnvironment.js | 117 + node_modules/katex/src/defineFunction.js | 223 + node_modules/katex/src/defineMacro.js | 125 + node_modules/katex/src/delimiter.js | 835 ++++ node_modules/katex/src/domTree.js | 632 +++ node_modules/katex/src/environments.js | 9 + node_modules/katex/src/environments/array.js | 1118 +++++ node_modules/katex/src/environments/cd.js | 313 ++ node_modules/katex/src/fontMetrics.js | 282 ++ node_modules/katex/src/fontMetricsData.js | 2077 +++++++++ node_modules/katex/src/fonts/Makefile | 139 + node_modules/katex/src/fonts/default.cfg | 20 + .../katex/src/fonts/generate_fonts.py | 58 + node_modules/katex/src/fonts/makeBlacker | 49 + node_modules/katex/src/fonts/makeFF | 2005 +++++++++ node_modules/katex/src/fonts/xbbold.mf | 182 + node_modules/katex/src/functions.js | 55 + node_modules/katex/src/functions/accent.js | 284 ++ .../katex/src/functions/accentunder.js | 60 + node_modules/katex/src/functions/arrow.js | 144 + node_modules/katex/src/functions/char.js | 45 + node_modules/katex/src/functions/color.js | 88 + node_modules/katex/src/functions/cr.js | 61 + node_modules/katex/src/functions/def.js | 210 + .../katex/src/functions/delimsizing.js | 360 ++ node_modules/katex/src/functions/enclose.js | 323 ++ .../katex/src/functions/environment.js | 62 + node_modules/katex/src/functions/font.js | 120 + node_modules/katex/src/functions/genfrac.js | 510 +++ node_modules/katex/src/functions/hbox.js | 39 + .../katex/src/functions/horizBrace.js | 137 + node_modules/katex/src/functions/href.js | 93 + node_modules/katex/src/functions/html.js | 102 + .../katex/src/functions/htmlmathml.js | 34 + .../katex/src/functions/includegraphics.js | 151 + node_modules/katex/src/functions/kern.js | 56 + node_modules/katex/src/functions/lap.js | 74 + node_modules/katex/src/functions/math.js | 42 + .../katex/src/functions/mathchoice.js | 51 + node_modules/katex/src/functions/mclass.js | 168 + node_modules/katex/src/functions/op.js | 334 ++ .../katex/src/functions/operatorname.js | 164 + node_modules/katex/src/functions/ordgroup.js | 22 + node_modules/katex/src/functions/overline.js | 59 + node_modules/katex/src/functions/phantom.js | 117 + node_modules/katex/src/functions/pmb.js | 44 + node_modules/katex/src/functions/raisebox.js | 46 + node_modules/katex/src/functions/relax.js | 17 + node_modules/katex/src/functions/rule.js | 77 + node_modules/katex/src/functions/sizing.js | 91 + node_modules/katex/src/functions/smash.js | 110 + node_modules/katex/src/functions/sqrt.js | 125 + node_modules/katex/src/functions/styling.js | 73 + node_modules/katex/src/functions/supsub.js | 267 ++ node_modules/katex/src/functions/symbolsOp.js | 34 + .../katex/src/functions/symbolsOrd.js | 62 + .../katex/src/functions/symbolsSpacing.js | 73 + node_modules/katex/src/functions/tag.js | 40 + node_modules/katex/src/functions/text.js | 76 + node_modules/katex/src/functions/underline.js | 58 + .../src/functions/utils/assembleSupSub.js | 120 + node_modules/katex/src/functions/vcenter.js | 44 + node_modules/katex/src/functions/verb.js | 58 + node_modules/katex/src/macros.js | 1033 +++++ node_modules/katex/src/mathMLTree.js | 267 ++ node_modules/katex/src/metrics/README.md | 23 + .../katex/src/metrics/extract_tfms.py | 114 + .../katex/src/metrics/extract_ttfs.py | 122 + node_modules/katex/src/metrics/format_json.py | 28 + node_modules/katex/src/metrics/mapping.pl | 1224 ++++++ node_modules/katex/src/metrics/parse_tfm.py | 211 + node_modules/katex/src/parseNode.js | 524 +++ node_modules/katex/src/parseTree.js | 49 + node_modules/katex/src/spacingData.js | 108 + node_modules/katex/src/stretchy.js | 378 ++ node_modules/katex/src/styles/fonts.scss | 71 + node_modules/katex/src/styles/katex.scss | 664 +++ node_modules/katex/src/svgGeometry.js | 545 +++ node_modules/katex/src/symbols.js | 890 ++++ node_modules/katex/src/tree.js | 78 + node_modules/katex/src/types.js | 36 + node_modules/katex/src/unicodeAccents.js | 18 + node_modules/katex/src/unicodeScripts.js | 126 + node_modules/katex/src/unicodeSupOrSub.js | 108 + node_modules/katex/src/unicodeSymbols.js | 32 + node_modules/katex/src/units.js | 106 + node_modules/katex/src/utils.js | 130 + node_modules/katex/src/wide-character.js | 111 + node_modules/katex/types/katex.d.ts | 258 ++ node_modules/linkify-it/LICENSE | 22 + node_modules/linkify-it/README.md | 196 + node_modules/linkify-it/index.mjs | 642 +++ node_modules/linkify-it/package.json | 58 + node_modules/lru-cache/LICENSE | 15 + node_modules/lru-cache/README.md | 331 ++ node_modules/lru-cache/package.json | 116 + node_modules/markdown-it/LICENSE | 22 + node_modules/markdown-it/README.md | 324 ++ node_modules/markdown-it/index.mjs | 1 + node_modules/markdown-it/package.json | 92 + node_modules/markdownlint-cli/LICENSE | 21 + node_modules/markdownlint-cli/README.md | 181 + node_modules/markdownlint-cli/markdownlint.js | 336 ++ node_modules/markdownlint-cli/package.json | 95 + node_modules/markdownlint/CHANGELOG.md | 495 +++ node_modules/markdownlint/CONTRIBUTING.md | 93 + node_modules/markdownlint/LICENSE | 21 + node_modules/markdownlint/README.md | 1037 +++++ node_modules/markdownlint/doc/CustomRules.md | 194 + node_modules/markdownlint/doc/Prettier.md | 27 + .../markdownlint/doc/ReleaseProcess.md | 20 + node_modules/markdownlint/doc/Rules.md | 2535 +++++++++++ node_modules/markdownlint/doc/md001.md | 37 + node_modules/markdownlint/doc/md003.md | 59 + node_modules/markdownlint/doc/md004.md | 50 + node_modules/markdownlint/doc/md005.md | 53 + node_modules/markdownlint/doc/md007.md | 52 + node_modules/markdownlint/doc/md009.md | 51 + node_modules/markdownlint/doc/md010.md | 56 + node_modules/markdownlint/doc/md011.md | 30 + node_modules/markdownlint/doc/md012.md | 38 + node_modules/markdownlint/doc/md013.md | 58 + node_modules/markdownlint/doc/md014.md | 54 + node_modules/markdownlint/doc/md018.md | 27 + node_modules/markdownlint/doc/md019.md | 28 + node_modules/markdownlint/doc/md020.md | 29 + node_modules/markdownlint/doc/md021.md | 31 + node_modules/markdownlint/doc/md022.md | 52 + node_modules/markdownlint/doc/md023.md | 33 + node_modules/markdownlint/doc/md024.md | 44 + node_modules/markdownlint/doc/md025.md | 49 + node_modules/markdownlint/doc/md026.md | 40 + node_modules/markdownlint/doc/md027.md | 24 + node_modules/markdownlint/doc/md028.md | 40 + node_modules/markdownlint/doc/md029.md | 98 + node_modules/markdownlint/doc/md030.md | 82 + node_modules/markdownlint/doc/md031.md | 50 + node_modules/markdownlint/doc/md032.md | 55 + node_modules/markdownlint/doc/md033.md | 27 + node_modules/markdownlint/doc/md034.md | 55 + node_modules/markdownlint/doc/md035.md | 37 + node_modules/markdownlint/doc/md036.md | 45 + node_modules/markdownlint/doc/md037.md | 37 + node_modules/markdownlint/doc/md038.md | 40 + node_modules/markdownlint/doc/md039.md | 21 + node_modules/markdownlint/doc/md040.md | 52 + node_modules/markdownlint/doc/md041.md | 49 + node_modules/markdownlint/doc/md042.md | 32 + node_modules/markdownlint/doc/md043.md | 69 + node_modules/markdownlint/doc/md044.md | 45 + node_modules/markdownlint/doc/md045.md | 40 + node_modules/markdownlint/doc/md046.md | 40 + node_modules/markdownlint/doc/md047.md | 34 + node_modules/markdownlint/doc/md048.md | 42 + node_modules/markdownlint/doc/md049.md | 36 + node_modules/markdownlint/doc/md050.md | 35 + node_modules/markdownlint/doc/md051.md | 95 + node_modules/markdownlint/doc/md052.md | 40 + node_modules/markdownlint/doc/md053.md | 38 + node_modules/markdownlint/doc/md054.md | 100 + node_modules/markdownlint/doc/md055.md | 55 + node_modules/markdownlint/doc/md056.md | 37 + node_modules/markdownlint/doc/md058.md | 48 + node_modules/markdownlint/helpers/LICENSE | 21 + node_modules/markdownlint/helpers/README.md | 29 + node_modules/markdownlint/helpers/helpers.cjs | 542 +++ .../helpers/micromark-helpers.cjs | 301 ++ .../markdownlint/helpers/package.json | 26 + node_modules/markdownlint/helpers/shared.cjs | 16 + node_modules/markdownlint/package.json | 120 + .../markdownlint/schema/.markdownlint.jsonc | 310 ++ .../markdownlint/schema/.markdownlint.yaml | 277 ++ .../schema/ValidatingConfiguration.md | 26 + .../markdownlint-config-schema-strict.json | 1841 ++++++++ .../schema/markdownlint-config-schema.json | 1846 ++++++++ node_modules/markdownlint/style/all.json | 5 + .../markdownlint/style/cirosantilli.json | 22 + node_modules/markdownlint/style/prettier.json | 27 + node_modules/markdownlint/style/relaxed.json | 12 + node_modules/mdurl/LICENSE | 45 + node_modules/mdurl/README.md | 102 + node_modules/mdurl/index.mjs | 11 + node_modules/mdurl/package.json | 37 + .../micromark-core-commonmark/dev/index.d.ts | 23 + .../dev/index.d.ts.map | 1 + .../micromark-core-commonmark/dev/index.js | 22 + .../micromark-core-commonmark/index.d.ts | 23 + .../micromark-core-commonmark/index.d.ts.map | 1 + .../micromark-core-commonmark/index.js | 22 + .../micromark-core-commonmark/license | 22 + .../micromark-core-commonmark/package.json | 74 + .../micromark-core-commonmark/readme.md | 171 + .../dev/index.d.ts | 156 + .../dev/index.js | 3 + .../micromark-extension-directive/index.d.ts | 156 + .../micromark-extension-directive/index.js | 3 + .../micromark-extension-directive/license | 22 + .../package.json | 127 + .../micromark-extension-directive/readme.md | 424 ++ .../dev/index.d.ts | 24 + .../dev/index.js | 2 + .../index.d.ts | 24 + .../index.js | 2 + .../license | 22 + .../package.json | 116 + .../readme.md | 422 ++ .../dev/index.d.ts | 164 + .../dev/index.js | 3 + .../index.d.ts | 164 + .../micromark-extension-gfm-footnote/index.js | 3 + .../micromark-extension-gfm-footnote/license | 22 + .../package.json | 132 + .../readme.md | 656 +++ .../dev/index.d.ts | 37 + .../dev/index.js | 2 + .../micromark-extension-gfm-table/index.d.ts | 37 + .../micromark-extension-gfm-table/index.js | 2 + .../micromark-extension-gfm-table/license | 22 + .../package.json | 116 + .../micromark-extension-gfm-table/readme.md | 515 +++ .../micromark-extension-math/dev/index.d.ts | 61 + .../micromark-extension-math/dev/index.js | 3 + .../micromark-extension-math/index.d.ts | 61 + .../micromark-extension-math/index.js | 3 + node_modules/micromark-extension-math/license | 22 + .../micromark-extension-math/package.json | 121 + .../micromark-extension-math/readme.md | 429 ++ .../dev/index.d.ts | 42 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 255 ++ .../micromark-factory-destination/index.d.ts | 42 + .../index.d.ts.map | 1 + .../micromark-factory-destination/index.js | 206 + .../micromark-factory-destination/license | 22 + .../package.json | 57 + .../micromark-factory-destination/readme.md | 234 ++ .../micromark-factory-label/dev/index.d.ts | 37 + .../dev/index.d.ts.map | 1 + .../micromark-factory-label/dev/index.js | 172 + .../micromark-factory-label/index.d.ts | 37 + .../micromark-factory-label/index.d.ts.map | 1 + node_modules/micromark-factory-label/index.js | 148 + node_modules/micromark-factory-label/license | 22 + .../micromark-factory-label/package.json | 60 + .../micromark-factory-label/readme.md | 224 + .../micromark-factory-space/dev/index.d.ts | 37 + .../dev/index.d.ts.map | 1 + .../micromark-factory-space/dev/index.js | 67 + .../micromark-factory-space/index.d.ts | 37 + .../micromark-factory-space/index.d.ts.map | 1 + node_modules/micromark-factory-space/index.js | 64 + node_modules/micromark-factory-space/license | 22 + .../micromark-factory-space/package.json | 55 + .../micromark-factory-space/readme.md | 225 + .../micromark-factory-title/dev/index.d.ts | 36 + .../dev/index.d.ts.map | 1 + .../micromark-factory-title/dev/index.js | 169 + .../micromark-factory-title/index.d.ts | 36 + .../micromark-factory-title/index.d.ts.map | 1 + node_modules/micromark-factory-title/index.js | 158 + node_modules/micromark-factory-title/license | 22 + .../micromark-factory-title/package.json | 58 + .../micromark-factory-title/readme.md | 229 + .../dev/index.d.ts | 22 + .../dev/index.d.ts.map | 1 + .../micromark-factory-whitespace/dev/index.js | 53 + .../micromark-factory-whitespace/index.d.ts | 22 + .../index.d.ts.map | 1 + .../micromark-factory-whitespace/index.js | 44 + .../micromark-factory-whitespace/license | 22 + .../micromark-factory-whitespace/package.json | 57 + .../micromark-factory-whitespace/readme.md | 205 + .../micromark-util-character/dev/index.d.ts | 195 + .../dev/index.d.ts.map | 1 + .../micromark-util-character/dev/index.js | 252 ++ .../micromark-util-character/index.d.ts | 195 + .../micromark-util-character/index.d.ts.map | 1 + .../micromark-util-character/index.js | 246 ++ node_modules/micromark-util-character/license | 22 + .../micromark-util-character/package.json | 57 + .../micromark-util-character/readme.md | 446 ++ .../micromark-util-chunked/dev/index.d.ts | 41 + .../micromark-util-chunked/dev/index.d.ts.map | 1 + .../micromark-util-chunked/dev/index.js | 89 + .../micromark-util-chunked/index.d.ts | 41 + .../micromark-util-chunked/index.d.ts.map | 1 + node_modules/micromark-util-chunked/index.js | 81 + node_modules/micromark-util-chunked/license | 22 + .../micromark-util-chunked/package.json | 57 + node_modules/micromark-util-chunked/readme.md | 219 + .../dev/index.d.ts | 18 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 38 + .../index.d.ts | 18 + .../index.d.ts.map | 1 + .../index.js | 27 + .../micromark-util-classify-character/license | 22 + .../package.json | 59 + .../readme.md | 205 + .../index.d.ts | 22 + .../index.d.ts.map | 1 + .../index.js | 143 + .../micromark-util-combine-extensions/license | 22 + .../package.json | 52 + .../readme.md | 201 + .../dev/index.d.ts | 16 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 42 + .../index.d.ts | 16 + .../index.d.ts.map | 1 + .../index.js | 32 + .../license | 22 + .../package.json | 59 + .../readme.md | 184 + node_modules/micromark-util-encode/index.d.ts | 14 + .../micromark-util-encode/index.d.ts.map | 1 + node_modules/micromark-util-encode/index.js | 33 + node_modules/micromark-util-encode/license | 22 + .../micromark-util-encode/package.json | 47 + node_modules/micromark-util-encode/readme.md | 176 + .../micromark-util-html-tag-name/index.d.ts | 30 + .../index.d.ts.map | 1 + .../micromark-util-html-tag-name/index.js | 93 + .../micromark-util-html-tag-name/license | 22 + .../micromark-util-html-tag-name/package.json | 47 + .../micromark-util-html-tag-name/readme.md | 193 + .../dev/index.d.ts | 21 + .../dev/index.d.ts.map | 1 + .../dev/index.js | 38 + .../index.d.ts | 21 + .../index.d.ts.map | 1 + .../index.js | 33 + .../license | 22 + .../package.json | 58 + .../readme.md | 187 + .../micromark-util-resolve-all/index.d.ts | 22 + .../micromark-util-resolve-all/index.d.ts.map | 1 + .../micromark-util-resolve-all/index.js | 32 + .../micromark-util-resolve-all/license | 22 + .../micromark-util-resolve-all/package.json | 48 + .../micromark-util-resolve-all/readme.md | 238 ++ .../dev/index.d.ts | 36 + .../dev/index.d.ts.map | 1 + .../micromark-util-sanitize-uri/dev/index.js | 124 + .../micromark-util-sanitize-uri/index.d.ts | 36 + .../index.d.ts.map | 1 + .../micromark-util-sanitize-uri/index.js | 107 + .../micromark-util-sanitize-uri/license | 22 + .../micromark-util-sanitize-uri/package.json | 59 + .../micromark-util-sanitize-uri/readme.md | 214 + .../micromark-util-subtokenize/dev/index.d.ts | 12 + .../dev/index.d.ts.map | 1 + .../micromark-util-subtokenize/dev/index.js | 272 ++ .../micromark-util-subtokenize/index.d.ts | 12 + .../micromark-util-subtokenize/index.d.ts.map | 1 + .../micromark-util-subtokenize/index.js | 222 + .../micromark-util-subtokenize/license | 22 + .../micromark-util-subtokenize/package.json | 60 + .../micromark-util-subtokenize/readme.md | 181 + node_modules/micromark-util-symbol/license | 22 + .../micromark-util-symbol/package.json | 43 + node_modules/micromark-util-symbol/readme.md | 168 + node_modules/micromark-util-types/index.d.ts | 1294 ++++++ node_modules/micromark-util-types/index.js | 2 + node_modules/micromark-util-types/license | 22 + .../micromark-util-types/package.json | 71 + node_modules/micromark-util-types/readme.md | 151 + node_modules/micromark/dev/index.d.ts | 82 + node_modules/micromark/dev/index.d.ts.map | 1 + node_modules/micromark/dev/index.js | 68 + node_modules/micromark/dev/stream.d.ts | 35 + node_modules/micromark/dev/stream.d.ts.map | 1 + node_modules/micromark/dev/stream.js | 270 ++ node_modules/micromark/index.d.ts | 82 + node_modules/micromark/index.d.ts.map | 1 + node_modules/micromark/index.js | 60 + node_modules/micromark/license | 22 + node_modules/micromark/package.json | 100 + node_modules/micromark/readme.md | 491 +++ node_modules/micromark/stream.d.ts | 35 + node_modules/micromark/stream.d.ts.map | 1 + node_modules/micromark/stream.js | 256 ++ node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 454 ++ node_modules/minimatch/package.json | 82 + node_modules/minimist/.eslintrc | 29 + node_modules/minimist/.github/FUNDING.yml | 12 + node_modules/minimist/.nycrc | 14 + node_modules/minimist/CHANGELOG.md | 298 ++ node_modules/minimist/LICENSE | 18 + node_modules/minimist/README.md | 121 + node_modules/minimist/example/parse.js | 4 + node_modules/minimist/index.js | 263 ++ node_modules/minimist/package.json | 75 + node_modules/minimist/test/all_bool.js | 34 + node_modules/minimist/test/bool.js | 177 + node_modules/minimist/test/dash.js | 43 + node_modules/minimist/test/default_bool.js | 37 + node_modules/minimist/test/dotted.js | 24 + node_modules/minimist/test/kv_short.js | 32 + node_modules/minimist/test/long.js | 33 + node_modules/minimist/test/num.js | 38 + node_modules/minimist/test/parse.js | 209 + node_modules/minimist/test/parse_modified.js | 11 + node_modules/minimist/test/proto.js | 64 + node_modules/minimist/test/short.js | 69 + node_modules/minimist/test/stop_early.js | 17 + node_modules/minimist/test/unknown.js | 104 + node_modules/minimist/test/whitespace.js | 10 + node_modules/minipass/LICENSE | 15 + node_modules/minipass/README.md | 825 ++++ node_modules/minipass/package.json | 82 + node_modules/ms/index.js | 162 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 38 + node_modules/ms/readme.md | 59 + .../package-json-from-dist/LICENSE.md | 63 + node_modules/package-json-from-dist/README.md | 110 + .../package-json-from-dist/package.json | 68 + node_modules/parse-entities/index.d.ts | 126 + node_modules/parse-entities/index.js | 3 + node_modules/parse-entities/license | 22 + node_modules/parse-entities/package.json | 91 + node_modules/parse-entities/readme.md | 266 ++ node_modules/path-key/index.d.ts | 40 + node_modules/path-key/index.js | 16 + node_modules/path-key/license | 9 + node_modules/path-key/package.json | 39 + node_modules/path-key/readme.md | 61 + node_modules/path-scurry/LICENSE.md | 55 + node_modules/path-scurry/README.md | 636 +++ node_modules/path-scurry/package.json | 89 + node_modules/punycode.js/LICENSE-MIT.txt | 20 + node_modules/punycode.js/README.md | 148 + node_modules/punycode.js/package.json | 58 + node_modules/punycode.js/punycode.es6.js | 444 ++ node_modules/punycode.js/punycode.js | 443 ++ node_modules/run-con/.circleci/config.yml | 7 + node_modules/run-con/.github/FUNDING.yml | 3 + node_modules/run-con/.github/dependabot.yml | 9 + .../run-con/.github/workflows/coverage.yml | 37 + .../run-con/.github/workflows/dependabot.yml | 44 + .../run-con/.github/workflows/issuehunt.yml | 33 + node_modules/run-con/LICENSE.APACHE2 | 15 + node_modules/run-con/LICENSE.BSD | 26 + node_modules/run-con/LICENSE.MIT | 24 + node_modules/run-con/README.md | 239 ++ node_modules/run-con/browser.js | 7 + node_modules/run-con/cli.js | 4 + node_modules/run-con/index.js | 53 + node_modules/run-con/package.json | 29 + node_modules/run-con/renovate.json | 6 + node_modules/shebang-command/index.js | 19 + node_modules/shebang-command/license | 9 + node_modules/shebang-command/package.json | 34 + node_modules/shebang-command/readme.md | 34 + node_modules/shebang-regex/index.d.ts | 22 + node_modules/shebang-regex/index.js | 2 + node_modules/shebang-regex/license | 9 + node_modules/shebang-regex/package.json | 35 + node_modules/shebang-regex/readme.md | 33 + node_modules/signal-exit/LICENSE.txt | 16 + node_modules/signal-exit/README.md | 74 + node_modules/signal-exit/package.json | 106 + node_modules/smol-toml/LICENSE | 24 + node_modules/smol-toml/README.md | 192 + node_modules/smol-toml/package.json | 53 + node_modules/string-width-cjs/index.d.ts | 29 + node_modules/string-width-cjs/index.js | 47 + node_modules/string-width-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.d.ts | 23 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 50 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/strip-ansi/index.d.ts | 17 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 54 + .../node_modules/strip-ansi/readme.md | 46 + node_modules/string-width-cjs/package.json | 56 + node_modules/string-width-cjs/readme.md | 50 + node_modules/string-width/index.d.ts | 29 + node_modules/string-width/index.js | 54 + node_modules/string-width/license | 9 + node_modules/string-width/package.json | 59 + node_modules/string-width/readme.md | 67 + node_modules/strip-ansi-cjs/index.d.ts | 17 + node_modules/strip-ansi-cjs/index.js | 4 + node_modules/strip-ansi-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + node_modules/strip-ansi-cjs/package.json | 54 + node_modules/strip-ansi-cjs/readme.md | 46 + node_modules/strip-ansi/index.d.ts | 15 + node_modules/strip-ansi/index.js | 14 + node_modules/strip-ansi/license | 9 + node_modules/strip-ansi/package.json | 57 + node_modules/strip-ansi/readme.md | 41 + node_modules/strip-json-comments/index.d.ts | 36 + node_modules/strip-json-comments/index.js | 77 + node_modules/strip-json-comments/license | 9 + node_modules/strip-json-comments/package.json | 47 + node_modules/strip-json-comments/readme.md | 78 + node_modules/uc.micro/LICENSE.txt | 20 + node_modules/uc.micro/README.md | 14 + node_modules/uc.micro/categories/Cc/regex.mjs | 1 + node_modules/uc.micro/categories/Cf/regex.mjs | 1 + node_modules/uc.micro/categories/P/regex.mjs | 1 + node_modules/uc.micro/categories/S/regex.mjs | 1 + node_modules/uc.micro/categories/Z/regex.mjs | 1 + node_modules/uc.micro/index.mjs | 8 + node_modules/uc.micro/package.json | 37 + .../uc.micro/properties/Any/regex.mjs | 1 + node_modules/which/CHANGELOG.md | 166 + node_modules/which/LICENSE | 15 + node_modules/which/README.md | 54 + node_modules/which/package.json | 43 + node_modules/which/which.js | 125 + node_modules/wrap-ansi-cjs/index.js | 216 + node_modules/wrap-ansi-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + .../node_modules/ansi-styles/index.d.ts | 345 ++ .../node_modules/ansi-styles/index.js | 163 + .../node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 56 + .../node_modules/ansi-styles/readme.md | 152 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.d.ts | 23 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 50 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/string-width/index.d.ts | 29 + .../node_modules/string-width/index.js | 47 + .../node_modules/string-width/license | 9 + .../node_modules/string-width/package.json | 56 + .../node_modules/string-width/readme.md | 50 + .../node_modules/strip-ansi/index.d.ts | 17 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 54 + .../node_modules/strip-ansi/readme.md | 46 + node_modules/wrap-ansi-cjs/package.json | 62 + node_modules/wrap-ansi-cjs/readme.md | 91 + node_modules/wrap-ansi/index.d.ts | 41 + node_modules/wrap-ansi/index.js | 214 + node_modules/wrap-ansi/license | 9 + node_modules/wrap-ansi/package.json | 69 + node_modules/wrap-ansi/readme.md | 91 + 834 files changed, 104372 insertions(+) create mode 120000 node_modules/.bin/glob create mode 120000 node_modules/.bin/js-yaml create mode 120000 node_modules/.bin/katex create mode 120000 node_modules/.bin/markdown-it create mode 120000 node_modules/.bin/markdownlint create mode 120000 node_modules/.bin/node-which create mode 120000 node_modules/.bin/run-con create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@isaacs/cliui/LICENSE.txt create mode 100644 node_modules/@isaacs/cliui/README.md create mode 100644 node_modules/@isaacs/cliui/index.mjs create mode 100644 node_modules/@isaacs/cliui/package.json create mode 100644 node_modules/@pkgjs/parseargs/.editorconfig create mode 100644 node_modules/@pkgjs/parseargs/CHANGELOG.md create mode 100644 node_modules/@pkgjs/parseargs/LICENSE create mode 100644 node_modules/@pkgjs/parseargs/README.md create mode 100644 node_modules/@pkgjs/parseargs/examples/is-default-value.js create mode 100644 node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js create mode 100644 node_modules/@pkgjs/parseargs/examples/negate.js create mode 100644 node_modules/@pkgjs/parseargs/examples/no-repeated-options.js create mode 100644 node_modules/@pkgjs/parseargs/examples/ordered-options.mjs create mode 100644 node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js create mode 100644 node_modules/@pkgjs/parseargs/index.js create mode 100644 node_modules/@pkgjs/parseargs/internal/errors.js create mode 100644 node_modules/@pkgjs/parseargs/internal/primordials.js create mode 100644 node_modules/@pkgjs/parseargs/internal/util.js create mode 100644 node_modules/@pkgjs/parseargs/internal/validators.js create mode 100644 node_modules/@pkgjs/parseargs/package.json create mode 100644 node_modules/@pkgjs/parseargs/utils.js create mode 100644 node_modules/@types/debug/LICENSE create mode 100644 node_modules/@types/debug/README.md create mode 100644 node_modules/@types/debug/index.d.ts create mode 100644 node_modules/@types/debug/package.json create mode 100644 node_modules/@types/katex/LICENSE create mode 100644 node_modules/@types/katex/README.md create mode 100644 node_modules/@types/katex/contrib/auto-render.d.ts create mode 100644 node_modules/@types/katex/index.d.ts create mode 100644 node_modules/@types/katex/package.json create mode 100644 node_modules/@types/ms/LICENSE create mode 100644 node_modules/@types/ms/README.md create mode 100644 node_modules/@types/ms/index.d.ts create mode 100644 node_modules/@types/ms/package.json create mode 100644 node_modules/@types/unist/LICENSE create mode 100644 node_modules/@types/unist/README.md create mode 100644 node_modules/@types/unist/index.d.ts create mode 100644 node_modules/@types/unist/package.json create mode 100644 node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/ansi-regex/index.js create mode 100644 node_modules/ansi-regex/license create mode 100644 node_modules/ansi-regex/package.json create mode 100644 node_modules/ansi-regex/readme.md create mode 100644 node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/ansi-styles/index.js create mode 100644 node_modules/ansi-styles/license create mode 100644 node_modules/ansi-styles/package.json create mode 100644 node_modules/ansi-styles/readme.md create mode 100644 node_modules/argparse/CHANGELOG.md create mode 100644 node_modules/argparse/LICENSE create mode 100644 node_modules/argparse/README.md create mode 100644 node_modules/argparse/argparse.js create mode 100644 node_modules/argparse/package.json create mode 100644 node_modules/balanced-match/.github/FUNDING.yml create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/brace-expansion/.github/FUNDING.yml create mode 100644 node_modules/brace-expansion/LICENSE create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/character-entities-legacy/index.d.ts create mode 100644 node_modules/character-entities-legacy/index.js create mode 100644 node_modules/character-entities-legacy/license create mode 100644 node_modules/character-entities-legacy/package.json create mode 100644 node_modules/character-entities-legacy/readme.md create mode 100644 node_modules/character-entities/index.d.ts create mode 100644 node_modules/character-entities/index.js create mode 100644 node_modules/character-entities/license create mode 100644 node_modules/character-entities/package.json create mode 100644 node_modules/character-entities/readme.md create mode 100644 node_modules/character-reference-invalid/index.d.ts create mode 100644 node_modules/character-reference-invalid/index.js create mode 100644 node_modules/character-reference-invalid/license create mode 100644 node_modules/character-reference-invalid/package.json create mode 100644 node_modules/character-reference-invalid/readme.md create mode 100644 node_modules/color-convert/CHANGELOG.md create mode 100644 node_modules/color-convert/LICENSE create mode 100644 node_modules/color-convert/README.md create mode 100644 node_modules/color-convert/conversions.js create mode 100644 node_modules/color-convert/index.js create mode 100644 node_modules/color-convert/package.json create mode 100644 node_modules/color-convert/route.js create mode 100644 node_modules/color-name/LICENSE create mode 100644 node_modules/color-name/README.md create mode 100644 node_modules/color-name/index.js create mode 100644 node_modules/color-name/package.json create mode 100644 node_modules/commander/LICENSE create mode 100644 node_modules/commander/Readme.md create mode 100644 node_modules/commander/esm.mjs create mode 100644 node_modules/commander/index.js create mode 100644 node_modules/commander/package-support.json create mode 100644 node_modules/commander/package.json create mode 100644 node_modules/commander/typings/esm.d.mts create mode 100644 node_modules/commander/typings/index.d.ts create mode 100644 node_modules/cross-spawn/LICENSE create mode 100644 node_modules/cross-spawn/README.md create mode 100644 node_modules/cross-spawn/index.js create mode 100644 node_modules/cross-spawn/package.json create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/common.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/decode-named-character-reference/index.d.ts create mode 100644 node_modules/decode-named-character-reference/index.dom.d.ts create mode 100644 node_modules/decode-named-character-reference/index.dom.js create mode 100644 node_modules/decode-named-character-reference/index.js create mode 100644 node_modules/decode-named-character-reference/license create mode 100644 node_modules/decode-named-character-reference/package.json create mode 100644 node_modules/decode-named-character-reference/readme.md create mode 100644 node_modules/deep-extend/CHANGELOG.md create mode 100644 node_modules/deep-extend/LICENSE create mode 100644 node_modules/deep-extend/README.md create mode 100644 node_modules/deep-extend/index.js create mode 100644 node_modules/deep-extend/package.json create mode 100644 node_modules/dequal/index.d.ts create mode 100644 node_modules/dequal/license create mode 100644 node_modules/dequal/lite/index.d.ts create mode 100644 node_modules/dequal/lite/index.js create mode 100644 node_modules/dequal/lite/index.min.js create mode 100644 node_modules/dequal/lite/index.mjs create mode 100644 node_modules/dequal/package.json create mode 100644 node_modules/dequal/readme.md create mode 100644 node_modules/devlop/license create mode 100644 node_modules/devlop/package.json create mode 100644 node_modules/devlop/readme.md create mode 100644 node_modules/eastasianwidth/README.md create mode 100644 node_modules/eastasianwidth/eastasianwidth.js create mode 100644 node_modules/eastasianwidth/package.json create mode 100644 node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/emoji-regex/README.md create mode 100644 node_modules/emoji-regex/RGI_Emoji.d.ts create mode 100644 node_modules/emoji-regex/RGI_Emoji.js create mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.d.ts create mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.js create mode 100644 node_modules/emoji-regex/es2015/index.d.ts create mode 100644 node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/emoji-regex/es2015/text.d.ts create mode 100644 node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/emoji-regex/index.js create mode 100644 node_modules/emoji-regex/package.json create mode 100644 node_modules/emoji-regex/text.d.ts create mode 100644 node_modules/emoji-regex/text.js create mode 100644 node_modules/entities/LICENSE create mode 100644 node_modules/entities/package.json create mode 100644 node_modules/entities/readme.md create mode 100644 node_modules/foreground-child/LICENSE create mode 100644 node_modules/foreground-child/README.md create mode 100644 node_modules/foreground-child/package.json create mode 100644 node_modules/glob/LICENSE create mode 100644 node_modules/glob/README.md create mode 100644 node_modules/glob/package.json create mode 100644 node_modules/ignore/LICENSE-MIT create mode 100644 node_modules/ignore/README.md create mode 100644 node_modules/ignore/index.d.ts create mode 100644 node_modules/ignore/index.js create mode 100644 node_modules/ignore/legacy.js create mode 100644 node_modules/ignore/package.json create mode 100644 node_modules/ini/LICENSE create mode 100644 node_modules/ini/README.md create mode 100644 node_modules/ini/package.json create mode 100644 node_modules/is-alphabetical/index.d.ts create mode 100644 node_modules/is-alphabetical/index.js create mode 100644 node_modules/is-alphabetical/license create mode 100644 node_modules/is-alphabetical/package.json create mode 100644 node_modules/is-alphabetical/readme.md create mode 100644 node_modules/is-alphanumerical/index.d.ts create mode 100644 node_modules/is-alphanumerical/index.js create mode 100644 node_modules/is-alphanumerical/license create mode 100644 node_modules/is-alphanumerical/package.json create mode 100644 node_modules/is-alphanumerical/readme.md create mode 100644 node_modules/is-decimal/index.d.ts create mode 100644 node_modules/is-decimal/index.js create mode 100644 node_modules/is-decimal/license create mode 100644 node_modules/is-decimal/package.json create mode 100644 node_modules/is-decimal/readme.md create mode 100644 node_modules/is-fullwidth-code-point/index.d.ts create mode 100644 node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/is-hexadecimal/index.d.ts create mode 100644 node_modules/is-hexadecimal/index.js create mode 100644 node_modules/is-hexadecimal/license create mode 100644 node_modules/is-hexadecimal/package.json create mode 100644 node_modules/is-hexadecimal/readme.md create mode 100644 node_modules/isexe/.npmignore create mode 100644 node_modules/isexe/LICENSE create mode 100644 node_modules/isexe/README.md create mode 100644 node_modules/isexe/index.js create mode 100644 node_modules/isexe/mode.js create mode 100644 node_modules/isexe/package.json create mode 100644 node_modules/isexe/test/basic.js create mode 100644 node_modules/isexe/windows.js create mode 100644 node_modules/jackspeak/LICENSE.md create mode 100644 node_modules/jackspeak/README.md create mode 100644 node_modules/jackspeak/package.json create mode 100644 node_modules/js-yaml/CHANGELOG.md create mode 100644 node_modules/js-yaml/LICENSE create mode 100644 node_modules/js-yaml/README.md create mode 100644 node_modules/js-yaml/index.js create mode 100644 node_modules/js-yaml/package.json create mode 100644 node_modules/jsonc-parser/CHANGELOG.md create mode 100644 node_modules/jsonc-parser/LICENSE.md create mode 100644 node_modules/jsonc-parser/README.md create mode 100644 node_modules/jsonc-parser/SECURITY.md create mode 100644 node_modules/jsonc-parser/package.json create mode 100644 node_modules/jsonpointer/LICENSE.md create mode 100644 node_modules/jsonpointer/README.md create mode 100644 node_modules/jsonpointer/jsonpointer.d.ts create mode 100644 node_modules/jsonpointer/jsonpointer.js create mode 100644 node_modules/jsonpointer/package.json create mode 100644 node_modules/katex/LICENSE create mode 100644 node_modules/katex/README.md create mode 100755 node_modules/katex/cli.js create mode 100644 node_modules/katex/contrib/auto-render/README.md create mode 100644 node_modules/katex/contrib/auto-render/auto-render.js create mode 100644 node_modules/katex/contrib/auto-render/index.html create mode 100644 node_modules/katex/contrib/auto-render/splitAtDelimiters.js create mode 100644 node_modules/katex/contrib/auto-render/test/auto-render-spec.js create mode 100644 node_modules/katex/contrib/copy-tex/README.md create mode 100644 node_modules/katex/contrib/copy-tex/copy-tex.js create mode 100644 node_modules/katex/contrib/copy-tex/index.html create mode 100644 node_modules/katex/contrib/copy-tex/katex2tex.js create mode 100644 node_modules/katex/contrib/mathtex-script-type/README.md create mode 100644 node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js create mode 100644 node_modules/katex/contrib/mhchem/README.md create mode 100644 node_modules/katex/contrib/mhchem/mhchem.js create mode 100644 node_modules/katex/contrib/render-a11y-string/render-a11y-string.js create mode 100644 node_modules/katex/contrib/render-a11y-string/test/render-a11y-string-spec.js create mode 100644 node_modules/katex/katex.js create mode 100644 node_modules/katex/node_modules/commander/LICENSE create mode 100644 node_modules/katex/node_modules/commander/Readme.md create mode 100644 node_modules/katex/node_modules/commander/esm.mjs create mode 100644 node_modules/katex/node_modules/commander/index.js create mode 100644 node_modules/katex/node_modules/commander/package-support.json create mode 100644 node_modules/katex/node_modules/commander/package.json create mode 100644 node_modules/katex/node_modules/commander/typings/index.d.ts create mode 100644 node_modules/katex/package.json create mode 100644 node_modules/katex/src/Lexer.js create mode 100644 node_modules/katex/src/MacroExpander.js create mode 100644 node_modules/katex/src/Namespace.js create mode 100644 node_modules/katex/src/Options.js create mode 100644 node_modules/katex/src/ParseError.js create mode 100644 node_modules/katex/src/Parser.js create mode 100644 node_modules/katex/src/Settings.js create mode 100644 node_modules/katex/src/SourceLocation.js create mode 100644 node_modules/katex/src/Style.js create mode 100644 node_modules/katex/src/Token.js create mode 100644 node_modules/katex/src/buildCommon.js create mode 100644 node_modules/katex/src/buildHTML.js create mode 100644 node_modules/katex/src/buildMathML.js create mode 100644 node_modules/katex/src/buildTree.js create mode 100644 node_modules/katex/src/defineEnvironment.js create mode 100644 node_modules/katex/src/defineFunction.js create mode 100644 node_modules/katex/src/defineMacro.js create mode 100644 node_modules/katex/src/delimiter.js create mode 100644 node_modules/katex/src/domTree.js create mode 100644 node_modules/katex/src/environments.js create mode 100644 node_modules/katex/src/environments/array.js create mode 100644 node_modules/katex/src/environments/cd.js create mode 100644 node_modules/katex/src/fontMetrics.js create mode 100644 node_modules/katex/src/fontMetricsData.js create mode 100644 node_modules/katex/src/fonts/Makefile create mode 100644 node_modules/katex/src/fonts/default.cfg create mode 100755 node_modules/katex/src/fonts/generate_fonts.py create mode 100755 node_modules/katex/src/fonts/makeBlacker create mode 100755 node_modules/katex/src/fonts/makeFF create mode 100644 node_modules/katex/src/fonts/xbbold.mf create mode 100644 node_modules/katex/src/functions.js create mode 100644 node_modules/katex/src/functions/accent.js create mode 100644 node_modules/katex/src/functions/accentunder.js create mode 100644 node_modules/katex/src/functions/arrow.js create mode 100644 node_modules/katex/src/functions/char.js create mode 100644 node_modules/katex/src/functions/color.js create mode 100644 node_modules/katex/src/functions/cr.js create mode 100644 node_modules/katex/src/functions/def.js create mode 100644 node_modules/katex/src/functions/delimsizing.js create mode 100644 node_modules/katex/src/functions/enclose.js create mode 100644 node_modules/katex/src/functions/environment.js create mode 100644 node_modules/katex/src/functions/font.js create mode 100644 node_modules/katex/src/functions/genfrac.js create mode 100644 node_modules/katex/src/functions/hbox.js create mode 100644 node_modules/katex/src/functions/horizBrace.js create mode 100644 node_modules/katex/src/functions/href.js create mode 100644 node_modules/katex/src/functions/html.js create mode 100644 node_modules/katex/src/functions/htmlmathml.js create mode 100644 node_modules/katex/src/functions/includegraphics.js create mode 100644 node_modules/katex/src/functions/kern.js create mode 100644 node_modules/katex/src/functions/lap.js create mode 100644 node_modules/katex/src/functions/math.js create mode 100644 node_modules/katex/src/functions/mathchoice.js create mode 100644 node_modules/katex/src/functions/mclass.js create mode 100644 node_modules/katex/src/functions/op.js create mode 100644 node_modules/katex/src/functions/operatorname.js create mode 100644 node_modules/katex/src/functions/ordgroup.js create mode 100644 node_modules/katex/src/functions/overline.js create mode 100644 node_modules/katex/src/functions/phantom.js create mode 100644 node_modules/katex/src/functions/pmb.js create mode 100644 node_modules/katex/src/functions/raisebox.js create mode 100644 node_modules/katex/src/functions/relax.js create mode 100644 node_modules/katex/src/functions/rule.js create mode 100644 node_modules/katex/src/functions/sizing.js create mode 100644 node_modules/katex/src/functions/smash.js create mode 100644 node_modules/katex/src/functions/sqrt.js create mode 100644 node_modules/katex/src/functions/styling.js create mode 100644 node_modules/katex/src/functions/supsub.js create mode 100644 node_modules/katex/src/functions/symbolsOp.js create mode 100644 node_modules/katex/src/functions/symbolsOrd.js create mode 100644 node_modules/katex/src/functions/symbolsSpacing.js create mode 100644 node_modules/katex/src/functions/tag.js create mode 100644 node_modules/katex/src/functions/text.js create mode 100644 node_modules/katex/src/functions/underline.js create mode 100644 node_modules/katex/src/functions/utils/assembleSupSub.js create mode 100644 node_modules/katex/src/functions/vcenter.js create mode 100644 node_modules/katex/src/functions/verb.js create mode 100644 node_modules/katex/src/macros.js create mode 100644 node_modules/katex/src/mathMLTree.js create mode 100644 node_modules/katex/src/metrics/README.md create mode 100755 node_modules/katex/src/metrics/extract_tfms.py create mode 100755 node_modules/katex/src/metrics/extract_ttfs.py create mode 100755 node_modules/katex/src/metrics/format_json.py create mode 100755 node_modules/katex/src/metrics/mapping.pl create mode 100644 node_modules/katex/src/metrics/parse_tfm.py create mode 100644 node_modules/katex/src/parseNode.js create mode 100644 node_modules/katex/src/parseTree.js create mode 100644 node_modules/katex/src/spacingData.js create mode 100644 node_modules/katex/src/stretchy.js create mode 100644 node_modules/katex/src/styles/fonts.scss create mode 100644 node_modules/katex/src/styles/katex.scss create mode 100644 node_modules/katex/src/svgGeometry.js create mode 100644 node_modules/katex/src/symbols.js create mode 100644 node_modules/katex/src/tree.js create mode 100644 node_modules/katex/src/types.js create mode 100644 node_modules/katex/src/unicodeAccents.js create mode 100644 node_modules/katex/src/unicodeScripts.js create mode 100644 node_modules/katex/src/unicodeSupOrSub.js create mode 100644 node_modules/katex/src/unicodeSymbols.js create mode 100644 node_modules/katex/src/units.js create mode 100644 node_modules/katex/src/utils.js create mode 100644 node_modules/katex/src/wide-character.js create mode 100644 node_modules/katex/types/katex.d.ts create mode 100644 node_modules/linkify-it/LICENSE create mode 100644 node_modules/linkify-it/README.md create mode 100644 node_modules/linkify-it/index.mjs create mode 100644 node_modules/linkify-it/package.json create mode 100644 node_modules/lru-cache/LICENSE create mode 100644 node_modules/lru-cache/README.md create mode 100644 node_modules/lru-cache/package.json create mode 100644 node_modules/markdown-it/LICENSE create mode 100644 node_modules/markdown-it/README.md create mode 100644 node_modules/markdown-it/index.mjs create mode 100644 node_modules/markdown-it/package.json create mode 100644 node_modules/markdownlint-cli/LICENSE create mode 100644 node_modules/markdownlint-cli/README.md create mode 100755 node_modules/markdownlint-cli/markdownlint.js create mode 100644 node_modules/markdownlint-cli/package.json create mode 100644 node_modules/markdownlint/CHANGELOG.md create mode 100644 node_modules/markdownlint/CONTRIBUTING.md create mode 100644 node_modules/markdownlint/LICENSE create mode 100644 node_modules/markdownlint/README.md create mode 100644 node_modules/markdownlint/doc/CustomRules.md create mode 100644 node_modules/markdownlint/doc/Prettier.md create mode 100644 node_modules/markdownlint/doc/ReleaseProcess.md create mode 100644 node_modules/markdownlint/doc/Rules.md create mode 100644 node_modules/markdownlint/doc/md001.md create mode 100644 node_modules/markdownlint/doc/md003.md create mode 100644 node_modules/markdownlint/doc/md004.md create mode 100644 node_modules/markdownlint/doc/md005.md create mode 100644 node_modules/markdownlint/doc/md007.md create mode 100644 node_modules/markdownlint/doc/md009.md create mode 100644 node_modules/markdownlint/doc/md010.md create mode 100644 node_modules/markdownlint/doc/md011.md create mode 100644 node_modules/markdownlint/doc/md012.md create mode 100644 node_modules/markdownlint/doc/md013.md create mode 100644 node_modules/markdownlint/doc/md014.md create mode 100644 node_modules/markdownlint/doc/md018.md create mode 100644 node_modules/markdownlint/doc/md019.md create mode 100644 node_modules/markdownlint/doc/md020.md create mode 100644 node_modules/markdownlint/doc/md021.md create mode 100644 node_modules/markdownlint/doc/md022.md create mode 100644 node_modules/markdownlint/doc/md023.md create mode 100644 node_modules/markdownlint/doc/md024.md create mode 100644 node_modules/markdownlint/doc/md025.md create mode 100644 node_modules/markdownlint/doc/md026.md create mode 100644 node_modules/markdownlint/doc/md027.md create mode 100644 node_modules/markdownlint/doc/md028.md create mode 100644 node_modules/markdownlint/doc/md029.md create mode 100644 node_modules/markdownlint/doc/md030.md create mode 100644 node_modules/markdownlint/doc/md031.md create mode 100644 node_modules/markdownlint/doc/md032.md create mode 100644 node_modules/markdownlint/doc/md033.md create mode 100644 node_modules/markdownlint/doc/md034.md create mode 100644 node_modules/markdownlint/doc/md035.md create mode 100644 node_modules/markdownlint/doc/md036.md create mode 100644 node_modules/markdownlint/doc/md037.md create mode 100644 node_modules/markdownlint/doc/md038.md create mode 100644 node_modules/markdownlint/doc/md039.md create mode 100644 node_modules/markdownlint/doc/md040.md create mode 100644 node_modules/markdownlint/doc/md041.md create mode 100644 node_modules/markdownlint/doc/md042.md create mode 100644 node_modules/markdownlint/doc/md043.md create mode 100644 node_modules/markdownlint/doc/md044.md create mode 100644 node_modules/markdownlint/doc/md045.md create mode 100644 node_modules/markdownlint/doc/md046.md create mode 100644 node_modules/markdownlint/doc/md047.md create mode 100644 node_modules/markdownlint/doc/md048.md create mode 100644 node_modules/markdownlint/doc/md049.md create mode 100644 node_modules/markdownlint/doc/md050.md create mode 100644 node_modules/markdownlint/doc/md051.md create mode 100644 node_modules/markdownlint/doc/md052.md create mode 100644 node_modules/markdownlint/doc/md053.md create mode 100644 node_modules/markdownlint/doc/md054.md create mode 100644 node_modules/markdownlint/doc/md055.md create mode 100644 node_modules/markdownlint/doc/md056.md create mode 100644 node_modules/markdownlint/doc/md058.md create mode 100644 node_modules/markdownlint/helpers/LICENSE create mode 100644 node_modules/markdownlint/helpers/README.md create mode 100644 node_modules/markdownlint/helpers/helpers.cjs create mode 100644 node_modules/markdownlint/helpers/micromark-helpers.cjs create mode 100644 node_modules/markdownlint/helpers/package.json create mode 100644 node_modules/markdownlint/helpers/shared.cjs create mode 100644 node_modules/markdownlint/package.json create mode 100644 node_modules/markdownlint/schema/.markdownlint.jsonc create mode 100644 node_modules/markdownlint/schema/.markdownlint.yaml create mode 100644 node_modules/markdownlint/schema/ValidatingConfiguration.md create mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema-strict.json create mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema.json create mode 100644 node_modules/markdownlint/style/all.json create mode 100644 node_modules/markdownlint/style/cirosantilli.json create mode 100644 node_modules/markdownlint/style/prettier.json create mode 100644 node_modules/markdownlint/style/relaxed.json create mode 100644 node_modules/mdurl/LICENSE create mode 100644 node_modules/mdurl/README.md create mode 100644 node_modules/mdurl/index.mjs create mode 100644 node_modules/mdurl/package.json create mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts create mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts.map create mode 100644 node_modules/micromark-core-commonmark/dev/index.js create mode 100644 node_modules/micromark-core-commonmark/index.d.ts create mode 100644 node_modules/micromark-core-commonmark/index.d.ts.map create mode 100644 node_modules/micromark-core-commonmark/index.js create mode 100644 node_modules/micromark-core-commonmark/license create mode 100644 node_modules/micromark-core-commonmark/package.json create mode 100644 node_modules/micromark-core-commonmark/readme.md create mode 100644 node_modules/micromark-extension-directive/dev/index.d.ts create mode 100644 node_modules/micromark-extension-directive/dev/index.js create mode 100644 node_modules/micromark-extension-directive/index.d.ts create mode 100644 node_modules/micromark-extension-directive/index.js create mode 100644 node_modules/micromark-extension-directive/license create mode 100644 node_modules/micromark-extension-directive/package.json create mode 100644 node_modules/micromark-extension-directive/readme.md create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.js create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.js create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/license create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/package.json create mode 100644 node_modules/micromark-extension-gfm-autolink-literal/readme.md create mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.js create mode 100644 node_modules/micromark-extension-gfm-footnote/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-footnote/index.js create mode 100644 node_modules/micromark-extension-gfm-footnote/license create mode 100644 node_modules/micromark-extension-gfm-footnote/package.json create mode 100644 node_modules/micromark-extension-gfm-footnote/readme.md create mode 100644 node_modules/micromark-extension-gfm-table/dev/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-table/dev/index.js create mode 100644 node_modules/micromark-extension-gfm-table/index.d.ts create mode 100644 node_modules/micromark-extension-gfm-table/index.js create mode 100644 node_modules/micromark-extension-gfm-table/license create mode 100644 node_modules/micromark-extension-gfm-table/package.json create mode 100644 node_modules/micromark-extension-gfm-table/readme.md create mode 100644 node_modules/micromark-extension-math/dev/index.d.ts create mode 100644 node_modules/micromark-extension-math/dev/index.js create mode 100644 node_modules/micromark-extension-math/index.d.ts create mode 100644 node_modules/micromark-extension-math/index.js create mode 100644 node_modules/micromark-extension-math/license create mode 100644 node_modules/micromark-extension-math/package.json create mode 100644 node_modules/micromark-extension-math/readme.md create mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts create mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-destination/dev/index.js create mode 100644 node_modules/micromark-factory-destination/index.d.ts create mode 100644 node_modules/micromark-factory-destination/index.d.ts.map create mode 100644 node_modules/micromark-factory-destination/index.js create mode 100644 node_modules/micromark-factory-destination/license create mode 100644 node_modules/micromark-factory-destination/package.json create mode 100644 node_modules/micromark-factory-destination/readme.md create mode 100644 node_modules/micromark-factory-label/dev/index.d.ts create mode 100644 node_modules/micromark-factory-label/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-label/dev/index.js create mode 100644 node_modules/micromark-factory-label/index.d.ts create mode 100644 node_modules/micromark-factory-label/index.d.ts.map create mode 100644 node_modules/micromark-factory-label/index.js create mode 100644 node_modules/micromark-factory-label/license create mode 100644 node_modules/micromark-factory-label/package.json create mode 100644 node_modules/micromark-factory-label/readme.md create mode 100644 node_modules/micromark-factory-space/dev/index.d.ts create mode 100644 node_modules/micromark-factory-space/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-space/dev/index.js create mode 100644 node_modules/micromark-factory-space/index.d.ts create mode 100644 node_modules/micromark-factory-space/index.d.ts.map create mode 100644 node_modules/micromark-factory-space/index.js create mode 100644 node_modules/micromark-factory-space/license create mode 100644 node_modules/micromark-factory-space/package.json create mode 100644 node_modules/micromark-factory-space/readme.md create mode 100644 node_modules/micromark-factory-title/dev/index.d.ts create mode 100644 node_modules/micromark-factory-title/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-title/dev/index.js create mode 100644 node_modules/micromark-factory-title/index.d.ts create mode 100644 node_modules/micromark-factory-title/index.d.ts.map create mode 100644 node_modules/micromark-factory-title/index.js create mode 100644 node_modules/micromark-factory-title/license create mode 100644 node_modules/micromark-factory-title/package.json create mode 100644 node_modules/micromark-factory-title/readme.md create mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts create mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts.map create mode 100644 node_modules/micromark-factory-whitespace/dev/index.js create mode 100644 node_modules/micromark-factory-whitespace/index.d.ts create mode 100644 node_modules/micromark-factory-whitespace/index.d.ts.map create mode 100644 node_modules/micromark-factory-whitespace/index.js create mode 100644 node_modules/micromark-factory-whitespace/license create mode 100644 node_modules/micromark-factory-whitespace/package.json create mode 100644 node_modules/micromark-factory-whitespace/readme.md create mode 100644 node_modules/micromark-util-character/dev/index.d.ts create mode 100644 node_modules/micromark-util-character/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-character/dev/index.js create mode 100644 node_modules/micromark-util-character/index.d.ts create mode 100644 node_modules/micromark-util-character/index.d.ts.map create mode 100644 node_modules/micromark-util-character/index.js create mode 100644 node_modules/micromark-util-character/license create mode 100644 node_modules/micromark-util-character/package.json create mode 100644 node_modules/micromark-util-character/readme.md create mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts create mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-chunked/dev/index.js create mode 100644 node_modules/micromark-util-chunked/index.d.ts create mode 100644 node_modules/micromark-util-chunked/index.d.ts.map create mode 100644 node_modules/micromark-util-chunked/index.js create mode 100644 node_modules/micromark-util-chunked/license create mode 100644 node_modules/micromark-util-chunked/package.json create mode 100644 node_modules/micromark-util-chunked/readme.md create mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts create mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-classify-character/dev/index.js create mode 100644 node_modules/micromark-util-classify-character/index.d.ts create mode 100644 node_modules/micromark-util-classify-character/index.d.ts.map create mode 100644 node_modules/micromark-util-classify-character/index.js create mode 100644 node_modules/micromark-util-classify-character/license create mode 100644 node_modules/micromark-util-classify-character/package.json create mode 100644 node_modules/micromark-util-classify-character/readme.md create mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts create mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts.map create mode 100644 node_modules/micromark-util-combine-extensions/index.js create mode 100644 node_modules/micromark-util-combine-extensions/license create mode 100644 node_modules/micromark-util-combine-extensions/package.json create mode 100644 node_modules/micromark-util-combine-extensions/readme.md create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.js create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.js create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/license create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/package.json create mode 100644 node_modules/micromark-util-decode-numeric-character-reference/readme.md create mode 100644 node_modules/micromark-util-encode/index.d.ts create mode 100644 node_modules/micromark-util-encode/index.d.ts.map create mode 100644 node_modules/micromark-util-encode/index.js create mode 100644 node_modules/micromark-util-encode/license create mode 100644 node_modules/micromark-util-encode/package.json create mode 100644 node_modules/micromark-util-encode/readme.md create mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts create mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts.map create mode 100644 node_modules/micromark-util-html-tag-name/index.js create mode 100644 node_modules/micromark-util-html-tag-name/license create mode 100644 node_modules/micromark-util-html-tag-name/package.json create mode 100644 node_modules/micromark-util-html-tag-name/readme.md create mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts create mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.js create mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts create mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts.map create mode 100644 node_modules/micromark-util-normalize-identifier/index.js create mode 100644 node_modules/micromark-util-normalize-identifier/license create mode 100644 node_modules/micromark-util-normalize-identifier/package.json create mode 100644 node_modules/micromark-util-normalize-identifier/readme.md create mode 100644 node_modules/micromark-util-resolve-all/index.d.ts create mode 100644 node_modules/micromark-util-resolve-all/index.d.ts.map create mode 100644 node_modules/micromark-util-resolve-all/index.js create mode 100644 node_modules/micromark-util-resolve-all/license create mode 100644 node_modules/micromark-util-resolve-all/package.json create mode 100644 node_modules/micromark-util-resolve-all/readme.md create mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts create mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.js create mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts create mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts.map create mode 100644 node_modules/micromark-util-sanitize-uri/index.js create mode 100644 node_modules/micromark-util-sanitize-uri/license create mode 100644 node_modules/micromark-util-sanitize-uri/package.json create mode 100644 node_modules/micromark-util-sanitize-uri/readme.md create mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts create mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts.map create mode 100644 node_modules/micromark-util-subtokenize/dev/index.js create mode 100644 node_modules/micromark-util-subtokenize/index.d.ts create mode 100644 node_modules/micromark-util-subtokenize/index.d.ts.map create mode 100644 node_modules/micromark-util-subtokenize/index.js create mode 100644 node_modules/micromark-util-subtokenize/license create mode 100644 node_modules/micromark-util-subtokenize/package.json create mode 100644 node_modules/micromark-util-subtokenize/readme.md create mode 100644 node_modules/micromark-util-symbol/license create mode 100644 node_modules/micromark-util-symbol/package.json create mode 100644 node_modules/micromark-util-symbol/readme.md create mode 100644 node_modules/micromark-util-types/index.d.ts create mode 100644 node_modules/micromark-util-types/index.js create mode 100644 node_modules/micromark-util-types/license create mode 100644 node_modules/micromark-util-types/package.json create mode 100644 node_modules/micromark-util-types/readme.md create mode 100644 node_modules/micromark/dev/index.d.ts create mode 100644 node_modules/micromark/dev/index.d.ts.map create mode 100644 node_modules/micromark/dev/index.js create mode 100644 node_modules/micromark/dev/stream.d.ts create mode 100644 node_modules/micromark/dev/stream.d.ts.map create mode 100644 node_modules/micromark/dev/stream.js create mode 100644 node_modules/micromark/index.d.ts create mode 100644 node_modules/micromark/index.d.ts.map create mode 100644 node_modules/micromark/index.js create mode 100644 node_modules/micromark/license create mode 100644 node_modules/micromark/package.json create mode 100644 node_modules/micromark/readme.md create mode 100644 node_modules/micromark/stream.d.ts create mode 100644 node_modules/micromark/stream.d.ts.map create mode 100644 node_modules/micromark/stream.js create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/minimist/.eslintrc create mode 100644 node_modules/minimist/.github/FUNDING.yml create mode 100644 node_modules/minimist/.nycrc create mode 100644 node_modules/minimist/CHANGELOG.md create mode 100644 node_modules/minimist/LICENSE create mode 100644 node_modules/minimist/README.md create mode 100644 node_modules/minimist/example/parse.js create mode 100644 node_modules/minimist/index.js create mode 100644 node_modules/minimist/package.json create mode 100644 node_modules/minimist/test/all_bool.js create mode 100644 node_modules/minimist/test/bool.js create mode 100644 node_modules/minimist/test/dash.js create mode 100644 node_modules/minimist/test/default_bool.js create mode 100644 node_modules/minimist/test/dotted.js create mode 100644 node_modules/minimist/test/kv_short.js create mode 100644 node_modules/minimist/test/long.js create mode 100644 node_modules/minimist/test/num.js create mode 100644 node_modules/minimist/test/parse.js create mode 100644 node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/minimist/test/proto.js create mode 100644 node_modules/minimist/test/short.js create mode 100644 node_modules/minimist/test/stop_early.js create mode 100644 node_modules/minimist/test/unknown.js create mode 100644 node_modules/minimist/test/whitespace.js create mode 100644 node_modules/minipass/LICENSE create mode 100644 node_modules/minipass/README.md create mode 100644 node_modules/minipass/package.json create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/package-json-from-dist/LICENSE.md create mode 100644 node_modules/package-json-from-dist/README.md create mode 100644 node_modules/package-json-from-dist/package.json create mode 100644 node_modules/parse-entities/index.d.ts create mode 100644 node_modules/parse-entities/index.js create mode 100644 node_modules/parse-entities/license create mode 100644 node_modules/parse-entities/package.json create mode 100644 node_modules/parse-entities/readme.md create mode 100644 node_modules/path-key/index.d.ts create mode 100644 node_modules/path-key/index.js create mode 100644 node_modules/path-key/license create mode 100644 node_modules/path-key/package.json create mode 100644 node_modules/path-key/readme.md create mode 100644 node_modules/path-scurry/LICENSE.md create mode 100644 node_modules/path-scurry/README.md create mode 100644 node_modules/path-scurry/package.json create mode 100644 node_modules/punycode.js/LICENSE-MIT.txt create mode 100644 node_modules/punycode.js/README.md create mode 100644 node_modules/punycode.js/package.json create mode 100644 node_modules/punycode.js/punycode.es6.js create mode 100644 node_modules/punycode.js/punycode.js create mode 100644 node_modules/run-con/.circleci/config.yml create mode 100644 node_modules/run-con/.github/FUNDING.yml create mode 100644 node_modules/run-con/.github/dependabot.yml create mode 100644 node_modules/run-con/.github/workflows/coverage.yml create mode 100644 node_modules/run-con/.github/workflows/dependabot.yml create mode 100644 node_modules/run-con/.github/workflows/issuehunt.yml create mode 100644 node_modules/run-con/LICENSE.APACHE2 create mode 100644 node_modules/run-con/LICENSE.BSD create mode 100644 node_modules/run-con/LICENSE.MIT create mode 100644 node_modules/run-con/README.md create mode 100644 node_modules/run-con/browser.js create mode 100755 node_modules/run-con/cli.js create mode 100644 node_modules/run-con/index.js create mode 100644 node_modules/run-con/package.json create mode 100644 node_modules/run-con/renovate.json create mode 100644 node_modules/shebang-command/index.js create mode 100644 node_modules/shebang-command/license create mode 100644 node_modules/shebang-command/package.json create mode 100644 node_modules/shebang-command/readme.md create mode 100644 node_modules/shebang-regex/index.d.ts create mode 100644 node_modules/shebang-regex/index.js create mode 100644 node_modules/shebang-regex/license create mode 100644 node_modules/shebang-regex/package.json create mode 100644 node_modules/shebang-regex/readme.md create mode 100644 node_modules/signal-exit/LICENSE.txt create mode 100644 node_modules/signal-exit/README.md create mode 100644 node_modules/signal-exit/package.json create mode 100644 node_modules/smol-toml/LICENSE create mode 100644 node_modules/smol-toml/README.md create mode 100644 node_modules/smol-toml/package.json create mode 100644 node_modules/string-width-cjs/index.d.ts create mode 100644 node_modules/string-width-cjs/index.js create mode 100644 node_modules/string-width-cjs/license create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/README.md create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/package.json create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/text.js create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.js create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/license create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/package.json create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/readme.md create mode 100644 node_modules/string-width-cjs/package.json create mode 100644 node_modules/string-width-cjs/readme.md create mode 100644 node_modules/string-width/index.d.ts create mode 100644 node_modules/string-width/index.js create mode 100644 node_modules/string-width/license create mode 100644 node_modules/string-width/package.json create mode 100644 node_modules/string-width/readme.md create mode 100644 node_modules/strip-ansi-cjs/index.d.ts create mode 100644 node_modules/strip-ansi-cjs/index.js create mode 100644 node_modules/strip-ansi-cjs/license create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/strip-ansi-cjs/package.json create mode 100644 node_modules/strip-ansi-cjs/readme.md create mode 100644 node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/strip-ansi/index.js create mode 100644 node_modules/strip-ansi/license create mode 100644 node_modules/strip-ansi/package.json create mode 100644 node_modules/strip-ansi/readme.md create mode 100644 node_modules/strip-json-comments/index.d.ts create mode 100644 node_modules/strip-json-comments/index.js create mode 100644 node_modules/strip-json-comments/license create mode 100644 node_modules/strip-json-comments/package.json create mode 100644 node_modules/strip-json-comments/readme.md create mode 100644 node_modules/uc.micro/LICENSE.txt create mode 100644 node_modules/uc.micro/README.md create mode 100644 node_modules/uc.micro/categories/Cc/regex.mjs create mode 100644 node_modules/uc.micro/categories/Cf/regex.mjs create mode 100644 node_modules/uc.micro/categories/P/regex.mjs create mode 100644 node_modules/uc.micro/categories/S/regex.mjs create mode 100644 node_modules/uc.micro/categories/Z/regex.mjs create mode 100644 node_modules/uc.micro/index.mjs create mode 100644 node_modules/uc.micro/package.json create mode 100644 node_modules/uc.micro/properties/Any/regex.mjs create mode 100644 node_modules/which/CHANGELOG.md create mode 100644 node_modules/which/LICENSE create mode 100644 node_modules/which/README.md create mode 100644 node_modules/which/package.json create mode 100644 node_modules/which/which.js create mode 100755 node_modules/wrap-ansi-cjs/index.js create mode 100644 node_modules/wrap-ansi-cjs/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md create mode 100644 node_modules/wrap-ansi-cjs/package.json create mode 100644 node_modules/wrap-ansi-cjs/readme.md create mode 100644 node_modules/wrap-ansi/index.d.ts create mode 100755 node_modules/wrap-ansi/index.js create mode 100644 node_modules/wrap-ansi/license create mode 100644 node_modules/wrap-ansi/package.json create mode 100644 node_modules/wrap-ansi/readme.md diff --git a/node_modules/.bin/glob b/node_modules/.bin/glob new file mode 120000 index 0000000000..85c9c1db30 --- /dev/null +++ b/node_modules/.bin/glob @@ -0,0 +1 @@ +../glob/dist/esm/bin.mjs \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml new file mode 120000 index 0000000000..9dbd010d47 --- /dev/null +++ b/node_modules/.bin/js-yaml @@ -0,0 +1 @@ +../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/katex b/node_modules/.bin/katex new file mode 120000 index 0000000000..891ac1324e --- /dev/null +++ b/node_modules/.bin/katex @@ -0,0 +1 @@ +../katex/cli.js \ No newline at end of file diff --git a/node_modules/.bin/markdown-it b/node_modules/.bin/markdown-it new file mode 120000 index 0000000000..8a641084ea --- /dev/null +++ b/node_modules/.bin/markdown-it @@ -0,0 +1 @@ +../markdown-it/bin/markdown-it.mjs \ No newline at end of file diff --git a/node_modules/.bin/markdownlint b/node_modules/.bin/markdownlint new file mode 120000 index 0000000000..f2b1093a66 --- /dev/null +++ b/node_modules/.bin/markdownlint @@ -0,0 +1 @@ +../markdownlint-cli/markdownlint.js \ No newline at end of file diff --git a/node_modules/.bin/node-which b/node_modules/.bin/node-which new file mode 120000 index 0000000000..6f8415ec58 --- /dev/null +++ b/node_modules/.bin/node-which @@ -0,0 +1 @@ +../which/bin/node-which \ No newline at end of file diff --git a/node_modules/.bin/run-con b/node_modules/.bin/run-con new file mode 120000 index 0000000000..85da8da1e2 --- /dev/null +++ b/node_modules/.bin/run-con @@ -0,0 +1 @@ +../run-con/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000000..acdb98746d --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,1415 @@ +{ + "name": "iceberg-python", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/katex": { + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", + "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", + "license": "MIT", + "dependencies": { + "markdown-it": "14.1.0", + "micromark": "4.0.1", + "micromark-core-commonmark": "2.0.2", + "micromark-extension-directive": "3.0.2", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.0", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli": { + "version": "0.44.0", + "resolved": "git+ssh://git@github.com/igorshubovych/markdownlint-cli.git#586c3ea3f51230da42bab657c6a32e9e66c364f0", + "license": "MIT", + "dependencies": { + "commander": "~13.1.0", + "glob": "~10.4.5", + "ignore": "~7.0.3", + "js-yaml": "~4.1.0", + "jsonc-parser": "~3.3.1", + "jsonpointer": "~5.0.1", + "markdownlint": "~0.37.4", + "minimatch": "~9.0.5", + "run-con": "~1.3.2", + "smol-toml": "~1.3.1" + }, + "bin": { + "markdownlint": "markdownlint.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", + "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-con": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", + "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~4.1.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + }, + "bin": { + "run-con": "cli.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smol-toml": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", + "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/node_modules/@isaacs/cliui/LICENSE.txt b/node_modules/@isaacs/cliui/LICENSE.txt new file mode 100644 index 0000000000..c7e27478a3 --- /dev/null +++ b/node_modules/@isaacs/cliui/LICENSE.txt @@ -0,0 +1,14 @@ +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/@isaacs/cliui/README.md b/node_modules/@isaacs/cliui/README.md new file mode 100644 index 0000000000..488064267d --- /dev/null +++ b/node_modules/@isaacs/cliui/README.md @@ -0,0 +1,143 @@ +# @isaacs/cliui + +Temporary fork of [cliui](http://npm.im/cliui). + +![ci](https://github.com/yargs/cliui/workflows/ci/badge.svg) +[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui) +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) +![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/cliui) + +easily create complex multi-column command-line-interfaces. + +## Example + +```js +const ui = require('cliui')() + +ui.div('Usage: $0 [command] [options]') + +ui.div({ + text: 'Options:', + padding: [2, 0, 1, 0] +}) + +ui.div( + { + text: "-f, --file", + width: 20, + padding: [0, 4, 0, 4] + }, + { + text: "the file to load." + + chalk.green("(if this description is long it wraps).") + , + width: 20 + }, + { + text: chalk.red("[required]"), + align: 'right' + } +) + +console.log(ui.toString()) +``` + +## Deno/ESM Support + +As of `v7` `cliui` supports [Deno](https://github.com/denoland/deno) and +[ESM](https://nodejs.org/api/esm.html#esm_ecmascript_modules): + +```typescript +import cliui from "https://deno.land/x/cliui/deno.ts"; + +const ui = cliui({}) + +ui.div('Usage: $0 [command] [options]') + +ui.div({ + text: 'Options:', + padding: [2, 0, 1, 0] +}) + +ui.div({ + text: "-f, --file", + width: 20, + padding: [0, 4, 0, 4] +}) + +console.log(ui.toString()) +``` + + + +## Layout DSL + +cliui exposes a simple layout DSL: + +If you create a single `ui.div`, passing a string rather than an +object: + +* `\n`: characters will be interpreted as new rows. +* `\t`: characters will be interpreted as new columns. +* `\s`: characters will be interpreted as padding. + +**as an example...** + +```js +var ui = require('./')({ + width: 60 +}) + +ui.div( + 'Usage: node ./bin/foo.js\n' + + ' \t provide a regex\n' + + ' \t provide a glob\t [required]' +) + +console.log(ui.toString()) +``` + +**will output:** + +```shell +Usage: node ./bin/foo.js + provide a regex + provide a glob [required] +``` + +## Methods + +```js +cliui = require('cliui') +``` + +### cliui({width: integer}) + +Specify the maximum width of the UI being generated. +If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`. + +### cliui({wrap: boolean}) + +Enable or disable the wrapping of text in a column. + +### cliui.div(column, column, column) + +Create a row with any number of columns, a column +can either be a string, or an object with the following +options: + +* **text:** some text to place in the column. +* **width:** the width of a column. +* **align:** alignment, `right` or `center`. +* **padding:** `[top, right, bottom, left]`. +* **border:** should a border be placed around the div? + +### cliui.span(column, column, column) + +Similar to `div`, except the next row will be appended without +a new line being created. + +### cliui.resetOutput() + +Resets the UI elements of the current cliui instance, maintaining the values +set for `width` and `wrap`. diff --git a/node_modules/@isaacs/cliui/index.mjs b/node_modules/@isaacs/cliui/index.mjs new file mode 100644 index 0000000000..5177519af3 --- /dev/null +++ b/node_modules/@isaacs/cliui/index.mjs @@ -0,0 +1,14 @@ +// Bootstrap cliui with ESM dependencies: +import { cliui } from './build/lib/index.js' + +import stringWidth from 'string-width' +import stripAnsi from 'strip-ansi' +import wrap from 'wrap-ansi' + +export default function ui (opts) { + return cliui(opts, { + stringWidth, + stripAnsi, + wrap + }) +} diff --git a/node_modules/@isaacs/cliui/package.json b/node_modules/@isaacs/cliui/package.json new file mode 100644 index 0000000000..7a952532de --- /dev/null +++ b/node_modules/@isaacs/cliui/package.json @@ -0,0 +1,86 @@ +{ + "name": "@isaacs/cliui", + "version": "8.0.2", + "description": "easily create complex multi-column command-line-interfaces", + "main": "build/index.cjs", + "exports": { + ".": [ + { + "import": "./index.mjs", + "require": "./build/index.cjs" + }, + "./build/index.cjs" + ] + }, + "type": "module", + "module": "./index.mjs", + "scripts": { + "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'", + "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'", + "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", + "test": "c8 mocha ./test/*.cjs", + "test:esm": "c8 mocha ./test/**/*.mjs", + "postest": "check", + "coverage": "c8 report --check-coverage", + "precompile": "rimraf build", + "compile": "tsc", + "postcompile": "npm run build:cjs", + "build:cjs": "rollup -c", + "prepare": "npm run compile" + }, + "repository": "yargs/cliui", + "standard": { + "ignore": [ + "**/example/**" + ], + "globals": [ + "it" + ] + }, + "keywords": [ + "cli", + "command-line", + "layout", + "design", + "console", + "wrap", + "table" + ], + "author": "Ben Coe ", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "devDependencies": { + "@types/node": "^14.0.27", + "@typescript-eslint/eslint-plugin": "^4.0.0", + "@typescript-eslint/parser": "^4.0.0", + "c8": "^7.3.0", + "chai": "^4.2.0", + "chalk": "^4.1.0", + "cross-env": "^7.0.2", + "eslint": "^7.6.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0", + "gts": "^3.0.0", + "mocha": "^10.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.23.1", + "rollup-plugin-ts": "^3.0.2", + "standardx": "^7.0.0", + "typescript": "^4.0.0" + }, + "files": [ + "build", + "index.mjs", + "!*.d.ts" + ], + "engines": { + "node": ">=12" + } +} diff --git a/node_modules/@pkgjs/parseargs/.editorconfig b/node_modules/@pkgjs/parseargs/.editorconfig new file mode 100644 index 0000000000..b140163905 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/.editorconfig @@ -0,0 +1,14 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Copied from Node.js to ease compatibility in PR. +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/node_modules/@pkgjs/parseargs/CHANGELOG.md b/node_modules/@pkgjs/parseargs/CHANGELOG.md new file mode 100644 index 0000000000..2adc7d3273 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/CHANGELOG.md @@ -0,0 +1,147 @@ +# Changelog + +## [0.11.0](https://github.com/pkgjs/parseargs/compare/v0.10.0...v0.11.0) (2022-10-08) + + +### Features + +* add `default` option parameter ([#142](https://github.com/pkgjs/parseargs/issues/142)) ([cd20847](https://github.com/pkgjs/parseargs/commit/cd20847a00b2f556aa9c085ac83b942c60868ec1)) + +## [0.10.0](https://github.com/pkgjs/parseargs/compare/v0.9.1...v0.10.0) (2022-07-21) + + +### Features + +* add parsed meta-data to returned properties ([#129](https://github.com/pkgjs/parseargs/issues/129)) ([91bfb4d](https://github.com/pkgjs/parseargs/commit/91bfb4d3f7b6937efab1b27c91c45d1205f1497e)) + +## [0.9.1](https://github.com/pkgjs/parseargs/compare/v0.9.0...v0.9.1) (2022-06-20) + + +### Bug Fixes + +* **runtime:** support node 14+ ([#135](https://github.com/pkgjs/parseargs/issues/135)) ([6a1c5a6](https://github.com/pkgjs/parseargs/commit/6a1c5a6f7cadf2f035e004027e2742e3c4ce554b)) + +## [0.9.0](https://github.com/pkgjs/parseargs/compare/v0.8.0...v0.9.0) (2022-05-23) + + +### ⚠ BREAKING CHANGES + +* drop handling of electron arguments (#121) + +### Code Refactoring + +* drop handling of electron arguments ([#121](https://github.com/pkgjs/parseargs/issues/121)) ([a2ffd53](https://github.com/pkgjs/parseargs/commit/a2ffd537c244a062371522b955acb45a404fc9f2)) + +## [0.8.0](https://github.com/pkgjs/parseargs/compare/v0.7.1...v0.8.0) (2022-05-16) + + +### ⚠ BREAKING CHANGES + +* switch type:string option arguments to greedy, but with error for suspect cases in strict mode (#88) +* positionals now opt-in when strict:true (#116) +* create result.values with null prototype (#111) + +### Features + +* create result.values with null prototype ([#111](https://github.com/pkgjs/parseargs/issues/111)) ([9d539c3](https://github.com/pkgjs/parseargs/commit/9d539c3d57f269c160e74e0656ad4fa84ff92ec2)) +* positionals now opt-in when strict:true ([#116](https://github.com/pkgjs/parseargs/issues/116)) ([3643338](https://github.com/pkgjs/parseargs/commit/364333826b746e8a7dc5505b4b22fd19ac51df3b)) +* switch type:string option arguments to greedy, but with error for suspect cases in strict mode ([#88](https://github.com/pkgjs/parseargs/issues/88)) ([c2b5e72](https://github.com/pkgjs/parseargs/commit/c2b5e72161991dfdc535909f1327cc9b970fe7e8)) + +### [0.7.1](https://github.com/pkgjs/parseargs/compare/v0.7.0...v0.7.1) (2022-04-15) + + +### Bug Fixes + +* resist pollution ([#106](https://github.com/pkgjs/parseargs/issues/106)) ([ecf2dec](https://github.com/pkgjs/parseargs/commit/ecf2dece0a9f2a76d789384d5d71c68ffe64022a)) + +## [0.7.0](https://github.com/pkgjs/parseargs/compare/v0.6.0...v0.7.0) (2022-04-13) + + +### Features + +* Add strict mode to parser ([#74](https://github.com/pkgjs/parseargs/issues/74)) ([8267d02](https://github.com/pkgjs/parseargs/commit/8267d02083a87b8b8a71fcce08348d1e031ea91c)) + +## [0.6.0](https://github.com/pkgjs/parseargs/compare/v0.5.0...v0.6.0) (2022-04-11) + + +### ⚠ BREAKING CHANGES + +* rework results to remove redundant `flags` property and store value true for boolean options (#83) +* switch to existing ERR_INVALID_ARG_VALUE (#97) + +### Code Refactoring + +* rework results to remove redundant `flags` property and store value true for boolean options ([#83](https://github.com/pkgjs/parseargs/issues/83)) ([be153db](https://github.com/pkgjs/parseargs/commit/be153dbed1d488cb7b6e27df92f601ba7337713d)) +* switch to existing ERR_INVALID_ARG_VALUE ([#97](https://github.com/pkgjs/parseargs/issues/97)) ([084a23f](https://github.com/pkgjs/parseargs/commit/084a23f9fde2da030b159edb1c2385f24579ce40)) + +## [0.5.0](https://github.com/pkgjs/parseargs/compare/v0.4.0...v0.5.0) (2022-04-10) + + +### ⚠ BREAKING CHANGES + +* Require type to be specified for each supplied option (#95) + +### Features + +* Require type to be specified for each supplied option ([#95](https://github.com/pkgjs/parseargs/issues/95)) ([02cd018](https://github.com/pkgjs/parseargs/commit/02cd01885b8aaa59f2db8308f2d4479e64340068)) + +## [0.4.0](https://github.com/pkgjs/parseargs/compare/v0.3.0...v0.4.0) (2022-03-12) + + +### ⚠ BREAKING CHANGES + +* parsing, revisit short option groups, add support for combined short and value (#75) +* restructure configuration to take options bag (#63) + +### Code Refactoring + +* parsing, revisit short option groups, add support for combined short and value ([#75](https://github.com/pkgjs/parseargs/issues/75)) ([a92600f](https://github.com/pkgjs/parseargs/commit/a92600fa6c214508ab1e016fa55879a314f541af)) +* restructure configuration to take options bag ([#63](https://github.com/pkgjs/parseargs/issues/63)) ([b412095](https://github.com/pkgjs/parseargs/commit/b4120957d90e809ee8b607b06e747d3e6a6b213e)) + +## [0.3.0](https://github.com/pkgjs/parseargs/compare/v0.2.0...v0.3.0) (2022-02-06) + + +### Features + +* **parser:** support short-option groups ([#59](https://github.com/pkgjs/parseargs/issues/59)) ([882067b](https://github.com/pkgjs/parseargs/commit/882067bc2d7cbc6b796f8e5a079a99bc99d4e6ba)) + +## [0.2.0](https://github.com/pkgjs/parseargs/compare/v0.1.1...v0.2.0) (2022-02-05) + + +### Features + +* basic support for shorts ([#50](https://github.com/pkgjs/parseargs/issues/50)) ([a2f36d7](https://github.com/pkgjs/parseargs/commit/a2f36d7da4145af1c92f76806b7fe2baf6beeceb)) + + +### Bug Fixes + +* always store value for a=b ([#43](https://github.com/pkgjs/parseargs/issues/43)) ([a85e8dc](https://github.com/pkgjs/parseargs/commit/a85e8dc06379fd2696ee195cc625de8fac6aee42)) +* support single dash as positional ([#49](https://github.com/pkgjs/parseargs/issues/49)) ([d795bf8](https://github.com/pkgjs/parseargs/commit/d795bf877d068fd67aec381f30b30b63f97109ad)) + +### [0.1.1](https://github.com/pkgjs/parseargs/compare/v0.1.0...v0.1.1) (2022-01-25) + + +### Bug Fixes + +* only use arrays in results for multiples ([#42](https://github.com/pkgjs/parseargs/issues/42)) ([c357584](https://github.com/pkgjs/parseargs/commit/c357584847912506319ed34a0840080116f4fd65)) + +## 0.1.0 (2022-01-22) + + +### Features + +* expand scenarios covered by default arguments for environments ([#20](https://github.com/pkgjs/parseargs/issues/20)) ([582ada7](https://github.com/pkgjs/parseargs/commit/582ada7be0eca3a73d6e0bd016e7ace43449fa4c)) +* update readme and include contributing guidelines ([8edd6fc](https://github.com/pkgjs/parseargs/commit/8edd6fc863cd705f6fac732724159ebe8065a2b0)) + + +### Bug Fixes + +* do not strip excess leading dashes on long option names ([#21](https://github.com/pkgjs/parseargs/issues/21)) ([f848590](https://github.com/pkgjs/parseargs/commit/f848590ebf3249ed5979ff47e003fa6e1a8ec5c0)) +* name & readme ([3f057c1](https://github.com/pkgjs/parseargs/commit/3f057c1b158a1bdbe878c64b57460c58e56e465f)) +* package.json values ([9bac300](https://github.com/pkgjs/parseargs/commit/9bac300e00cd76c77076bf9e75e44f8929512da9)) +* update readme name ([957d8d9](https://github.com/pkgjs/parseargs/commit/957d8d96e1dcb48297c0a14345d44c0123b2883e)) + + +### Build System + +* first release as minor ([421c6e2](https://github.com/pkgjs/parseargs/commit/421c6e2569a8668ad14fac5a5af5be60479a7571)) diff --git a/node_modules/@pkgjs/parseargs/LICENSE b/node_modules/@pkgjs/parseargs/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/node_modules/@pkgjs/parseargs/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/@pkgjs/parseargs/README.md b/node_modules/@pkgjs/parseargs/README.md new file mode 100644 index 0000000000..0a041927e8 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/README.md @@ -0,0 +1,413 @@ + +# parseArgs + +[![Coverage][coverage-image]][coverage-url] + +Polyfill of `util.parseArgs()` + +## `util.parseArgs([config])` + + + +> Stability: 1 - Experimental + +* `config` {Object} Used to provide arguments for parsing and to configure + the parser. `config` supports the following properties: + * `args` {string\[]} array of argument strings. **Default:** `process.argv` + with `execPath` and `filename` removed. + * `options` {Object} Used to describe arguments known to the parser. + Keys of `options` are the long names of options and values are an + {Object} accepting the following properties: + * `type` {string} Type of argument, which must be either `boolean` or `string`. + * `multiple` {boolean} Whether this option can be provided multiple + times. If `true`, all values will be collected in an array. If + `false`, values for the option are last-wins. **Default:** `false`. + * `short` {string} A single character alias for the option. + * `default` {string | boolean | string\[] | boolean\[]} The default option + value when it is not set by args. It must be of the same type as the + the `type` property. When `multiple` is `true`, it must be an array. + * `strict` {boolean} Should an error be thrown when unknown arguments + are encountered, or when arguments are passed that do not match the + `type` configured in `options`. + **Default:** `true`. + * `allowPositionals` {boolean} Whether this command accepts positional + arguments. + **Default:** `false` if `strict` is `true`, otherwise `true`. + * `tokens` {boolean} Return the parsed tokens. This is useful for extending + the built-in behavior, from adding additional checks through to reprocessing + the tokens in different ways. + **Default:** `false`. + +* Returns: {Object} The parsed command line arguments: + * `values` {Object} A mapping of parsed option names with their {string} + or {boolean} values. + * `positionals` {string\[]} Positional arguments. + * `tokens` {Object\[] | undefined} See [parseArgs tokens](#parseargs-tokens) + section. Only returned if `config` includes `tokens: true`. + +Provides a higher level API for command-line argument parsing than interacting +with `process.argv` directly. Takes a specification for the expected arguments +and returns a structured object with the parsed options and positionals. + +```mjs +import { parseArgs } from 'node:util'; +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); +// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] +``` + +```cjs +const { parseArgs } = require('node:util'); +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); +// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] +``` + +`util.parseArgs` is experimental and behavior may change. Join the +conversation in [pkgjs/parseargs][] to contribute to the design. + +### `parseArgs` `tokens` + +Detailed parse information is available for adding custom behaviours by +specifying `tokens: true` in the configuration. +The returned tokens have properties describing: + +* all tokens + * `kind` {string} One of 'option', 'positional', or 'option-terminator'. + * `index` {number} Index of element in `args` containing token. So the + source argument for a token is `args[token.index]`. +* option tokens + * `name` {string} Long name of option. + * `rawName` {string} How option used in args, like `-f` of `--foo`. + * `value` {string | undefined} Option value specified in args. + Undefined for boolean options. + * `inlineValue` {boolean | undefined} Whether option value specified inline, + like `--foo=bar`. +* positional tokens + * `value` {string} The value of the positional argument in args (i.e. `args[index]`). +* option-terminator token + +The returned tokens are in the order encountered in the input args. Options +that appear more than once in args produce a token for each use. Short option +groups like `-xy` expand to a token for each option. So `-xxx` produces +three tokens. + +For example to use the returned tokens to add support for a negated option +like `--no-color`, the tokens can be reprocessed to change the value stored +for the negated option. + +```mjs +import { parseArgs } from 'node:util'; + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); +``` + +```cjs +const { parseArgs } = require('node:util'); + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); +``` + +Example usage showing negated options, and when an option is used +multiple ways then last one wins. + +```console +$ node negate.js +{ logfile: 'default.log', color: undefined } +$ node negate.js --no-logfile --no-color +{ logfile: false, color: false } +$ node negate.js --logfile=test.log --color +{ logfile: 'test.log', color: true } +$ node negate.js --no-logfile --logfile=test.log --color --no-color +{ logfile: 'test.log', color: false } +``` + +----- + + +## Table of Contents +- [`util.parseArgs([config])`](#utilparseargsconfig) +- [Scope](#scope) +- [Version Matchups](#version-matchups) +- [🚀 Getting Started](#-getting-started) +- [🙌 Contributing](#-contributing) +- [💡 `process.mainArgs` Proposal](#-processmainargs-proposal) + - [Implementation:](#implementation) +- [📃 Examples](#-examples) +- [F.A.Qs](#faqs) +- [Links & Resources](#links--resources) + +----- + +## Scope + +It is already possible to build great arg parsing modules on top of what Node.js provides; the prickly API is abstracted away by these modules. Thus, process.parseArgs() is not necessarily intended for library authors; it is intended for developers of simple CLI tools, ad-hoc scripts, deployed Node.js applications, and learning materials. + +It is exceedingly difficult to provide an API which would both be friendly to these Node.js users while being extensible enough for libraries to build upon. We chose to prioritize these use cases because these are currently not well-served by Node.js' API. + +---- + +## Version Matchups + +| Node.js | @pkgjs/parseArgs | +| -- | -- | +| [v18.3.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [v0.9.1](https://github.com/pkgjs/parseargs/tree/v0.9.1#utilparseargsconfig) | +| [v16.17.0](https://nodejs.org/dist/latest-v16.x/docs/api/util.html#utilparseargsconfig), [v18.7.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [0.10.0](https://github.com/pkgjs/parseargs/tree/v0.10.0#utilparseargsconfig) | + +---- + +## 🚀 Getting Started + +1. **Install dependencies.** + + ```bash + npm install + ``` + +2. **Open the index.js file and start editing!** + +3. **Test your code by calling parseArgs through our test file** + + ```bash + npm test + ``` + +---- + +## 🙌 Contributing + +Any person who wants to contribute to the initiative is welcome! Please first read the [Contributing Guide](CONTRIBUTING.md) + +Additionally, reading the [`Examples w/ Output`](#-examples-w-output) section of this document will be the best way to familiarize yourself with the target expected behavior for parseArgs() once it is fully implemented. + +This package was implemented using [tape](https://www.npmjs.com/package/tape) as its test harness. + +---- + +## 💡 `process.mainArgs` Proposal + +> Note: This can be moved forward independently of the `util.parseArgs()` proposal/work. + +### Implementation: + +```javascript +process.mainArgs = process.argv.slice(process._exec ? 1 : 2) +``` + +---- + +## 📃 Examples + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// specify the options that may be used +const options = { + foo: { type: 'string'}, + bar: { type: 'boolean' }, +}; +const args = ['--foo=a', '--bar']; +const { values, positionals } = parseArgs({ args, options }); +// values = { foo: 'a', bar: true } +// positionals = [] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// type:string & multiple +const options = { + foo: { + type: 'string', + multiple: true, + }, +}; +const args = ['--foo=a', '--foo', 'b']; +const { values, positionals } = parseArgs({ args, options }); +// values = { foo: [ 'a', 'b' ] } +// positionals = [] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// shorts +const options = { + foo: { + short: 'f', + type: 'boolean' + }, +}; +const args = ['-f', 'b']; +const { values, positionals } = parseArgs({ args, options, allowPositionals: true }); +// values = { foo: true } +// positionals = ['b'] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// unconfigured +const options = {}; +const args = ['-f', '--foo=a', '--bar', 'b']; +const { values, positionals } = parseArgs({ strict: false, args, options, allowPositionals: true }); +// values = { f: true, foo: 'a', bar: true } +// positionals = ['b'] +``` + +---- + +## F.A.Qs + +- Is `cmd --foo=bar baz` the same as `cmd baz --foo=bar`? + - yes +- Does the parser execute a function? + - no +- Does the parser execute one of several functions, depending on input? + - no +- Can subcommands take options that are distinct from the main command? + - no +- Does it output generated help when no options match? + - no +- Does it generated short usage? Like: `usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]` + - no (no usage/help at all) +- Does the user provide the long usage text? For each option? For the whole command? + - no +- Do subcommands (if implemented) have their own usage output? + - no +- Does usage print if the user runs `cmd --help`? + - no +- Does it set `process.exitCode`? + - no +- Does usage print to stderr or stdout? + - N/A +- Does it check types? (Say, specify that an option is a boolean, number, etc.) + - no +- Can an option have more than one type? (string or false, for example) + - no +- Can the user define a type? (Say, `type: path` to call `path.resolve()` on the argument.) + - no +- Does a `--foo=0o22` mean 0, 22, 18, or "0o22"? + - `"0o22"` +- Does it coerce types? + - no +- Does `--no-foo` coerce to `--foo=false`? For all options? Only boolean options? + - no, it sets `{values:{'no-foo': true}}` +- Is `--foo` the same as `--foo=true`? Only for known booleans? Only at the end? + - no, they are not the same. There is no special handling of `true` as a value so it is just another string. +- Does it read environment variables? Ie, is `FOO=1 cmd` the same as `cmd --foo=1`? + - no +- Do unknown arguments raise an error? Are they parsed? Are they treated as positional arguments? + - no, they are parsed, not treated as positionals +- Does `--` signal the end of options? + - yes +- Is `--` included as a positional? + - no +- Is `program -- foo` the same as `program foo`? + - yes, both store `{positionals:['foo']}` +- Does the API specify whether a `--` was present/relevant? + - no +- Is `-bar` the same as `--bar`? + - no, `-bar` is a short option or options, with expansion logic that follows the + [Utility Syntax Guidelines in POSIX.1-2017](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). `-bar` expands to `-b`, `-a`, `-r`. +- Is `---foo` the same as `--foo`? + - no + - the first is a long option named `'-foo'` + - the second is a long option named `'foo'` +- Is `-` a positional? ie, `bash some-test.sh | tap -` + - yes + +## Links & Resources + +* [Initial Tooling Issue](https://github.com/nodejs/tooling/issues/19) +* [Initial Proposal](https://github.com/nodejs/node/pull/35015) +* [parseArgs Proposal](https://github.com/nodejs/node/pull/42675) + +[coverage-image]: https://img.shields.io/nycrc/pkgjs/parseargs +[coverage-url]: https://github.com/pkgjs/parseargs/blob/main/.nycrc +[pkgjs/parseargs]: https://github.com/pkgjs/parseargs diff --git a/node_modules/@pkgjs/parseargs/examples/is-default-value.js b/node_modules/@pkgjs/parseargs/examples/is-default-value.js new file mode 100644 index 0000000000..0a67972b71 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/is-default-value.js @@ -0,0 +1,25 @@ +'use strict'; + +// This example shows how to understand if a default value is used or not. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + file: { short: 'f', type: 'string', default: 'FOO' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const isFileDefault = !tokens.some((token) => token.kind === 'option' && + token.name === 'file' +); + +console.log(values); +console.log(`Is the file option [${values.file}] the default value? ${isFileDefault}`); + +// Try the following: +// node is-default-value.js +// node is-default-value.js -f FILE +// node is-default-value.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js new file mode 100644 index 0000000000..943e643ee9 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js @@ -0,0 +1,35 @@ +'use strict'; + +// This is an example of using tokens to add a custom behaviour. +// +// Require the use of `=` for long options and values by blocking +// the use of space separated values. +// So allow `--foo=bar`, and not allow `--foo bar`. +// +// Note: this is not a common behaviour, most CLIs allow both forms. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + file: { short: 'f', type: 'string' }, + log: { type: 'string' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const badToken = tokens.find((token) => token.kind === 'option' && + token.value != null && + token.rawName.startsWith('--') && + !token.inlineValue +); +if (badToken) { + throw new Error(`Option value for '${badToken.rawName}' must be inline, like '${badToken.rawName}=VALUE'`); +} + +console.log(values); + +// Try the following: +// node limit-long-syntax.js -f FILE --log=LOG +// node limit-long-syntax.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/negate.js b/node_modules/@pkgjs/parseargs/examples/negate.js new file mode 100644 index 0000000000..b6634690a4 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/negate.js @@ -0,0 +1,43 @@ +'use strict'; + +// This example is used in the documentation. + +// How might I add my own support for --no-foo? + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); + +// Try the following: +// node negate.js +// node negate.js --no-logfile --no-color +// negate.js --logfile=test.log --color +// node negate.js --no-logfile --logfile=test.log --color --no-color diff --git a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js new file mode 100644 index 0000000000..0c324688af --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js @@ -0,0 +1,31 @@ +'use strict'; + +// This is an example of using tokens to add a custom behaviour. +// +// Throw an error if an option is used more than once. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + ding: { type: 'boolean', short: 'd' }, + beep: { type: 'boolean', short: 'b' } +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +const seenBefore = new Set(); +tokens.forEach((token) => { + if (token.kind !== 'option') return; + if (seenBefore.has(token.name)) { + throw new Error(`option '${token.name}' used multiple times`); + } + seenBefore.add(token.name); +}); + +console.log(values); + +// Try the following: +// node no-repeated-options --ding --beep +// node no-repeated-options --beep -b +// node no-repeated-options -ddd diff --git a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs new file mode 100644 index 0000000000..8ab7367b8b --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs @@ -0,0 +1,41 @@ +// This is an example of using tokens to add a custom behaviour. +// +// This adds a option order check so that --some-unstable-option +// may only be used after --enable-experimental-options +// +// Note: this is not a common behaviour, the order of different options +// does not usually matter. + +import { parseArgs } from '../index.js'; + +function findTokenIndex(tokens, target) { + return tokens.findIndex((token) => token.kind === 'option' && + token.name === target + ); +} + +const experimentalName = 'enable-experimental-options'; +const unstableName = 'some-unstable-option'; + +const options = { + [experimentalName]: { type: 'boolean' }, + [unstableName]: { type: 'boolean' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const experimentalIndex = findTokenIndex(tokens, experimentalName); +const unstableIndex = findTokenIndex(tokens, unstableName); +if (unstableIndex !== -1 && + ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) { + throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`); +} + +console.log(values); + +/* eslint-disable max-len */ +// Try the following: +// node ordered-options.mjs +// node ordered-options.mjs --some-unstable-option +// node ordered-options.mjs --some-unstable-option --enable-experimental-options +// node ordered-options.mjs --enable-experimental-options --some-unstable-option diff --git a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js new file mode 100644 index 0000000000..eff04c2a60 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js @@ -0,0 +1,26 @@ +'use strict'; + +// This example is used in the documentation. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); + +// Try the following: +// node simple-hard-coded.js diff --git a/node_modules/@pkgjs/parseargs/index.js b/node_modules/@pkgjs/parseargs/index.js new file mode 100644 index 0000000000..b1004c7b72 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/index.js @@ -0,0 +1,396 @@ +'use strict'; + +const { + ArrayPrototypeForEach, + ArrayPrototypeIncludes, + ArrayPrototypeMap, + ArrayPrototypePush, + ArrayPrototypePushApply, + ArrayPrototypeShift, + ArrayPrototypeSlice, + ArrayPrototypeUnshiftApply, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIndexOf, + StringPrototypeSlice, + StringPrototypeStartsWith, +} = require('./internal/primordials'); + +const { + validateArray, + validateBoolean, + validateBooleanArray, + validateObject, + validateString, + validateStringArray, + validateUnion, +} = require('./internal/validators'); + +const { + kEmptyObject, +} = require('./internal/util'); + +const { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +} = require('./utils'); + +const { + codes: { + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + }, +} = require('./internal/errors'); + +function getMainArgs() { + // Work out where to slice process.argv for user supplied arguments. + + // Check node options for scenarios where user CLI args follow executable. + const execArgv = process.execArgv; + if (ArrayPrototypeIncludes(execArgv, '-e') || + ArrayPrototypeIncludes(execArgv, '--eval') || + ArrayPrototypeIncludes(execArgv, '-p') || + ArrayPrototypeIncludes(execArgv, '--print')) { + return ArrayPrototypeSlice(process.argv, 1); + } + + // Normally first two arguments are executable and script, then CLI arguments + return ArrayPrototypeSlice(process.argv, 2); +} + +/** + * In strict mode, throw for possible usage errors like --foo --bar + * + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionLikeValue(token) { + if (!token.inlineValue && isOptionLikeValue(token.value)) { + // Only show short example if user used short option. + const example = StringPrototypeStartsWith(token.rawName, '--') ? + `'${token.rawName}=-XYZ'` : + `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`; + const errorMessage = `Option '${token.rawName}' argument is ambiguous. +Did you forget to specify the option argument for '${token.rawName}'? +To specify an option argument starting with a dash use ${example}.`; + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage); + } +} + +/** + * In strict mode, throw for usage errors. + * + * @param {object} config - from config passed to parseArgs + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionUsage(config, token) { + if (!ObjectHasOwn(config.options, token.name)) { + throw new ERR_PARSE_ARGS_UNKNOWN_OPTION( + token.rawName, config.allowPositionals); + } + + const short = optionsGetOwn(config.options, token.name, 'short'); + const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`; + const type = optionsGetOwn(config.options, token.name, 'type'); + if (type === 'string' && typeof token.value !== 'string') { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} ' argument missing`); + } + // (Idiomatic test for undefined||null, expecting undefined.) + if (type === 'boolean' && token.value != null) { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`); + } +} + + +/** + * Store the option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string|undefined} optionValue - value from user args + * @param {object} options - option configs, from parseArgs({ options }) + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeOption(longOption, optionValue, options, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + // We store based on the option value rather than option type, + // preserving the users intent for author to deal with. + const newValue = optionValue ?? true; + if (optionsGetOwn(options, longOption, 'multiple')) { + // Always store value in array, including for boolean. + // values[longOption] starts out not present, + // first value is added as new array [newValue], + // subsequent values are pushed to existing array. + // (note: values has null prototype, so simpler usage) + if (values[longOption]) { + ArrayPrototypePush(values[longOption], newValue); + } else { + values[longOption] = [newValue]; + } + } else { + values[longOption] = newValue; + } +} + +/** + * Store the default option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string + * | boolean + * | string[] + * | boolean[]} optionValue - default value from option config + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeDefaultOption(longOption, optionValue, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + values[longOption] = optionValue; +} + +/** + * Process args and turn into identified tokens: + * - option (along with value, if any) + * - positional + * - option-terminator + * + * @param {string[]} args - from parseArgs({ args }) or mainArgs + * @param {object} options - option configs, from parseArgs({ options }) + */ +function argsToTokens(args, options) { + const tokens = []; + let index = -1; + let groupCount = 0; + + const remainingArgs = ArrayPrototypeSlice(args); + while (remainingArgs.length > 0) { + const arg = ArrayPrototypeShift(remainingArgs); + const nextArg = remainingArgs[0]; + if (groupCount > 0) + groupCount--; + else + index++; + + // Check if `arg` is an options terminator. + // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html + if (arg === '--') { + // Everything after a bare '--' is considered a positional argument. + ArrayPrototypePush(tokens, { kind: 'option-terminator', index }); + ArrayPrototypePushApply( + tokens, ArrayPrototypeMap(remainingArgs, (arg) => { + return { kind: 'positional', index: ++index, value: arg }; + }) + ); + break; // Finished processing args, leave while loop. + } + + if (isLoneShortOption(arg)) { + // e.g. '-f' + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '-f', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isShortOptionGroup(arg, options)) { + // Expand -fXzy to -f -X -z -y + const expanded = []; + for (let index = 1; index < arg.length; index++) { + const shortOption = StringPrototypeCharAt(arg, index); + const longOption = findLongOptionForShort(shortOption, options); + if (optionsGetOwn(options, longOption, 'type') !== 'string' || + index === arg.length - 1) { + // Boolean option, or last short in group. Well formed. + ArrayPrototypePush(expanded, `-${shortOption}`); + } else { + // String option in middle. Yuck. + // Expand -abfFILE to -a -b -fFILE + ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`); + break; // finished short group + } + } + ArrayPrototypeUnshiftApply(remainingArgs, expanded); + groupCount = expanded.length; + continue; + } + + if (isShortOptionAndValue(arg, options)) { + // e.g. -fFILE + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + const value = StringPrototypeSlice(arg, 2); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `-${shortOption}`, + index, value, inlineValue: true }); + continue; + } + + if (isLoneLongOption(arg)) { + // e.g. '--foo' + const longOption = StringPrototypeSlice(arg, 2); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '--foo', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isLongOptionAndValue(arg)) { + // e.g. --foo=bar + const equalIndex = StringPrototypeIndexOf(arg, '='); + const longOption = StringPrototypeSlice(arg, 2, equalIndex); + const value = StringPrototypeSlice(arg, equalIndex + 1); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `--${longOption}`, + index, value, inlineValue: true }); + continue; + } + + ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg }); + } + + return tokens; +} + +const parseArgs = (config = kEmptyObject) => { + const args = objectGetOwn(config, 'args') ?? getMainArgs(); + const strict = objectGetOwn(config, 'strict') ?? true; + const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict; + const returnTokens = objectGetOwn(config, 'tokens') ?? false; + const options = objectGetOwn(config, 'options') ?? { __proto__: null }; + // Bundle these up for passing to strict-mode checks. + const parseConfig = { args, strict, options, allowPositionals }; + + // Validate input configuration. + validateArray(args, 'args'); + validateBoolean(strict, 'strict'); + validateBoolean(allowPositionals, 'allowPositionals'); + validateBoolean(returnTokens, 'tokens'); + validateObject(options, 'options'); + ArrayPrototypeForEach( + ObjectEntries(options), + ({ 0: longOption, 1: optionConfig }) => { + validateObject(optionConfig, `options.${longOption}`); + + // type is required + const optionType = objectGetOwn(optionConfig, 'type'); + validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']); + + if (ObjectHasOwn(optionConfig, 'short')) { + const shortOption = optionConfig.short; + validateString(shortOption, `options.${longOption}.short`); + if (shortOption.length !== 1) { + throw new ERR_INVALID_ARG_VALUE( + `options.${longOption}.short`, + shortOption, + 'must be a single character' + ); + } + } + + const multipleOption = objectGetOwn(optionConfig, 'multiple'); + if (ObjectHasOwn(optionConfig, 'multiple')) { + validateBoolean(multipleOption, `options.${longOption}.multiple`); + } + + const defaultValue = objectGetOwn(optionConfig, 'default'); + if (defaultValue !== undefined) { + let validator; + switch (optionType) { + case 'string': + validator = multipleOption ? validateStringArray : validateString; + break; + + case 'boolean': + validator = multipleOption ? validateBooleanArray : validateBoolean; + break; + } + validator(defaultValue, `options.${longOption}.default`); + } + } + ); + + // Phase 1: identify tokens + const tokens = argsToTokens(args, options); + + // Phase 2: process tokens into parsed option values and positionals + const result = { + values: { __proto__: null }, + positionals: [], + }; + if (returnTokens) { + result.tokens = tokens; + } + ArrayPrototypeForEach(tokens, (token) => { + if (token.kind === 'option') { + if (strict) { + checkOptionUsage(parseConfig, token); + checkOptionLikeValue(token); + } + storeOption(token.name, token.value, options, result.values); + } else if (token.kind === 'positional') { + if (!allowPositionals) { + throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value); + } + ArrayPrototypePush(result.positionals, token.value); + } + }); + + // Phase 3: fill in default values for missing args + ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption, + 1: optionConfig }) => { + const mustSetDefault = useDefaultValueOption(longOption, + optionConfig, + result.values); + if (mustSetDefault) { + storeDefaultOption(longOption, + objectGetOwn(optionConfig, 'default'), + result.values); + } + }); + + + return result; +}; + +module.exports = { + parseArgs, +}; diff --git a/node_modules/@pkgjs/parseargs/internal/errors.js b/node_modules/@pkgjs/parseargs/internal/errors.js new file mode 100644 index 0000000000..e1b237b5b1 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/errors.js @@ -0,0 +1,47 @@ +'use strict'; + +class ERR_INVALID_ARG_TYPE extends TypeError { + constructor(name, expected, actual) { + super(`${name} must be ${expected} got ${actual}`); + this.code = 'ERR_INVALID_ARG_TYPE'; + } +} + +class ERR_INVALID_ARG_VALUE extends TypeError { + constructor(arg1, arg2, expected) { + super(`The property ${arg1} ${expected}. Received '${arg2}'`); + this.code = 'ERR_INVALID_ARG_VALUE'; + } +} + +class ERR_PARSE_ARGS_INVALID_OPTION_VALUE extends Error { + constructor(message) { + super(message); + this.code = 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE'; + } +} + +class ERR_PARSE_ARGS_UNKNOWN_OPTION extends Error { + constructor(option, allowPositionals) { + const suggestDashDash = allowPositionals ? `. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- ${JSON.stringify(option)}` : ''; + super(`Unknown option '${option}'${suggestDashDash}`); + this.code = 'ERR_PARSE_ARGS_UNKNOWN_OPTION'; + } +} + +class ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL extends Error { + constructor(positional) { + super(`Unexpected argument '${positional}'. This command does not take positional arguments`); + this.code = 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL'; + } +} + +module.exports = { + codes: { + ERR_INVALID_ARG_TYPE, + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + } +}; diff --git a/node_modules/@pkgjs/parseargs/internal/primordials.js b/node_modules/@pkgjs/parseargs/internal/primordials.js new file mode 100644 index 0000000000..63e23ab117 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/primordials.js @@ -0,0 +1,393 @@ +/* +This file is copied from https://github.com/nodejs/node/blob/v14.19.3/lib/internal/per_context/primordials.js +under the following license: + +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +*/ + +'use strict'; + +/* eslint-disable node-core/prefer-primordials */ + +// This file subclasses and stores the JS builtins that come from the VM +// so that Node.js's builtin modules do not need to later look these up from +// the global proxy, which can be mutated by users. + +// Use of primordials have sometimes a dramatic impact on performance, please +// benchmark all changes made in performance-sensitive areas of the codebase. +// See: https://github.com/nodejs/node/pull/38248 + +const primordials = {}; + +const { + defineProperty: ReflectDefineProperty, + getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor, + ownKeys: ReflectOwnKeys, +} = Reflect; + +// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`. +// It is using `bind.bind(call)` to avoid using `Function.prototype.bind` +// and `Function.prototype.call` after it may have been mutated by users. +const { apply, bind, call } = Function.prototype; +const uncurryThis = bind.bind(call); +primordials.uncurryThis = uncurryThis; + +// `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`. +// It is using `bind.bind(apply)` to avoid using `Function.prototype.bind` +// and `Function.prototype.apply` after it may have been mutated by users. +const applyBind = bind.bind(apply); +primordials.applyBind = applyBind; + +// Methods that accept a variable number of arguments, and thus it's useful to +// also create `${prefix}${key}Apply`, which uses `Function.prototype.apply`, +// instead of `Function.prototype.call`, and thus doesn't require iterator +// destructuring. +const varargsMethods = [ + // 'ArrayPrototypeConcat' is omitted, because it performs the spread + // on its own for arrays and array-likes with a truthy + // @@isConcatSpreadable symbol property. + 'ArrayOf', + 'ArrayPrototypePush', + 'ArrayPrototypeUnshift', + // 'FunctionPrototypeCall' is omitted, since there's 'ReflectApply' + // and 'FunctionPrototypeApply'. + 'MathHypot', + 'MathMax', + 'MathMin', + 'StringPrototypeConcat', + 'TypedArrayOf', +]; + +function getNewKey(key) { + return typeof key === 'symbol' ? + `Symbol${key.description[7].toUpperCase()}${key.description.slice(8)}` : + `${key[0].toUpperCase()}${key.slice(1)}`; +} + +function copyAccessor(dest, prefix, key, { enumerable, get, set }) { + ReflectDefineProperty(dest, `${prefix}Get${key}`, { + value: uncurryThis(get), + enumerable + }); + if (set !== undefined) { + ReflectDefineProperty(dest, `${prefix}Set${key}`, { + value: uncurryThis(set), + enumerable + }); + } +} + +function copyPropsRenamed(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + // `src` is bound as the `this` so that the static `this` points + // to the object it was defined on, + // e.g.: `ArrayOfApply` gets a `this` of `Array`: + value: applyBind(desc.value, src), + }); + } + } + } +} + +function copyPropsRenamedBound(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const { value } = desc; + if (typeof value === 'function') { + desc.value = value.bind(src); + } + + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + value: applyBind(value, src), + }); + } + } + } +} + +function copyPrototype(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const { value } = desc; + if (typeof value === 'function') { + desc.value = uncurryThis(value); + } + + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + value: applyBind(value), + }); + } + } + } +} + +// Create copies of configurable value properties of the global object +[ + 'Proxy', + 'globalThis', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + primordials[name] = globalThis[name]; +}); + +// Create copies of URI handling functions +[ + decodeURI, + decodeURIComponent, + encodeURI, + encodeURIComponent, +].forEach((fn) => { + primordials[fn.name] = fn; +}); + +// Create copies of the namespace objects +[ + 'JSON', + 'Math', + 'Proxy', + 'Reflect', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + copyPropsRenamed(global[name], primordials, name); +}); + +// Create copies of intrinsic objects +[ + 'Array', + 'ArrayBuffer', + 'BigInt', + 'BigInt64Array', + 'BigUint64Array', + 'Boolean', + 'DataView', + 'Date', + 'Error', + 'EvalError', + 'Float32Array', + 'Float64Array', + 'Function', + 'Int16Array', + 'Int32Array', + 'Int8Array', + 'Map', + 'Number', + 'Object', + 'RangeError', + 'ReferenceError', + 'RegExp', + 'Set', + 'String', + 'Symbol', + 'SyntaxError', + 'TypeError', + 'URIError', + 'Uint16Array', + 'Uint32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'WeakMap', + 'WeakSet', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + const original = global[name]; + primordials[name] = original; + copyPropsRenamed(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +// Create copies of intrinsic objects that require a valid `this` to call +// static methods. +// Refs: https://www.ecma-international.org/ecma-262/#sec-promise.all +[ + 'Promise', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + const original = global[name]; + primordials[name] = original; + copyPropsRenamedBound(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +// Create copies of abstract intrinsic objects that are not directly exposed +// on the global object. +// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object +[ + { name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) }, + { name: 'ArrayIterator', original: { + prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()), + } }, + { name: 'StringIterator', original: { + prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()), + } }, +].forEach(({ name, original }) => { + primordials[name] = original; + // The static %TypedArray% methods require a valid `this`, but can't be bound, + // as they need a subclass constructor as the receiver: + copyPrototype(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +/* eslint-enable node-core/prefer-primordials */ + +const { + ArrayPrototypeForEach, + FunctionPrototypeCall, + Map, + ObjectFreeze, + ObjectSetPrototypeOf, + Set, + SymbolIterator, + WeakMap, + WeakSet, +} = primordials; + +// Because these functions are used by `makeSafe`, which is exposed +// on the `primordials` object, it's important to use const references +// to the primordials that they use: +const createSafeIterator = (factory, next) => { + class SafeIterator { + constructor(iterable) { + this._iterator = factory(iterable); + } + next() { + return next(this._iterator); + } + [SymbolIterator]() { + return this; + } + } + ObjectSetPrototypeOf(SafeIterator.prototype, null); + ObjectFreeze(SafeIterator.prototype); + ObjectFreeze(SafeIterator); + return SafeIterator; +}; + +primordials.SafeArrayIterator = createSafeIterator( + primordials.ArrayPrototypeSymbolIterator, + primordials.ArrayIteratorPrototypeNext +); +primordials.SafeStringIterator = createSafeIterator( + primordials.StringPrototypeSymbolIterator, + primordials.StringIteratorPrototypeNext +); + +const copyProps = (src, dest) => { + ArrayPrototypeForEach(ReflectOwnKeys(src), (key) => { + if (!ReflectGetOwnPropertyDescriptor(dest, key)) { + ReflectDefineProperty( + dest, + key, + ReflectGetOwnPropertyDescriptor(src, key)); + } + }); +}; + +const makeSafe = (unsafe, safe) => { + if (SymbolIterator in unsafe.prototype) { + const dummy = new unsafe(); + let next; // We can reuse the same `next` method. + + ArrayPrototypeForEach(ReflectOwnKeys(unsafe.prototype), (key) => { + if (!ReflectGetOwnPropertyDescriptor(safe.prototype, key)) { + const desc = ReflectGetOwnPropertyDescriptor(unsafe.prototype, key); + if ( + typeof desc.value === 'function' && + desc.value.length === 0 && + SymbolIterator in (FunctionPrototypeCall(desc.value, dummy) ?? {}) + ) { + const createIterator = uncurryThis(desc.value); + next = next ?? uncurryThis(createIterator(dummy).next); + const SafeIterator = createSafeIterator(createIterator, next); + desc.value = function() { + return new SafeIterator(this); + }; + } + ReflectDefineProperty(safe.prototype, key, desc); + } + }); + } else { + copyProps(unsafe.prototype, safe.prototype); + } + copyProps(unsafe, safe); + + ObjectSetPrototypeOf(safe.prototype, null); + ObjectFreeze(safe.prototype); + ObjectFreeze(safe); + return safe; +}; +primordials.makeSafe = makeSafe; + +// Subclass the constructors because we need to use their prototype +// methods later. +// Defining the `constructor` is necessary here to avoid the default +// constructor which uses the user-mutable `%ArrayIteratorPrototype%.next`. +primordials.SafeMap = makeSafe( + Map, + class SafeMap extends Map { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeWeakMap = makeSafe( + WeakMap, + class SafeWeakMap extends WeakMap { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeSet = makeSafe( + Set, + class SafeSet extends Set { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeWeakSet = makeSafe( + WeakSet, + class SafeWeakSet extends WeakSet { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); + +ObjectSetPrototypeOf(primordials, null); +ObjectFreeze(primordials); + +module.exports = primordials; diff --git a/node_modules/@pkgjs/parseargs/internal/util.js b/node_modules/@pkgjs/parseargs/internal/util.js new file mode 100644 index 0000000000..b9b8fe5b8d --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/util.js @@ -0,0 +1,14 @@ +'use strict'; + +// This is a placeholder for util.js in node.js land. + +const { + ObjectCreate, + ObjectFreeze, +} = require('./primordials'); + +const kEmptyObject = ObjectFreeze(ObjectCreate(null)); + +module.exports = { + kEmptyObject, +}; diff --git a/node_modules/@pkgjs/parseargs/internal/validators.js b/node_modules/@pkgjs/parseargs/internal/validators.js new file mode 100644 index 0000000000..b5ac4fb501 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/validators.js @@ -0,0 +1,89 @@ +'use strict'; + +// This file is a proxy of the original file located at: +// https://github.com/nodejs/node/blob/main/lib/internal/validators.js +// Every addition or modification to this file must be evaluated +// during the PR review. + +const { + ArrayIsArray, + ArrayPrototypeIncludes, + ArrayPrototypeJoin, +} = require('./primordials'); + +const { + codes: { + ERR_INVALID_ARG_TYPE + } +} = require('./errors'); + +function validateString(value, name) { + if (typeof value !== 'string') { + throw new ERR_INVALID_ARG_TYPE(name, 'String', value); + } +} + +function validateUnion(value, name, union) { + if (!ArrayPrototypeIncludes(union, value)) { + throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value); + } +} + +function validateBoolean(value, name) { + if (typeof value !== 'boolean') { + throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value); + } +} + +function validateArray(value, name) { + if (!ArrayIsArray(value)) { + throw new ERR_INVALID_ARG_TYPE(name, 'Array', value); + } +} + +function validateStringArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateString(value[i], `${name}[${i}]`); + } +} + +function validateBooleanArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateBoolean(value[i], `${name}[${i}]`); + } +} + +/** + * @param {unknown} value + * @param {string} name + * @param {{ + * allowArray?: boolean, + * allowFunction?: boolean, + * nullable?: boolean + * }} [options] + */ +function validateObject(value, name, options) { + const useDefaultOptions = options == null; + const allowArray = useDefaultOptions ? false : options.allowArray; + const allowFunction = useDefaultOptions ? false : options.allowFunction; + const nullable = useDefaultOptions ? false : options.nullable; + if ((!nullable && value === null) || + (!allowArray && ArrayIsArray(value)) || + (typeof value !== 'object' && ( + !allowFunction || typeof value !== 'function' + ))) { + throw new ERR_INVALID_ARG_TYPE(name, 'Object', value); + } +} + +module.exports = { + validateArray, + validateObject, + validateString, + validateStringArray, + validateUnion, + validateBoolean, + validateBooleanArray, +}; diff --git a/node_modules/@pkgjs/parseargs/package.json b/node_modules/@pkgjs/parseargs/package.json new file mode 100644 index 0000000000..0bcc05c0d4 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/package.json @@ -0,0 +1,36 @@ +{ + "name": "@pkgjs/parseargs", + "version": "0.11.0", + "description": "Polyfill of future proposal for `util.parseArgs()`", + "engines": { + "node": ">=14" + }, + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "scripts": { + "coverage": "c8 --check-coverage tape 'test/*.js'", + "test": "c8 tape 'test/*.js'", + "posttest": "eslint .", + "fix": "npm run posttest -- --fix" + }, + "repository": { + "type": "git", + "url": "git@github.com:pkgjs/parseargs.git" + }, + "keywords": [], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/pkgjs/parseargs/issues" + }, + "homepage": "https://github.com/pkgjs/parseargs#readme", + "devDependencies": { + "c8": "^7.10.0", + "eslint": "^8.2.0", + "eslint-plugin-node-core": "iansu/eslint-plugin-node-core", + "tape": "^5.2.2" + } +} diff --git a/node_modules/@pkgjs/parseargs/utils.js b/node_modules/@pkgjs/parseargs/utils.js new file mode 100644 index 0000000000..d7f420a233 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/utils.js @@ -0,0 +1,198 @@ +'use strict'; + +const { + ArrayPrototypeFind, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIncludes, + StringPrototypeStartsWith, +} = require('./internal/primordials'); + +const { + validateObject, +} = require('./internal/validators'); + +// These are internal utilities to make the parsing logic easier to read, and +// add lots of detail for the curious. They are in a separate file to allow +// unit testing, although that is not essential (this could be rolled into +// main file and just tested implicitly via API). +// +// These routines are for internal use, not for export to client. + +/** + * Return the named property, but only if it is an own property. + */ +function objectGetOwn(obj, prop) { + if (ObjectHasOwn(obj, prop)) + return obj[prop]; +} + +/** + * Return the named options property, but only if it is an own property. + */ +function optionsGetOwn(options, longOption, prop) { + if (ObjectHasOwn(options, longOption)) + return objectGetOwn(options[longOption], prop); +} + +/** + * Determines if the argument may be used as an option value. + * @example + * isOptionValue('V') // returns true + * isOptionValue('-v') // returns true (greedy) + * isOptionValue('--foo') // returns true (greedy) + * isOptionValue(undefined) // returns false + */ +function isOptionValue(value) { + if (value == null) return false; + + // Open Group Utility Conventions are that an option-argument + // is the argument after the option, and may start with a dash. + return true; // greedy! +} + +/** + * Detect whether there is possible confusion and user may have omitted + * the option argument, like `--port --verbose` when `port` of type:string. + * In strict mode we throw errors if value is option-like. + */ +function isOptionLikeValue(value) { + if (value == null) return false; + + return value.length > 1 && StringPrototypeCharAt(value, 0) === '-'; +} + +/** + * Determines if `arg` is just a short option. + * @example '-f' + */ +function isLoneShortOption(arg) { + return arg.length === 2 && + StringPrototypeCharAt(arg, 0) === '-' && + StringPrototypeCharAt(arg, 1) !== '-'; +} + +/** + * Determines if `arg` is a lone long option. + * @example + * isLoneLongOption('a') // returns false + * isLoneLongOption('-a') // returns false + * isLoneLongOption('--foo') // returns true + * isLoneLongOption('--foo=bar') // returns false + */ +function isLoneLongOption(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + !StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a long option and value in the same argument. + * @example + * isLongOptionAndValue('--foo') // returns false + * isLongOptionAndValue('--foo=bar') // returns true + */ +function isLongOptionAndValue(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a short option group. + * + * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). + * One or more options without option-arguments, followed by at most one + * option that takes an option-argument, should be accepted when grouped + * behind one '-' delimiter. + * @example + * isShortOptionGroup('-a', {}) // returns false + * isShortOptionGroup('-ab', {}) // returns true + * // -fb is an option and a value, not a short option group + * isShortOptionGroup('-fb', { + * options: { f: { type: 'string' } } + * }) // returns false + * isShortOptionGroup('-bf', { + * options: { f: { type: 'string' } } + * }) // returns true + * // -bfb is an edge case, return true and caller sorts it out + * isShortOptionGroup('-bfb', { + * options: { f: { type: 'string' } } + * }) // returns true + */ +function isShortOptionGroup(arg, options) { + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const firstShort = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(firstShort, options); + return optionsGetOwn(options, longOption, 'type') !== 'string'; +} + +/** + * Determine if arg is a short string option followed by its value. + * @example + * isShortOptionAndValue('-a', {}); // returns false + * isShortOptionAndValue('-ab', {}); // returns false + * isShortOptionAndValue('-fFILE', { + * options: { foo: { short: 'f', type: 'string' }} + * }) // returns true + */ +function isShortOptionAndValue(arg, options) { + validateObject(options, 'options'); + + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + return optionsGetOwn(options, longOption, 'type') === 'string'; +} + +/** + * Find the long option associated with a short option. Looks for a configured + * `short` and returns the short option itself if a long option is not found. + * @example + * findLongOptionForShort('a', {}) // returns 'a' + * findLongOptionForShort('b', { + * options: { bar: { short: 'b' } } + * }) // returns 'bar' + */ +function findLongOptionForShort(shortOption, options) { + validateObject(options, 'options'); + const longOptionEntry = ArrayPrototypeFind( + ObjectEntries(options), + ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption + ); + return longOptionEntry?.[0] ?? shortOption; +} + +/** + * Check if the given option includes a default value + * and that option has not been set by the input args. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {object} optionConfig - the option configuration properties + * @param {object} values - option values returned in `values` by parseArgs + */ +function useDefaultValueOption(longOption, optionConfig, values) { + return objectGetOwn(optionConfig, 'default') !== undefined && + values[longOption] === undefined; +} + +module.exports = { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +}; diff --git a/node_modules/@types/debug/LICENSE b/node_modules/@types/debug/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/debug/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/debug/README.md b/node_modules/@types/debug/README.md new file mode 100644 index 0000000000..e9563de5c1 --- /dev/null +++ b/node_modules/@types/debug/README.md @@ -0,0 +1,69 @@ +# Installation +> `npm install --save @types/debug` + +# Summary +This package contains type definitions for debug (https://github.com/debug-js/debug). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug/index.d.ts) +````ts +declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; + +export = debug; +export as namespace debug; + +declare namespace debug { + interface Debug { + (namespace: string): Debugger; + coerce: (val: any) => any; + disable: () => string; + enable: (namespaces: string) => void; + enabled: (namespaces: string) => boolean; + formatArgs: (this: Debugger, args: any[]) => void; + log: (...args: any[]) => any; + selectColor: (namespace: string) => string | number; + humanize: typeof import("ms"); + + names: RegExp[]; + skips: RegExp[]; + + formatters: Formatters; + + inspectOpts?: { + hideDate?: boolean | number | null; + colors?: boolean | number | null; + depth?: boolean | number | null; + showHidden?: boolean | number | null; + }; + } + + type IDebug = Debug; + + interface Formatters { + [formatter: string]: (v: any) => string; + } + + type IDebugger = Debugger; + + interface Debugger { + (formatter: any, ...args: any[]): void; + + color: string; + diff: number; + enabled: boolean; + log: (...args: any[]) => any; + namespace: string; + destroy: () => boolean; + extend: (namespace: string, delimiter?: string) => Debugger; + } +} + +```` + +### Additional Details + * Last updated: Thu, 09 Nov 2023 03:06:57 GMT + * Dependencies: [@types/ms](https://npmjs.com/package/@types/ms) + +# Credits +These definitions were written by [Seon-Wook Park](https://github.com/swook), [Gal Talmor](https://github.com/galtalmor), [John McLaughlin](https://github.com/zamb3zi), [Brasten Sager](https://github.com/brasten), [Nicolas Penin](https://github.com/npenin), [Kristian Brünn](https://github.com/kristianmitk), and [Caleb Gregory](https://github.com/calebgregory). diff --git a/node_modules/@types/debug/index.d.ts b/node_modules/@types/debug/index.d.ts new file mode 100644 index 0000000000..3778eb8dbc --- /dev/null +++ b/node_modules/@types/debug/index.d.ts @@ -0,0 +1,50 @@ +declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; + +export = debug; +export as namespace debug; + +declare namespace debug { + interface Debug { + (namespace: string): Debugger; + coerce: (val: any) => any; + disable: () => string; + enable: (namespaces: string) => void; + enabled: (namespaces: string) => boolean; + formatArgs: (this: Debugger, args: any[]) => void; + log: (...args: any[]) => any; + selectColor: (namespace: string) => string | number; + humanize: typeof import("ms"); + + names: RegExp[]; + skips: RegExp[]; + + formatters: Formatters; + + inspectOpts?: { + hideDate?: boolean | number | null; + colors?: boolean | number | null; + depth?: boolean | number | null; + showHidden?: boolean | number | null; + }; + } + + type IDebug = Debug; + + interface Formatters { + [formatter: string]: (v: any) => string; + } + + type IDebugger = Debugger; + + interface Debugger { + (formatter: any, ...args: any[]): void; + + color: string; + diff: number; + enabled: boolean; + log: (...args: any[]) => any; + namespace: string; + destroy: () => boolean; + extend: (namespace: string, delimiter?: string) => Debugger; + } +} diff --git a/node_modules/@types/debug/package.json b/node_modules/@types/debug/package.json new file mode 100644 index 0000000000..9127e48fe6 --- /dev/null +++ b/node_modules/@types/debug/package.json @@ -0,0 +1,57 @@ +{ + "name": "@types/debug", + "version": "4.1.12", + "description": "TypeScript definitions for debug", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug", + "license": "MIT", + "contributors": [ + { + "name": "Seon-Wook Park", + "githubUsername": "swook", + "url": "https://github.com/swook" + }, + { + "name": "Gal Talmor", + "githubUsername": "galtalmor", + "url": "https://github.com/galtalmor" + }, + { + "name": "John McLaughlin", + "githubUsername": "zamb3zi", + "url": "https://github.com/zamb3zi" + }, + { + "name": "Brasten Sager", + "githubUsername": "brasten", + "url": "https://github.com/brasten" + }, + { + "name": "Nicolas Penin", + "githubUsername": "npenin", + "url": "https://github.com/npenin" + }, + { + "name": "Kristian Brünn", + "githubUsername": "kristianmitk", + "url": "https://github.com/kristianmitk" + }, + { + "name": "Caleb Gregory", + "githubUsername": "calebgregory", + "url": "https://github.com/calebgregory" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/debug" + }, + "scripts": {}, + "dependencies": { + "@types/ms": "*" + }, + "typesPublisherContentHash": "1053110a8e5e302f35fb57f45389304fa5a4f53bb8982b76b8065bcfd7083731", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/node_modules/@types/katex/LICENSE b/node_modules/@types/katex/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/katex/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/katex/README.md b/node_modules/@types/katex/README.md new file mode 100644 index 0000000000..bdaeab425b --- /dev/null +++ b/node_modules/@types/katex/README.md @@ -0,0 +1,15 @@ +# Installation +> `npm install --save @types/katex` + +# Summary +This package contains type definitions for katex (http://khan.github.io/KaTeX/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex. + +### Additional Details + * Last updated: Mon, 20 Nov 2023 23:36:24 GMT + * Dependencies: none + +# Credits +These definitions were written by [Michael Randolph](https://github.com/mrand01), [Kevin Nguyen](https://github.com/knguyen0125), [bLue](https://github.com/dreamerblue), [Sebastian Weigand](https://github.com/s-weigand), [sapphi-red](https://github.com/sapphi-red), and [Stefaans](https://github.com/Stefaans). diff --git a/node_modules/@types/katex/contrib/auto-render.d.ts b/node_modules/@types/katex/contrib/auto-render.d.ts new file mode 100644 index 0000000000..86db5d3b98 --- /dev/null +++ b/node_modules/@types/katex/contrib/auto-render.d.ts @@ -0,0 +1,67 @@ +import { KatexOptions } from "../index.js"; + +declare namespace renderMathInElement { + interface RenderMathInElementSpecificOptionsDelimiters { + /** + * A string which starts the math expression (i.e. the left delimiter) + */ + left: string; + /** + * A string which ends the math expression (i.e. the right delimiter) + */ + right: string; + /** + * A boolean of whether the math in the expression should be rendered in display mode or not + */ + display: boolean; + } + + interface RenderMathInElementSpecificOptions { + /** + * A list of delimiters to look for math + * + * @default [ + * {left: "$$", right: "$$", display: true}, + * {left: "\\(", right: "\\)", display: false}, + * {left: "\\[", right: "\\]", display: true} + * ] + */ + delimiters?: readonly RenderMathInElementSpecificOptionsDelimiters[] | undefined; + /** + * A list of DOM node types to ignore when recursing through + * + * @default ["script", "noscript", "style", "textarea", "pre", "code"] + */ + ignoredTags?: ReadonlyArray | undefined; + /** + * A list of DOM node class names to ignore when recursing through + * + * @default [] + */ + ignoredClasses?: string[] | undefined; + + /** + * A callback method returning a message and an error stack in case of an critical error during rendering + * @param msg Message generated by KaTeX + * @param err Caught error + * + * @default console.error + */ + errorCallback?(msg: string, err: Error): void; + } + + /** + * renderMathInElement options contain KaTeX render options and renderMathInElement specific options + */ + type RenderMathInElementOptions = KatexOptions & RenderMathInElementSpecificOptions; +} + +/** + * Auto-render TeX expressions in HTML element + * @param elem HTML element to auto-render + * @param options Render options + */ +declare function renderMathInElement(elem: HTMLElement, options?: renderMathInElement.RenderMathInElementOptions): void; + +export = renderMathInElement; +export as namespace renderMathInElement; diff --git a/node_modules/@types/katex/index.d.ts b/node_modules/@types/katex/index.d.ts new file mode 100644 index 0000000000..59ec21f757 --- /dev/null +++ b/node_modules/@types/katex/index.d.ts @@ -0,0 +1,151 @@ +export interface TrustContext { + command: string; + url: string; + protocol: string; +} + +/** Documentation: https://katex.org/docs/options.html */ +export interface KatexOptions { + /** + * If `true`, math will be rendered in display mode + * (math in display style and center math on page) + * + * If `false`, math will be rendered in inline mode + * @default false + */ + displayMode?: boolean | undefined; + /** + * Determines the markup language of the output. The valid choices are: + * - `html`: Outputs KaTeX in HTML only. + * - `mathml`: Outputs KaTeX in MathML only. + * - `htmlAndMathml`: Outputs HTML for visual rendering + * and includes MathML for accessibility. + * + * @default 'htmlAndMathml' + */ + output?: "html" | "mathml" | "htmlAndMathml" | undefined; + /** + * If `true`, display math has \tags rendered on the left + * instead of the right, like \usepackage[leqno]{amsmath} in LaTeX. + * + * @default false + */ + leqno?: boolean | undefined; + /** + * If `true`, display math renders flush left with a 2em left margin, + * like \documentclass[fleqn] in LaTeX with the amsmath package. + * + * @default false + */ + fleqn?: boolean | undefined; + /** + * If `true`, KaTeX will throw a `ParseError` when + * it encounters an unsupported command or invalid LaTex + * + * If `false`, KaTeX will render unsupported commands as + * text, and render invalid LaTeX as its source code with + * hover text giving the error, in color given by errorColor + * @default true + */ + throwOnError?: boolean | undefined; + /** + * A Color string given in format `#XXX` or `#XXXXXX` + */ + errorColor?: string | undefined; + /** + * A collection of custom macros. + * + * See `src/macros.js` for its usage + */ + macros?: any; + /** + * Specifies a minimum thickness, in ems, for fraction lines, + * \sqrt top lines, {array} vertical lines, \hline, \hdashline, + * \underline, \overline, and the borders of \fbox, \boxed, and + * \fcolorbox. + */ + minRuleThickness?: number | undefined; + /** + * If `true`, `\color` will work like LaTeX's `\textcolor` + * and takes 2 arguments + * + * If `false`, `\color` will work like LaTeX's `\color` + * and takes 1 argument + * + * In both cases, `\textcolor` works as in LaTeX + * + * @default false + */ + colorIsTextColor?: boolean | undefined; + /** + * All user-specified sizes will be caped to `maxSize` ems + * + * If set to Infinity, users can make elements and space + * arbitrarily large + * + * @default Infinity + */ + maxSize?: number | undefined; + /** + * Limit the number of macro expansions to specified number + * + * If set to `Infinity`, marco expander will try to fully expand + * as in LaTex + * + * @default 1000 + */ + maxExpand?: number | undefined; + /** + * If `false` or `"ignore"`, allow features that make + * writing in LaTex convenient but not supported by LaTex + * + * If `true` or `"error"`, throw an error for such transgressions + * + * If `"warn"`, warn about behavior via `console.warn` + * + * @default "warn" + */ + strict?: boolean | string | Function | undefined; + /** + * If `false` (do not trust input), prevent any commands that could enable adverse behavior, rendering them instead in errorColor. + * + * If `true` (trust input), allow all such commands. + * + * @default false + */ + trust?: boolean | ((context: TrustContext) => boolean) | undefined; + /** + * Place KaTeX code in the global group. + * + * @default false + */ + globalGroup?: boolean | undefined; +} + +/** + * KaTeX error, usually during parsing. + */ +export class ParseError implements Error { + constructor(message: string, lexer: any, position: number); + + name: string; + message: string; + position: number; +} + +/** + * Renders a TeX expression into the specified DOM element + * @param tex A TeX expression + * @param element The DOM element to render into + * @param options KaTeX options + */ +export function render(tex: string, element: HTMLElement, options?: KatexOptions): void; + +/** + * Renders a TeX expression into an HTML string + * @param tex A TeX expression + * @param options KaTeX options + */ +export function renderToString(tex: string, options?: KatexOptions): string; + +export as namespace katex; diff --git a/node_modules/@types/katex/package.json b/node_modules/@types/katex/package.json new file mode 100644 index 0000000000..0128c544e1 --- /dev/null +++ b/node_modules/@types/katex/package.json @@ -0,0 +1,50 @@ +{ + "name": "@types/katex", + "version": "0.16.7", + "description": "TypeScript definitions for katex", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex", + "license": "MIT", + "contributors": [ + { + "name": "Michael Randolph", + "githubUsername": "mrand01", + "url": "https://github.com/mrand01" + }, + { + "name": "Kevin Nguyen", + "githubUsername": "knguyen0125", + "url": "https://github.com/knguyen0125" + }, + { + "name": "bLue", + "githubUsername": "dreamerblue", + "url": "https://github.com/dreamerblue" + }, + { + "name": "Sebastian Weigand", + "githubUsername": "s-weigand", + "url": "https://github.com/s-weigand" + }, + { + "name": "sapphi-red", + "githubUsername": "sapphi-red", + "url": "https://github.com/sapphi-red" + }, + { + "name": "Stefaans", + "githubUsername": "Stefaans", + "url": "https://github.com/Stefaans" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/katex" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "5e09618b84fb6154b3cd4956ffc16513292057ac5cbfc7e16676474d3cecf13a", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/node_modules/@types/ms/LICENSE b/node_modules/@types/ms/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/ms/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/ms/README.md b/node_modules/@types/ms/README.md new file mode 100644 index 0000000000..1152869e50 --- /dev/null +++ b/node_modules/@types/ms/README.md @@ -0,0 +1,82 @@ +# Installation +> `npm install --save @types/ms` + +# Summary +This package contains type definitions for ms (https://github.com/vercel/ms). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms/index.d.ts) +````ts +/** + * Short/Long format for `value`. + * + * @param {Number} value + * @param {{long: boolean}} options + * @return {String} + */ +declare function ms(value: number, options?: { long: boolean }): string; + +/** + * Parse the given `value` and return milliseconds. + * + * @param {ms.StringValue} value + * @return {Number} + */ +declare function ms(value: ms.StringValue): number; + +declare namespace ms { + // Unit, UnitAnyCase, and StringValue are backported from ms@3 + // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts + + type Unit = + | "Years" + | "Year" + | "Yrs" + | "Yr" + | "Y" + | "Weeks" + | "Week" + | "W" + | "Days" + | "Day" + | "D" + | "Hours" + | "Hour" + | "Hrs" + | "Hr" + | "H" + | "Minutes" + | "Minute" + | "Mins" + | "Min" + | "M" + | "Seconds" + | "Second" + | "Secs" + | "Sec" + | "s" + | "Milliseconds" + | "Millisecond" + | "Msecs" + | "Msec" + | "Ms"; + + type UnitAnyCase = Unit | Uppercase | Lowercase; + + type StringValue = + | `${number}` + | `${number}${UnitAnyCase}` + | `${number} ${UnitAnyCase}`; +} + +export = ms; + +```` + +### Additional Details + * Last updated: Thu, 16 Jan 2025 21:02:45 GMT + * Dependencies: none + +# Credits +These definitions were written by [Zhiyuan Wang](https://github.com/danny8002). diff --git a/node_modules/@types/ms/index.d.ts b/node_modules/@types/ms/index.d.ts new file mode 100644 index 0000000000..b1b1f5159a --- /dev/null +++ b/node_modules/@types/ms/index.d.ts @@ -0,0 +1,63 @@ +/** + * Short/Long format for `value`. + * + * @param {Number} value + * @param {{long: boolean}} options + * @return {String} + */ +declare function ms(value: number, options?: { long: boolean }): string; + +/** + * Parse the given `value` and return milliseconds. + * + * @param {ms.StringValue} value + * @return {Number} + */ +declare function ms(value: ms.StringValue): number; + +declare namespace ms { + // Unit, UnitAnyCase, and StringValue are backported from ms@3 + // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts + + type Unit = + | "Years" + | "Year" + | "Yrs" + | "Yr" + | "Y" + | "Weeks" + | "Week" + | "W" + | "Days" + | "Day" + | "D" + | "Hours" + | "Hour" + | "Hrs" + | "Hr" + | "H" + | "Minutes" + | "Minute" + | "Mins" + | "Min" + | "M" + | "Seconds" + | "Second" + | "Secs" + | "Sec" + | "s" + | "Milliseconds" + | "Millisecond" + | "Msecs" + | "Msec" + | "Ms"; + + type UnitAnyCase = Unit | Uppercase | Lowercase; + + type StringValue = + | `${number}` + | `${number}${UnitAnyCase}` + | `${number} ${UnitAnyCase}`; +} + +export = ms; diff --git a/node_modules/@types/ms/package.json b/node_modules/@types/ms/package.json new file mode 100644 index 0000000000..0f547d02ca --- /dev/null +++ b/node_modules/@types/ms/package.json @@ -0,0 +1,26 @@ +{ + "name": "@types/ms", + "version": "2.1.0", + "description": "TypeScript definitions for ms", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms", + "license": "MIT", + "contributors": [ + { + "name": "Zhiyuan Wang", + "githubUsername": "danny8002", + "url": "https://github.com/danny8002" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/ms" + }, + "scripts": {}, + "dependencies": {}, + "peerDependencies": {}, + "typesPublisherContentHash": "2c8651ce1714fdc6bcbc0f262c93a790f1d127fb1c2dc8edbb583decef56fd39", + "typeScriptVersion": "5.0" +} \ No newline at end of file diff --git a/node_modules/@types/unist/LICENSE b/node_modules/@types/unist/LICENSE new file mode 100644 index 0000000000..9e841e7a26 --- /dev/null +++ b/node_modules/@types/unist/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/unist/README.md b/node_modules/@types/unist/README.md new file mode 100644 index 0000000000..b038f89e90 --- /dev/null +++ b/node_modules/@types/unist/README.md @@ -0,0 +1,122 @@ +# Installation +> `npm install --save @types/unist` + +# Summary +This package contains type definitions for unist (https://github.com/syntax-tree/unist). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2/index.d.ts) +````ts +/** + * Syntactic units in unist syntax trees are called nodes. + * + * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. + */ +export interface Node { + /** + * The variant of a node. + */ + type: string; + + /** + * Information from the ecosystem. + */ + data?: TData | undefined; + + /** + * Location of a node in a source document. + * Must not be present if a node is generated. + */ + position?: Position | undefined; +} + +/** + * Information associated by the ecosystem with the node. + * Space is guaranteed to never be specified by unist or specifications + * implementing unist. + */ +export interface Data { + [key: string]: unknown; +} + +/** + * Location of a node in a source file. + */ +export interface Position { + /** + * Place of the first character of the parsed source region. + */ + start: Point; + + /** + * Place of the first character after the parsed source region. + */ + end: Point; + + /** + * Start column at each index (plus start line) in the source region, + * for elements that span multiple lines. + */ + indent?: number[] | undefined; +} + +/** + * One place in a source file. + */ +export interface Point { + /** + * Line in a source file (1-indexed integer). + */ + line: number; + + /** + * Column in a source file (1-indexed integer). + */ + column: number; + /** + * Character in a source file (0-indexed integer). + */ + offset?: number | undefined; +} + +/** + * Util for extracting type of {@link Node.data} + * + * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. + * + * @example `NodeData>` -> `{ key: string }` + */ +export type NodeData> = TNode extends Node ? TData : never; + +/** + * Nodes containing other nodes. + * + * @typeParam ChildNode Node item of {@link Parent.children} + */ +export interface Parent = Node, TData extends object = NodeData> + extends Node +{ + /** + * List representing the children of a node. + */ + children: ChildNode[]; +} + +/** + * Nodes containing a value. + * + * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node + */ +export interface Literal extends Node { + value: Value; +} + +```` + +### Additional Details + * Last updated: Thu, 15 Aug 2024 02:18:53 GMT + * Dependencies: none + +# Credits +These definitions were written by [bizen241](https://github.com/bizen241), [Jun Lu](https://github.com/lujun2), [Hernan Rajchert](https://github.com/hrajchert), [Titus Wormer](https://github.com/wooorm), [Junyoung Choi](https://github.com/rokt33r), [Ben Moon](https://github.com/GuiltyDolphin), and [JounQin](https://github.com/JounQin). diff --git a/node_modules/@types/unist/index.d.ts b/node_modules/@types/unist/index.d.ts new file mode 100644 index 0000000000..b019d389d1 --- /dev/null +++ b/node_modules/@types/unist/index.d.ts @@ -0,0 +1,103 @@ +/** + * Syntactic units in unist syntax trees are called nodes. + * + * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. + */ +export interface Node { + /** + * The variant of a node. + */ + type: string; + + /** + * Information from the ecosystem. + */ + data?: TData | undefined; + + /** + * Location of a node in a source document. + * Must not be present if a node is generated. + */ + position?: Position | undefined; +} + +/** + * Information associated by the ecosystem with the node. + * Space is guaranteed to never be specified by unist or specifications + * implementing unist. + */ +export interface Data { + [key: string]: unknown; +} + +/** + * Location of a node in a source file. + */ +export interface Position { + /** + * Place of the first character of the parsed source region. + */ + start: Point; + + /** + * Place of the first character after the parsed source region. + */ + end: Point; + + /** + * Start column at each index (plus start line) in the source region, + * for elements that span multiple lines. + */ + indent?: number[] | undefined; +} + +/** + * One place in a source file. + */ +export interface Point { + /** + * Line in a source file (1-indexed integer). + */ + line: number; + + /** + * Column in a source file (1-indexed integer). + */ + column: number; + /** + * Character in a source file (0-indexed integer). + */ + offset?: number | undefined; +} + +/** + * Util for extracting type of {@link Node.data} + * + * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. + * + * @example `NodeData>` -> `{ key: string }` + */ +export type NodeData> = TNode extends Node ? TData : never; + +/** + * Nodes containing other nodes. + * + * @typeParam ChildNode Node item of {@link Parent.children} + */ +export interface Parent = Node, TData extends object = NodeData> + extends Node +{ + /** + * List representing the children of a node. + */ + children: ChildNode[]; +} + +/** + * Nodes containing a value. + * + * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node + */ +export interface Literal extends Node { + value: Value; +} diff --git a/node_modules/@types/unist/package.json b/node_modules/@types/unist/package.json new file mode 100644 index 0000000000..01cb5b0d4e --- /dev/null +++ b/node_modules/@types/unist/package.json @@ -0,0 +1,55 @@ +{ + "name": "@types/unist", + "version": "2.0.11", + "description": "TypeScript definitions for unist", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist", + "license": "MIT", + "contributors": [ + { + "name": "bizen241", + "githubUsername": "bizen241", + "url": "https://github.com/bizen241" + }, + { + "name": "Jun Lu", + "githubUsername": "lujun2", + "url": "https://github.com/lujun2" + }, + { + "name": "Hernan Rajchert", + "githubUsername": "hrajchert", + "url": "https://github.com/hrajchert" + }, + { + "name": "Titus Wormer", + "githubUsername": "wooorm", + "url": "https://github.com/wooorm" + }, + { + "name": "Junyoung Choi", + "githubUsername": "rokt33r", + "url": "https://github.com/rokt33r" + }, + { + "name": "Ben Moon", + "githubUsername": "GuiltyDolphin", + "url": "https://github.com/GuiltyDolphin" + }, + { + "name": "JounQin", + "githubUsername": "JounQin", + "url": "https://github.com/JounQin" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/unist" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "6e36525a6db49ae5517fe0751796ca8f6c65099098415046d4f1ad6c2ef1a33c", + "typeScriptVersion": "4.8" +} \ No newline at end of file diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..7d562e9ca9 --- /dev/null +++ b/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,33 @@ +export type Options = { + /** + Match only the first ANSI escape. + + @default false + */ + readonly onlyFirst: boolean; +}; + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex from 'ansi-regex'; + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +export default function ansiRegex(options?: Options): RegExp; diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..ddfdba39a7 --- /dev/null +++ b/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +export default function ansiRegex({onlyFirst = false} = {}) { + // Valid string terminator sequences are BEL, ESC\, and 0x9c + const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)'; + const pattern = [ + `[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))', + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +} diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..49f3f61021 --- /dev/null +++ b/node_modules/ansi-regex/package.json @@ -0,0 +1,61 @@ +{ + "name": "ansi-regex", + "version": "6.1.0", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "funding": "https://github.com/chalk/ansi-regex?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "types": "./index.d.ts", + "sideEffects": false, + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ansi-escapes": "^5.0.0", + "ava": "^3.15.0", + "tsd": "^0.21.0", + "xo": "^0.54.2" + } +} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..1e91ee10f5 --- /dev/null +++ b/node_modules/ansi-regex/readme.md @@ -0,0 +1,60 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + +## Install + +```sh +npm install ansi-regex +``` + +## Usage + +```js +import ansiRegex from 'ansi-regex'; + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`\ +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) diff --git a/node_modules/ansi-styles/index.d.ts b/node_modules/ansi-styles/index.d.ts new file mode 100644 index 0000000000..58f133abe9 --- /dev/null +++ b/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,236 @@ +export interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; +} + +export interface ColorBase { + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + + ansi(code: number): string; + + ansi256(code: number): string; + + ansi16m(red: number, green: number, blue: number): string; +} + +export interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Make text overline. + + Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash. + */ + readonly overline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; +} + +export interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; +} + +export interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; +} + +export interface ConvertColor { + /** + Convert from the RGB color space to the ANSI 256 color space. + + @param red - (`0...255`) + @param green - (`0...255`) + @param blue - (`0...255`) + */ + rgbToAnsi256(red: number, green: number, blue: number): number; + + /** + Convert from the RGB HEX color space to the RGB color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToRgb(hex: string): [red: number, green: number, blue: number]; + + /** + Convert from the RGB HEX color space to the ANSI 256 color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToAnsi256(hex: string): number; + + /** + Convert from the ANSI 256 color space to the ANSI 16 color space. + + @param code - A number representing the ANSI 256 color. + */ + ansi256ToAnsi(code: number): number; + + /** + Convert from the RGB color space to the ANSI 16 color space. + + @param red - (`0...255`) + @param green - (`0...255`) + @param blue - (`0...255`) + */ + rgbToAnsi(red: number, green: number, blue: number): number; + + /** + Convert from the RGB HEX color space to the ANSI 16 color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToAnsi(hex: string): number; +} + +/** +Basic modifier names. +*/ +export type ModifierName = keyof Modifier; + +/** +Basic foreground color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type ForegroundColorName = keyof ForegroundColor; + +/** +Basic background color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type BackgroundColorName = keyof BackgroundColor; + +/** +Basic color names. The combination of foreground and background color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type ColorName = ForegroundColorName | BackgroundColorName; + +/** +Basic modifier names. +*/ +export const modifierNames: readonly ModifierName[]; + +/** +Basic foreground color names. +*/ +export const foregroundColorNames: readonly ForegroundColorName[]; + +/** +Basic background color names. +*/ +export const backgroundColorNames: readonly BackgroundColorName[]; + +/* +Basic color names. The combination of foreground and background color names. +*/ +export const colorNames: readonly ColorName[]; + +declare const ansiStyles: { + readonly modifier: Modifier; + readonly color: ColorBase & ForegroundColor; + readonly bgColor: ColorBase & BackgroundColor; + readonly codes: ReadonlyMap; +} & ForegroundColor & BackgroundColor & Modifier & ConvertColor; + +export default ansiStyles; diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js new file mode 100644 index 0000000000..d7bede44b7 --- /dev/null +++ b/node_modules/ansi-styles/index.js @@ -0,0 +1,223 @@ +const ANSI_BACKGROUND_OFFSET = 10; + +const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`; + +const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`; + +const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`; + +const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + overline: [53, 55], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29], + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + gray: [90, 39], // Alias of `blackBright` + grey: [90, 39], // Alias of `blackBright` + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39], + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgGray: [100, 49], // Alias of `bgBlackBright` + bgGrey: [100, 49], // Alias of `bgBlackBright` + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49], + }, +}; + +export const modifierNames = Object.keys(styles.modifier); +export const foregroundColorNames = Object.keys(styles.color); +export const backgroundColorNames = Object.keys(styles.bgColor); +export const colorNames = [...foregroundColorNames, ...backgroundColorNames]; + +function assembleStyles() { + const codes = new Map(); + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m`, + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false, + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false, + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = wrapAnsi16(); + styles.color.ansi256 = wrapAnsi256(); + styles.color.ansi16m = wrapAnsi16m(); + styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET); + styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); + styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); + + // From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js + Object.defineProperties(styles, { + rgbToAnsi256: { + value: (red, green, blue) => { + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (red === green && green === blue) { + if (red < 8) { + return 16; + } + + if (red > 248) { + return 231; + } + + return Math.round(((red - 8) / 247) * 24) + 232; + } + + return 16 + + (36 * Math.round(red / 255 * 5)) + + (6 * Math.round(green / 255 * 5)) + + Math.round(blue / 255 * 5); + }, + enumerable: false, + }, + hexToRgb: { + value: hex => { + const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16)); + if (!matches) { + return [0, 0, 0]; + } + + let [colorString] = matches; + + if (colorString.length === 3) { + colorString = [...colorString].map(character => character + character).join(''); + } + + const integer = Number.parseInt(colorString, 16); + + return [ + /* eslint-disable no-bitwise */ + (integer >> 16) & 0xFF, + (integer >> 8) & 0xFF, + integer & 0xFF, + /* eslint-enable no-bitwise */ + ]; + }, + enumerable: false, + }, + hexToAnsi256: { + value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)), + enumerable: false, + }, + ansi256ToAnsi: { + value: code => { + if (code < 8) { + return 30 + code; + } + + if (code < 16) { + return 90 + (code - 8); + } + + let red; + let green; + let blue; + + if (code >= 232) { + red = (((code - 232) * 10) + 8) / 255; + green = red; + blue = red; + } else { + code -= 16; + + const remainder = code % 36; + + red = Math.floor(code / 36) / 5; + green = Math.floor(remainder / 6) / 5; + blue = (remainder % 6) / 5; + } + + const value = Math.max(red, green, blue) * 2; + + if (value === 0) { + return 30; + } + + // eslint-disable-next-line no-bitwise + let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red)); + + if (value === 2) { + result += 60; + } + + return result; + }, + enumerable: false, + }, + rgbToAnsi: { + value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), + enumerable: false, + }, + hexToAnsi: { + value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), + enumerable: false, + }, + }); + + return styles; +} + +const ansiStyles = assembleStyles(); + +export default ansiStyles; diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json new file mode 100644 index 0000000000..6cd3ca5bf9 --- /dev/null +++ b/node_modules/ansi-styles/package.json @@ -0,0 +1,54 @@ +{ + "name": "ansi-styles", + "version": "6.2.1", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "devDependencies": { + "ava": "^3.15.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.19.0", + "xo": "^0.47.0" + } +} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000000..6d04183f0c --- /dev/null +++ b/node_modules/ansi-styles/readme.md @@ -0,0 +1,173 @@ +# ansi-styles + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + +![](screenshot.png) + +## Install + +```sh +npm install ansi-styles +``` + +## Usage + +```js +import styles from 'ansi-styles'; + +console.log(`${styles.green.open}Hello world!${styles.green.close}`); + + +// Color conversion between 256/truecolor +// NOTE: When converting from truecolor to 256 colors, the original color +// may be degraded to fit the new color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`) +console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`) +console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`) +``` + +## API + +### `open` and `close` + +Each style has an `open` and `close` property. + +### `modifierNames`, `foregroundColorNames`, `backgroundColorNames`, and `colorNames` + +All supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`. + +This can be useful if you need to validate input: + +```js +import {modifierNames, foregroundColorNames} from 'ansi-styles'; + +console.log(modifierNames.includes('bold')); +//=> true + +console.log(foregroundColorNames.includes('pink')); +//=> false +``` + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `overline` *Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.* +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `styles.modifier` +- `styles.color` +- `styles.bgColor` + +###### Example + +```js +import styles from 'ansi-styles'; + +console.log(styles.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `styles.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +import styles from 'ansi-styles'; + +console.log(styles.codes.get(36)); +//=> 39 +``` + +## 16 / 256 / 16 million (TrueColor) support + +`ansi-styles` allows converting between various color formats and ANSI escapes, with support for 16, 256 and [16 million colors](https://gist.github.com/XVilka/8346728). + +The following color spaces are supported: + +- `rgb` +- `hex` +- `ansi256` +- `ansi` + +To use these, call the associated conversion function with the intended output, for example: + +```js +import styles from 'ansi-styles'; + +styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code +styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code + +styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code +styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code + +styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code +styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md new file mode 100644 index 0000000000..dc39ed6952 --- /dev/null +++ b/node_modules/argparse/CHANGELOG.md @@ -0,0 +1,216 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [2.0.1] - 2020-08-29 +### Fixed +- Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150. + + +## [2.0.0] - 2020-08-14 +### Changed +- Full rewrite. Now port from python 3.9.0 & more precise following. + See [doc](./doc) for difference and migration info. +- node.js 10+ required +- Removed most of local docs in favour of original ones. + + +## [1.0.10] - 2018-02-15 +### Fixed +- Use .concat instead of + for arrays, #122. + + +## [1.0.9] - 2016-09-29 +### Changed +- Rerelease after 1.0.8 - deps cleanup. + + +## [1.0.8] - 2016-09-29 +### Changed +- Maintenance (deps bump, fix node 6.5+ tests, coverage report). + + +## [1.0.7] - 2016-03-17 +### Changed +- Teach `addArgument` to accept string arg names. #97, @tomxtobin. + + +## [1.0.6] - 2016-02-06 +### Changed +- Maintenance: moved to eslint & updated CS. + + +## [1.0.5] - 2016-02-05 +### Changed +- Removed lodash dependency to significantly reduce install size. + Thanks to @mourner. + + +## [1.0.4] - 2016-01-17 +### Changed +- Maintenance: lodash update to 4.0.0. + + +## [1.0.3] - 2015-10-27 +### Fixed +- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. + + +## [1.0.2] - 2015-03-22 +### Changed +- Relaxed lodash version dependency. + + +## [1.0.1] - 2015-02-20 +### Changed +- Changed dependencies to be compatible with ancient nodejs. + + +## [1.0.0] - 2015-02-19 +### Changed +- Maintenance release. +- Replaced `underscore` with `lodash`. +- Bumped version to 1.0.0 to better reflect semver meaning. +- HISTORY.md -> CHANGELOG.md + + +## [0.1.16] - 2013-12-01 +### Changed +- Maintenance release. Updated dependencies and docs. + + +## [0.1.15] - 2013-05-13 +### Fixed +- Fixed #55, @trebor89 + + +## [0.1.14] - 2013-05-12 +### Fixed +- Fixed #62, @maxtaco + + +## [0.1.13] - 2013-04-08 +### Changed +- Added `.npmignore` to reduce package size + + +## [0.1.12] - 2013-02-10 +### Fixed +- Fixed conflictHandler (#46), @hpaulj + + +## [0.1.11] - 2013-02-07 +### Added +- Added 70+ tests (ported from python), @hpaulj +- Added conflictHandler, @applepicke +- Added fromfilePrefixChar, @hpaulj + +### Fixed +- Multiple bugfixes, @hpaulj + + +## [0.1.10] - 2012-12-30 +### Added +- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) + support, thanks to @hpaulj + +### Fixed +- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj + + +## [0.1.9] - 2012-12-27 +### Fixed +- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj +- Fixed default value behavior with `*` positionals, thanks to @hpaulj +- Improve `getDefault()` behavior, thanks to @hpaulj +- Improve negative argument parsing, thanks to @hpaulj + + +## [0.1.8] - 2012-12-01 +### Fixed +- Fixed parser parents (issue #19), thanks to @hpaulj +- Fixed negative argument parse (issue #20), thanks to @hpaulj + + +## [0.1.7] - 2012-10-14 +### Fixed +- Fixed 'choices' argument parse (issue #16) +- Fixed stderr output (issue #15) + + +## [0.1.6] - 2012-09-09 +### Fixed +- Fixed check for conflict of options (thanks to @tomxtobin) + + +## [0.1.5] - 2012-09-03 +### Fixed +- Fix parser #setDefaults method (thanks to @tomxtobin) + + +## [0.1.4] - 2012-07-30 +### Fixed +- Fixed pseudo-argument support (thanks to @CGamesPlay) +- Fixed addHelp default (should be true), if not set (thanks to @benblank) + + +## [0.1.3] - 2012-06-27 +### Fixed +- Fixed formatter api name: Formatter -> HelpFormatter + + +## [0.1.2] - 2012-05-29 +### Fixed +- Removed excess whitespace in help +- Fixed error reporting, when parcer with subcommands + called with empty arguments + +### Added +- Added basic tests + + +## [0.1.1] - 2012-05-23 +### Fixed +- Fixed line wrapping in help formatter +- Added better error reporting on invalid arguments + + +## [0.1.0] - 2012-05-16 +### Added +- First release. + + +[2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0 +[1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10 +[1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9 +[1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8 +[1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7 +[1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6 +[1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5 +[1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4 +[1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0 +[0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16 +[0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15 +[0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14 +[0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13 +[0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12 +[0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11 +[0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10 +[0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9 +[0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8 +[0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7 +[0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6 +[0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5 +[0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4 +[0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3 +[0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2 +[0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1 +[0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0 diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE new file mode 100644 index 0000000000..66a3ac80d7 --- /dev/null +++ b/node_modules/argparse/LICENSE @@ -0,0 +1,254 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md new file mode 100644 index 0000000000..550b5c9b7b --- /dev/null +++ b/node_modules/argparse/README.md @@ -0,0 +1,84 @@ +argparse +======== + +[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) +[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) + +CLI arguments parser for node.js, with [sub-commands](https://docs.python.org/3.9/library/argparse.html#sub-commands) support. Port of python's [argparse](http://docs.python.org/dev/library/argparse.html) (version [3.9.0](https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py)). + +**Difference with original.** + +- JS has no keyword arguments support. + - Pass options instead: `new ArgumentParser({ description: 'example', add_help: true })`. +- JS has no python's types `int`, `float`, ... + - Use string-typed names: `.add_argument('-b', { type: 'int', help: 'help' })`. +- `%r` format specifier uses `require('util').inspect()`. + +More details in [doc](./doc). + + +Example +------- + +`test.js` file: + +```javascript +#!/usr/bin/env node +'use strict'; + +const { ArgumentParser } = require('argparse'); +const { version } = require('./package.json'); + +const parser = new ArgumentParser({ + description: 'Argparse example' +}); + +parser.add_argument('-v', '--version', { action: 'version', version }); +parser.add_argument('-f', '--foo', { help: 'foo bar' }); +parser.add_argument('-b', '--bar', { help: 'bar foo' }); +parser.add_argument('--baz', { help: 'baz bar' }); + +console.dir(parser.parse_args()); +``` + +Display help: + +``` +$ ./test.js -h +usage: test.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] + +Argparse example + +optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -f FOO, --foo FOO foo bar + -b BAR, --bar BAR bar foo + --baz BAZ baz bar +``` + +Parse arguments: + +``` +$ ./test.js -f=3 --bar=4 --baz 5 +{ foo: '3', bar: '4', baz: '5' } +``` + + +API docs +-------- + +Since this is a port with minimal divergence, there's no separate documentation. +Use original one instead, with notes about difference. + +1. [Original doc](https://docs.python.org/3.9/library/argparse.html). +2. [Original tutorial](https://docs.python.org/3.9/howto/argparse.html). +3. [Difference with python](./doc). + + +argparse for enterprise +----------------------- + +Available as part of the Tidelift Subscription + +The maintainers of argparse and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-argparse?utm_source=npm-argparse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/argparse.js b/node_modules/argparse/argparse.js new file mode 100644 index 0000000000..2b8c8c6317 --- /dev/null +++ b/node_modules/argparse/argparse.js @@ -0,0 +1,3707 @@ +// Port of python's argparse module, version 3.9.0: +// https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py + +'use strict' + +// Copyright (C) 2010-2020 Python Software Foundation. +// Copyright (C) 2020 argparse.js authors + +/* + * Command-line parsing library + * + * This module is an optparse-inspired command-line parsing library that: + * + * - handles both optional and positional arguments + * - produces highly informative usage messages + * - supports parsers that dispatch to sub-parsers + * + * The following is a simple usage example that sums integers from the + * command-line and writes the result to a file:: + * + * parser = argparse.ArgumentParser( + * description='sum the integers at the command line') + * parser.add_argument( + * 'integers', metavar='int', nargs='+', type=int, + * help='an integer to be summed') + * parser.add_argument( + * '--log', default=sys.stdout, type=argparse.FileType('w'), + * help='the file where the sum should be written') + * args = parser.parse_args() + * args.log.write('%s' % sum(args.integers)) + * args.log.close() + * + * The module contains the following public classes: + * + * - ArgumentParser -- The main entry point for command-line parsing. As the + * example above shows, the add_argument() method is used to populate + * the parser with actions for optional and positional arguments. Then + * the parse_args() method is invoked to convert the args at the + * command-line into an object with attributes. + * + * - ArgumentError -- The exception raised by ArgumentParser objects when + * there are errors with the parser's actions. Errors raised while + * parsing the command-line are caught by ArgumentParser and emitted + * as command-line messages. + * + * - FileType -- A factory for defining types of files to be created. As the + * example above shows, instances of FileType are typically passed as + * the type= argument of add_argument() calls. + * + * - Action -- The base class for parser actions. Typically actions are + * selected by passing strings like 'store_true' or 'append_const' to + * the action= argument of add_argument(). However, for greater + * customization of ArgumentParser actions, subclasses of Action may + * be defined and passed as the action= argument. + * + * - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, + * ArgumentDefaultsHelpFormatter -- Formatter classes which + * may be passed as the formatter_class= argument to the + * ArgumentParser constructor. HelpFormatter is the default, + * RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser + * not to change the formatting for help text, and + * ArgumentDefaultsHelpFormatter adds information about argument defaults + * to the help. + * + * All other classes in this module are considered implementation details. + * (Also note that HelpFormatter and RawDescriptionHelpFormatter are only + * considered public as object names -- the API of the formatter objects is + * still considered an implementation detail.) + */ + +const SUPPRESS = '==SUPPRESS==' + +const OPTIONAL = '?' +const ZERO_OR_MORE = '*' +const ONE_OR_MORE = '+' +const PARSER = 'A...' +const REMAINDER = '...' +const _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args' + + +// ================================== +// Utility functions used for porting +// ================================== +const assert = require('assert') +const util = require('util') +const fs = require('fs') +const sub = require('./lib/sub') +const path = require('path') +const repr = util.inspect + +function get_argv() { + // omit first argument (which is assumed to be interpreter - `node`, `coffee`, `ts-node`, etc.) + return process.argv.slice(1) +} + +function get_terminal_size() { + return { + columns: +process.env.COLUMNS || process.stdout.columns || 80 + } +} + +function hasattr(object, name) { + return Object.prototype.hasOwnProperty.call(object, name) +} + +function getattr(object, name, value) { + return hasattr(object, name) ? object[name] : value +} + +function setattr(object, name, value) { + object[name] = value +} + +function setdefault(object, name, value) { + if (!hasattr(object, name)) object[name] = value + return object[name] +} + +function delattr(object, name) { + delete object[name] +} + +function range(from, to, step=1) { + // range(10) is equivalent to range(0, 10) + if (arguments.length === 1) [ to, from ] = [ from, 0 ] + if (typeof from !== 'number' || typeof to !== 'number' || typeof step !== 'number') { + throw new TypeError('argument cannot be interpreted as an integer') + } + if (step === 0) throw new TypeError('range() arg 3 must not be zero') + + let result = [] + if (step > 0) { + for (let i = from; i < to; i += step) result.push(i) + } else { + for (let i = from; i > to; i += step) result.push(i) + } + return result +} + +function splitlines(str, keepends = false) { + let result + if (!keepends) { + result = str.split(/\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/) + } else { + result = [] + let parts = str.split(/(\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029])/) + for (let i = 0; i < parts.length; i += 2) { + result.push(parts[i] + (i + 1 < parts.length ? parts[i + 1] : '')) + } + } + if (!result[result.length - 1]) result.pop() + return result +} + +function _string_lstrip(string, prefix_chars) { + let idx = 0 + while (idx < string.length && prefix_chars.includes(string[idx])) idx++ + return idx ? string.slice(idx) : string +} + +function _string_split(string, sep, maxsplit) { + let result = string.split(sep) + if (result.length > maxsplit) { + result = result.slice(0, maxsplit).concat([ result.slice(maxsplit).join(sep) ]) + } + return result +} + +function _array_equal(array1, array2) { + if (array1.length !== array2.length) return false + for (let i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) return false + } + return true +} + +function _array_remove(array, item) { + let idx = array.indexOf(item) + if (idx === -1) throw new TypeError(sub('%r not in list', item)) + array.splice(idx, 1) +} + +// normalize choices to array; +// this isn't required in python because `in` and `map` operators work with anything, +// but in js dealing with multiple types here is too clunky +function _choices_to_array(choices) { + if (choices === undefined) { + return [] + } else if (Array.isArray(choices)) { + return choices + } else if (choices !== null && typeof choices[Symbol.iterator] === 'function') { + return Array.from(choices) + } else if (typeof choices === 'object' && choices !== null) { + return Object.keys(choices) + } else { + throw new Error(sub('invalid choices value: %r', choices)) + } +} + +// decorator that allows a class to be called without new +function _callable(cls) { + let result = { // object is needed for inferred class name + [cls.name]: function (...args) { + let this_class = new.target === result || !new.target + return Reflect.construct(cls, args, this_class ? cls : new.target) + } + } + result[cls.name].prototype = cls.prototype + // fix default tag for toString, e.g. [object Action] instead of [object Object] + cls.prototype[Symbol.toStringTag] = cls.name + return result[cls.name] +} + +function _alias(object, from, to) { + try { + let name = object.constructor.name + Object.defineProperty(object, from, { + value: util.deprecate(object[to], sub('%s.%s() is renamed to %s.%s()', + name, from, name, to)), + enumerable: false + }) + } catch {} +} + +// decorator that allows snake_case class methods to be called with camelCase and vice versa +function _camelcase_alias(_class) { + for (let name of Object.getOwnPropertyNames(_class.prototype)) { + let camelcase = name.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) + if (camelcase !== name) _alias(_class.prototype, camelcase, name) + } + return _class +} + +function _to_legacy_name(key) { + key = key.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) + if (key === 'default') key = 'defaultValue' + if (key === 'const') key = 'constant' + return key +} + +function _to_new_name(key) { + if (key === 'defaultValue') key = 'default' + if (key === 'constant') key = 'const' + key = key.replace(/[A-Z]/g, c => '_' + c.toLowerCase()) + return key +} + +// parse options +let no_default = Symbol('no_default_value') +function _parse_opts(args, descriptor) { + function get_name() { + let stack = new Error().stack.split('\n') + .map(x => x.match(/^ at (.*) \(.*\)$/)) + .filter(Boolean) + .map(m => m[1]) + .map(fn => fn.match(/[^ .]*$/)[0]) + + if (stack.length && stack[0] === get_name.name) stack.shift() + if (stack.length && stack[0] === _parse_opts.name) stack.shift() + return stack.length ? stack[0] : '' + } + + args = Array.from(args) + let kwargs = {} + let result = [] + let last_opt = args.length && args[args.length - 1] + + if (typeof last_opt === 'object' && last_opt !== null && !Array.isArray(last_opt) && + (!last_opt.constructor || last_opt.constructor.name === 'Object')) { + kwargs = Object.assign({}, args.pop()) + } + + // LEGACY (v1 compatibility): camelcase + let renames = [] + for (let key of Object.keys(descriptor)) { + let old_name = _to_legacy_name(key) + if (old_name !== key && (old_name in kwargs)) { + if (key in kwargs) { + // default and defaultValue specified at the same time, happens often in old tests + //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) + } else { + kwargs[key] = kwargs[old_name] + } + renames.push([ old_name, key ]) + delete kwargs[old_name] + } + } + if (renames.length) { + let name = get_name() + deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', + name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) + } + // end + + let missing_positionals = [] + let positional_count = args.length + + for (let [ key, def ] of Object.entries(descriptor)) { + if (key[0] === '*') { + if (key.length > 0 && key[1] === '*') { + // LEGACY (v1 compatibility): camelcase + let renames = [] + for (let key of Object.keys(kwargs)) { + let new_name = _to_new_name(key) + if (new_name !== key && (key in kwargs)) { + if (new_name in kwargs) { + // default and defaultValue specified at the same time, happens often in old tests + //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), new_name)) + } else { + kwargs[new_name] = kwargs[key] + } + renames.push([ key, new_name ]) + delete kwargs[key] + } + } + if (renames.length) { + let name = get_name() + deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', + name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) + } + // end + result.push(kwargs) + kwargs = {} + } else { + result.push(args) + args = [] + } + } else if (key in kwargs && args.length > 0) { + throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) + } else if (key in kwargs) { + result.push(kwargs[key]) + delete kwargs[key] + } else if (args.length > 0) { + result.push(args.shift()) + } else if (def !== no_default) { + result.push(def) + } else { + missing_positionals.push(key) + } + } + + if (Object.keys(kwargs).length) { + throw new TypeError(sub('%s() got an unexpected keyword argument %r', + get_name(), Object.keys(kwargs)[0])) + } + + if (args.length) { + let from = Object.entries(descriptor).filter(([ k, v ]) => k[0] !== '*' && v !== no_default).length + let to = Object.entries(descriptor).filter(([ k ]) => k[0] !== '*').length + throw new TypeError(sub('%s() takes %s positional argument%s but %s %s given', + get_name(), + from === to ? sub('from %s to %s', from, to) : to, + from === to && to === 1 ? '' : 's', + positional_count, + positional_count === 1 ? 'was' : 'were')) + } + + if (missing_positionals.length) { + let strs = missing_positionals.map(repr) + if (strs.length > 1) strs[strs.length - 1] = 'and ' + strs[strs.length - 1] + let str_joined = strs.join(strs.length === 2 ? '' : ', ') + throw new TypeError(sub('%s() missing %i required positional argument%s: %s', + get_name(), strs.length, strs.length === 1 ? '' : 's', str_joined)) + } + + return result +} + +let _deprecations = {} +function deprecate(id, string) { + _deprecations[id] = _deprecations[id] || util.deprecate(() => {}, string) + _deprecations[id]() +} + + +// ============================= +// Utility functions and classes +// ============================= +function _AttributeHolder(cls = Object) { + /* + * Abstract base class that provides __repr__. + * + * The __repr__ method returns a string in the format:: + * ClassName(attr=name, attr=name, ...) + * The attributes are determined either by a class-level attribute, + * '_kwarg_names', or by inspecting the instance __dict__. + */ + + return class _AttributeHolder extends cls { + [util.inspect.custom]() { + let type_name = this.constructor.name + let arg_strings = [] + let star_args = {} + for (let arg of this._get_args()) { + arg_strings.push(repr(arg)) + } + for (let [ name, value ] of this._get_kwargs()) { + if (/^[a-z_][a-z0-9_$]*$/i.test(name)) { + arg_strings.push(sub('%s=%r', name, value)) + } else { + star_args[name] = value + } + } + if (Object.keys(star_args).length) { + arg_strings.push(sub('**%s', repr(star_args))) + } + return sub('%s(%s)', type_name, arg_strings.join(', ')) + } + + toString() { + return this[util.inspect.custom]() + } + + _get_kwargs() { + return Object.entries(this) + } + + _get_args() { + return [] + } + } +} + + +function _copy_items(items) { + if (items === undefined) { + return [] + } + return items.slice(0) +} + + +// =============== +// Formatting Help +// =============== +const HelpFormatter = _camelcase_alias(_callable(class HelpFormatter { + /* + * Formatter for generating usage messages and argument help strings. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + constructor() { + let [ + prog, + indent_increment, + max_help_position, + width + ] = _parse_opts(arguments, { + prog: no_default, + indent_increment: 2, + max_help_position: 24, + width: undefined + }) + + // default setting for width + if (width === undefined) { + width = get_terminal_size().columns + width -= 2 + } + + this._prog = prog + this._indent_increment = indent_increment + this._max_help_position = Math.min(max_help_position, + Math.max(width - 20, indent_increment * 2)) + this._width = width + + this._current_indent = 0 + this._level = 0 + this._action_max_length = 0 + + this._root_section = this._Section(this, undefined) + this._current_section = this._root_section + + this._whitespace_matcher = /[ \t\n\r\f\v]+/g // equivalent to python /\s+/ with ASCII flag + this._long_break_matcher = /\n\n\n+/g + } + + // =============================== + // Section and indentation methods + // =============================== + _indent() { + this._current_indent += this._indent_increment + this._level += 1 + } + + _dedent() { + this._current_indent -= this._indent_increment + assert(this._current_indent >= 0, 'Indent decreased below 0.') + this._level -= 1 + } + + _add_item(func, args) { + this._current_section.items.push([ func, args ]) + } + + // ======================== + // Message building methods + // ======================== + start_section(heading) { + this._indent() + let section = this._Section(this, this._current_section, heading) + this._add_item(section.format_help.bind(section), []) + this._current_section = section + } + + end_section() { + this._current_section = this._current_section.parent + this._dedent() + } + + add_text(text) { + if (text !== SUPPRESS && text !== undefined) { + this._add_item(this._format_text.bind(this), [text]) + } + } + + add_usage(usage, actions, groups, prefix = undefined) { + if (usage !== SUPPRESS) { + let args = [ usage, actions, groups, prefix ] + this._add_item(this._format_usage.bind(this), args) + } + } + + add_argument(action) { + if (action.help !== SUPPRESS) { + + // find all invocations + let invocations = [this._format_action_invocation(action)] + for (let subaction of this._iter_indented_subactions(action)) { + invocations.push(this._format_action_invocation(subaction)) + } + + // update the maximum item length + let invocation_length = Math.max(...invocations.map(invocation => invocation.length)) + let action_length = invocation_length + this._current_indent + this._action_max_length = Math.max(this._action_max_length, + action_length) + + // add the item to the list + this._add_item(this._format_action.bind(this), [action]) + } + } + + add_arguments(actions) { + for (let action of actions) { + this.add_argument(action) + } + } + + // ======================= + // Help-formatting methods + // ======================= + format_help() { + let help = this._root_section.format_help() + if (help) { + help = help.replace(this._long_break_matcher, '\n\n') + help = help.replace(/^\n+|\n+$/g, '') + '\n' + } + return help + } + + _join_parts(part_strings) { + return part_strings.filter(part => part && part !== SUPPRESS).join('') + } + + _format_usage(usage, actions, groups, prefix) { + if (prefix === undefined) { + prefix = 'usage: ' + } + + // if usage is specified, use that + if (usage !== undefined) { + usage = sub(usage, { prog: this._prog }) + + // if no optionals or positionals are available, usage is just prog + } else if (usage === undefined && !actions.length) { + usage = sub('%(prog)s', { prog: this._prog }) + + // if optionals and positionals are available, calculate usage + } else if (usage === undefined) { + let prog = sub('%(prog)s', { prog: this._prog }) + + // split optionals from positionals + let optionals = [] + let positionals = [] + for (let action of actions) { + if (action.option_strings.length) { + optionals.push(action) + } else { + positionals.push(action) + } + } + + // build full usage string + let action_usage = this._format_actions_usage([].concat(optionals).concat(positionals), groups) + usage = [ prog, action_usage ].map(String).join(' ') + + // wrap the usage parts if it's too long + let text_width = this._width - this._current_indent + if (prefix.length + usage.length > text_width) { + + // break usage into wrappable parts + let part_regexp = /\(.*?\)+(?=\s|$)|\[.*?\]+(?=\s|$)|\S+/g + let opt_usage = this._format_actions_usage(optionals, groups) + let pos_usage = this._format_actions_usage(positionals, groups) + let opt_parts = opt_usage.match(part_regexp) || [] + let pos_parts = pos_usage.match(part_regexp) || [] + assert(opt_parts.join(' ') === opt_usage) + assert(pos_parts.join(' ') === pos_usage) + + // helper for wrapping lines + let get_lines = (parts, indent, prefix = undefined) => { + let lines = [] + let line = [] + let line_len + if (prefix !== undefined) { + line_len = prefix.length - 1 + } else { + line_len = indent.length - 1 + } + for (let part of parts) { + if (line_len + 1 + part.length > text_width && line) { + lines.push(indent + line.join(' ')) + line = [] + line_len = indent.length - 1 + } + line.push(part) + line_len += part.length + 1 + } + if (line.length) { + lines.push(indent + line.join(' ')) + } + if (prefix !== undefined) { + lines[0] = lines[0].slice(indent.length) + } + return lines + } + + let lines + + // if prog is short, follow it with optionals or positionals + if (prefix.length + prog.length <= 0.75 * text_width) { + let indent = ' '.repeat(prefix.length + prog.length + 1) + if (opt_parts.length) { + lines = get_lines([prog].concat(opt_parts), indent, prefix) + lines = lines.concat(get_lines(pos_parts, indent)) + } else if (pos_parts.length) { + lines = get_lines([prog].concat(pos_parts), indent, prefix) + } else { + lines = [prog] + } + + // if prog is long, put it on its own line + } else { + let indent = ' '.repeat(prefix.length) + let parts = [].concat(opt_parts).concat(pos_parts) + lines = get_lines(parts, indent) + if (lines.length > 1) { + lines = [] + lines = lines.concat(get_lines(opt_parts, indent)) + lines = lines.concat(get_lines(pos_parts, indent)) + } + lines = [prog].concat(lines) + } + + // join lines into usage + usage = lines.join('\n') + } + } + + // prefix with 'usage:' + return sub('%s%s\n\n', prefix, usage) + } + + _format_actions_usage(actions, groups) { + // find group indices and identify actions in groups + let group_actions = new Set() + let inserts = {} + for (let group of groups) { + let start = actions.indexOf(group._group_actions[0]) + if (start === -1) { + continue + } else { + let end = start + group._group_actions.length + if (_array_equal(actions.slice(start, end), group._group_actions)) { + for (let action of group._group_actions) { + group_actions.add(action) + } + if (!group.required) { + if (start in inserts) { + inserts[start] += ' [' + } else { + inserts[start] = '[' + } + if (end in inserts) { + inserts[end] += ']' + } else { + inserts[end] = ']' + } + } else { + if (start in inserts) { + inserts[start] += ' (' + } else { + inserts[start] = '(' + } + if (end in inserts) { + inserts[end] += ')' + } else { + inserts[end] = ')' + } + } + for (let i of range(start + 1, end)) { + inserts[i] = '|' + } + } + } + } + + // collect all actions format strings + let parts = [] + for (let [ i, action ] of Object.entries(actions)) { + + // suppressed arguments are marked with None + // remove | separators for suppressed arguments + if (action.help === SUPPRESS) { + parts.push(undefined) + if (inserts[+i] === '|') { + delete inserts[+i] + } else if (inserts[+i + 1] === '|') { + delete inserts[+i + 1] + } + + // produce all arg strings + } else if (!action.option_strings.length) { + let default_value = this._get_default_metavar_for_positional(action) + let part = this._format_args(action, default_value) + + // if it's in a group, strip the outer [] + if (group_actions.has(action)) { + if (part[0] === '[' && part[part.length - 1] === ']') { + part = part.slice(1, -1) + } + } + + // add the action string to the list + parts.push(part) + + // produce the first way to invoke the option in brackets + } else { + let option_string = action.option_strings[0] + let part + + // if the Optional doesn't take a value, format is: + // -s or --long + if (action.nargs === 0) { + part = action.format_usage() + + // if the Optional takes a value, format is: + // -s ARGS or --long ARGS + } else { + let default_value = this._get_default_metavar_for_optional(action) + let args_string = this._format_args(action, default_value) + part = sub('%s %s', option_string, args_string) + } + + // make it look optional if it's not required or in a group + if (!action.required && !group_actions.has(action)) { + part = sub('[%s]', part) + } + + // add the action string to the list + parts.push(part) + } + } + + // insert things at the necessary indices + for (let i of Object.keys(inserts).map(Number).sort((a, b) => b - a)) { + parts.splice(+i, 0, inserts[+i]) + } + + // join all the action items with spaces + let text = parts.filter(Boolean).join(' ') + + // clean up separators for mutually exclusive groups + text = text.replace(/([\[(]) /g, '$1') + text = text.replace(/ ([\])])/g, '$1') + text = text.replace(/[\[(] *[\])]/g, '') + text = text.replace(/\(([^|]*)\)/g, '$1', text) + text = text.trim() + + // return the text + return text + } + + _format_text(text) { + if (text.includes('%(prog)')) { + text = sub(text, { prog: this._prog }) + } + let text_width = Math.max(this._width - this._current_indent, 11) + let indent = ' '.repeat(this._current_indent) + return this._fill_text(text, text_width, indent) + '\n\n' + } + + _format_action(action) { + // determine the required width and the entry label + let help_position = Math.min(this._action_max_length + 2, + this._max_help_position) + let help_width = Math.max(this._width - help_position, 11) + let action_width = help_position - this._current_indent - 2 + let action_header = this._format_action_invocation(action) + let indent_first + + // no help; start on same line and add a final newline + if (!action.help) { + let tup = [ this._current_indent, '', action_header ] + action_header = sub('%*s%s\n', ...tup) + + // short action name; start on the same line and pad two spaces + } else if (action_header.length <= action_width) { + let tup = [ this._current_indent, '', action_width, action_header ] + action_header = sub('%*s%-*s ', ...tup) + indent_first = 0 + + // long action name; start on the next line + } else { + let tup = [ this._current_indent, '', action_header ] + action_header = sub('%*s%s\n', ...tup) + indent_first = help_position + } + + // collect the pieces of the action help + let parts = [action_header] + + // if there was help for the action, add lines of help text + if (action.help) { + let help_text = this._expand_help(action) + let help_lines = this._split_lines(help_text, help_width) + parts.push(sub('%*s%s\n', indent_first, '', help_lines[0])) + for (let line of help_lines.slice(1)) { + parts.push(sub('%*s%s\n', help_position, '', line)) + } + + // or add a newline if the description doesn't end with one + } else if (!action_header.endsWith('\n')) { + parts.push('\n') + } + + // if there are any sub-actions, add their help as well + for (let subaction of this._iter_indented_subactions(action)) { + parts.push(this._format_action(subaction)) + } + + // return a single string + return this._join_parts(parts) + } + + _format_action_invocation(action) { + if (!action.option_strings.length) { + let default_value = this._get_default_metavar_for_positional(action) + let metavar = this._metavar_formatter(action, default_value)(1)[0] + return metavar + + } else { + let parts = [] + + // if the Optional doesn't take a value, format is: + // -s, --long + if (action.nargs === 0) { + parts = parts.concat(action.option_strings) + + // if the Optional takes a value, format is: + // -s ARGS, --long ARGS + } else { + let default_value = this._get_default_metavar_for_optional(action) + let args_string = this._format_args(action, default_value) + for (let option_string of action.option_strings) { + parts.push(sub('%s %s', option_string, args_string)) + } + } + + return parts.join(', ') + } + } + + _metavar_formatter(action, default_metavar) { + let result + if (action.metavar !== undefined) { + result = action.metavar + } else if (action.choices !== undefined) { + let choice_strs = _choices_to_array(action.choices).map(String) + result = sub('{%s}', choice_strs.join(',')) + } else { + result = default_metavar + } + + function format(tuple_size) { + if (Array.isArray(result)) { + return result + } else { + return Array(tuple_size).fill(result) + } + } + return format + } + + _format_args(action, default_metavar) { + let get_metavar = this._metavar_formatter(action, default_metavar) + let result + if (action.nargs === undefined) { + result = sub('%s', ...get_metavar(1)) + } else if (action.nargs === OPTIONAL) { + result = sub('[%s]', ...get_metavar(1)) + } else if (action.nargs === ZERO_OR_MORE) { + let metavar = get_metavar(1) + if (metavar.length === 2) { + result = sub('[%s [%s ...]]', ...metavar) + } else { + result = sub('[%s ...]', ...metavar) + } + } else if (action.nargs === ONE_OR_MORE) { + result = sub('%s [%s ...]', ...get_metavar(2)) + } else if (action.nargs === REMAINDER) { + result = '...' + } else if (action.nargs === PARSER) { + result = sub('%s ...', ...get_metavar(1)) + } else if (action.nargs === SUPPRESS) { + result = '' + } else { + let formats + try { + formats = range(action.nargs).map(() => '%s') + } catch (err) { + throw new TypeError('invalid nargs value') + } + result = sub(formats.join(' '), ...get_metavar(action.nargs)) + } + return result + } + + _expand_help(action) { + let params = Object.assign({ prog: this._prog }, action) + for (let name of Object.keys(params)) { + if (params[name] === SUPPRESS) { + delete params[name] + } + } + for (let name of Object.keys(params)) { + if (params[name] && params[name].name) { + params[name] = params[name].name + } + } + if (params.choices !== undefined) { + let choices_str = _choices_to_array(params.choices).map(String).join(', ') + params.choices = choices_str + } + // LEGACY (v1 compatibility): camelcase + for (let key of Object.keys(params)) { + let old_name = _to_legacy_name(key) + if (old_name !== key) { + params[old_name] = params[key] + } + } + // end + return sub(this._get_help_string(action), params) + } + + * _iter_indented_subactions(action) { + if (typeof action._get_subactions === 'function') { + this._indent() + yield* action._get_subactions() + this._dedent() + } + } + + _split_lines(text, width) { + text = text.replace(this._whitespace_matcher, ' ').trim() + // The textwrap module is used only for formatting help. + // Delay its import for speeding up the common usage of argparse. + let textwrap = require('./lib/textwrap') + return textwrap.wrap(text, { width }) + } + + _fill_text(text, width, indent) { + text = text.replace(this._whitespace_matcher, ' ').trim() + let textwrap = require('./lib/textwrap') + return textwrap.fill(text, { width, + initial_indent: indent, + subsequent_indent: indent }) + } + + _get_help_string(action) { + return action.help + } + + _get_default_metavar_for_optional(action) { + return action.dest.toUpperCase() + } + + _get_default_metavar_for_positional(action) { + return action.dest + } +})) + +HelpFormatter.prototype._Section = _callable(class _Section { + + constructor(formatter, parent, heading = undefined) { + this.formatter = formatter + this.parent = parent + this.heading = heading + this.items = [] + } + + format_help() { + // format the indented section + if (this.parent !== undefined) { + this.formatter._indent() + } + let item_help = this.formatter._join_parts(this.items.map(([ func, args ]) => func.apply(null, args))) + if (this.parent !== undefined) { + this.formatter._dedent() + } + + // return nothing if the section was empty + if (!item_help) { + return '' + } + + // add the heading if the section was non-empty + let heading + if (this.heading !== SUPPRESS && this.heading !== undefined) { + let current_indent = this.formatter._current_indent + heading = sub('%*s%s:\n', current_indent, '', this.heading) + } else { + heading = '' + } + + // join the section-initial newline, the heading and the help + return this.formatter._join_parts(['\n', heading, item_help, '\n']) + } +}) + + +const RawDescriptionHelpFormatter = _camelcase_alias(_callable(class RawDescriptionHelpFormatter extends HelpFormatter { + /* + * Help message formatter which retains any formatting in descriptions. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _fill_text(text, width, indent) { + return splitlines(text, true).map(line => indent + line).join('') + } +})) + + +const RawTextHelpFormatter = _camelcase_alias(_callable(class RawTextHelpFormatter extends RawDescriptionHelpFormatter { + /* + * Help message formatter which retains formatting of all help text. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _split_lines(text/*, width*/) { + return splitlines(text) + } +})) + + +const ArgumentDefaultsHelpFormatter = _camelcase_alias(_callable(class ArgumentDefaultsHelpFormatter extends HelpFormatter { + /* + * Help message formatter which adds default values to argument help. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _get_help_string(action) { + let help = action.help + // LEGACY (v1 compatibility): additional check for defaultValue needed + if (!action.help.includes('%(default)') && !action.help.includes('%(defaultValue)')) { + if (action.default !== SUPPRESS) { + let defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] + if (action.option_strings.length || defaulting_nargs.includes(action.nargs)) { + help += ' (default: %(default)s)' + } + } + } + return help + } +})) + + +const MetavarTypeHelpFormatter = _camelcase_alias(_callable(class MetavarTypeHelpFormatter extends HelpFormatter { + /* + * Help message formatter which uses the argument 'type' as the default + * metavar value (instead of the argument 'dest') + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + */ + + _get_default_metavar_for_optional(action) { + return typeof action.type === 'function' ? action.type.name : action.type + } + + _get_default_metavar_for_positional(action) { + return typeof action.type === 'function' ? action.type.name : action.type + } +})) + + +// ===================== +// Options and Arguments +// ===================== +function _get_action_name(argument) { + if (argument === undefined) { + return undefined + } else if (argument.option_strings.length) { + return argument.option_strings.join('/') + } else if (![ undefined, SUPPRESS ].includes(argument.metavar)) { + return argument.metavar + } else if (![ undefined, SUPPRESS ].includes(argument.dest)) { + return argument.dest + } else { + return undefined + } +} + + +const ArgumentError = _callable(class ArgumentError extends Error { + /* + * An error from creating or using an argument (optional or positional). + * + * The string value of this exception is the message, augmented with + * information about the argument that caused it. + */ + + constructor(argument, message) { + super() + this.name = 'ArgumentError' + this._argument_name = _get_action_name(argument) + this._message = message + this.message = this.str() + } + + str() { + let format + if (this._argument_name === undefined) { + format = '%(message)s' + } else { + format = 'argument %(argument_name)s: %(message)s' + } + return sub(format, { message: this._message, + argument_name: this._argument_name }) + } +}) + + +const ArgumentTypeError = _callable(class ArgumentTypeError extends Error { + /* + * An error from trying to convert a command line string to a type. + */ + + constructor(message) { + super(message) + this.name = 'ArgumentTypeError' + } +}) + + +// ============== +// Action classes +// ============== +const Action = _camelcase_alias(_callable(class Action extends _AttributeHolder(Function) { + /* + * Information about how to convert command line strings to Python objects. + * + * Action objects are used by an ArgumentParser to represent the information + * needed to parse a single argument from one or more strings from the + * command line. The keyword arguments to the Action constructor are also + * all attributes of Action instances. + * + * Keyword Arguments: + * + * - option_strings -- A list of command-line option strings which + * should be associated with this action. + * + * - dest -- The name of the attribute to hold the created object(s) + * + * - nargs -- The number of command-line arguments that should be + * consumed. By default, one argument will be consumed and a single + * value will be produced. Other values include: + * - N (an integer) consumes N arguments (and produces a list) + * - '?' consumes zero or one arguments + * - '*' consumes zero or more arguments (and produces a list) + * - '+' consumes one or more arguments (and produces a list) + * Note that the difference between the default and nargs=1 is that + * with the default, a single value will be produced, while with + * nargs=1, a list containing a single value will be produced. + * + * - const -- The value to be produced if the option is specified and the + * option uses an action that takes no values. + * + * - default -- The value to be produced if the option is not specified. + * + * - type -- A callable that accepts a single string argument, and + * returns the converted value. The standard Python types str, int, + * float, and complex are useful examples of such callables. If None, + * str is used. + * + * - choices -- A container of values that should be allowed. If not None, + * after a command-line argument has been converted to the appropriate + * type, an exception will be raised if it is not a member of this + * collection. + * + * - required -- True if the action must always be specified at the + * command line. This is only meaningful for optional command-line + * arguments. + * + * - help -- The help string describing the argument. + * + * - metavar -- The name to be used for the option's argument with the + * help string. If None, the 'dest' value will be used as the name. + */ + + constructor() { + let [ + option_strings, + dest, + nargs, + const_value, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + nargs: undefined, + const: undefined, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + // when this class is called as a function, redirect it to .call() method of itself + super('return arguments.callee.call.apply(arguments.callee, arguments)') + + this.option_strings = option_strings + this.dest = dest + this.nargs = nargs + this.const = const_value + this.default = default_value + this.type = type + this.choices = choices + this.required = required + this.help = help + this.metavar = metavar + } + + _get_kwargs() { + let names = [ + 'option_strings', + 'dest', + 'nargs', + 'const', + 'default', + 'type', + 'choices', + 'help', + 'metavar' + ] + return names.map(name => [ name, getattr(this, name) ]) + } + + format_usage() { + return this.option_strings[0] + } + + call(/*parser, namespace, values, option_string = undefined*/) { + throw new Error('.call() not defined') + } +})) + + +const BooleanOptionalAction = _camelcase_alias(_callable(class BooleanOptionalAction extends Action { + + constructor() { + let [ + option_strings, + dest, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + let _option_strings = [] + for (let option_string of option_strings) { + _option_strings.push(option_string) + + if (option_string.startsWith('--')) { + option_string = '--no-' + option_string.slice(2) + _option_strings.push(option_string) + } + } + + if (help !== undefined && default_value !== undefined) { + help += ` (default: ${default_value})` + } + + super({ + option_strings: _option_strings, + dest, + nargs: 0, + default: default_value, + type, + choices, + required, + help, + metavar + }) + } + + call(parser, namespace, values, option_string = undefined) { + if (this.option_strings.includes(option_string)) { + setattr(namespace, this.dest, !option_string.startsWith('--no-')) + } + } + + format_usage() { + return this.option_strings.join(' | ') + } +})) + + +const _StoreAction = _callable(class _StoreAction extends Action { + + constructor() { + let [ + option_strings, + dest, + nargs, + const_value, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + nargs: undefined, + const: undefined, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + if (nargs === 0) { + throw new TypeError('nargs for store actions must be != 0; if you ' + + 'have nothing to store, actions such as store ' + + 'true or store const may be more appropriate') + } + if (const_value !== undefined && nargs !== OPTIONAL) { + throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) + } + super({ + option_strings, + dest, + nargs, + const: const_value, + default: default_value, + type, + choices, + required, + help, + metavar + }) + } + + call(parser, namespace, values/*, option_string = undefined*/) { + setattr(namespace, this.dest, values) + } +}) + + +const _StoreConstAction = _callable(class _StoreConstAction extends Action { + + constructor() { + let [ + option_strings, + dest, + const_value, + default_value, + required, + help + //, metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + const: no_default, + default: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + super({ + option_strings, + dest, + nargs: 0, + const: const_value, + default: default_value, + required, + help + }) + } + + call(parser, namespace/*, values, option_string = undefined*/) { + setattr(namespace, this.dest, this.const) + } +}) + + +const _StoreTrueAction = _callable(class _StoreTrueAction extends _StoreConstAction { + + constructor() { + let [ + option_strings, + dest, + default_value, + required, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: false, + required: false, + help: undefined + }) + + super({ + option_strings, + dest, + const: true, + default: default_value, + required, + help + }) + } +}) + + +const _StoreFalseAction = _callable(class _StoreFalseAction extends _StoreConstAction { + + constructor() { + let [ + option_strings, + dest, + default_value, + required, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: true, + required: false, + help: undefined + }) + + super({ + option_strings, + dest, + const: false, + default: default_value, + required, + help + }) + } +}) + + +const _AppendAction = _callable(class _AppendAction extends Action { + + constructor() { + let [ + option_strings, + dest, + nargs, + const_value, + default_value, + type, + choices, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + nargs: undefined, + const: undefined, + default: undefined, + type: undefined, + choices: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + if (nargs === 0) { + throw new TypeError('nargs for append actions must be != 0; if arg ' + + 'strings are not supplying the value to append, ' + + 'the append const action may be more appropriate') + } + if (const_value !== undefined && nargs !== OPTIONAL) { + throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) + } + super({ + option_strings, + dest, + nargs, + const: const_value, + default: default_value, + type, + choices, + required, + help, + metavar + }) + } + + call(parser, namespace, values/*, option_string = undefined*/) { + let items = getattr(namespace, this.dest, undefined) + items = _copy_items(items) + items.push(values) + setattr(namespace, this.dest, items) + } +}) + + +const _AppendConstAction = _callable(class _AppendConstAction extends Action { + + constructor() { + let [ + option_strings, + dest, + const_value, + default_value, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + const: no_default, + default: undefined, + required: false, + help: undefined, + metavar: undefined + }) + + super({ + option_strings, + dest, + nargs: 0, + const: const_value, + default: default_value, + required, + help, + metavar + }) + } + + call(parser, namespace/*, values, option_string = undefined*/) { + let items = getattr(namespace, this.dest, undefined) + items = _copy_items(items) + items.push(this.const) + setattr(namespace, this.dest, items) + } +}) + + +const _CountAction = _callable(class _CountAction extends Action { + + constructor() { + let [ + option_strings, + dest, + default_value, + required, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: no_default, + default: undefined, + required: false, + help: undefined + }) + + super({ + option_strings, + dest, + nargs: 0, + default: default_value, + required, + help + }) + } + + call(parser, namespace/*, values, option_string = undefined*/) { + let count = getattr(namespace, this.dest, undefined) + if (count === undefined) { + count = 0 + } + setattr(namespace, this.dest, count + 1) + } +}) + + +const _HelpAction = _callable(class _HelpAction extends Action { + + constructor() { + let [ + option_strings, + dest, + default_value, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + dest: SUPPRESS, + default: SUPPRESS, + help: undefined + }) + + super({ + option_strings, + dest, + default: default_value, + nargs: 0, + help + }) + } + + call(parser/*, namespace, values, option_string = undefined*/) { + parser.print_help() + parser.exit() + } +}) + + +const _VersionAction = _callable(class _VersionAction extends Action { + + constructor() { + let [ + option_strings, + version, + dest, + default_value, + help + ] = _parse_opts(arguments, { + option_strings: no_default, + version: undefined, + dest: SUPPRESS, + default: SUPPRESS, + help: "show program's version number and exit" + }) + + super({ + option_strings, + dest, + default: default_value, + nargs: 0, + help + }) + this.version = version + } + + call(parser/*, namespace, values, option_string = undefined*/) { + let version = this.version + if (version === undefined) { + version = parser.version + } + let formatter = parser._get_formatter() + formatter.add_text(version) + parser._print_message(formatter.format_help(), process.stdout) + parser.exit() + } +}) + + +const _SubParsersAction = _camelcase_alias(_callable(class _SubParsersAction extends Action { + + constructor() { + let [ + option_strings, + prog, + parser_class, + dest, + required, + help, + metavar + ] = _parse_opts(arguments, { + option_strings: no_default, + prog: no_default, + parser_class: no_default, + dest: SUPPRESS, + required: false, + help: undefined, + metavar: undefined + }) + + let name_parser_map = {} + + super({ + option_strings, + dest, + nargs: PARSER, + choices: name_parser_map, + required, + help, + metavar + }) + + this._prog_prefix = prog + this._parser_class = parser_class + this._name_parser_map = name_parser_map + this._choices_actions = [] + } + + add_parser() { + let [ + name, + kwargs + ] = _parse_opts(arguments, { + name: no_default, + '**kwargs': no_default + }) + + // set prog from the existing prefix + if (kwargs.prog === undefined) { + kwargs.prog = sub('%s %s', this._prog_prefix, name) + } + + let aliases = getattr(kwargs, 'aliases', []) + delete kwargs.aliases + + // create a pseudo-action to hold the choice help + if ('help' in kwargs) { + let help = kwargs.help + delete kwargs.help + let choice_action = this._ChoicesPseudoAction(name, aliases, help) + this._choices_actions.push(choice_action) + } + + // create the parser and add it to the map + let parser = new this._parser_class(kwargs) + this._name_parser_map[name] = parser + + // make parser available under aliases also + for (let alias of aliases) { + this._name_parser_map[alias] = parser + } + + return parser + } + + _get_subactions() { + return this._choices_actions + } + + call(parser, namespace, values/*, option_string = undefined*/) { + let parser_name = values[0] + let arg_strings = values.slice(1) + + // set the parser name if requested + if (this.dest !== SUPPRESS) { + setattr(namespace, this.dest, parser_name) + } + + // select the parser + if (hasattr(this._name_parser_map, parser_name)) { + parser = this._name_parser_map[parser_name] + } else { + let args = {parser_name, + choices: this._name_parser_map.join(', ')} + let msg = sub('unknown parser %(parser_name)r (choices: %(choices)s)', args) + throw new ArgumentError(this, msg) + } + + // parse all the remaining options into the namespace + // store any unrecognized options on the object, so that the top + // level parser can decide what to do with them + + // In case this subparser defines new defaults, we parse them + // in a new namespace object and then update the original + // namespace for the relevant parts. + let subnamespace + [ subnamespace, arg_strings ] = parser.parse_known_args(arg_strings, undefined) + for (let [ key, value ] of Object.entries(subnamespace)) { + setattr(namespace, key, value) + } + + if (arg_strings.length) { + setdefault(namespace, _UNRECOGNIZED_ARGS_ATTR, []) + getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).push(...arg_strings) + } + } +})) + + +_SubParsersAction.prototype._ChoicesPseudoAction = _callable(class _ChoicesPseudoAction extends Action { + constructor(name, aliases, help) { + let metavar = name, dest = name + if (aliases.length) { + metavar += sub(' (%s)', aliases.join(', ')) + } + super({ option_strings: [], dest, help, metavar }) + } +}) + + +const _ExtendAction = _callable(class _ExtendAction extends _AppendAction { + call(parser, namespace, values/*, option_string = undefined*/) { + let items = getattr(namespace, this.dest, undefined) + items = _copy_items(items) + items = items.concat(values) + setattr(namespace, this.dest, items) + } +}) + + +// ============== +// Type classes +// ============== +const FileType = _callable(class FileType extends Function { + /* + * Factory for creating file object types + * + * Instances of FileType are typically passed as type= arguments to the + * ArgumentParser add_argument() method. + * + * Keyword Arguments: + * - mode -- A string indicating how the file is to be opened. Accepts the + * same values as the builtin open() function. + * - bufsize -- The file's desired buffer size. Accepts the same values as + * the builtin open() function. + * - encoding -- The file's encoding. Accepts the same values as the + * builtin open() function. + * - errors -- A string indicating how encoding and decoding errors are to + * be handled. Accepts the same value as the builtin open() function. + */ + + constructor() { + let [ + flags, + encoding, + mode, + autoClose, + emitClose, + start, + end, + highWaterMark, + fs + ] = _parse_opts(arguments, { + flags: 'r', + encoding: undefined, + mode: undefined, // 0o666 + autoClose: undefined, // true + emitClose: undefined, // false + start: undefined, // 0 + end: undefined, // Infinity + highWaterMark: undefined, // 64 * 1024 + fs: undefined + }) + + // when this class is called as a function, redirect it to .call() method of itself + super('return arguments.callee.call.apply(arguments.callee, arguments)') + + Object.defineProperty(this, 'name', { + get() { + return sub('FileType(%r)', flags) + } + }) + this._flags = flags + this._options = {} + if (encoding !== undefined) this._options.encoding = encoding + if (mode !== undefined) this._options.mode = mode + if (autoClose !== undefined) this._options.autoClose = autoClose + if (emitClose !== undefined) this._options.emitClose = emitClose + if (start !== undefined) this._options.start = start + if (end !== undefined) this._options.end = end + if (highWaterMark !== undefined) this._options.highWaterMark = highWaterMark + if (fs !== undefined) this._options.fs = fs + } + + call(string) { + // the special argument "-" means sys.std{in,out} + if (string === '-') { + if (this._flags.includes('r')) { + return process.stdin + } else if (this._flags.includes('w')) { + return process.stdout + } else { + let msg = sub('argument "-" with mode %r', this._flags) + throw new TypeError(msg) + } + } + + // all other arguments are used as file names + let fd + try { + fd = fs.openSync(string, this._flags, this._options.mode) + } catch (e) { + let args = { filename: string, error: e.message } + let message = "can't open '%(filename)s': %(error)s" + throw new ArgumentTypeError(sub(message, args)) + } + + let options = Object.assign({ fd, flags: this._flags }, this._options) + if (this._flags.includes('r')) { + return fs.createReadStream(undefined, options) + } else if (this._flags.includes('w')) { + return fs.createWriteStream(undefined, options) + } else { + let msg = sub('argument "%s" with mode %r', string, this._flags) + throw new TypeError(msg) + } + } + + [util.inspect.custom]() { + let args = [ this._flags ] + let kwargs = Object.entries(this._options).map(([ k, v ]) => { + if (k === 'mode') v = { value: v, [util.inspect.custom]() { return '0o' + this.value.toString(8) } } + return [ k, v ] + }) + let args_str = [] + .concat(args.filter(arg => arg !== -1).map(repr)) + .concat(kwargs.filter(([/*kw*/, arg]) => arg !== undefined) + .map(([kw, arg]) => sub('%s=%r', kw, arg))) + .join(', ') + return sub('%s(%s)', this.constructor.name, args_str) + } + + toString() { + return this[util.inspect.custom]() + } +}) + +// =========================== +// Optional and Positional Parsing +// =========================== +const Namespace = _callable(class Namespace extends _AttributeHolder() { + /* + * Simple object for storing attributes. + * + * Implements equality by attribute names and values, and provides a simple + * string representation. + */ + + constructor(options = {}) { + super() + Object.assign(this, options) + } +}) + +// unset string tag to mimic plain object +Namespace.prototype[Symbol.toStringTag] = undefined + + +const _ActionsContainer = _camelcase_alias(_callable(class _ActionsContainer { + + constructor() { + let [ + description, + prefix_chars, + argument_default, + conflict_handler + ] = _parse_opts(arguments, { + description: no_default, + prefix_chars: no_default, + argument_default: no_default, + conflict_handler: no_default + }) + + this.description = description + this.argument_default = argument_default + this.prefix_chars = prefix_chars + this.conflict_handler = conflict_handler + + // set up registries + this._registries = {} + + // register actions + this.register('action', undefined, _StoreAction) + this.register('action', 'store', _StoreAction) + this.register('action', 'store_const', _StoreConstAction) + this.register('action', 'store_true', _StoreTrueAction) + this.register('action', 'store_false', _StoreFalseAction) + this.register('action', 'append', _AppendAction) + this.register('action', 'append_const', _AppendConstAction) + this.register('action', 'count', _CountAction) + this.register('action', 'help', _HelpAction) + this.register('action', 'version', _VersionAction) + this.register('action', 'parsers', _SubParsersAction) + this.register('action', 'extend', _ExtendAction) + // LEGACY (v1 compatibility): camelcase variants + ;[ 'storeConst', 'storeTrue', 'storeFalse', 'appendConst' ].forEach(old_name => { + let new_name = _to_new_name(old_name) + this.register('action', old_name, util.deprecate(this._registry_get('action', new_name), + sub('{action: "%s"} is renamed to {action: "%s"}', old_name, new_name))) + }) + // end + + // raise an exception if the conflict handler is invalid + this._get_handler() + + // action storage + this._actions = [] + this._option_string_actions = {} + + // groups + this._action_groups = [] + this._mutually_exclusive_groups = [] + + // defaults storage + this._defaults = {} + + // determines whether an "option" looks like a negative number + this._negative_number_matcher = /^-\d+$|^-\d*\.\d+$/ + + // whether or not there are any optionals that look like negative + // numbers -- uses a list so it can be shared and edited + this._has_negative_number_optionals = [] + } + + // ==================== + // Registration methods + // ==================== + register(registry_name, value, object) { + let registry = setdefault(this._registries, registry_name, {}) + registry[value] = object + } + + _registry_get(registry_name, value, default_value = undefined) { + return getattr(this._registries[registry_name], value, default_value) + } + + // ================================== + // Namespace default accessor methods + // ================================== + set_defaults(kwargs) { + Object.assign(this._defaults, kwargs) + + // if these defaults match any existing arguments, replace + // the previous default on the object with the new one + for (let action of this._actions) { + if (action.dest in kwargs) { + action.default = kwargs[action.dest] + } + } + } + + get_default(dest) { + for (let action of this._actions) { + if (action.dest === dest && action.default !== undefined) { + return action.default + } + } + return this._defaults[dest] + } + + + // ======================= + // Adding argument actions + // ======================= + add_argument() { + /* + * add_argument(dest, ..., name=value, ...) + * add_argument(option_string, option_string, ..., name=value, ...) + */ + let [ + args, + kwargs + ] = _parse_opts(arguments, { + '*args': no_default, + '**kwargs': no_default + }) + // LEGACY (v1 compatibility), old-style add_argument([ args ], { options }) + if (args.length === 1 && Array.isArray(args[0])) { + args = args[0] + deprecate('argument-array', + sub('use add_argument(%(args)s, {...}) instead of add_argument([ %(args)s ], { ... })', { + args: args.map(repr).join(', ') + })) + } + // end + + // if no positional args are supplied or only one is supplied and + // it doesn't look like an option string, parse a positional + // argument + let chars = this.prefix_chars + if (!args.length || args.length === 1 && !chars.includes(args[0][0])) { + if (args.length && 'dest' in kwargs) { + throw new TypeError('dest supplied twice for positional argument') + } + kwargs = this._get_positional_kwargs(...args, kwargs) + + // otherwise, we're adding an optional argument + } else { + kwargs = this._get_optional_kwargs(...args, kwargs) + } + + // if no default was supplied, use the parser-level default + if (!('default' in kwargs)) { + let dest = kwargs.dest + if (dest in this._defaults) { + kwargs.default = this._defaults[dest] + } else if (this.argument_default !== undefined) { + kwargs.default = this.argument_default + } + } + + // create the action object, and add it to the parser + let action_class = this._pop_action_class(kwargs) + if (typeof action_class !== 'function') { + throw new TypeError(sub('unknown action "%s"', action_class)) + } + // eslint-disable-next-line new-cap + let action = new action_class(kwargs) + + // raise an error if the action type is not callable + let type_func = this._registry_get('type', action.type, action.type) + if (typeof type_func !== 'function') { + throw new TypeError(sub('%r is not callable', type_func)) + } + + if (type_func === FileType) { + throw new TypeError(sub('%r is a FileType class object, instance of it' + + ' must be passed', type_func)) + } + + // raise an error if the metavar does not match the type + if ('_get_formatter' in this) { + try { + this._get_formatter()._format_args(action, undefined) + } catch (err) { + // check for 'invalid nargs value' is an artifact of TypeError and ValueError in js being the same + if (err instanceof TypeError && err.message !== 'invalid nargs value') { + throw new TypeError('length of metavar tuple does not match nargs') + } else { + throw err + } + } + } + + return this._add_action(action) + } + + add_argument_group() { + let group = _ArgumentGroup(this, ...arguments) + this._action_groups.push(group) + return group + } + + add_mutually_exclusive_group() { + // eslint-disable-next-line no-use-before-define + let group = _MutuallyExclusiveGroup(this, ...arguments) + this._mutually_exclusive_groups.push(group) + return group + } + + _add_action(action) { + // resolve any conflicts + this._check_conflict(action) + + // add to actions list + this._actions.push(action) + action.container = this + + // index the action by any option strings it has + for (let option_string of action.option_strings) { + this._option_string_actions[option_string] = action + } + + // set the flag if any option strings look like negative numbers + for (let option_string of action.option_strings) { + if (this._negative_number_matcher.test(option_string)) { + if (!this._has_negative_number_optionals.length) { + this._has_negative_number_optionals.push(true) + } + } + } + + // return the created action + return action + } + + _remove_action(action) { + _array_remove(this._actions, action) + } + + _add_container_actions(container) { + // collect groups by titles + let title_group_map = {} + for (let group of this._action_groups) { + if (group.title in title_group_map) { + let msg = 'cannot merge actions - two groups are named %r' + throw new TypeError(sub(msg, group.title)) + } + title_group_map[group.title] = group + } + + // map each action to its group + let group_map = new Map() + for (let group of container._action_groups) { + + // if a group with the title exists, use that, otherwise + // create a new group matching the container's group + if (!(group.title in title_group_map)) { + title_group_map[group.title] = this.add_argument_group({ + title: group.title, + description: group.description, + conflict_handler: group.conflict_handler + }) + } + + // map the actions to their new group + for (let action of group._group_actions) { + group_map.set(action, title_group_map[group.title]) + } + } + + // add container's mutually exclusive groups + // NOTE: if add_mutually_exclusive_group ever gains title= and + // description= then this code will need to be expanded as above + for (let group of container._mutually_exclusive_groups) { + let mutex_group = this.add_mutually_exclusive_group({ + required: group.required + }) + + // map the actions to their new mutex group + for (let action of group._group_actions) { + group_map.set(action, mutex_group) + } + } + + // add all actions to this container or their group + for (let action of container._actions) { + group_map.get(action)._add_action(action) + } + } + + _get_positional_kwargs() { + let [ + dest, + kwargs + ] = _parse_opts(arguments, { + dest: no_default, + '**kwargs': no_default + }) + + // make sure required is not specified + if ('required' in kwargs) { + let msg = "'required' is an invalid argument for positionals" + throw new TypeError(msg) + } + + // mark positional arguments as required if at least one is + // always required + if (![OPTIONAL, ZERO_OR_MORE].includes(kwargs.nargs)) { + kwargs.required = true + } + if (kwargs.nargs === ZERO_OR_MORE && !('default' in kwargs)) { + kwargs.required = true + } + + // return the keyword arguments with no option strings + return Object.assign(kwargs, { dest, option_strings: [] }) + } + + _get_optional_kwargs() { + let [ + args, + kwargs + ] = _parse_opts(arguments, { + '*args': no_default, + '**kwargs': no_default + }) + + // determine short and long option strings + let option_strings = [] + let long_option_strings = [] + let option_string + for (option_string of args) { + // error on strings that don't start with an appropriate prefix + if (!this.prefix_chars.includes(option_string[0])) { + let args = {option: option_string, + prefix_chars: this.prefix_chars} + let msg = 'invalid option string %(option)r: ' + + 'must start with a character %(prefix_chars)r' + throw new TypeError(sub(msg, args)) + } + + // strings starting with two prefix characters are long options + option_strings.push(option_string) + if (option_string.length > 1 && this.prefix_chars.includes(option_string[1])) { + long_option_strings.push(option_string) + } + } + + // infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + let dest = kwargs.dest + delete kwargs.dest + if (dest === undefined) { + let dest_option_string + if (long_option_strings.length) { + dest_option_string = long_option_strings[0] + } else { + dest_option_string = option_strings[0] + } + dest = _string_lstrip(dest_option_string, this.prefix_chars) + if (!dest) { + let msg = 'dest= is required for options like %r' + throw new TypeError(sub(msg, option_string)) + } + dest = dest.replace(/-/g, '_') + } + + // return the updated keyword arguments + return Object.assign(kwargs, { dest, option_strings }) + } + + _pop_action_class(kwargs, default_value = undefined) { + let action = getattr(kwargs, 'action', default_value) + delete kwargs.action + return this._registry_get('action', action, action) + } + + _get_handler() { + // determine function from conflict handler string + let handler_func_name = sub('_handle_conflict_%s', this.conflict_handler) + if (typeof this[handler_func_name] === 'function') { + return this[handler_func_name] + } else { + let msg = 'invalid conflict_resolution value: %r' + throw new TypeError(sub(msg, this.conflict_handler)) + } + } + + _check_conflict(action) { + + // find all options that conflict with this option + let confl_optionals = [] + for (let option_string of action.option_strings) { + if (hasattr(this._option_string_actions, option_string)) { + let confl_optional = this._option_string_actions[option_string] + confl_optionals.push([ option_string, confl_optional ]) + } + } + + // resolve any conflicts + if (confl_optionals.length) { + let conflict_handler = this._get_handler() + conflict_handler.call(this, action, confl_optionals) + } + } + + _handle_conflict_error(action, conflicting_actions) { + let message = conflicting_actions.length === 1 ? + 'conflicting option string: %s' : + 'conflicting option strings: %s' + let conflict_string = conflicting_actions.map(([ option_string/*, action*/ ]) => option_string).join(', ') + throw new ArgumentError(action, sub(message, conflict_string)) + } + + _handle_conflict_resolve(action, conflicting_actions) { + + // remove all conflicting options + for (let [ option_string, action ] of conflicting_actions) { + + // remove the conflicting option + _array_remove(action.option_strings, option_string) + delete this._option_string_actions[option_string] + + // if the option now has no option string, remove it from the + // container holding it + if (!action.option_strings.length) { + action.container._remove_action(action) + } + } + } +})) + + +const _ArgumentGroup = _callable(class _ArgumentGroup extends _ActionsContainer { + + constructor() { + let [ + container, + title, + description, + kwargs + ] = _parse_opts(arguments, { + container: no_default, + title: undefined, + description: undefined, + '**kwargs': no_default + }) + + // add any missing keyword arguments by checking the container + setdefault(kwargs, 'conflict_handler', container.conflict_handler) + setdefault(kwargs, 'prefix_chars', container.prefix_chars) + setdefault(kwargs, 'argument_default', container.argument_default) + super(Object.assign({ description }, kwargs)) + + // group attributes + this.title = title + this._group_actions = [] + + // share most attributes with the container + this._registries = container._registries + this._actions = container._actions + this._option_string_actions = container._option_string_actions + this._defaults = container._defaults + this._has_negative_number_optionals = + container._has_negative_number_optionals + this._mutually_exclusive_groups = container._mutually_exclusive_groups + } + + _add_action(action) { + action = super._add_action(action) + this._group_actions.push(action) + return action + } + + _remove_action(action) { + super._remove_action(action) + _array_remove(this._group_actions, action) + } +}) + + +const _MutuallyExclusiveGroup = _callable(class _MutuallyExclusiveGroup extends _ArgumentGroup { + + constructor() { + let [ + container, + required + ] = _parse_opts(arguments, { + container: no_default, + required: false + }) + + super(container) + this.required = required + this._container = container + } + + _add_action(action) { + if (action.required) { + let msg = 'mutually exclusive arguments must be optional' + throw new TypeError(msg) + } + action = this._container._add_action(action) + this._group_actions.push(action) + return action + } + + _remove_action(action) { + this._container._remove_action(action) + _array_remove(this._group_actions, action) + } +}) + + +const ArgumentParser = _camelcase_alias(_callable(class ArgumentParser extends _AttributeHolder(_ActionsContainer) { + /* + * Object for parsing command line strings into Python objects. + * + * Keyword Arguments: + * - prog -- The name of the program (default: sys.argv[0]) + * - usage -- A usage message (default: auto-generated from arguments) + * - description -- A description of what the program does + * - epilog -- Text following the argument descriptions + * - parents -- Parsers whose arguments should be copied into this one + * - formatter_class -- HelpFormatter class for printing help messages + * - prefix_chars -- Characters that prefix optional arguments + * - fromfile_prefix_chars -- Characters that prefix files containing + * additional arguments + * - argument_default -- The default value for all arguments + * - conflict_handler -- String indicating how to handle conflicts + * - add_help -- Add a -h/-help option + * - allow_abbrev -- Allow long options to be abbreviated unambiguously + * - exit_on_error -- Determines whether or not ArgumentParser exits with + * error info when an error occurs + */ + + constructor() { + let [ + prog, + usage, + description, + epilog, + parents, + formatter_class, + prefix_chars, + fromfile_prefix_chars, + argument_default, + conflict_handler, + add_help, + allow_abbrev, + exit_on_error, + debug, // LEGACY (v1 compatibility), debug mode + version // LEGACY (v1 compatibility), version + ] = _parse_opts(arguments, { + prog: undefined, + usage: undefined, + description: undefined, + epilog: undefined, + parents: [], + formatter_class: HelpFormatter, + prefix_chars: '-', + fromfile_prefix_chars: undefined, + argument_default: undefined, + conflict_handler: 'error', + add_help: true, + allow_abbrev: true, + exit_on_error: true, + debug: undefined, // LEGACY (v1 compatibility), debug mode + version: undefined // LEGACY (v1 compatibility), version + }) + + // LEGACY (v1 compatibility) + if (debug !== undefined) { + deprecate('debug', + 'The "debug" argument to ArgumentParser is deprecated. Please ' + + 'override ArgumentParser.exit function instead.' + ) + } + + if (version !== undefined) { + deprecate('version', + 'The "version" argument to ArgumentParser is deprecated. Please use ' + + "add_argument(..., { action: 'version', version: 'N', ... }) instead." + ) + } + // end + + super({ + description, + prefix_chars, + argument_default, + conflict_handler + }) + + // default setting for prog + if (prog === undefined) { + prog = path.basename(get_argv()[0] || '') + } + + this.prog = prog + this.usage = usage + this.epilog = epilog + this.formatter_class = formatter_class + this.fromfile_prefix_chars = fromfile_prefix_chars + this.add_help = add_help + this.allow_abbrev = allow_abbrev + this.exit_on_error = exit_on_error + // LEGACY (v1 compatibility), debug mode + this.debug = debug + // end + + this._positionals = this.add_argument_group('positional arguments') + this._optionals = this.add_argument_group('optional arguments') + this._subparsers = undefined + + // register types + function identity(string) { + return string + } + this.register('type', undefined, identity) + this.register('type', null, identity) + this.register('type', 'auto', identity) + this.register('type', 'int', function (x) { + let result = Number(x) + if (!Number.isInteger(result)) { + throw new TypeError(sub('could not convert string to int: %r', x)) + } + return result + }) + this.register('type', 'float', function (x) { + let result = Number(x) + if (isNaN(result)) { + throw new TypeError(sub('could not convert string to float: %r', x)) + } + return result + }) + this.register('type', 'str', String) + // LEGACY (v1 compatibility): custom types + this.register('type', 'string', + util.deprecate(String, 'use {type:"str"} or {type:String} instead of {type:"string"}')) + // end + + // add help argument if necessary + // (using explicit default to override global argument_default) + let default_prefix = prefix_chars.includes('-') ? '-' : prefix_chars[0] + if (this.add_help) { + this.add_argument( + default_prefix + 'h', + default_prefix.repeat(2) + 'help', + { + action: 'help', + default: SUPPRESS, + help: 'show this help message and exit' + } + ) + } + // LEGACY (v1 compatibility), version + if (version) { + this.add_argument( + default_prefix + 'v', + default_prefix.repeat(2) + 'version', + { + action: 'version', + default: SUPPRESS, + version: this.version, + help: "show program's version number and exit" + } + ) + } + // end + + // add parent arguments and defaults + for (let parent of parents) { + this._add_container_actions(parent) + Object.assign(this._defaults, parent._defaults) + } + } + + // ======================= + // Pretty __repr__ methods + // ======================= + _get_kwargs() { + let names = [ + 'prog', + 'usage', + 'description', + 'formatter_class', + 'conflict_handler', + 'add_help' + ] + return names.map(name => [ name, getattr(this, name) ]) + } + + // ================================== + // Optional/Positional adding methods + // ================================== + add_subparsers() { + let [ + kwargs + ] = _parse_opts(arguments, { + '**kwargs': no_default + }) + + if (this._subparsers !== undefined) { + this.error('cannot have multiple subparser arguments') + } + + // add the parser class to the arguments if it's not present + setdefault(kwargs, 'parser_class', this.constructor) + + if ('title' in kwargs || 'description' in kwargs) { + let title = getattr(kwargs, 'title', 'subcommands') + let description = getattr(kwargs, 'description', undefined) + delete kwargs.title + delete kwargs.description + this._subparsers = this.add_argument_group(title, description) + } else { + this._subparsers = this._positionals + } + + // prog defaults to the usage message of this parser, skipping + // optional arguments and with no "usage:" prefix + if (kwargs.prog === undefined) { + let formatter = this._get_formatter() + let positionals = this._get_positional_actions() + let groups = this._mutually_exclusive_groups + formatter.add_usage(this.usage, positionals, groups, '') + kwargs.prog = formatter.format_help().trim() + } + + // create the parsers action and add it to the positionals list + let parsers_class = this._pop_action_class(kwargs, 'parsers') + // eslint-disable-next-line new-cap + let action = new parsers_class(Object.assign({ option_strings: [] }, kwargs)) + this._subparsers._add_action(action) + + // return the created parsers action + return action + } + + _add_action(action) { + if (action.option_strings.length) { + this._optionals._add_action(action) + } else { + this._positionals._add_action(action) + } + return action + } + + _get_optional_actions() { + return this._actions.filter(action => action.option_strings.length) + } + + _get_positional_actions() { + return this._actions.filter(action => !action.option_strings.length) + } + + // ===================================== + // Command line argument parsing methods + // ===================================== + parse_args(args = undefined, namespace = undefined) { + let argv + [ args, argv ] = this.parse_known_args(args, namespace) + if (argv && argv.length > 0) { + let msg = 'unrecognized arguments: %s' + this.error(sub(msg, argv.join(' '))) + } + return args + } + + parse_known_args(args = undefined, namespace = undefined) { + if (args === undefined) { + args = get_argv().slice(1) + } + + // default Namespace built from parser defaults + if (namespace === undefined) { + namespace = new Namespace() + } + + // add any action defaults that aren't present + for (let action of this._actions) { + if (action.dest !== SUPPRESS) { + if (!hasattr(namespace, action.dest)) { + if (action.default !== SUPPRESS) { + setattr(namespace, action.dest, action.default) + } + } + } + } + + // add any parser defaults that aren't present + for (let dest of Object.keys(this._defaults)) { + if (!hasattr(namespace, dest)) { + setattr(namespace, dest, this._defaults[dest]) + } + } + + // parse the arguments and exit if there are any errors + if (this.exit_on_error) { + try { + [ namespace, args ] = this._parse_known_args(args, namespace) + } catch (err) { + if (err instanceof ArgumentError) { + this.error(err.message) + } else { + throw err + } + } + } else { + [ namespace, args ] = this._parse_known_args(args, namespace) + } + + if (hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) { + args = args.concat(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) + delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) + } + + return [ namespace, args ] + } + + _parse_known_args(arg_strings, namespace) { + // replace arg strings that are file references + if (this.fromfile_prefix_chars !== undefined) { + arg_strings = this._read_args_from_files(arg_strings) + } + + // map all mutually exclusive arguments to the other arguments + // they can't occur with + let action_conflicts = new Map() + for (let mutex_group of this._mutually_exclusive_groups) { + let group_actions = mutex_group._group_actions + for (let [ i, mutex_action ] of Object.entries(mutex_group._group_actions)) { + let conflicts = action_conflicts.get(mutex_action) || [] + conflicts = conflicts.concat(group_actions.slice(0, +i)) + conflicts = conflicts.concat(group_actions.slice(+i + 1)) + action_conflicts.set(mutex_action, conflicts) + } + } + + // find all option indices, and determine the arg_string_pattern + // which has an 'O' if there is an option at an index, + // an 'A' if there is an argument, or a '-' if there is a '--' + let option_string_indices = {} + let arg_string_pattern_parts = [] + let arg_strings_iter = Object.entries(arg_strings)[Symbol.iterator]() + for (let [ i, arg_string ] of arg_strings_iter) { + + // all args after -- are non-options + if (arg_string === '--') { + arg_string_pattern_parts.push('-') + for ([ i, arg_string ] of arg_strings_iter) { + arg_string_pattern_parts.push('A') + } + + // otherwise, add the arg to the arg strings + // and note the index if it was an option + } else { + let option_tuple = this._parse_optional(arg_string) + let pattern + if (option_tuple === undefined) { + pattern = 'A' + } else { + option_string_indices[i] = option_tuple + pattern = 'O' + } + arg_string_pattern_parts.push(pattern) + } + } + + // join the pieces together to form the pattern + let arg_strings_pattern = arg_string_pattern_parts.join('') + + // converts arg strings to the appropriate and then takes the action + let seen_actions = new Set() + let seen_non_default_actions = new Set() + let extras + + let take_action = (action, argument_strings, option_string = undefined) => { + seen_actions.add(action) + let argument_values = this._get_values(action, argument_strings) + + // error if this argument is not allowed with other previously + // seen arguments, assuming that actions that use the default + // value don't really count as "present" + if (argument_values !== action.default) { + seen_non_default_actions.add(action) + for (let conflict_action of action_conflicts.get(action) || []) { + if (seen_non_default_actions.has(conflict_action)) { + let msg = 'not allowed with argument %s' + let action_name = _get_action_name(conflict_action) + throw new ArgumentError(action, sub(msg, action_name)) + } + } + } + + // take the action if we didn't receive a SUPPRESS value + // (e.g. from a default) + if (argument_values !== SUPPRESS) { + action(this, namespace, argument_values, option_string) + } + } + + // function to convert arg_strings into an optional action + let consume_optional = start_index => { + + // get the optional identified at this index + let option_tuple = option_string_indices[start_index] + let [ action, option_string, explicit_arg ] = option_tuple + + // identify additional optionals in the same arg string + // (e.g. -xyz is the same as -x -y -z if no args are required) + let action_tuples = [] + let stop + for (;;) { + + // if we found no optional action, skip it + if (action === undefined) { + extras.push(arg_strings[start_index]) + return start_index + 1 + } + + // if there is an explicit argument, try to match the + // optional's string arguments to only this + if (explicit_arg !== undefined) { + let arg_count = this._match_argument(action, 'A') + + // if the action is a single-dash option and takes no + // arguments, try to parse more single-dash options out + // of the tail of the option string + let chars = this.prefix_chars + if (arg_count === 0 && !chars.includes(option_string[1])) { + action_tuples.push([ action, [], option_string ]) + let char = option_string[0] + option_string = char + explicit_arg[0] + let new_explicit_arg = explicit_arg.slice(1) || undefined + let optionals_map = this._option_string_actions + if (hasattr(optionals_map, option_string)) { + action = optionals_map[option_string] + explicit_arg = new_explicit_arg + } else { + let msg = 'ignored explicit argument %r' + throw new ArgumentError(action, sub(msg, explicit_arg)) + } + + // if the action expect exactly one argument, we've + // successfully matched the option; exit the loop + } else if (arg_count === 1) { + stop = start_index + 1 + let args = [ explicit_arg ] + action_tuples.push([ action, args, option_string ]) + break + + // error if a double-dash option did not use the + // explicit argument + } else { + let msg = 'ignored explicit argument %r' + throw new ArgumentError(action, sub(msg, explicit_arg)) + } + + // if there is no explicit argument, try to match the + // optional's string arguments with the following strings + // if successful, exit the loop + } else { + let start = start_index + 1 + let selected_patterns = arg_strings_pattern.slice(start) + let arg_count = this._match_argument(action, selected_patterns) + stop = start + arg_count + let args = arg_strings.slice(start, stop) + action_tuples.push([ action, args, option_string ]) + break + } + } + + // add the Optional to the list and return the index at which + // the Optional's string args stopped + assert(action_tuples.length) + for (let [ action, args, option_string ] of action_tuples) { + take_action(action, args, option_string) + } + return stop + } + + // the list of Positionals left to be parsed; this is modified + // by consume_positionals() + let positionals = this._get_positional_actions() + + // function to convert arg_strings into positional actions + let consume_positionals = start_index => { + // match as many Positionals as possible + let selected_pattern = arg_strings_pattern.slice(start_index) + let arg_counts = this._match_arguments_partial(positionals, selected_pattern) + + // slice off the appropriate arg strings for each Positional + // and add the Positional and its args to the list + for (let i = 0; i < positionals.length && i < arg_counts.length; i++) { + let action = positionals[i] + let arg_count = arg_counts[i] + let args = arg_strings.slice(start_index, start_index + arg_count) + start_index += arg_count + take_action(action, args) + } + + // slice off the Positionals that we just parsed and return the + // index at which the Positionals' string args stopped + positionals = positionals.slice(arg_counts.length) + return start_index + } + + // consume Positionals and Optionals alternately, until we have + // passed the last option string + extras = [] + let start_index = 0 + let max_option_string_index = Math.max(-1, ...Object.keys(option_string_indices).map(Number)) + while (start_index <= max_option_string_index) { + + // consume any Positionals preceding the next option + let next_option_string_index = Math.min( + // eslint-disable-next-line no-loop-func + ...Object.keys(option_string_indices).map(Number).filter(index => index >= start_index) + ) + if (start_index !== next_option_string_index) { + let positionals_end_index = consume_positionals(start_index) + + // only try to parse the next optional if we didn't consume + // the option string during the positionals parsing + if (positionals_end_index > start_index) { + start_index = positionals_end_index + continue + } else { + start_index = positionals_end_index + } + } + + // if we consumed all the positionals we could and we're not + // at the index of an option string, there were extra arguments + if (!(start_index in option_string_indices)) { + let strings = arg_strings.slice(start_index, next_option_string_index) + extras = extras.concat(strings) + start_index = next_option_string_index + } + + // consume the next optional and any arguments for it + start_index = consume_optional(start_index) + } + + // consume any positionals following the last Optional + let stop_index = consume_positionals(start_index) + + // if we didn't consume all the argument strings, there were extras + extras = extras.concat(arg_strings.slice(stop_index)) + + // make sure all required actions were present and also convert + // action defaults which were not given as arguments + let required_actions = [] + for (let action of this._actions) { + if (!seen_actions.has(action)) { + if (action.required) { + required_actions.push(_get_action_name(action)) + } else { + // Convert action default now instead of doing it before + // parsing arguments to avoid calling convert functions + // twice (which may fail) if the argument was given, but + // only if it was defined already in the namespace + if (action.default !== undefined && + typeof action.default === 'string' && + hasattr(namespace, action.dest) && + action.default === getattr(namespace, action.dest)) { + setattr(namespace, action.dest, + this._get_value(action, action.default)) + } + } + } + } + + if (required_actions.length) { + this.error(sub('the following arguments are required: %s', + required_actions.join(', '))) + } + + // make sure all required groups had one option present + for (let group of this._mutually_exclusive_groups) { + if (group.required) { + let no_actions_used = true + for (let action of group._group_actions) { + if (seen_non_default_actions.has(action)) { + no_actions_used = false + break + } + } + + // if no actions were used, report the error + if (no_actions_used) { + let names = group._group_actions + .filter(action => action.help !== SUPPRESS) + .map(action => _get_action_name(action)) + let msg = 'one of the arguments %s is required' + this.error(sub(msg, names.join(' '))) + } + } + } + + // return the updated namespace and the extra arguments + return [ namespace, extras ] + } + + _read_args_from_files(arg_strings) { + // expand arguments referencing files + let new_arg_strings = [] + for (let arg_string of arg_strings) { + + // for regular arguments, just add them back into the list + if (!arg_string || !this.fromfile_prefix_chars.includes(arg_string[0])) { + new_arg_strings.push(arg_string) + + // replace arguments referencing files with the file content + } else { + try { + let args_file = fs.readFileSync(arg_string.slice(1), 'utf8') + let arg_strings = [] + for (let arg_line of splitlines(args_file)) { + for (let arg of this.convert_arg_line_to_args(arg_line)) { + arg_strings.push(arg) + } + } + arg_strings = this._read_args_from_files(arg_strings) + new_arg_strings = new_arg_strings.concat(arg_strings) + } catch (err) { + this.error(err.message) + } + } + } + + // return the modified argument list + return new_arg_strings + } + + convert_arg_line_to_args(arg_line) { + return [arg_line] + } + + _match_argument(action, arg_strings_pattern) { + // match the pattern for this action to the arg strings + let nargs_pattern = this._get_nargs_pattern(action) + let match = arg_strings_pattern.match(new RegExp('^' + nargs_pattern)) + + // raise an exception if we weren't able to find a match + if (match === null) { + let nargs_errors = { + undefined: 'expected one argument', + [OPTIONAL]: 'expected at most one argument', + [ONE_OR_MORE]: 'expected at least one argument' + } + let msg = nargs_errors[action.nargs] + if (msg === undefined) { + msg = sub(action.nargs === 1 ? 'expected %s argument' : 'expected %s arguments', action.nargs) + } + throw new ArgumentError(action, msg) + } + + // return the number of arguments matched + return match[1].length + } + + _match_arguments_partial(actions, arg_strings_pattern) { + // progressively shorten the actions list by slicing off the + // final actions until we find a match + let result = [] + for (let i of range(actions.length, 0, -1)) { + let actions_slice = actions.slice(0, i) + let pattern = actions_slice.map(action => this._get_nargs_pattern(action)).join('') + let match = arg_strings_pattern.match(new RegExp('^' + pattern)) + if (match !== null) { + result = result.concat(match.slice(1).map(string => string.length)) + break + } + } + + // return the list of arg string counts + return result + } + + _parse_optional(arg_string) { + // if it's an empty string, it was meant to be a positional + if (!arg_string) { + return undefined + } + + // if it doesn't start with a prefix, it was meant to be positional + if (!this.prefix_chars.includes(arg_string[0])) { + return undefined + } + + // if the option string is present in the parser, return the action + if (arg_string in this._option_string_actions) { + let action = this._option_string_actions[arg_string] + return [ action, arg_string, undefined ] + } + + // if it's just a single character, it was meant to be positional + if (arg_string.length === 1) { + return undefined + } + + // if the option string before the "=" is present, return the action + if (arg_string.includes('=')) { + let [ option_string, explicit_arg ] = _string_split(arg_string, '=', 1) + if (option_string in this._option_string_actions) { + let action = this._option_string_actions[option_string] + return [ action, option_string, explicit_arg ] + } + } + + // search through all possible prefixes of the option string + // and all actions in the parser for possible interpretations + let option_tuples = this._get_option_tuples(arg_string) + + // if multiple actions match, the option string was ambiguous + if (option_tuples.length > 1) { + let options = option_tuples.map(([ /*action*/, option_string/*, explicit_arg*/ ]) => option_string).join(', ') + let args = {option: arg_string, matches: options} + let msg = 'ambiguous option: %(option)s could match %(matches)s' + this.error(sub(msg, args)) + + // if exactly one action matched, this segmentation is good, + // so return the parsed action + } else if (option_tuples.length === 1) { + let [ option_tuple ] = option_tuples + return option_tuple + } + + // if it was not found as an option, but it looks like a negative + // number, it was meant to be positional + // unless there are negative-number-like options + if (this._negative_number_matcher.test(arg_string)) { + if (!this._has_negative_number_optionals.length) { + return undefined + } + } + + // if it contains a space, it was meant to be a positional + if (arg_string.includes(' ')) { + return undefined + } + + // it was meant to be an optional but there is no such option + // in this parser (though it might be a valid option in a subparser) + return [ undefined, arg_string, undefined ] + } + + _get_option_tuples(option_string) { + let result = [] + + // option strings starting with two prefix characters are only + // split at the '=' + let chars = this.prefix_chars + if (chars.includes(option_string[0]) && chars.includes(option_string[1])) { + if (this.allow_abbrev) { + let option_prefix, explicit_arg + if (option_string.includes('=')) { + [ option_prefix, explicit_arg ] = _string_split(option_string, '=', 1) + } else { + option_prefix = option_string + explicit_arg = undefined + } + for (let option_string of Object.keys(this._option_string_actions)) { + if (option_string.startsWith(option_prefix)) { + let action = this._option_string_actions[option_string] + let tup = [ action, option_string, explicit_arg ] + result.push(tup) + } + } + } + + // single character options can be concatenated with their arguments + // but multiple character options always have to have their argument + // separate + } else if (chars.includes(option_string[0]) && !chars.includes(option_string[1])) { + let option_prefix = option_string + let explicit_arg = undefined + let short_option_prefix = option_string.slice(0, 2) + let short_explicit_arg = option_string.slice(2) + + for (let option_string of Object.keys(this._option_string_actions)) { + if (option_string === short_option_prefix) { + let action = this._option_string_actions[option_string] + let tup = [ action, option_string, short_explicit_arg ] + result.push(tup) + } else if (option_string.startsWith(option_prefix)) { + let action = this._option_string_actions[option_string] + let tup = [ action, option_string, explicit_arg ] + result.push(tup) + } + } + + // shouldn't ever get here + } else { + this.error(sub('unexpected option string: %s', option_string)) + } + + // return the collected option tuples + return result + } + + _get_nargs_pattern(action) { + // in all examples below, we have to allow for '--' args + // which are represented as '-' in the pattern + let nargs = action.nargs + let nargs_pattern + + // the default (None) is assumed to be a single argument + if (nargs === undefined) { + nargs_pattern = '(-*A-*)' + + // allow zero or one arguments + } else if (nargs === OPTIONAL) { + nargs_pattern = '(-*A?-*)' + + // allow zero or more arguments + } else if (nargs === ZERO_OR_MORE) { + nargs_pattern = '(-*[A-]*)' + + // allow one or more arguments + } else if (nargs === ONE_OR_MORE) { + nargs_pattern = '(-*A[A-]*)' + + // allow any number of options or arguments + } else if (nargs === REMAINDER) { + nargs_pattern = '([-AO]*)' + + // allow one argument followed by any number of options or arguments + } else if (nargs === PARSER) { + nargs_pattern = '(-*A[-AO]*)' + + // suppress action, like nargs=0 + } else if (nargs === SUPPRESS) { + nargs_pattern = '(-*-*)' + + // all others should be integers + } else { + nargs_pattern = sub('(-*%s-*)', 'A'.repeat(nargs).split('').join('-*')) + } + + // if this is an optional action, -- is not allowed + if (action.option_strings.length) { + nargs_pattern = nargs_pattern.replace(/-\*/g, '') + nargs_pattern = nargs_pattern.replace(/-/g, '') + } + + // return the pattern + return nargs_pattern + } + + // ======================== + // Alt command line argument parsing, allowing free intermix + // ======================== + + parse_intermixed_args(args = undefined, namespace = undefined) { + let argv + [ args, argv ] = this.parse_known_intermixed_args(args, namespace) + if (argv.length) { + let msg = 'unrecognized arguments: %s' + this.error(sub(msg, argv.join(' '))) + } + return args + } + + parse_known_intermixed_args(args = undefined, namespace = undefined) { + // returns a namespace and list of extras + // + // positional can be freely intermixed with optionals. optionals are + // first parsed with all positional arguments deactivated. The 'extras' + // are then parsed. If the parser definition is incompatible with the + // intermixed assumptions (e.g. use of REMAINDER, subparsers) a + // TypeError is raised. + // + // positionals are 'deactivated' by setting nargs and default to + // SUPPRESS. This blocks the addition of that positional to the + // namespace + + let extras + let positionals = this._get_positional_actions() + let a = positionals.filter(action => [ PARSER, REMAINDER ].includes(action.nargs)) + if (a.length) { + throw new TypeError(sub('parse_intermixed_args: positional arg' + + ' with nargs=%s', a[0].nargs)) + } + + for (let group of this._mutually_exclusive_groups) { + for (let action of group._group_actions) { + if (positionals.includes(action)) { + throw new TypeError('parse_intermixed_args: positional in' + + ' mutuallyExclusiveGroup') + } + } + } + + let save_usage + try { + save_usage = this.usage + let remaining_args + try { + if (this.usage === undefined) { + // capture the full usage for use in error messages + this.usage = this.format_usage().slice(7) + } + for (let action of positionals) { + // deactivate positionals + action.save_nargs = action.nargs + // action.nargs = 0 + action.nargs = SUPPRESS + action.save_default = action.default + action.default = SUPPRESS + } + [ namespace, remaining_args ] = this.parse_known_args(args, + namespace) + for (let action of positionals) { + // remove the empty positional values from namespace + let attr = getattr(namespace, action.dest) + if (Array.isArray(attr) && attr.length === 0) { + // eslint-disable-next-line no-console + console.warn(sub('Do not expect %s in %s', action.dest, namespace)) + delattr(namespace, action.dest) + } + } + } finally { + // restore nargs and usage before exiting + for (let action of positionals) { + action.nargs = action.save_nargs + action.default = action.save_default + } + } + let optionals = this._get_optional_actions() + try { + // parse positionals. optionals aren't normally required, but + // they could be, so make sure they aren't. + for (let action of optionals) { + action.save_required = action.required + action.required = false + } + for (let group of this._mutually_exclusive_groups) { + group.save_required = group.required + group.required = false + } + [ namespace, extras ] = this.parse_known_args(remaining_args, + namespace) + } finally { + // restore parser values before exiting + for (let action of optionals) { + action.required = action.save_required + } + for (let group of this._mutually_exclusive_groups) { + group.required = group.save_required + } + } + } finally { + this.usage = save_usage + } + return [ namespace, extras ] + } + + // ======================== + // Value conversion methods + // ======================== + _get_values(action, arg_strings) { + // for everything but PARSER, REMAINDER args, strip out first '--' + if (![PARSER, REMAINDER].includes(action.nargs)) { + try { + _array_remove(arg_strings, '--') + } catch (err) {} + } + + let value + // optional argument produces a default when not present + if (!arg_strings.length && action.nargs === OPTIONAL) { + if (action.option_strings.length) { + value = action.const + } else { + value = action.default + } + if (typeof value === 'string') { + value = this._get_value(action, value) + this._check_value(action, value) + } + + // when nargs='*' on a positional, if there were no command-line + // args, use the default if it is anything other than None + } else if (!arg_strings.length && action.nargs === ZERO_OR_MORE && + !action.option_strings.length) { + if (action.default !== undefined) { + value = action.default + } else { + value = arg_strings + } + this._check_value(action, value) + + // single argument or optional argument produces a single value + } else if (arg_strings.length === 1 && [undefined, OPTIONAL].includes(action.nargs)) { + let arg_string = arg_strings[0] + value = this._get_value(action, arg_string) + this._check_value(action, value) + + // REMAINDER arguments convert all values, checking none + } else if (action.nargs === REMAINDER) { + value = arg_strings.map(v => this._get_value(action, v)) + + // PARSER arguments convert all values, but check only the first + } else if (action.nargs === PARSER) { + value = arg_strings.map(v => this._get_value(action, v)) + this._check_value(action, value[0]) + + // SUPPRESS argument does not put anything in the namespace + } else if (action.nargs === SUPPRESS) { + value = SUPPRESS + + // all other types of nargs produce a list + } else { + value = arg_strings.map(v => this._get_value(action, v)) + for (let v of value) { + this._check_value(action, v) + } + } + + // return the converted value + return value + } + + _get_value(action, arg_string) { + let type_func = this._registry_get('type', action.type, action.type) + if (typeof type_func !== 'function') { + let msg = '%r is not callable' + throw new ArgumentError(action, sub(msg, type_func)) + } + + // convert the value to the appropriate type + let result + try { + try { + result = type_func(arg_string) + } catch (err) { + // Dear TC39, why would you ever consider making es6 classes not callable? + // We had one universal interface, [[Call]], which worked for anything + // (with familiar this-instanceof guard for classes). Now we have two. + if (err instanceof TypeError && + /Class constructor .* cannot be invoked without 'new'/.test(err.message)) { + // eslint-disable-next-line new-cap + result = new type_func(arg_string) + } else { + throw err + } + } + + } catch (err) { + // ArgumentTypeErrors indicate errors + if (err instanceof ArgumentTypeError) { + //let name = getattr(action.type, 'name', repr(action.type)) + let msg = err.message + throw new ArgumentError(action, msg) + + // TypeErrors or ValueErrors also indicate errors + } else if (err instanceof TypeError) { + let name = getattr(action.type, 'name', repr(action.type)) + let args = {type: name, value: arg_string} + let msg = 'invalid %(type)s value: %(value)r' + throw new ArgumentError(action, sub(msg, args)) + } else { + throw err + } + } + + // return the converted value + return result + } + + _check_value(action, value) { + // converted value must be one of the choices (if specified) + if (action.choices !== undefined && !_choices_to_array(action.choices).includes(value)) { + let args = {value, + choices: _choices_to_array(action.choices).map(repr).join(', ')} + let msg = 'invalid choice: %(value)r (choose from %(choices)s)' + throw new ArgumentError(action, sub(msg, args)) + } + } + + // ======================= + // Help-formatting methods + // ======================= + format_usage() { + let formatter = this._get_formatter() + formatter.add_usage(this.usage, this._actions, + this._mutually_exclusive_groups) + return formatter.format_help() + } + + format_help() { + let formatter = this._get_formatter() + + // usage + formatter.add_usage(this.usage, this._actions, + this._mutually_exclusive_groups) + + // description + formatter.add_text(this.description) + + // positionals, optionals and user-defined groups + for (let action_group of this._action_groups) { + formatter.start_section(action_group.title) + formatter.add_text(action_group.description) + formatter.add_arguments(action_group._group_actions) + formatter.end_section() + } + + // epilog + formatter.add_text(this.epilog) + + // determine help from format above + return formatter.format_help() + } + + _get_formatter() { + // eslint-disable-next-line new-cap + return new this.formatter_class({ prog: this.prog }) + } + + // ===================== + // Help-printing methods + // ===================== + print_usage(file = undefined) { + if (file === undefined) file = process.stdout + this._print_message(this.format_usage(), file) + } + + print_help(file = undefined) { + if (file === undefined) file = process.stdout + this._print_message(this.format_help(), file) + } + + _print_message(message, file = undefined) { + if (message) { + if (file === undefined) file = process.stderr + file.write(message) + } + } + + // =============== + // Exiting methods + // =============== + exit(status = 0, message = undefined) { + if (message) { + this._print_message(message, process.stderr) + } + process.exit(status) + } + + error(message) { + /* + * error(message: string) + * + * Prints a usage message incorporating the message to stderr and + * exits. + * + * If you override this in a subclass, it should not return -- it + * should either exit or raise an exception. + */ + + // LEGACY (v1 compatibility), debug mode + if (this.debug === true) throw new Error(message) + // end + this.print_usage(process.stderr) + let args = {prog: this.prog, message: message} + this.exit(2, sub('%(prog)s: error: %(message)s\n', args)) + } +})) + + +module.exports = { + ArgumentParser, + ArgumentError, + ArgumentTypeError, + BooleanOptionalAction, + FileType, + HelpFormatter, + ArgumentDefaultsHelpFormatter, + RawDescriptionHelpFormatter, + RawTextHelpFormatter, + MetavarTypeHelpFormatter, + Namespace, + Action, + ONE_OR_MORE, + OPTIONAL, + PARSER, + REMAINDER, + SUPPRESS, + ZERO_OR_MORE +} + +// LEGACY (v1 compatibility), Const alias +Object.defineProperty(module.exports, 'Const', { + get() { + let result = {} + Object.entries({ ONE_OR_MORE, OPTIONAL, PARSER, REMAINDER, SUPPRESS, ZERO_OR_MORE }).forEach(([ n, v ]) => { + Object.defineProperty(result, n, { + get() { + deprecate(n, sub('use argparse.%s instead of argparse.Const.%s', n, n)) + return v + } + }) + }) + Object.entries({ _UNRECOGNIZED_ARGS_ATTR }).forEach(([ n, v ]) => { + Object.defineProperty(result, n, { + get() { + deprecate(n, sub('argparse.Const.%s is an internal symbol and will no longer be available', n)) + return v + } + }) + }) + return result + }, + enumerable: false +}) +// end diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json new file mode 100644 index 0000000000..647d2aff18 --- /dev/null +++ b/node_modules/argparse/package.json @@ -0,0 +1,31 @@ +{ + "name": "argparse", + "description": "CLI arguments parser. Native port of python's argparse.", + "version": "2.0.1", + "keywords": [ + "cli", + "parser", + "argparse", + "option", + "args" + ], + "main": "argparse.js", + "files": [ + "argparse.js", + "lib/" + ], + "license": "Python-2.0", + "repository": "nodeca/argparse", + "scripts": { + "lint": "eslint .", + "test": "npm run lint && nyc mocha", + "coverage": "npm run test && nyc report --reporter html" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.11.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "eslint": "^7.5.0", + "mocha": "^8.0.1", + "nyc": "^15.1.0" + } +} diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml new file mode 100644 index 0000000000..cea8b16e9e --- /dev/null +++ b/node_modules/balanced-match/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/balanced-match" +patreon: juliangruber diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000000..2cdc8e4148 --- /dev/null +++ b/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md new file mode 100644 index 0000000000..d2a48b6b49 --- /dev/null +++ b/node_modules/balanced-match/README.md @@ -0,0 +1,97 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js new file mode 100644 index 0000000000..c67a64608d --- /dev/null +++ b/node_modules/balanced-match/index.js @@ -0,0 +1,62 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + if(a===b) { + return [ai, bi]; + } + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json new file mode 100644 index 0000000000..ce6073e040 --- /dev/null +++ b/node_modules/balanced-match/package.json @@ -0,0 +1,48 @@ +{ + "name": "balanced-match", + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "version": "1.0.2", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "main": "index.js", + "scripts": { + "test": "tape test/test.js", + "bench": "matcha test/bench.js" + }, + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/brace-expansion/.github/FUNDING.yml b/node_modules/brace-expansion/.github/FUNDING.yml new file mode 100644 index 0000000000..79d1eafcec --- /dev/null +++ b/node_modules/brace-expansion/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/brace-expansion" +patreon: juliangruber diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE new file mode 100644 index 0000000000..de3226673c --- /dev/null +++ b/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 0000000000..e55c583dd0 --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,135 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 0000000000..4af9ddee46 --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,203 @@ +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m) return [str]; + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + if (/\$$/.test(m.pre)) { + for (var k = 0; k < post.length; k++) { + var expansion = pre+ '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } else { + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = []; + + for (var j = 0; j < n.length; j++) { + N.push.apply(N, expand(n[j], false)); + } + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + } + + return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 0000000000..7097d41e39 --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,46 @@ +{ + "name": "brace-expansion", + "description": "Brace expansion as known from sh/bash", + "version": "2.0.1", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "main": "index.js", + "scripts": { + "test": "tape test/*.js", + "gentest": "bash test/generate.sh", + "bench": "matcha test/perf/bench.js" + }, + "dependencies": { + "balanced-match": "^1.0.0" + }, + "devDependencies": { + "@c4312/matcha": "^1.3.1", + "tape": "^4.6.0" + }, + "keywords": [], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/character-entities-legacy/index.d.ts b/node_modules/character-entities-legacy/index.d.ts new file mode 100644 index 0000000000..2d567ecc0f --- /dev/null +++ b/node_modules/character-entities-legacy/index.d.ts @@ -0,0 +1,6 @@ +/** + * List of legacy HTML named character references that don’t need a trailing semicolon. + * + * @type {Array} + */ +export const characterEntitiesLegacy: Array diff --git a/node_modules/character-entities-legacy/index.js b/node_modules/character-entities-legacy/index.js new file mode 100644 index 0000000000..678d6a7034 --- /dev/null +++ b/node_modules/character-entities-legacy/index.js @@ -0,0 +1,113 @@ +/** + * List of legacy HTML named character references that don’t need a trailing semicolon. + * + * @type {Array} + */ +export const characterEntitiesLegacy = [ + 'AElig', + 'AMP', + 'Aacute', + 'Acirc', + 'Agrave', + 'Aring', + 'Atilde', + 'Auml', + 'COPY', + 'Ccedil', + 'ETH', + 'Eacute', + 'Ecirc', + 'Egrave', + 'Euml', + 'GT', + 'Iacute', + 'Icirc', + 'Igrave', + 'Iuml', + 'LT', + 'Ntilde', + 'Oacute', + 'Ocirc', + 'Ograve', + 'Oslash', + 'Otilde', + 'Ouml', + 'QUOT', + 'REG', + 'THORN', + 'Uacute', + 'Ucirc', + 'Ugrave', + 'Uuml', + 'Yacute', + 'aacute', + 'acirc', + 'acute', + 'aelig', + 'agrave', + 'amp', + 'aring', + 'atilde', + 'auml', + 'brvbar', + 'ccedil', + 'cedil', + 'cent', + 'copy', + 'curren', + 'deg', + 'divide', + 'eacute', + 'ecirc', + 'egrave', + 'eth', + 'euml', + 'frac12', + 'frac14', + 'frac34', + 'gt', + 'iacute', + 'icirc', + 'iexcl', + 'igrave', + 'iquest', + 'iuml', + 'laquo', + 'lt', + 'macr', + 'micro', + 'middot', + 'nbsp', + 'not', + 'ntilde', + 'oacute', + 'ocirc', + 'ograve', + 'ordf', + 'ordm', + 'oslash', + 'otilde', + 'ouml', + 'para', + 'plusmn', + 'pound', + 'quot', + 'raquo', + 'reg', + 'sect', + 'shy', + 'sup1', + 'sup2', + 'sup3', + 'szlig', + 'thorn', + 'times', + 'uacute', + 'ucirc', + 'ugrave', + 'uml', + 'uuml', + 'yacute', + 'yen', + 'yuml' +] diff --git a/node_modules/character-entities-legacy/license b/node_modules/character-entities-legacy/license new file mode 100644 index 0000000000..32e7a3d93c --- /dev/null +++ b/node_modules/character-entities-legacy/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities-legacy/package.json b/node_modules/character-entities-legacy/package.json new file mode 100644 index 0000000000..6f6805616c --- /dev/null +++ b/node_modules/character-entities-legacy/package.json @@ -0,0 +1,77 @@ +{ + "name": "character-entities-legacy", + "version": "3.0.0", + "description": "List of legacy HTML named character references that don’t need a trailing semicolon", + "license": "MIT", + "keywords": [ + "html", + "entity", + "entities", + "character", + "reference", + "name" + ], + "repository": "wooorm/character-entities-legacy", + "bugs": "https://github.com/wooorm/character-entities-legacy/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "bail": "^2.0.0", + "c8": "^7.0.0", + "concat-stream": "^2.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.45.0" + }, + "scripts": { + "generate": "node build", + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run generate && npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/character-entities-legacy/readme.md b/node_modules/character-entities-legacy/readme.md new file mode 100644 index 0000000000..9c1765faf6 --- /dev/null +++ b/node_modules/character-entities-legacy/readme.md @@ -0,0 +1,157 @@ +# character-entities-legacy + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +List of legacy HTML named character references that don’t need a trailing +semicolon. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`characterEntitiesLegacy`](#characterentitieslegacy) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a list of certain named character references, that due to legacy +reasons, don’t need a trailing semicolon in HTML. +For example, `©` is perfectly fine for `©`! + +## When should I use this? + +Maybe when you’re writing an HTML parser or minifier, but otherwise probably +never! +Even then, it might be better to use [`parse-entities`][parse-entities] or +[`stringify-entities`][stringify-entities]. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install character-entities-legacy +``` + +In Deno with [Skypack][]: + +```js +import {characterEntitiesLegacy} from 'https://cdn.skypack.dev/character-entities-legacy@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {characterEntitiesLegacy} from 'character-entities-legacy' + +console.log(characterEntitiesLegacy.includes('copy')) // => true +console.log(characterEntitiesLegacy.includes('frac34')) // => true +console.log(characterEntitiesLegacy.includes('sup1')) // => true +``` + +## API + +This package exports the following identifiers: `characterEntitiesLegacy`. +There is no default export. + +### `characterEntitiesLegacy` + +List of (case sensitive) legacy character entity names. +[`wooorm/character-entities`][character-entities] holds their decoded values. +See [`whatwg/html`][html] for more info. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) + — parse (decode) character references +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — serialize (encode) character references +* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) + — info on character entities +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — info on HTML4 character entities +* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) + — info on invalid numeric character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/character-entities-legacy/workflows/main/badge.svg + +[build]: https://github.com/wooorm/character-entities-legacy/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities-legacy.svg + +[coverage]: https://codecov.io/github/wooorm/character-entities-legacy + +[downloads-badge]: https://img.shields.io/npm/dm/character-entities-legacy.svg + +[downloads]: https://www.npmjs.com/package/character-entities-legacy + +[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities-legacy.svg + +[size]: https://bundlephobia.com/result?p=character-entities-legacy + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[html]: https://github.com/whatwg/html-build/blob/HEAD/entities/json-entities-legacy.inc + +[parse-entities]: https://github.com/wooorm/parse-entities + +[stringify-entities]: https://github.com/wooorm/stringify-entities + +[character-entities]: https://github.com/wooorm/character-entities diff --git a/node_modules/character-entities/index.d.ts b/node_modules/character-entities/index.d.ts new file mode 100644 index 0000000000..aa7e651aaf --- /dev/null +++ b/node_modules/character-entities/index.d.ts @@ -0,0 +1,6 @@ +/** + * Map of named character references. + * + * @type {Record} + */ +export const characterEntities: Record diff --git a/node_modules/character-entities/index.js b/node_modules/character-entities/index.js new file mode 100644 index 0000000000..9222e7a7fe --- /dev/null +++ b/node_modules/character-entities/index.js @@ -0,0 +1,2132 @@ +/** + * Map of named character references. + * + * @type {Record} + */ +export const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} diff --git a/node_modules/character-entities/license b/node_modules/character-entities/license new file mode 100644 index 0000000000..32e7a3d93c --- /dev/null +++ b/node_modules/character-entities/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities/package.json b/node_modules/character-entities/package.json new file mode 100644 index 0000000000..30f6a53963 --- /dev/null +++ b/node_modules/character-entities/package.json @@ -0,0 +1,78 @@ +{ + "name": "character-entities", + "version": "2.0.2", + "description": "Map of named character references", + "license": "MIT", + "keywords": [ + "html", + "entity", + "entities", + "character", + "reference", + "name", + "replacement" + ], + "repository": "wooorm/character-entities", + "bugs": "https://github.com/wooorm/character-entities/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "bail": "^2.0.0", + "c8": "^7.0.0", + "concat-stream": "^2.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.50.0" + }, + "scripts": { + "generate": "node build", + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run generate && npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/character-entities/readme.md b/node_modules/character-entities/readme.md new file mode 100644 index 0000000000..16889ca142 --- /dev/null +++ b/node_modules/character-entities/readme.md @@ -0,0 +1,152 @@ +# character-entities + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Map of named character references. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [characterEntities](#characterentities) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a map of named character references in HTML (latest) to the characters +they represent. + +## When should I use this? + +Maybe when you’re writing an HTML parser or minifier, but otherwise probably +never! +Even then, it might be better to use [`parse-entities`][parse-entities] or +[`stringify-entities`][stringify-entities]. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, 16.0+, 18.0+), install with [npm][]: + +```sh +npm install character-entities +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {characterEntities} from 'https://esm.sh/character-entities@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {characterEntities} from 'character-entities' + +console.log(characterEntities.AElig) // => 'Æ' +console.log(characterEntities.aelig) // => 'æ' +console.log(characterEntities.amp) // => '&' +``` + +## API + +This package exports the identifier `characterEntities`. +There is no default export. + +### characterEntities + +Mapping between (case-sensitive) character entity names to replacements. +See [`html.spec.whatwg.org`][html] for more info. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, 16.0+, and 18.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) + — parse (decode) character references +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — serialize (encode) character references +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — info on named character references in HTML 4 +* [`character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) + — info on invalid numeric character references +* [`character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) + — info on legacy named character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/character-entities/workflows/main/badge.svg + +[build]: https://github.com/wooorm/character-entities/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities.svg + +[coverage]: https://codecov.io/github/wooorm/character-entities + +[downloads-badge]: https://img.shields.io/npm/dm/character-entities.svg + +[downloads]: https://www.npmjs.com/package/character-entities + +[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities.svg + +[size]: https://bundlephobia.com/result?p=character-entities + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[parse-entities]: https://github.com/wooorm/parse-entities + +[stringify-entities]: https://github.com/wooorm/stringify-entities + +[html]: https://html.spec.whatwg.org/multipage/syntax.html#named-character-references diff --git a/node_modules/character-reference-invalid/index.d.ts b/node_modules/character-reference-invalid/index.d.ts new file mode 100644 index 0000000000..800115adbf --- /dev/null +++ b/node_modules/character-reference-invalid/index.d.ts @@ -0,0 +1,6 @@ +/** + * Map of invalid numeric character references to their replacements, according to HTML. + * + * @type {Record} + */ +export const characterReferenceInvalid: Record diff --git a/node_modules/character-reference-invalid/index.js b/node_modules/character-reference-invalid/index.js new file mode 100644 index 0000000000..3fd48c5d7c --- /dev/null +++ b/node_modules/character-reference-invalid/index.js @@ -0,0 +1,35 @@ +/** + * Map of invalid numeric character references to their replacements, according to HTML. + * + * @type {Record} + */ +export const characterReferenceInvalid = { + 0: '�', + 128: '€', + 130: '‚', + 131: 'ƒ', + 132: '„', + 133: '…', + 134: '†', + 135: '‡', + 136: 'ˆ', + 137: '‰', + 138: 'Š', + 139: '‹', + 140: 'Œ', + 142: 'Ž', + 145: '‘', + 146: '’', + 147: '“', + 148: '”', + 149: '•', + 150: '–', + 151: '—', + 152: '˜', + 153: '™', + 154: 'š', + 155: '›', + 156: 'œ', + 158: 'ž', + 159: 'Ÿ' +} diff --git a/node_modules/character-reference-invalid/license b/node_modules/character-reference-invalid/license new file mode 100644 index 0000000000..32e7a3d93c --- /dev/null +++ b/node_modules/character-reference-invalid/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-reference-invalid/package.json b/node_modules/character-reference-invalid/package.json new file mode 100644 index 0000000000..b133319c35 --- /dev/null +++ b/node_modules/character-reference-invalid/package.json @@ -0,0 +1,83 @@ +{ + "name": "character-reference-invalid", + "version": "2.0.1", + "description": "Map of invalid numeric character references to their replacements, according to HTML", + "license": "MIT", + "keywords": [ + "html", + "entity", + "numeric", + "character", + "reference", + "replacement", + "invalid", + "name" + ], + "repository": "wooorm/character-reference-invalid", + "bugs": "https://github.com/wooorm/character-reference-invalid/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "bail": "^2.0.0", + "c8": "^7.0.0", + "concat-stream": "^2.0.0", + "hast-util-select": "^5.0.0", + "hast-util-to-string": "^2.0.0", + "prettier": "^2.0.0", + "rehype-parse": "^8.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "unified": "^10.0.0", + "xo": "^0.45.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "generate": "node build", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run generate && npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/character-reference-invalid/readme.md b/node_modules/character-reference-invalid/readme.md new file mode 100644 index 0000000000..2190876940 --- /dev/null +++ b/node_modules/character-reference-invalid/readme.md @@ -0,0 +1,156 @@ +# character-reference-invalid + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Map of invalid numeric character references to their replacements, according to +HTML. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`characterReferenceInvalid`](#characterreferenceinvalid) +* [Source](#source) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a map from the [HTML spec][source] of C1 ASCII/Unicode control +characters (which are disallowed by HTML) to the characters those code points +would have in Windows 1252. +For example, U+0080 (Padding Character) maps to `€`, because that’s used for +0x80 in Windows 1252. + +## When should I use this? + +Probably never, unless you’re dealing with parsing HTML or similar XML-like +things, or in a place where Unicode is not the primary encoding (it is in most +places). + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install character-reference-invalid +``` + +In Deno with [Skypack][]: + +```js +import {characterReferenceInvalid} from 'https://cdn.skypack.dev/character-reference-invalid@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {characterReferenceInvalid} from 'character-reference-invalid' + +console.log(characterReferenceInvalid[0x80]) // => '€' +console.log(characterReferenceInvalid[0x89]) // => '‰' +console.log(characterReferenceInvalid[0x99]) // => '™' +``` + +## API + +This package exports the following identifiers: `characterReferenceInvalid`. +There is no default export. + +### `characterReferenceInvalid` + +`Record` — mapping between invalid numeric character reference +codes to replacements characters. + +## Source + +See [`html.spec.whatwg.org`][source]. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) + — HTML character entity info +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — HTML 4 character entity info +* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) + — legacy character entity info +* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) + — parse HTML character references +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — serialize HTML character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/character-reference-invalid/workflows/main/badge.svg + +[build]: https://github.com/wooorm/character-reference-invalid/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-reference-invalid.svg + +[coverage]: https://codecov.io/github/wooorm/character-reference-invalid + +[downloads-badge]: https://img.shields.io/npm/dm/character-reference-invalid.svg + +[downloads]: https://www.npmjs.com/package/character-reference-invalid + +[size-badge]: https://img.shields.io/bundlephobia/minzip/character-reference-invalid.svg + +[size]: https://bundlephobia.com/result?p=character-reference-invalid + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[source]: https://html.spec.whatwg.org/multipage/parsing.html#table-charref-overrides diff --git a/node_modules/color-convert/CHANGELOG.md b/node_modules/color-convert/CHANGELOG.md new file mode 100644 index 0000000000..0a7bce4fd5 --- /dev/null +++ b/node_modules/color-convert/CHANGELOG.md @@ -0,0 +1,54 @@ +# 1.0.0 - 2016-01-07 + +- Removed: unused speed test +- Added: Automatic routing between previously unsupported conversions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `convert()` class +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: all functions to lookup dictionary +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: `ansi` to `ansi256` +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Fixed: argument grouping for functions requiring only one argument +([#27](https://github.com/Qix-/color-convert/pull/27)) + +# 0.6.0 - 2015-07-23 + +- Added: methods to handle +[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: + - rgb2ansi16 + - rgb2ansi + - hsl2ansi16 + - hsl2ansi + - hsv2ansi16 + - hsv2ansi + - hwb2ansi16 + - hwb2ansi + - cmyk2ansi16 + - cmyk2ansi + - keyword2ansi16 + - keyword2ansi + - ansi162rgb + - ansi162hsl + - ansi162hsv + - ansi162hwb + - ansi162cmyk + - ansi162keyword + - ansi2rgb + - ansi2hsl + - ansi2hsv + - ansi2hwb + - ansi2cmyk + - ansi2keyword +([#18](https://github.com/harthur/color-convert/pull/18)) + +# 0.5.3 - 2015-06-02 + +- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` +([#15](https://github.com/harthur/color-convert/issues/15)) + +--- + +Check out commit logs for older releases diff --git a/node_modules/color-convert/LICENSE b/node_modules/color-convert/LICENSE new file mode 100644 index 0000000000..5b4c386f92 --- /dev/null +++ b/node_modules/color-convert/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011-2016 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/color-convert/README.md b/node_modules/color-convert/README.md new file mode 100644 index 0000000000..d4b08fc369 --- /dev/null +++ b/node_modules/color-convert/README.md @@ -0,0 +1,68 @@ +# color-convert + +[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert) + +Color-convert is a color conversion library for JavaScript and node. +It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest): + +```js +var convert = require('color-convert'); + +convert.rgb.hsl(140, 200, 100); // [96, 48, 59] +convert.keyword.rgb('blue'); // [0, 0, 255] + +var rgbChannels = convert.rgb.channels; // 3 +var cmykChannels = convert.cmyk.channels; // 4 +var ansiChannels = convert.ansi16.channels; // 1 +``` + +# Install + +```console +$ npm install color-convert +``` + +# API + +Simply get the property of the _from_ and _to_ conversion that you're looking for. + +All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function. + +All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha). + +```js +var convert = require('color-convert'); + +// Hex to LAB +convert.hex.lab('DEADBF'); // [ 76, 21, -2 ] +convert.hex.lab.raw('DEADBF'); // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ] + +// RGB to CMYK +convert.rgb.cmyk(167, 255, 4); // [ 35, 0, 98, 0 ] +convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ] +``` + +### Arrays +All functions that accept multiple arguments also support passing an array. + +Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.) + +```js +var convert = require('color-convert'); + +convert.rgb.hex(123, 45, 67); // '7B2D43' +convert.rgb.hex([123, 45, 67]); // '7B2D43' +``` + +## Routing + +Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex). + +Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js). + +# Contribute + +If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request. + +# License +Copyright © 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE). diff --git a/node_modules/color-convert/conversions.js b/node_modules/color-convert/conversions.js new file mode 100644 index 0000000000..2657f265c9 --- /dev/null +++ b/node_modules/color-convert/conversions.js @@ -0,0 +1,839 @@ +/* MIT license */ +/* eslint-disable no-mixed-operators */ +const cssKeywords = require('color-name'); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +const reverseKeywords = {}; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; +} + +const convert = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +module.exports = convert; + +// Hide .channels and .labels properties +for (const model of Object.keys(convert)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + const {channels, labels} = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); +} + +convert.rgb.hsl = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + const l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; + + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +function comparativeDistance(x, y) { + /* + See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + */ + return ( + ((x[0] - y[0]) ** 2) + + ((x[1] - y[1]) ** 2) + + ((x[2] - y[2]) ** 2) + ); +} + +convert.rgb.keyword = function (rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + let currentClosestDistance = Infinity; + let currentClosestKeyword; + + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + + // Compute comparative distance + const distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + + // Assume sRGB + r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); + g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); + b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); + + const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + const t1 = 2 * l - t2; + + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - (s * f)); + const t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + + // Wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + const n = wh + f * (v - wh); // Linear interpolation + + let r; + let g; + let b; + /* eslint-disable max-statements-per-line,no-multi-spaces */ + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + /* eslint-enable max-statements-per-line,no-multi-spaces */ + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // Assume sRGB + r = r > 0.0031308 + ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + const c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + let ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // Optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + const ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + let color = args % 10; + + // Handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + const mult = (~~(args > 50) + 1) * 0.5; + const r = ((color & 1) * mult) * 255; + const g = (((color >> 1) & 1) * mult) * 255; + const b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // Handle greyscale + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + const integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + let colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(char => { + return char + char; + }).join(''); + } + + const integer = parseInt(colorString, 16); + const r = (integer >> 16) & 0xFF; + const g = (integer >> 8) & 0xFF; + const b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = (max - min); + let grayscale; + let hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; + + const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); + + let f = 0; + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; + + const c = s * v; + let f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + const pure = [0, 0, 0]; + const hi = (h % 1) * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + + /* eslint-disable max-statements-per-line */ + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + /* eslint-enable max-statements-per-line */ + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const v = c + g * (1.0 - c); + let f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const l = g * (1.0 - c) + 0.5 * c; + let s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hsv = convert.gray.hsl; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + const val = Math.round(gray[0] / 100 * 255) & 0xFF; + const integer = (val << 16) + (val << 8) + val; + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; diff --git a/node_modules/color-convert/index.js b/node_modules/color-convert/index.js new file mode 100644 index 0000000000..b648e5737b --- /dev/null +++ b/node_modules/color-convert/index.js @@ -0,0 +1,81 @@ +const conversions = require('./conversions'); +const route = require('./route'); + +const convert = {}; + +const models = Object.keys(conversions); + +function wrapRaw(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + return fn(args); + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + const result = fn(args); + + // We're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(fromModel => { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + const routes = route(fromModel); + const routeModels = Object.keys(routes); + + routeModels.forEach(toModel => { + const fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +module.exports = convert; diff --git a/node_modules/color-convert/package.json b/node_modules/color-convert/package.json new file mode 100644 index 0000000000..6e48000c7c --- /dev/null +++ b/node_modules/color-convert/package.json @@ -0,0 +1,48 @@ +{ + "name": "color-convert", + "description": "Plain color conversion functions", + "version": "2.0.1", + "author": "Heather Arthur ", + "license": "MIT", + "repository": "Qix-/color-convert", + "scripts": { + "pretest": "xo", + "test": "node test/basic.js" + }, + "engines": { + "node": ">=7.0.0" + }, + "keywords": [ + "color", + "colour", + "convert", + "converter", + "conversion", + "rgb", + "hsl", + "hsv", + "hwb", + "cmyk", + "ansi", + "ansi16" + ], + "files": [ + "index.js", + "conversions.js", + "route.js" + ], + "xo": { + "rules": { + "default-case": 0, + "no-inline-comments": 0, + "operator-linebreak": 0 + } + }, + "devDependencies": { + "chalk": "^2.4.2", + "xo": "^0.24.0" + }, + "dependencies": { + "color-name": "~1.1.4" + } +} diff --git a/node_modules/color-convert/route.js b/node_modules/color-convert/route.js new file mode 100644 index 0000000000..1a08521b5a --- /dev/null +++ b/node_modules/color-convert/route.js @@ -0,0 +1,97 @@ +const conversions = require('./conversions'); + +/* + This function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + const graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + const models = Object.keys(conversions); + + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; // Unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions[current]); + + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions[graph[toModel].parent][toModel]; + + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +module.exports = function (fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; + + if (node.parent === null) { + // No possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + diff --git a/node_modules/color-name/LICENSE b/node_modules/color-name/LICENSE new file mode 100644 index 0000000000..c6b1001254 --- /dev/null +++ b/node_modules/color-name/LICENSE @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/color-name/README.md b/node_modules/color-name/README.md new file mode 100644 index 0000000000..932b979176 --- /dev/null +++ b/node_modules/color-name/README.md @@ -0,0 +1,11 @@ +A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. + +[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) + + +```js +var colors = require('color-name'); +colors.red //[255,0,0] +``` + + diff --git a/node_modules/color-name/index.js b/node_modules/color-name/index.js new file mode 100644 index 0000000000..b7c198a6f3 --- /dev/null +++ b/node_modules/color-name/index.js @@ -0,0 +1,152 @@ +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; diff --git a/node_modules/color-name/package.json b/node_modules/color-name/package.json new file mode 100644 index 0000000000..782dd82878 --- /dev/null +++ b/node_modules/color-name/package.json @@ -0,0 +1,28 @@ +{ + "name": "color-name", + "version": "1.1.4", + "description": "A list of color names and its values", + "main": "index.js", + "files": [ + "index.js" + ], + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:colorjs/color-name.git" + }, + "keywords": [ + "color-name", + "color", + "color-keyword", + "keyword" + ], + "author": "DY ", + "license": "MIT", + "bugs": { + "url": "https://github.com/colorjs/color-name/issues" + }, + "homepage": "https://github.com/colorjs/color-name" +} diff --git a/node_modules/commander/LICENSE b/node_modules/commander/LICENSE new file mode 100644 index 0000000000..10f997ab10 --- /dev/null +++ b/node_modules/commander/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/commander/Readme.md b/node_modules/commander/Readme.md new file mode 100644 index 0000000000..ca6fb27fff --- /dev/null +++ b/node_modules/commander/Readme.md @@ -0,0 +1,1149 @@ +# Commander.js + +[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22) +[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) +[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) +[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) + +The complete solution for [node.js](http://nodejs.org) command-line interfaces. + +Read this in other languages: English | [简体中文](./Readme_zh-CN.md) + +- [Commander.js](#commanderjs) + - [Installation](#installation) + - [Quick Start](#quick-start) + - [Declaring _program_ variable](#declaring-program-variable) + - [Options](#options) + - [Common option types, boolean and value](#common-option-types-boolean-and-value) + - [Default option value](#default-option-value) + - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue) + - [Required option](#required-option) + - [Variadic option](#variadic-option) + - [Version option](#version-option) + - [More configuration](#more-configuration) + - [Custom option processing](#custom-option-processing) + - [Commands](#commands) + - [Command-arguments](#command-arguments) + - [More configuration](#more-configuration-1) + - [Custom argument processing](#custom-argument-processing) + - [Action handler](#action-handler) + - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands) + - [Life cycle hooks](#life-cycle-hooks) + - [Automated help](#automated-help) + - [Custom help](#custom-help) + - [Display help after errors](#display-help-after-errors) + - [Display help from code](#display-help-from-code) + - [.name](#name) + - [.usage](#usage) + - [.description and .summary](#description-and-summary) + - [.helpOption(flags, description)](#helpoptionflags-description) + - [.helpCommand()](#helpcommand) + - [More configuration](#more-configuration-2) + - [Custom event listeners](#custom-event-listeners) + - [Bits and pieces](#bits-and-pieces) + - [.parse() and .parseAsync()](#parse-and-parseasync) + - [Parsing Configuration](#parsing-configuration) + - [Legacy options as properties](#legacy-options-as-properties) + - [TypeScript](#typescript) + - [createCommand()](#createcommand) + - [Node options such as `--harmony`](#node-options-such-as---harmony) + - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands) + - [npm run-script](#npm-run-script) + - [Display error](#display-error) + - [Override exit and output handling](#override-exit-and-output-handling) + - [Additional documentation](#additional-documentation) + - [Support](#support) + - [Commander for enterprise](#commander-for-enterprise) + +For information about terms used in this document see: [terminology](./docs/terminology.md) + +## Installation + +```sh +npm install commander +``` + +## Quick Start + +You write code to describe your command line interface. +Commander looks after parsing the arguments into options and command-arguments, +displays usage errors for problems, and implements a help system. + +Commander is strict and displays an error for unrecognised options. +The two most used option types are a boolean option, and an option which takes its value from the following argument. + +Example file: [split.js](./examples/split.js) + +```js +const { program } = require('commander'); + +program + .option('--first') + .option('-s, --separator ') + .argument(''); + +program.parse(); + +const options = program.opts(); +const limit = options.first ? 1 : undefined; +console.log(program.args[0].split(options.separator, limit)); +``` + +```console +$ node split.js -s / --fits a/b/c +error: unknown option '--fits' +(Did you mean --first?) +$ node split.js -s / --first a/b/c +[ 'a' ] +``` + +Here is a more complete program using a subcommand and with descriptions for the help. In a multi-command program, you have an action handler for each command (or stand-alone executables for the commands). + +Example file: [string-util.js](./examples/string-util.js) + +```js +const { Command } = require('commander'); +const program = new Command(); + +program + .name('string-util') + .description('CLI to some JavaScript string utilities') + .version('0.8.0'); + +program.command('split') + .description('Split a string into substrings and display as an array') + .argument('', 'string to split') + .option('--first', 'display just the first substring') + .option('-s, --separator ', 'separator character', ',') + .action((str, options) => { + const limit = options.first ? 1 : undefined; + console.log(str.split(options.separator, limit)); + }); + +program.parse(); +``` + +```console +$ node string-util.js help split +Usage: string-util split [options] + +Split a string into substrings and display as an array. + +Arguments: + string string to split + +Options: + --first display just the first substring + -s, --separator separator character (default: ",") + -h, --help display help for command + +$ node string-util.js split --separator=/ a/b/c +[ 'a', 'b', 'c' ] +``` + +More samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. + +## Declaring _program_ variable + +Commander exports a global object which is convenient for quick programs. +This is used in the examples in this README for brevity. + +```js +// CommonJS (.cjs) +const { program } = require('commander'); +``` + +For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. + +```js +// CommonJS (.cjs) +const { Command } = require('commander'); +const program = new Command(); +``` + +```js +// ECMAScript (.mjs) +import { Command } from 'commander'; +const program = new Command(); +``` + +```ts +// TypeScript (.ts) +import { Command } from 'commander'; +const program = new Command(); +``` + +## Options + +Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). To allow a wider range of short-ish flags than just +single characters, you may also have two long options. Examples: + +```js +program + .option('-p, --port ', 'server port number') + .option('--trace', 'add extra debugging output') + .option('--ws, --workspace ', 'use a custom workspace') +``` + +The parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler. + +Multi-word options such as "--template-engine" are camel-cased, becoming `program.opts().templateEngine` etc. + +An option and its option-argument can be separated by a space, or combined into the same argument. The option-argument can follow the short option directly or follow an `=` for a long option. + +```sh +serve -p 80 +serve -p80 +serve --port 80 +serve --port=80 +``` + +You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted. + +By default, options on the command line are not positional, and can be specified before or after other arguments. + +There are additional related routines for when `.opts()` is not enough: + +- `.optsWithGlobals()` returns merged local and global option values +- `.getOptionValue()` and `.setOptionValue()` work with a single option value +- `.getOptionValueSource()` and `.setOptionValueWithSource()` include where the option value came from + +### Common option types, boolean and value + +The two most used option types are a boolean option, and an option which takes its value +from the following argument (declared with angle brackets like `--expect `). Both are `undefined` unless specified on command line. + +Example file: [options-common.js](./examples/options-common.js) + +```js +program + .option('-d, --debug', 'output extra debugging') + .option('-s, --small', 'small pizza size') + .option('-p, --pizza-type ', 'flavour of pizza'); + +program.parse(process.argv); + +const options = program.opts(); +if (options.debug) console.log(options); +console.log('pizza details:'); +if (options.small) console.log('- small pizza size'); +if (options.pizzaType) console.log(`- ${options.pizzaType}`); +``` + +```console +$ pizza-options -p +error: option '-p, --pizza-type ' argument missing +$ pizza-options -d -s -p vegetarian +{ debug: true, small: true, pizzaType: 'vegetarian' } +pizza details: +- small pizza size +- vegetarian +$ pizza-options --pizza-type=cheese +pizza details: +- cheese +``` + +Multiple boolean short options may be combined following the dash, and may be followed by a single short option taking a value. +For example `-d -s -p cheese` may be written as `-ds -p cheese` or even `-dsp cheese`. + +Options with an expected option-argument are greedy and will consume the following argument whatever the value. +So `--id -xyz` reads `-xyz` as the option-argument. + +`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`. + +### Default option value + +You can specify a default value for an option. + +Example file: [options-defaults.js](./examples/options-defaults.js) + +```js +program + .option('-c, --cheese ', 'add the specified type of cheese', 'blue'); + +program.parse(); + +console.log(`cheese: ${program.opts().cheese}`); +``` + +```console +$ pizza-options +cheese: blue +$ pizza-options --cheese stilton +cheese: stilton +``` + +### Other option types, negatable boolean and boolean|value + +You can define a boolean option long name with a leading `no-` to set the option value to false when used. +Defined alone this also makes the option true by default. + +If you define `--foo` first, adding `--no-foo` does not change the default value from what it would +otherwise be. + +Example file: [options-negatable.js](./examples/options-negatable.js) + +```js +program + .option('--no-sauce', 'Remove sauce') + .option('--cheese ', 'cheese flavour', 'mozzarella') + .option('--no-cheese', 'plain with no cheese') + .parse(); + +const options = program.opts(); +const sauceStr = options.sauce ? 'sauce' : 'no sauce'; +const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`; +console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); +``` + +```console +$ pizza-options +You ordered a pizza with sauce and mozzarella cheese +$ pizza-options --sauce +error: unknown option '--sauce' +$ pizza-options --cheese=blue +You ordered a pizza with sauce and blue cheese +$ pizza-options --no-sauce --no-cheese +You ordered a pizza with no sauce and no cheese +``` + +You can specify an option which may be used as a boolean option but may optionally take an option-argument +(declared with square brackets like `--optional [value]`). + +Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js) + +```js +program + .option('-c, --cheese [type]', 'Add cheese with optional type'); + +program.parse(process.argv); + +const options = program.opts(); +if (options.cheese === undefined) console.log('no cheese'); +else if (options.cheese === true) console.log('add cheese'); +else console.log(`add cheese type ${options.cheese}`); +``` + +```console +$ pizza-options +no cheese +$ pizza-options --cheese +add cheese +$ pizza-options --cheese mozzarella +add cheese type mozzarella +``` + +Options with an optional option-argument are not greedy and will ignore arguments starting with a dash. +So `id` behaves as a boolean option for `--id -5`, but you can use a combined form if needed like `--id=-5`. + +For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). + +### Required option + +You may specify a required (mandatory) option using `.requiredOption()`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option()` in format, taking flags and description, and optional default value or custom processing. + +Example file: [options-required.js](./examples/options-required.js) + +```js +program + .requiredOption('-c, --cheese ', 'pizza must have cheese'); + +program.parse(); +``` + +```console +$ pizza +error: required option '-c, --cheese ' not specified +``` + +### Variadic option + +You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you +can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments +are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value +is specified in the same argument as the option then no further values are read. + +Example file: [options-variadic.js](./examples/options-variadic.js) + +```js +program + .option('-n, --number ', 'specify numbers') + .option('-l, --letter [letters...]', 'specify letters'); + +program.parse(); + +console.log('Options: ', program.opts()); +console.log('Remaining arguments: ', program.args); +``` + +```console +$ collect -n 1 2 3 --letter a b c +Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] } +Remaining arguments: [] +$ collect --letter=A -n80 operand +Options: { number: [ '80' ], letter: [ 'A' ] } +Remaining arguments: [ 'operand' ] +$ collect --letter -n 1 -n 2 3 -- operand +Options: { number: [ '1', '2', '3' ], letter: true } +Remaining arguments: [ 'operand' ] +``` + +For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). + +### Version option + +The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. + +```js +program.version('0.0.1'); +``` + +```console +$ ./examples/pizza -V +0.0.1 +``` + +You may change the flags and description by passing additional parameters to the `version` method, using +the same syntax for flags as the `option` method. + +```js +program.version('0.0.1', '-v, --vers', 'output the current version'); +``` + +### More configuration + +You can add most options using the `.option()` method, but there are some additional features available +by constructing an `Option` explicitly for less common cases. + +Example files: [options-extra.js](./examples/options-extra.js), [options-env.js](./examples/options-env.js), [options-conflicts.js](./examples/options-conflicts.js), [options-implies.js](./examples/options-implies.js) + +```js +program + .addOption(new Option('-s, --secret').hideHelp()) + .addOption(new Option('-t, --timeout ', 'timeout in seconds').default(60, 'one minute')) + .addOption(new Option('-d, --drink ', 'drink size').choices(['small', 'medium', 'large'])) + .addOption(new Option('-p, --port ', 'port number').env('PORT')) + .addOption(new Option('--donate [amount]', 'optional donation in dollars').preset('20').argParser(parseFloat)) + .addOption(new Option('--disable-server', 'disables the server').conflicts('port')) + .addOption(new Option('--free-drink', 'small drink included free ').implies({ drink: 'small' })); +``` + +```console +$ extra --help +Usage: help [options] + +Options: + -t, --timeout timeout in seconds (default: one minute) + -d, --drink drink cup size (choices: "small", "medium", "large") + -p, --port port number (env: PORT) + --donate [amount] optional donation in dollars (preset: "20") + --disable-server disables the server + --free-drink small drink included free + -h, --help display help for command + +$ extra --drink huge +error: option '-d, --drink ' argument 'huge' is invalid. Allowed choices are small, medium, large. + +$ PORT=80 extra --donate --free-drink +Options: { timeout: 60, donate: 20, port: '80', freeDrink: true, drink: 'small' } + +$ extra --disable-server --port 8000 +error: option '--disable-server' cannot be used with option '-p, --port ' +``` + +Specify a required (mandatory) option using the `Option` method `.makeOptionMandatory()`. This matches the `Command` method [.requiredOption()](#required-option). + +### Custom option processing + +You may specify a function to do custom processing of option-arguments. The callback function receives two parameters, +the user specified option-argument and the previous value for the option. It returns the new value for the option. + +This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing. + +You can optionally specify the default/starting value for the option after the function parameter. + +Example file: [options-custom-processing.js](./examples/options-custom-processing.js) + +```js +function myParseInt(value, dummyPrevious) { + // parseInt takes a string and a radix + const parsedValue = parseInt(value, 10); + if (isNaN(parsedValue)) { + throw new commander.InvalidArgumentError('Not a number.'); + } + return parsedValue; +} + +function increaseVerbosity(dummyValue, previous) { + return previous + 1; +} + +function collect(value, previous) { + return previous.concat([value]); +} + +function commaSeparatedList(value, dummyPrevious) { + return value.split(','); +} + +program + .option('-f, --float ', 'float argument', parseFloat) + .option('-i, --integer ', 'integer argument', myParseInt) + .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) + .option('-c, --collect ', 'repeatable value', collect, []) + .option('-l, --list ', 'comma separated list', commaSeparatedList) +; + +program.parse(); + +const options = program.opts(); +if (options.float !== undefined) console.log(`float: ${options.float}`); +if (options.integer !== undefined) console.log(`integer: ${options.integer}`); +if (options.verbose > 0) console.log(`verbosity: ${options.verbose}`); +if (options.collect.length > 0) console.log(options.collect); +if (options.list !== undefined) console.log(options.list); +``` + +```console +$ custom -f 1e2 +float: 100 +$ custom --integer 2 +integer: 2 +$ custom -v -v -v +verbose: 3 +$ custom -c a -c b -c c +[ 'a', 'b', 'c' ] +$ custom --list x,y,z +[ 'x', 'y', 'z' ] +``` + +## Commands + +You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)). + +In the first parameter to `.command()` you specify the command name. You may append the command-arguments after the command name, or specify them separately using `.argument()`. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`. + +You can use `.addCommand()` to add an already configured subcommand to the program. + +For example: + +```js +// Command implemented using action handler (description is supplied separately to `.command`) +// Returns new command for configuring. +program + .command('clone [destination]') + .description('clone a repository into a newly created directory') + .action((source, destination) => { + console.log('clone command called'); + }); + +// Command implemented using stand-alone executable file, indicated by adding description as second parameter to `.command`. +// Returns `this` for adding more commands. +program + .command('start ', 'start named service') + .command('stop [service]', 'stop named service, or all if no name supplied'); + +// Command prepared separately. +// Returns `this` for adding more commands. +program + .addCommand(build.makeBuildCommand()); +``` + +Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will +remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other +subcommand is specified ([example](./examples/defaultCommand.js)). + +You can add alternative names for a command with `.alias()`. ([example](./examples/alias.js)) + +`.command()` automatically copies the inherited settings from the parent command to the newly created subcommand. This is only done during creation, any later setting changes to the parent are not inherited. + +For safety, `.addCommand()` does not automatically copy the inherited settings from the parent command. There is a helper routine `.copyInheritedSettings()` for copying the settings when they are wanted. + +### Command-arguments + +For subcommands, you can specify the argument syntax in the call to `.command()` (as shown above). This +is the only method usable for subcommands implemented using a stand-alone executable, but for other subcommands +you can instead use the following method. + +To configure a command, you can use `.argument()` to specify each expected command-argument. +You supply the argument name and an optional description. The argument may be `` or `[optional]`. +You can specify a default value for an optional command-argument. + +Example file: [argument.js](./examples/argument.js) + +```js +program + .version('0.1.0') + .argument('', 'user to login') + .argument('[password]', 'password for user, if required', 'no password given') + .action((username, password) => { + console.log('username:', username); + console.log('password:', password); + }); +``` + + The last argument of a command can be variadic, and only the last argument. To make an argument variadic you + append `...` to the argument name. A variadic argument is passed to the action handler as an array. For example: + +```js +program + .version('0.1.0') + .command('rmdir') + .argument('') + .action(function (dirs) { + dirs.forEach((dir) => { + console.log('rmdir %s', dir); + }); + }); +``` + +There is a convenience method to add multiple arguments at once, but without descriptions: + +```js +program + .arguments(' '); +``` + +#### More configuration + +There are some additional features available by constructing an `Argument` explicitly for less common cases. + +Example file: [arguments-extra.js](./examples/arguments-extra.js) + +```js +program + .addArgument(new commander.Argument('', 'drink cup size').choices(['small', 'medium', 'large'])) + .addArgument(new commander.Argument('[timeout]', 'timeout in seconds').default(60, 'one minute')) +``` + +#### Custom argument processing + +You may specify a function to do custom processing of command-arguments (like for option-arguments). +The callback function receives two parameters, the user specified command-argument and the previous value for the argument. +It returns the new value for the argument. + +The processed argument values are passed to the action handler, and saved as `.processedArgs`. + +You can optionally specify the default/starting value for the argument after the function parameter. + +Example file: [arguments-custom-processing.js](./examples/arguments-custom-processing.js) + +```js +program + .command('add') + .argument('', 'integer argument', myParseInt) + .argument('[second]', 'integer argument', myParseInt, 1000) + .action((first, second) => { + console.log(`${first} + ${second} = ${first + second}`); + }) +; +``` + +### Action handler + +The action handler gets passed a parameter for each command-argument you declared, and two additional parameters +which are the parsed options and the command object itself. + +Example file: [thank.js](./examples/thank.js) + +```js +program + .argument('') + .option('-t, --title ', 'title to use before name') + .option('-d, --debug', 'display some debugging') + .action((name, options, command) => { + if (options.debug) { + console.error('Called %s with options %o', command.name(), options); + } + const title = options.title ? `${options.title} ` : ''; + console.log(`Thank-you ${title}${name}`); + }); +``` + +If you prefer, you can work with the command directly and skip declaring the parameters for the action handler. The `this` keyword is set to the running command and can be used from a function expression (but not from an arrow function). + +Example file: [action-this.js](./examples/action-this.js) + +```js +program + .command('serve') + .argument(' +``` + +## Use + +```js +import {decodeNamedCharacterReference} from 'decode-named-character-reference' + +decodeNamedCharacterReference('amp') //=> '&' +``` + +## API + +This package exports the following identifier: `decodeNamedCharacterReference`. +There is no default export. + +### `decodeNamedCharacterReference(value)` + +Again, use [`parse-entities`][parse-entities]. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`parse-entities`][parse-entities] + — parse (decode) HTML character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/decode-named-character-reference/workflows/main/badge.svg + +[build]: https://github.com/wooorm/decode-named-character-reference/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/decode-named-character-reference.svg + +[coverage]: https://codecov.io/github/wooorm/decode-named-character-reference + +[downloads-badge]: https://img.shields.io/npm/dm/decode-named-character-reference.svg + +[downloads]: https://www.npmjs.com/package/decode-named-character-reference + +[size-badge]: https://img.shields.io/bundlephobia/minzip/decode-named-character-reference.svg + +[size]: https://bundlephobia.com/result?p=decode-named-character-reference + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[parse-entities]: https://github.com/wooorm/parse-entities diff --git a/node_modules/deep-extend/CHANGELOG.md b/node_modules/deep-extend/CHANGELOG.md new file mode 100644 index 0000000000..dd13ec1311 --- /dev/null +++ b/node_modules/deep-extend/CHANGELOG.md @@ -0,0 +1,46 @@ +Changelog +========= + +v0.6.0 +------ + +- Updated "devDependencies" versions to fix vulnerability alerts +- Dropped support of io.js and node.js v0.12.x and lower since new versions of + "devDependencies" couldn't work with those old node.js versions + (minimal supported version of node.js now is v4.0.0) + +v0.5.1 +------ + +- Fix prototype pollution vulnerability (thanks to @mwakerman for the PR) +- Avoid using deprecated Buffer API (thanks to @ChALkeR for the PR) + +v0.5.0 +------ + +- Auto-testing provided by Travis CI; +- Support older Node.JS versions (`v0.11.x` and `v0.10.x`); +- Removed tests files from npm package. + +v0.4.2 +------ + +- Fix for `null` as an argument. + +v0.4.1 +------ + +- Removed test code from npm package + ([see pull request #21](https://github.com/unclechu/node-deep-extend/pull/21)); +- Increased minimal version of Node from `0.4.0` to `0.12.0` + (because can't run tests on lesser version anyway). + +v0.4.0 +------ + +- **WARNING!** Broken backward compatibility with `v0.3.x`; +- Fixed bug with extending arrays instead of cloning; +- Deep cloning for arrays; +- Check for own property; +- Fixed some documentation issues; +- Strict JS mode. diff --git a/node_modules/deep-extend/LICENSE b/node_modules/deep-extend/LICENSE new file mode 100644 index 0000000000..5c58916f2f --- /dev/null +++ b/node_modules/deep-extend/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018, Viacheslav Lotsmanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/deep-extend/README.md b/node_modules/deep-extend/README.md new file mode 100644 index 0000000000..67c7fc0859 --- /dev/null +++ b/node_modules/deep-extend/README.md @@ -0,0 +1,91 @@ +Deep Extend +=========== + +Recursive object extending. + +[![Build Status](https://api.travis-ci.org/unclechu/node-deep-extend.svg?branch=master)](https://travis-ci.org/unclechu/node-deep-extend) + +[![NPM](https://nodei.co/npm/deep-extend.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/deep-extend/) + +Install +------- + +```bash +$ npm install deep-extend +``` + +Usage +----- + +```javascript +var deepExtend = require('deep-extend'); +var obj1 = { + a: 1, + b: 2, + d: { + a: 1, + b: [], + c: { test1: 123, test2: 321 } + }, + f: 5, + g: 123, + i: 321, + j: [1, 2] +}; +var obj2 = { + b: 3, + c: 5, + d: { + b: { first: 'one', second: 'two' }, + c: { test2: 222 } + }, + e: { one: 1, two: 2 }, + f: [], + g: (void 0), + h: /abc/g, + i: null, + j: [3, 4] +}; + +deepExtend(obj1, obj2); + +console.log(obj1); +/* +{ a: 1, + b: 3, + d: + { a: 1, + b: { first: 'one', second: 'two' }, + c: { test1: 123, test2: 222 } }, + f: [], + g: undefined, + c: 5, + e: { one: 1, two: 2 }, + h: /abc/g, + i: null, + j: [3, 4] } +*/ +``` + +Unit testing +------------ + +```bash +$ npm test +``` + +Changelog +--------- + +[CHANGELOG.md](./CHANGELOG.md) + +Any issues? +----------- + +Please, report about issues +[here](https://github.com/unclechu/node-deep-extend/issues). + +License +------- + +[MIT](./LICENSE) diff --git a/node_modules/deep-extend/index.js b/node_modules/deep-extend/index.js new file mode 100644 index 0000000000..762d81e954 --- /dev/null +++ b/node_modules/deep-extend/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/deep-extend'); diff --git a/node_modules/deep-extend/package.json b/node_modules/deep-extend/package.json new file mode 100644 index 0000000000..5f2195ff93 --- /dev/null +++ b/node_modules/deep-extend/package.json @@ -0,0 +1,62 @@ +{ + "name": "deep-extend", + "description": "Recursive object extending", + "license": "MIT", + "version": "0.6.0", + "homepage": "https://github.com/unclechu/node-deep-extend", + "keywords": [ + "deep-extend", + "extend", + "deep", + "recursive", + "xtend", + "clone", + "merge", + "json" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.githubusercontent.com/unclechu/node-deep-extend/master/LICENSE" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/unclechu/node-deep-extend.git" + }, + "author": "Viacheslav Lotsmanov ", + "bugs": "https://github.com/unclechu/node-deep-extend/issues", + "contributors": [ + { + "name": "Romain Prieto", + "url": "https://github.com/rprieto" + }, + { + "name": "Max Maximov", + "url": "https://github.com/maxmaximov" + }, + { + "name": "Marshall Bowers", + "url": "https://github.com/maxdeviant" + }, + { + "name": "Misha Wakerman", + "url": "https://github.com/mwakerman" + } + ], + "main": "lib/deep-extend.js", + "engines": { + "node": ">=4.0.0" + }, + "scripts": { + "test": "./node_modules/.bin/mocha" + }, + "devDependencies": { + "mocha": "5.2.0", + "should": "13.2.1" + }, + "files": [ + "index.js", + "lib/" + ] +} diff --git a/node_modules/dequal/index.d.ts b/node_modules/dequal/index.d.ts new file mode 100644 index 0000000000..a9aea5d506 --- /dev/null +++ b/node_modules/dequal/index.d.ts @@ -0,0 +1 @@ +export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/license b/node_modules/dequal/license new file mode 100644 index 0000000000..a3f96f8284 --- /dev/null +++ b/node_modules/dequal/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/dequal/lite/index.d.ts b/node_modules/dequal/lite/index.d.ts new file mode 100644 index 0000000000..a9aea5d506 --- /dev/null +++ b/node_modules/dequal/lite/index.d.ts @@ -0,0 +1 @@ +export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.js b/node_modules/dequal/lite/index.js new file mode 100644 index 0000000000..ac3eb6b870 --- /dev/null +++ b/node_modules/dequal/lite/index.js @@ -0,0 +1,31 @@ +var has = Object.prototype.hasOwnProperty; + +function dequal(foo, bar) { + var ctor, len; + if (foo === bar) return true; + + if (foo && bar && (ctor=foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + + if (ctor === Array) { + if ((len=foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])); + } + return len === -1; + } + + if (!ctor || typeof foo === 'object') { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + + return foo !== foo && bar !== bar; +} + +exports.dequal = dequal; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.min.js b/node_modules/dequal/lite/index.min.js new file mode 100644 index 0000000000..2eaa55fd06 --- /dev/null +++ b/node_modules/dequal/lite/index.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dequal={})}(this,(function(e){var t=Object.prototype.hasOwnProperty;e.dequal=function e(r,n){var o,i;if(r===n)return!0;if(r&&n&&(o=r.constructor)===n.constructor){if(o===Date)return r.getTime()===n.getTime();if(o===RegExp)return r.toString()===n.toString();if(o===Array){if((i=r.length)===n.length)for(;i--&&e(r[i],n[i]););return-1===i}if(!o||"object"==typeof r){for(o in i=0,r){if(t.call(r,o)&&++i&&!t.call(n,o))return!1;if(!(o in n)||!e(r[o],n[o]))return!1}return Object.keys(n).length===i}}return r!=r&&n!=n}})); \ No newline at end of file diff --git a/node_modules/dequal/lite/index.mjs b/node_modules/dequal/lite/index.mjs new file mode 100644 index 0000000000..5820d674f8 --- /dev/null +++ b/node_modules/dequal/lite/index.mjs @@ -0,0 +1,29 @@ +var has = Object.prototype.hasOwnProperty; + +export function dequal(foo, bar) { + var ctor, len; + if (foo === bar) return true; + + if (foo && bar && (ctor=foo.constructor) === bar.constructor) { + if (ctor === Date) return foo.getTime() === bar.getTime(); + if (ctor === RegExp) return foo.toString() === bar.toString(); + + if (ctor === Array) { + if ((len=foo.length) === bar.length) { + while (len-- && dequal(foo[len], bar[len])); + } + return len === -1; + } + + if (!ctor || typeof foo === 'object') { + len = 0; + for (ctor in foo) { + if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; + if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; + } + return Object.keys(bar).length === len; + } + } + + return foo !== foo && bar !== bar; +} diff --git a/node_modules/dequal/package.json b/node_modules/dequal/package.json new file mode 100644 index 0000000000..df1cb29cb2 --- /dev/null +++ b/node_modules/dequal/package.json @@ -0,0 +1,57 @@ +{ + "name": "dequal", + "version": "2.0.3", + "repository": "lukeed/dequal", + "description": "A tiny (304B to 489B) utility for check for deep equality", + "unpkg": "dist/index.min.js", + "module": "dist/index.mjs", + "main": "dist/index.js", + "types": "index.d.ts", + "license": "MIT", + "author": { + "name": "Luke Edwards", + "email": "luke.edwards05@gmail.com", + "url": "https://lukeed.com" + }, + "engines": { + "node": ">=6" + }, + "scripts": { + "build": "bundt", + "pretest": "npm run build", + "postbuild": "echo \"lite\" | xargs -n1 cp -v index.d.ts", + "test": "uvu -r esm test" + }, + "files": [ + "*.d.ts", + "dist", + "lite" + ], + "exports": { + ".": { + "types": "./index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./lite": { + "types": "./index.d.ts", + "import": "./lite/index.mjs", + "require": "./lite/index.js" + }, + "./package.json": "./package.json" + }, + "modes": { + "lite": "src/lite.js", + "default": "src/index.js" + }, + "keywords": [ + "deep", + "deep-equal", + "equality" + ], + "devDependencies": { + "bundt": "1.0.2", + "esm": "3.2.25", + "uvu": "0.3.2" + } +} diff --git a/node_modules/dequal/readme.md b/node_modules/dequal/readme.md new file mode 100644 index 0000000000..e3341ef475 --- /dev/null +++ b/node_modules/dequal/readme.md @@ -0,0 +1,112 @@ +# dequal [![CI](https://github.com/lukeed/dequal/workflows/CI/badge.svg)](https://github.com/lukeed/dequal/actions) + +> A tiny (304B to 489B) utility to check for deep equality + +This module supports comparison of all types, including `Function`, `RegExp`, `Date`, `Set`, `Map`, `TypedArray`s, `DataView`, `null`, `undefined`, and `NaN` values. Complex values (eg, Objects, Arrays, Sets, Maps, etc) are traversed recursively. + +> **Important:** +> * key order **within Objects** does not matter +> * value order **within Arrays** _does_ matter +> * values **within Sets and Maps** use value equality +> * keys **within Maps** use value equality + + +## Install + +``` +$ npm install --save dequal +``` + +## Modes + +There are two "versions" of `dequal` available: + +#### `dequal` +> **Size (gzip):** 489 bytes
          +> **Availability:** [CommonJS](https://unpkg.com/dequal/dist/index.js), [ES Module](https://unpkg.com/dequal/dist/index.mjs), [UMD](https://unpkg.com/dequal/dist/index.min.js) + +#### `dequal/lite` +> **Size (gzip):** 304 bytes
          +> **Availability:** [CommonJS](https://unpkg.com/dequal/lite/index.js), [ES Module](https://unpkg.com/dequal/lite/index.mjs) + +| | IE9+ | Number | String | Date | RegExp | Object | Array | Class | Set | Map | ArrayBuffer | [TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects) | [DataView](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) | +|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +| `dequal` | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| `dequal/lite` | :+1: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | + +> **Note:** Table scrolls horizontally! + +## Usage + +```js +import { dequal } from 'dequal'; + +dequal(1, 1); //=> true +dequal({}, {}); //=> true +dequal('foo', 'foo'); //=> true +dequal([1, 2, 3], [1, 2, 3]); //=> true +dequal(dequal, dequal); //=> true +dequal(/foo/, /foo/); //=> true +dequal(null, null); //=> true +dequal(NaN, NaN); //=> true +dequal([], []); //=> true +dequal( + [{ a:1 }, [{ b:{ c:[1] } }]], + [{ a:1 }, [{ b:{ c:[1] } }]] +); //=> true + +dequal(1, '1'); //=> false +dequal(null, undefined); //=> false +dequal({ a:1, b:[2,3] }, { a:1, b:[2,5] }); //=> false +dequal(/foo/i, /bar/g); //=> false +``` + +## API + +### dequal(foo, bar) +Returns: `Boolean` + +Both `foo` and `bar` can be of any type.
          +A `Boolean` is returned indicating if the two were deeply equal. + + +## Benchmarks + +> Running Node v10.13.0 + +The benchmarks can be found in the [`/bench`](/bench) directory. They are separated into two categories: + +* `basic` – compares an object comprised of `String`, `Number`, `Date`, `Array`, and `Object` values. +* `complex` – like `basic`, but adds `RegExp`, `Map`, `Set`, and `Uint8Array` values. + +> **Note:** Only candidates that pass validation step(s) are listed.
          For example, `fast-deep-equal/es6` handles `Set` and `Map` values, but uses _referential equality_ while those listed use _value equality_. + +``` +Load times: + assert 0.109ms + util 0.006ms + fast-deep-equal 0.479ms + lodash/isequal 22.826ms + nano-equal 0.417ms + dequal 0.396ms + dequal/lite 0.264ms + +Benchmark :: basic + assert.deepStrictEqual x 325,262 ops/sec ±0.57% (94 runs sampled) + util.isDeepStrictEqual x 318,812 ops/sec ±0.87% (94 runs sampled) + fast-deep-equal x 1,332,393 ops/sec ±0.36% (93 runs sampled) + lodash.isEqual x 269,129 ops/sec ±0.59% (95 runs sampled) + nano-equal x 1,122,053 ops/sec ±0.36% (96 runs sampled) + dequal/lite x 1,700,972 ops/sec ±0.31% (94 runs sampled) + dequal x 1,698,972 ops/sec ±0.63% (97 runs sampled) + +Benchmark :: complex + assert.deepStrictEqual x 124,518 ops/sec ±0.64% (96 runs sampled) + util.isDeepStrictEqual x 125,113 ops/sec ±0.24% (96 runs sampled) + lodash.isEqual x 58,677 ops/sec ±0.49% (96 runs sampled) + dequal x 345,386 ops/sec ±0.27% (96 runs sampled) +``` + +## License + +MIT © [Luke Edwards](https://lukeed.com) diff --git a/node_modules/devlop/license b/node_modules/devlop/license new file mode 100644 index 0000000000..de5a7bba71 --- /dev/null +++ b/node_modules/devlop/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2023 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/devlop/package.json b/node_modules/devlop/package.json new file mode 100644 index 0000000000..8319d8d58a --- /dev/null +++ b/node_modules/devlop/package.json @@ -0,0 +1,80 @@ +{ + "name": "devlop", + "version": "1.1.0", + "description": "Do things in development and nothing otherwise", + "license": "MIT", + "keywords": [ + "assert", + "deprecate", + "develop", + "development" + ], + "repository": "wooorm/devlop", + "bugs": "https://github.com/wooorm/devlop/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "exports": { + "types": "./lib/development.d.ts", + "development": "./lib/development.js", + "default": "./lib/default.js" + }, + "files": [ + "lib/" + ], + "dependencies": { + "dequal": "^2.0.0" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-terser": "^0.4.3", + "@types/node": "^20.0.0", + "c8": "^8.0.0", + "esbuild": "^0.18.0", + "prettier": "^2.0.0", + "remark-cli": "^11.0.0", + "remark-preset-wooorm": "^9.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.54.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api-development": "node --conditions development test-development.js", + "test-api-default": "node test-default.js", + "test-api": "npm run test-api-development && npm run test-api-default", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "prettier": true + } +} diff --git a/node_modules/devlop/readme.md b/node_modules/devlop/readme.md new file mode 100644 index 0000000000..d90be19130 --- /dev/null +++ b/node_modules/devlop/readme.md @@ -0,0 +1,360 @@ +# devlop + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Some tools to make developing easier while not including code in production. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`deprecate(fn, message[, code])`](#deprecatefn-message-code) + * [`equal(actual, expected[, message])`](#equalactual-expected-message) + * [`ok(value[, message])`](#okvalue-message) + * [`unreachable(message?)`](#unreachablemessage) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package lets you do things in development that are free in production. +It contains useful `assert` functions and a `deprecate` function that are +useful when developing JavaScript packages while being small in production. + +If you know Rust, you might know how nice having a +[`debug_assert!`][rust-debug-assert] is. +This is that, and a bit more. +For more on why they’re nice, see +[“Rust’s Two Kinds of ‘Assert’ Make for Better Code”][rust-two-kinds] + +## When should I use this? + +Many JavaScript programs do not use assertions at all (perhaps because they’re +typed and so assume type safety) or include lots of code to throw errors when +users do weird things (weighing down production code). +This package hopes to improve the sitation by making assertions free and +deprecations cheap. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install devlop +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {deprecate, equal, ok, unreachable} from 'https://esm.sh/devlop@1' +// For development code: +// import {deprecate, equal, ok} from 'https://esm.sh/devlop@1?conditions=development' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say we have a small ponyfill for the ES5 `String#includes` function. +It’s deprecated, because folks can use `String#includes` nowadays. +It’s nicely typed so users should be able to figure out what to pass but we +include assertions to show nicer errors when they get it wrong. + +`example/string-includes.js`: + +```js +import {deprecate, ok} from 'devlop' + +export const stringIncludes = deprecate( + includes, + 'Since ES5, please use `String#includes` itself.' +) + +/** + * @deprecated + * Since ES5, please use `String#includes` itself. + * @param {string} value + * Value to search in. + * @param {string} search + * Value to search for. + * @param {number | undefined} [position=0] + * Position to search from (default: `0`). + * @returns {boolean} + * Whether the searched for value exists in the searched value after position. + */ +function includes(value, search, position) { + ok(typeof value === 'string', 'expected string for `value`') + ok(typeof search === 'string', 'expected string for `search`') + ok(position === undefined || typeof position === 'number', 'expected number') + ok( + position === undefined || + (typeof position === 'number' && + !(/* #__PURE__ */ Number.isNaN(position))), + 'expected number' + ) + // eslint-disable-next-line unicorn/prefer-includes + return value.indexOf(search, position || 0) !== -1 +} +``` + +`example/index.js`: + +```js +import {stringIncludes} from './example-includes.js' + +console.log(stringIncludes('blue whale', 'dolphin')) //=> false +console.log(stringIncludes('blue whale', 'whale')) //=> true +``` + +Say we’d bundle that in development with [`esbuild`][esbuild] and check the +gzip size ([`gzip-size-cli`][gzip-size-cli]), we’d get 1.02 kB of code: + +```sh +$ esbuild example/index.js --bundle --conditions=development --format=esm --minify --target=es2022 | gzip-size +1.02 kB +``` + +But because `devlop` is light in production we’d get: + +```sh +$ esbuild example/index.js --bundle --format=esm --minify --target=es2022 | gzip-size +169 B +``` + +The bundle looks as follows: + +```js +function u(n){return n}var r=u(c,"Since ES5, please use `String#includes` itself.");function c(n,t,e){return n.indexOf(t,e||0)!==-1}console.log(r("blue whale","dolphin"));console.log(r("blue whale","whale")); +``` + +It depends a bit on which bundler and minifier you use how small the code is: +esbuild keeps the unused message parameter to the `deprecate` function around +and does not know `Number.isNaN` can be dropped without a `/* #__PURE__ */` +annotation. + +[`rollup`][rollup] with [`@rollup/plugin-node-resolve`][node-resolve] +and [`@rollup/plugin-terser`][terser] performs even better: + +```sh +$ rollup example/index.js -p node-resolve -p terser | gzip-size +118 B +``` + +The bundle looks as follows: + +```js +const l=function(l,e,o){return-1!==l.indexOf(e,o||0)};console.log(l("blue whale","dolphin")),console.log(l("blue whale","whale")); +``` + +Rollup doesn’t need the `/* #__PURE__ */` comment either! + +## API + +This package exports the identifiers [`deprecate`][api-deprecate], +[`equal`][api-equal], [`ok`][api-ok], and [`unreachable`][api-unreachable]. +There is no default export. + +The export map supports the [`development` condition][node-condition]. +Run `node --conditions development module.js` to get dev code. +Without this condition, no-ops are loaded. + +### `deprecate(fn, message[, code])` + +Wrap a function or class to show a deprecation message when first called. + +> 👉 **Important**: only shows a message when the `development` condition is +> used, does nothing in production. + +When the resulting wrapped `fn` is called, emits a warning once to +`console.error` (`stderr`). +If a code is given, one warning message will be emitted in total per code. + +###### Parameters + +* `fn` (`Function`) + — function or class +* `message` (`string`) + — message explaining deprecation +* `code` (`string`, optional) + — deprecation identifier (optional); deprecation messages will be generated + only once per code + +###### Returns + +Wrapped `fn`. + +### `equal(actual, expected[, message])` + +Assert deep strict equivalence. + +> 👉 **Important**: only asserts when the `development` condition is used, does +> nothing in production. + +###### Parameters + +* `actual` (`unknown`) + — value +* `expected` (`unknown`) + — baseline +* `message` (`Error` or `string`, default: `'Expected values to be deeply + equal'`) + — message for assertion error + +###### Returns + +Nothing (`undefined`). + +###### Throws + +Throws (`AssertionError`) when `actual` is not deep strict equal to `expected`. + +### `ok(value[, message])` + +Assert if `value` is truthy. + +> 👉 **Important**: only asserts when the `development` condition is used, does +> nothing in production. + +###### Parameters + +* `actual` (`unknown`) + — value to assert +* `message` (`Error` or `string`, default: `'Expected value to be truthy'`) + — message for assertion error + +###### Returns + +Nothing (`undefined`). + +###### Throws + +Throws (`AssertionError`) when `value` is falsey. + +### `unreachable(message?)` + +Assert that a code path never happens. + +> 👉 **Important**: only asserts when the `development` condition is used, +> does nothing in production. + +###### Parameters + +* `message` (`Error` or `string`, default: `'Unreachable'`) + — message for assertion error + +###### Returns + +Never (`never`). + +###### Throws + +Throws (`AssertionError`), always. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +This project is compatible with maintained versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, `devlop@^1`, +compatible with Node.js 16. + +## Security + +This package is safe. + +## Related + +* [`babel-plugin-unassert`](https://github.com/unassert-js/babel-plugin-unassert) + — encourage reliable programming with assertions while compiling them away + in production (can remove arbitrary `assert` modules, works regardless of + conditions, so has to be configured by the end user) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/devlop/workflows/main/badge.svg + +[build]: https://github.com/wooorm/devlop/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/devlop.svg + +[coverage]: https://codecov.io/github/wooorm/devlop + +[downloads-badge]: https://img.shields.io/npm/dm/devlop.svg + +[downloads]: https://www.npmjs.com/package/devlop + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=devlop + +[size]: https://bundlejs.com/?q=devlop + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[node-condition]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[rust-debug-assert]: https://doc.rust-lang.org/std/macro.debug_assert.html + +[rust-two-kinds]: https://tratt.net/laurie/blog/2023/rusts_two_kinds_of_assert_make_for_better_code.html + +[esbuild]: https://esbuild.github.io + +[gzip-size-cli]: https://github.com/sindresorhus/gzip-size-cli/tree/main + +[rollup]: https://rollupjs.org + +[node-resolve]: https://github.com/rollup/plugins/tree/master/packages/node-resolve + +[terser]: https://github.com/rollup/plugins/tree/master/packages/terser#readme + +[api-deprecate]: #deprecatefn-message-code + +[api-equal]: #equalactual-expected-message + +[api-ok]: #okvalue-message + +[api-unreachable]: #unreachablemessage diff --git a/node_modules/eastasianwidth/README.md b/node_modules/eastasianwidth/README.md new file mode 100644 index 0000000000..a8b71ee54d --- /dev/null +++ b/node_modules/eastasianwidth/README.md @@ -0,0 +1,32 @@ +# East Asian Width + +Get [East Asian Width](http://www.unicode.org/reports/tr11/) from a character. + +'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural). + +Original Code is [東アジアの文字幅 (East Asian Width) の判定 - 中途](http://d.hatena.ne.jp/takenspc/20111126#1322252878). + +## Install + + $ npm install eastasianwidth + +## Usage + + var eaw = require('eastasianwidth'); + console.log(eaw.eastAsianWidth('₩')) // 'F' + console.log(eaw.eastAsianWidth('。')) // 'H' + console.log(eaw.eastAsianWidth('뀀')) // 'W' + console.log(eaw.eastAsianWidth('a')) // 'Na' + console.log(eaw.eastAsianWidth('①')) // 'A' + console.log(eaw.eastAsianWidth('ف')) // 'N' + + console.log(eaw.characterLength('₩')) // 2 + console.log(eaw.characterLength('。')) // 1 + console.log(eaw.characterLength('뀀')) // 2 + console.log(eaw.characterLength('a')) // 1 + console.log(eaw.characterLength('①')) // 2 + console.log(eaw.characterLength('ف')) // 1 + + console.log(eaw.length('あいうえお')) // 10 + console.log(eaw.length('abcdefg')) // 7 + console.log(eaw.length('¢₩。ᅵㄅ뀀¢⟭a⊙①بف')) // 19 diff --git a/node_modules/eastasianwidth/eastasianwidth.js b/node_modules/eastasianwidth/eastasianwidth.js new file mode 100644 index 0000000000..7d0aa0f6ec --- /dev/null +++ b/node_modules/eastasianwidth/eastasianwidth.js @@ -0,0 +1,311 @@ +var eaw = {}; + +if ('undefined' == typeof module) { + window.eastasianwidth = eaw; +} else { + module.exports = eaw; +} + +eaw.eastAsianWidth = function(character) { + var x = character.charCodeAt(0); + var y = (character.length == 2) ? character.charCodeAt(1) : 0; + var codePoint = x; + if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { + x &= 0x3FF; + y &= 0x3FF; + codePoint = (x << 10) | y; + codePoint += 0x10000; + } + + if ((0x3000 == codePoint) || + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { + return 'F'; + } + if ((0x20A9 == codePoint) || + (0xFF61 <= codePoint && codePoint <= 0xFFBE) || + (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || + (0xFFCA <= codePoint && codePoint <= 0xFFCF) || + (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || + (0xFFDA <= codePoint && codePoint <= 0xFFDC) || + (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { + return 'H'; + } + if ((0x1100 <= codePoint && codePoint <= 0x115F) || + (0x11A3 <= codePoint && codePoint <= 0x11A7) || + (0x11FA <= codePoint && codePoint <= 0x11FF) || + (0x2329 <= codePoint && codePoint <= 0x232A) || + (0x2E80 <= codePoint && codePoint <= 0x2E99) || + (0x2E9B <= codePoint && codePoint <= 0x2EF3) || + (0x2F00 <= codePoint && codePoint <= 0x2FD5) || + (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || + (0x3001 <= codePoint && codePoint <= 0x303E) || + (0x3041 <= codePoint && codePoint <= 0x3096) || + (0x3099 <= codePoint && codePoint <= 0x30FF) || + (0x3105 <= codePoint && codePoint <= 0x312D) || + (0x3131 <= codePoint && codePoint <= 0x318E) || + (0x3190 <= codePoint && codePoint <= 0x31BA) || + (0x31C0 <= codePoint && codePoint <= 0x31E3) || + (0x31F0 <= codePoint && codePoint <= 0x321E) || + (0x3220 <= codePoint && codePoint <= 0x3247) || + (0x3250 <= codePoint && codePoint <= 0x32FE) || + (0x3300 <= codePoint && codePoint <= 0x4DBF) || + (0x4E00 <= codePoint && codePoint <= 0xA48C) || + (0xA490 <= codePoint && codePoint <= 0xA4C6) || + (0xA960 <= codePoint && codePoint <= 0xA97C) || + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || + (0xD7CB <= codePoint && codePoint <= 0xD7FB) || + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + (0xFE30 <= codePoint && codePoint <= 0xFE52) || + (0xFE54 <= codePoint && codePoint <= 0xFE66) || + (0xFE68 <= codePoint && codePoint <= 0xFE6B) || + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + (0x1F200 <= codePoint && codePoint <= 0x1F202) || + (0x1F210 <= codePoint && codePoint <= 0x1F23A) || + (0x1F240 <= codePoint && codePoint <= 0x1F248) || + (0x1F250 <= codePoint && codePoint <= 0x1F251) || + (0x20000 <= codePoint && codePoint <= 0x2F73F) || + (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || + (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { + return 'W'; + } + if ((0x0020 <= codePoint && codePoint <= 0x007E) || + (0x00A2 <= codePoint && codePoint <= 0x00A3) || + (0x00A5 <= codePoint && codePoint <= 0x00A6) || + (0x00AC == codePoint) || + (0x00AF == codePoint) || + (0x27E6 <= codePoint && codePoint <= 0x27ED) || + (0x2985 <= codePoint && codePoint <= 0x2986)) { + return 'Na'; + } + if ((0x00A1 == codePoint) || + (0x00A4 == codePoint) || + (0x00A7 <= codePoint && codePoint <= 0x00A8) || + (0x00AA == codePoint) || + (0x00AD <= codePoint && codePoint <= 0x00AE) || + (0x00B0 <= codePoint && codePoint <= 0x00B4) || + (0x00B6 <= codePoint && codePoint <= 0x00BA) || + (0x00BC <= codePoint && codePoint <= 0x00BF) || + (0x00C6 == codePoint) || + (0x00D0 == codePoint) || + (0x00D7 <= codePoint && codePoint <= 0x00D8) || + (0x00DE <= codePoint && codePoint <= 0x00E1) || + (0x00E6 == codePoint) || + (0x00E8 <= codePoint && codePoint <= 0x00EA) || + (0x00EC <= codePoint && codePoint <= 0x00ED) || + (0x00F0 == codePoint) || + (0x00F2 <= codePoint && codePoint <= 0x00F3) || + (0x00F7 <= codePoint && codePoint <= 0x00FA) || + (0x00FC == codePoint) || + (0x00FE == codePoint) || + (0x0101 == codePoint) || + (0x0111 == codePoint) || + (0x0113 == codePoint) || + (0x011B == codePoint) || + (0x0126 <= codePoint && codePoint <= 0x0127) || + (0x012B == codePoint) || + (0x0131 <= codePoint && codePoint <= 0x0133) || + (0x0138 == codePoint) || + (0x013F <= codePoint && codePoint <= 0x0142) || + (0x0144 == codePoint) || + (0x0148 <= codePoint && codePoint <= 0x014B) || + (0x014D == codePoint) || + (0x0152 <= codePoint && codePoint <= 0x0153) || + (0x0166 <= codePoint && codePoint <= 0x0167) || + (0x016B == codePoint) || + (0x01CE == codePoint) || + (0x01D0 == codePoint) || + (0x01D2 == codePoint) || + (0x01D4 == codePoint) || + (0x01D6 == codePoint) || + (0x01D8 == codePoint) || + (0x01DA == codePoint) || + (0x01DC == codePoint) || + (0x0251 == codePoint) || + (0x0261 == codePoint) || + (0x02C4 == codePoint) || + (0x02C7 == codePoint) || + (0x02C9 <= codePoint && codePoint <= 0x02CB) || + (0x02CD == codePoint) || + (0x02D0 == codePoint) || + (0x02D8 <= codePoint && codePoint <= 0x02DB) || + (0x02DD == codePoint) || + (0x02DF == codePoint) || + (0x0300 <= codePoint && codePoint <= 0x036F) || + (0x0391 <= codePoint && codePoint <= 0x03A1) || + (0x03A3 <= codePoint && codePoint <= 0x03A9) || + (0x03B1 <= codePoint && codePoint <= 0x03C1) || + (0x03C3 <= codePoint && codePoint <= 0x03C9) || + (0x0401 == codePoint) || + (0x0410 <= codePoint && codePoint <= 0x044F) || + (0x0451 == codePoint) || + (0x2010 == codePoint) || + (0x2013 <= codePoint && codePoint <= 0x2016) || + (0x2018 <= codePoint && codePoint <= 0x2019) || + (0x201C <= codePoint && codePoint <= 0x201D) || + (0x2020 <= codePoint && codePoint <= 0x2022) || + (0x2024 <= codePoint && codePoint <= 0x2027) || + (0x2030 == codePoint) || + (0x2032 <= codePoint && codePoint <= 0x2033) || + (0x2035 == codePoint) || + (0x203B == codePoint) || + (0x203E == codePoint) || + (0x2074 == codePoint) || + (0x207F == codePoint) || + (0x2081 <= codePoint && codePoint <= 0x2084) || + (0x20AC == codePoint) || + (0x2103 == codePoint) || + (0x2105 == codePoint) || + (0x2109 == codePoint) || + (0x2113 == codePoint) || + (0x2116 == codePoint) || + (0x2121 <= codePoint && codePoint <= 0x2122) || + (0x2126 == codePoint) || + (0x212B == codePoint) || + (0x2153 <= codePoint && codePoint <= 0x2154) || + (0x215B <= codePoint && codePoint <= 0x215E) || + (0x2160 <= codePoint && codePoint <= 0x216B) || + (0x2170 <= codePoint && codePoint <= 0x2179) || + (0x2189 == codePoint) || + (0x2190 <= codePoint && codePoint <= 0x2199) || + (0x21B8 <= codePoint && codePoint <= 0x21B9) || + (0x21D2 == codePoint) || + (0x21D4 == codePoint) || + (0x21E7 == codePoint) || + (0x2200 == codePoint) || + (0x2202 <= codePoint && codePoint <= 0x2203) || + (0x2207 <= codePoint && codePoint <= 0x2208) || + (0x220B == codePoint) || + (0x220F == codePoint) || + (0x2211 == codePoint) || + (0x2215 == codePoint) || + (0x221A == codePoint) || + (0x221D <= codePoint && codePoint <= 0x2220) || + (0x2223 == codePoint) || + (0x2225 == codePoint) || + (0x2227 <= codePoint && codePoint <= 0x222C) || + (0x222E == codePoint) || + (0x2234 <= codePoint && codePoint <= 0x2237) || + (0x223C <= codePoint && codePoint <= 0x223D) || + (0x2248 == codePoint) || + (0x224C == codePoint) || + (0x2252 == codePoint) || + (0x2260 <= codePoint && codePoint <= 0x2261) || + (0x2264 <= codePoint && codePoint <= 0x2267) || + (0x226A <= codePoint && codePoint <= 0x226B) || + (0x226E <= codePoint && codePoint <= 0x226F) || + (0x2282 <= codePoint && codePoint <= 0x2283) || + (0x2286 <= codePoint && codePoint <= 0x2287) || + (0x2295 == codePoint) || + (0x2299 == codePoint) || + (0x22A5 == codePoint) || + (0x22BF == codePoint) || + (0x2312 == codePoint) || + (0x2460 <= codePoint && codePoint <= 0x24E9) || + (0x24EB <= codePoint && codePoint <= 0x254B) || + (0x2550 <= codePoint && codePoint <= 0x2573) || + (0x2580 <= codePoint && codePoint <= 0x258F) || + (0x2592 <= codePoint && codePoint <= 0x2595) || + (0x25A0 <= codePoint && codePoint <= 0x25A1) || + (0x25A3 <= codePoint && codePoint <= 0x25A9) || + (0x25B2 <= codePoint && codePoint <= 0x25B3) || + (0x25B6 <= codePoint && codePoint <= 0x25B7) || + (0x25BC <= codePoint && codePoint <= 0x25BD) || + (0x25C0 <= codePoint && codePoint <= 0x25C1) || + (0x25C6 <= codePoint && codePoint <= 0x25C8) || + (0x25CB == codePoint) || + (0x25CE <= codePoint && codePoint <= 0x25D1) || + (0x25E2 <= codePoint && codePoint <= 0x25E5) || + (0x25EF == codePoint) || + (0x2605 <= codePoint && codePoint <= 0x2606) || + (0x2609 == codePoint) || + (0x260E <= codePoint && codePoint <= 0x260F) || + (0x2614 <= codePoint && codePoint <= 0x2615) || + (0x261C == codePoint) || + (0x261E == codePoint) || + (0x2640 == codePoint) || + (0x2642 == codePoint) || + (0x2660 <= codePoint && codePoint <= 0x2661) || + (0x2663 <= codePoint && codePoint <= 0x2665) || + (0x2667 <= codePoint && codePoint <= 0x266A) || + (0x266C <= codePoint && codePoint <= 0x266D) || + (0x266F == codePoint) || + (0x269E <= codePoint && codePoint <= 0x269F) || + (0x26BE <= codePoint && codePoint <= 0x26BF) || + (0x26C4 <= codePoint && codePoint <= 0x26CD) || + (0x26CF <= codePoint && codePoint <= 0x26E1) || + (0x26E3 == codePoint) || + (0x26E8 <= codePoint && codePoint <= 0x26FF) || + (0x273D == codePoint) || + (0x2757 == codePoint) || + (0x2776 <= codePoint && codePoint <= 0x277F) || + (0x2B55 <= codePoint && codePoint <= 0x2B59) || + (0x3248 <= codePoint && codePoint <= 0x324F) || + (0xE000 <= codePoint && codePoint <= 0xF8FF) || + (0xFE00 <= codePoint && codePoint <= 0xFE0F) || + (0xFFFD == codePoint) || + (0x1F100 <= codePoint && codePoint <= 0x1F10A) || + (0x1F110 <= codePoint && codePoint <= 0x1F12D) || + (0x1F130 <= codePoint && codePoint <= 0x1F169) || + (0x1F170 <= codePoint && codePoint <= 0x1F19A) || + (0xE0100 <= codePoint && codePoint <= 0xE01EF) || + (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || + (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { + return 'A'; + } + + return 'N'; +}; + +eaw.characterLength = function(character) { + var code = this.eastAsianWidth(character); + if (code == 'F' || code == 'W' || code == 'A') { + return 2; + } else { + return 1; + } +}; + +// Split a string considering surrogate-pairs. +function stringToArray(string) { + return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; +} + +eaw.length = function(string) { + var characters = stringToArray(string); + var len = 0; + for (var i = 0; i < characters.length; i++) { + len = len + this.characterLength(characters[i]); + } + return len; +}; + +eaw.slice = function(text, start, end) { + textLen = eaw.length(text) + start = start ? start : 0; + end = end ? end : 1; + if (start < 0) { + start = textLen + start; + } + if (end < 0) { + end = textLen + end; + } + var result = ''; + var eawLen = 0; + var chars = stringToArray(text); + for (var i = 0; i < chars.length; i++) { + var char = chars[i]; + var charLen = eaw.length(char); + if (eawLen >= start - (charLen == 2 ? 1 : 0)) { + if (eawLen + charLen <= end) { + result += char; + } else { + break; + } + } + eawLen += charLen; + } + return result; +}; diff --git a/node_modules/eastasianwidth/package.json b/node_modules/eastasianwidth/package.json new file mode 100644 index 0000000000..cb7ac6ab3b --- /dev/null +++ b/node_modules/eastasianwidth/package.json @@ -0,0 +1,18 @@ +{ + "name": "eastasianwidth", + "version": "0.2.0", + "description": "Get East Asian Width from a character.", + "main": "eastasianwidth.js", + "files": [ + "eastasianwidth.js" + ], + "scripts": { + "test": "mocha" + }, + "repository": "git://github.com/komagata/eastasianwidth.git", + "author": "Masaki Komagata", + "license": "MIT", + "devDependencies": { + "mocha": "~1.9.0" + } +} diff --git a/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/emoji-regex/README.md b/node_modules/emoji-regex/README.md new file mode 100644 index 0000000000..6d63082740 --- /dev/null +++ b/node_modules/emoji-regex/README.md @@ -0,0 +1,137 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=main)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols and sequences (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [Unicode data](https://github.com/node-unicode/node-unicode-data). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex/RGI_Emoji.js'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +## Regular expression flavors + +The package comes with three distinct regular expressions: + +```js +// This is the recommended regular expression to use. It matches all +// emoji recommended for general interchange, as defined via the +// `RGI_Emoji` property in the Unicode Standard. +// https://unicode.org/reports/tr51/#def_rgi_set +// When in doubt, use this! +const emojiRegexRGI = require('emoji-regex/RGI_Emoji.js'); + +// This is the old regular expression, prior to `RGI_Emoji` being +// standardized. In addition to all `RGI_Emoji` sequences, it matches +// some emoji you probably don’t want to match (such as emoji component +// symbols that are not meant to be used separately). +const emojiRegex = require('emoji-regex/index.js'); + +// This regular expression matches even more emoji than the previous +// one, including emoji that render as text instead of icons (i.e. +// emoji that are not `Emoji_Presentation` symbols and that aren’t +// forced to render as emoji by a variation selector). +const emojiRegexText = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegexRGI = require('emoji-regex/es2015/RGI_Emoji.js'); +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## For maintainers + +### How to update emoji-regex after new Unicode Standard releases + +1. Update the Unicode data dependency in `package.json` by running the following commands: + + ```sh + # Example: updating from Unicode v12 to Unicode v13. + npm uninstall @unicode/unicode-12.0.0 + npm install @unicode/unicode-13.0.0 --save-dev + ```` + +1. Generate the new output: + + ```sh + npm run build + ``` + +1. Verify that tests still pass: + + ```sh + npm test + ``` + +1. Send a pull request with the changes, and get it reviewed & merged. + +1. On the `main` branch, bump the emoji-regex version number in `package.json`: + + ```sh + npm version patch -m 'Release v%s' + ``` + + Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). + + Note that this produces a Git commit + tag. + +1. Push the release commit and tag: + + ```sh + git push + ``` + + Our CI then automatically publishes the new release to npm. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/emoji-regex/RGI_Emoji.d.ts b/node_modules/emoji-regex/RGI_Emoji.d.ts new file mode 100644 index 0000000000..89a651fb33 --- /dev/null +++ b/node_modules/emoji-regex/RGI_Emoji.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/RGI_Emoji' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/RGI_Emoji.js b/node_modules/emoji-regex/RGI_Emoji.js new file mode 100644 index 0000000000..3fbe924100 --- /dev/null +++ b/node_modules/emoji-regex/RGI_Emoji.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g; +}; diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts new file mode 100644 index 0000000000..bf0f154b15 --- /dev/null +++ b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015/RGI_Emoji' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.js b/node_modules/emoji-regex/es2015/RGI_Emoji.js new file mode 100644 index 0000000000..ecf32f1779 --- /dev/null +++ b/node_modules/emoji-regex/es2015/RGI_Emoji.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu; +}; diff --git a/node_modules/emoji-regex/es2015/index.d.ts b/node_modules/emoji-regex/es2015/index.d.ts new file mode 100644 index 0000000000..823dfa6532 --- /dev/null +++ b/node_modules/emoji-regex/es2015/index.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/index.js b/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 0000000000..1a4fc8d0dc --- /dev/null +++ b/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/emoji-regex/es2015/text.d.ts b/node_modules/emoji-regex/es2015/text.d.ts new file mode 100644 index 0000000000..ccc2f9adca --- /dev/null +++ b/node_modules/emoji-regex/es2015/text.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/text.js b/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 0000000000..8e9f985758 --- /dev/null +++ b/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu; +}; diff --git a/node_modules/emoji-regex/index.d.ts b/node_modules/emoji-regex/index.d.ts new file mode 100644 index 0000000000..8f235c9a73 --- /dev/null +++ b/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/index.js b/node_modules/emoji-regex/index.js new file mode 100644 index 0000000000..c0490d4c95 --- /dev/null +++ b/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/emoji-regex/package.json b/node_modules/emoji-regex/package.json new file mode 100644 index 0000000000..eac892a16a --- /dev/null +++ b/node_modules/emoji-regex/package.json @@ -0,0 +1,52 @@ +{ + "name": "emoji-regex", + "version": "9.2.2", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "RGI_Emoji.js", + "RGI_Emoji.d.ts", + "text.js", + "text.d.ts", + "es2015" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.4.4", + "@babel/core": "^7.4.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/preset-env": "^7.4.4", + "@unicode/unicode-13.0.0": "^1.0.3", + "mocha": "^6.1.4", + "regexgen": "^1.3.0" + } +} diff --git a/node_modules/emoji-regex/text.d.ts b/node_modules/emoji-regex/text.d.ts new file mode 100644 index 0000000000..c3a0125451 --- /dev/null +++ b/node_modules/emoji-regex/text.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/text.js b/node_modules/emoji-regex/text.js new file mode 100644 index 0000000000..9bc63ce747 --- /dev/null +++ b/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g; +}; diff --git a/node_modules/entities/LICENSE b/node_modules/entities/LICENSE new file mode 100644 index 0000000000..c464f863ea --- /dev/null +++ b/node_modules/entities/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/entities/package.json b/node_modules/entities/package.json new file mode 100644 index 0000000000..2e857f8cf5 --- /dev/null +++ b/node_modules/entities/package.json @@ -0,0 +1,90 @@ +{ + "name": "entities", + "version": "4.5.0", + "description": "Encode & decode XML and HTML entities with ease & speed", + "author": "Felix Boehm ", + "funding": "https://github.com/fb55/entities?sponsor=1", + "sideEffects": false, + "keywords": [ + "entity", + "decoding", + "encoding", + "html", + "xml", + "html entities" + ], + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + ".": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "./lib/decode.js": { + "require": "./lib/decode.js", + "import": "./lib/esm/decode.js" + }, + "./lib/escape.js": { + "require": "./lib/escape.js", + "import": "./lib/esm/escape.js" + } + }, + "files": [ + "lib/**/*" + ], + "engines": { + "node": ">=0.12" + }, + "devDependencies": { + "@types/jest": "^28.1.8", + "@types/node": "^18.15.11", + "@typescript-eslint/eslint-plugin": "^5.58.0", + "@typescript-eslint/parser": "^5.58.0", + "eslint": "^8.38.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-node": "^11.1.0", + "jest": "^28.1.3", + "prettier": "^2.8.7", + "ts-jest": "^28.0.8", + "typedoc": "^0.24.1", + "typescript": "^5.0.4" + }, + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint .", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/entities/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "build:docs": "typedoc --hideGenerator src/index.ts", + "build:trie": "ts-node scripts/write-decode-map.ts", + "build:encode-trie": "ts-node scripts/write-encode-map.ts", + "prepare": "npm run build" + }, + "repository": { + "type": "git", + "url": "git://github.com/fb55/entities.git" + }, + "license": "BSD-2-Clause", + "jest": { + "preset": "ts-jest", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "prettier": { + "tabWidth": 4, + "proseWrap": "always" + } +} diff --git a/node_modules/entities/readme.md b/node_modules/entities/readme.md new file mode 100644 index 0000000000..731d90c68f --- /dev/null +++ b/node_modules/entities/readme.md @@ -0,0 +1,122 @@ +# entities [![NPM version](https://img.shields.io/npm/v/entities.svg)](https://npmjs.org/package/entities) [![Downloads](https://img.shields.io/npm/dm/entities.svg)](https://npmjs.org/package/entities) [![Node.js CI](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml) + +Encode & decode HTML & XML entities with ease & speed. + +## Features + +- 😇 Tried and true: `entities` is used by many popular libraries; eg. + [`htmlparser2`](https://github.com/fb55/htmlparser2), the official + [AWS SDK](https://github.com/aws/aws-sdk-js-v3) and + [`commonmark`](https://github.com/commonmark/commonmark.js) use it to + process HTML entities. +- ⚡️ Fast: `entities` is the fastest library for decoding HTML entities (as + of April 2022); see [performance](#performance). +- 🎛 Configurable: Get an output tailored for your needs. You are fine with + UTF8? That'll save you some bytes. Prefer to only have ASCII characters? We + can do that as well! + +## How to… + +### …install `entities` + + npm install entities + +### …use `entities` + +```javascript +const entities = require("entities"); + +// Encoding +entities.escapeUTF8("& ü"); // "&#38; ü" +entities.encodeXML("& ü"); // "&#38; ü" +entities.encodeHTML("& ü"); // "&#38; ü" + +// Decoding +entities.decodeXML("asdf & ÿ ü '"); // "asdf & ÿ ü '" +entities.decodeHTML("asdf & ÿ ü '"); // "asdf & ÿ ü '" +``` + +## Performance + +This is how `entities` compares to other libraries on a very basic benchmark +(see `scripts/benchmark.ts`, for 10,000,000 iterations; **lower is better**): + +| Library | Version | `decode` perf | `encode` perf | `escape` perf | +| -------------- | ------- | ------------- | ------------- | ------------- | +| entities | `3.0.1` | 1.418s | 6.786s | 2.196s | +| html-entities | `2.3.2` | 2.530s | 6.829s | 2.415s | +| he | `1.2.0` | 5.800s | 24.237s | 3.624s | +| parse-entities | `3.0.0` | 9.660s | N/A | N/A | + +--- + +## FAQ + +> What methods should I actually use to encode my documents? + +If your target supports UTF-8, the `escapeUTF8` method is going to be your best +choice. Otherwise, use either `encodeHTML` or `encodeXML` based on whether +you're dealing with an HTML or an XML document. + +You can have a look at the options for the `encode` and `decode` methods to see +everything you can configure. + +> When should I use strict decoding? + +When strict decoding, entities not terminated with a semicolon will be ignored. +This is helpful for decoding entities in legacy environments. + +> Why should I use `entities` instead of alternative modules? + +As of April 2022, `entities` is a bit faster than other modules. Still, this is +not a very differentiated space and other modules can catch up. + +**More importantly**, you might already have `entities` in your dependency graph +(as a dependency of eg. `cheerio`, or `htmlparser2`), and including it directly +might not even increase your bundle size. The same is true for other entity +libraries, so have a look through your `node_modules` directory! + +> Does `entities` support tree shaking? + +Yes! `entities` ships as both a CommonJS and a ES module. Note that for best +results, you should not use the `encode` and `decode` functions, as they wrap +around a number of other functions, all of which will remain in the bundle. +Instead, use the functions that you need directly. + +--- + +## Acknowledgements + +This library wouldn't be possible without the work of these individuals. Thanks +to + +- [@mathiasbynens](https://github.com/mathiasbynens) for his explanations + about character encodings, and his library `he`, which was one of the + inspirations for `entities` +- [@inikulin](https://github.com/inikulin) for his work on optimized tries for + decoding HTML entities for the `parse5` project +- [@mdevils](https://github.com/mdevils) for taking on the challenge of + producing a quick entity library with his `html-entities` library. + `entities` would be quite a bit slower if there wasn't any competition. + Right now `entities` is on top, but we'll see how long that lasts! + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). Tidelift will +coordinate the fix and disclosure. + +## `entities` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `entities` and thousands of other packages are working with +Tidelift to deliver commercial support and maintenance for the open source +dependencies you use to build your applications. Save time, reduce risk, and +improve code health, while paying the maintainers of the exact dependencies you +use. +[Learn more.](https://tidelift.com/subscription/pkg/npm-entities?utm_source=npm-entities&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/foreground-child/LICENSE b/node_modules/foreground-child/LICENSE new file mode 100644 index 0000000000..2d80720fe6 --- /dev/null +++ b/node_modules/foreground-child/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/foreground-child/README.md b/node_modules/foreground-child/README.md new file mode 100644 index 0000000000..477ca57178 --- /dev/null +++ b/node_modules/foreground-child/README.md @@ -0,0 +1,128 @@ +# foreground-child + +Run a child as if it's the foreground process. Give it stdio. Exit +when it exits. + +Mostly this module is here to support some use cases around +wrapping child processes for test coverage and such. But it's +also generally useful any time you want one program to execute +another as if it's the "main" process, for example, if a program +takes a `--cmd` argument to execute in some way. + +## USAGE + +```js +import { foregroundChild } from 'foreground-child' +// hybrid module, this also works: +// const { foregroundChild } = require('foreground-child') + +// cats out this file +const child = foregroundChild('cat', [__filename]) + +// At this point, it's best to just do nothing else. +// return or whatever. +// If the child gets a signal, or just exits, then this +// parent process will exit in the same way. +``` + +You can provide custom spawn options by passing an object after +the program and arguments: + +```js +const child = foregroundChild(`cat ${__filename}`, { shell: true }) +``` + +A callback can optionally be provided, if you want to perform an +action before your foreground-child exits: + +```js +const child = foregroundChild('cat', [__filename], spawnOptions, () => { + doSomeActions() +}) +``` + +The callback can return a Promise in order to perform +asynchronous actions. If the callback does not return a promise, +then it must complete its actions within a single JavaScript +tick. + +```js +const child = foregroundChild('cat', [__filename], async () => { + await doSomeAsyncActions() +}) +``` + +If the callback throws or rejects, then it will be unhandled, and +node will exit in error. + +If the callback returns a string value, then that will be used as +the signal to exit the parent process. If it returns a number, +then that number will be used as the parent exit status code. If +it returns boolean `false`, then the parent process will not be +terminated. If it returns `undefined`, then it will exit with the +same signal/code as the child process. + +## Caveats + +The "normal" standard IO file descriptors (0, 1, and 2 for stdin, +stdout, and stderr respectively) are shared with the child process. +Additionally, if there is an IPC channel set up in the parent, then +messages are proxied to the child on file descriptor 3. + +In Node, it's possible to also map arbitrary file descriptors +into a child process. In these cases, foreground-child will not +map the file descriptors into the child. If file descriptors 0, +1, or 2 are used for the IPC channel, then strange behavior may +happen (like printing IPC messages to stderr, for example). + +Note that a SIGKILL will always kill the parent process, but +will not proxy the signal to the child process, because SIGKILL +cannot be caught. In order to address this, a special "watchdog" +child process is spawned which will send a SIGKILL to the child +process if it does not terminate within half a second after the +watchdog receives a SIGHUP due to its parent terminating. + +On Windows, issuing a `process.kill(process.pid, signal)` with a +fatal termination signal may cause the process to exit with a `1` +status code rather than reporting the signal properly. This +module tries to do the right thing, but on Windows systems, you +may see that incorrect result. There is as far as I'm aware no +workaround for this. + +## util: `foreground-child/proxy-signals` + +If you just want to proxy the signals to a child process that the +main process receives, you can use the `proxy-signals` export +from this package. + +```js +import { proxySignals } from 'foreground-child/proxy-signals' + +const childProcess = spawn('command', ['some', 'args']) +proxySignals(childProcess) +``` + +Now, any fatal signal received by the current process will be +proxied to the child process. + +It doesn't go in the other direction; ie, signals sent to the +child process will not affect the parent. For that, listen to the +child `exit` or `close` events, and handle them appropriately. + +## util: `foreground-child/watchdog` + +If you are spawning a child process, and want to ensure that it +isn't left dangling if the parent process exits, you can use the +watchdog utility exported by this module. + +```js +import { watchdog } from 'foreground-child/watchdog' + +const childProcess = spawn('command', ['some', 'args']) +const watchdogProcess = watchdog(childProcess) + +// watchdogProcess is a reference to the process monitoring the +// parent and child. There's usually no reason to do anything +// with it, as it's silent and will terminate +// automatically when it's no longer needed. +``` diff --git a/node_modules/foreground-child/package.json b/node_modules/foreground-child/package.json new file mode 100644 index 0000000000..980b7e85d1 --- /dev/null +++ b/node_modules/foreground-child/package.json @@ -0,0 +1,111 @@ +{ + "name": "foreground-child", + "version": "3.3.0", + "description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./watchdog": { + "import": { + "source": "./src/watchdog.ts", + "types": "./dist/esm/watchdog.d.ts", + "default": "./dist/esm/watchdog.js" + }, + "require": { + "source": "./src/watchdog.ts", + "types": "./dist/commonjs/watchdog.d.ts", + "default": "./dist/commonjs/watchdog.js" + } + }, + "./proxy-signals": { + "import": { + "source": "./src/proxy-signals.ts", + "types": "./dist/esm/proxy-signals.d.ts", + "default": "./dist/esm/proxy-signals.js" + }, + "require": { + "source": "./src/proxy-signals.ts", + "types": "./dist/commonjs/proxy-signals.d.ts", + "default": "./dist/commonjs/proxy-signals.js" + } + }, + "./package.json": "./package.json", + ".": { + "import": { + "source": "./src/index.ts", + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "source": "./src/index.ts", + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "tap": { + "typecheck": true + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tapjs/foreground-child.git" + }, + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "devDependencies": { + "@types/cross-spawn": "^6.0.2", + "@types/node": "^18.15.11", + "@types/tap": "^15.0.8", + "prettier": "^3.3.2", + "tap": "^19.2.5", + "tshy": "^1.15.1", + "typedoc": "^0.24.2", + "typescript": "^5.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "tshy": { + "exports": { + "./watchdog": "./src/watchdog.ts", + "./proxy-signals": "./src/proxy-signals.ts", + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "type": "module" +} diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE new file mode 100644 index 0000000000..ec7df93329 --- /dev/null +++ b/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md new file mode 100644 index 0000000000..023cd77968 --- /dev/null +++ b/node_modules/glob/README.md @@ -0,0 +1,1265 @@ +# Glob + +Match files using the patterns the shell uses. + +The most correct and second fastest glob implementation in +JavaScript. (See **Comparison to Other JavaScript Glob +Implementations** at the bottom of this readme.) + +![a fun cartoon logo made of glob characters](https://github.com/isaacs/node-glob/raw/main/logo/glob.png) + +## Usage + +Install with npm + +``` +npm i glob +``` + +**Note** the npm package name is _not_ `node-glob` that's a +different thing that was abandoned years ago. Just `glob`. + +```js +// load using import +import { glob, globSync, globStream, globStreamSync, Glob } from 'glob' +// or using commonjs, that's fine, too +const { + glob, + globSync, + globStream, + globStreamSync, + Glob, +} = require('glob') + +// the main glob() and globSync() resolve/return array of filenames + +// all js files, but don't look in node_modules +const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' }) + +// pass in a signal to cancel the glob walk +const stopAfter100ms = await glob('**/*.css', { + signal: AbortSignal.timeout(100), +}) + +// multiple patterns supported as well +const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}']) + +// but of course you can do that with the glob pattern also +// the sync function is the same, just returns a string[] instead +// of Promise +const imagesAlt = globSync('{css,public}/*.{png,jpeg}') + +// you can also stream them, this is a Minipass stream +const filesStream = globStream(['**/*.dat', 'logs/**/*.log']) + +// construct a Glob object if you wanna do it that way, which +// allows for much faster walks if you have to look in the same +// folder multiple times. +const g = new Glob('**/foo', {}) +// glob objects are async iterators, can also do globIterate() or +// g.iterate(), same deal +for await (const file of g) { + console.log('found a foo file:', file) +} +// pass a glob as the glob options to reuse its settings and caches +const g2 = new Glob('**/bar', g) +// sync iteration works as well +for (const file of g2) { + console.log('found a bar file:', file) +} + +// you can also pass withFileTypes: true to get Path objects +// these are like a Dirent, but with some more added powers +// check out http://npm.im/path-scurry for more info on their API +const g3 = new Glob('**/baz/**', { withFileTypes: true }) +g3.stream().on('data', path => { + console.log( + 'got a path object', + path.fullpath(), + path.isDirectory(), + path.readdirSync().map(e => e.name), + ) +}) + +// if you use stat:true and withFileTypes, you can sort results +// by things like modified time, filter by permission mode, etc. +// All Stats fields will be available in that case. Slightly +// slower, though. +// For example: +const results = await glob('**', { stat: true, withFileTypes: true }) + +const timeSortedFiles = results + .sort((a, b) => a.mtimeMs - b.mtimeMs) + .map(path => path.fullpath()) + +const groupReadableFiles = results + .filter(path => path.mode & 0o040) + .map(path => path.fullpath()) + +// custom ignores can be done like this, for example by saying +// you'll ignore all markdown files, and all folders named 'docs' +const customIgnoreResults = await glob('**', { + ignore: { + ignored: p => /\.md$/.test(p.name), + childrenIgnored: p => p.isNamed('docs'), + }, +}) + +// another fun use case, only return files with the same name as +// their parent folder, plus either `.ts` or `.js` +const folderNamedModules = await glob('**/*.{ts,js}', { + ignore: { + ignored: p => { + const pp = p.parent + return !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js')) + }, + }, +}) + +// find all files edited in the last hour, to do this, we ignore +// all of them that are more than an hour old +const newFiles = await glob('**', { + // need stat so we have mtime + stat: true, + // only want the files, not the dirs + nodir: true, + ignore: { + ignored: p => { + return new Date() - p.mtime > 60 * 60 * 1000 + }, + // could add similar childrenIgnored here as well, but + // directory mtime is inconsistent across platforms, so + // probably better not to, unless you know the system + // tracks this reliably. + }, +}) +``` + +**Note** Glob patterns should always use `/` as a path separator, +even on Windows systems, as `\` is used to escape glob +characters. If you wish to use `\` as a path separator _instead +of_ using it as an escape character on Windows platforms, you may +set `windowsPathsNoEscape:true` in the options. In this mode, +special glob characters cannot be escaped, making it impossible +to match a literal `*` `?` and so on in filenames. + +## Command Line Interface + +``` +$ glob -h + +Usage: + glob [options] [ [ ...]] + +Expand the positional glob expression arguments into any matching file system +paths found. + + -c --cmd= + Run the command provided, passing the glob expression + matches as arguments. + + -A --all By default, the glob cli command will not expand any + arguments that are an exact match to a file on disk. + + This prevents double-expanding, in case the shell + expands an argument whose filename is a glob + expression. + + For example, if 'app/*.ts' would match 'app/[id].ts', + then on Windows powershell or cmd.exe, 'glob app/*.ts' + will expand to 'app/[id].ts', as expected. However, in + posix shells such as bash or zsh, the shell will first + expand 'app/*.ts' to a list of filenames. Then glob + will look for a file matching 'app/[id].ts' (ie, + 'app/i.ts' or 'app/d.ts'), which is unexpected. + + Setting '--all' prevents this behavior, causing glob to + treat ALL patterns as glob expressions to be expanded, + even if they are an exact match to a file on disk. + + When setting this option, be sure to enquote arguments + so that the shell will not expand them prior to passing + them to the glob command process. + + -a --absolute Expand to absolute paths + -d --dot-relative Prepend './' on relative matches + -m --mark Append a / on any directories matched + -x --posix Always resolve to posix style paths, using '/' as the + directory separator, even on Windows. Drive letter + absolute matches on Windows will be expanded to their + full resolved UNC maths, eg instead of 'C:\foo\bar', it + will expand to '//?/C:/foo/bar'. + + -f --follow Follow symlinked directories when expanding '**' + -R --realpath Call 'fs.realpath' on all of the results. In the case + of an entry that cannot be resolved, the entry is + omitted. This incurs a slight performance penalty, of + course, because of the added system calls. + + -s --stat Call 'fs.lstat' on all entries, whether required or not + to determine if it's a valid match. + + -b --match-base Perform a basename-only match if the pattern does not + contain any slash characters. That is, '*.js' would be + treated as equivalent to '**/*.js', matching js files + in all directories. + + --dot Allow patterns to match files/directories that start + with '.', even if the pattern does not start with '.' + + --nobrace Do not expand {...} patterns + --nocase Perform a case-insensitive match. This defaults to + 'true' on macOS and Windows platforms, and false on all + others. + + Note: 'nocase' should only be explicitly set when it is + known that the filesystem's case sensitivity differs + from the platform default. If set 'true' on + case-insensitive file systems, then the walk may return + more or less results than expected. + + --nodir Do not match directories, only files. + + Note: to *only* match directories, append a '/' at the + end of the pattern. + + --noext Do not expand extglob patterns, such as '+(a|b)' + --noglobstar Do not expand '**' against multiple path portions. Ie, + treat it as a normal '*' instead. + + --windows-path-no-escape + Use '\' as a path separator *only*, and *never* as an + escape character. If set, all '\' characters are + replaced with '/' in the pattern. + + -D --max-depth= Maximum depth to traverse from the current working + directory + + -C --cwd= Current working directory to execute/match in + -r --root= A string path resolved against the 'cwd', which is used + as the starting point for absolute patterns that start + with '/' (but not drive letters or UNC paths on + Windows). + + Note that this *doesn't* necessarily limit the walk to + the 'root' directory, and doesn't affect the cwd + starting point for non-absolute patterns. A pattern + containing '..' will still be able to traverse out of + the root directory, if it is not an actual root + directory on the filesystem, and any non-absolute + patterns will still be matched in the 'cwd'. + + To start absolute and non-absolute patterns in the same + path, you can use '--root=' to set it to the empty + string. However, be aware that on Windows systems, a + pattern like 'x:/*' or '//host/share/*' will *always* + start in the 'x:/' or '//host/share/' directory, + regardless of the --root setting. + + --platform= Defaults to the value of 'process.platform' if + available, or 'linux' if not. Setting --platform=win32 + on non-Windows systems may cause strange behavior! + + -i --ignore= + Glob patterns to ignore Can be set multiple times + -v --debug Output a huge amount of noisy debug information about + patterns as they are parsed and used to match files. + + -h --help Show this usage information +``` + +## `glob(pattern: string | string[], options?: GlobOptions) => Promise` + +Perform an asynchronous glob search for the pattern(s) specified. +Returns +[Path](https://isaacs.github.io/path-scurry/classes/PathBase) +objects if the `withFileTypes` option is set to `true`. See below +for full options field desciptions. + +## `globSync(pattern: string | string[], options?: GlobOptions) => string[] | Path[]` + +Synchronous form of `glob()`. + +Alias: `glob.sync()` + +## `globIterate(pattern: string | string[], options?: GlobOptions) => AsyncGenerator` + +Return an async iterator for walking glob pattern matches. + +Alias: `glob.iterate()` + +## `globIterateSync(pattern: string | string[], options?: GlobOptions) => Generator` + +Return a sync iterator for walking glob pattern matches. + +Alias: `glob.iterate.sync()`, `glob.sync.iterate()` + +## `globStream(pattern: string | string[], options?: GlobOptions) => Minipass` + +Return a stream that emits all the strings or `Path` objects and +then emits `end` when completed. + +Alias: `glob.stream()` + +## `globStreamSync(pattern: string | string[], options?: GlobOptions) => Minipass` + +Syncronous form of `globStream()`. Will read all the matches as +fast as you consume them, even all in a single tick if you +consume them immediately, but will still respond to backpressure +if they're not consumed immediately. + +Alias: `glob.stream.sync()`, `glob.sync.stream()` + +## `hasMagic(pattern: string | string[], options?: GlobOptions) => boolean` + +Returns `true` if the provided pattern contains any "magic" glob +characters, given the options provided. + +Brace expansion is not considered "magic" unless the +`magicalBraces` option is set, as brace expansion just turns one +string into an array of strings. So a pattern like `'x{a,b}y'` +would return `false`, because `'xay'` and `'xby'` both do not +contain any magic glob characters, and it's treated the same as +if you had called it on `['xay', 'xby']`. When +`magicalBraces:true` is in the options, brace expansion _is_ +treated as a pattern having magic. + +## `escape(pattern: string, options?: GlobOptions) => string` + +Escape all magic characters in a glob pattern, so that it will +only ever match literal strings + +If the `windowsPathsNoEscape` option is used, then characters are +escaped by wrapping in `[]`, because a magic character wrapped in +a character class can only be satisfied by that exact character. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +## `unescape(pattern: string, options?: GlobOptions) => string` + +Un-escape a glob string that may contain some escaped characters. + +If the `windowsPathsNoEscape` option is used, then square-brace +escapes are removed, but not backslash escapes. For example, it +will turn the string `'[*]'` into `*`, but it will not turn +`'\\*'` into `'*'`, because `\` is a path separator in +`windowsPathsNoEscape` mode. + +When `windowsPathsNoEscape` is not set, then both brace escapes +and backslash escapes are removed. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +## Class `Glob` + +An object that can perform glob pattern traversals. + +### `const g = new Glob(pattern: string | string[], options: GlobOptions)` + +Options object is required. + +See full options descriptions below. + +Note that a previous `Glob` object can be passed as the +`GlobOptions` to another `Glob` instantiation to re-use settings +and caches with a new pattern. + +Traversal functions can be called multiple times to run the walk +again. + +### `g.stream()` + +Stream results asynchronously, + +### `g.streamSync()` + +Stream results synchronously. + +### `g.iterate()` + +Default async iteration function. Returns an AsyncGenerator that +iterates over the results. + +### `g.iterateSync()` + +Default sync iteration function. Returns a Generator that +iterates over the results. + +### `g.walk()` + +Returns a Promise that resolves to the results array. + +### `g.walkSync()` + +Returns a results array. + +### Properties + +All options are stored as properties on the `Glob` object. + +- `opts` The options provided to the constructor. +- `patterns` An array of parsed immutable `Pattern` objects. + +## Options + +Exported as `GlobOptions` TypeScript interface. A `GlobOptions` +object may be provided to any of the exported methods, and must +be provided to the `Glob` constructor. + +All options are optional, boolean, and false by default, unless +otherwise noted. + +All resolved options are added to the Glob object as properties. + +If you are running many `glob` operations, you can pass a Glob +object as the `options` argument to a subsequent operation to +share the previously loaded cache. + +- `cwd` String path or `file://` string or URL object. The + current working directory in which to search. Defaults to + `process.cwd()`. See also: "Windows, CWDs, Drive Letters, and + UNC Paths", below. + + This option may be either a string path or a `file://` URL + object or string. + +- `root` A string path resolved against the `cwd` option, which + is used as the starting point for absolute patterns that start + with `/`, (but not drive letters or UNC paths on Windows). + + Note that this _doesn't_ necessarily limit the walk to the + `root` directory, and doesn't affect the cwd starting point for + non-absolute patterns. A pattern containing `..` will still be + able to traverse out of the root directory, if it is not an + actual root directory on the filesystem, and any non-absolute + patterns will be matched in the `cwd`. For example, the + pattern `/../*` with `{root:'/some/path'}` will return all + files in `/some`, not all files in `/some/path`. The pattern + `*` with `{root:'/some/path'}` will return all the entries in + the cwd, not the entries in `/some/path`. + + To start absolute and non-absolute patterns in the same + path, you can use `{root:''}`. However, be aware that on + Windows systems, a pattern like `x:/*` or `//host/share/*` will + _always_ start in the `x:/` or `//host/share` directory, + regardless of the `root` setting. + +- `windowsPathsNoEscape` Use `\\` as a path separator _only_, and + _never_ as an escape character. If set, all `\\` characters are + replaced with `/` in the pattern. + + Note that this makes it **impossible** to match against paths + containing literal glob pattern characters, but allows matching + with patterns constructed using `path.join()` and + `path.resolve()` on Windows platforms, mimicking the (buggy!) + behavior of Glob v7 and before on Windows. Please use with + caution, and be mindful of [the caveat below about Windows + paths](#windows). (For legacy reasons, this is also set if + `allowWindowsEscape` is set to the exact value `false`.) + +- `dot` Include `.dot` files in normal matches and `globstar` + matches. Note that an explicit dot in a portion of the pattern + will always match dot files. + +- `magicalBraces` Treat brace expansion like `{a,b}` as a "magic" + pattern. Has no effect if {@link nobrace} is set. + + Only has effect on the {@link hasMagic} function, no effect on + glob pattern matching itself. + +- `dotRelative` Prepend all relative path strings with `./` (or + `.\` on Windows). + + Without this option, returned relative paths are "bare", so + instead of returning `'./foo/bar'`, they are returned as + `'foo/bar'`. + + Relative patterns starting with `'../'` are not prepended with + `./`, even if this option is set. + +- `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. + +- `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. + +- `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) + +- `noext` Do not match "extglob" patterns such as `+(a|b)`. + +- `nocase` Perform a case-insensitive match. This defaults to + `true` on macOS and Windows systems, and `false` on all others. + + **Note** `nocase` should only be explicitly set when it is + known that the filesystem's case sensitivity differs from the + platform default. If set `true` on case-sensitive file + systems, or `false` on case-insensitive file systems, then the + walk may return more or less results than expected. + +- `maxDepth` Specify a number to limit the depth of the directory + traversal to this many levels below the `cwd`. + +- `matchBase` Perform a basename-only match if the pattern does + not contain any slash characters. That is, `*.js` would be + treated as equivalent to `**/*.js`, matching all js files in + all directories. + +- `nodir` Do not match directories, only files. (Note: to match + _only_ directories, put a `/` at the end of the pattern.) + + Note: when `follow` and `nodir` are both set, then symbolic + links to directories are also omitted. + +- `stat` Call `lstat()` on all entries, whether required or not + to determine whether it's a valid match. When used with + `withFileTypes`, this means that matches will include data such + as modified time, permissions, and so on. Note that this will + incur a performance cost due to the added system calls. + +- `ignore` string or string[], or an object with `ignore` and + `ignoreChildren` methods. + + If a string or string[] is provided, then this is treated as a + glob pattern or array of glob patterns to exclude from matches. + To ignore all children within a directory, as well as the entry + itself, append `'/**'` to the ignore pattern. + + **Note** `ignore` patterns are _always_ in `dot:true` mode, + regardless of any other settings. + + If an object is provided that has `ignored(path)` and/or + `childrenIgnored(path)` methods, then these methods will be + called to determine whether any Path is a match or if its + children should be traversed, respectively. + +- `follow` Follow symlinked directories when expanding `**` + patterns. This can result in a lot of duplicate references in + the presence of cyclic links, and make performance quite bad. + + By default, a `**` in a pattern will follow 1 symbolic link if + it is not the first item in the pattern, or none if it is the + first item in the pattern, following the same behavior as Bash. + + Note: when `follow` and `nodir` are both set, then symbolic + links to directories are also omitted. + +- `realpath` Set to true to call `fs.realpath` on all of the + results. In the case of an entry that cannot be resolved, the + entry is omitted. This incurs a slight performance penalty, of + course, because of the added system calls. + +- `absolute` Set to true to always receive absolute paths for + matched files. Set to `false` to always receive relative paths + for matched files. + + By default, when this option is not set, absolute paths are + returned for patterns that are absolute, and otherwise paths + are returned that are relative to the `cwd` setting. + + This does _not_ make an extra system call to get the realpath, + it only does string path resolution. + + `absolute` may not be used along with `withFileTypes`. + +- `posix` Set to true to use `/` as the path separator in + returned results. On posix systems, this has no effect. On + Windows systems, this will return `/` delimited path results, + and absolute paths will be returned in their full resolved UNC + path form, eg insted of `'C:\\foo\\bar'`, it will return + `//?/C:/foo/bar`. + +- `platform` Defaults to value of `process.platform` if + available, or `'linux'` if not. Setting `platform:'win32'` on + non-Windows systems may cause strange behavior. + +- `withFileTypes` Return [PathScurry](http://npm.im/path-scurry) + `Path` objects instead of strings. These are similar to a + NodeJS `Dirent` object, but with additional methods and + properties. + + `withFileTypes` may not be used along with `absolute`. + +- `signal` An AbortSignal which will cancel the Glob walk when + triggered. + +- `fs` An override object to pass in custom filesystem methods. + See [PathScurry docs](http://npm.im/path-scurry) for what can + be overridden. + +- `scurry` A [PathScurry](http://npm.im/path-scurry) object used + to traverse the file system. If the `nocase` option is set + explicitly, then any provided `scurry` object must match this + setting. + +- `includeChildMatches` boolean, default `true`. Do not match any + children of any matches. For example, the pattern `**\/foo` + would match `a/foo`, but not `a/foo/b/foo` in this mode. + + This is especially useful for cases like "find all + `node_modules` folders, but not the ones in `node_modules`". + + In order to support this, the `Ignore` implementation must + support an `add(pattern: string)` method. If using the default + `Ignore` class, then this is fine, but if this is set to + `false`, and a custom `Ignore` is provided that does not have + an `add()` method, then it will throw an error. + + **Caveat** It _only_ ignores matches that would be a descendant + of a previous match, and only if that descendant is matched + _after_ the ancestor is encountered. Since the file system walk + happens in indeterminate order, it's possible that a match will + already be added before its ancestor, if multiple or braced + patterns are used. + + For example: + + ```js + const results = await glob( + [ + // likely to match first, since it's just a stat + 'a/b/c/d/e/f', + + // this pattern is more complicated! It must to various readdir() + // calls and test the results against a regular expression, and that + // is certainly going to take a little bit longer. + // + // So, later on, it encounters a match at 'a/b/c/d/e', but it's too + // late to ignore a/b/c/d/e/f, because it's already been emitted. + 'a/[bdf]/?/[a-z]/*', + ], + { includeChildMatches: false }, + ) + ``` + + It's best to only set this to `false` if you can be reasonably + sure that no components of the pattern will potentially match + one another's file system descendants, or if the occasional + included child entry will not cause problems. + +## Glob Primer + +Much more information about glob pattern expansion can be found +by running `man bash` and searching for `Pattern Matching`. + +"Globs" are the patterns you type when you do stuff like `ls +*.js` on the command line, or put `build/*` in a `.gitignore` +file. + +Before parsing the path part patterns, braced sections are +expanded into a set. Braced sections start with `{` and end with +`}`, with 2 or more comma-delimited sections within. Braced +sections may contain slash characters, so `a{/b/c,bcd}` would +expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in +a path portion. With the exception of `**`, none of these match +path separators (ie, `/` on all platforms, and `\` on Windows). + +- `*` Matches 0 or more characters in a single path portion. + When alone in a path portion, it must match at least 1 + character. If `dot:true` is not specified, then `*` will not + match against a `.` character at the start of a path portion. +- `?` Matches 1 character. If `dot:true` is not specified, then + `?` will not match against a `.` character at the start of a + path portion. +- `[...]` Matches a range of characters, similar to a RegExp + range. If the first character of the range is `!` or `^` then + it matches any character not in the range. If the first + character is `]`, then it will be considered the same as `\]`, + rather than the end of the character class. +- `!(pattern|pattern|pattern)` Matches anything that does not + match any of the patterns provided. May _not_ contain `/` + characters. Similar to `*`, if alone in a path portion, then + the path portion must have at least one character. +- `?(pattern|pattern|pattern)` Matches zero or one occurrence of + the patterns provided. May _not_ contain `/` characters. +- `+(pattern|pattern|pattern)` Matches one or more occurrences of + the patterns provided. May _not_ contain `/` characters. +- `*(a|b|c)` Matches zero or more occurrences of the patterns + provided. May _not_ contain `/` characters. +- `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided. May _not_ contain `/` characters. +- `**` If a "globstar" is alone in a path portion, then it + matches zero or more directories and subdirectories searching + for matches. It does not crawl symlinked directories, unless + `{follow:true}` is passed in the options object. A pattern + like `a/b/**` will only match `a/b` if it is a directory. + Follows 1 symbolic link if not the first item in the pattern, + or 0 if it is the first item, unless `follow:true` is set, in + which case it follows all symbolic links. + +`[:class:]` patterns are supported by this implementation, but +`[=c=]` and `[.symbol.]` style class patterns are not. + +### Dots + +If a file or directory path portion has a `.` as the first +character, then it will not match any glob pattern unless that +pattern's corresponding path part also has a `.` as its first +character. + +For example, the pattern `a/.*/c` would match the file at +`a/.b/c`. However the pattern `a/*/c` would not, because `*` does +not start with a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has +no slashes in it, then it will seek for any file anywhere in the +tree with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. +This differs from the shell, where the pattern itself is +returned. For example: + +```sh +$ echo a*s*d*f +a*s*d*f +``` + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a +worthwhile goal, some discrepancies exist between node-glob and +other implementations, and are intentional. + +The double-star character `**` is supported by default, unless +the `noglobstar` flag is set. This is supported in the manner of +bsdglob and bash 5, where `**` only has special significance if +it is the only thing in a path part. That is, `a/**/b` will match +`a/x/y/b`, but `a/**b` will not. + +Note that symlinked directories are not traversed as part of a +`**`, though their contents may match against subsequent portions +of the pattern. This prevents infinite loops and duplicates and +the like. You can force glob to traverse symlinks with `**` by +setting `{follow:true}` in the options. + +There is no equivalent of the `nonull` option. A pattern that +does not find any matches simply resolves to nothing. (An empty +array, immediately ended stream, etc.) + +If brace expansion is not disabled, then it is performed before +any other interpretation of the glob pattern. Thus, a pattern +like `+(a|{b),c)}`, which would not be valid in bash or zsh, is +expanded **first** into the set of `+(a|b)` and `+(a|c)`, and +those patterns are checked for validity. Since those two are +valid, matching proceeds. + +The character class patterns `[:class:]` (posix standard named +classes) style class patterns are supported and unicode-aware, +but `[=c=]` (locale-specific character collation weight), and +`[.symbol.]` (collating symbol), are not. + +### Repeated Slashes + +Unlike Bash and zsh, repeated `/` are always coalesced into a +single path separator. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if +it started with a `#` character, or a "negated" pattern if it +started with a `!` character. + +These options were deprecated in version 5, and removed in +version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only +`/` characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will +always be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto +the root setting using `path.join`. On windows, this will by +default result in `/foo/*` matching `C:\foo\bar.txt`. + +To automatically coerce all `\` characters to `/` in pattern +strings, **thus making it impossible to escape literal glob +characters**, you may set the `windowsPathsNoEscape` option to +`true`. + +### Windows, CWDs, Drive Letters, and UNC Paths + +On posix systems, when a pattern starts with `/`, any `cwd` +option is ignored, and the traversal starts at `/`, plus any +non-magic path portions specified in the pattern. + +On Windows systems, the behavior is similar, but the concept of +an "absolute path" is somewhat more involved. + +#### UNC Paths + +A UNC path may be used as the start of a pattern on Windows +platforms. For example, a pattern like: `//?/x:/*` will return +all file entries in the root of the `x:` drive. A pattern like +`//ComputerName/Share/*` will return all files in the associated +share. + +UNC path roots are always compared case insensitively. + +#### Drive Letters + +A pattern starting with a drive letter, like `c:/*`, will search +in that drive, regardless of any `cwd` option provided. + +If the pattern starts with `/`, and is not a UNC path, and there +is an explicit `cwd` option set with a drive letter, then the +drive letter in the `cwd` is used as the root of the directory +traversal. + +For example, `glob('/tmp', { cwd: 'c:/any/thing' })` will return +`['c:/tmp']` as the result. + +If an explicit `cwd` option is not provided, and the pattern +starts with `/`, then the traversal will run on the root of the +drive provided as the `cwd` option. (That is, it is the result of +`path.resolve('/')`.) + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race +conditions, since it relies on directory walking. + +As a result, it is possible that a file that exists when glob +looks for it may have been deleted or modified by the time it +returns the result. + +By design, this implementation caches all readdir calls that it +makes, in order to cut down on system overhead. However, this +also makes it even more susceptible to races, especially if the +cache object is reused between glob calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast +majority of operations, this is never a problem. + +### See Also: + +- `man sh` +- `man bash` [Pattern + Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) +- `man 3 fnmatch` +- `man 5 gitignore` +- [minimatch documentation](https://github.com/isaacs/minimatch) + +## Glob Logo + +Glob's logo was created by [Tanya +Brassie](http://tanyabrassie.com/). Logo files can be found +[here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons +Attribution-ShareAlike 4.0 International +License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a +test. + +Patches that fail tests or reduce performance will be rejected. + +```sh +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# run the benchmarks +npm run bench + +# to profile javascript +npm run prof +``` + +## Comparison to Other JavaScript Glob Implementations + +**tl;dr** + +- If you want glob matching that is as faithful as possible to + Bash pattern expansion semantics, and as fast as possible + within that constraint, _use this module_. +- If you are reasonably sure that the patterns you will encounter + are relatively simple, and want the absolutely fastest glob + matcher out there, _use [fast-glob](http://npm.im/fast-glob)_. +- If you are reasonably sure that the patterns you will encounter + are relatively simple, and want the convenience of + automatically respecting `.gitignore` files, _use + [globby](http://npm.im/globby)_. + +There are some other glob matcher libraries on npm, but these +three are (in my opinion, as of 2023) the best. + +--- + +**full explanation** + +Every library reflects a set of opinions and priorities in the +trade-offs it makes. Other than this library, I can personally +recommend both [globby](http://npm.im/globby) and +[fast-glob](http://npm.im/fast-glob), though they differ in their +benefits and drawbacks. + +Both have very nice APIs and are reasonably fast. + +`fast-glob` is, as far as I am aware, the fastest glob +implementation in JavaScript today. However, there are many +cases where the choices that `fast-glob` makes in pursuit of +speed mean that its results differ from the results returned by +Bash and other sh-like shells, which may be surprising. + +In my testing, `fast-glob` is around 10-20% faster than this +module when walking over 200k files nested 4 directories +deep[1](#fn-webscale). However, there are some inconsistencies +with Bash matching behavior that this module does not suffer +from: + +- `**` only matches files, not directories +- `..` path portions are not handled unless they appear at the + start of the pattern +- `./!()` will not match any files that _start_ with + ``, even if they do not match ``. For + example, `!(9).txt` will not match `9999.txt`. +- Some brace patterns in the middle of a pattern will result in + failing to find certain matches. +- Extglob patterns are allowed to contain `/` characters. + +Globby exhibits all of the same pattern semantics as fast-glob, +(as it is a wrapper around fast-glob) and is slightly slower than +node-glob (by about 10-20% in the benchmark test set, or in other +words, anywhere from 20-50% slower than fast-glob). However, it +adds some API conveniences that may be worth the costs. + +- Support for `.gitignore` and other ignore files. +- Support for negated globs (ie, patterns starting with `!` + rather than using a separate `ignore` option). + +The priority of this module is "correctness" in the sense of +performing a glob pattern expansion as faithfully as possible to +the behavior of Bash and other sh-like shells, with as much speed +as possible. + +Note that prior versions of `node-glob` are _not_ on this list. +Former versions of this module are far too slow for any cases +where performance matters at all, and were designed with APIs +that are extremely dated by current JavaScript standards. + +--- + +[1]: In the cases where this module +returns results and `fast-glob` doesn't, it's even faster, of +course. + +![lumpy space princess saying 'oh my GLOB'](https://github.com/isaacs/node-glob/raw/main/oh-my-glob.gif) + +### Benchmark Results + +First number is time, smaller is better. + +Second number is the count of results returned. + +``` +--- pattern: '**' --- +~~ sync ~~ +node fast-glob sync 0m0.598s 200364 +node globby sync 0m0.765s 200364 +node current globSync mjs 0m0.683s 222656 +node current glob syncStream 0m0.649s 222656 +~~ async ~~ +node fast-glob async 0m0.350s 200364 +node globby async 0m0.509s 200364 +node current glob async mjs 0m0.463s 222656 +node current glob stream 0m0.411s 222656 + +--- pattern: '**/..' --- +~~ sync ~~ +node fast-glob sync 0m0.486s 0 +node globby sync 0m0.769s 200364 +node current globSync mjs 0m0.564s 2242 +node current glob syncStream 0m0.583s 2242 +~~ async ~~ +node fast-glob async 0m0.283s 0 +node globby async 0m0.512s 200364 +node current glob async mjs 0m0.299s 2242 +node current glob stream 0m0.312s 2242 + +--- pattern: './**/0/**/0/**/0/**/0/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.490s 10 +node globby sync 0m0.517s 10 +node current globSync mjs 0m0.540s 10 +node current glob syncStream 0m0.550s 10 +~~ async ~~ +node fast-glob async 0m0.290s 10 +node globby async 0m0.296s 10 +node current glob async mjs 0m0.278s 10 +node current glob stream 0m0.302s 10 + +--- pattern: './**/[01]/**/[12]/**/[23]/**/[45]/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.500s 160 +node globby sync 0m0.528s 160 +node current globSync mjs 0m0.556s 160 +node current glob syncStream 0m0.573s 160 +~~ async ~~ +node fast-glob async 0m0.283s 160 +node globby async 0m0.301s 160 +node current glob async mjs 0m0.306s 160 +node current glob stream 0m0.322s 160 + +--- pattern: './**/0/**/0/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.502s 5230 +node globby sync 0m0.527s 5230 +node current globSync mjs 0m0.544s 5230 +node current glob syncStream 0m0.557s 5230 +~~ async ~~ +node fast-glob async 0m0.285s 5230 +node globby async 0m0.305s 5230 +node current glob async mjs 0m0.304s 5230 +node current glob stream 0m0.310s 5230 + +--- pattern: '**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.580s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.685s 200023 +node current glob syncStream 0m0.649s 200023 +~~ async ~~ +node fast-glob async 0m0.349s 200023 +node globby async 0m0.509s 200023 +node current glob async mjs 0m0.427s 200023 +node current glob stream 0m0.388s 200023 + +--- pattern: '{**/*.txt,**/?/**/*.txt,**/?/**/?/**/*.txt,**/?/**/?/**/?/**/*.txt,**/?/**/?/**/?/**/?/**/*.txt}' --- +~~ sync ~~ +node fast-glob sync 0m0.589s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.716s 200023 +node current glob syncStream 0m0.684s 200023 +~~ async ~~ +node fast-glob async 0m0.351s 200023 +node globby async 0m0.518s 200023 +node current glob async mjs 0m0.462s 200023 +node current glob stream 0m0.468s 200023 + +--- pattern: '**/5555/0000/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.496s 1000 +node globby sync 0m0.519s 1000 +node current globSync mjs 0m0.539s 1000 +node current glob syncStream 0m0.567s 1000 +~~ async ~~ +node fast-glob async 0m0.285s 1000 +node globby async 0m0.299s 1000 +node current glob async mjs 0m0.305s 1000 +node current glob stream 0m0.301s 1000 + +--- pattern: './**/0/**/../[01]/**/0/../**/0/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.484s 0 +node globby sync 0m0.507s 0 +node current globSync mjs 0m0.577s 4880 +node current glob syncStream 0m0.586s 4880 +~~ async ~~ +node fast-glob async 0m0.280s 0 +node globby async 0m0.298s 0 +node current glob async mjs 0m0.327s 4880 +node current glob stream 0m0.324s 4880 + +--- pattern: '**/????/????/????/????/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.547s 100000 +node globby sync 0m0.673s 100000 +node current globSync mjs 0m0.626s 100000 +node current glob syncStream 0m0.618s 100000 +~~ async ~~ +node fast-glob async 0m0.315s 100000 +node globby async 0m0.414s 100000 +node current glob async mjs 0m0.366s 100000 +node current glob stream 0m0.345s 100000 + +--- pattern: './{**/?{/**/?{/**/?{/**/?,,,,},,,,},,,,},,,}/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.588s 100000 +node globby sync 0m0.670s 100000 +node current globSync mjs 0m0.717s 200023 +node current glob syncStream 0m0.687s 200023 +~~ async ~~ +node fast-glob async 0m0.343s 100000 +node globby async 0m0.418s 100000 +node current glob async mjs 0m0.519s 200023 +node current glob stream 0m0.451s 200023 + +--- pattern: '**/!(0|9).txt' --- +~~ sync ~~ +node fast-glob sync 0m0.573s 160023 +node globby sync 0m0.731s 160023 +node current globSync mjs 0m0.680s 180023 +node current glob syncStream 0m0.659s 180023 +~~ async ~~ +node fast-glob async 0m0.345s 160023 +node globby async 0m0.476s 160023 +node current glob async mjs 0m0.427s 180023 +node current glob stream 0m0.388s 180023 + +--- pattern: './{*/**/../{*/**/../{*/**/../{*/**/../{*/**,,,,},,,,},,,,},,,,},,,,}/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.483s 0 +node globby sync 0m0.512s 0 +node current globSync mjs 0m0.811s 200023 +node current glob syncStream 0m0.773s 200023 +~~ async ~~ +node fast-glob async 0m0.280s 0 +node globby async 0m0.299s 0 +node current glob async mjs 0m0.617s 200023 +node current glob stream 0m0.568s 200023 + +--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.485s 0 +node globby sync 0m0.507s 0 +node current globSync mjs 0m0.759s 200023 +node current glob syncStream 0m0.740s 200023 +~~ async ~~ +node fast-glob async 0m0.281s 0 +node globby async 0m0.297s 0 +node current glob async mjs 0m0.544s 200023 +node current glob stream 0m0.464s 200023 + +--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.486s 0 +node globby sync 0m0.513s 0 +node current globSync mjs 0m0.734s 200023 +node current glob syncStream 0m0.696s 200023 +~~ async ~~ +node fast-glob async 0m0.286s 0 +node globby async 0m0.296s 0 +node current glob async mjs 0m0.506s 200023 +node current glob stream 0m0.483s 200023 + +--- pattern: './0/**/../1/**/../2/**/../3/**/../4/**/../5/**/../6/**/../7/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.060s 0 +node globby sync 0m0.074s 0 +node current globSync mjs 0m0.067s 0 +node current glob syncStream 0m0.066s 0 +~~ async ~~ +node fast-glob async 0m0.060s 0 +node globby async 0m0.075s 0 +node current glob async mjs 0m0.066s 0 +node current glob stream 0m0.067s 0 + +--- pattern: './**/?/**/?/**/?/**/?/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.568s 100000 +node globby sync 0m0.651s 100000 +node current globSync mjs 0m0.619s 100000 +node current glob syncStream 0m0.617s 100000 +~~ async ~~ +node fast-glob async 0m0.332s 100000 +node globby async 0m0.409s 100000 +node current glob async mjs 0m0.372s 100000 +node current glob stream 0m0.351s 100000 + +--- pattern: '**/*/**/*/**/*/**/*/**' --- +~~ sync ~~ +node fast-glob sync 0m0.603s 200113 +node globby sync 0m0.798s 200113 +node current globSync mjs 0m0.730s 222137 +node current glob syncStream 0m0.693s 222137 +~~ async ~~ +node fast-glob async 0m0.356s 200113 +node globby async 0m0.525s 200113 +node current glob async mjs 0m0.508s 222137 +node current glob stream 0m0.455s 222137 + +--- pattern: './**/*/**/*/**/*/**/*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.622s 200000 +node globby sync 0m0.792s 200000 +node current globSync mjs 0m0.722s 200000 +node current glob syncStream 0m0.695s 200000 +~~ async ~~ +node fast-glob async 0m0.369s 200000 +node globby async 0m0.527s 200000 +node current glob async mjs 0m0.502s 200000 +node current glob stream 0m0.481s 200000 + +--- pattern: '**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.588s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.684s 200023 +node current glob syncStream 0m0.658s 200023 +~~ async ~~ +node fast-glob async 0m0.352s 200023 +node globby async 0m0.516s 200023 +node current glob async mjs 0m0.432s 200023 +node current glob stream 0m0.384s 200023 + +--- pattern: './**/**/**/**/**/**/**/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.589s 200023 +node globby sync 0m0.766s 200023 +node current globSync mjs 0m0.682s 200023 +node current glob syncStream 0m0.652s 200023 +~~ async ~~ +node fast-glob async 0m0.352s 200023 +node globby async 0m0.523s 200023 +node current glob async mjs 0m0.436s 200023 +node current glob stream 0m0.380s 200023 + +--- pattern: '**/*/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.592s 200023 +node globby sync 0m0.776s 200023 +node current globSync mjs 0m0.691s 200023 +node current glob syncStream 0m0.659s 200023 +~~ async ~~ +node fast-glob async 0m0.357s 200023 +node globby async 0m0.513s 200023 +node current glob async mjs 0m0.471s 200023 +node current glob stream 0m0.424s 200023 + +--- pattern: '**/*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.585s 200023 +node globby sync 0m0.766s 200023 +node current globSync mjs 0m0.694s 200023 +node current glob syncStream 0m0.664s 200023 +~~ async ~~ +node fast-glob async 0m0.350s 200023 +node globby async 0m0.514s 200023 +node current glob async mjs 0m0.472s 200023 +node current glob stream 0m0.424s 200023 + +--- pattern: '**/[0-9]/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.544s 100000 +node globby sync 0m0.636s 100000 +node current globSync mjs 0m0.626s 100000 +node current glob syncStream 0m0.621s 100000 +~~ async ~~ +node fast-glob async 0m0.322s 100000 +node globby async 0m0.404s 100000 +node current glob async mjs 0m0.360s 100000 +node current glob stream 0m0.352s 100000 +``` diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json new file mode 100644 index 0000000000..6d4893b5f3 --- /dev/null +++ b/node_modules/glob/package.json @@ -0,0 +1,99 @@ +{ + "author": "Isaac Z. Schlueter (https://blog.izs.me/)", + "publishConfig": { + "tag": "legacy-v10" + }, + "name": "glob", + "description": "the most correct and second fastest glob implementation in JavaScript", + "version": "10.4.5", + "type": "module", + "tshy": { + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "bin": "./dist/esm/bin.mjs", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts", + "prepublish": "npm run benchclean", + "profclean": "rm -f v8.log profile.txt", + "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts", + "prebench": "npm run prepare", + "bench": "bash benchmark.sh", + "preprof": "npm run prepare", + "prof": "bash prof.sh", + "benchclean": "node benchclean.cjs" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "devDependencies": { + "@types/node": "^20.11.30", + "memfs": "^3.4.13", + "mkdirp": "^3.0.1", + "prettier": "^3.2.5", + "rimraf": "^5.0.7", + "sync-content": "^1.0.2", + "tap": "^19.0.0", + "tshy": "^1.14.0", + "typedoc": "^0.25.12" + }, + "tap": { + "before": "test/00-setup.ts" + }, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "module": "./dist/esm/index.js" +} diff --git a/node_modules/ignore/LICENSE-MIT b/node_modules/ignore/LICENSE-MIT new file mode 100644 index 0000000000..825533e337 --- /dev/null +++ b/node_modules/ignore/LICENSE-MIT @@ -0,0 +1,21 @@ +Copyright (c) 2013 Kael Zhang , contributors +http://kael.me/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/ignore/README.md b/node_modules/ignore/README.md new file mode 100644 index 0000000000..4e99471113 --- /dev/null +++ b/node_modules/ignore/README.md @@ -0,0 +1,452 @@ +| Linux / MacOS / Windows | Coverage | Downloads | +| ----------------------- | -------- | --------- | +| [![build][bb]][bl] | [![coverage][cb]][cl] | [![downloads][db]][dl] | + +[bb]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml/badge.svg +[bl]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml + +[cb]: https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg +[cl]: https://codecov.io/gh/kaelzhang/node-ignore + +[db]: http://img.shields.io/npm/dm/ignore.svg +[dl]: https://www.npmjs.org/package/ignore + +# ignore + +`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the [.gitignore spec 2.22.1](http://git-scm.com/docs/gitignore). + +`ignore` is used by eslint, gitbook and [many others](https://www.npmjs.com/browse/depended/ignore). + +Pay **ATTENTION** that [`minimatch`](https://www.npmjs.org/package/minimatch) (which used by `fstream-ignore`) does not follow the gitignore spec. + +To filter filenames according to a .gitignore file, I recommend this npm package, `ignore`. + +To parse an `.npmignore` file, you should use `minimatch`, because an `.npmignore` file is parsed by npm using `minimatch` and it does not work in the .gitignore way. + +### Tested on + +`ignore` is fully tested, and has more than **five hundreds** of unit tests. + +- Linux + Node: `0.8` - `7.x` +- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor. + +Actually, `ignore` does not rely on any versions of node specially. + +Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md). + +## Table Of Main Contents + +- [Usage](#usage) +- [`Pathname` Conventions](#pathname-conventions) +- See Also: + - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules. +- [Upgrade Guide](#upgrade-guide) + +## Install + +```sh +npm i ignore +``` + +## Usage + +```js +import ignore from 'ignore' +const ig = ignore().add(['.abc/*', '!.abc/d/']) +``` + +### Filter the given paths + +```js +const paths = [ + '.abc/a.js', // filtered out + '.abc/d/e.js' // included +] + +ig.filter(paths) // ['.abc/d/e.js'] +ig.ignores('.abc/a.js') // true +``` + +### As the filter function + +```js +paths.filter(ig.createFilter()); // ['.abc/d/e.js'] +``` + +### Win32 paths will be handled + +```js +ig.filter(['.abc\\a.js', '.abc\\d\\e.js']) +// if the code above runs on windows, the result will be +// ['.abc\\d\\e.js'] +``` + +## Why another ignore? + +- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family. + +- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so + - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations. + - `ignore` don't cares about sub-modules of git projects. + +- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as: + - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'. + - '`**/foo`' should match '`foo`' anywhere. + - Prevent re-including a file if a parent directory of that file is excluded. + - Handle trailing whitespaces: + - `'a '`(one space) should not match `'a '`(two spaces). + - `'a \ '` matches `'a '` + - All test cases are verified with the result of `git check-ignore`. + +# Methods + +## .add(pattern: string | Ignore): this +## .add(patterns: Array): this +## .add({pattern: string, mark?: string}): this since 7.0.0 + +- **pattern** `string | Ignore` An ignore pattern string, or the `Ignore` instance +- **patterns** `Array` Array of ignore patterns. +- **mark?** `string` Pattern mark, which is used to associate the pattern with a certain marker, such as the line no of the `.gitignore` file. Actually it could be an arbitrary string and is optional. + +Adds a rule or several rules to the current manager. + +Returns `this` + +Notice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename. + +```js +ignore().add('#abc').ignores('#abc') // false +ignore().add('\\#abc').ignores('#abc') // true +``` + +`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file: + +```js +ignore() +.add(fs.readFileSync(filenameOfGitignore).toString()) +.filter(filenames) +``` + +`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance. + +## .ignores(pathname: [Pathname](#pathname-conventions)): boolean + +> new in 3.2.0 + +Returns `Boolean` whether `pathname` should be ignored. + +```js +ig.ignores('.abc/a.js') // true +``` + +Please **PAY ATTENTION** that `.ignores()` is **NOT** equivalent to `git check-ignore` although in most cases they return equivalent results. + +However, for the purposes of imitating the behavior of `git check-ignore`, please use `.checkIgnore()` instead. + +### `Pathname` Conventions: + +#### 1. `Pathname` should be a `path.relative()`d pathname + +`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory, + +```js +// WRONG, an error will be thrown +ig.ignores('./abc') + +// WRONG, for it will never happen, and an error will be thrown +// If the gitignore rule locates at the root directory, +// `'/abc'` should be changed to `'abc'`. +// ``` +// path.relative('/', '/abc') -> 'abc' +// ``` +ig.ignores('/abc') + +// WRONG, that it is an absolute path on Windows, an error will be thrown +ig.ignores('C:\\abc') + +// Right +ig.ignores('abc') + +// Right +ig.ignores(path.join('./abc')) // path.join('./abc') -> 'abc' +``` + +In other words, each `Pathname` here should be a relative path to the directory of the gitignore rules. + +Suppose the dir structure is: + +``` +/path/to/your/repo + |-- a + | |-- a.js + | + |-- .b + | + |-- .c + |-- .DS_store +``` + +Then the `paths` might be like this: + +```js +[ + 'a/a.js' + '.b', + '.c/.DS_store' +] +``` + +#### 2. filenames and dirnames + +`node-ignore` does NO `fs.stat` during path matching, so `node-ignore` treats +- `foo` as a file +- **`foo/` as a directory** + +For the example below: + +```js +// First, we add a ignore pattern to ignore a directory +ig.add('config/') + +// `ig` does NOT know if 'config', in the real world, +// is a normal file, directory or something. + +ig.ignores('config') +// `ig` treats `config` as a file, so it returns `false` + +ig.ignores('config/') +// returns `true` +``` + +Specially for people who develop some library based on `node-ignore`, it is important to understand that. + +Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory: + +```js +import glob from 'glob' + +glob('**', { + // Adds a / character to directory matches. + mark: true +}, (err, files) => { + if (err) { + return console.error(err) + } + + let filtered = ignore().add(patterns).filter(files) + console.log(filtered) +}) +``` + + +## .filter(paths: Array<Pathname>): Array<Pathname> + +```ts +type Pathname = string +``` + +Filters the given array of pathnames, and returns the filtered array. + +- **paths** `Array.` The array of `pathname`s to be filtered. + +## .createFilter() + +Creates a filter function which could filter an array of paths with `Array.prototype.filter`. + +Returns `function(path)` the filter function. + +## .test(pathname: Pathname): TestResult + +> New in 5.0.0 + +Returns `TestResult` + +```ts +// Since 5.0.0 +interface TestResult { + ignored: boolean + // true if the `pathname` is finally unignored by some negative pattern + unignored: boolean + // The `IgnoreRule` which ignores the pathname + rule?: IgnoreRule +} + +// Since 7.0.0 +interface IgnoreRule { + // The original pattern + pattern: string + // Whether the pattern is a negative pattern + negative: boolean + // Which is used for other packages to build things upon `node-ignore` + mark?: string +} +``` + +- `{ignored: true, unignored: false}`: the `pathname` is ignored +- `{ignored: false, unignored: true}`: the `pathname` is unignored +- `{ignored: false, unignored: false}`: the `pathname` is never matched by any ignore rules. + +## .checkIgnore(target: string): TestResult + +> new in 7.0.0 + +Debugs gitignore / exclude files, which is equivalent to `git check-ignore -v`. Usually this method is used for other packages to implement the function of `git check-ignore -v` upon `node-ignore` + +- **target** `string` the target to test. + +Returns `TestResult` + +```js +ig.add({ + pattern: 'foo/*', + mark: '60' +}) + +const { + ignored, + rule +} = checkIgnore('foo/') + +if (ignored) { + console.log(`.gitignore:${result}:${rule.mark}:${rule.pattern} foo/`) +} + +// .gitignore:60:foo/* foo/ +``` + +Please pay attention that this method does not have a strong built-in cache mechanism. + +The purpose of introducing this method is to make it possible to implement the `git check-ignore` command in JavaScript based on `node-ignore`. + +So do not use this method in those situations where performance is extremely important. + +## static `isPathValid(pathname): boolean` since 5.0.0 + +Check whether the `pathname` is an valid `path.relative()`d path according to the [convention](#1-pathname-should-be-a-pathrelatived-pathname). + +This method is **NOT** used to check if an ignore pattern is valid. + +```js +import {isPathValid} from 'ignore' + +isPathValid('./foo') // false +``` + +## .addIgnoreFile(path) + +REMOVED in `3.x` for now. + +To upgrade `ignore@2.x` up to `3.x`, use + +```js +import fs from 'fs' + +if (fs.existsSync(filename)) { + ignore().add(fs.readFileSync(filename).toString()) +} +``` + +instead. + +## ignore(options) + +### `options.ignorecase` since 4.0.0 + +Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (the default value), otherwise case sensitive. + +```js +const ig = ignore({ + ignorecase: false +}) + +ig.add('*.png') + +ig.ignores('*.PNG') // false +``` + +### `options.ignoreCase?: boolean` since 5.2.0 + +Which is alternative to `options.ignoreCase` + +### `options.allowRelativePaths?: boolean` since 5.2.0 + +This option brings backward compatibility with projects which based on `ignore@4.x`. If `options.allowRelativePaths` is `true`, `ignore` will not check whether the given path to be tested is [`path.relative()`d](#pathname-conventions). + +However, passing a relative path, such as `'./foo'` or `'../foo'`, to test if it is ignored or not is not a good practise, which might lead to unexpected behavior + +```js +ignore({ + allowRelativePaths: true +}).ignores('../foo/bar.js') // And it will not throw +``` + +**** + +# Upgrade Guide + +## Upgrade 4.x -> 5.x + +Since `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, unless `options.allowRelative = true` is passed to the `Ignore` factory. + +While `ignore < 5.0.0` did not make sure what the return value was, as well as + +```ts +.ignores(pathname: Pathname): boolean + +.filter(pathnames: Array): Array + +.createFilter(): (pathname: Pathname) => boolean + +.test(pathname: Pathname): {ignored: boolean, unignored: boolean} +``` + +See the convention [here](#1-pathname-should-be-a-pathrelatived-pathname) for details. + +If there are invalid pathnames, the conversion and filtration should be done by users. + +```js +import {isPathValid} from 'ignore' // introduced in 5.0.0 + +const paths = [ + // invalid + ////////////////// + '', + false, + '../foo', + '.', + ////////////////// + + // valid + 'foo' +] +.filter(isPathValid) + +ig.filter(paths) +``` + +## Upgrade 3.x -> 4.x + +Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6: + +```js +var ignore = require('ignore/legacy') +``` + +## Upgrade 2.x -> 3.x + +- All `options` of 2.x are unnecessary and removed, so just remove them. +- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed. +- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details. + +**** + +# Collaborators + +- [@whitecolor](https://github.com/whitecolor) *Alex* +- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé* +- [@azproduction](https://github.com/azproduction) *Mikhail Davydov* +- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin* +- [@JanMattner](https://github.com/JanMattner) *Jan Mattner* +- [@ntwb](https://github.com/ntwb) *Stephen Edgar* +- [@kasperisager](https://github.com/kasperisager) *Kasper Isager* +- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders* diff --git a/node_modules/ignore/index.d.ts b/node_modules/ignore/index.d.ts new file mode 100644 index 0000000000..f6912595a3 --- /dev/null +++ b/node_modules/ignore/index.d.ts @@ -0,0 +1,81 @@ +type Pathname = string + +interface IgnoreRule { + pattern: string + mark?: string + negative: boolean +} + +interface TestResult { + ignored: boolean + unignored: boolean + rule?: IgnoreRule +} + +interface PatternParams { + pattern: string + mark?: string +} + +/** + * Creates new ignore manager. + */ +declare function ignore(options?: ignore.Options): ignore.Ignore +declare namespace ignore { + interface Ignore { + /** + * Adds one or several rules to the current manager. + * @param {string[]} patterns + * @returns IgnoreBase + */ + add( + patterns: string | Ignore | readonly (string | Ignore)[] | PatternParams + ): this + + /** + * Filters the given array of pathnames, and returns the filtered array. + * NOTICE that each path here should be a relative path to the root of your repository. + * @param paths the array of paths to be filtered. + * @returns The filtered array of paths + */ + filter(pathnames: readonly Pathname[]): Pathname[] + + /** + * Creates a filter function which could filter + * an array of paths with Array.prototype.filter. + */ + createFilter(): (pathname: Pathname) => boolean + + /** + * Returns Boolean whether pathname should be ignored. + * @param {string} pathname a path to check + * @returns boolean + */ + ignores(pathname: Pathname): boolean + + /** + * Returns whether pathname should be ignored or unignored + * @param {string} pathname a path to check + * @returns TestResult + */ + test(pathname: Pathname): TestResult + + /** + * Debugs ignore rules and returns the checking result, which is + * equivalent to `git check-ignore -v`. + * @returns TestResult + */ + checkIgnore(pathname: Pathname): TestResult + } + + interface Options { + ignorecase?: boolean + // For compatibility + ignoreCase?: boolean + allowRelativePaths?: boolean + } + + function isPathValid(pathname: string): boolean +} + +export = ignore diff --git a/node_modules/ignore/index.js b/node_modules/ignore/index.js new file mode 100644 index 0000000000..99aacbde04 --- /dev/null +++ b/node_modules/ignore/index.js @@ -0,0 +1,779 @@ +// A simple implementation of make-array +function makeArray (subject) { + return Array.isArray(subject) + ? subject + : [subject] +} + +const UNDEFINED = undefined +const EMPTY = '' +const SPACE = ' ' +const ESCAPE = '\\' +const REGEX_TEST_BLANK_LINE = /^\s+$/ +const REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/ +const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ +const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ +const REGEX_SPLITALL_CRLF = /\r?\n/g + +// Invalid: +// - /foo, +// - ./foo, +// - ../foo, +// - . +// - .. +// Valid: +// - .foo +const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ + +const REGEX_TEST_TRAILING_SLASH = /\/$/ + +const SLASH = '/' + +// Do not use ternary expression here, since "istanbul ignore next" is buggy +let TMP_KEY_IGNORE = 'node-ignore' +/* istanbul ignore else */ +if (typeof Symbol !== 'undefined') { + TMP_KEY_IGNORE = Symbol.for('node-ignore') +} +const KEY_IGNORE = TMP_KEY_IGNORE + +const define = (object, key, value) => { + Object.defineProperty(object, key, {value}) + return value +} + +const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g + +const RETURN_FALSE = () => false + +// Sanitize the range of a regular expression +// The cases are complicated, see test cases for details +const sanitizeRange = range => range.replace( + REGEX_REGEXP_RANGE, + (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) + ? match + // Invalid range (out of order) which is ok for gitignore rules but + // fatal for JavaScript regular expression, so eliminate it. + : EMPTY +) + +// See fixtures #59 +const cleanRangeBackSlash = slashes => { + const {length} = slashes + return slashes.slice(0, length - length % 2) +} + +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` + +// '`foo/`' should not continue with the '`..`' +const REPLACERS = [ + + [ + // Remove BOM + // TODO: + // Other similar zero-width characters? + /^\uFEFF/, + () => EMPTY + ], + + // > Trailing spaces are ignored unless they are quoted with backslash ("\") + [ + // (a\ ) -> (a ) + // (a ) -> (a) + // (a ) -> (a) + // (a \ ) -> (a ) + /((?:\\\\)*?)(\\?\s+)$/, + (_, m1, m2) => m1 + ( + m2.indexOf('\\') === 0 + ? SPACE + : EMPTY + ) + ], + + // Replace (\ ) with ' ' + // (\ ) -> ' ' + // (\\ ) -> '\\ ' + // (\\\ ) -> '\\ ' + [ + /(\\+?)\s/g, + (_, m1) => { + const {length} = m1 + return m1.slice(0, length - length % 2) + SPACE + } + ], + + // Escape metacharacters + // which is written down by users but means special for regular expressions. + + // > There are 12 characters with special meanings: + // > - the backslash \, + // > - the caret ^, + // > - the dollar sign $, + // > - the period or dot ., + // > - the vertical bar or pipe symbol |, + // > - the question mark ?, + // > - the asterisk or star *, + // > - the plus sign +, + // > - the opening parenthesis (, + // > - the closing parenthesis ), + // > - and the opening square bracket [, + // > - the opening curly brace {, + // > These special characters are often called "metacharacters". + [ + /[\\$.|*+(){^]/g, + match => `\\${match}` + ], + + [ + // > a question mark (?) matches a single character + /(?!\\)\?/g, + () => '[^/]' + ], + + // leading slash + [ + + // > A leading slash matches the beginning of the pathname. + // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". + // A leading slash matches the beginning of the pathname + /^\//, + () => '^' + ], + + // replace special metacharacter slash after the leading slash + [ + /\//g, + () => '\\/' + ], + + [ + // > A leading "**" followed by a slash means match in all directories. + // > For example, "**/foo" matches file or directory "foo" anywhere, + // > the same as pattern "foo". + // > "**/foo/bar" matches file or directory "bar" anywhere that is directly + // > under directory "foo". + // Notice that the '*'s have been replaced as '\\*' + /^\^*\\\*\\\*\\\//, + + // '**/foo' <-> 'foo' + () => '^(?:.*\\/)?' + ], + + // starting + [ + // there will be no leading '/' + // (which has been replaced by section "leading slash") + // If starts with '**', adding a '^' to the regular expression also works + /^(?=[^^])/, + function startingReplacer () { + // If has a slash `/` at the beginning or middle + return !/\/(?!$)/.test(this) + // > Prior to 2.22.1 + // > If the pattern does not contain a slash /, + // > Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, + // git also treats it as a shell glob pattern + + // After 2.22.1 (compatible but clearer) + // > If there is a separator at the beginning or middle (or both) + // > of the pattern, then the pattern is relative to the directory + // > level of the particular .gitignore file itself. + // > Otherwise the pattern may also match at any level below + // > the .gitignore level. + ? '(?:^|\\/)' + + // > Otherwise, Git treats the pattern as a shell glob suitable for + // > consumption by fnmatch(3) + : '^' + } + ], + + // two globstars + [ + // Use lookahead assertions so that we could match more than one `'/**'` + /\\\/\\\*\\\*(?=\\\/|$)/g, + + // Zero, one or several directories + // should not use '*', or it will be replaced by the next replacer + + // Check if it is not the last `'/**'` + (_, index, str) => index + 6 < str.length + + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches + // > zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' + + // case: /** + // > A trailing `"/**"` matches everything inside. + + // #21: everything inside but it should not include the current folder + : '\\/.+' + ], + + // normal intermediate wildcards + [ + // Never replace escaped '*' + // ignore rule '\*' will match the path '*' + + // 'abc.*/' -> go + // 'abc.*' -> skip this rule, + // coz trailing single wildcard will be handed by [trailing wildcard] + /(^|[^\\]+)(\\\*)+(?=.+)/g, + + // '*.js' matches '.js' + // '*.js' doesn't match 'abc' + (_, p1, p2) => { + // 1. + // > An asterisk "*" matches anything except a slash. + // 2. + // > Other consecutive asterisks are considered regular asterisks + // > and will match according to the previous rules. + const unescaped = p2.replace(/\\\*/g, '[^\\/]*') + return p1 + unescaped + } + ], + + [ + // unescape, revert step 3 except for back slash + // For example, if a user escape a '\\*', + // after step 3, the result will be '\\\\\\*' + /\\\\\\(?=[$.|*+(){^])/g, + () => ESCAPE + ], + + [ + // '\\\\' -> '\\' + /\\\\/g, + () => ESCAPE + ], + + [ + // > The range notation, e.g. [a-zA-Z], + // > can be used to match one of the characters in a range. + + // `\` is escaped by step 3 + /(\\)?\[([^\]/]*?)(\\*)($|\])/g, + (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE + // '\\[bar]' -> '\\\\[bar\\]' + ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` + : close === ']' + ? endEscape.length % 2 === 0 + // A normal case, and it is a range notation + // '[bar]' + // '[bar\\\\]' + ? `[${sanitizeRange(range)}${endEscape}]` + // Invalid range notaton + // '[bar\\]' -> '[bar\\\\]' + : '[]' + : '[]' + ], + + // ending + [ + // 'js' will not match 'js.' + // 'ab' will not match 'abc' + /(?:[^*])$/, + + // WTF! + // https://git-scm.com/docs/gitignore + // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) + // which re-fixes #24, #38 + + // > If there is a separator at the end of the pattern then the pattern + // > will only match directories, otherwise the pattern can match both + // > files and directories. + + // 'js*' will not match 'a.js' + // 'js/' will not match 'a.js' + // 'js' will match 'a.js' and 'a.js/' + match => /\/$/.test(match) + // foo/ will not match 'foo' + ? `${match}$` + // foo matches 'foo' and 'foo/' + : `${match}(?=$|\\/$)` + ] +] + +const REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/ +const MODE_IGNORE = 'regex' +const MODE_CHECK_IGNORE = 'checkRegex' +const UNDERSCORE = '_' + +const TRAILING_WILD_CARD_REPLACERS = { + [MODE_IGNORE] (_, p1) { + const prefix = p1 + // '\^': + // '/*' does not match EMPTY + // '/*' does not match everything + + // '\\\/': + // 'abc/*' does not match 'abc/' + ? `${p1}[^/]+` + + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*' + + return `${prefix}(?=$|\\/$)` + }, + + [MODE_CHECK_IGNORE] (_, p1) { + // When doing `git check-ignore` + const prefix = p1 + // '\\\/': + // 'abc/*' DOES match 'abc/' ! + ? `${p1}[^/]*` + + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*' + + return `${prefix}(?=$|\\/$)` + } +} + +// @param {pattern} +const makeRegexPrefix = pattern => REPLACERS.reduce( + (prev, [matcher, replacer]) => + prev.replace(matcher, replacer.bind(pattern)), + pattern +) + +const isString = subject => typeof subject === 'string' + +// > A blank line matches no files, so it can serve as a separator for readability. +const checkPattern = pattern => pattern + && isString(pattern) + && !REGEX_TEST_BLANK_LINE.test(pattern) + && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) + + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0 + +const splitPattern = pattern => pattern +.split(REGEX_SPLITALL_CRLF) +.filter(Boolean) + +class IgnoreRule { + constructor ( + pattern, + mark, + body, + ignoreCase, + negative, + prefix + ) { + this.pattern = pattern + this.mark = mark + this.negative = negative + + define(this, 'body', body) + define(this, 'ignoreCase', ignoreCase) + define(this, 'regexPrefix', prefix) + } + + get regex () { + const key = UNDERSCORE + MODE_IGNORE + + if (this[key]) { + return this[key] + } + + return this._make(MODE_IGNORE, key) + } + + get checkRegex () { + const key = UNDERSCORE + MODE_CHECK_IGNORE + + if (this[key]) { + return this[key] + } + + return this._make(MODE_CHECK_IGNORE, key) + } + + _make (mode, key) { + const str = this.regexPrefix.replace( + REGEX_REPLACE_TRAILING_WILDCARD, + + // It does not need to bind pattern + TRAILING_WILD_CARD_REPLACERS[mode] + ) + + const regex = this.ignoreCase + ? new RegExp(str, 'i') + : new RegExp(str) + + return define(this, key, regex) + } +} + +const createRule = ({ + pattern, + mark +}, ignoreCase) => { + let negative = false + let body = pattern + + // > An optional prefix "!" which negates the pattern; + if (body.indexOf('!') === 0) { + negative = true + body = body.substr(1) + } + + body = body + // > Put a backslash ("\") in front of the first "!" for patterns that + // > begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that + // > begin with a hash. + .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#') + + const regexPrefix = makeRegexPrefix(body) + + return new IgnoreRule( + pattern, + mark, + body, + ignoreCase, + negative, + regexPrefix + ) +} + +class RuleManager { + constructor (ignoreCase) { + this._ignoreCase = ignoreCase + this._rules = [] + } + + _add (pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules._rules) + this._added = true + return + } + + if (isString(pattern)) { + pattern = { + pattern + } + } + + if (checkPattern(pattern.pattern)) { + const rule = createRule(pattern, this._ignoreCase) + this._added = true + this._rules.push(rule) + } + } + + // @param {Array | string | Ignore} pattern + add (pattern) { + this._added = false + + makeArray( + isString(pattern) + ? splitPattern(pattern) + : pattern + ).forEach(this._add, this) + + return this._added + } + + // Test one single path without recursively checking parent directories + // + // - checkUnignored `boolean` whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. + // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` + + // @returns {TestResult} true if a file is ignored + test (path, checkUnignored, mode) { + let ignored = false + let unignored = false + let matchedRule + + this._rules.forEach(rule => { + const {negative} = rule + + // | ignored : unignored + // -------- | --------------------------------------- + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X + + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen + if ( + unignored === negative && ignored !== unignored + || negative && !ignored && !unignored && !checkUnignored + ) { + return + } + + const matched = rule[mode].test(path) + + if (!matched) { + return + } + + ignored = !negative + unignored = negative + + matchedRule = negative + ? UNDEFINED + : rule + }) + + const ret = { + ignored, + unignored + } + + if (matchedRule) { + ret.rule = matchedRule + } + + return ret + } +} + +const throwError = (message, Ctor) => { + throw new Ctor(message) +} + +const checkPath = (path, originalPath, doThrow) => { + if (!isString(path)) { + return doThrow( + `path must be a string, but got \`${originalPath}\``, + TypeError + ) + } + + // We don't know if we should ignore EMPTY, so throw + if (!path) { + return doThrow(`path must not be empty`, TypeError) + } + + // Check if it is a relative path + if (checkPath.isNotRelative(path)) { + const r = '`path.relative()`d' + return doThrow( + `path should be a ${r} string, but got "${originalPath}"`, + RangeError + ) + } + + return true +} + +const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path) + +checkPath.isNotRelative = isNotRelative + +// On windows, the following function will be replaced +/* istanbul ignore next */ +checkPath.convert = p => p + + +class Ignore { + constructor ({ + ignorecase = true, + ignoreCase = ignorecase, + allowRelativePaths = false + } = {}) { + define(this, KEY_IGNORE, true) + + this._rules = new RuleManager(ignoreCase) + this._strictPathCheck = !allowRelativePaths + this._initCache() + } + + _initCache () { + // A cache for the result of `.ignores()` + this._ignoreCache = Object.create(null) + + // A cache for the result of `.test()` + this._testCache = Object.create(null) + } + + add (pattern) { + if (this._rules.add(pattern)) { + // Some rules have just added to the ignore, + // making the behavior changed, + // so we need to re-initialize the result cache + this._initCache() + } + + return this + } + + // legacy + addPattern (pattern) { + return this.add(pattern) + } + + // @returns {TestResult} + _test (originalPath, cache, checkUnignored, slices) { + const path = originalPath + // Supports nullable path + && checkPath.convert(originalPath) + + checkPath( + path, + originalPath, + this._strictPathCheck + ? throwError + : RETURN_FALSE + ) + + return this._t(path, cache, checkUnignored, slices) + } + + checkIgnore (path) { + // If the path doest not end with a slash, `.ignores()` is much equivalent + // to `git check-ignore` + if (!REGEX_TEST_TRAILING_SLASH.test(path)) { + return this.test(path) + } + + const slices = path.split(SLASH).filter(Boolean) + slices.pop() + + if (slices.length) { + const parent = this._t( + slices.join(SLASH) + SLASH, + this._testCache, + true, + slices + ) + + if (parent.ignored) { + return parent + } + } + + return this._rules.test(path, false, MODE_CHECK_IGNORE) + } + + _t ( + // The path to be tested + path, + + // The cache for the result of a certain checking + cache, + + // Whether should check if the path is unignored + checkUnignored, + + // The path slices + slices + ) { + if (path in cache) { + return cache[path] + } + + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH).filter(Boolean) + } + + slices.pop() + + // If the path has no parent directory, just test it + if (!slices.length) { + return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE) + } + + const parent = this._t( + slices.join(SLASH) + SLASH, + cache, + checkUnignored, + slices + ) + + // If the path contains a parent directory, check the parent first + return cache[path] = parent.ignored + // > It is not possible to re-include a file if a parent directory of + // > that file is excluded. + ? parent + : this._rules.test(path, checkUnignored, MODE_IGNORE) + } + + ignores (path) { + return this._test(path, this._ignoreCache, false).ignored + } + + createFilter () { + return path => !this.ignores(path) + } + + filter (paths) { + return makeArray(paths).filter(this.createFilter()) + } + + // @returns {TestResult} + test (path) { + return this._test(path, this._testCache, true) + } +} + +const factory = options => new Ignore(options) + +const isPathValid = path => + checkPath(path && checkPath.convert(path), path, RETURN_FALSE) + + +// Windows +// -------------------------------------------------------------- +/* istanbul ignore next */ +if ( + // Detect `process` so that it can run in browsers. + typeof process !== 'undefined' + && ( + process.env && process.env.IGNORE_TEST_WIN32 + || process.platform === 'win32' + ) +) { + /* eslint no-control-regex: "off" */ + const makePosix = str => /^\\\\\?\\/.test(str) + || /["<>|\u0000-\u001F]+/u.test(str) + ? str + : str.replace(/\\/g, '/') + + checkPath.convert = makePosix + + // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' + // 'd:\\foo' + const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i + checkPath.isNotRelative = path => + REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) + || isNotRelative(path) +} + +// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// + +module.exports = factory + +// Although it is an anti-pattern, +// it is still widely misused by a lot of libraries in github +// Ref: https://github.com/search?q=ignore.default%28%29&type=code +factory.default = factory + +module.exports.isPathValid = isPathValid diff --git a/node_modules/ignore/legacy.js b/node_modules/ignore/legacy.js new file mode 100644 index 0000000000..fe9d3a242b --- /dev/null +++ b/node_modules/ignore/legacy.js @@ -0,0 +1,673 @@ +"use strict"; + +var _TRAILING_WILD_CARD_R; +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } +function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +// A simple implementation of make-array +function makeArray(subject) { + return Array.isArray(subject) ? subject : [subject]; +} +var UNDEFINED = undefined; +var EMPTY = ''; +var SPACE = ' '; +var ESCAPE = '\\'; +var REGEX_TEST_BLANK_LINE = /^\s+$/; +var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; +var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; +var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; +var REGEX_SPLITALL_CRLF = /\r?\n/g; + +// Invalid: +// - /foo, +// - ./foo, +// - ../foo, +// - . +// - .. +// Valid: +// - .foo +var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; +var REGEX_TEST_TRAILING_SLASH = /\/$/; +var SLASH = '/'; + +// Do not use ternary expression here, since "istanbul ignore next" is buggy +var TMP_KEY_IGNORE = 'node-ignore'; +/* istanbul ignore else */ +if (typeof Symbol !== 'undefined') { + TMP_KEY_IGNORE = Symbol["for"]('node-ignore'); +} +var KEY_IGNORE = TMP_KEY_IGNORE; +var define = function define(object, key, value) { + Object.defineProperty(object, key, { + value: value + }); + return value; +}; +var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; +var RETURN_FALSE = function RETURN_FALSE() { + return false; +}; + +// Sanitize the range of a regular expression +// The cases are complicated, see test cases for details +var sanitizeRange = function sanitizeRange(range) { + return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) { + return from.charCodeAt(0) <= to.charCodeAt(0) ? match + // Invalid range (out of order) which is ok for gitignore rules but + // fatal for JavaScript regular expression, so eliminate it. + : EMPTY; + }); +}; + +// See fixtures #59 +var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) { + var length = slashes.length; + return slashes.slice(0, length - length % 2); +}; + +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` + +// '`foo/`' should not continue with the '`..`' +var REPLACERS = [[ +// Remove BOM +// TODO: +// Other similar zero-width characters? +/^\uFEFF/, function () { + return EMPTY; +}], +// > Trailing spaces are ignored unless they are quoted with backslash ("\") +[ +// (a\ ) -> (a ) +// (a ) -> (a) +// (a ) -> (a) +// (a \ ) -> (a ) +/((?:\\\\)*?)(\\?\s+)$/, function (_, m1, m2) { + return m1 + (m2.indexOf('\\') === 0 ? SPACE : EMPTY); +}], +// Replace (\ ) with ' ' +// (\ ) -> ' ' +// (\\ ) -> '\\ ' +// (\\\ ) -> '\\ ' +[/(\\+?)\s/g, function (_, m1) { + var length = m1.length; + return m1.slice(0, length - length % 2) + SPACE; +}], +// Escape metacharacters +// which is written down by users but means special for regular expressions. + +// > There are 12 characters with special meanings: +// > - the backslash \, +// > - the caret ^, +// > - the dollar sign $, +// > - the period or dot ., +// > - the vertical bar or pipe symbol |, +// > - the question mark ?, +// > - the asterisk or star *, +// > - the plus sign +, +// > - the opening parenthesis (, +// > - the closing parenthesis ), +// > - and the opening square bracket [, +// > - the opening curly brace {, +// > These special characters are often called "metacharacters". +[/[\\$.|*+(){^]/g, function (match) { + return "\\".concat(match); +}], [ +// > a question mark (?) matches a single character +/(?!\\)\?/g, function () { + return '[^/]'; +}], +// leading slash +[ +// > A leading slash matches the beginning of the pathname. +// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". +// A leading slash matches the beginning of the pathname +/^\//, function () { + return '^'; +}], +// replace special metacharacter slash after the leading slash +[/\//g, function () { + return '\\/'; +}], [ +// > A leading "**" followed by a slash means match in all directories. +// > For example, "**/foo" matches file or directory "foo" anywhere, +// > the same as pattern "foo". +// > "**/foo/bar" matches file or directory "bar" anywhere that is directly +// > under directory "foo". +// Notice that the '*'s have been replaced as '\\*' +/^\^*\\\*\\\*\\\//, +// '**/foo' <-> 'foo' +function () { + return '^(?:.*\\/)?'; +}], +// starting +[ +// there will be no leading '/' +// (which has been replaced by section "leading slash") +// If starts with '**', adding a '^' to the regular expression also works +/^(?=[^^])/, function startingReplacer() { + // If has a slash `/` at the beginning or middle + return !/\/(?!$)/.test(this) + // > Prior to 2.22.1 + // > If the pattern does not contain a slash /, + // > Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, + // git also treats it as a shell glob pattern + + // After 2.22.1 (compatible but clearer) + // > If there is a separator at the beginning or middle (or both) + // > of the pattern, then the pattern is relative to the directory + // > level of the particular .gitignore file itself. + // > Otherwise the pattern may also match at any level below + // > the .gitignore level. + ? '(?:^|\\/)' + + // > Otherwise, Git treats the pattern as a shell glob suitable for + // > consumption by fnmatch(3) + : '^'; +}], +// two globstars +[ +// Use lookahead assertions so that we could match more than one `'/**'` +/\\\/\\\*\\\*(?=\\\/|$)/g, +// Zero, one or several directories +// should not use '*', or it will be replaced by the next replacer + +// Check if it is not the last `'/**'` +function (_, index, str) { + return index + 6 < str.length + + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches + // > zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' + + // case: /** + // > A trailing `"/**"` matches everything inside. + + // #21: everything inside but it should not include the current folder + : '\\/.+'; +}], +// normal intermediate wildcards +[ +// Never replace escaped '*' +// ignore rule '\*' will match the path '*' + +// 'abc.*/' -> go +// 'abc.*' -> skip this rule, +// coz trailing single wildcard will be handed by [trailing wildcard] +/(^|[^\\]+)(\\\*)+(?=.+)/g, +// '*.js' matches '.js' +// '*.js' doesn't match 'abc' +function (_, p1, p2) { + // 1. + // > An asterisk "*" matches anything except a slash. + // 2. + // > Other consecutive asterisks are considered regular asterisks + // > and will match according to the previous rules. + var unescaped = p2.replace(/\\\*/g, '[^\\/]*'); + return p1 + unescaped; +}], [ +// unescape, revert step 3 except for back slash +// For example, if a user escape a '\\*', +// after step 3, the result will be '\\\\\\*' +/\\\\\\(?=[$.|*+(){^])/g, function () { + return ESCAPE; +}], [ +// '\\\\' -> '\\' +/\\\\/g, function () { + return ESCAPE; +}], [ +// > The range notation, e.g. [a-zA-Z], +// > can be used to match one of the characters in a range. + +// `\` is escaped by step 3 +/(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) { + return leadEscape === ESCAPE + // '\\[bar]' -> '\\\\[bar\\]' + ? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0 + // A normal case, and it is a range notation + // '[bar]' + // '[bar\\\\]' + ? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton + // '[bar\\]' -> '[bar\\\\]' + : '[]' : '[]'; +}], +// ending +[ +// 'js' will not match 'js.' +// 'ab' will not match 'abc' +/(?:[^*])$/, +// WTF! +// https://git-scm.com/docs/gitignore +// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) +// which re-fixes #24, #38 + +// > If there is a separator at the end of the pattern then the pattern +// > will only match directories, otherwise the pattern can match both +// > files and directories. + +// 'js*' will not match 'a.js' +// 'js/' will not match 'a.js' +// 'js' will match 'a.js' and 'a.js/' +function (match) { + return /\/$/.test(match) + // foo/ will not match 'foo' + ? "".concat(match, "$") // foo matches 'foo' and 'foo/' + : "".concat(match, "(?=$|\\/$)"); +}]]; +var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/; +var MODE_IGNORE = 'regex'; +var MODE_CHECK_IGNORE = 'checkRegex'; +var UNDERSCORE = '_'; +var TRAILING_WILD_CARD_REPLACERS = (_TRAILING_WILD_CARD_R = {}, _defineProperty(_TRAILING_WILD_CARD_R, MODE_IGNORE, function (_, p1) { + var prefix = p1 + // '\^': + // '/*' does not match EMPTY + // '/*' does not match everything + + // '\\\/': + // 'abc/*' does not match 'abc/' + ? "".concat(p1, "[^/]+") // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*'; + return "".concat(prefix, "(?=$|\\/$)"); +}), _defineProperty(_TRAILING_WILD_CARD_R, MODE_CHECK_IGNORE, function (_, p1) { + // When doing `git check-ignore` + var prefix = p1 + // '\\\/': + // 'abc/*' DOES match 'abc/' ! + ? "".concat(p1, "[^/]*") // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*'; + return "".concat(prefix, "(?=$|\\/$)"); +}), _TRAILING_WILD_CARD_R); + +// @param {pattern} +var makeRegexPrefix = function makeRegexPrefix(pattern) { + return REPLACERS.reduce(function (prev, _ref) { + var _ref2 = _slicedToArray(_ref, 2), + matcher = _ref2[0], + replacer = _ref2[1]; + return prev.replace(matcher, replacer.bind(pattern)); + }, pattern); +}; +var isString = function isString(subject) { + return typeof subject === 'string'; +}; + +// > A blank line matches no files, so it can serve as a separator for readability. +var checkPattern = function checkPattern(pattern) { + return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) + + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0; +}; +var splitPattern = function splitPattern(pattern) { + return pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean); +}; +var IgnoreRule = /*#__PURE__*/function () { + function IgnoreRule(pattern, mark, body, ignoreCase, negative, prefix) { + _classCallCheck(this, IgnoreRule); + this.pattern = pattern; + this.mark = mark; + this.negative = negative; + define(this, 'body', body); + define(this, 'ignoreCase', ignoreCase); + define(this, 'regexPrefix', prefix); + } + _createClass(IgnoreRule, [{ + key: "regex", + get: function get() { + var key = UNDERSCORE + MODE_IGNORE; + if (this[key]) { + return this[key]; + } + return this._make(MODE_IGNORE, key); + } + }, { + key: "checkRegex", + get: function get() { + var key = UNDERSCORE + MODE_CHECK_IGNORE; + if (this[key]) { + return this[key]; + } + return this._make(MODE_CHECK_IGNORE, key); + } + }, { + key: "_make", + value: function _make(mode, key) { + var str = this.regexPrefix.replace(REGEX_REPLACE_TRAILING_WILDCARD, + // It does not need to bind pattern + TRAILING_WILD_CARD_REPLACERS[mode]); + var regex = this.ignoreCase ? new RegExp(str, 'i') : new RegExp(str); + return define(this, key, regex); + } + }]); + return IgnoreRule; +}(); +var createRule = function createRule(_ref3, ignoreCase) { + var pattern = _ref3.pattern, + mark = _ref3.mark; + var negative = false; + var body = pattern; + + // > An optional prefix "!" which negates the pattern; + if (body.indexOf('!') === 0) { + negative = true; + body = body.substr(1); + } + body = body + // > Put a backslash ("\") in front of the first "!" for patterns that + // > begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that + // > begin with a hash. + .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); + var regexPrefix = makeRegexPrefix(body); + return new IgnoreRule(pattern, mark, body, ignoreCase, negative, regexPrefix); +}; +var RuleManager = /*#__PURE__*/function () { + function RuleManager(ignoreCase) { + _classCallCheck(this, RuleManager); + this._ignoreCase = ignoreCase; + this._rules = []; + } + _createClass(RuleManager, [{ + key: "_add", + value: function _add(pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules._rules); + this._added = true; + return; + } + if (isString(pattern)) { + pattern = { + pattern: pattern + }; + } + if (checkPattern(pattern.pattern)) { + var rule = createRule(pattern, this._ignoreCase); + this._added = true; + this._rules.push(rule); + } + } + + // @param {Array | string | Ignore} pattern + }, { + key: "add", + value: function add(pattern) { + this._added = false; + makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._add, this); + return this._added; + } + + // Test one single path without recursively checking parent directories + // + // - checkUnignored `boolean` whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. + // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` + + // @returns {TestResult} true if a file is ignored + }, { + key: "test", + value: function test(path, checkUnignored, mode) { + var ignored = false; + var unignored = false; + var matchedRule; + this._rules.forEach(function (rule) { + var negative = rule.negative; + + // | ignored : unignored + // -------- | --------------------------------------- + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X + + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen + if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { + return; + } + var matched = rule[mode].test(path); + if (!matched) { + return; + } + ignored = !negative; + unignored = negative; + matchedRule = negative ? UNDEFINED : rule; + }); + var ret = { + ignored: ignored, + unignored: unignored + }; + if (matchedRule) { + ret.rule = matchedRule; + } + return ret; + } + }]); + return RuleManager; +}(); +var throwError = function throwError(message, Ctor) { + throw new Ctor(message); +}; +var checkPath = function checkPath(path, originalPath, doThrow) { + if (!isString(path)) { + return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError); + } + + // We don't know if we should ignore EMPTY, so throw + if (!path) { + return doThrow("path must not be empty", TypeError); + } + + // Check if it is a relative path + if (checkPath.isNotRelative(path)) { + var r = '`path.relative()`d'; + return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError); + } + return true; +}; +var isNotRelative = function isNotRelative(path) { + return REGEX_TEST_INVALID_PATH.test(path); +}; +checkPath.isNotRelative = isNotRelative; + +// On windows, the following function will be replaced +/* istanbul ignore next */ +checkPath.convert = function (p) { + return p; +}; +var Ignore = /*#__PURE__*/function () { + function Ignore() { + var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref4$ignorecase = _ref4.ignorecase, + ignorecase = _ref4$ignorecase === void 0 ? true : _ref4$ignorecase, + _ref4$ignoreCase = _ref4.ignoreCase, + ignoreCase = _ref4$ignoreCase === void 0 ? ignorecase : _ref4$ignoreCase, + _ref4$allowRelativePa = _ref4.allowRelativePaths, + allowRelativePaths = _ref4$allowRelativePa === void 0 ? false : _ref4$allowRelativePa; + _classCallCheck(this, Ignore); + define(this, KEY_IGNORE, true); + this._rules = new RuleManager(ignoreCase); + this._strictPathCheck = !allowRelativePaths; + this._initCache(); + } + _createClass(Ignore, [{ + key: "_initCache", + value: function _initCache() { + // A cache for the result of `.ignores()` + this._ignoreCache = Object.create(null); + + // A cache for the result of `.test()` + this._testCache = Object.create(null); + } + }, { + key: "add", + value: function add(pattern) { + if (this._rules.add(pattern)) { + // Some rules have just added to the ignore, + // making the behavior changed, + // so we need to re-initialize the result cache + this._initCache(); + } + return this; + } + + // legacy + }, { + key: "addPattern", + value: function addPattern(pattern) { + return this.add(pattern); + } + + // @returns {TestResult} + }, { + key: "_test", + value: function _test(originalPath, cache, checkUnignored, slices) { + var path = originalPath + // Supports nullable path + && checkPath.convert(originalPath); + checkPath(path, originalPath, this._strictPathCheck ? throwError : RETURN_FALSE); + return this._t(path, cache, checkUnignored, slices); + } + }, { + key: "checkIgnore", + value: function checkIgnore(path) { + // If the path doest not end with a slash, `.ignores()` is much equivalent + // to `git check-ignore` + if (!REGEX_TEST_TRAILING_SLASH.test(path)) { + return this.test(path); + } + var slices = path.split(SLASH).filter(Boolean); + slices.pop(); + if (slices.length) { + var parent = this._t(slices.join(SLASH) + SLASH, this._testCache, true, slices); + if (parent.ignored) { + return parent; + } + } + return this._rules.test(path, false, MODE_CHECK_IGNORE); + } + }, { + key: "_t", + value: function _t( + // The path to be tested + path, + // The cache for the result of a certain checking + cache, + // Whether should check if the path is unignored + checkUnignored, + // The path slices + slices) { + if (path in cache) { + return cache[path]; + } + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH).filter(Boolean); + } + slices.pop(); + + // If the path has no parent directory, just test it + if (!slices.length) { + return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE); + } + var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices); + + // If the path contains a parent directory, check the parent first + return cache[path] = parent.ignored + // > It is not possible to re-include a file if a parent directory of + // > that file is excluded. + ? parent : this._rules.test(path, checkUnignored, MODE_IGNORE); + } + }, { + key: "ignores", + value: function ignores(path) { + return this._test(path, this._ignoreCache, false).ignored; + } + }, { + key: "createFilter", + value: function createFilter() { + var _this = this; + return function (path) { + return !_this.ignores(path); + }; + } + }, { + key: "filter", + value: function filter(paths) { + return makeArray(paths).filter(this.createFilter()); + } + + // @returns {TestResult} + }, { + key: "test", + value: function test(path) { + return this._test(path, this._testCache, true); + } + }]); + return Ignore; +}(); +var factory = function factory(options) { + return new Ignore(options); +}; +var isPathValid = function isPathValid(path) { + return checkPath(path && checkPath.convert(path), path, RETURN_FALSE); +}; + +// Windows +// -------------------------------------------------------------- +/* istanbul ignore next */ +if ( +// Detect `process` so that it can run in browsers. +typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) { + /* eslint no-control-regex: "off" */ + var makePosix = function makePosix(str) { + return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/'); + }; + checkPath.convert = makePosix; + + // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' + // 'd:\\foo' + var REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; + checkPath.isNotRelative = function (path) { + return REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path); + }; +} + +// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// + +module.exports = factory; + +// Although it is an anti-pattern, +// it is still widely misused by a lot of libraries in github +// Ref: https://github.com/search?q=ignore.default%28%29&type=code +factory["default"] = factory; +module.exports.isPathValid = isPathValid; diff --git a/node_modules/ignore/package.json b/node_modules/ignore/package.json new file mode 100644 index 0000000000..b0608c32e8 --- /dev/null +++ b/node_modules/ignore/package.json @@ -0,0 +1,88 @@ +{ + "name": "ignore", + "version": "7.0.3", + "description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.", + "types": "index.d.ts", + "files": [ + "legacy.js", + "index.js", + "index.d.ts", + "LICENSE-MIT" + ], + "scripts": { + "prepublishOnly": "npm run build", + "build": "babel -o legacy.js index.js", + + "==================== linting ======================": "", + "lint": "eslint .", + + "===================== import ======================": "", + "ts": "npm run test:ts && npm run test:16", + "test:ts": "ts-node ./test/import/simple.ts", + "test:16": "npm run test:ts:16 && npm run test:cjs:16 && npm run test:mjs:16", + "test:ts:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.ts && tsc ./test/import/simple.ts --lib ES6 --moduleResolution Node16 --module Node16 && node ./test/import/simple.js", + "test:cjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.cjs", + "test:mjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.mjs && babel -o ./test/import/simple-mjs.js ./test/import/simple.mjs && node ./test/import/simple-mjs.js", + + "===================== cases =======================": "", + "test:cases": "npm run tap test/*.test.js -- --coverage", + "tap": "tap --reporter classic", + + "===================== debug =======================": "", + "test:git": "npm run tap test/git-check-ignore.test.js", + "test:ignore": "npm run tap test/ignore.test.js", + "test:ignore:only": "IGNORE_ONLY_IGNORES=1 npm run tap test/ignore.test.js", + "test:others": "npm run tap test/others.test.js", + "test:no-coverage": "npm run tap test/*.test.js -- --no-check-coverage", + + "test": "npm run lint && npm run ts && npm run build && npm run test:cases", + "test:win32": "IGNORE_TEST_WIN32=1 npm run test", + "report": "tap --coverage-report=html" + }, + "repository": { + "type": "git", + "url": "git@github.com:kaelzhang/node-ignore.git" + }, + "keywords": [ + "ignore", + ".gitignore", + "gitignore", + "npmignore", + "rules", + "manager", + "filter", + "regexp", + "regex", + "fnmatch", + "glob", + "asterisks", + "regular-expression" + ], + "author": "kael", + "license": "MIT", + "bugs": { + "url": "https://github.com/kaelzhang/node-ignore/issues" + }, + "devDependencies": { + "@babel/cli": "^7.22.9", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@typescript-eslint/eslint-plugin": "^8.19.1", + "codecov": "^3.8.3", + "debug": "^4.3.4", + "eslint": "^8.46.0", + "eslint-config-ostai": "^3.0.0", + "eslint-plugin-import": "^2.28.0", + "mkdirp": "^3.0.1", + "pre-suf": "^1.1.1", + "rimraf": "^6.0.1", + "spawn-sync": "^2.0.0", + "tap": "^16.3.9", + "tmp": "0.2.3", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" + }, + "engines": { + "node": ">= 4" + } +} diff --git a/node_modules/ini/LICENSE b/node_modules/ini/LICENSE new file mode 100644 index 0000000000..19129e315f --- /dev/null +++ b/node_modules/ini/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/ini/README.md b/node_modules/ini/README.md new file mode 100644 index 0000000000..c6eee0052a --- /dev/null +++ b/node_modules/ini/README.md @@ -0,0 +1,180 @@ + +An INI format parser & serializer. + +## Note + +- Sections are treated as nested objects. + +- Section-less items are treated as globals. + +## Usage + +Consider an INI file such as the following: + +```ini +; This comment is being ignored +scope = global + +[database] +user = dbuser +password = dbpassword +database = use_this_database + +[paths.default] +datadir = /var/lib/data +array[] = first value +array[] = second value +array[] = third value +``` + +You can **read**, **modify** and **write** it like so: + +```js +import { writeFile , readFile } from 'node:fs/promises' +import { stringify , parse } from 'ini' + +// Read INI file as text + +let text = await readFile(`./Original.ini`,{ + encoding : 'utf-8' +}) + +// Parse text data to object + +const config = parse(text) + +// Modify data object + +config.scope = 'local' +config.database.database = 'use_another_database' +config.paths.default.tmpdir = '/tmp' +delete config.paths.default.datadir +config.paths.default.array.push('fourth value') + +// Stringify data object + +text = stringify(config,{ + section : 'section' +}) + +// Write INI file as text + +await writeFile(`./Modified.ini`,text) +``` + +The written file will contain the following: + +```ini +[section] +scope=local +[section.database] +user=dbuser +password=dbpassword +database=use_another_database +[section.paths.default] +tmpdir=/tmp +array[]=first value +array[]=second value +array[]=third value +array[]=fourth value +``` + +## API + +### Parse + +Attempts to turn the given INI string into a nested data object. + +```js +// You can also use `decode` +const object = parse(``) +``` + +### Stringify + +Encodes the given data object as an INI formatted string. + +```js +// You can also use `encode` +stringify(object,{ + + /** + * Whether to insert spaces before & after `=` + * + * Disabled by default to have better + * compatibility with old picky parsers. + */ + + whitespace : false , + + /** + * Whether to align the `=` character for each section. + * -> Also enables the `whitespace` option + */ + + align : false , + + /** + * Identifier to use for global items + * and to prepend to all other sections. + */ + + section , + + /** + * Whether to sort all sections & their keys alphabetically. + */ + + sort : false , + + /** + * Whether to insert a newline after each section header. + * + * The TOSHIBA & FlashAir parser require this format. + */ + + newline : false , + + /** + * Which platforms line-endings should be used. + * + * win32 -> CR+LF + * other -> LF + * + * Default is the current platform + */ + + platform , + + /** + * Whether to append `[]` to array keys. + * + * Some parsers treat duplicate names by themselves as arrays + */ + + bracketedArray : true + +}) +``` + +*For backwards compatibility any string passed as the* +*options parameter is treated as the `section` option.* + +```js +stringify(object,'section') +``` + +### Un / Escape + +Turn the given string into a safe to +use key or value in your INI file. + +```js +safe(`"unsafe string"`) // -> \"unsafe string\" +``` + +Or reverse the process with: + +```js +unsafe(`\\"safe string\\"`) // -> "safe string" +``` diff --git a/node_modules/ini/package.json b/node_modules/ini/package.json new file mode 100644 index 0000000000..67aa927825 --- /dev/null +++ b/node_modules/ini/package.json @@ -0,0 +1,45 @@ +{ + "author": "GitHub Inc.", + "name": "ini", + "description": "An ini encoder/decoder for node", + "version": "4.1.3", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/ini.git" + }, + "main": "lib/ini.js", + "scripts": { + "eslint": "eslint", + "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"", + "lintfix": "npm run lint -- --fix", + "test": "tap", + "snap": "tap", + "posttest": "npm run lint", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force" + }, + "devDependencies": { + "@npmcli/eslint-config": "^4.0.0", + "@npmcli/template-oss": "4.22.0", + "tap": "^16.0.1" + }, + "license": "ISC", + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "4.22.0", + "publish": "true" + }, + "tap": { + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] + } +} diff --git a/node_modules/is-alphabetical/index.d.ts b/node_modules/is-alphabetical/index.d.ts new file mode 100644 index 0000000000..ceee1c6113 --- /dev/null +++ b/node_modules/is-alphabetical/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is alphabetical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphabetical. + */ +export function isAlphabetical(character: string | number): boolean diff --git a/node_modules/is-alphabetical/index.js b/node_modules/is-alphabetical/index.js new file mode 100644 index 0000000000..f71156a48b --- /dev/null +++ b/node_modules/is-alphabetical/index.js @@ -0,0 +1,16 @@ +/** + * Check if the given character code, or the character code at the first + * character, is alphabetical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphabetical. + */ +export function isAlphabetical(character) { + const code = + typeof character === 'string' ? character.charCodeAt(0) : character + + return ( + (code >= 97 && code <= 122) /* a-z */ || + (code >= 65 && code <= 90) /* A-Z */ + ) +} diff --git a/node_modules/is-alphabetical/license b/node_modules/is-alphabetical/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-alphabetical/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphabetical/package.json b/node_modules/is-alphabetical/package.json new file mode 100644 index 0000000000..c274f30d20 --- /dev/null +++ b/node_modules/is-alphabetical/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-alphabetical", + "version": "2.0.1", + "description": "Check if a character is alphabetical", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "alphabetical" + ], + "repository": "wooorm/is-alphabetical", + "bugs": "https://github.com/wooorm/is-alphabetical/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-alphabetical/readme.md b/node_modules/is-alphabetical/readme.md new file mode 100644 index 0000000000..8c83eb6016 --- /dev/null +++ b/node_modules/is-alphabetical/readme.md @@ -0,0 +1,141 @@ +# is-alphabetical + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is alphabetical. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isAlphabetical(character|code)`](#isalphabeticalcharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is ASCII alphabetical: +matching `[a-z]`, case insensitive. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-alphabetical +``` + +In Deno with [Skypack][]: + +```js +import {isAlphabetical} from 'https://cdn.skypack.dev/is-alphabetical@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isAlphabetical} from 'is-alphabetical' + +isAlphabetical('a') // => true +isAlphabetical('B') // => true +isAlphabetical('0') // => false +isAlphabetical('💩') // => false +``` + +## API + +This package exports the following identifier: `isAlphabetical`. +There is no default export. + +### `isAlphabetical(character|code)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is alphabetical. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) +* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) +* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphanumerical) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-alphabetical/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-alphabetical/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphabetical.svg + +[coverage]: https://codecov.io/github/wooorm/is-alphabetical + +[downloads-badge]: https://img.shields.io/npm/dm/is-alphabetical.svg + +[downloads]: https://www.npmjs.com/package/is-alphabetical + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphabetical.svg + +[size]: https://bundlephobia.com/result?p=is-alphabetical + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-alphanumerical/index.d.ts b/node_modules/is-alphanumerical/index.d.ts new file mode 100644 index 0000000000..3fed2bd3fa --- /dev/null +++ b/node_modules/is-alphanumerical/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is alphanumerical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphanumerical. + */ +export function isAlphanumerical(character: string | number): boolean diff --git a/node_modules/is-alphanumerical/index.js b/node_modules/is-alphanumerical/index.js new file mode 100644 index 0000000000..10188f360d --- /dev/null +++ b/node_modules/is-alphanumerical/index.js @@ -0,0 +1,13 @@ +import {isAlphabetical} from 'is-alphabetical' +import {isDecimal} from 'is-decimal' + +/** + * Check if the given character code, or the character code at the first + * character, is alphanumerical. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is alphanumerical. + */ +export function isAlphanumerical(character) { + return isAlphabetical(character) || isDecimal(character) +} diff --git a/node_modules/is-alphanumerical/license b/node_modules/is-alphanumerical/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-alphanumerical/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphanumerical/package.json b/node_modules/is-alphanumerical/package.json new file mode 100644 index 0000000000..2689af5d07 --- /dev/null +++ b/node_modules/is-alphanumerical/package.json @@ -0,0 +1,79 @@ +{ + "name": "is-alphanumerical", + "version": "2.0.1", + "description": "Check if a character is alphanumerical", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "alphabetical", + "numerical", + "alphanumerical" + ], + "repository": "wooorm/is-alphanumerical", + "bugs": "https://github.com/wooorm/is-alphanumerical/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-alphanumerical/readme.md b/node_modules/is-alphanumerical/readme.md new file mode 100644 index 0000000000..cacd9a6422 --- /dev/null +++ b/node_modules/is-alphanumerical/readme.md @@ -0,0 +1,142 @@ +# is-alphanumerical + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is alphanumerical. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isAlphanumerical(character)`](#isalphanumericalcharacter) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is ASCII alphanumerical: +it matches `[a-zA-Z0-9]`. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-alphanumerical +``` + +In Deno with [Skypack][]: + +```js +import {isAlphanumerical} from 'https://cdn.skypack.dev/is-alphanumerical@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isAlphanumerical} from 'is-alphanumerical' + +isAlphanumerical('a') // => true +isAlphanumerical('Z') // => true +isAlphanumerical('0') // => true +isAlphanumerical(' ') // => false +isAlphanumerical('💩') // => false +``` + +## API + +This package exports the following identifier: `isAlphanumerical`. +There is no default export. + +### `isAlphanumerical(character)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is alphanumerical. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) +* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-alphanumerical/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-alphanumerical/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphanumerical.svg + +[coverage]: https://codecov.io/github/wooorm/is-alphanumerical + +[downloads-badge]: https://img.shields.io/npm/dm/is-alphanumerical.svg + +[downloads]: https://www.npmjs.com/package/is-alphanumerical + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphanumerical.svg + +[size]: https://bundlephobia.com/result?p=is-alphanumerical + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-decimal/index.d.ts b/node_modules/is-decimal/index.d.ts new file mode 100644 index 0000000000..5f162a7145 --- /dev/null +++ b/node_modules/is-decimal/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is decimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is a decimal + */ +export function isDecimal(character: string | number): boolean diff --git a/node_modules/is-decimal/index.js b/node_modules/is-decimal/index.js new file mode 100644 index 0000000000..4fe00ff751 --- /dev/null +++ b/node_modules/is-decimal/index.js @@ -0,0 +1,13 @@ +/** + * Check if the given character code, or the character code at the first + * character, is decimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is a decimal + */ +export function isDecimal(character) { + const code = + typeof character === 'string' ? character.charCodeAt(0) : character + + return code >= 48 && code <= 57 /* 0-9 */ +} diff --git a/node_modules/is-decimal/license b/node_modules/is-decimal/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-decimal/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-decimal/package.json b/node_modules/is-decimal/package.json new file mode 100644 index 0000000000..c0a593994b --- /dev/null +++ b/node_modules/is-decimal/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-decimal", + "version": "2.0.1", + "description": "Check if a character is decimal", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "decimal" + ], + "repository": "wooorm/is-decimal", + "bugs": "https://github.com/wooorm/is-decimal/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-decimal/readme.md b/node_modules/is-decimal/readme.md new file mode 100644 index 0000000000..1595537c08 --- /dev/null +++ b/node_modules/is-decimal/readme.md @@ -0,0 +1,139 @@ +# is-decimal + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is a decimal. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isDecimal(character|code)`](#isdecimalcharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is an ASCII decimal. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-decimal +``` + +In Deno with [Skypack][]: + +```js +import {isDecimal} from 'https://cdn.skypack.dev/is-decimal@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isDecimal} from 'is-decimal' + +isDecimal('0') // => true +isDecimal('9') // => true +isDecimal('a') // => false +isDecimal('💩') // => false +``` + +## API + +This package exports the following identifiers: `isDecimal`. +There is no default export. + +### `isDecimal(character|code)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is decimal. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-decimal/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-decimal/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-decimal.svg + +[coverage]: https://codecov.io/github/wooorm/is-decimal + +[downloads-badge]: https://img.shields.io/npm/dm/is-decimal.svg + +[downloads]: https://www.npmjs.com/package/is-decimal + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-decimal.svg + +[size]: https://bundlephobia.com/result?p=is-decimal + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-fullwidth-code-point/index.d.ts b/node_modules/is-fullwidth-code-point/index.d.ts new file mode 100644 index 0000000000..729d202051 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.d.ts @@ -0,0 +1,17 @@ +/** +Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms). + +@param codePoint - The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + +@example +``` +import isFullwidthCodePoint from 'is-fullwidth-code-point'; + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` +*/ +export default function isFullwidthCodePoint(codePoint: number): boolean; diff --git a/node_modules/is-fullwidth-code-point/index.js b/node_modules/is-fullwidth-code-point/index.js new file mode 100644 index 0000000000..671f97f760 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.js @@ -0,0 +1,50 @@ +/* eslint-disable yoda */ +'use strict'; + +const isFullwidthCodePoint = codePoint => { + if (Number.isNaN(codePoint)) { + return false; + } + + // Code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + codePoint >= 0x1100 && ( + codePoint <= 0x115F || // Hangul Jamo + codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET + codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= codePoint && codePoint <= 0x4DBF) || + // CJK Unified Ideographs .. Yi Radicals + (0x4E00 <= codePoint && codePoint <= 0xA4C6) || + // Hangul Jamo Extended-A + (0xA960 <= codePoint && codePoint <= 0xA97C) || + // Hangul Syllables + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + // CJK Compatibility Ideographs + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + // Vertical Forms + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + // CJK Compatibility Forms .. Small Form Variants + (0xFE30 <= codePoint && codePoint <= 0xFE6B) || + // Halfwidth and Fullwidth Forms + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || + // Kana Supplement + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + // Enclosed Ideographic Supplement + (0x1F200 <= codePoint && codePoint <= 0x1F251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= codePoint && codePoint <= 0x3FFFD) + ) + ) { + return true; + } + + return false; +}; + +module.exports = isFullwidthCodePoint; +module.exports.default = isFullwidthCodePoint; diff --git a/node_modules/is-fullwidth-code-point/license b/node_modules/is-fullwidth-code-point/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-fullwidth-code-point/package.json b/node_modules/is-fullwidth-code-point/package.json new file mode 100644 index 0000000000..2137e888fa --- /dev/null +++ b/node_modules/is-fullwidth-code-point/package.json @@ -0,0 +1,42 @@ +{ + "name": "is-fullwidth-code-point", + "version": "3.0.0", + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "license": "MIT", + "repository": "sindresorhus/is-fullwidth-code-point", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "string", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "devDependencies": { + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" + } +} diff --git a/node_modules/is-fullwidth-code-point/readme.md b/node_modules/is-fullwidth-code-point/readme.md new file mode 100644 index 0000000000..4236bba980 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/readme.md @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` + + +## API + +### isFullwidthCodePoint(codePoint) + +#### codePoint + +Type: `number` + +The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/is-hexadecimal/index.d.ts b/node_modules/is-hexadecimal/index.d.ts new file mode 100644 index 0000000000..1199b32aa8 --- /dev/null +++ b/node_modules/is-hexadecimal/index.d.ts @@ -0,0 +1,8 @@ +/** + * Check if the given character code, or the character code at the first + * character, is hexadecimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is hexadecimal + */ +export function isHexadecimal(character: string | number): boolean diff --git a/node_modules/is-hexadecimal/index.js b/node_modules/is-hexadecimal/index.js new file mode 100644 index 0000000000..2eda39fbef --- /dev/null +++ b/node_modules/is-hexadecimal/index.js @@ -0,0 +1,17 @@ +/** + * Check if the given character code, or the character code at the first + * character, is hexadecimal. + * + * @param {string|number} character + * @returns {boolean} Whether `character` is hexadecimal + */ +export function isHexadecimal(character) { + const code = + typeof character === 'string' ? character.charCodeAt(0) : character + + return ( + (code >= 97 /* a */ && code <= 102) /* z */ || + (code >= 65 /* A */ && code <= 70) /* Z */ || + (code >= 48 /* A */ && code <= 57) /* Z */ + ) +} diff --git a/node_modules/is-hexadecimal/license b/node_modules/is-hexadecimal/license new file mode 100644 index 0000000000..8d8660d36e --- /dev/null +++ b/node_modules/is-hexadecimal/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-hexadecimal/package.json b/node_modules/is-hexadecimal/package.json new file mode 100644 index 0000000000..e88ab44727 --- /dev/null +++ b/node_modules/is-hexadecimal/package.json @@ -0,0 +1,73 @@ +{ + "name": "is-hexadecimal", + "version": "2.0.1", + "description": "Check if a character is hexadecimal", + "license": "MIT", + "keywords": [ + "string", + "character", + "char", + "code", + "hexadecimal" + ], + "repository": "wooorm/is-hexadecimal", + "bugs": "https://github.com/wooorm/is-hexadecimal/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/is-hexadecimal/readme.md b/node_modules/is-hexadecimal/readme.md new file mode 100644 index 0000000000..a857ecd909 --- /dev/null +++ b/node_modules/is-hexadecimal/readme.md @@ -0,0 +1,141 @@ +# is-hexadecimal + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Check if a character is hexadecimal. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`isHexadecimal(character|code)`](#ishexadecimalcharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a function that checks if a given character is a white space character: +whether it matches `[a-f0-9]`, case insensitive. + +## When should I use this? + +Not often, as it’s relatively simple to do yourself. +This package exists because it’s needed in several related packages, at which +point it becomes useful to defer to one shared function. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install is-hexadecimal +``` + +In Deno with [Skypack][]: + +```js +import {isHexadecimal} from 'https://cdn.skypack.dev/is-hexadecimal@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {isHexadecimal} from 'is-hexadecimal' + +isHexadecimal('a') // => true +isHexadecimal('0') // => true +isHexadecimal('G') // => false +isHexadecimal('💩') // => false +``` + +## API + +This package exports the following identifier: `isHexadecimal`. +There is no default export. + +### `isHexadecimal(character|code)` + +Check whether the given character code (`number`), or the character code at the +first position (`string`), is isHexadecimal. + +## Types + +This package is fully typed with [TypeScript][]. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphabetical) +* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) +* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) +* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/is-hexadecimal/workflows/main/badge.svg + +[build]: https://github.com/wooorm/is-hexadecimal/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-hexadecimal.svg + +[coverage]: https://codecov.io/github/wooorm/is-hexadecimal + +[downloads-badge]: https://img.shields.io/npm/dm/is-hexadecimal.svg + +[downloads]: https://www.npmjs.com/package/is-hexadecimal + +[size-badge]: https://img.shields.io/bundlephobia/minzip/is-hexadecimal.svg + +[size]: https://bundlephobia.com/result?p=is-hexadecimal + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/isexe/.npmignore b/node_modules/isexe/.npmignore new file mode 100644 index 0000000000..c1cb757acf --- /dev/null +++ b/node_modules/isexe/.npmignore @@ -0,0 +1,2 @@ +.nyc_output/ +coverage/ diff --git a/node_modules/isexe/LICENSE b/node_modules/isexe/LICENSE new file mode 100644 index 0000000000..19129e315f --- /dev/null +++ b/node_modules/isexe/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/isexe/README.md b/node_modules/isexe/README.md new file mode 100644 index 0000000000..35769e8440 --- /dev/null +++ b/node_modules/isexe/README.md @@ -0,0 +1,51 @@ +# isexe + +Minimal module to check if a file is executable, and a normal file. + +Uses `fs.stat` and tests against the `PATHEXT` environment variable on +Windows. + +## USAGE + +```javascript +var isexe = require('isexe') +isexe('some-file-name', function (err, isExe) { + if (err) { + console.error('probably file does not exist or something', err) + } else if (isExe) { + console.error('this thing can be run') + } else { + console.error('cannot be run') + } +}) + +// same thing but synchronous, throws errors +var isExe = isexe.sync('some-file-name') + +// treat errors as just "not executable" +isexe('maybe-missing-file', { ignoreErrors: true }, callback) +var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) +``` + +## API + +### `isexe(path, [options], [callback])` + +Check if the path is executable. If no callback provided, and a +global `Promise` object is available, then a Promise will be returned. + +Will raise whatever errors may be raised by `fs.stat`, unless +`options.ignoreErrors` is set to true. + +### `isexe.sync(path, [options])` + +Same as `isexe` but returns the value and throws any errors raised. + +### Options + +* `ignoreErrors` Treat all errors as "no, this is not executable", but + don't raise them. +* `uid` Number to use as the user id +* `gid` Number to use as the group id +* `pathExt` List of path extensions to use instead of `PATHEXT` + environment variable on Windows. diff --git a/node_modules/isexe/index.js b/node_modules/isexe/index.js new file mode 100644 index 0000000000..553fb32b11 --- /dev/null +++ b/node_modules/isexe/index.js @@ -0,0 +1,57 @@ +var fs = require('fs') +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = require('./windows.js') +} else { + core = require('./mode.js') +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} diff --git a/node_modules/isexe/mode.js b/node_modules/isexe/mode.js new file mode 100644 index 0000000000..1995ea4a06 --- /dev/null +++ b/node_modules/isexe/mode.js @@ -0,0 +1,41 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} diff --git a/node_modules/isexe/package.json b/node_modules/isexe/package.json new file mode 100644 index 0000000000..e452689442 --- /dev/null +++ b/node_modules/isexe/package.json @@ -0,0 +1,31 @@ +{ + "name": "isexe", + "version": "2.0.0", + "description": "Minimal module to check if a file is executable.", + "main": "index.js", + "directories": { + "test": "test" + }, + "devDependencies": { + "mkdirp": "^0.5.1", + "rimraf": "^2.5.0", + "tap": "^10.3.0" + }, + "scripts": { + "test": "tap test/*.js --100", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --all; git push origin --tags" + }, + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/isexe.git" + }, + "keywords": [], + "bugs": { + "url": "https://github.com/isaacs/isexe/issues" + }, + "homepage": "https://github.com/isaacs/isexe#readme" +} diff --git a/node_modules/isexe/test/basic.js b/node_modules/isexe/test/basic.js new file mode 100644 index 0000000000..d926df64b9 --- /dev/null +++ b/node_modules/isexe/test/basic.js @@ -0,0 +1,221 @@ +var t = require('tap') +var fs = require('fs') +var path = require('path') +var fixture = path.resolve(__dirname, 'fixtures') +var meow = fixture + '/meow.cat' +var mine = fixture + '/mine.cat' +var ours = fixture + '/ours.cat' +var fail = fixture + '/fail.false' +var noent = fixture + '/enoent.exe' +var mkdirp = require('mkdirp') +var rimraf = require('rimraf') + +var isWindows = process.platform === 'win32' +var hasAccess = typeof fs.access === 'function' +var winSkip = isWindows && 'windows' +var accessSkip = !hasAccess && 'no fs.access function' +var hasPromise = typeof Promise === 'function' +var promiseSkip = !hasPromise && 'no global Promise' + +function reset () { + delete require.cache[require.resolve('../')] + return require('../') +} + +t.test('setup fixtures', function (t) { + rimraf.sync(fixture) + mkdirp.sync(fixture) + fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') + fs.chmodSync(meow, parseInt('0755', 8)) + fs.writeFileSync(fail, '#!/usr/bin/env false\n') + fs.chmodSync(fail, parseInt('0644', 8)) + fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') + fs.chmodSync(mine, parseInt('0744', 8)) + fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') + fs.chmodSync(ours, parseInt('0754', 8)) + t.end() +}) + +t.test('promise', { skip: promiseSkip }, function (t) { + var isexe = reset() + t.test('meow async', function (t) { + isexe(meow).then(function (is) { + t.ok(is) + t.end() + }) + }) + t.test('fail async', function (t) { + isexe(fail).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.test('noent async', function (t) { + isexe(noent).catch(function (er) { + t.ok(er) + t.end() + }) + }) + t.test('noent ignore async', function (t) { + isexe(noent, { ignoreErrors: true }).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.end() +}) + +t.test('no promise', function (t) { + global.Promise = null + var isexe = reset() + t.throws('try to meow a promise', function () { + isexe(meow) + }) + t.end() +}) + +t.test('access', { skip: accessSkip || winSkip }, function (t) { + runTest(t) +}) + +t.test('mode', { skip: winSkip }, function (t) { + delete fs.access + delete fs.accessSync + var isexe = reset() + t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) + t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) + runTest(t) +}) + +t.test('windows', function (t) { + global.TESTING_WINDOWS = true + var pathExt = '.EXE;.CAT;.CMD;.COM' + t.test('pathExt option', function (t) { + runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) + }) + t.test('pathExt env', function (t) { + process.env.PATHEXT = pathExt + runTest(t) + }) + t.test('no pathExt', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: '', skipFail: true }) + }) + t.test('pathext with empty entry', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: ';' + pathExt, skipFail: true }) + }) + t.end() +}) + +t.test('cleanup', function (t) { + rimraf.sync(fixture) + t.end() +}) + +function runTest (t, options) { + var isexe = reset() + + var optionsIgnore = Object.create(options || {}) + optionsIgnore.ignoreErrors = true + + if (!options || !options.skipFail) { + t.notOk(isexe.sync(fail, options)) + } + t.notOk(isexe.sync(noent, optionsIgnore)) + if (!options) { + t.ok(isexe.sync(meow)) + } else { + t.ok(isexe.sync(meow, options)) + } + + t.ok(isexe.sync(mine, options)) + t.ok(isexe.sync(ours, options)) + t.throws(function () { + isexe.sync(noent, options) + }) + + t.test('meow async', function (t) { + if (!options) { + isexe(meow, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } else { + isexe(meow, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } + }) + + t.test('mine async', function (t) { + isexe(mine, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + t.test('ours async', function (t) { + isexe(ours, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + if (!options || !options.skipFail) { + t.test('fail async', function (t) { + isexe(fail, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + } + + t.test('noent async', function (t) { + isexe(noent, options, function (er, is) { + t.ok(er) + t.notOk(is) + t.end() + }) + }) + + t.test('noent ignore async', function (t) { + isexe(noent, optionsIgnore, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.test('directory is not executable', function (t) { + isexe(__dirname, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.end() +} diff --git a/node_modules/isexe/windows.js b/node_modules/isexe/windows.js new file mode 100644 index 0000000000..34996734d8 --- /dev/null +++ b/node_modules/isexe/windows.js @@ -0,0 +1,42 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} diff --git a/node_modules/jackspeak/LICENSE.md b/node_modules/jackspeak/LICENSE.md new file mode 100644 index 0000000000..8cb5cc6e61 --- /dev/null +++ b/node_modules/jackspeak/LICENSE.md @@ -0,0 +1,55 @@ +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +**_As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim._** diff --git a/node_modules/jackspeak/README.md b/node_modules/jackspeak/README.md new file mode 100644 index 0000000000..4ffea4b321 --- /dev/null +++ b/node_modules/jackspeak/README.md @@ -0,0 +1,357 @@ +# jackspeak + +A very strict and proper argument parser. + +Validate string, boolean, and number options, from the command +line and the environment. + +Call the `jack` method with a config object, and then chain +methods off of it. + +At the end, call the `.parse()` method, and you'll get an object +with `positionals` and `values` members. + +Any unrecognized configs or invalid values will throw an error. + +As long as you define configs using object literals, types will +be properly inferred and TypeScript will know what kinds of +things you got. + +If you give it a prefix for environment variables, then defaults +will be read from the environment, and parsed values written back +to it, so you can easily pass configs through to child processes. + +Automatically generates a `usage`/`help` banner by calling the +`.usage()` method. + +Unless otherwise noted, all methods return the object itself. + +## USAGE + +```js +import { jack } from 'jackspeak' +// this works too: +// const { jack } = require('jackspeak') + +const { positionals, values } = jack({ envPrefix: 'FOO' }) + .flag({ + asdf: { description: 'sets the asfd flag', short: 'a', default: true }, + 'no-asdf': { description: 'unsets the asdf flag', short: 'A' }, + foo: { description: 'another boolean', short: 'f' }, + }) + .optList({ + 'ip-addrs': { + description: 'addresses to ip things', + delim: ',', // defaults to '\n' + default: ['127.0.0.1'], + }, + }) + .parse([ + 'some', + 'positional', + '--ip-addrs', + '192.168.0.1', + '--ip-addrs', + '1.1.1.1', + 'args', + '--foo', // sets the foo flag + '-A', // short for --no-asdf, sets asdf flag to false + ]) + +console.log(process.env.FOO_ASDF) // '0' +console.log(process.env.FOO_FOO) // '1' +console.log(values) // { +// 'ip-addrs': ['192.168.0.1', '1.1.1.1'], +// foo: true, +// asdf: false, +// } +console.log(process.env.FOO_IP_ADDRS) // '192.168.0.1,1.1.1.1' +console.log(positionals) // ['some', 'positional', 'args'] +``` + +## `jack(options: JackOptions = {}) => Jack` + +Returns a `Jack` object that can be used to chain and add +field definitions. The other methods (apart from `validate()`, +`parse()`, and `usage()` obviously) return the same Jack object, +updated with the new types, so they can be chained together as +shown in the code examples. + +Options: + +- `allowPositionals` Defaults to true. Set to `false` to not + allow any positional arguments. + +- `envPrefix` Set to a string to write configs to and read + configs from the environment. For example, if set to `MY_APP` + then the `foo-bar` config will default based on the value of + `env.MY_APP_FOO_BAR` and will write back to that when parsed. + + Boolean values are written as `'1'` and `'0'`, and will be + treated as `true` if they're `'1'` or false otherwise. + + Number values are written with their `toString()` + representation. + + Strings are just strings. + + Any value with `multiple: true` will be represented in the + environment split by a delimiter, which defaults to `\n`. + +- `env` The place to read/write environment variables. Defaults + to `process.env`. + +- `usage` A short usage string to print at the top of the help + banner. + +- `stopAtPositional` Boolean, default false. Stop parsing opts + and flags at the first positional argument. This is useful if + you want to pass certain options to subcommands, like some + programs do, so you can stop parsing and pass the positionals + to the subcommand to parse. + +- `stopAtPositionalTest` Conditional `stopAtPositional`. Provide + a function that takes a positional argument string and returns + boolean. If it returns `true`, then parsing will stop. Useful + when _some_ subcommands should parse the rest of the command + line options, and others should not. + +### `Jack.heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6)` + +Define a short string heading, used in the `usage()` output. + +Indentation of the heading and subsequent description/config +usage entries (up until the next heading) is set by the heading +level. + +If the first usage item defined is a heading, it is always +treated as level 1, regardless of the argument provided. + +Headings level 1 and 2 will have a line of padding underneath +them. Headings level 3 through 6 will not. + +### `Jack.description(text: string, { pre?: boolean } = {})` + +Define a long string description, used in the `usage()` output. + +If the `pre` option is set to `true`, then whitespace will not be +normalized. However, if any line is too long for the width +allotted, it will still be wrapped. + +## Option Definitions + +Configs are defined by calling the appropriate field definition +method with an object where the keys are the long option name, +and the value defines the config. + +Options: + +- `type` Only needed for the `addFields` method, as the others + set it implicitly. Can be `'string'`, `'boolean'`, or + `'number'`. +- `multiple` Only needed for the `addFields` method, as the + others set it implicitly. Set to `true` to define an array + type. This means that it can be set on the CLI multiple times, + set as an array in the `values` + and it is represented in the environment as a delimited string. +- `short` A one-character shorthand for the option. +- `description` Some words to describe what this option is and + why you'd set it. +- `hint` (Only relevant for non-boolean types) The thing to show + in the usage output, like `--option=` +- `validate` A function that returns false (or throws) if an + option value is invalid. +- `validOptions` An array of strings or numbers that define the + valid values that can be set. This is not allowed on `boolean` + (flag) options. May be used along with a `validate()` method. +- `default` A default value for the field. Note that this may be + overridden by an environment variable, if present. + +### `Jack.flag({ [option: string]: definition, ... })` + +Define one or more boolean fields. + +Boolean options may be set to `false` by using a +`--no-${optionName}` argument, which will be implicitly created +if it's not defined to be something else. + +If a boolean option named `no-${optionName}` with the same +`multiple` setting is in the configuration, then that will be +treated as a negating flag. + +### `Jack.flagList({ [option: string]: definition, ... })` + +Define one or more boolean array fields. + +### `Jack.num({ [option: string]: definition, ... })` + +Define one or more number fields. These will be set in the +environment as a stringified number, and included in the `values` +object as a number. + +### `Jack.numList({ [option: string]: definition, ... })` + +Define one or more number list fields. These will be set in the +environment as a delimited set of stringified numbers, and +included in the `values` as a number array. + +### `Jack.opt({ [option: string]: definition, ... })` + +Define one or more string option fields. + +### `Jack.optList({ [option: string]: definition, ... })` + +Define one or more string list fields. + +### `Jack.addFields({ [option: string]: definition, ... })` + +Define one or more fields of any type. Note that `type` and +`multiple` must be set explicitly on each definition when using +this method. + +## Actions + +Use these methods on a Jack object that's already had its config +fields defined. + +### `Jack.parse(args: string[] = process.argv): { positionals: string[], values: OptionsResults }` + +Parse the arguments list, write to the environment if `envPrefix` +is set, and returned the parsed values and remaining positional +arguments. + +### `Jack.validate(o: any): asserts o is OptionsResults` + +Throws an error if the object provided is not a valid result set, +for the configurations defined thusfar. + +### `Jack.usage(): string` + +Returns the compiled `usage` string, with all option descriptions +and heading/description text, wrapped to the appropriate width +for the terminal. + +### `Jack.setConfigValues(options: OptionsResults, src?: string)` + +Validate the `options` argument, and set the default value for +each field that appears in the options. + +Values provided will be overridden by environment variables or +command line arguments. + +### `Jack.usageMarkdown(): string` + +Returns the compiled `usage` string, with all option descriptions +and heading/description text, but as markdown instead of +formatted for a terminal, for generating HTML documentation for +your CLI. + +## Some Example Code + +Also see [the examples +folder](https://github.com/isaacs/jackspeak/tree/master/examples) + +```js +import { jack } from 'jackspeak' + +const j = jack({ + // Optional + // This will be auto-generated from the descriptions if not supplied + // top level usage line, printed by -h + // will be auto-generated if not specified + usage: 'foo [options] ', +}) + .heading('The best Foo that ever Fooed') + .description( + ` + Executes all the files and interprets their output as + TAP formatted test result data. + + To parse TAP data from stdin, specify "-" as a filename. + `, + ) + + // flags don't take a value, they're boolean on or off, and can be + // turned off by prefixing with `--no-` + // so this adds support for -b to mean --bail, or -B to mean --no-bail + .flag({ + flag: { + // specify a short value if you like. this must be a single char + short: 'f', + // description is optional as well. + description: `Make the flags wave`, + // default value for flags is 'false', unless you change it + default: true, + }, + 'no-flag': { + // you can can always negate a flag with `--no-flag` + // specifying a negate option will let you define a short + // single-char option for negation. + short: 'F', + description: `Do not wave the flags`, + }, + }) + + // Options that take a value are specified with `opt()` + .opt({ + reporter: { + short: 'R', + description: 'the style of report to display', + }, + }) + + // if you want a number, say so, and jackspeak will enforce it + .num({ + jobs: { + short: 'j', + description: 'how many jobs to run in parallel', + default: 1, + }, + }) + + // A list is an option that can be specified multiple times, + // to expand into an array of all the settings. Normal opts + // will just give you the last value specified. + .optList({ + 'node-arg': {}, + }) + + // a flagList is an array of booleans, so `-ddd` is [true, true, true] + // count the `true` values to treat it as a counter. + .flagList({ + debug: { short: 'd' }, + }) + + // opts take a value, and is set to the string in the results + // you can combine multiple short-form flags together, but + // an opt will end the combine chain, posix-style. So, + // -bofilename would be like --bail --output-file=filename + .opt({ + 'output-file': { + short: 'o', + // optional: make it -o in the help output insead of -o + hint: 'file', + description: `Send the raw output to the specified file.`, + }, + }) + +// now we can parse argv like this: +const { values, positionals } = j.parse(process.argv) + +// or decide to show the usage banner +console.log(j.usage()) + +// or validate an object config we got from somewhere else +try { + j.validate(someConfig) +} catch (er) { + console.error('someConfig is not valid!', er) +} +``` + +## Name + +The inspiration for this module is [yargs](http://npm.im/yargs), which +is pirate talk themed. Yargs has all the features, and is infinitely +flexible. "Jackspeak" is the slang of the royal navy. This module +does not have all the features. It is declarative and rigid by design. diff --git a/node_modules/jackspeak/package.json b/node_modules/jackspeak/package.json new file mode 100644 index 0000000000..51eaabdf35 --- /dev/null +++ b/node_modules/jackspeak/package.json @@ -0,0 +1,95 @@ +{ + "name": "jackspeak", + "publishConfig": { + "tag": "v3-legacy" + }, + "version": "3.4.3", + "description": "A very strict and proper argument parser.", + "tshy": { + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.js" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "type": "module", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "build-examples": "for i in examples/*.js ; do node $i -h > ${i/.js/.txt}; done", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "license": "BlueOak-1.0.0", + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/node": "^20.7.0", + "@types/pkgjs__parseargs": "^0.10.1", + "prettier": "^3.2.5", + "tap": "^18.8.0", + "tshy": "^1.14.0", + "typedoc": "^0.25.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/jackspeak.git" + }, + "keywords": [ + "argument", + "parser", + "args", + "option", + "flag", + "cli", + "command", + "line", + "parse", + "parsing" + ], + "author": "Isaac Z. Schlueter ", + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } +} diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 0000000000..ff2375e055 --- /dev/null +++ b/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,616 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [4.1.0] - 2021-04-15 +### Added +- Types are now exported as `yaml.types.XXX`. +- Every type now has `options` property with original arguments kept as they were + (see `yaml.types.int.options` as an example). + +### Changed +- `Schema.extend()` now keeps old type order in case of conflicts + (e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`). + + +## [4.0.0] - 2021-01-03 +### Changed +- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes. +- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are + moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package. +- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump` + instead which are all now safe by default. +- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use + `yaml.DEFAULT_SCHEMA` instead. +- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead. +- `!!binary` now always mapped to `Uint8Array` on load. +- Reduced nesting of `/lib` folder. +- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal, + `0o1234` is octal, `1:23` is parsed as string instead of base60). +- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557. +- Line and column in exceptions are now formatted as `(X:Y)` instead of + `at line X, column Y` (also present in compact format), #332. +- Code snippet created in exceptions now contains multiple lines with line numbers. +- `dump()` now serializes `undefined` as `null` in collections and removes keys with + `undefined` in mappings, #571. +- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null. +- Custom tags starting with `!` are now dumped as `!tag` instead of `!`, #576. +- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258. + +### Added +- Added `.mjs` (es modules) support. +- Added `quotingType` and `forceQuotes` options for dumper to configure + string literal style, #290, #529. +- Added `styles: { '!!null': 'empty' }` option for dumper + (serializes `{ foo: null }` as "`foo: `"), #570. +- Added `replacer` option (similar to option in JSON.stringify), #339. +- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385. + +### Fixed +- Astral characters are no longer encoded by `dump()`, #587. +- "duplicate mapping key" exception now points at the correct column, #452. +- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception + instead of producing null, #321. +- `__proto__` key no longer overrides object prototype, #164. +- Removed `bower.json`. +- Tags are now url-decoded in `load()` and url-encoded in `dump()` + (previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed). +- Anchors now work correctly with empty nodes, #301. +- Fix incorrect parsing of invalid block mapping syntax, #418. +- Throw an error if block sequence/mapping indent contains a tab, #80. + + +## [3.14.1] - 2020-12-07 +### Security +- Fix possible code execution in (already unsafe) `.load()` (in &anchor). + + +## [3.14.0] - 2020-05-22 +### Changed +- Support `safe/loadAll(input, options)` variant of call. +- CI: drop outdated nodejs versions. +- Dev deps bump. + +### Fixed +- Quote `=` in plain scalars #519. +- Check the node type for `!` tag in case user manually specifies it. +- Verify that there are no null-bytes in input. +- Fix wrong quote position when writing condensed flow, #526. + + +## [3.13.1] - 2019-04-05 +### Security +- Fix possible code execution in (already unsafe) `.load()`, #480. + + +## [3.13.0] - 2019-03-20 +### Security +- Security fix: `safeLoad()` can hang when arrays with nested refs + used as key. Now throws exception for nested arrays. #475. + + +## [3.12.2] - 2019-02-26 +### Fixed +- Fix `noArrayIndent` option for root level, #468. + + +## [3.12.1] - 2019-01-05 +### Added +- Added `noArrayIndent` option, #432. + + +## [3.12.0] - 2018-06-02 +### Changed +- Support arrow functions without a block statement, #421. + + +## [3.11.0] - 2018-03-05 +### Added +- Add arrow functions suport for `!!js/function`. + +### Fixed +- Fix dump in bin/octal/hex formats for negative integers, #399. + + +## [3.10.0] - 2017-09-10 +### Fixed +- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. +- Dump astrals as codepoints instead of surrogate pair, #368. + + +## [3.9.1] - 2017-07-08 +### Fixed +- Ensure stack is present for custom errors in node 7.+, #351. + + +## [3.9.0] - 2017-07-08 +### Added +- Add `condenseFlow` option (to create pretty URL query params), #346. + +### Fixed +- Support array return from safeLoadAll/loadAll, #350. + + +## [3.8.4] - 2017-05-08 +### Fixed +- Dumper: prevent space after dash for arrays that wrap, #343. + + +## [3.8.3] - 2017-04-05 +### Fixed +- Should not allow numbers to begin and end with underscore, #335. + + +## [3.8.2] - 2017-03-02 +### Fixed +- Fix `!!float 123` (integers) parse, #333. +- Don't allow leading zeros in floats (except 0, 0.xxx). +- Allow positive exponent without sign in floats. + + +## [3.8.1] - 2017-02-07 +### Changed +- Maintenance: update browserified build. + + +## [3.8.0] - 2017-02-07 +### Fixed +- Fix reported position for `duplicated mapping key` errors. + Now points to block start instead of block end. + (#243, thanks to @shockey). + + +## [3.7.0] - 2016-11-12 +### Added +- Support polymorphism for tags (#300, thanks to @monken). + +### Fixed +- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). + + +## [3.6.1] - 2016-05-11 +### Fixed +- Fix output cut on a pipe, #286. + + +## [3.6.0] - 2016-04-16 +### Fixed +- Dumper rewrite, fix multiple bugs with trailing `\n`. + Big thanks to @aepsilon! +- Loader: fix leading/trailing newlines in block scalars, @aepsilon. + + +## [3.5.5] - 2016-03-17 +### Fixed +- Date parse fix: don't allow dates with on digit in month and day, #268. + + +## [3.5.4] - 2016-03-09 +### Added +- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. + + +## [3.5.3] - 2016-02-11 +### Changed +- Maintenance release. + + +## [3.5.2] - 2016-01-11 +### Changed +- Maintenance: missed comma in bower config. + + +## [3.5.1] - 2016-01-11 +### Changed +- Removed `inherit` dependency, #239. +- Better browserify workaround for esprima load. +- Demo rewrite. + + +## [3.5.0] - 2016-01-10 +### Fixed +- Dumper. Fold strings only, #217. +- Dumper. `norefs` option, to clone linked objects, #229. +- Loader. Throw a warning for duplicate keys, #166. +- Improved browserify support (mark `esprima` & `Buffer` excluded). + + +## [3.4.6] - 2015-11-26 +### Changed +- Use standalone `inherit` to keep browserified files clear. + + +## [3.4.5] - 2015-11-23 +### Added +- Added `lineWidth` option to dumper. + + +## [3.4.4] - 2015-11-21 +### Fixed +- Fixed floats dump (missed dot for scientific format), #220. +- Allow non-printable characters inside quoted scalars, #192. + + +## [3.4.3] - 2015-10-10 +### Changed +- Maintenance release - deps bump (esprima, argparse). + + +## [3.4.2] - 2015-09-09 +### Fixed +- Fixed serialization of duplicated entries in sequences, #205. + Thanks to @vogelsgesang. + + +## [3.4.1] - 2015-09-05 +### Fixed +- Fixed stacktrace handling in generated errors, for browsers (FF/IE). + + +## [3.4.0] - 2015-08-23 +### Changed +- Don't throw on warnings anymore. Use `onWarning` option to catch. +- Throw error on unknown tags (was warning before). +- Reworked internals of error class. + +### Fixed +- Fixed multiline keys dump, #197. Thanks to @tcr. +- Fixed heading line breaks in some scalars (regression). + + +## [3.3.1] - 2015-05-13 +### Added +- Added `.sortKeys` dumper option, thanks to @rjmunro. + +### Fixed +- Fixed astral characters support, #191. + + +## [3.3.0] - 2015-04-26 +### Changed +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +## [3.2.7] - 2015-02-19 +### Changed +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +## [3.2.6] - 2015-02-07 +### Fixed +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +## [3.2.5] - 2014-12-28 +### Fixed +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +## [3.2.4] - 2014-12-19 +### Fixed +- Fixed resolving of !!null tag on an empty node. + + +## [3.2.3] - 2014-11-08 +### Fixed +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +## [3.2.2] - 2014-09-07 +### Fixed +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +## [3.2.1] - 2014-08-24 +### Fixed +- Nothig new. Just fix npm publish error. + + +## [3.2.0] - 2014-08-24 +### Added +- Added input piping support to CLI. + +### Fixed +- Fixed typo, that could cause hand on initial indent (#139). + + +## [3.1.0] - 2014-07-07 +### Changed +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. + Others are not affected. +- Even if the input string has no trailing line break character, + it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +## [3.0.2] - 2014-02-27 +### Fixed +- Fixed bug: "constructor" string parsed as `null`. + + +## [3.0.1] - 2013-12-22 +### Fixed +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +## [3.0.0] - 2013-12-16 +### Changed +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended + behaviour for node. + + +## [2.1.3] - 2013-10-16 +### Fixed +- Fix wrong loading of empty block scalars. + + +## [2.1.2] - 2013-10-07 +### Fixed +- Fix unwanted line breaks in folded scalars. + + +## [2.1.1] - 2013-10-02 +### Fixed +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +## [2.1.0] - 2013-06-05 +### Added +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), + JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Add `skipInvalid` dumper option. + +### Changed +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` + and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Use `safeLoad` for `require` extension. + +### Fixed +- Bug fix: export `NIL` constant from the public interface. + + +## [2.0.5] - 2013-04-26 +### Security +- Close security issue in !!js/function constructor. + Big thanks to @nealpoole for security audit. + + +## [2.0.4] - 2013-04-08 +### Changed +- Updated .npmignore to reduce package size + + +## [2.0.3] - 2013-02-26 +### Fixed +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +## [2.0.2] - 2013-02-15 +### Fixed +- Fixed input validation: tabs are printable characters. + + +## [2.0.1] - 2013-02-09 +### Fixed +- Fixed error, when options not passed to function cass + + +## [2.0.0] - 2013-02-09 +### Changed +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +## [1.0.3] - 2012-11-05 +### Fixed +- Fixed utf-8 files loading. + + +## [1.0.2] - 2012-08-02 +### Fixed +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +## [1.0.1] - 2012-07-07 +### Fixed +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +## [1.0.0] - 2012-07-01 +### Changed +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. + Fixes #42. +- `require(filename)` now returns a single document and throws an Error if + file contains more than one document. +- CLI was merged back from js-yaml.bin + + +## [0.3.7] - 2012-02-28 +### Fixed +- Fix export of `addConstructor()`. Closes #39. + + +## [0.3.6] - 2012-02-22 +### Changed +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch + +### Fixed +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +## [0.3.5] - 2012-01-10 +### Fixed +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +## [0.3.4] - 2011-12-24 +### Fixed +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +## [0.3.3] - 2011-12-20 +### Added +- adds `compact` stringification of Errors. + +### Changed +- jsyaml executable moved to separate module. + + +## [0.3.2] - 2011-12-16 +### Added +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + +### Fixed +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. + + +## [0.3.1] - 2011-11-18 +### Added +- Added AMD support for browserified version. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. + +### Changed +- Wrapped browserified js-yaml into closure. + +### Fixed +- Fixed the resolvement of non-specific tags. Closes #17. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +## [0.3.0] - 2011-11-09 +### Added +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. + +### Fixed +- Removed JS.Class dependency. Closes #3. +- Fixed timestamp bug when fraction was given. + + +## [0.2.2] - 2011-11-06 +### Fixed +- Fixed crash on docs without ---. Closes #8. +- Fixed multiline string parse +- Fixed tests/comments for using array as key + + +## [0.2.1] - 2011-11-02 +### Fixed +- Fixed short file read (<4k). Closes #9. + + +## [0.2.0] - 2011-11-02 +### Changed +- First public release + + +[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0 +[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0 +[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 +[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 +[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 +[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 +[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 +[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 +[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 +[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 +[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 +[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 +[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 +[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 +[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 +[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 +[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 +[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 +[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 +[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 +[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 +[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 +[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 +[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 +[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 +[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 +[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 +[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 +[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 +[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 +[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 +[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 +[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 +[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 +[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 +[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 +[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 +[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 +[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 +[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 +[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 +[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 +[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 +[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 +[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 +[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 +[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 +[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 +[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 +[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 +[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 +[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 +[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 +[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 +[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 +[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 +[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 +[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 +[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 +[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 +[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 +[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 +[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 +[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE new file mode 100644 index 0000000000..09d3a29e93 --- /dev/null +++ b/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/js-yaml/README.md b/node_modules/js-yaml/README.md new file mode 100644 index 0000000000..3cbc4bd2dd --- /dev/null +++ b/node_modules/js-yaml/README.md @@ -0,0 +1,246 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[![CI](https://github.com/nodeca/js-yaml/workflows/CI/badge.svg?branch=master)](https://github.com/nodeca/js-yaml/actions) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [examples](https://github.com/nodeca/js-yaml/tree/master/examples) +for more info. + +``` javascript +const yaml = require('js-yaml'); +const fs = require('fs'); + +// Get document, or throw exception on error +try { + const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### load (string [ , options ]) + +Parses `string` as single YAML document. Returns either a +plain object, a string, a number, `null` or `undefined`, or throws `YAMLException` on error. By default, does +not support regexps, functions and undefined. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### loadAll (string [, iterator] [, options ]) + +Same as `load()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +const yaml = require('js-yaml'); + +yaml.loadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### dump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` _(default: -1)_ - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. Set `-1` for unlimited width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older + yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. +- `quotingType` _(`'` or `"`, default: `'`)_ - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. +- `forceQuotes` _(default: `false`)_ - if `true`, all non-key strings will be quoted even if they normally don't need to. +- `replacer` - callback `function (key, value)` called recursively on each key/value in source object (see `replacer` docs for `JSON.stringify`). + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null + "canonical" -> "~" + "lowercase" => "null" + "uppercase" -> "NULL" + "camelcase" -> "Null" + +!!int + "binary" -> "0b1", "0b101010", "0b1110001111010" + "octal" -> "0o1", "0o52", "0o16172" + "decimal" => "1", "42", "7290" + "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool + "lowercase" => "true", "false" + "uppercase" -> "TRUE", "FALSE" + "camelcase" -> "True", "False" + +!!float + "lowercase" => ".nan", '.inf' + "uppercase" -> ".NAN", '.INF' + "camelcase" -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +dump(object, { + 'styles': { + '!!null': 'canonical' // dump null as ~ + }, + 'sortKeys': true // sort object keys +}); +``` + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScript types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +See [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) for +extra types. + + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +js-yaml for enterprise +---------------------- + +Available as part of the Tidelift Subscription + +The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/js-yaml/index.js b/node_modules/js-yaml/index.js new file mode 100644 index 0000000000..bcb7eba7ad --- /dev/null +++ b/node_modules/js-yaml/index.js @@ -0,0 +1,47 @@ +'use strict'; + + +var loader = require('./lib/loader'); +var dumper = require('./lib/dumper'); + + +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} + + +module.exports.Type = require('./lib/type'); +module.exports.Schema = require('./lib/schema'); +module.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./lib/schema/json'); +module.exports.CORE_SCHEMA = require('./lib/schema/core'); +module.exports.DEFAULT_SCHEMA = require('./lib/schema/default'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.dump = dumper.dump; +module.exports.YAMLException = require('./lib/exception'); + +// Re-export all types in case user wants to create custom schema +module.exports.types = { + binary: require('./lib/type/binary'), + float: require('./lib/type/float'), + map: require('./lib/type/map'), + null: require('./lib/type/null'), + pairs: require('./lib/type/pairs'), + set: require('./lib/type/set'), + timestamp: require('./lib/type/timestamp'), + bool: require('./lib/type/bool'), + int: require('./lib/type/int'), + merge: require('./lib/type/merge'), + omap: require('./lib/type/omap'), + seq: require('./lib/type/seq'), + str: require('./lib/type/str') +}; + +// Removed functions from JS-YAML 3.0.x +module.exports.safeLoad = renamed('safeLoad', 'load'); +module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); +module.exports.safeDump = renamed('safeDump', 'dump'); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json new file mode 100644 index 0000000000..17574da805 --- /dev/null +++ b/node_modules/js-yaml/package.json @@ -0,0 +1,66 @@ +{ + "name": "js-yaml", + "version": "4.1.0", + "description": "YAML 1.2 parser and serializer", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "author": "Vladimir Zapparov ", + "contributors": [ + "Aleksey V Zapparov (http://www.ixti.net/)", + "Vitaly Puzrin (https://github.com/puzrin)", + "Martin Grenfell (http://got-ravings.blogspot.com)" + ], + "license": "MIT", + "repository": "nodeca/js-yaml", + "files": [ + "index.js", + "lib/", + "bin/", + "dist/" + ], + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "module": "./dist/js-yaml.mjs", + "exports": { + ".": { + "import": "./dist/js-yaml.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "lint": "eslint .", + "test": "npm run lint && mocha", + "coverage": "npm run lint && nyc mocha && nyc report --reporter html", + "demo": "npm run lint && node support/build_demo.js", + "gh-demo": "npm run demo && gh-pages -d demo -f", + "browserify": "rollup -c support/rollup.config.js", + "prepublishOnly": "npm run gh-demo" + }, + "unpkg": "dist/js-yaml.min.js", + "jsdelivr": "dist/js-yaml.min.js", + "dependencies": { + "argparse": "^2.0.1" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^2.8.0", + "gh-pages": "^3.1.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "rollup": "^2.34.1", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-terser": "^7.0.2", + "shelljs": "^0.8.4" + } +} diff --git a/node_modules/jsonc-parser/CHANGELOG.md b/node_modules/jsonc-parser/CHANGELOG.md new file mode 100644 index 0000000000..3414a3f1ff --- /dev/null +++ b/node_modules/jsonc-parser/CHANGELOG.md @@ -0,0 +1,76 @@ +3.3.0 2022-06-24 +================= +- `JSONVisitor.onObjectBegin` and `JSONVisitor.onArrayBegin` can now return `false` to instruct the visitor that no children should be visited. + + +3.2.0 2022-08-30 +================= +- update the version of the bundled Javascript files to `es2020`. +- include all `const enum` values in the bundled JavaScript files (`ScanError`, `SyntaxKind`, `ParseErrorCode`). + +3.1.0 2022-07-07 +================== + * added new API `FormattingOptions.keepLines` : It leaves the initial line positions in the formatting. + +3.0.0 2020-11-13 +================== + * fixed API spec for `parseTree`. Can return `undefine` for empty input. + * added new API `FormattingOptions.insertFinalNewline`. + + +2.3.0 2020-07-03 +================== + * new API `ModificationOptions.isArrayInsertion`: If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then `modify` will insert a new item at that location instead of overwriting its contents. + * `ModificationOptions.formattingOptions` is now optional. If not set, newly inserted content will not be formatted. + + +2.2.0 2019-10-25 +================== + * added `ParseOptions.allowEmptyContent`. Default is `false`. + * new API `getNodeType`: Returns the type of a value returned by parse. + * `parse`: Fix issue with empty property name + +2.1.0 2019-03-29 +================== + * `JSONScanner` and `JSONVisitor` return lineNumber / character. + +2.0.0 2018-04-12 +================== + * renamed `Node.columnOffset` to `Node.colonOffset` + * new API `getNodePath`: Gets the JSON path of the given JSON DOM node + * new API `findNodeAtOffset`: Finds the most inner node at the given offset. If `includeRightBound` is set, also finds nodes that end at the given offset. + +1.0.3 2018-03-07 +================== + * provide ems modules + +1.0.2 2018-03-05 +================== + * added the `visit.onComment` API, reported when comments are allowed. + * added the `ParseErrorCode.InvalidCommentToken` enum value, reported when comments are disallowed. + +1.0.1 +================== + * added the `format` API: computes edits to format a JSON document. + * added the `modify` API: computes edits to insert, remove or replace a property or value in a JSON document. + * added the `allyEdits` API: applies edits to a document + +1.0.0 +================== + * remove nls dependency (remove `getParseErrorMessage`) + +0.4.2 / 2017-05-05 +================== + * added `ParseError.offset` & `ParseError.length` + +0.4.1 / 2017-04-02 +================== + * added `ParseOptions.allowTrailingComma` + +0.4.0 / 2017-02-23 +================== + * fix for `getLocation`. Now `getLocation` inside an object will always return a property from inside that property. Can be empty string if the object has no properties or if the offset is before a actual property `{ "a": { | }} will return location ['a', ' ']` + +0.3.0 / 2017-01-17 +================== + * Updating to typescript 2.0 \ No newline at end of file diff --git a/node_modules/jsonc-parser/LICENSE.md b/node_modules/jsonc-parser/LICENSE.md new file mode 100644 index 0000000000..1c65de1db3 --- /dev/null +++ b/node_modules/jsonc-parser/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/jsonc-parser/README.md b/node_modules/jsonc-parser/README.md new file mode 100644 index 0000000000..d569b7064f --- /dev/null +++ b/node_modules/jsonc-parser/README.md @@ -0,0 +1,364 @@ +# jsonc-parser +Scanner and parser for JSON with comments. + +[![npm Package](https://img.shields.io/npm/v/jsonc-parser.svg?style=flat-square)](https://www.npmjs.org/package/jsonc-parser) +[![NPM Downloads](https://img.shields.io/npm/dm/jsonc-parser.svg)](https://npmjs.org/package/jsonc-parser) +[![Build Status](https://github.com/microsoft/node-jsonc-parser/workflows/Tests/badge.svg)](https://github.com/microsoft/node-jsonc-parser/workflows/Tests) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +Why? +---- +JSONC is JSON with JavaScript style comments. This node module provides a scanner and fault tolerant parser that can process JSONC but is also useful for standard JSON. + - the *scanner* tokenizes the input string into tokens and token offsets + - the *visit* function implements a 'SAX' style parser with callbacks for the encountered properties and values. + - the *parseTree* function computes a hierarchical DOM with offsets representing the encountered properties and values. + - the *parse* function evaluates the JavaScript object represented by JSON string in a fault tolerant fashion. + - the *getLocation* API returns a location object that describes the property or value located at a given offset in a JSON document. + - the *findNodeAtLocation* API finds the node at a given location path in a JSON DOM. + - the *format* API computes edits to format a JSON document. + - the *modify* API computes edits to insert, remove or replace a property or value in a JSON document. + - the *applyEdits* API applies edits to a document. + +Installation +------------ + +``` +npm install --save jsonc-parser +``` + +API +--- + +### Scanner: +```typescript + +/** + * Creates a JSON scanner on the given text. + * If ignoreTrivia is set, whitespaces or comments are ignored. + */ +export function createScanner(text: string, ignoreTrivia: boolean = false): JSONScanner; + +/** + * The scanner object, representing a JSON scanner at a position in the input string. + */ +export interface JSONScanner { + /** + * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token. + */ + setPosition(pos: number): any; + /** + * Read the next token. Returns the token code. + */ + scan(): SyntaxKind; + /** + * Returns the zero-based current scan position, which is after the last read token. + */ + getPosition(): number; + /** + * Returns the last read token. + */ + getToken(): SyntaxKind; + /** + * Returns the last read token value. The value for strings is the decoded string content. For numbers it's of type number, for boolean it's true or false. + */ + getTokenValue(): string; + /** + * The zero-based start offset of the last read token. + */ + getTokenOffset(): number; + /** + * The length of the last read token. + */ + getTokenLength(): number; + /** + * The zero-based start line number of the last read token. + */ + getTokenStartLine(): number; + /** + * The zero-based start character (column) of the last read token. + */ + getTokenStartCharacter(): number; + /** + * An error code of the last scan. + */ + getTokenError(): ScanError; +} +``` + +### Parser: +```typescript + +export interface ParseOptions { + disallowComments?: boolean; + allowTrailingComma?: boolean; + allowEmptyContent?: boolean; +} +/** + * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. + * Therefore always check the errors list to find out if the input was valid. + */ +export declare function parse(text: string, errors?: {error: ParseErrorCode;}[], options?: ParseOptions): any; + +/** + * Parses the given text and invokes the visitor functions for each object, array and literal reached. + */ +export declare function visit(text: string, visitor: JSONVisitor, options?: ParseOptions): any; + +/** + * Visitor called by {@linkcode visit} when parsing JSON. + * + * The visitor functions have the following common parameters: + * - `offset`: Global offset within the JSON document, starting at 0 + * - `startLine`: Line number, starting at 0 + * - `startCharacter`: Start character (column) within the current line, starting at 0 + * + * Additionally some functions have a `pathSupplier` parameter which can be used to obtain the + * current `JSONPath` within the document. + */ +export interface JSONVisitor { + /** + * Invoked when an open brace is encountered and an object is started. The offset and length represent the location of the open brace. + * When `false` is returned, the array items will not be visited. + */ + onObjectBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; + + /** + * Invoked when a property is encountered. The offset and length represent the location of the property name. + * The `JSONPath` created by the `pathSupplier` refers to the enclosing JSON object, it does not include the + * property name yet. + */ + onObjectProperty?: (property: string, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; + /** + * Invoked when a closing brace is encountered and an object is completed. The offset and length represent the location of the closing brace. + */ + onObjectEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * Invoked when an open bracket is encountered. The offset and length represent the location of the open bracket. + * When `false` is returned, the array items will not be visited.* + */ + onArrayBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; + /** + * Invoked when a closing bracket is encountered. The offset and length represent the location of the closing bracket. + */ + onArrayEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * Invoked when a literal value is encountered. The offset and length represent the location of the literal value. + */ + onLiteralValue?: (value: any, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; + /** + * Invoked when a comma or colon separator is encountered. The offset and length represent the location of the separator. + */ + onSeparator?: (character: string, offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * When comments are allowed, invoked when a line or block comment is encountered. The offset and length represent the location of the comment. + */ + onComment?: (offset: number, length: number, startLine: number, startCharacter: number) => void; + /** + * Invoked on an error. + */ + onError?: (error: ParseErrorCode, offset: number, length: number, startLine: number, startCharacter: number) => void; +} + +/** + * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. + */ +export declare function parseTree(text: string, errors?: ParseError[], options?: ParseOptions): Node | undefined; + +export declare type NodeType = "object" | "array" | "property" | "string" | "number" | "boolean" | "null"; +export interface Node { + type: NodeType; + value?: any; + offset: number; + length: number; + colonOffset?: number; + parent?: Node; + children?: Node[]; +} + +``` + +### Utilities: +```typescript +/** + * Takes JSON with JavaScript-style comments and remove + * them. Optionally replaces every none-newline character + * of comments with a replaceCharacter + */ +export declare function stripComments(text: string, replaceCh?: string): string; + +/** + * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index. + */ +export declare function getLocation(text: string, position: number): Location; + +/** + * A {@linkcode JSONPath} segment. Either a string representing an object property name + * or a number (starting at 0) for array indices. + */ +export declare type Segment = string | number; +export declare type JSONPath = Segment[]; +export interface Location { + /** + * The previous property key or literal value (string, number, boolean or null) or undefined. + */ + previousNode?: Node; + /** + * The path describing the location in the JSON document. The path consists of a sequence strings + * representing an object property or numbers for array indices. + */ + path: JSONPath; + /** + * Matches the locations path against a pattern consisting of strings (for properties) and numbers (for array indices). + * '*' will match a single segment, of any property name or index. + * '**' will match a sequence of segments or no segment, of any property name or index. + */ + matches: (patterns: JSONPath) => boolean; + /** + * If set, the location's offset is at a property key. + */ + isAtPropertyKey: boolean; +} + +/** + * Finds the node at the given path in a JSON DOM. + */ +export function findNodeAtLocation(root: Node, path: JSONPath): Node | undefined; + +/** + * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset. + */ +export function findNodeAtOffset(root: Node, offset: number, includeRightBound?: boolean) : Node | undefined; + +/** + * Gets the JSON path of the given JSON DOM node + */ +export function getNodePath(node: Node): JSONPath; + +/** + * Evaluates the JavaScript object of the given JSON DOM node + */ +export function getNodeValue(node: Node): any; + +/** + * Computes the edit operations needed to format a JSON document. + * + * @param documentText The input text + * @param range The range to format or `undefined` to format the full content + * @param options The formatting options + * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}. + * To apply the edit operations to the input, use {@linkcode applyEdits}. + */ +export function format(documentText: string, range: Range, options: FormattingOptions): EditResult; + +/** + * Computes the edit operations needed to modify a value in the JSON document. + * + * @param documentText The input text + * @param path The path of the value to change. The path represents either to the document root, a property or an array item. + * If the path points to an non-existing property or item, it will be created. + * @param value The new value for the specified property or item. If the value is undefined, + * the property or item will be removed. + * @param options Options + * @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}. + * To apply the edit operations to the input, use {@linkcode applyEdits}. + */ +export function modify(text: string, path: JSONPath, value: any, options: ModificationOptions): EditResult; + +/** + * Applies edits to an input string. + * @param text The input text + * @param edits Edit operations following the format described in {@linkcode EditResult}. + * @returns The text with the applied edits. + * @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}. + */ +export function applyEdits(text: string, edits: EditResult): string; + +/** + * An edit result describes a textual edit operation. It is the result of a {@linkcode format} and {@linkcode modify} operation. + * It consist of one or more edits describing insertions, replacements or removals of text segments. + * * The offsets of the edits refer to the original state of the document. + * * No two edits change or remove the same range of text in the original document. + * * Multiple edits can have the same offset if they are multiple inserts, or an insert followed by a remove or replace. + * * The order in the array defines which edit is applied first. + * To apply an edit result use {@linkcode applyEdits}. + * In general multiple EditResults must not be concatenated because they might impact each other, producing incorrect or malformed JSON data. + */ +export type EditResult = Edit[]; + +/** + * Represents a text modification + */ +export interface Edit { + /** + * The start offset of the modification. + */ + offset: number; + /** + * The length of the modification. Must not be negative. Empty length represents an *insert*. + */ + length: number; + /** + * The new content. Empty content represents a *remove*. + */ + content: string; +} + +/** + * A text range in the document +*/ +export interface Range { + /** + * The start offset of the range. + */ + offset: number; + /** + * The length of the range. Must not be negative. + */ + length: number; +} + +/** + * Options used by {@linkcode format} when computing the formatting edit operations + */ +export interface FormattingOptions { + /** + * If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent? + */ + tabSize: number; + /** + * Is indentation based on spaces? + */ + insertSpaces: boolean; + /** + * The default 'end of line' character + */ + eol: string; +} + +/** + * Options used by {@linkcode modify} when computing the modification edit operations + */ +export interface ModificationOptions { + /** + * Formatting options. If undefined, the newly inserted code will be inserted unformatted. + */ + formattingOptions?: FormattingOptions; + /** + * Default false. If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then + * {@linkcode modify} will insert a new item at that location instead of overwriting its contents. + */ + isArrayInsertion?: boolean; + /** + * Optional function to define the insertion index given an existing list of properties. + */ + getInsertionIndex?: (properties: string[]) => number; +} +``` + + +License +------- + +(MIT License) + +Copyright 2018, Microsoft diff --git a/node_modules/jsonc-parser/SECURITY.md b/node_modules/jsonc-parser/SECURITY.md new file mode 100644 index 0000000000..f7b89984f0 --- /dev/null +++ b/node_modules/jsonc-parser/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). + + \ No newline at end of file diff --git a/node_modules/jsonc-parser/package.json b/node_modules/jsonc-parser/package.json new file mode 100644 index 0000000000..6536a20b66 --- /dev/null +++ b/node_modules/jsonc-parser/package.json @@ -0,0 +1,37 @@ +{ + "name": "jsonc-parser", + "version": "3.3.1", + "description": "Scanner and parser for JSON with comments.", + "main": "./lib/umd/main.js", + "typings": "./lib/umd/main.d.ts", + "module": "./lib/esm/main.js", + "author": "Microsoft Corporation", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/node-jsonc-parser" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/microsoft/node-jsonc-parser/issues" + }, + "devDependencies": { + "@types/mocha": "^10.0.7", + "@types/node": "^18.x", + "@typescript-eslint/eslint-plugin": "^7.13.1", + "@typescript-eslint/parser": "^7.13.1", + "eslint": "^8.57.0", + "mocha": "^10.4.0", + "rimraf": "^5.0.7", + "typescript": "^5.4.2" + }, + "scripts": { + "prepack": "npm run clean && npm run compile-esm && npm run test && npm run remove-sourcemap-refs", + "compile": "tsc -p ./src && npm run lint", + "compile-esm": "tsc -p ./src/tsconfig.esm.json", + "remove-sourcemap-refs": "node ./build/remove-sourcemap-refs.js", + "clean": "rimraf lib", + "watch": "tsc -w -p ./src", + "test": "npm run compile && mocha ./lib/umd/test", + "lint": "eslint src/**/*.ts" + } +} diff --git a/node_modules/jsonpointer/LICENSE.md b/node_modules/jsonpointer/LICENSE.md new file mode 100644 index 0000000000..ac32f5dfdd --- /dev/null +++ b/node_modules/jsonpointer/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/jsonpointer/README.md b/node_modules/jsonpointer/README.md new file mode 100644 index 0000000000..81c1c3960d --- /dev/null +++ b/node_modules/jsonpointer/README.md @@ -0,0 +1,45 @@ +# JSON Pointer for Node.js + +This is an implementation of [JSON Pointer](https://tools.ietf.org/html/rfc6901). + +## CLI + +Looking to filter JSON from the command line? Check out [jsonpointer-cli](https://github.com/joeyespo/jsonpointer-cli). + +## Usage +```javascript +var jsonpointer = require('jsonpointer'); +var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]}; + +jsonpointer.get(obj, '/foo'); // returns 1 +jsonpointer.get(obj, '/bar/baz'); // returns 2 +jsonpointer.get(obj, '/qux/0'); // returns 3 +jsonpointer.get(obj, '/qux/1'); // returns 4 +jsonpointer.get(obj, '/qux/2'); // returns 5 +jsonpointer.get(obj, '/quo'); // returns undefined + +jsonpointer.set(obj, '/foo', 6); // sets obj.foo = 6; +jsonpointer.set(obj, '/qux/-', 6) // sets obj.qux = [3, 4, 5, 6] + +var pointer = jsonpointer.compile('/foo') +pointer.get(obj) // returns 1 +pointer.set(obj, 1) // sets obj.foo = 1 +``` + +## Testing + + $ npm test + All tests pass. + $ + +[![Node.js CI](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml/badge.svg)](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml) + +## Author + +(c) 2011-2021 Jan Lehnardt & Marc Bachmann + +Thanks to all contributors. + +## License + +MIT License. diff --git a/node_modules/jsonpointer/jsonpointer.d.ts b/node_modules/jsonpointer/jsonpointer.d.ts new file mode 100644 index 0000000000..705bebca0a --- /dev/null +++ b/node_modules/jsonpointer/jsonpointer.d.ts @@ -0,0 +1,35 @@ +interface JSONPointer { + /** + * Looks up a JSON pointer in an object + */ + get(object: Object): any; + + + /** + * Set a value for a JSON pointer on object + */ + set(object: Object, value: any): void; +} + + +declare namespace JSONPointer { + /** + * Looks up a JSON pointer in an object + */ + function get(object: Object, pointer: string): any; + + + /** + * Set a value for a JSON pointer on object + */ + function set(object: Object, pointer: string, value: any): void; + + + /** + * Builds a JSONPointer instance from a pointer value. + */ + function compile(pointer: string): JSONPointer; +} + + +export = JSONPointer; diff --git a/node_modules/jsonpointer/jsonpointer.js b/node_modules/jsonpointer/jsonpointer.js new file mode 100644 index 0000000000..dad907d763 --- /dev/null +++ b/node_modules/jsonpointer/jsonpointer.js @@ -0,0 +1,100 @@ +var hasExcape = /~/ +var escapeMatcher = /~[01]/g +function escapeReplacer (m) { + switch (m) { + case '~1': return '/' + case '~0': return '~' + } + throw new Error('Invalid tilde escape: ' + m) +} + +function untilde (str) { + if (!hasExcape.test(str)) return str + return str.replace(escapeMatcher, escapeReplacer) +} + +function setter (obj, pointer, value) { + var part + var hasNextPart + + for (var p = 1, len = pointer.length; p < len;) { + if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj + + part = untilde(pointer[p++]) + hasNextPart = len > p + + if (typeof obj[part] === 'undefined') { + // support setting of /- + if (Array.isArray(obj) && part === '-') { + part = obj.length + } + + // support nested objects/array when setting values + if (hasNextPart) { + if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] + else obj[part] = {} + } + } + + if (!hasNextPart) break + obj = obj[part] + } + + var oldValue = obj[part] + if (value === undefined) delete obj[part] + else obj[part] = value + return oldValue +} + +function compilePointer (pointer) { + if (typeof pointer === 'string') { + pointer = pointer.split('/') + if (pointer[0] === '') return pointer + throw new Error('Invalid JSON pointer.') + } else if (Array.isArray(pointer)) { + for (const part of pointer) { + if (typeof part !== 'string' && typeof part !== 'number') { + throw new Error('Invalid JSON pointer. Must be of type string or number.') + } + } + return pointer + } + + throw new Error('Invalid JSON pointer.') +} + +function get (obj, pointer) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + var len = pointer.length + if (len === 1) return obj + + for (var p = 1; p < len;) { + obj = obj[untilde(pointer[p++])] + if (len === p) return obj + if (typeof obj !== 'object' || obj === null) return undefined + } +} + +function set (obj, pointer, value) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') + return setter(obj, pointer, value) +} + +function compile (pointer) { + var compiled = compilePointer(pointer) + return { + get: function (object) { + return get(object, compiled) + }, + set: function (object, value) { + return set(object, compiled, value) + } + } +} + +exports.get = get +exports.set = set +exports.compile = compile diff --git a/node_modules/jsonpointer/package.json b/node_modules/jsonpointer/package.json new file mode 100644 index 0000000000..a832ba9fc4 --- /dev/null +++ b/node_modules/jsonpointer/package.json @@ -0,0 +1,48 @@ +{ + "name": "jsonpointer", + "description": "Simple JSON Addressing.", + "tags": [ + "util", + "simple", + "util", + "utility" + ], + "version": "5.0.1", + "author": "Jan Lehnardt ", + "contributors": [ + "Joe Hildebrand ", + "Marc Bachmann " + ], + "repository": { + "type": "git", + "url": "https://github.com/janl/node-jsonpointer.git" + }, + "bugs": { + "url": "http://github.com/janl/node-jsonpointer/issues" + }, + "engines": { + "node": ">=0.10.0" + }, + "main": "./jsonpointer", + "typings": "jsonpointer.d.ts", + "files": [ + "jsonpointer.js", + "jsonpointer.d.ts" + ], + "scripts": { + "test": "npm run test:standard && npm run test:all", + "test:standard": "standard", + "test:all": "node test.js", + "semantic-release": "semantic-release pre && npm publish && semantic-release post" + }, + "license": "MIT", + "devDependencies": { + "semantic-release": "^18.0.0", + "standard": "^16.0.4" + }, + "standard": { + "ignore": [ + "test.js" + ] + } +} diff --git a/node_modules/katex/LICENSE b/node_modules/katex/LICENSE new file mode 100644 index 0000000000..37c6433e3b --- /dev/null +++ b/node_modules/katex/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2020 Khan Academy and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/katex/README.md b/node_modules/katex/README.md new file mode 100644 index 0000000000..09e86f575a --- /dev/null +++ b/node_modules/katex/README.md @@ -0,0 +1,125 @@ +

          + + + KaTeX + +

          + +[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) +[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) +[![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI) +[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/main/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) +[![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) +![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX) +[![Financial Contributors on Open Collective](https://opencollective.com/katex/all/badge.svg?label=financial+contributors)](https://opencollective.com/katex) + +KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. + + * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](https://www.intmath.com/cg5/katex-mathjax-comparison.php). + * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. + * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. + * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. + +KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 11. + +KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). + +Try out KaTeX [on the demo page](https://katex.org/#demo)! + +## Getting started + +### Starter template + +```html + + + + + + + + + + + + + ... + +``` + +You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. + +For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). + +### API + +Call `katex.render` to render a TeX expression directly into a DOM element. +For example: + +```js +katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { + throwOnError: false +}); +``` + +Call `katex.renderToString` to generate an HTML string of the rendered math, +e.g., for server-side rendering. For example: + +```js +var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { + throwOnError: false +}); +// '...' +``` + +Make sure to include the CSS and font files in both cases. +If you are doing all rendering on the server, there is no need to include the +JavaScript on the client. + +The examples above use the `throwOnError: false` option, which renders invalid +inputs as the TeX source code in red (by default), with the error message as +hover text. For other available options, see the +[API documentation](https://katex.org/docs/api.html), +[options documentation](https://katex.org/docs/options.html), and +[handling errors documentation](https://katex.org/docs/error.html). + +## Demo and Documentation + +Learn more about using KaTeX [on the website](https://katex.org)! + +## Contributors + +### Code Contributors + +This project exists thanks to all the people who contribute code. If you'd like to help, see [our guide to contributing code](CONTRIBUTING.md). +Code contributors + +### Financial Contributors + +Become a financial contributor and help us sustain our community. + +#### Individuals + +Contribute on Open Collective + +#### Organizations + +Support this project with your organization. Your logo will show up here with a link to your website. + +Organization 1 +Organization 2 +Organization 3 +Organization 4 +Organization 5 +Organization 6 +Organization 7 +Organization 8 +Organization 9 +Organization 10 + +## License + +KaTeX is licensed under the [MIT License](https://opensource.org/licenses/MIT). diff --git a/node_modules/katex/cli.js b/node_modules/katex/cli.js new file mode 100755 index 0000000000..20f6237b32 --- /dev/null +++ b/node_modules/katex/cli.js @@ -0,0 +1,112 @@ +#!/usr/bin/env node +// Simple CLI for KaTeX. +// Reads TeX from stdin, outputs HTML to stdout. +// To run this from the repository, you must first build KaTeX by running +// `yarn` and `yarn build`. + +/* eslint no-console:0 */ + +let katex; +try { + katex = require("./"); +} catch (e) { + console.error( + "KaTeX could not import, likely because dist/katex.js is missing."); + console.error("Please run 'yarn' and 'yarn build' before running"); + console.error("cli.js from the KaTeX repository."); + console.error(); + throw e; +} +const {version} = require("./package.json"); +const fs = require("fs"); + +const program = require("commander").version(version); +for (const prop in katex.SETTINGS_SCHEMA) { + if (katex.SETTINGS_SCHEMA.hasOwnProperty(prop)) { + const opt = katex.SETTINGS_SCHEMA[prop]; + if (opt.cli !== false) { + program.option(opt.cli || "--" + prop, opt.cliDescription || + opt.description, opt.cliProcessor, opt.cliDefault); + } + } +} +program.option("-f, --macro-file ", + "Read macro definitions, one per line, from the given file.") + .option("-i, --input ", "Read LaTeX input from the given file.") + .option("-o, --output ", "Write html output to the given file."); + +let options; + +function readMacros() { + if (options.macroFile) { + fs.readFile(options.macroFile, "utf-8", function(err, data) { + if (err) {throw err;} + splitMacros(data.toString().split('\n')); + }); + } else { + splitMacros([]); + } +} + +function splitMacros(macroStrings) { + // Override macros from macro file (if any) + // with macros from command line (if any) + macroStrings = macroStrings.concat(options.macro); + + const macros = {}; + + for (const m of macroStrings) { + const i = m.search(":"); + if (i !== -1) { + macros[m.substring(0, i).trim()] = m.substring(i + 1).trim(); + } + } + + options.macros = macros; + readInput(); +} + +function readInput() { + let input = ""; + + if (options.input) { + fs.readFile(options.input, "utf-8", function(err, data) { + if (err) {throw err;} + input = data.toString(); + writeOutput(input); + }); + } else { + process.stdin.on("data", function(chunk) { + input += chunk.toString(); + }); + + process.stdin.on("end", function() { + writeOutput(input); + }); + } +} + +function writeOutput(input) { + // --format specifies the KaTeX output + const outputFile = options.output; + options.output = options.format; + + const output = katex.renderToString(input, options) + "\n"; + + if (outputFile) { + fs.writeFile(outputFile, output, function(err) { + if (err) { + return console.log(err); + } + }); + } else { + console.log(output); + } +} + +if (require.main !== module) { + module.exports = program; +} else { + options = program.parse(process.argv).opts(); + readMacros(); +} diff --git a/node_modules/katex/contrib/auto-render/README.md b/node_modules/katex/contrib/auto-render/README.md new file mode 100644 index 0000000000..ea793f1c09 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/README.md @@ -0,0 +1,8 @@ +# Auto-render extension + +This is an extension to automatically render all of the math inside of text. It +searches all of the text nodes in a given element for the given delimiters, and +renders the math in place. + +See [Auto-render extension documentation](https://katex.org/docs/autorender.html) +for more information. diff --git a/node_modules/katex/contrib/auto-render/auto-render.js b/node_modules/katex/contrib/auto-render/auto-render.js new file mode 100644 index 0000000000..eceee5b980 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/auto-render.js @@ -0,0 +1,142 @@ +/* eslint no-console:0 */ + +import katex from "katex"; +import splitAtDelimiters from "./splitAtDelimiters"; + +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ +const renderMathInText = function(text, optionsCopy) { + const data = splitAtDelimiters(text, optionsCopy.delimiters); + if (data.length === 1 && data[0].type === 'text') { + // There is no formula in the text. + // Let's return null which means there is no need to replace + // the current text node with a new one. + return null; + } + + const fragment = document.createDocumentFragment(); + + for (let i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + const span = document.createElement("span"); + let math = data[i].data; + // Override any display mode defined in the settings with that + // defined by the text itself + optionsCopy.displayMode = data[i].display; + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + katex.render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof katex.ParseError)) { + throw e; + } + optionsCopy.errorCallback( + "KaTeX auto-render: Failed to parse `" + data[i].data + + "` with ", + e + ); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + fragment.appendChild(span); + } + } + + return fragment; +}; + +const renderElem = function(elem, optionsCopy) { + for (let i = 0; i < elem.childNodes.length; i++) { + const childNode = elem.childNodes[i]; + if (childNode.nodeType === 3) { + // Text node + // Concatenate all sibling text nodes. + // Webkit browsers split very large text nodes into smaller ones, + // so the delimiters may be split across different nodes. + let textContentConcat = childNode.textContent; + let sibling = childNode.nextSibling; + let nSiblings = 0; + while (sibling && (sibling.nodeType === Node.TEXT_NODE)) { + textContentConcat += sibling.textContent; + sibling = sibling.nextSibling; + nSiblings++; + } + const frag = renderMathInText(textContentConcat, optionsCopy); + if (frag) { + // Remove extra text nodes + for (let j = 0; j < nSiblings; j++) { + childNode.nextSibling.remove(); + } + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } else { + // If the concatenated text does not contain math + // the siblings will not either + i += nSiblings; + } + } else if (childNode.nodeType === 1) { + // Element node + const className = ' ' + childNode.className + ' '; + const shouldRender = optionsCopy.ignoredTags.indexOf( + childNode.nodeName.toLowerCase()) === -1 && + optionsCopy.ignoredClasses.every( + x => className.indexOf(' ' + x + ' ') === -1); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + } + // Otherwise, it's something else, and ignore it. + } +}; + +const renderMathInElement = function(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + const optionsCopy = {}; + + // Object.assign(optionsCopy, option) + for (const option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } + + // default options + optionsCopy.delimiters = optionsCopy.delimiters || [ + {left: "$$", right: "$$", display: true}, + {left: "\\(", right: "\\)", display: false}, + // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // $ must come after $$ + + // Render AMS environments even if outside $$…$$ delimiters. + {left: "\\begin{equation}", right: "\\end{equation}", display: true}, + {left: "\\begin{align}", right: "\\end{align}", display: true}, + {left: "\\begin{alignat}", right: "\\end{alignat}", display: true}, + {left: "\\begin{gather}", right: "\\end{gather}", display: true}, + {left: "\\begin{CD}", right: "\\end{CD}", display: true}, + + {left: "\\[", right: "\\]", display: true}, + ]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || [ + "script", "noscript", "style", "textarea", "pre", "code", "option", + ]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; + + // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + optionsCopy.macros = optionsCopy.macros || {}; + + renderElem(elem, optionsCopy); +}; + +export default renderMathInElement; diff --git a/node_modules/katex/contrib/auto-render/index.html b/node_modules/katex/contrib/auto-render/index.html new file mode 100644 index 0000000000..d0849b5c45 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/index.html @@ -0,0 +1,56 @@ + + + + + + Auto-render test + + + + + +
          + This is some text $math \frac12$ other text $\unsupported$ + + Other node \[ \text{displaymath} \frac{1}{2} \] blah $$ \int_2^3 $$ + + and some more text \(and math\) blah. And $math with a + \$ sign$. +
          +        Stuff in a $pre tag$
          +      
          +

          An AMS environment without $$…$$ delimiters.

          +

          \begin{equation} \begin{split} a &=b+c\\ &=e+f \end{split} \end{equation}

          +
          + + + diff --git a/node_modules/katex/contrib/auto-render/splitAtDelimiters.js b/node_modules/katex/contrib/auto-render/splitAtDelimiters.js new file mode 100644 index 0000000000..21b59030a5 --- /dev/null +++ b/node_modules/katex/contrib/auto-render/splitAtDelimiters.js @@ -0,0 +1,85 @@ +/* eslint no-constant-condition:0 */ +const findEndOfMath = function(delimiter, text, startIndex) { + // Adapted from + // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx + let index = startIndex; + let braceLevel = 0; + + const delimLength = delimiter.length; + + while (index < text.length) { + const character = text[index]; + + if (braceLevel <= 0 && + text.slice(index, index + delimLength) === delimiter) { + return index; + } else if (character === "\\") { + index++; + } else if (character === "{") { + braceLevel++; + } else if (character === "}") { + braceLevel--; + } + + index++; + } + + return -1; +}; + +const escapeRegex = function(string) { + return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); +}; + +const amsRegex = /^\\begin{/; + +const splitAtDelimiters = function(text, delimiters) { + let index; + const data = []; + + const regexLeft = new RegExp( + "(" + delimiters.map((x) => escapeRegex(x.left)).join("|") + ")" + ); + + while (true) { + index = text.search(regexLeft); + if (index === -1) { + break; + } + if (index > 0) { + data.push({ + type: "text", + data: text.slice(0, index), + }); + text = text.slice(index); // now text starts with delimiter + } + // ... so this always succeeds: + const i = delimiters.findIndex((delim) => text.startsWith(delim.left)); + index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); + if (index === -1) { + break; + } + const rawData = text.slice(0, index + delimiters[i].right.length); + const math = amsRegex.test(rawData) + ? rawData + : text.slice(delimiters[i].left.length, index); + data.push({ + type: "math", + data: math, + rawData, + display: delimiters[i].display, + }); + text = text.slice(index + delimiters[i].right.length); + } + + if (text !== "") { + data.push({ + type: "text", + data: text, + }); + } + + return data; +}; + +export default splitAtDelimiters; diff --git a/node_modules/katex/contrib/auto-render/test/auto-render-spec.js b/node_modules/katex/contrib/auto-render/test/auto-render-spec.js new file mode 100644 index 0000000000..e4038b59aa --- /dev/null +++ b/node_modules/katex/contrib/auto-render/test/auto-render-spec.js @@ -0,0 +1,363 @@ +/** + * @jest-environment jsdom + */ +import splitAtDelimiters from "../splitAtDelimiters"; +import renderMathInElement from "../auto-render"; + +beforeEach(function() { + expect.extend({ + toSplitInto: function(actual, result, delimiters) { + const message = { + pass: true, + message: () => "'" + actual + "' split correctly", + }; + + const split = + splitAtDelimiters(actual, delimiters); + + if (split.length !== result.length) { + message.pass = false; + message.message = () => "Different number of splits: " + + split.length + " vs. " + result.length + " (" + + JSON.stringify(split) + " vs. " + + JSON.stringify(result) + ")"; + return message; + } + + for (let i = 0; i < split.length; i++) { + const real = split[i]; + const correct = result[i]; + + let good = true; + let diff; + + if (real.type !== correct.type) { + good = false; + diff = "type"; + } else if (real.data !== correct.data) { + good = false; + diff = "data"; + } else if (real.display !== correct.display) { + good = false; + diff = "display"; + } + + if (!good) { + message.pass = false; + message.message = () => "Difference at split " + + (i + 1) + ": " + JSON.stringify(real) + + " vs. " + JSON.stringify(correct) + + " (" + diff + " differs)"; + break; + } + } + + return message; + }, + }); +}); + +describe("A delimiter splitter", function() { + it("doesn't split when there are no delimiters", function() { + expect("hello").toSplitInto( + [ + {type: "text", data: "hello"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("doesn't create a math node with only one left delimiter", function() { + expect("hello ( world").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "text", data: "( world"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("doesn't split when there's only a right delimiter", function() { + expect("hello ) world").toSplitInto( + [ + {type: "text", data: "hello ) world"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("splits when there are both delimiters", function() { + expect("hello ( world ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("splits on multi-character delimiters", function() { + expect("hello [[ world ]] boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "[[ world ]]", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "[[", right: "]]", display: false}, + ]); + expect("hello \\begin{equation} world \\end{equation} boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: "\\begin{equation} world \\end{equation}", + rawData: "\\begin{equation} world \\end{equation}", + display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "\\begin{equation}", right: "\\end{equation}", + display: false}, + ]); + }); + + it("splits multiple times", function() { + expect("hello ( world ) boo ( more ) stuff").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo "}, + {type: "math", data: " more ", + rawData: "( more )", display: false}, + {type: "text", data: " stuff"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("leaves the ending when there's only a left delimiter", function() { + expect("hello ( world ) boo ( left").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo "}, + {type: "text", data: "( left"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("doesn't split when close delimiters are in {}s", function() { + expect("hello ( world { ) } ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world { ) } ", + rawData: "( world { ) } )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + + expect("hello ( world { { } ) } ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world { { } ) } ", + rawData: "( world { { } ) } )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + }); + + it("correctly processes sequences of $..$", function() { + expect("$hello$$world$$boo$").toSplitInto( + [ + {type: "math", data: "hello", + rawData: "$hello$", display: false}, + {type: "math", data: "world", + rawData: "$world$", display: false}, + {type: "math", data: "boo", + rawData: "$boo$", display: false}, + ], + [ + {left: "$", right: "$", display: false}, + ]); + }); + + it("doesn't split at escaped delimiters", function() { + expect("hello ( world \\) ) boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world \\) ", + rawData: "( world \\) )", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "(", right: ")", display: false}, + ]); + + /* TODO(emily): make this work maybe? + expect("hello \\( ( world ) boo").toSplitInto( + "(", ")", + [ + {type: "text", data: "hello \\( "}, + {type: "math", data: " world ", + rawData: "( world )", display: false}, + {type: "text", data: " boo"}, + ]); + */ + }); + + it("splits when the right and left delimiters are the same", function() { + expect("hello $ world $ boo").toSplitInto( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "$ world $", display: false}, + {type: "text", data: " boo"}, + ], + [ + {left: "$", right: "$", display: false}, + ]); + }); + + it("ignores \\$", function() { + expect("$x = \\$5$").toSplitInto( + [ + {type: "math", data: "x = \\$5", + rawData: "$x = \\$5$", display: false}, + ], + [ + {left: "$", right: "$", display: false}, + ]); + }); + + it("remembers which delimiters are display-mode", function() { + const startData = "hello ( world ) boo"; + + expect(splitAtDelimiters(startData, + [{left:"(", right:")", display:true}])).toEqual( + [ + {type: "text", data: "hello "}, + {type: "math", data: " world ", + rawData: "( world )", display: true}, + {type: "text", data: " boo"}, + ]); + }); + + it("handles nested delimiters irrespective of order", function() { + expect(splitAtDelimiters("$\\fbox{\\(hi\\)}$", + [ + {left:"\\(", right:"\\)", display:false}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "\\fbox{\\(hi\\)}", + rawData: "$\\fbox{\\(hi\\)}$", display: false}, + ]); + expect(splitAtDelimiters("\\(\\fbox{$hi$}\\)", + [ + {left:"\\(", right:"\\)", display:false}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "\\fbox{$hi$}", + rawData: "\\(\\fbox{$hi$}\\)", display: false}, + ]); + }); + + it("handles a mix of $ and $$", function() { + expect(splitAtDelimiters("$hello$world$$boo$$", + [ + {left:"$$", right:"$$", display:true}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "hello", + rawData: "$hello$", display: false}, + {type: "text", data: "world"}, + {type: "math", data: "boo", + rawData: "$$boo$$", display: true}, + ]); + expect(splitAtDelimiters("$hello$$world$$$boo$$", + [ + {left:"$$", right:"$$", display:true}, + {left:"$", right:"$", display:false}, + ])).toEqual( + [ + {type: "math", data: "hello", + rawData: "$hello$", display: false}, + {type: "math", data: "world", + rawData: "$world$", display: false}, + {type: "math", data: "boo", + rawData: "$$boo$$", display: true}, + ]); + }); +}); + +describe("Pre-process callback", function() { + it("replace `-squared` with `^2 `", function() { + const el1 = document.createElement('div'); + el1.textContent = 'Circle equation: $x-squared + y-squared = r-squared$.'; + const el2 = document.createElement('div'); + el2.textContent = 'Circle equation: $x^2 + y^2 = r^2$.'; + const delimiters = [{left: "$", right: "$", display: false}]; + renderMathInElement(el1, { + delimiters, + preProcess: math => math.replace(/-squared/g, '^2'), + }); + renderMathInElement(el2, {delimiters}); + expect(el1.innerHTML).toEqual(el2.innerHTML); + }); +}); + +describe("Parse adjacent text nodes", function() { + it("parse adjacent text nodes with math", function() { + const textNodes = ['\\[', + 'x^2 + y^2 = r^2', + '\\]']; + const el = document.createElement('div'); + for (let i = 0; i < textNodes.length; i++) { + const txt = document.createTextNode(textNodes[i]); + el.appendChild(txt); + } + const el2 = document.createElement('div'); + const txt = document.createTextNode(textNodes.join('')); + el2.appendChild(txt); + const delimiters = [{left: "\\[", right: "\\]", display: true}]; + renderMathInElement(el, {delimiters}); + renderMathInElement(el2, {delimiters}); + expect(el).toStrictEqual(el2); + }); + + it("parse adjacent text nodes without math", function() { + const textNodes = ['Lorem ipsum dolor', + 'sit amet', + 'consectetur adipiscing elit']; + const el = document.createElement('div'); + for (let i = 0; i < textNodes.length; i++) { + const txt = document.createTextNode(textNodes[i]); + el.appendChild(txt); + } + const el2 = document.createElement('div'); + for (let i = 0; i < textNodes.length; i++) { + const txt = document.createTextNode(textNodes[i]); + el2.appendChild(txt); + } + const delimiters = [{left: "\\[", right: "\\]", display: true}]; + renderMathInElement(el, {delimiters}); + expect(el).toStrictEqual(el2); + }); +}); diff --git a/node_modules/katex/contrib/copy-tex/README.md b/node_modules/katex/contrib/copy-tex/README.md new file mode 100644 index 0000000000..614c796f0d --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/README.md @@ -0,0 +1,39 @@ +# Copy-tex extension + +This extension modifies the copy/paste behavior in any browser supporting the +[Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent) +so that, when selecting and copying KaTeX-rendered elements, the text +content of the resulting clipboard renders KaTeX elements as their LaTeX source +surrounded by specified delimiters. (The HTML content of the resulting +clipboard remains the selected HTML content, as it normally would.) +The default delimiters are `$...$` for inline math and `$$...$$` for display +math, but you can easy switch them to e.g. `\(...\)` and `\[...\]` by +modifying `copyDelimiters` in [the source code](copy-tex.js). +Note that a selection containing part of a KaTeX formula gets extended to +include the entire KaTeX formula. + +## Usage + +This extension isn't part of KaTeX proper, so the script should be separately +included in the page. + +```html + +``` + +(Note that, as of KaTeX 0.16.0, there is no longer a corresponding CSS file.) + +See [index.html](index.html) for an example. +(To run this example from a clone of the repository, run `yarn start` +in the root KaTeX directory, and then visit +http://localhost:7936/contrib/copy-tex/index.html +with your web browser.) + +If you want to build your own custom copy handler based on this one, +copy the `copy-tex.js` into your codebase and replace the `require` +statement with `require('katex/contrib/copy-tex/katex2tex.js')`. + +ECMAScript module is also available: +```html + +``` diff --git a/node_modules/katex/contrib/copy-tex/copy-tex.js b/node_modules/katex/contrib/copy-tex/copy-tex.js new file mode 100644 index 0000000000..79c91d5953 --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/copy-tex.js @@ -0,0 +1,51 @@ +// @flow + +import katexReplaceWithTex from './katex2tex'; + +// Return
          element containing node, or null if not found. +function closestKatex(node: Node): ?Element { + // If node is a Text Node, for example, go up to containing Element, + // where we can apply the `closest` method. + const element: ?Element = + (node instanceof Element ? node : node.parentElement); + return element && element.closest('.katex'); +} + +// Global copy handler to modify behavior on/within .katex elements. +document.addEventListener('copy', function(event: ClipboardEvent) { + const selection = window.getSelection(); + if (selection.isCollapsed || !event.clipboardData) { + return; // default action OK if selection is empty or unchangeable + } + const clipboardData = event.clipboardData; + const range = selection.getRangeAt(0); + + // When start point is within a formula, expand to entire formula. + const startKatex = closestKatex(range.startContainer); + if (startKatex) { + range.setStartBefore(startKatex); + } + + // Similarly, when end point is within a formula, expand to entire formula. + const endKatex = closestKatex(range.endContainer); + if (endKatex) { + range.setEndAfter(endKatex); + } + + const fragment = range.cloneContents(); + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } + + const htmlContents = Array.prototype.map.call(fragment.childNodes, + (el) => (el instanceof Text ? el.textContent : el.outerHTML) + ).join(''); + + // Preserve usual HTML copy/paste behavior. + clipboardData.setData('text/html', htmlContents); + // Rewrite plain-text version. + clipboardData.setData('text/plain', + katexReplaceWithTex(fragment).textContent); + // Prevent normal copy handling. + event.preventDefault(); +}); diff --git a/node_modules/katex/contrib/copy-tex/index.html b/node_modules/katex/contrib/copy-tex/index.html new file mode 100644 index 0000000000..fa59d27326 --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/index.html @@ -0,0 +1,38 @@ + + + + + + Copy-tex test + + + + + + +

          Copy-tex test

          +

          Try copy/pasting some of the text below!

          +

          + Here is some \(\KaTeX\) math: $$ x^2+y^2=z^2 $$ + The variables are \(x\), \(y\), and \(z\), + which are all in \(\mathbb{R}^+\). + Q.E.D. +

          + + + diff --git a/node_modules/katex/contrib/copy-tex/katex2tex.js b/node_modules/katex/contrib/copy-tex/katex2tex.js new file mode 100644 index 0000000000..927003ca30 --- /dev/null +++ b/node_modules/katex/contrib/copy-tex/katex2tex.js @@ -0,0 +1,61 @@ +// @flow + +export interface CopyDelimiters { + inline: [string, string], + display: [string, string], +} + +// Set these to how you want inline and display math to be delimited. +export const defaultCopyDelimiters: CopyDelimiters = { + inline: ['$', '$'], // alternative: ['\(', '\)'] + display: ['$$', '$$'], // alternative: ['\[', '\]'] +}; + +// Replace .katex elements with their TeX source ( element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. +export function katexReplaceWithTex( + fragment: DocumentFragment, + copyDelimiters: CopyDelimiters = defaultCopyDelimiters +): DocumentFragment { + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + for (let i = 0; i < katexHtml.length; i++) { + const element = katexHtml[i]; + if (element.remove) { + element.remove(); + } else if (element.parentNode) { + element.parentNode.removeChild(element); + } + } + // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + const katexMathml = fragment.querySelectorAll('.katex-mathml'); + for (let i = 0; i < katexMathml.length; i++) { + const element = katexMathml[i]; + const texSource = element.querySelector('annotation'); + if (texSource) { + if (element.replaceWith) { + element.replaceWith(texSource); + } else if (element.parentNode) { + element.parentNode.replaceChild(texSource, element); + } + texSource.innerHTML = copyDelimiters.inline[0] + + texSource.innerHTML + copyDelimiters.inline[1]; + } + } + // Switch display math to display delimiters. + const displays = fragment.querySelectorAll('.katex-display annotation'); + for (let i = 0; i < displays.length; i++) { + const element = displays[i]; + element.innerHTML = copyDelimiters.display[0] + + element.innerHTML.substr(copyDelimiters.inline[0].length, + element.innerHTML.length - copyDelimiters.inline[0].length + - copyDelimiters.inline[1].length) + + copyDelimiters.display[1]; + } + return fragment; +} + +export default katexReplaceWithTex; diff --git a/node_modules/katex/contrib/mathtex-script-type/README.md b/node_modules/katex/contrib/mathtex-script-type/README.md new file mode 100644 index 0000000000..39b6dfc064 --- /dev/null +++ b/node_modules/katex/contrib/mathtex-script-type/README.md @@ -0,0 +1,38 @@ +# `math/tex` Custom Script Type Extension + +This is an extension to automatically display code inside `script` tags with `type=math/tex` using KaTeX. +This script type is commonly used by MathJax, so this can be used to support compatibility with MathJax. + +### Usage + +This extension isn't part of KaTeX proper, so the script should be separately +included in the page, in addition to KaTeX. + +Load the extension by adding the following line to your HTML file. + +```html + +``` +You can download the script and use it locally, or from a local KaTeX installation instead. + +For example, in the following simple page, we first load KaTeX as usual. +Then, in the body, we use a `math/tex` script to typeset the equation `x+\sqrt{1-x^2}`. + + +```html + + + + + + + + + + + +``` + +ECMAScript module is also available: +```html + diff --git a/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js b/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js new file mode 100644 index 0000000000..592b201952 --- /dev/null +++ b/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js @@ -0,0 +1,22 @@ +import katex from "katex"; + +let scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function(script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + const display = + (script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null); + + const katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", + display ? "equation" : "inline-equation"); + try { + katex.render(script.text, katexElement, {displayMode: display}); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + script.parentNode.replaceChild(katexElement, script); +}); diff --git a/node_modules/katex/contrib/mhchem/README.md b/node_modules/katex/contrib/mhchem/README.md new file mode 100644 index 0000000000..515e5ce7e9 --- /dev/null +++ b/node_modules/katex/contrib/mhchem/README.md @@ -0,0 +1,23 @@ +# mhchem extension + +This extension adds to KaTeX the `\ce` and `\pu` functions from the [mhchem](https://mhchem.github.io/MathJax-mhchem/) package. + +### Usage + +This extension isn't part of core KaTeX, so the script should be separately included. Write the following line into the HTML page's ``. Place it *after* the line that calls `katex.js`, and if you make use of the [auto-render](https://katex.org/docs/autorender.html) extension, place it *before* the line that calls `auto-render.js`. + +```html + +``` + +If you remove the `defer` attribute from this tag, then you must also remove the `defer` attribute from the ` +``` + +And call it like so: + +```javascript +const options = { + "strings": { + "content": "Some Markdown to lint." + } +}; + +const results = globalThis.markdownlint.lintSync(options).toString(); +``` + +## Examples + +For ideas how to integrate `markdownlint` into your workflow, refer to the +following projects or one of the tools in the [Related section](#related): + +- [.NET Documentation][dot-net-doc] ([Search repository][dot-net-doc-search]) +- [ally.js][ally-js] ([Search repository][ally-js-search]) +- [Apache Airflow][airflow] ([Search repository][airflow-search]) +- [Boostnote][boostnote] ([Search repository][boostnote-search]) +- [CodiMD][codimd] ([Search repository][codimd-search]) +- [Electron][electron] ([Search repository][electron-search]) +- [ESLint][eslint] ([Search repository][eslint-search]) +- [Garden React Components][garden] ([Search repository][garden-search]) +- [MDN Web Docs][mdn] ([Search repository][mdn-search]) +- [MkDocs][mkdocs] ([Search repository][mkdocs-search]) +- [Mocha][mocha] ([Search repository][mocha-search]) +- [Pi-hole documentation][pi-hole] ([Search repository][pi-hole-search]) +- [Reactable][reactable] ([Search repository][reactable-search]) +- [V8][v8] ([Search repository][v8-search]) +- [webhint][webhint] ([Search repository][webhint-search]) +- [webpack][webpack] ([Search repository][webpack-search]) +- [WordPress][wordpress] ([Search repository][wordpress-search]) + +For more advanced integration scenarios: + +- [GitHub Docs content linter][content-linter] +- [GitHub's `markdownlint-github` repository][markdownlint-github] + +[ally-js]: https://allyjs.io/ +[ally-js-search]: https://github.com/medialize/ally.js/search?q=markdownlint +[airflow]: https://airflow.apache.org +[airflow-search]: https://github.com/apache/airflow/search?q=markdownlint +[boostnote]: https://boostnote.io/ +[boostnote-search]: https://github.com/BoostIO/Boostnote/search?q=markdownlint +[codimd]: https://github.com/hackmdio/codimd +[codimd-search]: https://github.com/hackmdio/codimd/search?q=markdownlint +[content-linter]: https://docs.github.com/en/contributing/collaborating-on-github-docs/using-the-content-linter +[dot-net-doc]: https://docs.microsoft.com/en-us/dotnet/ +[dot-net-doc-search]: https://github.com/dotnet/docs/search?q=markdownlint +[electron]: https://www.electronjs.org +[electron-search]: https://github.com/electron/electron/search?q=markdownlint +[eslint]: https://eslint.org/ +[eslint-search]: https://github.com/eslint/eslint/search?q=markdownlint +[garden]: https://zendeskgarden.github.io/react-components/ +[garden-search]: https://github.com/zendeskgarden/react-components/search?q=markdownlint +[markdownlint-github]: https://github.com/github/markdownlint-github +[mdn]: https://developer.mozilla.org/ +[mdn-search]: https://github.com/mdn/content/search?q=markdownlint +[mkdocs]: https://www.mkdocs.org/ +[mkdocs-search]: https://github.com/mkdocs/mkdocs/search?q=markdownlint +[mocha]: https://mochajs.org/ +[mocha-search]: https://github.com/mochajs/mocha/search?q=markdownlint +[pi-hole]: https://docs.pi-hole.net +[pi-hole-search]: https://github.com/pi-hole/docs/search?q=markdownlint +[reactable]: https://glittershark.github.io/reactable/ +[reactable-search]: https://github.com/glittershark/reactable/search?q=markdownlint +[v8]: https://v8.dev/ +[v8-search]: https://github.com/v8/v8.dev/search?q=markdownlint +[webhint]: https://webhint.io/ +[webhint-search]: https://github.com/webhintio/hint/search?q=markdownlint +[webpack]: https://webpack.js.org/ +[webpack-search]: https://github.com/webpack/webpack.js.org/search?q=markdownlint +[wordpress]: https://wordpress.org/gutenberg/ +[wordpress-search]: https://github.com/WordPress/gutenberg/search?q=markdownlint + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + +## Releasing + +See [ReleaseProcess.md](doc/ReleaseProcess.md) for more information. + +## History + +See [CHANGELOG.md](CHANGELOG.md). + +[npm-image]: https://img.shields.io/npm/v/markdownlint.svg +[npm-url]: https://www.npmjs.com/package/markdownlint +[license-image]: https://img.shields.io/npm/l/markdownlint.svg +[license-url]: https://opensource.org/licenses/MIT diff --git a/node_modules/markdownlint/doc/CustomRules.md b/node_modules/markdownlint/doc/CustomRules.md new file mode 100644 index 0000000000..8f696ac47e --- /dev/null +++ b/node_modules/markdownlint/doc/CustomRules.md @@ -0,0 +1,194 @@ +# Custom Rules + +In addition to its built-in rules, `markdownlint` lets you enhance the linting +experience by passing an array of custom rules using the [`options.customRules` +property][options-custom-rules]. Custom rules can do everything the built-in +rules can and are defined inline or imported from another package ([keyword +`markdownlint-rule` on npm][markdownlint-rule]). When defined by a file or +package, the export can be a single rule object (see below) or an array of them. +Custom rules can be disabled, enabled, and customized using the same syntax as +built-in rules. + +## Implementing Simple Rules + +For simple requirements like disallowing certain characters or patterns, +the community-developed +[markdownlint-rule-search-replace][markdownlint-rule-search-replace] +plug-in can be used. This plug-in allows anyone to create a set of simple +text-replacement rules without needing to write code. + +[markdownlint-rule-search-replace]: https://www.npmjs.com/package/markdownlint-rule-search-replace + +## Authoring + +Rules are defined by a name (or multiple names), a description, an optional link +to more information, one or more tags, and a function that implements the rule's +behavior. That function is called once for each file/string input and is passed +the parsed input and a function to log any violations. + +Custom rules can (should) operate on a structured set of tokens based on the +[`micromark`][micromark] `parser` (this is preferred). Alternatively, custom +rules can operate on a structured set of tokens based on the +[`markdown-it`][markdown-it] `parser` (legacy support). Finally, custom rules +can operate directly on text with the `none` `parser`. + +A simple rule implementation using the `micromark` parser to report a violation +for any use of blockquotes might look like: + +```javascript +/** @type {import("markdownlint").Rule} */ +module.exports = { + "names": [ "any-blockquote-micromark" ], + "description": "Rule that reports an error for any blockquote", + "information": new URL("https://example.com/rules/any-blockquote"), + "tags": [ "test" ], + "parser": "micromark", + "function": (params, onError) => { + const blockquotes = params.parsers.micromark.tokens + .filter((token) => token.type === "blockQuote"); + for (const blockquote of blockquotes) { + const lines = blockquote.endLine - blockquote.startLine + 1; + onError({ + "lineNumber": blockquote.startLine, + "detail": "Blockquote spans " + lines + " line(s).", + "context": params.lines[blockquote.startLine - 1] + }); + } + } +} +``` + +That same rule implemented using the `markdown-it` parser might look like: + +```javascript +/** @type {import("markdownlint").Rule} */ +module.exports = { + "names": [ "any-blockquote-markdown-it" ], + "description": "Rule that reports an error for any blockquote", + "information": new URL("https://example.com/rules/any-blockquote"), + "tags": [ "test" ], + "parser": "markdownit", + "function": (params, onError) => { + const blockquotes = params.parsers.markdownit.tokens + .filter((token) => token.type === "blockquote_open"); + for (const blockquote of blockquotes) { + const [ startIndex, endIndex ] = blockquote.map; + const lines = endIndex - startIndex; + onError({ + "lineNumber": blockquote.lineNumber, + "detail": "Blockquote spans " + lines + " line(s).", + "context": blockquote.line + }); + } + } +} +``` + +A rule is implemented as an `Object`: + +- `names` is a required `Array` of `String` values that identify the rule in + output messages and config. +- `description` is a required `String` value that describes the rule in output + messages. +- `information` is an optional (absolute) `URL` of a link to more information + about the rule. +- `tags` is a required `Array` of `String` values that groups related rules for + easier customization. +- `parser` is a required `String` value `"markdownit" | "micromark" | "none"` + that specifies the parser data used via `params.parsers` (see below). +- `asynchronous` is an optional `Boolean` value that indicates whether the rule + returns a `Promise` and runs asynchronously. +- `function` is a required `Function` that implements the rule and is passed two + parameters: + - `params` is an `Object` with properties that describe the content being + analyzed: + - `name` is a `String` that identifies the input file/string. + - `parsers` is an `Object` with properties corresponding to the value of + `parser` in the rule definition (see above). + - `markdownit` is an `Object` that provides access to output from the + [`markdown-it`][markdown-it] parser. + - `tokens` is an `Array` of [`markdown-it` `Token`s][markdown-it-token] + with added `line` and `lineNumber` properties. (This property was + previously on the `params` object.) + - `micromark` is an `Object` that provides access to output from the + [`micromark`][micromark] parser. + - `tokens` is an `Array` of [`MicromarkToken`][micromark-token] objects. + - Samples for both `tokens` are available via [test snapshots][tokens]. + - `lines` is an `Array` of `String` values corresponding to the lines of the + input file/string. + - `frontMatterLines` is an `Array` of `String` values corresponding to any + front matter (not present in `lines`). + - `config` is an `Object` corresponding to the rule's entry in + `options.config` (if present). + - `version` is a `String` that corresponds to the version of `markdownlint` + - `onError` is a function that takes a single `Object` parameter with one + required and four optional properties: + - `lineNumber` is a required `Number` specifying the 1-based line number of + the error. + - `detail` is an optional `String` with information about what caused the + error. + - `context` is an optional `String` with relevant text surrounding the error + location. + - `information` is an optional (absolute) `URL` of a link to override the + same-named value provided by the rule definition. (Uncommon) + - `range` is an optional `Array` with two `Number` values identifying the + 1-based column and length of the error. + - `fixInfo` is an optional `Object` with information about how to fix the + error (all properties are optional, but at least one of `deleteCount` and + `insertText` should be present; when applying a fix, the delete should be + performed before the insert): + - `lineNumber` is an optional `Number` specifying the 1-based line number + of the edit. + - `editColumn` is an optional `Number` specifying the 1-based column + number of the edit. + - `deleteCount` is an optional `Number` specifying the number of + characters to delete (the value `-1` is used to delete the line). + - `insertText` is an optional `String` specifying the text to insert. `\n` + is the platform-independent way to add a line break; line breaks should + be added at the beginning of a line instead of at the end. + +The collection of helper functions shared by the built-in rules is available for +use by custom rules in the [markdownlint-rule-helpers package][rule-helpers]. + +### Asynchronous Rules + +If a rule needs to perform asynchronous operations (such as fetching a network +resource), it can specify the value `true` for its `asynchronous` property. +Asynchronous rules should return a `Promise` from their `function` +implementation that is resolved when the rule completes. (The value passed to +`resolve(...)` is ignored.) Linting violations from asynchronous rules are +reported via the `onError` function just like for synchronous rules. + +**Note**: Asynchronous rules cannot be referenced in a synchronous calling +context (i.e., `import { lint } from "markdownlint/sync"`). Attempting to do so +throws an exception. + +## Examples + +- [Simple rules used by the project's test cases][test-rules] +- [Code for all `markdownlint` built-in rules][lib] +- [Complete example rule including npm configuration][extended-ascii] +- [Custom rules from the github/docs repository][github-docs] +- [Custom rules from the electron/lint-roller repository][electron] +- [Custom rules from the webhintio/hint repository][hint] + +## References + +- [CommonMark documentation and specification][commonmark] +- [`markdown-it` Markdown parser project page][markdown-it] + +[commonmark]: https://commonmark.org/ +[electron]: https://github.com/electron/lint-roller/tree/main/markdownlint-rules +[extended-ascii]: https://github.com/DavidAnson/markdownlint-rule-extended-ascii +[github-docs]: https://github.com/github/docs/tree/main/src/content-linter/lib/linting-rules +[hint]: https://github.com/webhintio/hint/blob/main/scripts/lint-markdown.js +[lib]: ../lib +[markdown-it]: https://github.com/markdown-it/markdown-it +[markdown-it-token]: https://markdown-it.github.io/markdown-it/#Token +[markdownlint-rule]: https://www.npmjs.com/search?q=keywords:markdownlint-rule +[micromark]: https://github.com/micromark/micromark +[micromark-token]: ../lib/markdownlint.d.mts +[rule-helpers]: https://www.npmjs.com/package/markdownlint-rule-helpers +[options-custom-rules]: ../README.md#optionscustomrules +[test-rules]: ../test/rules +[tokens]: ../test/snapshots/markdownlint-test-custom-rules.mjs.md diff --git a/node_modules/markdownlint/doc/Prettier.md b/node_modules/markdownlint/doc/Prettier.md new file mode 100644 index 0000000000..0ebde95d38 --- /dev/null +++ b/node_modules/markdownlint/doc/Prettier.md @@ -0,0 +1,27 @@ +# Using `markdownlint` with Prettier + +[`Prettier`](https://prettier.io) is a popular code formatter. +For the most part, Prettier works seamlessly with `markdownlint`. + +You can `extend` the [`prettier.json`](../style/prettier.json) style to disable +all `markdownlint` rules that overlap with Prettier. + +Other scenarios are documented below. + +## List item indentation + +The default settings of `markdownlint` and `Prettier` are compatible and don't +result in any linting violations. If `Prettier` is used with `--tab-width` set +to `4` (vs. `2`), the following `markdownlint` configuration can be used: + +```json +{ + "list-marker-space": { + "ul_multi": 3, + "ul_single": 3 + }, + "ul-indent": { + "indent": 4 + } +} +``` diff --git a/node_modules/markdownlint/doc/ReleaseProcess.md b/node_modules/markdownlint/doc/ReleaseProcess.md new file mode 100644 index 0000000000..05c7b70027 --- /dev/null +++ b/node_modules/markdownlint/doc/ReleaseProcess.md @@ -0,0 +1,20 @@ +# Release Process + +The `markdownlint` library has some related dependencies that are updated along +with it. To prevent possible regressions from having a widespread impact, these +releases are separated by a few days to provide an opportunity to find issues. + +1. [`markdownlint`][markdownlint] +2. [`markdownlint-cli2`][markdownlint-cli2] +3. [`markdownlint-cli2-action`][markdownlint-cli2-action] +4. [`vscode-markdownlint`][vscode-markdownlint] +5. [`markdownlint-cli`][markdownlint-cli] + +This sequence is not strict and may be adjusted based on the content of the +release and the scope of feature work in each dependency. + +[markdownlint]: https://github.com/DavidAnson/markdownlint +[markdownlint-cli2]: https://github.com/DavidAnson/markdownlint-cli2 +[markdownlint-cli2-action]: https://github.com/marketplace/actions/markdownlint-cli2-action +[vscode-markdownlint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint +[markdownlint-cli]: https://github.com/igorshubovych/markdownlint-cli diff --git a/node_modules/markdownlint/doc/Rules.md b/node_modules/markdownlint/doc/Rules.md new file mode 100644 index 0000000000..ded40d8aa3 --- /dev/null +++ b/node_modules/markdownlint/doc/Rules.md @@ -0,0 +1,2535 @@ +# Rules + +This document contains a description of all rules, what they are checking for, +as well as examples of documents that break the rule and corrected +versions of the examples. + + + +## `MD001` - Heading levels should only increment by one level at a time + +Tags: `headings` + +Aliases: `heading-increment` + +This rule is triggered when you skip heading levels in a Markdown document, for +example: + +```markdown +# Heading 1 + +### Heading 3 + +We skipped out a 2nd level heading in this document +``` + +When using multiple heading levels, nested headings should increase by only one +level at a time: + +```markdown +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +## Another Heading 2 + +### Another Heading 3 +``` + +Rationale: Headings represent the structure of a document and can be confusing +when skipped - especially for accessibility scenarios. More information: +. + + + +## `MD003` - Heading style + +Tags: `headings` + +Aliases: `heading-style` + +Parameters: + +- `style`: Heading style (`string`, default `consistent`, values `atx` / + `atx_closed` / `consistent` / `setext` / `setext_with_atx` / + `setext_with_atx_closed`) + +This rule is triggered when different heading styles are used in the same +document: + +```markdown +# ATX style H1 + +## Closed ATX style H2 ## + +Setext style H1 +=============== +``` + +To fix the issue, use consistent heading styles throughout the document: + +```markdown +# ATX style H1 + +## ATX style H2 +``` + +The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style +headings of level 3 or more in documents with setext-style headings (which only +support level 1 and 2 headings): + +```markdown +Setext style H1 +=============== + +Setext style H2 +--------------- + +### ATX style H3 +``` + +Note: The configured heading style can be a specific style to require (`atx`, +`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can +require that all heading styles match the first heading style via `consistent`. + +Note: The placement of a horizontal rule directly below a line of text can +trigger this rule by turning that text into a level 2 setext-style heading: + +```markdown +A line of text followed by a horizontal rule becomes a heading +--- +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD004` - Unordered list style + +Tags: `bullet`, `ul` + +Aliases: `ul-style` + +Parameters: + +- `style`: List style (`string`, default `consistent`, values `asterisk` / + `consistent` / `dash` / `plus` / `sublist`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for unordered +list items do not match the configured unordered list style: + +```markdown +* Item 1 ++ Item 2 +- Item 3 +``` + +To fix this issue, use the configured style for list items throughout the +document: + +```markdown +* Item 1 +* Item 2 +* Item 3 +``` + +The configured list style can ensure all list styling is a specific symbol +(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that +differs from its parent list (`sublist`), or ensure all list styles match the +first list style (`consistent`). + +For example, the following is valid for the `sublist` style because the +outer-most indent uses asterisk, the middle indent uses plus, and the inner-most +indent uses dash: + +```markdown +* Item 1 + + Item 2 + - Item 3 + + Item 4 +* Item 4 + + Item 5 +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD005` - Inconsistent indentation for list items at the same level + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `list-indent` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are parsed as being at the same level, +but don't have the same indentation: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * A misaligned item +``` + +Usually, this rule will be triggered because of a typo. Correct the indentation +for the list to fix it: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * Nested Item 3 +``` + +Sequentially-ordered list markers are usually left-aligned such that all items +have the same starting column: + +```markdown +... +8. Item +9. Item +10. Item +11. Item +... +``` + +This rule also supports right-alignment of list markers such that all items have +the same ending column: + +```markdown +... + 8. Item + 9. Item +10. Item +11. Item +... +``` + +Rationale: Violations of this rule can lead to improperly rendered content. + + + +## `MD007` - Unordered list indentation + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `ul-indent` + +Parameters: + +- `indent`: Spaces for indent (`integer`, default `2`) +- `start_indent`: Spaces for first level indent (when start_indented is set) + (`integer`, default `2`) +- `start_indented`: Whether to indent the first level of the list (`boolean`, + default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are not indented by the configured +number of spaces (default: 2). + +Example: + +```markdown +* List item + * Nested list item indented by 3 spaces +``` + +Corrected Example: + +```markdown +* List item + * Nested list item indented by 2 spaces +``` + +Note: This rule applies to a sublist only if its parent lists are all also +unordered (otherwise, extra indentation of ordered lists interferes with the +rule). + +The `start_indented` parameter allows the first level of lists to be indented by +the configured number of spaces rather than starting at zero. The `start_indent` +parameter allows the first level of lists to be indented by a different number +of spaces than the rest (ignored when `start_indented` is not set). + +Rationale: Indenting by 2 spaces allows the content of a nested list to be in +line with the start of the content of the parent list when a single space is +used after the list marker. Indenting by 4 spaces is consistent with code blocks +and simpler for editors to implement. Additionally, this can be a compatibility +issue for other Markdown parsers, which require 4-space indents. More +information: [Markdown Style Guide][markdown-style-guide]. + +Note: See [Prettier.md](Prettier.md) for compatibility information. + +[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists + + + +## `MD009` - Trailing spaces + +Tags: `whitespace` + +Aliases: `no-trailing-spaces` + +Parameters: + +- `br_spaces`: Spaces for line break (`integer`, default `2`) +- `list_item_empty_lines`: Allow spaces for empty lines in list items + (`boolean`, default `false`) +- `strict`: Include unnecessary breaks (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any lines that end with unexpected whitespace. To fix +this, remove the trailing space from the end of the line. + +Note: Trailing space is allowed in indented and fenced code blocks because some +languages require it. + +The `br_spaces` parameter allows an exception to this rule for a specific number +of trailing spaces, typically used to insert an explicit line break. The default +value allows 2 spaces to indicate a hard break (\
          element). + +Note: You must set `br_spaces` to a value >= 2 for this parameter to take +effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing +spaces. + +By default, this rule will not trigger when the allowed number of spaces is +used, even when it doesn't create a hard break (for example, at the end of a +paragraph). To report such instances as well, set the `strict` parameter to +`true`. + +```markdown +Text text text +text[2 spaces] +``` + +Using spaces to indent blank lines inside a list item is usually not necessary, +but some parsers require it. Set the `list_item_empty_lines` parameter to `true` +to allow this (even when `strict` is `true`): + +```markdown +- list item text + [2 spaces] + list item text +``` + +Rationale: Except when being used to create a line break, trailing whitespace +has no purpose and does not affect the rendering of content. + + + +## `MD010` - Hard tabs + +Tags: `hard_tab`, `whitespace` + +Aliases: `no-hard-tabs` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default + `[]`) +- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered by any lines that contain hard tab characters instead +of using spaces for indentation. To fix this, replace any hard tab characters +with spaces instead. + +Example: + + + +```markdown +Some text + + * hard tab character used to indent the list item +``` + + + +Corrected example: + +```markdown +Some text + + * Spaces used to indent the list item instead +``` + +You have the option to exclude this rule for code blocks and spans. To do so, +set the `code_blocks` parameter to `false`. Code blocks and spans are included +by default since handling of tabs by Markdown tools can be inconsistent (e.g., +using 4 vs. 8 spaces). + +When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), +the `ignore_code_languages` parameter can be set to a list of languages that +should be ignored (i.e., hard tabs will be allowed, though not required). This +makes it easier for documents to include code for languages that require hard +tabs. + +By default, violations of this rule are fixed by replacing the tab with 1 space +character. To use a different number of spaces, set the `spaces_per_tab` +parameter to the desired value. + +Rationale: Hard tabs are often rendered inconsistently by different editors and +can be harder to work with than spaces. + + + +## `MD011` - Reversed link syntax + +Tags: `links` + +Aliases: `no-reversed-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when text that appears to be a link is encountered, but +where the syntax appears to have been reversed (the `[]` and `()` are +reversed): + +```markdown +(Incorrect link syntax)[https://www.example.com/] +``` + +To fix this, swap the `[]` and `()` around: + +```markdown +[Correct link syntax](https://www.example.com/) +``` + +Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style +footnotes do not trigger this rule: + +```markdown +For (example)[^1] +``` + +Rationale: Reversed links are not rendered as usable links. + + + +## `MD012` - Multiple consecutive blank lines + +Tags: `blank_lines`, `whitespace` + +Aliases: `no-multiple-blanks` + +Parameters: + +- `maximum`: Consecutive blank lines (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are multiple consecutive blank lines in the +document: + +```markdown +Some text here + + +Some more text here +``` + +To fix this, delete the offending lines: + +```markdown +Some text here + +Some more text here +``` + +Note: this rule will not be triggered if there are multiple consecutive blank +lines inside code blocks. + +Note: The `maximum` parameter can be used to configure the maximum number of +consecutive blank lines. + +Rationale: Except in a code block, blank lines serve no purpose and do not +affect the rendering of content. + + + +## `MD013` - Line length + +Tags: `line_length` + +Aliases: `line-length` + +Parameters: + +- `code_block_line_length`: Number of characters for code blocks (`integer`, + default `80`) +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `heading_line_length`: Number of characters for headings (`integer`, default + `80`) +- `headings`: Include headings (`boolean`, default `true`) +- `line_length`: Number of characters (`integer`, default `80`) +- `stern`: Stern length checking (`boolean`, default `false`) +- `strict`: Strict length checking (`boolean`, default `false`) +- `tables`: Include tables (`boolean`, default `true`) + +This rule is triggered when there are lines that are longer than the +configured `line_length` (default: 80 characters). To fix this, split the line +up into multiple lines. To set a different maximum length for headings, use +`heading_line_length`. To set a different maximum length for code blocks, use +`code_block_line_length` + +This rule has an exception when there is no whitespace beyond the configured +line length. This allows you to include items such as long URLs without being +forced to break them in the middle. To disable this exception, set the `strict` +parameter to `true` and an issue will be reported when any line is too long. To +warn for lines that are too long and could be fixed but allow long lines +without spaces, set the `stern` parameter to `true`. + +For example (assuming normal behavior): + +```markdown +IF THIS LINE IS THE MAXIMUM LENGTH +This line is okay because there are-no-spaces-beyond-that-length +This line is a violation because there are spaces beyond that length +This-line-is-okay-because-there-are-no-spaces-anywhere-within +``` + +In `strict` mode, the last three lines above are all violations. In `stern` +mode, the middle two lines above are both violations, but the last is okay. + +You have the option to exclude this rule for code blocks, tables, or headings. +To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. + +Code blocks are included in this rule by default since it is often a +requirement for document readability, and tentatively compatible with code +rules. Still, some languages do not lend themselves to short lines. + +Lines with link/image reference definitions and standalone lines (i.e., not part +of a paragraph) with only a link/image (possibly using (strong) emphasis) are +always exempted from this rule (even in `strict` mode) because there is often no +way to split such lines without breaking the URL. + +Rationale: Extremely long lines can be difficult to work with in some editors. +More information: . + + + +## `MD014` - Dollar signs used before commands without showing output + +Tags: `code` + +Aliases: `commands-show-output` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are code blocks showing shell commands to be +typed, and *all* of the shell commands are preceded by dollar signs ($): + + + +```markdown +$ ls +$ cat foo +$ less bar +``` + + + +The dollar signs are unnecessary in this situation, and should not be +included: + +```markdown +ls +cat foo +less bar +``` + +Showing output for commands preceded by dollar signs does not trigger this rule: + +```markdown +$ ls +foo bar +$ cat foo +Hello world +$ cat bar +baz +``` + +Because some commands do not produce output, it is not a violation if *some* +commands do not have output: + +```markdown +$ mkdir test +mkdir: created directory 'test' +$ ls test +``` + +Rationale: It is easier to copy/paste and less noisy if the dollar signs +are omitted when they are not needed. See + +for more information. + + + +## `MD018` - No space after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-missing-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing after the hash characters +in an atx style heading: + +```markdown +#Heading 1 + +##Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Violations of this rule can lead to improperly rendered content. + + + +## `MD019` - Multiple spaces after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-multiple-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in an atx style heading: + +```markdown +# Heading 1 + +## Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Extra space has no purpose and does not affect the rendering of +content. + + + +## `MD020` - No space inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-missing-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing inside the hash characters +in a closed atx style heading: + +```markdown +#Heading 1# + +##Heading 2## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading is missing spaces. + +Rationale: Violations of this rule can lead to improperly rendered content. + + + +## `MD021` - Multiple spaces inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-multiple-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in a closed atx style heading: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading contains multiple +spaces. + +Rationale: Extra space has no purpose and does not affect the rendering of +content. + + + +## `MD022` - Headings should be surrounded by blank lines + +Tags: `blank_lines`, `headings` + +Aliases: `blanks-around-headings` + +Parameters: + +- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) +- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when headings (any style) are either not preceded or not +followed by at least one blank line: + +```markdown +# Heading 1 +Some text + +Some more text +## Heading 2 +``` + +To fix this, ensure that all headings have a blank line both before and after +(except where the heading is at the beginning or end of the document): + +```markdown +# Heading 1 + +Some text + +Some more text + +## Heading 2 +``` + +The `lines_above` and `lines_below` parameters can be used to specify a +different number of blank lines (including `0`) above or below each heading. +If the value `-1` is used for either parameter, any number of blank lines is +allowed. To customize the number of lines above or below each heading level +individually, specify a `number[]` where values correspond to heading levels +1-6 (in order). + +Notes: If `lines_above` or `lines_below` are configured to require more than one +blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This +rule checks for *at least* as many blank lines as specified; any extra blank +lines are ignored. + +Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, +will not parse headings that don't have a blank line before, and will parse them +as regular text. + + + +## `MD023` - Headings must start at the beginning of the line + +Tags: `headings`, `spaces` + +Aliases: `heading-start-left` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a heading is indented by one or more spaces: + +```markdown +Some text + + # Indented heading +``` + +To fix this, ensure that all headings start at the beginning of the line: + +```markdown +Some text + +# Heading +``` + +Note that scenarios like block quotes "indent" the start of the line, so the +following is also correct: + +```markdown +> # Heading in Block Quote +``` + +Rationale: Headings that don't start at the beginning of the line will not be +parsed as headings, and will instead appear as regular text. + + + +## `MD024` - Multiple headings with the same content + +Tags: `headings` + +Aliases: `no-duplicate-heading` + +Parameters: + +- `siblings_only`: Only check sibling headings (`boolean`, default `false`) + +This rule is triggered if there are multiple headings in the document that have +the same text: + +```markdown +# Some text + +## Some text +``` + +To fix this, ensure that the content of each heading is different: + +```markdown +# Some text + +## Some more text +``` + +If the parameter `siblings_only` is set to `true`, duplication is allowed for +headings with different parents (as is common in changelogs): + +```markdown +# Change log + +## 1.0.0 + +### Features + +## 2.0.0 + +### Features +``` + +Rationale: Some Markdown parsers generate anchors for headings based on the +heading name; headings with the same content can cause problems with that. + + + +## `MD025` - Multiple top-level headings in the same document + +Tags: `headings` + +Aliases: `single-h1`, `single-title` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is triggered when a top-level heading is in use (the first line of +the file is an h1 heading), and more than one h1 heading is in use in the +document: + +```markdown +# Top level heading + +# Another top-level heading +``` + +To fix, structure your document so there is a single h1 heading that is +the title for the document. Subsequent headings must be +lower-level headings (h2, h3, etc.): + +```markdown +# Title + +## Heading + +## Another heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule treats +that as a top level heading and will report a violation for any subsequent +top-level headings. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: A top-level heading is an h1 on the first line of the file, and +serves as the title for the document. If this convention is in use, then there +can not be more than one title for the document, and the entire document should +be contained within this heading. + + + +## `MD026` - Trailing punctuation in heading + +Tags: `headings` + +Aliases: `no-trailing-punctuation` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any heading that has one of the specified normal or +full-width punctuation characters as the last character in the line: + +```markdown +# This is a heading. +``` + +To fix this, remove the trailing punctuation: + +```markdown +# This is a heading +``` + +Note: The `punctuation` parameter can be used to specify what characters count +as punctuation at the end of a heading. For example, you can change it to +`".,;:"` to allow headings that end with an exclamation point. `?` is +allowed by default because of how common it is in headings of FAQ-style +documents. Setting the `punctuation` parameter to `""` allows all characters - +and is equivalent to disabling the rule. + +Note: The trailing semicolon of [HTML entity references][html-entity-references] +like `©`, `©`, and `©` is ignored by this rule. + +Rationale: Headings are not meant to be full sentences. More information: +[Punctuation at the end of headers][end-punctuation]. + +[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers +[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references + + + +## `MD027` - Multiple spaces after blockquote symbol + +Tags: `blockquote`, `indentation`, `whitespace` + +Aliases: `no-multiple-space-blockquote` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when blockquotes have more than one space after the +blockquote (`>`) symbol: + +```markdown +> This is a blockquote with bad indentation +> there should only be one. +``` + +To fix, remove any extraneous space: + +```markdown +> This is a blockquote with correct +> indentation. +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD028` - Blank line inside blockquote + +Tags: `blockquote`, `whitespace` + +Aliases: `no-blanks-blockquote` + +This rule is triggered when two blockquote blocks are separated by nothing +except for a blank line: + +```markdown +> This is a blockquote +> which is immediately followed by + +> this blockquote. Unfortunately +> In some parsers, these are treated as the same blockquote. +``` + +To fix this, ensure that any blockquotes that are right next to each other +have some text in between: + +```markdown +> This is a blockquote. + +And Jimmy also said: + +> This too is a blockquote. +``` + +Alternatively, if they are supposed to be the same quote, then add the +blockquote symbol at the beginning of the blank line: + +```markdown +> This is a blockquote. +> +> This is the same blockquote. +``` + +Rationale: Some Markdown parsers will treat two blockquotes separated by one +or more blank lines as the same blockquote, while others will treat them as +separate blockquotes. + + + +## `MD029` - Ordered list item prefix + +Tags: `ol` + +Aliases: `ol-prefix` + +Parameters: + +- `style`: List style (`string`, default `one_or_ordered`, values `one` / + `one_or_ordered` / `ordered` / `zero`) + +This rule is triggered for ordered lists that do not either start with '1.' or +do not have a prefix that increases in numerical order (depending on the +configured style). The less-common pattern of using '0.' as a first prefix or +for all prefixes is also supported. + +Example valid list if the style is configured as 'one': + +```markdown +1. Do this. +1. Do that. +1. Done. +``` + +Examples of valid lists if the style is configured as 'ordered': + +```markdown +1. Do this. +2. Do that. +3. Done. +``` + +```markdown +0. Do this. +1. Do that. +2. Done. +``` + +All three examples are valid when the style is configured as 'one_or_ordered'. + +Example valid list if the style is configured as 'zero': + +```markdown +0. Do this. +0. Do that. +0. Done. +``` + +Example invalid list for all styles: + +```markdown +1. Do this. +3. Done. +``` + +This rule supports 0-prefixing ordered list items for uniform indentation: + +```markdown +... +08. Item +09. Item +10. Item +11. Item +... +``` + +Note: This rule will report violations for cases like the following where an +improperly-indented code block (or similar) appears between two list items and +"breaks" the list in two: + + + +~~~markdown +1. First list + +```text +Code block +``` + +1. Second list +~~~ + +The fix is to indent the code block so it becomes part of the preceding list +item as intended: + +~~~markdown +1. First list + + ```text + Code block + ``` + +2. Still first list +~~~ + + + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD030` - Spaces after list markers + +Tags: `ol`, `ul`, `whitespace` + +Aliases: `list-marker-space` + +Parameters: + +- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) +- `ol_single`: Spaces for single-line ordered list items (`integer`, default + `1`) +- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default + `1`) +- `ul_single`: Spaces for single-line unordered list items (`integer`, default + `1`) + +Fixable: Some violations can be fixed by tooling + +This rule checks for the number of spaces between a list marker (e.g. '`-`', +'`*`', '`+`' or '`1.`') and the text of the list item. + +The number of spaces checked for depends on the document style in use, but the +default is 1 space after any list marker: + +```markdown +* Foo +* Bar +* Baz + +1. Foo +1. Bar +1. Baz + +1. Foo + * Bar +1. Baz +``` + +A document style may change the number of spaces after unordered list items +and ordered list items independently, as well as based on whether the content +of every item in the list consists of a single paragraph or multiple +paragraphs (including sub-lists and code blocks). + +For example, the style guide at + +specifies that 1 space after the list marker should be used if every item in +the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered +and unordered lists respectively) if there are multiple paragraphs of content +inside the list: + +```markdown +* Foo +* Bar +* Baz +``` + +vs. + +```markdown +* Foo + + Second paragraph + +* Bar +``` + +or + +```markdown +1. Foo + + Second paragraph + +1. Bar +``` + +To fix this, ensure the correct number of spaces are used after the list marker +for your selected document style. + +Rationale: Violations of this rule can lead to improperly rendered content. + +Note: See [Prettier.md](Prettier.md) for compatibility information. + + + +## `MD031` - Fenced code blocks should be surrounded by blank lines + +Tags: `blank_lines`, `code` + +Aliases: `blanks-around-fences` + +Parameters: + +- `list_items`: Include list items (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when fenced code blocks are either not preceded or not +followed by a blank line: + +````markdown +Some text +``` +Code block +``` + +``` +Another code block +``` +Some more text +```` + +To fix this, ensure that all fenced code blocks have a blank line both before +and after (except where the block is at the beginning or end of the document): + +````markdown +Some text + +``` +Code block +``` + +``` +Another code block +``` + +Some more text +```` + +Set the `list_items` parameter to `false` to disable this rule for list items. +Disabling this behavior for lists can be useful if it is necessary to create a +[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. + +Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will +not parse fenced code blocks that don't have blank lines before and after them. + + + +## `MD032` - Lists should be surrounded by blank lines + +Tags: `blank_lines`, `bullet`, `ol`, `ul` + +Aliases: `blanks-around-lists` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when lists (of any kind) are either not preceded or not +followed by a blank line: + +```markdown +Some text +* List item +* List item + +1. List item +2. List item +*** +``` + +In the first case above, text immediately precedes the unordered list. In the +second case above, a thematic break immediately follows the ordered list. To fix +violations of this rule, ensure that all lists have a blank line both before and +after (except when the list is at the very beginning or end of the document): + +```markdown +Some text + +* List item +* List item + +1. List item +2. List item + +*** +``` + +Note that the following case is **not** a violation of this rule: + +```markdown +1. List item + More item 1 +2. List item +More item 2 +``` + +Although it is not indented, the text "More item 2" is referred to as a +[lazy continuation line][lazy-continuation] and considered part of the second +list item. + +Rationale: In addition to aesthetic reasons, some parsers, including kramdown, +will not parse lists that don't have blank lines before and after them. + +[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line + + + +## `MD033` - Inline HTML + +Tags: `html` + +Aliases: `no-inline-html` + +Parameters: + +- `allowed_elements`: Allowed elements (`string[]`, default `[]`) + +This rule is triggered whenever raw HTML is used in a Markdown document: + +```markdown +

          Inline HTML heading

          +``` + +To fix this, use 'pure' Markdown instead of including raw HTML: + +```markdown +# Markdown heading +``` + +Note: To allow specific HTML elements, use the `allowed_elements` parameter. + +Rationale: Raw HTML is allowed in Markdown, but this rule is included for +those who want their documents to only include "pure" Markdown, or for those +who are rendering Markdown documents into something other than HTML. + + + +## `MD034` - Bare URL used + +Tags: `links`, `url` + +Aliases: `no-bare-urls` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered whenever a URL or email address appears without +surrounding angle brackets: + +```markdown +For more info, visit https://www.example.com/ or email user@example.com. +``` + +To fix this, add angle brackets around the URL or email address: + +```markdown +For more info, visit or email . +``` + +If a URL or email address contains non-ASCII characters, it may be not be +handled as intended even when angle brackets are present. In such cases, +[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used +to comply with the required syntax for URL and email. + +Note: To include a bare URL or email without it being converted into a link, +wrap it in a code span: + +```markdown +Not a clickable link: `https://www.example.com` +``` + +Note: The following scenario does not trigger this rule because it could be a +shortcut link: + +```markdown +[https://www.example.com] +``` + +Note: The following syntax triggers this rule because the nested link could be +a shortcut link (which takes precedence): + +```markdown +[text [shortcut] text](https://example.com) +``` + +To avoid this, escape both inner brackets: + +```markdown +[link \[text\] link](https://example.com) +``` + +Rationale: Without angle brackets, a bare URL or email isn't converted into a +link by some Markdown parsers. + + + +## `MD035` - Horizontal rule style + +Tags: `hr` + +Aliases: `hr-style` + +Parameters: + +- `style`: Horizontal rule style (`string`, default `consistent`) + +This rule is triggered when inconsistent styles of horizontal rules are used +in the document: + +```markdown +--- + +- - - + +*** + +* * * + +**** +``` + +To fix this, use the same horizontal rule everywhere: + +```markdown +--- + +--- +``` + +The configured style can ensure all horizontal rules use a specific string or it +can ensure all horizontal rules match the first horizontal rule (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD036` - Emphasis used instead of a heading + +Tags: `emphasis`, `headings` + +Aliases: `no-emphasis-as-heading` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) + +This check looks for instances where emphasized (i.e. bold or italic) text is +used to separate sections, where a heading should be used instead: + +```markdown +**My document** + +Lorem ipsum dolor sit amet... + +_Another section_ + +Consectetur adipiscing elit, sed do eiusmod. +``` + +To fix this, use Markdown headings instead of emphasized text to denote +sections: + +```markdown +# My document + +Lorem ipsum dolor sit amet... + +## Another section + +Consectetur adipiscing elit, sed do eiusmod. +``` + +Note: This rule looks for single-line paragraphs that consist entirely +of emphasized text. It won't fire on emphasis used within regular text, +multi-line emphasized paragraphs, or paragraphs ending in punctuation +(normal or full-width). Similarly to rule MD026, you can configure what +characters are recognized as punctuation. + +Rationale: Using emphasis instead of a heading prevents tools from inferring +the structure of a document. More information: +. + + + +## `MD037` - Spaces inside emphasis markers + +Tags: `emphasis`, `whitespace` + +Aliases: `no-space-in-emphasis` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when emphasis markers (bold, italic) are used, but they +have spaces between the markers and the text: + +```markdown +Here is some ** bold ** text. + +Here is some * italic * text. + +Here is some more __ bold __ text. + +Here is some more _ italic _ text. +``` + +To fix this, remove the spaces around the emphasis markers: + +```markdown +Here is some **bold** text. + +Here is some *italic* text. + +Here is some more __bold__ text. + +Here is some more _italic_ text. +``` + +Rationale: Emphasis is only parsed as such when the asterisks/underscores +aren't surrounded by spaces. This rule attempts to detect where +they were surrounded by spaces, but it appears that emphasized text was +intended by the author. + + + +## `MD038` - Spaces inside code span elements + +Tags: `code`, `whitespace` + +Aliases: `no-space-in-code` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered for code span elements that have spaces adjacent to the +backticks: + +```markdown +`some text ` + +` some text` +``` + +To fix this, remove any spaces adjacent to the backticks: + +```markdown +`some text` +``` + +Note: A single leading and trailing space is allowed by the specification and +automatically trimmed (in order to allow for code spans that embed backticks): + +```markdown +`` `backticks` `` +``` + +Note: A single leading or trailing space is allowed if used to separate code +span markers from an embedded backtick (though the space is not trimmed): + +```markdown +`` ` embedded backtick`` +``` + +Rationale: Violations of this rule are usually unintentional and may lead to +improperly-rendered content. If spaces beside backticks are intentional, this +rule can be disabled for that line or file. + + + +## `MD039` - Spaces inside link text + +Tags: `links`, `whitespace` + +Aliases: `no-space-in-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on links that have spaces surrounding the link text: + +```markdown +[ a link ](https://www.example.com/) +``` + +To fix this, remove the spaces surrounding the link text: + +```markdown +[a link](https://www.example.com/) +``` + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD040` - Fenced code blocks should have a language specified + +Tags: `code`, `language` + +Aliases: `fenced-code-language` + +Parameters: + +- `allowed_languages`: List of languages (`string[]`, default `[]`) +- `language_only`: Require language only (`boolean`, default `false`) + +This rule is triggered when fenced code blocks are used, but a language isn't +specified: + +````markdown +``` +#!/bin/bash +echo Hello world +``` +```` + +To fix this, add a language specifier to the code block: + +````markdown +```bash +#!/bin/bash +echo Hello world +``` +```` + +To display a code block without syntax highlighting, use: + +````markdown +```text +Plain text in a code block +``` +```` + +You can configure the `allowed_languages` parameter to specify a list of +languages code blocks could use. Languages are case sensitive. The default value +is `[]` which means any language specifier is valid. + +You can prevent extra data from being present in the info string of fenced code +blocks. To do so, set the `language_only` parameter to `true`. + + +Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: +`ruby startline=3`) will trigger this rule. + +Rationale: Specifying a language improves content rendering by using the +correct syntax highlighting for code. More information: +. + + + +## `MD041` - First line in a file should be a top-level heading + +Tags: `headings` + +Aliases: `first-line-h1`, `first-line-heading` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is intended to ensure documents have a title and is triggered when +the first line in the file isn't a top-level (h1) heading: + +```markdown +This is a file without a heading +``` + +To fix this, add a top-level heading to the beginning of the file: + +```markdown +# File with heading + +This is a file with a top-level heading +``` + +Because it is common for projects on GitHub to use an image for the heading of +`README.md` and that is not well-supported by Markdown, HTML headings are also +permitted by this rule. For example: + +```markdown +

          + +This is a file with a top-level HTML heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule will not +report a violation. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: The top-level heading often acts as the title of a document. More +information: . + + + +## `MD042` - No empty links + +Tags: `links` + +Aliases: `no-empty-links` + +This rule is triggered when an empty link is encountered: + +```markdown +[an empty link]() +``` + +To fix the violation, provide a destination for the link: + +```markdown +[a valid link](https://example.com/) +``` + +Empty fragments will trigger this rule: + +```markdown +[an empty fragment](#) +``` + +But non-empty fragments will not: + +```markdown +[a valid fragment](#fragment) +``` + +Rationale: Empty links do not lead anywhere and therefore don't function as +links. + + + +## `MD043` - Required heading structure + +Tags: `headings` + +Aliases: `required-headings` + +Parameters: + +- `headings`: List of headings (`string[]`, default `[]`) +- `match_case`: Match case of headings (`boolean`, default `false`) + +This rule is triggered when the headings in a file do not match the array of +headings passed to the rule. It can be used to enforce a standard heading +structure for a set of files. + +To require exactly the following structure: + +```markdown +# Head +## Item +### Detail +``` + +Set the `headings` parameter to: + +```json +[ + "# Head", + "## Item", + "### Detail" +] +``` + +To allow optional headings as with the following structure: + +```markdown +# Head +## Item +### Detail (optional) +## Foot +### Notes (optional) +``` + +Use the special value `"*"` meaning "zero or more unspecified headings" or the +special value `"+"` meaning "one or more unspecified headings" and set the +`headings` parameter to: + +```json +[ + "# Head", + "## Item", + "*", + "## Foot", + "*" +] +``` + +When an error is detected, this rule outputs the line number of the first +problematic heading (otherwise, it outputs the last line number of the file). + +Note that while the `headings` parameter uses the "## Text" ATX heading style +for simplicity, a file may use any supported heading style. + +By default, the case of headings in the document is not required to match that +of `headings`. To require that case match exactly, set the `match_case` +parameter to `true`. + +Rationale: Projects may wish to enforce a consistent document structure across +a set of similar content. + + + +## `MD044` - Proper names should have the correct capitalization + +Tags: `spelling` + +Aliases: `proper-names` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `html_elements`: Include HTML elements (`boolean`, default `true`) +- `names`: List of proper names (`string[]`, default `[]`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when any of the strings in the `names` array do not have +the specified capitalization. It can be used to enforce a standard letter case +for the names of projects and products. + +For example, the language "JavaScript" is usually written with both the 'J' and +'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To +enforce the proper capitalization, specify the desired letter case in the +`names` array: + +```json +[ + "JavaScript" +] +``` + +Sometimes a proper name is capitalized differently in certain contexts. In such +cases, add both forms to the `names` array: + +```json +[ + "GitHub", + "github.com" +] +``` + +Set the `code_blocks` parameter to `false` to disable this rule for code blocks +and spans. Set the `html_elements` parameter to `false` to disable this rule +for HTML elements and attributes (such as when using a proper name as part of +a path for `a`/`href` or `img`/`src`). + +Rationale: Incorrect capitalization of proper names is usually a mistake. + + + +## `MD045` - Images should have alternate text (alt text) + +Tags: `accessibility`, `images` + +Aliases: `no-alt-text` + +This rule is triggered when an image is missing alternate text (alt text) +information. + +Alternate text is commonly specified inline as: + +```markdown +![Alternate text](image.jpg) +``` + +Or with reference syntax as: + +```markdown +![Alternate text][ref] + +... + +[ref]: image.jpg "Optional title" +``` + +Or with HTML as: + +```html +Alternate text +``` + +Guidance for writing alternate text is available from the [W3C][w3c], +[Wikipedia][wikipedia], and [other locations][phase2technology]. + +Rationale: Alternate text is important for accessibility and describes the +content of an image for people who may not be able to see it. + +[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses +[w3c]: https://www.w3.org/WAI/alt/ +[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute + + + +## `MD046` - Code block style + +Tags: `code` + +Aliases: `code-block-style` + +Parameters: + +- `style`: Block style (`string`, default `consistent`, values `consistent` / + `fenced` / `indented`) + +This rule is triggered when unwanted or different code block styles are used in +the same document. + +In the default configuration this rule reports a violation for the following +document: + + + + Some text. + + # Indented code + + More text. + + ```ruby + # Fenced code + ``` + + More text. + + + +To fix violations of this rule, use a consistent style (either indenting or code +fences). + +The configured code block style can be specific (`fenced`, `indented`) or can +require all code blocks match the first code block (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD047` - Files should end with a single newline character + +Tags: `blank_lines` + +Aliases: `single-trailing-newline` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there is not a single newline character at the end +of a file. + +An example that triggers the rule: + +```markdown +# Heading + +This file ends without a newline.[EOF] +``` + +To fix the violation, add a newline character to the end of the file: + +```markdown +# Heading + +This file ends with a newline. +[EOF] +``` + +Rationale: Some programs have trouble with files that do not end with a newline. + +More information: [What's the point in adding a new line to the end of a +file?][stack-exchange] + +[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file + + + +## `MD048` - Code fence style + +Tags: `code` + +Aliases: `code-fence-style` + +Parameters: + +- `style`: Code fence style (`string`, default `consistent`, values `backtick` + / `consistent` / `tilde`) + +This rule is triggered when the symbols used in the document for fenced code +blocks do not match the configured code fence style: + +````markdown +```ruby +# Fenced code +``` + +~~~ruby +# Fenced code +~~~ +```` + +To fix this issue, use the configured code fence style throughout the +document: + +````markdown +```ruby +# Fenced code +``` + +```ruby +# Fenced code +``` +```` + +The configured code fence style can be a specific symbol to use (`backtick`, +`tilde`) or it can require all code fences match the first code fence +(`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD049` - Emphasis style + +Tags: `emphasis` + +Aliases: `emphasis-style` + +Parameters: + +- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for emphasis do not +match the configured emphasis style: + +```markdown +*Text* +_Text_ +``` + +To fix this issue, use the configured emphasis style throughout the document: + +```markdown +*Text* +*Text* +``` + +The configured emphasis style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all emphasis matches the first emphasis +(`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like_this_one. + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD050` - Strong style + +Tags: `emphasis` + +Aliases: `strong-style` + +Parameters: + +- `style`: Strong style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for strong do not +match the configured strong style: + +```markdown +**Text** +__Text__ +``` + +To fix this issue, use the configured strong style throughout the document: + +```markdown +**Text** +**Text** +``` + +The configured strong style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all strong matches the first strong (`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like__this__one. + +Rationale: Consistent formatting makes it easier to understand a document. + + + +## `MD051` - Link fragments should be valid + +Tags: `links` + +Aliases: `link-fragments` + +Parameters: + +- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a link fragment does not match any of the fragments +that are automatically generated for headings in a document: + +```markdown +# Heading Name + +[Link](#fragment) +``` + +To fix this issue, change the link fragment to reference an existing heading's +generated name (see below): + +```markdown +# Heading Name + +[Link](#heading-name) +``` + +For consistency, this rule requires fragments to exactly match the [GitHub +heading algorithm][github-heading-algorithm] which converts letters to +lowercase. Therefore, the following example is reported as a violation: + +```markdown +# Heading Name + +[Link](#Heading-Name) +``` + +To ignore case when comparing fragments with heading names, the `ignore_case` +parameter can be set to `true`. In this configuration, the previous example is +not reported as a violation. + +Alternatively, some platforms allow the syntax `{#named-anchor}` to be used +within a heading to provide a specific name (consisting of only lower-case +letters, numbers, `-`, and `_`): + +```markdown +# Heading Name {#custom-name} + +[Link](#custom-name) +``` + +Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` +attribute can be used to define a fragment: + +```markdown + + +[Link](#bookmark) +``` + +An `a` tag can be useful in scenarios where a heading is not appropriate or for +control over the text of the fragment identifier. + +This rule also recognizes the custom fragment syntax used by GitHub to highlight +[specific content in a document][github-linking-to-content]. + +For example, this link to line 20: + +```markdown +[Link](#L20) +``` + +And this link to content starting within line 19 running into line 21: + +```markdown +[Link](#L19C5-L21C11) +``` + +Rationale: [GitHub section links][github-section-links] are created +automatically for every heading when Markdown content is displayed on GitHub. +This makes it easy to link directly to different sections within a document. +However, section links change if headings are renamed or removed. This rule +helps identify broken section links within a document. + +Section links are **not** part of the CommonMark specification. This rule +enforces the [GitHub heading algorithm][github-heading-algorithm] which is: +convert heading to lowercase, remove punctuation, convert spaces to dashes, +append an incrementing integer as needed for uniqueness. + +[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links +[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb +[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown + + + +## `MD052` - Reference links and images should use a label that is defined + +Tags: `images`, `links` + +Aliases: `reference-links-images` + +Parameters: + +- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) + +Links and images in Markdown can provide the link destination or image source +at the time of use or can define it elsewhere and use a label for reference. +The reference format is convenient for keeping paragraph text clutter-free +and makes it easy to reuse the same URL in multiple places. + +There are three kinds of reference links and images: + +```markdown +Full: [text][label] +Collapsed: [label][] +Shortcut: [label] + +Full: ![text][image] +Collapsed: ![image][] +Shortcut: ![image] + +[label]: https://example.com/label +[image]: https://example.com/image +``` + +A link or image renders correctly when the corresponding label is defined, but +displays as text with brackets when the label is not present. By default, this +rule warns of undefined labels for "full" and "collapsed" reference syntax but +not for "shortcut" syntax because it is ambiguous. + +The text `[example]` could be a shortcut link or the text "example" in brackets, +so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set +the `include_shortcut` parameter to `true`. Note that doing so produces warnings +for *all* text in the document that *could* be a shortcut. If bracketed text is +intentional, brackets can be escaped with the `\` character: `\[example\]`. + + + +## `MD053` - Link and image reference definitions should be needed + +Tags: `images`, `links` + +Aliases: `link-image-reference-definitions` + +Parameters: + +- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source +at the time of use or can use a label to reference a definition elsewhere in +the document. The latter reference format is convenient for keeping paragraph +text clutter-free and makes it easy to reuse the same URL in multiple places. + +Because link and image reference definitions are located separately from +where they are used, there are two scenarios where a definition can be +unnecessary: + +1. If a label is not referenced by any link or image in a document, that + definition is unused and can be deleted. +2. If a label is defined multiple times in a document, the first definition is + used and the others can be deleted. + +This rule considers a reference definition to be used if any link or image +reference has the corresponding label. The "full", "collapsed", and "shortcut" +formats are all supported. + +If there are reference definitions that are deliberately unreferenced, they can +be ignored by setting the `ignored_definitions` parameter. The default value of +this parameter ignores the following convention for adding non-HTML comments to +Markdown: + +```markdown +[//]: # (This behaves like a comment) +``` + + + +## `MD054` - Link and image style + +Tags: `images`, `links` + +Aliases: `link-image-style` + +Parameters: + +- `autolink`: Allow autolinks (`boolean`, default `true`) +- `collapsed`: Allow collapsed reference links and images (`boolean`, default + `true`) +- `full`: Allow full reference links and images (`boolean`, default `true`) +- `inline`: Allow inline links and images (`boolean`, default `true`) +- `shortcut`: Allow shortcut reference links and images (`boolean`, default + `true`) +- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source at +the time of use or can use a label to reference a definition elsewhere in the +document. The three reference formats are convenient for keeping paragraph text +clutter-free and make it easy to reuse the same URL in multiple places. + +By default, this rule allows all link/image styles. + +Setting the `autolink` parameter to `false` disables autolinks: + +```markdown + +``` + +Setting the `inline` parameter to `false` disables inline links and images: + +```markdown +[link](https://example.com) + +![image](https://example.com) +``` + +Setting the `full` parameter to `false` disables full reference links and +images: + +```markdown +[link][url] + +![image][url] + +[url]: https://example.com +``` + +Setting the `collapsed` parameter to `false` disables collapsed reference links +and images: + +```markdown +[url][] + +![url][] + +[url]: https://example.com +``` + +Setting the `shortcut` parameter to `false` disables shortcut reference links +and images: + +```markdown +[url] + +![url] + +[url]: https://example.com +``` + +To fix violations of this rule, change the link or image to use an allowed +style. This rule can automatically fix violations when a link or image can be +converted to the `inline` style (preferred) or a link can be converted to the +`autolink` style (which does not support images and must be an absolute URL). +This rule does *not* fix scenarios that require converting a link or image to +the `full`, `collapsed`, or `shortcut` reference styles because that involves +naming the reference and determining where to insert it in the document. + +Setting the `url_inline` parameter to `false` prevents the use of inline links +with the same absolute URL text/destination and no title because such links can +be converted to autolinks: + +```markdown +[https://example.com](https://example.com) +``` + +To fix `url_inline` violations, use the simpler autolink syntax instead: + +```markdown + +``` + +Rationale: Consistent formatting makes it easier to understand a document. +Autolinks are concise, but appear as URLs which can be long and confusing. +Inline links and images can include descriptive text, but take up more space in +Markdown form. Reference links and images can be easier to read and manipulate +in Markdown form, but require a separate link reference definition. + + + +## `MD055` - Table pipe style + +Tags: `table` + +Aliases: `table-pipe-style` + +Parameters: + +- `style`: Table pipe style (`string`, default `consistent`, values + `consistent` / `leading_and_trailing` / `leading_only` / + `no_leading_or_trailing` / `trailing_only`) + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] +is inconsistent about its use of leading and trailing pipe characters (`|`). + +By default (`consistent` style), the header row of the first table in a document +is used to determine the style that is enforced for every table in the document. +A specific style can be used instead (`leading_and_trailing`, `leading_only`, +`no_leading_or_trailing`, `trailing_only`). + +This table's header row has leading and trailing pipes, but its delimiter row is +missing the trailing pipe and its first row of cells is missing the leading +pipe: + +```markdown +| Header | Header | +| ------ | ------ + Cell | Cell | +``` + +To fix these issues, make sure there is a pipe character at the beginning and +end of every row: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and may also +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table +``` + +Rationale: Some parsers have difficulty with tables that are missing their +leading or trailing pipe characters. The use of leading/trailing pipes can also +help provide visual clarity. + +[gfm-table-055]: https://github.github.com/gfm/#tables-extension- + + + +## `MD056` - Table column count + +Tags: `table` + +Aliases: `table-column-count` + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] +does not have the same number of cells in every row. + +This table's second data row has too few cells and its third data row has too +many cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | +| Cell | Cell | Cell | +``` + +To fix these issues, ensure every row has the same number of cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | Cell | +| Cell | Cell | +``` + +Note that a table's header row and its delimiter row must have the same number +of cells or it will not be recognized as a table (per specification). + +Rationale: Extra cells in a row are usually not shown, so their data is lost. +Missing cells in a row create holes in the table and suggest an omission. + +[gfm-table-056]: https://github.github.com/gfm/#tables-extension- + + + +## `MD058` - Tables should be surrounded by blank lines + +Tags: `table` + +Aliases: `blanks-around-tables` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when tables are either not preceded or not followed by a +blank line: + +```markdown +Some text +| Header | Header | +| ------ | ------ | +| Cell | Cell | +> Blockquote +``` + +To fix violations of this rule, ensure that all tables have a blank line both +before and after (except when the table is at the very beginning or end of the +document): + +```markdown +Some text + +| Header | Header | +| ------ | ------ | +| Cell | Cell | + +> Blockquote +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and will not +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table and the next line is blank + +Some text +``` + +Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse +tables that don't have blank lines before and after them. + + diff --git a/node_modules/markdownlint/doc/md001.md b/node_modules/markdownlint/doc/md001.md new file mode 100644 index 0000000000..72eff27136 --- /dev/null +++ b/node_modules/markdownlint/doc/md001.md @@ -0,0 +1,37 @@ +# `MD001` - Heading levels should only increment by one level at a time + +Tags: `headings` + +Aliases: `heading-increment` + +This rule is triggered when you skip heading levels in a Markdown document, for +example: + +```markdown +# Heading 1 + +### Heading 3 + +We skipped out a 2nd level heading in this document +``` + +When using multiple heading levels, nested headings should increase by only one +level at a time: + +```markdown +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +## Another Heading 2 + +### Another Heading 3 +``` + +Rationale: Headings represent the structure of a document and can be confusing +when skipped - especially for accessibility scenarios. More information: +. diff --git a/node_modules/markdownlint/doc/md003.md b/node_modules/markdownlint/doc/md003.md new file mode 100644 index 0000000000..82da87755a --- /dev/null +++ b/node_modules/markdownlint/doc/md003.md @@ -0,0 +1,59 @@ +# `MD003` - Heading style + +Tags: `headings` + +Aliases: `heading-style` + +Parameters: + +- `style`: Heading style (`string`, default `consistent`, values `atx` / + `atx_closed` / `consistent` / `setext` / `setext_with_atx` / + `setext_with_atx_closed`) + +This rule is triggered when different heading styles are used in the same +document: + +```markdown +# ATX style H1 + +## Closed ATX style H2 ## + +Setext style H1 +=============== +``` + +To fix the issue, use consistent heading styles throughout the document: + +```markdown +# ATX style H1 + +## ATX style H2 +``` + +The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style +headings of level 3 or more in documents with setext-style headings (which only +support level 1 and 2 headings): + +```markdown +Setext style H1 +=============== + +Setext style H2 +--------------- + +### ATX style H3 +``` + +Note: The configured heading style can be a specific style to require (`atx`, +`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can +require that all heading styles match the first heading style via `consistent`. + +Note: The placement of a horizontal rule directly below a line of text can +trigger this rule by turning that text into a level 2 setext-style heading: + +```markdown +A line of text followed by a horizontal rule becomes a heading +--- +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md004.md b/node_modules/markdownlint/doc/md004.md new file mode 100644 index 0000000000..fa1576b5ac --- /dev/null +++ b/node_modules/markdownlint/doc/md004.md @@ -0,0 +1,50 @@ +# `MD004` - Unordered list style + +Tags: `bullet`, `ul` + +Aliases: `ul-style` + +Parameters: + +- `style`: List style (`string`, default `consistent`, values `asterisk` / + `consistent` / `dash` / `plus` / `sublist`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for unordered +list items do not match the configured unordered list style: + +```markdown +* Item 1 ++ Item 2 +- Item 3 +``` + +To fix this issue, use the configured style for list items throughout the +document: + +```markdown +* Item 1 +* Item 2 +* Item 3 +``` + +The configured list style can ensure all list styling is a specific symbol +(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that +differs from its parent list (`sublist`), or ensure all list styles match the +first list style (`consistent`). + +For example, the following is valid for the `sublist` style because the +outer-most indent uses asterisk, the middle indent uses plus, and the inner-most +indent uses dash: + +```markdown +* Item 1 + + Item 2 + - Item 3 + + Item 4 +* Item 4 + + Item 5 +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md005.md b/node_modules/markdownlint/doc/md005.md new file mode 100644 index 0000000000..375b643886 --- /dev/null +++ b/node_modules/markdownlint/doc/md005.md @@ -0,0 +1,53 @@ +# `MD005` - Inconsistent indentation for list items at the same level + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `list-indent` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are parsed as being at the same level, +but don't have the same indentation: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * A misaligned item +``` + +Usually, this rule will be triggered because of a typo. Correct the indentation +for the list to fix it: + +```markdown +* Item 1 + * Nested Item 1 + * Nested Item 2 + * Nested Item 3 +``` + +Sequentially-ordered list markers are usually left-aligned such that all items +have the same starting column: + +```markdown +... +8. Item +9. Item +10. Item +11. Item +... +``` + +This rule also supports right-alignment of list markers such that all items have +the same ending column: + +```markdown +... + 8. Item + 9. Item +10. Item +11. Item +... +``` + +Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md007.md b/node_modules/markdownlint/doc/md007.md new file mode 100644 index 0000000000..7dd7ed7165 --- /dev/null +++ b/node_modules/markdownlint/doc/md007.md @@ -0,0 +1,52 @@ +# `MD007` - Unordered list indentation + +Tags: `bullet`, `indentation`, `ul` + +Aliases: `ul-indent` + +Parameters: + +- `indent`: Spaces for indent (`integer`, default `2`) +- `start_indent`: Spaces for first level indent (when start_indented is set) + (`integer`, default `2`) +- `start_indented`: Whether to indent the first level of the list (`boolean`, + default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when list items are not indented by the configured +number of spaces (default: 2). + +Example: + +```markdown +* List item + * Nested list item indented by 3 spaces +``` + +Corrected Example: + +```markdown +* List item + * Nested list item indented by 2 spaces +``` + +Note: This rule applies to a sublist only if its parent lists are all also +unordered (otherwise, extra indentation of ordered lists interferes with the +rule). + +The `start_indented` parameter allows the first level of lists to be indented by +the configured number of spaces rather than starting at zero. The `start_indent` +parameter allows the first level of lists to be indented by a different number +of spaces than the rest (ignored when `start_indented` is not set). + +Rationale: Indenting by 2 spaces allows the content of a nested list to be in +line with the start of the content of the parent list when a single space is +used after the list marker. Indenting by 4 spaces is consistent with code blocks +and simpler for editors to implement. Additionally, this can be a compatibility +issue for other Markdown parsers, which require 4-space indents. More +information: [Markdown Style Guide][markdown-style-guide]. + +Note: See [Prettier.md](Prettier.md) for compatibility information. + +[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists diff --git a/node_modules/markdownlint/doc/md009.md b/node_modules/markdownlint/doc/md009.md new file mode 100644 index 0000000000..180008bc71 --- /dev/null +++ b/node_modules/markdownlint/doc/md009.md @@ -0,0 +1,51 @@ +# `MD009` - Trailing spaces + +Tags: `whitespace` + +Aliases: `no-trailing-spaces` + +Parameters: + +- `br_spaces`: Spaces for line break (`integer`, default `2`) +- `list_item_empty_lines`: Allow spaces for empty lines in list items + (`boolean`, default `false`) +- `strict`: Include unnecessary breaks (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any lines that end with unexpected whitespace. To fix +this, remove the trailing space from the end of the line. + +Note: Trailing space is allowed in indented and fenced code blocks because some +languages require it. + +The `br_spaces` parameter allows an exception to this rule for a specific number +of trailing spaces, typically used to insert an explicit line break. The default +value allows 2 spaces to indicate a hard break (\
          element). + +Note: You must set `br_spaces` to a value >= 2 for this parameter to take +effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing +spaces. + +By default, this rule will not trigger when the allowed number of spaces is +used, even when it doesn't create a hard break (for example, at the end of a +paragraph). To report such instances as well, set the `strict` parameter to +`true`. + +```markdown +Text text text +text[2 spaces] +``` + +Using spaces to indent blank lines inside a list item is usually not necessary, +but some parsers require it. Set the `list_item_empty_lines` parameter to `true` +to allow this (even when `strict` is `true`): + +```markdown +- list item text + [2 spaces] + list item text +``` + +Rationale: Except when being used to create a line break, trailing whitespace +has no purpose and does not affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md010.md b/node_modules/markdownlint/doc/md010.md new file mode 100644 index 0000000000..95c0ce29f8 --- /dev/null +++ b/node_modules/markdownlint/doc/md010.md @@ -0,0 +1,56 @@ +# `MD010` - Hard tabs + +Tags: `hard_tab`, `whitespace` + +Aliases: `no-hard-tabs` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default + `[]`) +- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered by any lines that contain hard tab characters instead +of using spaces for indentation. To fix this, replace any hard tab characters +with spaces instead. + +Example: + + + +```markdown +Some text + + * hard tab character used to indent the list item +``` + + + +Corrected example: + +```markdown +Some text + + * Spaces used to indent the list item instead +``` + +You have the option to exclude this rule for code blocks and spans. To do so, +set the `code_blocks` parameter to `false`. Code blocks and spans are included +by default since handling of tabs by Markdown tools can be inconsistent (e.g., +using 4 vs. 8 spaces). + +When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), +the `ignore_code_languages` parameter can be set to a list of languages that +should be ignored (i.e., hard tabs will be allowed, though not required). This +makes it easier for documents to include code for languages that require hard +tabs. + +By default, violations of this rule are fixed by replacing the tab with 1 space +character. To use a different number of spaces, set the `spaces_per_tab` +parameter to the desired value. + +Rationale: Hard tabs are often rendered inconsistently by different editors and +can be harder to work with than spaces. diff --git a/node_modules/markdownlint/doc/md011.md b/node_modules/markdownlint/doc/md011.md new file mode 100644 index 0000000000..d574b34aa3 --- /dev/null +++ b/node_modules/markdownlint/doc/md011.md @@ -0,0 +1,30 @@ +# `MD011` - Reversed link syntax + +Tags: `links` + +Aliases: `no-reversed-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when text that appears to be a link is encountered, but +where the syntax appears to have been reversed (the `[]` and `()` are +reversed): + +```markdown +(Incorrect link syntax)[https://www.example.com/] +``` + +To fix this, swap the `[]` and `()` around: + +```markdown +[Correct link syntax](https://www.example.com/) +``` + +Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style +footnotes do not trigger this rule: + +```markdown +For (example)[^1] +``` + +Rationale: Reversed links are not rendered as usable links. diff --git a/node_modules/markdownlint/doc/md012.md b/node_modules/markdownlint/doc/md012.md new file mode 100644 index 0000000000..438c9fa643 --- /dev/null +++ b/node_modules/markdownlint/doc/md012.md @@ -0,0 +1,38 @@ +# `MD012` - Multiple consecutive blank lines + +Tags: `blank_lines`, `whitespace` + +Aliases: `no-multiple-blanks` + +Parameters: + +- `maximum`: Consecutive blank lines (`integer`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are multiple consecutive blank lines in the +document: + +```markdown +Some text here + + +Some more text here +``` + +To fix this, delete the offending lines: + +```markdown +Some text here + +Some more text here +``` + +Note: this rule will not be triggered if there are multiple consecutive blank +lines inside code blocks. + +Note: The `maximum` parameter can be used to configure the maximum number of +consecutive blank lines. + +Rationale: Except in a code block, blank lines serve no purpose and do not +affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md013.md b/node_modules/markdownlint/doc/md013.md new file mode 100644 index 0000000000..e4ac8ac123 --- /dev/null +++ b/node_modules/markdownlint/doc/md013.md @@ -0,0 +1,58 @@ +# `MD013` - Line length + +Tags: `line_length` + +Aliases: `line-length` + +Parameters: + +- `code_block_line_length`: Number of characters for code blocks (`integer`, + default `80`) +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `heading_line_length`: Number of characters for headings (`integer`, default + `80`) +- `headings`: Include headings (`boolean`, default `true`) +- `line_length`: Number of characters (`integer`, default `80`) +- `stern`: Stern length checking (`boolean`, default `false`) +- `strict`: Strict length checking (`boolean`, default `false`) +- `tables`: Include tables (`boolean`, default `true`) + +This rule is triggered when there are lines that are longer than the +configured `line_length` (default: 80 characters). To fix this, split the line +up into multiple lines. To set a different maximum length for headings, use +`heading_line_length`. To set a different maximum length for code blocks, use +`code_block_line_length` + +This rule has an exception when there is no whitespace beyond the configured +line length. This allows you to include items such as long URLs without being +forced to break them in the middle. To disable this exception, set the `strict` +parameter to `true` and an issue will be reported when any line is too long. To +warn for lines that are too long and could be fixed but allow long lines +without spaces, set the `stern` parameter to `true`. + +For example (assuming normal behavior): + +```markdown +IF THIS LINE IS THE MAXIMUM LENGTH +This line is okay because there are-no-spaces-beyond-that-length +This line is a violation because there are spaces beyond that length +This-line-is-okay-because-there-are-no-spaces-anywhere-within +``` + +In `strict` mode, the last three lines above are all violations. In `stern` +mode, the middle two lines above are both violations, but the last is okay. + +You have the option to exclude this rule for code blocks, tables, or headings. +To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. + +Code blocks are included in this rule by default since it is often a +requirement for document readability, and tentatively compatible with code +rules. Still, some languages do not lend themselves to short lines. + +Lines with link/image reference definitions and standalone lines (i.e., not part +of a paragraph) with only a link/image (possibly using (strong) emphasis) are +always exempted from this rule (even in `strict` mode) because there is often no +way to split such lines without breaking the URL. + +Rationale: Extremely long lines can be difficult to work with in some editors. +More information: . diff --git a/node_modules/markdownlint/doc/md014.md b/node_modules/markdownlint/doc/md014.md new file mode 100644 index 0000000000..0786dfa343 --- /dev/null +++ b/node_modules/markdownlint/doc/md014.md @@ -0,0 +1,54 @@ +# `MD014` - Dollar signs used before commands without showing output + +Tags: `code` + +Aliases: `commands-show-output` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there are code blocks showing shell commands to be +typed, and *all* of the shell commands are preceded by dollar signs ($): + + + +```markdown +$ ls +$ cat foo +$ less bar +``` + + + +The dollar signs are unnecessary in this situation, and should not be +included: + +```markdown +ls +cat foo +less bar +``` + +Showing output for commands preceded by dollar signs does not trigger this rule: + +```markdown +$ ls +foo bar +$ cat foo +Hello world +$ cat bar +baz +``` + +Because some commands do not produce output, it is not a violation if *some* +commands do not have output: + +```markdown +$ mkdir test +mkdir: created directory 'test' +$ ls test +``` + +Rationale: It is easier to copy/paste and less noisy if the dollar signs +are omitted when they are not needed. See + +for more information. diff --git a/node_modules/markdownlint/doc/md018.md b/node_modules/markdownlint/doc/md018.md new file mode 100644 index 0000000000..870297a8aa --- /dev/null +++ b/node_modules/markdownlint/doc/md018.md @@ -0,0 +1,27 @@ +# `MD018` - No space after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-missing-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing after the hash characters +in an atx style heading: + +```markdown +#Heading 1 + +##Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md019.md b/node_modules/markdownlint/doc/md019.md new file mode 100644 index 0000000000..4bcb44f643 --- /dev/null +++ b/node_modules/markdownlint/doc/md019.md @@ -0,0 +1,28 @@ +# `MD019` - Multiple spaces after hash on atx style heading + +Tags: `atx`, `headings`, `spaces` + +Aliases: `no-multiple-space-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in an atx style heading: + +```markdown +# Heading 1 + +## Heading 2 +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 + +## Heading 2 +``` + +Rationale: Extra space has no purpose and does not affect the rendering of +content. diff --git a/node_modules/markdownlint/doc/md020.md b/node_modules/markdownlint/doc/md020.md new file mode 100644 index 0000000000..f711b26036 --- /dev/null +++ b/node_modules/markdownlint/doc/md020.md @@ -0,0 +1,29 @@ +# `MD020` - No space inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-missing-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when spaces are missing inside the hash characters +in a closed atx style heading: + +```markdown +#Heading 1# + +##Heading 2## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading is missing spaces. + +Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md021.md b/node_modules/markdownlint/doc/md021.md new file mode 100644 index 0000000000..5aa99a615f --- /dev/null +++ b/node_modules/markdownlint/doc/md021.md @@ -0,0 +1,31 @@ +# `MD021` - Multiple spaces inside hashes on closed atx style heading + +Tags: `atx_closed`, `headings`, `spaces` + +Aliases: `no-multiple-space-closed-atx` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when more than one space is used to separate the +heading text from the hash characters in a closed atx style heading: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +To fix this, separate the heading text from the hash character by a single +space: + +```markdown +# Heading 1 # + +## Heading 2 ## +``` + +Note: this rule will fire if either side of the heading contains multiple +spaces. + +Rationale: Extra space has no purpose and does not affect the rendering of +content. diff --git a/node_modules/markdownlint/doc/md022.md b/node_modules/markdownlint/doc/md022.md new file mode 100644 index 0000000000..c05edcc05c --- /dev/null +++ b/node_modules/markdownlint/doc/md022.md @@ -0,0 +1,52 @@ +# `MD022` - Headings should be surrounded by blank lines + +Tags: `blank_lines`, `headings` + +Aliases: `blanks-around-headings` + +Parameters: + +- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) +- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when headings (any style) are either not preceded or not +followed by at least one blank line: + +```markdown +# Heading 1 +Some text + +Some more text +## Heading 2 +``` + +To fix this, ensure that all headings have a blank line both before and after +(except where the heading is at the beginning or end of the document): + +```markdown +# Heading 1 + +Some text + +Some more text + +## Heading 2 +``` + +The `lines_above` and `lines_below` parameters can be used to specify a +different number of blank lines (including `0`) above or below each heading. +If the value `-1` is used for either parameter, any number of blank lines is +allowed. To customize the number of lines above or below each heading level +individually, specify a `number[]` where values correspond to heading levels +1-6 (in order). + +Notes: If `lines_above` or `lines_below` are configured to require more than one +blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This +rule checks for *at least* as many blank lines as specified; any extra blank +lines are ignored. + +Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, +will not parse headings that don't have a blank line before, and will parse them +as regular text. diff --git a/node_modules/markdownlint/doc/md023.md b/node_modules/markdownlint/doc/md023.md new file mode 100644 index 0000000000..1644451b49 --- /dev/null +++ b/node_modules/markdownlint/doc/md023.md @@ -0,0 +1,33 @@ +# `MD023` - Headings must start at the beginning of the line + +Tags: `headings`, `spaces` + +Aliases: `heading-start-left` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a heading is indented by one or more spaces: + +```markdown +Some text + + # Indented heading +``` + +To fix this, ensure that all headings start at the beginning of the line: + +```markdown +Some text + +# Heading +``` + +Note that scenarios like block quotes "indent" the start of the line, so the +following is also correct: + +```markdown +> # Heading in Block Quote +``` + +Rationale: Headings that don't start at the beginning of the line will not be +parsed as headings, and will instead appear as regular text. diff --git a/node_modules/markdownlint/doc/md024.md b/node_modules/markdownlint/doc/md024.md new file mode 100644 index 0000000000..5c26c71201 --- /dev/null +++ b/node_modules/markdownlint/doc/md024.md @@ -0,0 +1,44 @@ +# `MD024` - Multiple headings with the same content + +Tags: `headings` + +Aliases: `no-duplicate-heading` + +Parameters: + +- `siblings_only`: Only check sibling headings (`boolean`, default `false`) + +This rule is triggered if there are multiple headings in the document that have +the same text: + +```markdown +# Some text + +## Some text +``` + +To fix this, ensure that the content of each heading is different: + +```markdown +# Some text + +## Some more text +``` + +If the parameter `siblings_only` is set to `true`, duplication is allowed for +headings with different parents (as is common in changelogs): + +```markdown +# Change log + +## 1.0.0 + +### Features + +## 2.0.0 + +### Features +``` + +Rationale: Some Markdown parsers generate anchors for headings based on the +heading name; headings with the same content can cause problems with that. diff --git a/node_modules/markdownlint/doc/md025.md b/node_modules/markdownlint/doc/md025.md new file mode 100644 index 0000000000..7c764b33d5 --- /dev/null +++ b/node_modules/markdownlint/doc/md025.md @@ -0,0 +1,49 @@ +# `MD025` - Multiple top-level headings in the same document + +Tags: `headings` + +Aliases: `single-h1`, `single-title` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is triggered when a top-level heading is in use (the first line of +the file is an h1 heading), and more than one h1 heading is in use in the +document: + +```markdown +# Top level heading + +# Another top-level heading +``` + +To fix, structure your document so there is a single h1 heading that is +the title for the document. Subsequent headings must be +lower-level headings (h2, h3, etc.): + +```markdown +# Title + +## Heading + +## Another heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule treats +that as a top level heading and will report a violation for any subsequent +top-level headings. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: A top-level heading is an h1 on the first line of the file, and +serves as the title for the document. If this convention is in use, then there +can not be more than one title for the document, and the entire document should +be contained within this heading. diff --git a/node_modules/markdownlint/doc/md026.md b/node_modules/markdownlint/doc/md026.md new file mode 100644 index 0000000000..cf7161cda7 --- /dev/null +++ b/node_modules/markdownlint/doc/md026.md @@ -0,0 +1,40 @@ +# `MD026` - Trailing punctuation in heading + +Tags: `headings` + +Aliases: `no-trailing-punctuation` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on any heading that has one of the specified normal or +full-width punctuation characters as the last character in the line: + +```markdown +# This is a heading. +``` + +To fix this, remove the trailing punctuation: + +```markdown +# This is a heading +``` + +Note: The `punctuation` parameter can be used to specify what characters count +as punctuation at the end of a heading. For example, you can change it to +`".,;:"` to allow headings that end with an exclamation point. `?` is +allowed by default because of how common it is in headings of FAQ-style +documents. Setting the `punctuation` parameter to `""` allows all characters - +and is equivalent to disabling the rule. + +Note: The trailing semicolon of [HTML entity references][html-entity-references] +like `©`, `©`, and `©` is ignored by this rule. + +Rationale: Headings are not meant to be full sentences. More information: +[Punctuation at the end of headers][end-punctuation]. + +[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers +[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references diff --git a/node_modules/markdownlint/doc/md027.md b/node_modules/markdownlint/doc/md027.md new file mode 100644 index 0000000000..0b910992f4 --- /dev/null +++ b/node_modules/markdownlint/doc/md027.md @@ -0,0 +1,24 @@ +# `MD027` - Multiple spaces after blockquote symbol + +Tags: `blockquote`, `indentation`, `whitespace` + +Aliases: `no-multiple-space-blockquote` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when blockquotes have more than one space after the +blockquote (`>`) symbol: + +```markdown +> This is a blockquote with bad indentation +> there should only be one. +``` + +To fix, remove any extraneous space: + +```markdown +> This is a blockquote with correct +> indentation. +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md028.md b/node_modules/markdownlint/doc/md028.md new file mode 100644 index 0000000000..94972ed275 --- /dev/null +++ b/node_modules/markdownlint/doc/md028.md @@ -0,0 +1,40 @@ +# `MD028` - Blank line inside blockquote + +Tags: `blockquote`, `whitespace` + +Aliases: `no-blanks-blockquote` + +This rule is triggered when two blockquote blocks are separated by nothing +except for a blank line: + +```markdown +> This is a blockquote +> which is immediately followed by + +> this blockquote. Unfortunately +> In some parsers, these are treated as the same blockquote. +``` + +To fix this, ensure that any blockquotes that are right next to each other +have some text in between: + +```markdown +> This is a blockquote. + +And Jimmy also said: + +> This too is a blockquote. +``` + +Alternatively, if they are supposed to be the same quote, then add the +blockquote symbol at the beginning of the blank line: + +```markdown +> This is a blockquote. +> +> This is the same blockquote. +``` + +Rationale: Some Markdown parsers will treat two blockquotes separated by one +or more blank lines as the same blockquote, while others will treat them as +separate blockquotes. diff --git a/node_modules/markdownlint/doc/md029.md b/node_modules/markdownlint/doc/md029.md new file mode 100644 index 0000000000..1f00e7761c --- /dev/null +++ b/node_modules/markdownlint/doc/md029.md @@ -0,0 +1,98 @@ +# `MD029` - Ordered list item prefix + +Tags: `ol` + +Aliases: `ol-prefix` + +Parameters: + +- `style`: List style (`string`, default `one_or_ordered`, values `one` / + `one_or_ordered` / `ordered` / `zero`) + +This rule is triggered for ordered lists that do not either start with '1.' or +do not have a prefix that increases in numerical order (depending on the +configured style). The less-common pattern of using '0.' as a first prefix or +for all prefixes is also supported. + +Example valid list if the style is configured as 'one': + +```markdown +1. Do this. +1. Do that. +1. Done. +``` + +Examples of valid lists if the style is configured as 'ordered': + +```markdown +1. Do this. +2. Do that. +3. Done. +``` + +```markdown +0. Do this. +1. Do that. +2. Done. +``` + +All three examples are valid when the style is configured as 'one_or_ordered'. + +Example valid list if the style is configured as 'zero': + +```markdown +0. Do this. +0. Do that. +0. Done. +``` + +Example invalid list for all styles: + +```markdown +1. Do this. +3. Done. +``` + +This rule supports 0-prefixing ordered list items for uniform indentation: + +```markdown +... +08. Item +09. Item +10. Item +11. Item +... +``` + +Note: This rule will report violations for cases like the following where an +improperly-indented code block (or similar) appears between two list items and +"breaks" the list in two: + + + +~~~markdown +1. First list + +```text +Code block +``` + +1. Second list +~~~ + +The fix is to indent the code block so it becomes part of the preceding list +item as intended: + +~~~markdown +1. First list + + ```text + Code block + ``` + +2. Still first list +~~~ + + + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md030.md b/node_modules/markdownlint/doc/md030.md new file mode 100644 index 0000000000..59454d2983 --- /dev/null +++ b/node_modules/markdownlint/doc/md030.md @@ -0,0 +1,82 @@ +# `MD030` - Spaces after list markers + +Tags: `ol`, `ul`, `whitespace` + +Aliases: `list-marker-space` + +Parameters: + +- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) +- `ol_single`: Spaces for single-line ordered list items (`integer`, default + `1`) +- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default + `1`) +- `ul_single`: Spaces for single-line unordered list items (`integer`, default + `1`) + +Fixable: Some violations can be fixed by tooling + +This rule checks for the number of spaces between a list marker (e.g. '`-`', +'`*`', '`+`' or '`1.`') and the text of the list item. + +The number of spaces checked for depends on the document style in use, but the +default is 1 space after any list marker: + +```markdown +* Foo +* Bar +* Baz + +1. Foo +1. Bar +1. Baz + +1. Foo + * Bar +1. Baz +``` + +A document style may change the number of spaces after unordered list items +and ordered list items independently, as well as based on whether the content +of every item in the list consists of a single paragraph or multiple +paragraphs (including sub-lists and code blocks). + +For example, the style guide at + +specifies that 1 space after the list marker should be used if every item in +the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered +and unordered lists respectively) if there are multiple paragraphs of content +inside the list: + +```markdown +* Foo +* Bar +* Baz +``` + +vs. + +```markdown +* Foo + + Second paragraph + +* Bar +``` + +or + +```markdown +1. Foo + + Second paragraph + +1. Bar +``` + +To fix this, ensure the correct number of spaces are used after the list marker +for your selected document style. + +Rationale: Violations of this rule can lead to improperly rendered content. + +Note: See [Prettier.md](Prettier.md) for compatibility information. diff --git a/node_modules/markdownlint/doc/md031.md b/node_modules/markdownlint/doc/md031.md new file mode 100644 index 0000000000..9663e5da04 --- /dev/null +++ b/node_modules/markdownlint/doc/md031.md @@ -0,0 +1,50 @@ +# `MD031` - Fenced code blocks should be surrounded by blank lines + +Tags: `blank_lines`, `code` + +Aliases: `blanks-around-fences` + +Parameters: + +- `list_items`: Include list items (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when fenced code blocks are either not preceded or not +followed by a blank line: + +````markdown +Some text +``` +Code block +``` + +``` +Another code block +``` +Some more text +```` + +To fix this, ensure that all fenced code blocks have a blank line both before +and after (except where the block is at the beginning or end of the document): + +````markdown +Some text + +``` +Code block +``` + +``` +Another code block +``` + +Some more text +```` + +Set the `list_items` parameter to `false` to disable this rule for list items. +Disabling this behavior for lists can be useful if it is necessary to create a +[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. + +Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will +not parse fenced code blocks that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/doc/md032.md b/node_modules/markdownlint/doc/md032.md new file mode 100644 index 0000000000..41c8b41115 --- /dev/null +++ b/node_modules/markdownlint/doc/md032.md @@ -0,0 +1,55 @@ +# `MD032` - Lists should be surrounded by blank lines + +Tags: `blank_lines`, `bullet`, `ol`, `ul` + +Aliases: `blanks-around-lists` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when lists (of any kind) are either not preceded or not +followed by a blank line: + +```markdown +Some text +* List item +* List item + +1. List item +2. List item +*** +``` + +In the first case above, text immediately precedes the unordered list. In the +second case above, a thematic break immediately follows the ordered list. To fix +violations of this rule, ensure that all lists have a blank line both before and +after (except when the list is at the very beginning or end of the document): + +```markdown +Some text + +* List item +* List item + +1. List item +2. List item + +*** +``` + +Note that the following case is **not** a violation of this rule: + +```markdown +1. List item + More item 1 +2. List item +More item 2 +``` + +Although it is not indented, the text "More item 2" is referred to as a +[lazy continuation line][lazy-continuation] and considered part of the second +list item. + +Rationale: In addition to aesthetic reasons, some parsers, including kramdown, +will not parse lists that don't have blank lines before and after them. + +[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line diff --git a/node_modules/markdownlint/doc/md033.md b/node_modules/markdownlint/doc/md033.md new file mode 100644 index 0000000000..d2f5ddecb2 --- /dev/null +++ b/node_modules/markdownlint/doc/md033.md @@ -0,0 +1,27 @@ +# `MD033` - Inline HTML + +Tags: `html` + +Aliases: `no-inline-html` + +Parameters: + +- `allowed_elements`: Allowed elements (`string[]`, default `[]`) + +This rule is triggered whenever raw HTML is used in a Markdown document: + +```markdown +

          Inline HTML heading

          +``` + +To fix this, use 'pure' Markdown instead of including raw HTML: + +```markdown +# Markdown heading +``` + +Note: To allow specific HTML elements, use the `allowed_elements` parameter. + +Rationale: Raw HTML is allowed in Markdown, but this rule is included for +those who want their documents to only include "pure" Markdown, or for those +who are rendering Markdown documents into something other than HTML. diff --git a/node_modules/markdownlint/doc/md034.md b/node_modules/markdownlint/doc/md034.md new file mode 100644 index 0000000000..dc9c3cf618 --- /dev/null +++ b/node_modules/markdownlint/doc/md034.md @@ -0,0 +1,55 @@ +# `MD034` - Bare URL used + +Tags: `links`, `url` + +Aliases: `no-bare-urls` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered whenever a URL or email address appears without +surrounding angle brackets: + +```markdown +For more info, visit https://www.example.com/ or email user@example.com. +``` + +To fix this, add angle brackets around the URL or email address: + +```markdown +For more info, visit or email . +``` + +If a URL or email address contains non-ASCII characters, it may be not be +handled as intended even when angle brackets are present. In such cases, +[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used +to comply with the required syntax for URL and email. + +Note: To include a bare URL or email without it being converted into a link, +wrap it in a code span: + +```markdown +Not a clickable link: `https://www.example.com` +``` + +Note: The following scenario does not trigger this rule because it could be a +shortcut link: + +```markdown +[https://www.example.com] +``` + +Note: The following syntax triggers this rule because the nested link could be +a shortcut link (which takes precedence): + +```markdown +[text [shortcut] text](https://example.com) +``` + +To avoid this, escape both inner brackets: + +```markdown +[link \[text\] link](https://example.com) +``` + +Rationale: Without angle brackets, a bare URL or email isn't converted into a +link by some Markdown parsers. diff --git a/node_modules/markdownlint/doc/md035.md b/node_modules/markdownlint/doc/md035.md new file mode 100644 index 0000000000..ee74516cbc --- /dev/null +++ b/node_modules/markdownlint/doc/md035.md @@ -0,0 +1,37 @@ +# `MD035` - Horizontal rule style + +Tags: `hr` + +Aliases: `hr-style` + +Parameters: + +- `style`: Horizontal rule style (`string`, default `consistent`) + +This rule is triggered when inconsistent styles of horizontal rules are used +in the document: + +```markdown +--- + +- - - + +*** + +* * * + +**** +``` + +To fix this, use the same horizontal rule everywhere: + +```markdown +--- + +--- +``` + +The configured style can ensure all horizontal rules use a specific string or it +can ensure all horizontal rules match the first horizontal rule (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md036.md b/node_modules/markdownlint/doc/md036.md new file mode 100644 index 0000000000..1518904f79 --- /dev/null +++ b/node_modules/markdownlint/doc/md036.md @@ -0,0 +1,45 @@ +# `MD036` - Emphasis used instead of a heading + +Tags: `emphasis`, `headings` + +Aliases: `no-emphasis-as-heading` + +Parameters: + +- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) + +This check looks for instances where emphasized (i.e. bold or italic) text is +used to separate sections, where a heading should be used instead: + +```markdown +**My document** + +Lorem ipsum dolor sit amet... + +_Another section_ + +Consectetur adipiscing elit, sed do eiusmod. +``` + +To fix this, use Markdown headings instead of emphasized text to denote +sections: + +```markdown +# My document + +Lorem ipsum dolor sit amet... + +## Another section + +Consectetur adipiscing elit, sed do eiusmod. +``` + +Note: This rule looks for single-line paragraphs that consist entirely +of emphasized text. It won't fire on emphasis used within regular text, +multi-line emphasized paragraphs, or paragraphs ending in punctuation +(normal or full-width). Similarly to rule MD026, you can configure what +characters are recognized as punctuation. + +Rationale: Using emphasis instead of a heading prevents tools from inferring +the structure of a document. More information: +. diff --git a/node_modules/markdownlint/doc/md037.md b/node_modules/markdownlint/doc/md037.md new file mode 100644 index 0000000000..c96ba3caf6 --- /dev/null +++ b/node_modules/markdownlint/doc/md037.md @@ -0,0 +1,37 @@ +# `MD037` - Spaces inside emphasis markers + +Tags: `emphasis`, `whitespace` + +Aliases: `no-space-in-emphasis` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when emphasis markers (bold, italic) are used, but they +have spaces between the markers and the text: + +```markdown +Here is some ** bold ** text. + +Here is some * italic * text. + +Here is some more __ bold __ text. + +Here is some more _ italic _ text. +``` + +To fix this, remove the spaces around the emphasis markers: + +```markdown +Here is some **bold** text. + +Here is some *italic* text. + +Here is some more __bold__ text. + +Here is some more _italic_ text. +``` + +Rationale: Emphasis is only parsed as such when the asterisks/underscores +aren't surrounded by spaces. This rule attempts to detect where +they were surrounded by spaces, but it appears that emphasized text was +intended by the author. diff --git a/node_modules/markdownlint/doc/md038.md b/node_modules/markdownlint/doc/md038.md new file mode 100644 index 0000000000..86cf525961 --- /dev/null +++ b/node_modules/markdownlint/doc/md038.md @@ -0,0 +1,40 @@ +# `MD038` - Spaces inside code span elements + +Tags: `code`, `whitespace` + +Aliases: `no-space-in-code` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered for code span elements that have spaces adjacent to the +backticks: + +```markdown +`some text ` + +` some text` +``` + +To fix this, remove any spaces adjacent to the backticks: + +```markdown +`some text` +``` + +Note: A single leading and trailing space is allowed by the specification and +automatically trimmed (in order to allow for code spans that embed backticks): + +```markdown +`` `backticks` `` +``` + +Note: A single leading or trailing space is allowed if used to separate code +span markers from an embedded backtick (though the space is not trimmed): + +```markdown +`` ` embedded backtick`` +``` + +Rationale: Violations of this rule are usually unintentional and may lead to +improperly-rendered content. If spaces beside backticks are intentional, this +rule can be disabled for that line or file. diff --git a/node_modules/markdownlint/doc/md039.md b/node_modules/markdownlint/doc/md039.md new file mode 100644 index 0000000000..8e854cde2f --- /dev/null +++ b/node_modules/markdownlint/doc/md039.md @@ -0,0 +1,21 @@ +# `MD039` - Spaces inside link text + +Tags: `links`, `whitespace` + +Aliases: `no-space-in-links` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered on links that have spaces surrounding the link text: + +```markdown +[ a link ](https://www.example.com/) +``` + +To fix this, remove the spaces surrounding the link text: + +```markdown +[a link](https://www.example.com/) +``` + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md040.md b/node_modules/markdownlint/doc/md040.md new file mode 100644 index 0000000000..5272fc0986 --- /dev/null +++ b/node_modules/markdownlint/doc/md040.md @@ -0,0 +1,52 @@ +# `MD040` - Fenced code blocks should have a language specified + +Tags: `code`, `language` + +Aliases: `fenced-code-language` + +Parameters: + +- `allowed_languages`: List of languages (`string[]`, default `[]`) +- `language_only`: Require language only (`boolean`, default `false`) + +This rule is triggered when fenced code blocks are used, but a language isn't +specified: + +````markdown +``` +#!/bin/bash +echo Hello world +``` +```` + +To fix this, add a language specifier to the code block: + +````markdown +```bash +#!/bin/bash +echo Hello world +``` +```` + +To display a code block without syntax highlighting, use: + +````markdown +```text +Plain text in a code block +``` +```` + +You can configure the `allowed_languages` parameter to specify a list of +languages code blocks could use. Languages are case sensitive. The default value +is `[]` which means any language specifier is valid. + +You can prevent extra data from being present in the info string of fenced code +blocks. To do so, set the `language_only` parameter to `true`. + + +Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: +`ruby startline=3`) will trigger this rule. + +Rationale: Specifying a language improves content rendering by using the +correct syntax highlighting for code. More information: +. diff --git a/node_modules/markdownlint/doc/md041.md b/node_modules/markdownlint/doc/md041.md new file mode 100644 index 0000000000..5dfeee130e --- /dev/null +++ b/node_modules/markdownlint/doc/md041.md @@ -0,0 +1,49 @@ +# `MD041` - First line in a file should be a top-level heading + +Tags: `headings` + +Aliases: `first-line-h1`, `first-line-heading` + +Parameters: + +- `front_matter_title`: RegExp for matching title in front matter (`string`, + default `^\s*title\s*[:=]`) +- `level`: Heading level (`integer`, default `1`) + +This rule is intended to ensure documents have a title and is triggered when +the first line in the file isn't a top-level (h1) heading: + +```markdown +This is a file without a heading +``` + +To fix this, add a top-level heading to the beginning of the file: + +```markdown +# File with heading + +This is a file with a top-level heading +``` + +Because it is common for projects on GitHub to use an image for the heading of +`README.md` and that is not well-supported by Markdown, HTML headings are also +permitted by this rule. For example: + +```markdown +

          + +This is a file with a top-level HTML heading +``` + +Note: The `level` parameter can be used to change the top-level (ex: to h2) in +cases where an h1 is added externally. + +If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and +contains a `title` property (commonly used with blog posts), this rule will not +report a violation. To use a different property name in the front matter, +specify the text of a regular expression via the `front_matter_title` parameter. +To disable the use of front matter by this rule, specify `""` for +`front_matter_title`. + +Rationale: The top-level heading often acts as the title of a document. More +information: . diff --git a/node_modules/markdownlint/doc/md042.md b/node_modules/markdownlint/doc/md042.md new file mode 100644 index 0000000000..df2026a3ce --- /dev/null +++ b/node_modules/markdownlint/doc/md042.md @@ -0,0 +1,32 @@ +# `MD042` - No empty links + +Tags: `links` + +Aliases: `no-empty-links` + +This rule is triggered when an empty link is encountered: + +```markdown +[an empty link]() +``` + +To fix the violation, provide a destination for the link: + +```markdown +[a valid link](https://example.com/) +``` + +Empty fragments will trigger this rule: + +```markdown +[an empty fragment](#) +``` + +But non-empty fragments will not: + +```markdown +[a valid fragment](#fragment) +``` + +Rationale: Empty links do not lead anywhere and therefore don't function as +links. diff --git a/node_modules/markdownlint/doc/md043.md b/node_modules/markdownlint/doc/md043.md new file mode 100644 index 0000000000..8d6267016a --- /dev/null +++ b/node_modules/markdownlint/doc/md043.md @@ -0,0 +1,69 @@ +# `MD043` - Required heading structure + +Tags: `headings` + +Aliases: `required-headings` + +Parameters: + +- `headings`: List of headings (`string[]`, default `[]`) +- `match_case`: Match case of headings (`boolean`, default `false`) + +This rule is triggered when the headings in a file do not match the array of +headings passed to the rule. It can be used to enforce a standard heading +structure for a set of files. + +To require exactly the following structure: + +```markdown +# Head +## Item +### Detail +``` + +Set the `headings` parameter to: + +```json +[ + "# Head", + "## Item", + "### Detail" +] +``` + +To allow optional headings as with the following structure: + +```markdown +# Head +## Item +### Detail (optional) +## Foot +### Notes (optional) +``` + +Use the special value `"*"` meaning "zero or more unspecified headings" or the +special value `"+"` meaning "one or more unspecified headings" and set the +`headings` parameter to: + +```json +[ + "# Head", + "## Item", + "*", + "## Foot", + "*" +] +``` + +When an error is detected, this rule outputs the line number of the first +problematic heading (otherwise, it outputs the last line number of the file). + +Note that while the `headings` parameter uses the "## Text" ATX heading style +for simplicity, a file may use any supported heading style. + +By default, the case of headings in the document is not required to match that +of `headings`. To require that case match exactly, set the `match_case` +parameter to `true`. + +Rationale: Projects may wish to enforce a consistent document structure across +a set of similar content. diff --git a/node_modules/markdownlint/doc/md044.md b/node_modules/markdownlint/doc/md044.md new file mode 100644 index 0000000000..e8f34e4804 --- /dev/null +++ b/node_modules/markdownlint/doc/md044.md @@ -0,0 +1,45 @@ +# `MD044` - Proper names should have the correct capitalization + +Tags: `spelling` + +Aliases: `proper-names` + +Parameters: + +- `code_blocks`: Include code blocks (`boolean`, default `true`) +- `html_elements`: Include HTML elements (`boolean`, default `true`) +- `names`: List of proper names (`string[]`, default `[]`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when any of the strings in the `names` array do not have +the specified capitalization. It can be used to enforce a standard letter case +for the names of projects and products. + +For example, the language "JavaScript" is usually written with both the 'J' and +'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To +enforce the proper capitalization, specify the desired letter case in the +`names` array: + +```json +[ + "JavaScript" +] +``` + +Sometimes a proper name is capitalized differently in certain contexts. In such +cases, add both forms to the `names` array: + +```json +[ + "GitHub", + "github.com" +] +``` + +Set the `code_blocks` parameter to `false` to disable this rule for code blocks +and spans. Set the `html_elements` parameter to `false` to disable this rule +for HTML elements and attributes (such as when using a proper name as part of +a path for `a`/`href` or `img`/`src`). + +Rationale: Incorrect capitalization of proper names is usually a mistake. diff --git a/node_modules/markdownlint/doc/md045.md b/node_modules/markdownlint/doc/md045.md new file mode 100644 index 0000000000..5d214f6f29 --- /dev/null +++ b/node_modules/markdownlint/doc/md045.md @@ -0,0 +1,40 @@ +# `MD045` - Images should have alternate text (alt text) + +Tags: `accessibility`, `images` + +Aliases: `no-alt-text` + +This rule is triggered when an image is missing alternate text (alt text) +information. + +Alternate text is commonly specified inline as: + +```markdown +![Alternate text](image.jpg) +``` + +Or with reference syntax as: + +```markdown +![Alternate text][ref] + +... + +[ref]: image.jpg "Optional title" +``` + +Or with HTML as: + +```html +Alternate text +``` + +Guidance for writing alternate text is available from the [W3C][w3c], +[Wikipedia][wikipedia], and [other locations][phase2technology]. + +Rationale: Alternate text is important for accessibility and describes the +content of an image for people who may not be able to see it. + +[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses +[w3c]: https://www.w3.org/WAI/alt/ +[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute diff --git a/node_modules/markdownlint/doc/md046.md b/node_modules/markdownlint/doc/md046.md new file mode 100644 index 0000000000..25c9611b68 --- /dev/null +++ b/node_modules/markdownlint/doc/md046.md @@ -0,0 +1,40 @@ +# `MD046` - Code block style + +Tags: `code` + +Aliases: `code-block-style` + +Parameters: + +- `style`: Block style (`string`, default `consistent`, values `consistent` / + `fenced` / `indented`) + +This rule is triggered when unwanted or different code block styles are used in +the same document. + +In the default configuration this rule reports a violation for the following +document: + + + + Some text. + + # Indented code + + More text. + + ```ruby + # Fenced code + ``` + + More text. + + + +To fix violations of this rule, use a consistent style (either indenting or code +fences). + +The configured code block style can be specific (`fenced`, `indented`) or can +require all code blocks match the first code block (`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md047.md b/node_modules/markdownlint/doc/md047.md new file mode 100644 index 0000000000..494937d057 --- /dev/null +++ b/node_modules/markdownlint/doc/md047.md @@ -0,0 +1,34 @@ +# `MD047` - Files should end with a single newline character + +Tags: `blank_lines` + +Aliases: `single-trailing-newline` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when there is not a single newline character at the end +of a file. + +An example that triggers the rule: + +```markdown +# Heading + +This file ends without a newline.[EOF] +``` + +To fix the violation, add a newline character to the end of the file: + +```markdown +# Heading + +This file ends with a newline. +[EOF] +``` + +Rationale: Some programs have trouble with files that do not end with a newline. + +More information: [What's the point in adding a new line to the end of a +file?][stack-exchange] + +[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file diff --git a/node_modules/markdownlint/doc/md048.md b/node_modules/markdownlint/doc/md048.md new file mode 100644 index 0000000000..3776576019 --- /dev/null +++ b/node_modules/markdownlint/doc/md048.md @@ -0,0 +1,42 @@ +# `MD048` - Code fence style + +Tags: `code` + +Aliases: `code-fence-style` + +Parameters: + +- `style`: Code fence style (`string`, default `consistent`, values `backtick` + / `consistent` / `tilde`) + +This rule is triggered when the symbols used in the document for fenced code +blocks do not match the configured code fence style: + +````markdown +```ruby +# Fenced code +``` + +~~~ruby +# Fenced code +~~~ +```` + +To fix this issue, use the configured code fence style throughout the +document: + +````markdown +```ruby +# Fenced code +``` + +```ruby +# Fenced code +``` +```` + +The configured code fence style can be a specific symbol to use (`backtick`, +`tilde`) or it can require all code fences match the first code fence +(`consistent`). + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md049.md b/node_modules/markdownlint/doc/md049.md new file mode 100644 index 0000000000..e16316d3bb --- /dev/null +++ b/node_modules/markdownlint/doc/md049.md @@ -0,0 +1,36 @@ +# `MD049` - Emphasis style + +Tags: `emphasis` + +Aliases: `emphasis-style` + +Parameters: + +- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for emphasis do not +match the configured emphasis style: + +```markdown +*Text* +_Text_ +``` + +To fix this issue, use the configured emphasis style throughout the document: + +```markdown +*Text* +*Text* +``` + +The configured emphasis style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all emphasis matches the first emphasis +(`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like_this_one. + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md050.md b/node_modules/markdownlint/doc/md050.md new file mode 100644 index 0000000000..2f249c2c6c --- /dev/null +++ b/node_modules/markdownlint/doc/md050.md @@ -0,0 +1,35 @@ +# `MD050` - Strong style + +Tags: `emphasis` + +Aliases: `strong-style` + +Parameters: + +- `style`: Strong style (`string`, default `consistent`, values `asterisk` / + `consistent` / `underscore`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when the symbols used in the document for strong do not +match the configured strong style: + +```markdown +**Text** +__Text__ +``` + +To fix this issue, use the configured strong style throughout the document: + +```markdown +**Text** +**Text** +``` + +The configured strong style can be a specific symbol to use (`asterisk`, +`underscore`) or can require all strong matches the first strong (`consistent`). + +Note: Emphasis within a word is restricted to `asterisk` in order to avoid +unwanted emphasis for words containing internal underscores like__this__one. + +Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md051.md b/node_modules/markdownlint/doc/md051.md new file mode 100644 index 0000000000..947aba330f --- /dev/null +++ b/node_modules/markdownlint/doc/md051.md @@ -0,0 +1,95 @@ +# `MD051` - Link fragments should be valid + +Tags: `links` + +Aliases: `link-fragments` + +Parameters: + +- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when a link fragment does not match any of the fragments +that are automatically generated for headings in a document: + +```markdown +# Heading Name + +[Link](#fragment) +``` + +To fix this issue, change the link fragment to reference an existing heading's +generated name (see below): + +```markdown +# Heading Name + +[Link](#heading-name) +``` + +For consistency, this rule requires fragments to exactly match the [GitHub +heading algorithm][github-heading-algorithm] which converts letters to +lowercase. Therefore, the following example is reported as a violation: + +```markdown +# Heading Name + +[Link](#Heading-Name) +``` + +To ignore case when comparing fragments with heading names, the `ignore_case` +parameter can be set to `true`. In this configuration, the previous example is +not reported as a violation. + +Alternatively, some platforms allow the syntax `{#named-anchor}` to be used +within a heading to provide a specific name (consisting of only lower-case +letters, numbers, `-`, and `_`): + +```markdown +# Heading Name {#custom-name} + +[Link](#custom-name) +``` + +Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` +attribute can be used to define a fragment: + +```markdown + + +[Link](#bookmark) +``` + +An `a` tag can be useful in scenarios where a heading is not appropriate or for +control over the text of the fragment identifier. + +This rule also recognizes the custom fragment syntax used by GitHub to highlight +[specific content in a document][github-linking-to-content]. + +For example, this link to line 20: + +```markdown +[Link](#L20) +``` + +And this link to content starting within line 19 running into line 21: + +```markdown +[Link](#L19C5-L21C11) +``` + +Rationale: [GitHub section links][github-section-links] are created +automatically for every heading when Markdown content is displayed on GitHub. +This makes it easy to link directly to different sections within a document. +However, section links change if headings are renamed or removed. This rule +helps identify broken section links within a document. + +Section links are **not** part of the CommonMark specification. This rule +enforces the [GitHub heading algorithm][github-heading-algorithm] which is: +convert heading to lowercase, remove punctuation, convert spaces to dashes, +append an incrementing integer as needed for uniqueness. + +[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links +[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb +[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown diff --git a/node_modules/markdownlint/doc/md052.md b/node_modules/markdownlint/doc/md052.md new file mode 100644 index 0000000000..994d98eefa --- /dev/null +++ b/node_modules/markdownlint/doc/md052.md @@ -0,0 +1,40 @@ +# `MD052` - Reference links and images should use a label that is defined + +Tags: `images`, `links` + +Aliases: `reference-links-images` + +Parameters: + +- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) + +Links and images in Markdown can provide the link destination or image source +at the time of use or can define it elsewhere and use a label for reference. +The reference format is convenient for keeping paragraph text clutter-free +and makes it easy to reuse the same URL in multiple places. + +There are three kinds of reference links and images: + +```markdown +Full: [text][label] +Collapsed: [label][] +Shortcut: [label] + +Full: ![text][image] +Collapsed: ![image][] +Shortcut: ![image] + +[label]: https://example.com/label +[image]: https://example.com/image +``` + +A link or image renders correctly when the corresponding label is defined, but +displays as text with brackets when the label is not present. By default, this +rule warns of undefined labels for "full" and "collapsed" reference syntax but +not for "shortcut" syntax because it is ambiguous. + +The text `[example]` could be a shortcut link or the text "example" in brackets, +so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set +the `include_shortcut` parameter to `true`. Note that doing so produces warnings +for *all* text in the document that *could* be a shortcut. If bracketed text is +intentional, brackets can be escaped with the `\` character: `\[example\]`. diff --git a/node_modules/markdownlint/doc/md053.md b/node_modules/markdownlint/doc/md053.md new file mode 100644 index 0000000000..7caf0290ce --- /dev/null +++ b/node_modules/markdownlint/doc/md053.md @@ -0,0 +1,38 @@ +# `MD053` - Link and image reference definitions should be needed + +Tags: `images`, `links` + +Aliases: `link-image-reference-definitions` + +Parameters: + +- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source +at the time of use or can use a label to reference a definition elsewhere in +the document. The latter reference format is convenient for keeping paragraph +text clutter-free and makes it easy to reuse the same URL in multiple places. + +Because link and image reference definitions are located separately from +where they are used, there are two scenarios where a definition can be +unnecessary: + +1. If a label is not referenced by any link or image in a document, that + definition is unused and can be deleted. +2. If a label is defined multiple times in a document, the first definition is + used and the others can be deleted. + +This rule considers a reference definition to be used if any link or image +reference has the corresponding label. The "full", "collapsed", and "shortcut" +formats are all supported. + +If there are reference definitions that are deliberately unreferenced, they can +be ignored by setting the `ignored_definitions` parameter. The default value of +this parameter ignores the following convention for adding non-HTML comments to +Markdown: + +```markdown +[//]: # (This behaves like a comment) +``` diff --git a/node_modules/markdownlint/doc/md054.md b/node_modules/markdownlint/doc/md054.md new file mode 100644 index 0000000000..01d661cd5e --- /dev/null +++ b/node_modules/markdownlint/doc/md054.md @@ -0,0 +1,100 @@ +# `MD054` - Link and image style + +Tags: `images`, `links` + +Aliases: `link-image-style` + +Parameters: + +- `autolink`: Allow autolinks (`boolean`, default `true`) +- `collapsed`: Allow collapsed reference links and images (`boolean`, default + `true`) +- `full`: Allow full reference links and images (`boolean`, default `true`) +- `inline`: Allow inline links and images (`boolean`, default `true`) +- `shortcut`: Allow shortcut reference links and images (`boolean`, default + `true`) +- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) + +Fixable: Some violations can be fixed by tooling + +Links and images in Markdown can provide the link destination or image source at +the time of use or can use a label to reference a definition elsewhere in the +document. The three reference formats are convenient for keeping paragraph text +clutter-free and make it easy to reuse the same URL in multiple places. + +By default, this rule allows all link/image styles. + +Setting the `autolink` parameter to `false` disables autolinks: + +```markdown + +``` + +Setting the `inline` parameter to `false` disables inline links and images: + +```markdown +[link](https://example.com) + +![image](https://example.com) +``` + +Setting the `full` parameter to `false` disables full reference links and +images: + +```markdown +[link][url] + +![image][url] + +[url]: https://example.com +``` + +Setting the `collapsed` parameter to `false` disables collapsed reference links +and images: + +```markdown +[url][] + +![url][] + +[url]: https://example.com +``` + +Setting the `shortcut` parameter to `false` disables shortcut reference links +and images: + +```markdown +[url] + +![url] + +[url]: https://example.com +``` + +To fix violations of this rule, change the link or image to use an allowed +style. This rule can automatically fix violations when a link or image can be +converted to the `inline` style (preferred) or a link can be converted to the +`autolink` style (which does not support images and must be an absolute URL). +This rule does *not* fix scenarios that require converting a link or image to +the `full`, `collapsed`, or `shortcut` reference styles because that involves +naming the reference and determining where to insert it in the document. + +Setting the `url_inline` parameter to `false` prevents the use of inline links +with the same absolute URL text/destination and no title because such links can +be converted to autolinks: + +```markdown +[https://example.com](https://example.com) +``` + +To fix `url_inline` violations, use the simpler autolink syntax instead: + +```markdown + +``` + +Rationale: Consistent formatting makes it easier to understand a document. +Autolinks are concise, but appear as URLs which can be long and confusing. +Inline links and images can include descriptive text, but take up more space in +Markdown form. Reference links and images can be easier to read and manipulate +in Markdown form, but require a separate link reference definition. diff --git a/node_modules/markdownlint/doc/md055.md b/node_modules/markdownlint/doc/md055.md new file mode 100644 index 0000000000..9b6f7f086a --- /dev/null +++ b/node_modules/markdownlint/doc/md055.md @@ -0,0 +1,55 @@ +# `MD055` - Table pipe style + +Tags: `table` + +Aliases: `table-pipe-style` + +Parameters: + +- `style`: Table pipe style (`string`, default `consistent`, values + `consistent` / `leading_and_trailing` / `leading_only` / + `no_leading_or_trailing` / `trailing_only`) + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] +is inconsistent about its use of leading and trailing pipe characters (`|`). + +By default (`consistent` style), the header row of the first table in a document +is used to determine the style that is enforced for every table in the document. +A specific style can be used instead (`leading_and_trailing`, `leading_only`, +`no_leading_or_trailing`, `trailing_only`). + +This table's header row has leading and trailing pipes, but its delimiter row is +missing the trailing pipe and its first row of cells is missing the leading +pipe: + +```markdown +| Header | Header | +| ------ | ------ + Cell | Cell | +``` + +To fix these issues, make sure there is a pipe character at the beginning and +end of every row: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and may also +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table +``` + +Rationale: Some parsers have difficulty with tables that are missing their +leading or trailing pipe characters. The use of leading/trailing pipes can also +help provide visual clarity. + +[gfm-table-055]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md056.md b/node_modules/markdownlint/doc/md056.md new file mode 100644 index 0000000000..0fe87b522d --- /dev/null +++ b/node_modules/markdownlint/doc/md056.md @@ -0,0 +1,37 @@ +# `MD056` - Table column count + +Tags: `table` + +Aliases: `table-column-count` + +This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] +does not have the same number of cells in every row. + +This table's second data row has too few cells and its third data row has too +many cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | +| Cell | Cell | Cell | +``` + +To fix these issues, ensure every row has the same number of cells: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +| Cell | Cell | +| Cell | Cell | +``` + +Note that a table's header row and its delimiter row must have the same number +of cells or it will not be recognized as a table (per specification). + +Rationale: Extra cells in a row are usually not shown, so their data is lost. +Missing cells in a row create holes in the table and suggest an omission. + +[gfm-table-056]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md058.md b/node_modules/markdownlint/doc/md058.md new file mode 100644 index 0000000000..8600751242 --- /dev/null +++ b/node_modules/markdownlint/doc/md058.md @@ -0,0 +1,48 @@ +# `MD058` - Tables should be surrounded by blank lines + +Tags: `table` + +Aliases: `blanks-around-tables` + +Fixable: Some violations can be fixed by tooling + +This rule is triggered when tables are either not preceded or not followed by a +blank line: + +```markdown +Some text +| Header | Header | +| ------ | ------ | +| Cell | Cell | +> Blockquote +``` + +To fix violations of this rule, ensure that all tables have a blank line both +before and after (except when the table is at the very beginning or end of the +document): + +```markdown +Some text + +| Header | Header | +| ------ | ------ | +| Cell | Cell | + +> Blockquote +``` + +Note that text immediately following a table (i.e., not separated by an empty +line) is treated as part of the table (per the specification) and will not +trigger this rule: + +```markdown +| Header | Header | +| ------ | ------ | +| Cell | Cell | +This text is part of the table and the next line is blank + +Some text +``` + +Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse +tables that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/helpers/LICENSE b/node_modules/markdownlint/helpers/LICENSE new file mode 100644 index 0000000000..71ff07a3e3 --- /dev/null +++ b/node_modules/markdownlint/helpers/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) David Anson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/markdownlint/helpers/README.md b/node_modules/markdownlint/helpers/README.md new file mode 100644 index 0000000000..605df84a94 --- /dev/null +++ b/node_modules/markdownlint/helpers/README.md @@ -0,0 +1,29 @@ +# markdownlint-rule-helpers + +> A collection of `markdownlint` helper functions for custom rules + +## Overview + +The [Markdown][markdown] linter [`markdownlint`][markdownlint] offers a variety +of built-in validation [rules][rules] and supports the creation of [custom +rules][custom-rules]. The internal rules share various helper functions; this +package exposes those for reuse by custom rules. + +## API + +*Undocumented* - This package exports the internal functions as-is. The APIs +were not originally meant to be public, are not officially supported, and may +change from release to release. There are brief descriptive comments above each +function, but no [JSDoc][jsdoc] annotations. That said, some of what's here will +be useful to custom rule authors and may avoid duplicating code. + +## Tests + +*None* - The entire body of code is tested to 100% coverage by the core +`markdownlint` project, so there are no additional tests here. + +[custom-rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/CustomRules.md +[jsdoc]: https://en.m.wikipedia.org/wiki/JSDoc +[markdown]: https://en.wikipedia.org/wiki/Markdown +[markdownlint]: https://github.com/DavidAnson/markdownlint +[rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/Rules.md diff --git a/node_modules/markdownlint/helpers/helpers.cjs b/node_modules/markdownlint/helpers/helpers.cjs new file mode 100644 index 0000000000..6b42f0ab65 --- /dev/null +++ b/node_modules/markdownlint/helpers/helpers.cjs @@ -0,0 +1,542 @@ +// @ts-check + +"use strict"; + +const micromark = require("./micromark-helpers.cjs"); + +const { newLineRe, nextLinesRe } = require("./shared.cjs"); + +module.exports.newLineRe = newLineRe; +module.exports.nextLinesRe = nextLinesRe; + +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").RuleOnError} RuleOnError */ +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").RuleOnErrorFixInfo} RuleOnErrorFixInfo */ +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").MicromarkToken} MicromarkToken */ +// eslint-disable-next-line jsdoc/valid-types +/** @typedef {import("micromark-extension-gfm-footnote", { with: { "resolution-mode": "import" } })} */ +// eslint-disable-next-line jsdoc/valid-types +/** @typedef {import("../lib/micromark-types.d.mts", { with: { "resolution-mode": "import" } })} */ + +// Regular expression for matching common front matter (YAML and TOML) +// @ts-ignore +module.exports.frontMatterRe = + /((^---[^\S\r\n\u2028\u2029]*$[\s\S]+?^---\s*)|(^\+\+\+[^\S\r\n\u2028\u2029]*$[\s\S]+?^(\+\+\+|\.\.\.)\s*)|(^\{[^\S\r\n\u2028\u2029]*$[\s\S]+?^\}\s*))(\r\n|\r|\n|$)/m; + +// Regular expression for matching the start of inline disable/enable comments +const inlineCommentStartRe = + /()/gi; +module.exports.inlineCommentStartRe = inlineCommentStartRe; + +// Regular expression for identifying an HTML entity at the end of a line +module.exports.endOfLineHtmlEntityRe = + /&(?:#\d+|#[xX][\da-fA-F]+|[a-zA-Z]{2,31}|blk\d{2}|emsp1[34]|frac\d{2}|sup\d|there4);$/; + +// Regular expression for identifying a GitHub emoji code at the end of a line +module.exports.endOfLineGemojiCodeRe = + /:(?:[abmovx]|[-+]1|100|1234|(?:1st|2nd|3rd)_place_medal|8ball|clock\d{1,4}|e-mail|non-potable_water|o2|t-rex|u5272|u5408|u55b6|u6307|u6708|u6709|u6e80|u7121|u7533|u7981|u7a7a|[a-z]{2,15}2?|[a-z]{1,14}(?:_[a-z\d]{1,16})+):$/; + +// All punctuation characters (normal and full-width) +const allPunctuation = ".,;:!?。,;:!?"; +module.exports.allPunctuation = allPunctuation; + +// All punctuation characters without question mark (normal and full-width) +module.exports.allPunctuationNoQuestion = allPunctuation.replace(/[??]/gu, ""); + +/** + * Returns true iff the input is a Number. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is a Number. + */ +function isNumber(obj) { + return typeof obj === "number"; +} +module.exports.isNumber = isNumber; + +/** + * Returns true iff the input is a String. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is a String. + */ +function isString(obj) { + return typeof obj === "string"; +} +module.exports.isString = isString; + +/** + * Returns true iff the input String is empty. + * + * @param {string} str String of unknown length. + * @returns {boolean} True iff the input String is empty. + */ +function isEmptyString(str) { + return str.length === 0; +} +module.exports.isEmptyString = isEmptyString; + +/** + * Returns true iff the input is an Object. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is an Object. + */ +function isObject(obj) { + return !!obj && (typeof obj === "object") && !Array.isArray(obj); +} +module.exports.isObject = isObject; + +/** + * Returns true iff the input is a URL. + * + * @param {Object} obj Object of unknown type. + * @returns {boolean} True iff obj is a URL. + */ +function isUrl(obj) { + return !!obj && (Object.getPrototypeOf(obj) === URL.prototype); +} +module.exports.isUrl = isUrl; + +/** + * Clones the input if it is an Array. + * + * @param {Object} arr Object of unknown type. + * @returns {Object} Clone of obj iff obj is an Array. + */ +function cloneIfArray(arr) { + return Array.isArray(arr) ? [ ...arr ] : arr; +} +module.exports.cloneIfArray = cloneIfArray; + +/** + * Clones the input if it is a URL. + * + * @param {Object} url Object of unknown type. + * @returns {Object} Clone of obj iff obj is a URL. + */ +function cloneIfUrl(url) { + return isUrl(url) ? new URL(url) : url; +} +module.exports.cloneIfUrl = cloneIfUrl; + +/** + * Gets a Regular Expression for matching the specified HTML attribute. + * + * @param {string} name HTML attribute name. + * @returns {RegExp} Regular Expression for matching. + */ +module.exports.getHtmlAttributeRe = function getHtmlAttributeRe(name) { + return new RegExp(`\\s${name}\\s*=\\s*['"]?([^'"\\s>]*)`, "iu"); +}; + +/** + * Returns true iff the input line is blank (contains nothing, whitespace, or + * comments (unclosed start/end comments allowed)). + * + * @param {string} line Input line. + * @returns {boolean} True iff line is blank. + */ +function isBlankLine(line) { + const startComment = ""; + const removeComments = (s) => { + while (true) { + const start = s.indexOf(startComment); + const end = s.indexOf(endComment); + if ((end !== -1) && ((start === -1) || (end < start))) { + // Unmatched end comment is first + s = s.slice(end + endComment.length); + } else if ((start !== -1) && (end !== -1)) { + // Start comment is before end comment + s = s.slice(0, start) + s.slice(end + endComment.length); + } else if ((start !== -1) && (end === -1)) { + // Unmatched start comment is last + s = s.slice(0, start); + } else { + // No more comments to remove + return s; + } + } + }; + return ( + !line || + !line.trim() || + !removeComments(line).replace(/>/g, "").trim() + ); +} +module.exports.isBlankLine = isBlankLine; + +// Replaces the content of properly-formatted CommonMark comments with "." +// This preserves the line/column information for the rest of the document +// https://spec.commonmark.org/0.29/#html-blocks +// https://spec.commonmark.org/0.29/#html-comment +const htmlCommentBegin = ""; +const safeCommentCharacter = "."; +const startsWithPipeRe = /^ *\|/; +const notCrLfRe = /[^\r\n]/g; +const notSpaceCrLfRe = /[^ \r\n]/g; +const trailingSpaceRe = / +[\r\n]/g; +const replaceTrailingSpace = (s) => s.replace(notCrLfRe, safeCommentCharacter); +module.exports.clearHtmlCommentText = function clearHtmlCommentText(text) { + let i = 0; + while ((i = text.indexOf(htmlCommentBegin, i)) !== -1) { + const j = text.indexOf(htmlCommentEnd, i + 2); + if (j === -1) { + // Un-terminated comments are treated as text + break; + } + // If the comment has content... + if (j > i + htmlCommentBegin.length) { + const content = text.slice(i + htmlCommentBegin.length, j); + const lastLf = text.lastIndexOf("\n", i) + 1; + const preText = text.slice(lastLf, i); + const isBlock = preText.trim().length === 0; + const couldBeTable = startsWithPipeRe.test(preText); + const spansTableCells = couldBeTable && content.includes("\n"); + const isValid = + isBlock || + !( + spansTableCells || + content.startsWith(">") || + content.startsWith("->") || + content.endsWith("-") || + content.includes("--") + ); + // If a valid block/inline comment... + if (isValid) { + const clearedContent = content + .replace(notSpaceCrLfRe, safeCommentCharacter) + .replace(trailingSpaceRe, replaceTrailingSpace); + text = + text.slice(0, i + htmlCommentBegin.length) + + clearedContent + + text.slice(j); + } + } + i = j + htmlCommentEnd.length; + } + return text; +}; + +// Escapes a string for use in a RegExp +module.exports.escapeForRegExp = function escapeForRegExp(str) { + return str.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); +}; + +/** + * Adds ellipsis to the left/right/middle of the specified text. + * + * @param {string} text Text to ellipsify. + * @param {boolean} [start] True iff the start of the text is important. + * @param {boolean} [end] True iff the end of the text is important. + * @returns {string} Ellipsified text. + */ +function ellipsify(text, start, end) { + if (text.length <= 30) { + // Nothing to do + } else if (start && end) { + text = text.slice(0, 15) + "..." + text.slice(-15); + } else if (end) { + text = "..." + text.slice(-30); + } else { + text = text.slice(0, 30) + "..."; + } + return text; +} +module.exports.ellipsify = ellipsify; + +/** + * Adds a generic error object via the onError callback. + * + * @param {RuleOnError} onError RuleOnError instance. + * @param {number} lineNumber Line number. + * @param {string} [detail] Error details. + * @param {string} [context] Error context. + * @param {number[]} [range] Column and length of error. + * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. + * @returns {void} + */ +function addError(onError, lineNumber, detail, context, range, fixInfo) { + onError({ + lineNumber, + detail, + context, + range, + fixInfo + }); +} +module.exports.addError = addError; + +/** + * Adds an error object with details conditionally via the onError callback. + * + * @param {RuleOnError} onError RuleOnError instance. + * @param {number} lineNumber Line number. + * @param {Object} expected Expected value. + * @param {Object} actual Actual value. + * @param {string} [detail] Error details. + * @param {string} [context] Error context. + * @param {number[]} [range] Column and length of error. + * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. + * @returns {void} + */ +function addErrorDetailIf( + onError, lineNumber, expected, actual, detail, context, range, fixInfo) { + if (expected !== actual) { + addError( + onError, + lineNumber, + "Expected: " + expected + "; Actual: " + actual + + (detail ? "; " + detail : ""), + context, + range, + fixInfo); + } +} +module.exports.addErrorDetailIf = addErrorDetailIf; + +/** + * Adds an error object with context via the onError callback. + * + * @param {RuleOnError} onError RuleOnError instance. + * @param {number} lineNumber Line number. + * @param {string} context Error context. + * @param {boolean} [start] True iff the start of the text is important. + * @param {boolean} [end] True iff the end of the text is important. + * @param {number[]} [range] Column and length of error. + * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. + * @returns {void} + */ +function addErrorContext( + onError, lineNumber, context, start, end, range, fixInfo) { + context = ellipsify(context, start, end); + addError(onError, lineNumber, undefined, context, range, fixInfo); +} +module.exports.addErrorContext = addErrorContext; + +/** + * Defines a range within a file (start line/column to end line/column, subset of MicromarkToken). + * + * @typedef {Object} FileRange + * @property {number} startLine Start line (1-based). + * @property {number} startColumn Start column (1-based). + * @property {number} endLine End line (1-based). + * @property {number} endColumn End column (1-based). + */ + +/** + * Returns whether line/column A is less than or equal to line/column B. + * + * @param {number} lineA Line A. + * @param {number} columnA Column A. + * @param {number} lineB Line B. + * @param {number} columnB Column B. + * @returns {boolean} True iff A is less than or equal to B. + */ +const positionLessThanOrEqual = (lineA, columnA, lineB, columnB) => ( + (lineA < lineB) || + ((lineA === lineB) && (columnA <= columnB)) +); + +/** + * Returns whether two ranges (or MicromarkTokens) overlap anywhere. + * + * @param {FileRange|MicromarkToken} rangeA Range A. + * @param {FileRange|MicromarkToken} rangeB Range B. + * @returns {boolean} True iff the two ranges overlap. + */ +module.exports.hasOverlap = function hasOverlap(rangeA, rangeB) { + const lte = positionLessThanOrEqual(rangeA.startLine, rangeA.startColumn, rangeB.startLine, rangeB.startColumn); + const first = lte ? rangeA : rangeB; + const second = lte ? rangeB : rangeA; + return positionLessThanOrEqual(second.startLine, second.startColumn, first.endLine, first.endColumn); +}; + +// Determines if the front matter includes a title +module.exports.frontMatterHasTitle = + function frontMatterHasTitle(frontMatterLines, frontMatterTitlePattern) { + const ignoreFrontMatter = + (frontMatterTitlePattern !== undefined) && !frontMatterTitlePattern; + const frontMatterTitleRe = + new RegExp( + String(frontMatterTitlePattern || "^\\s*\"?title\"?\\s*[:=]"), + "i" + ); + return !ignoreFrontMatter && + frontMatterLines.some((line) => frontMatterTitleRe.test(line)); + }; + +/** + * Returns an object with information about reference links and images. + * + * @param {MicromarkToken[]} tokens Micromark tokens. + * @returns {Object} Reference link/image data. + */ +function getReferenceLinkImageData(tokens) { + const normalizeReference = (s) => s.toLowerCase().trim().replace(/\s+/g, " "); + const references = new Map(); + const shortcuts = new Map(); + const addReferenceToDictionary = (token, label, isShortcut) => { + const referenceDatum = [ + token.startLine - 1, + token.startColumn - 1, + token.text.length + ]; + const reference = normalizeReference(label); + const dictionary = isShortcut ? shortcuts : references; + const referenceData = dictionary.get(reference) || []; + referenceData.push(referenceDatum); + dictionary.set(reference, referenceData); + }; + const definitions = new Map(); + const definitionLineIndices = []; + const duplicateDefinitions = []; + const filteredTokens = + micromark.filterByTypes( + tokens, + [ + // definitionLineIndices + "definition", "gfmFootnoteDefinition", + // definitions and definitionLineIndices + "definitionLabelString", "gfmFootnoteDefinitionLabelString", + // references and shortcuts + "gfmFootnoteCall", "image", "link", + // undefined link labels + "undefinedReferenceCollapsed", "undefinedReferenceFull", "undefinedReferenceShortcut" + ] + ); + for (const token of filteredTokens) { + let labelPrefix = ""; + // eslint-disable-next-line default-case + switch (token.type) { + case "definition": + case "gfmFootnoteDefinition": + // definitionLineIndices + for (let i = token.startLine; i <= token.endLine; i++) { + definitionLineIndices.push(i - 1); + } + break; + case "gfmFootnoteDefinitionLabelString": + labelPrefix = "^"; + case "definitionLabelString": // eslint-disable-line no-fallthrough + { + // definitions and definitionLineIndices + const reference = normalizeReference(`${labelPrefix}${token.text}`); + if (definitions.has(reference)) { + duplicateDefinitions.push([ reference, token.startLine - 1 ]); + } else { + const parent = + micromark.getParentOfType(token, [ "definition" ]); + const destinationString = parent && + micromark.getDescendantsByType(parent, [ "definitionDestination", "definitionDestinationRaw", "definitionDestinationString" ])[0]?.text; + definitions.set( + reference, + [ token.startLine - 1, destinationString ] + ); + } + } + break; + case "gfmFootnoteCall": + case "image": + case "link": + { + // Identify if shortcut or full/collapsed + let isShortcut = (token.children.length === 1); + const isFullOrCollapsed = (token.children.length === 2) && !token.children.some((t) => t.type === "resource"); + const [ labelText ] = micromark.getDescendantsByType(token, [ "label", "labelText" ]); + const [ referenceString ] = micromark.getDescendantsByType(token, [ "reference", "referenceString" ]); + let label = labelText?.text; + // Identify if footnote + if (!isShortcut && !isFullOrCollapsed) { + const [ footnoteCallMarker, footnoteCallString ] = token.children.filter( + (t) => [ "gfmFootnoteCallMarker", "gfmFootnoteCallString" ].includes(t.type) + ); + if (footnoteCallMarker && footnoteCallString) { + label = `${footnoteCallMarker.text}${footnoteCallString.text}`; + isShortcut = true; + } + } + // Track link (handle shortcuts separately due to ambiguity in "text [text] text") + if (isShortcut || isFullOrCollapsed) { + addReferenceToDictionary(token, referenceString?.text || label, isShortcut); + } + } + break; + case "undefinedReferenceCollapsed": + case "undefinedReferenceFull": + case "undefinedReferenceShortcut": + { + const undefinedReference = micromark.getDescendantsByType(token, [ "undefinedReference" ])[0]; + const label = undefinedReference.children.map((t) => t.text).join(""); + const isShortcut = (token.type === "undefinedReferenceShortcut"); + addReferenceToDictionary(token, label, isShortcut); + } + break; + } + } + return { + references, + shortcuts, + definitions, + duplicateDefinitions, + definitionLineIndices + }; +} +module.exports.getReferenceLinkImageData = getReferenceLinkImageData; + +/** + * Gets the most common line ending, falling back to the platform default. + * + * @param {string} input Markdown content to analyze. + * @param {Object} [os] Node.js "os" module. + * @returns {string} Preferred line ending. + */ +function getPreferredLineEnding(input, os) { + let cr = 0; + let lf = 0; + let crlf = 0; + const endings = input.match(newLineRe) || []; + for (const ending of endings) { + // eslint-disable-next-line default-case + switch (ending) { + case "\r": + cr++; + break; + case "\n": + lf++; + break; + case "\r\n": + crlf++; + break; + } + } + let preferredLineEnding = null; + if (!cr && !lf && !crlf) { + preferredLineEnding = (os && os.EOL) || "\n"; + } else if ((lf >= crlf) && (lf >= cr)) { + preferredLineEnding = "\n"; + } else if (crlf >= cr) { + preferredLineEnding = "\r\n"; + } else { + preferredLineEnding = "\r"; + } + return preferredLineEnding; +} +module.exports.getPreferredLineEnding = getPreferredLineEnding; + +/** + * Expands a path with a tilde to an absolute path. + * + * @param {string} file Path that may begin with a tilde. + * @param {Object} os Node.js "os" module. + * @returns {string} Absolute path (or original path). + */ +function expandTildePath(file, os) { + const homedir = os && os.homedir && os.homedir(); + return homedir ? file.replace(/^~($|\/|\\)/, `${homedir}$1`) : file; +} +module.exports.expandTildePath = expandTildePath; diff --git a/node_modules/markdownlint/helpers/micromark-helpers.cjs b/node_modules/markdownlint/helpers/micromark-helpers.cjs new file mode 100644 index 0000000000..87e75cbe63 --- /dev/null +++ b/node_modules/markdownlint/helpers/micromark-helpers.cjs @@ -0,0 +1,301 @@ +// @ts-check + +"use strict"; + +const { flatTokensSymbol, htmlFlowSymbol } = require("./shared.cjs"); + +// eslint-disable-next-line jsdoc/valid-types +/** @typedef {import("micromark-util-types", { with: { "resolution-mode": "import" } }).TokenType} TokenType */ +// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 +/** @typedef {import("../lib/exports.mjs").MicromarkToken} Token */ + +/** + * Determines if a Micromark token is within an htmlFlow type. + * + * @param {Token} token Micromark token. + * @returns {boolean} True iff the token is within an htmlFlow type. + */ +function inHtmlFlow(token) { + return Boolean(token[htmlFlowSymbol]); +} + +/** + * Returns whether a token is an htmlFlow type containing an HTML comment. + * + * @param {Token} token Micromark token. + * @returns {boolean} True iff token is htmlFlow containing a comment. + */ +function isHtmlFlowComment(token) { + const { text, type } = token; + if ( + (type === "htmlFlow") && + text.startsWith("") + ) { + const comment = text.slice(4, -3); + return ( + !comment.startsWith(">") && + !comment.startsWith("->") && + !comment.endsWith("-") + // The following condition from the CommonMark specification is commented + // to avoid parsing HTML comments that include "--" because that is NOT a + // condition of the HTML specification. + // https://spec.commonmark.org/0.30/#raw-html + // https://html.spec.whatwg.org/multipage/syntax.html#comments + // && !comment.includes("--") + ); + } + return false; +} + +/** + * Adds a range of numbers to a set. + * + * @param {Set} set Set of numbers. + * @param {number} start Starting number. + * @param {number} end Ending number. + * @returns {void} + */ +function addRangeToSet(set, start, end) { + for (let i = start; i <= end; i++) { + set.add(i); + } +} + +/** + * @callback AllowedPredicate + * @param {Token} token Micromark token. + * @returns {boolean} True iff allowed. + */ + +/** + * @callback TransformPredicate + * @param {Token} token Micromark token. + * @returns {Token[]} Child tokens. + */ + +/** + * Filter a list of Micromark tokens by predicate. + * + * @param {Token[]} tokens Micromark tokens. + * @param {AllowedPredicate} allowed Allowed token predicate. + * @param {TransformPredicate} [transformChildren] Transform predicate. + * @returns {Token[]} Filtered tokens. + */ +function filterByPredicate(tokens, allowed, transformChildren) { + const result = []; + const queue = [ + { + "array": tokens, + "index": 0 + } + ]; + while (queue.length > 0) { + const current = queue[queue.length - 1]; + const { array, index } = current; + if (index < array.length) { + const token = array[current.index++]; + if (allowed(token)) { + result.push(token); + } + const { children } = token; + if (children.length > 0) { + const transformed = + transformChildren ? transformChildren(token) : children; + queue.push( + { + "array": transformed, + "index": 0 + } + ); + } + } else { + queue.pop(); + } + } + return result; +} + +/** + * Filter a list of Micromark tokens by type. + * + * @param {Token[]} tokens Micromark tokens. + * @param {TokenType[]} types Types to allow. + * @param {boolean} [htmlFlow] Whether to include htmlFlow content. + * @returns {Token[]} Filtered tokens. + */ +function filterByTypes(tokens, types, htmlFlow) { + const predicate = (token) => types.includes(token.type) && (htmlFlow || !inHtmlFlow(token)); + const flatTokens = tokens[flatTokensSymbol]; + if (flatTokens) { + return flatTokens.filter(predicate); + } + return filterByPredicate(tokens, predicate); +} + +/** + * Gets the blockquote prefix text (if any) for the specified line number. + * + * @param {Token[]} tokens Micromark tokens. + * @param {number} lineNumber Line number to examine. + * @param {number} [count] Number of times to repeat. + * @returns {string} Blockquote prefix text. + */ +function getBlockQuotePrefixText(tokens, lineNumber, count = 1) { + return filterByTypes(tokens, [ "blockQuotePrefix", "linePrefix" ]) + .filter((prefix) => prefix.startLine === lineNumber) + .map((prefix) => prefix.text) + .join("") + .trimEnd() + // eslint-disable-next-line unicorn/prefer-spread + .concat("\n") + .repeat(count); +}; + +/** + * Gets a list of nested Micromark token descendants by type path. + * + * @param {Token|Token[]} parent Micromark token parent or parents. + * @param {(TokenType|TokenType[])[]} typePath Micromark token type path. + * @returns {Token[]} Micromark token descendants. + */ +function getDescendantsByType(parent, typePath) { + let tokens = Array.isArray(parent) ? parent : [ parent ]; + for (const type of typePath) { + const predicate = (token) => Array.isArray(type) ? type.includes(token.type) : (type === token.type); + tokens = tokens.flatMap((t) => t.children.filter(predicate)); + } + return tokens; +} + +/** + * Gets the heading level of a Micromark heading tokan. + * + * @param {Token} heading Micromark heading token. + * @returns {number} Heading level. + */ +function getHeadingLevel(heading) { + let level = 1; + const headingSequence = heading.children.find( + (child) => [ "atxHeadingSequence", "setextHeadingLine" ].includes(child.type) + ); + // @ts-ignore + const { text } = headingSequence; + if (text[0] === "#") { + level = Math.min(text.length, 6); + } else if (text[0] === "-") { + level = 2; + } + return level; +} + +/** + * Gets the heading style of a Micromark heading tokan. + * + * @param {Token} heading Micromark heading token. + * @returns {"atx" | "atx_closed" | "setext"} Heading style. + */ +function getHeadingStyle(heading) { + if (heading.type === "setextHeading") { + return "setext"; + } + const atxHeadingSequenceLength = heading.children.filter( + (child) => child.type === "atxHeadingSequence" + ).length; + if (atxHeadingSequenceLength === 1) { + return "atx"; + } + return "atx_closed"; +} + +/** + * Gets the heading text of a Micromark heading token. + * + * @param {Token} heading Micromark heading token. + * @returns {string} Heading text. + */ +function getHeadingText(heading) { + const headingTexts = getDescendantsByType(heading, [ [ "atxHeadingText", "setextHeadingText" ] ]); + return headingTexts[0]?.text.replace(/[\r\n]+/g, " ") || ""; +} + +/** + * HTML tag information. + * + * @typedef {Object} HtmlTagInfo + * @property {boolean} close True iff close tag. + * @property {string} name Tag name. + */ + +/** + * Gets information about the tag in an HTML token. + * + * @param {Token} token Micromark token. + * @returns {HtmlTagInfo | null} HTML tag information. + */ +function getHtmlTagInfo(token) { + const htmlTagNameRe = /^<([^!>][^/\s>]*)/; + if (token.type === "htmlText") { + const match = htmlTagNameRe.exec(token.text); + if (match) { + const name = match[1]; + const close = name.startsWith("/"); + return { + close, + "name": close ? name.slice(1) : name + }; + } + } + return null; +} + +/** + * Gets the nearest parent of the specified type for a Micromark token. + * + * @param {Token} token Micromark token. + * @param {TokenType[]} types Types to allow. + * @returns {Token | null} Parent token. + */ +function getParentOfType(token, types) { + /** @type {Token | null} */ + let current = token; + while ((current = current.parent) && !types.includes(current.type)) { + // Empty + } + return current; +} + +/** + * Set containing token types that do not contain content. + * + * @type {Set} + */ +const nonContentTokens = new Set([ + "blockQuoteMarker", + "blockQuotePrefix", + "blockQuotePrefixWhitespace", + "lineEnding", + "lineEndingBlank", + "linePrefix", + "listItemIndent", + "undefinedReference", + "undefinedReferenceCollapsed", + "undefinedReferenceFull", + "undefinedReferenceShortcut" +]); + +module.exports = { + addRangeToSet, + filterByPredicate, + filterByTypes, + getBlockQuotePrefixText, + getDescendantsByType, + getHeadingLevel, + getHeadingStyle, + getHeadingText, + getHtmlTagInfo, + getParentOfType, + inHtmlFlow, + isHtmlFlowComment, + nonContentTokens +}; diff --git a/node_modules/markdownlint/helpers/package.json b/node_modules/markdownlint/helpers/package.json new file mode 100644 index 0000000000..a5ef55520a --- /dev/null +++ b/node_modules/markdownlint/helpers/package.json @@ -0,0 +1,26 @@ +{ + "name": "markdownlint-rule-helpers", + "version": "0.28.0", + "description": "A collection of markdownlint helper functions for custom rules", + "main": "./helpers.cjs", + "exports": { + ".": "./helpers.cjs", + "./micromark": "./micromark-helpers.cjs" + }, + "author": "David Anson (https://dlaa.me/)", + "license": "MIT", + "homepage": "https://github.com/DavidAnson/markdownlint", + "repository": { + "type": "git", + "url": "git+https://github.com/DavidAnson/markdownlint.git" + }, + "bugs": "https://github.com/DavidAnson/markdownlint/issues", + "funding": "https://github.com/sponsors/DavidAnson", + "engines": { + "node": ">=18" + }, + "keywords": [ + "markdownlint", + "markdownlint-rule" + ] +} diff --git a/node_modules/markdownlint/helpers/shared.cjs b/node_modules/markdownlint/helpers/shared.cjs new file mode 100644 index 0000000000..dfb38c313d --- /dev/null +++ b/node_modules/markdownlint/helpers/shared.cjs @@ -0,0 +1,16 @@ +// @ts-check + +"use strict"; + +// Symbol for identifing the flat tokens array from micromark parse +module.exports.flatTokensSymbol = Symbol("flat-tokens"); + +// Symbol for identifying the htmlFlow token from micromark parse +module.exports.htmlFlowSymbol = Symbol("html-flow"); + +// Regular expression for matching common newline characters +// See NEWLINES_RE in markdown-it/lib/rules_core/normalize.js +module.exports.newLineRe = /\r\n?|\n/g; + +// Regular expression for matching next lines +module.exports.nextLinesRe = /[\r\n][\s\S]*$/; diff --git a/node_modules/markdownlint/package.json b/node_modules/markdownlint/package.json new file mode 100644 index 0000000000..cee17b2634 --- /dev/null +++ b/node_modules/markdownlint/package.json @@ -0,0 +1,120 @@ +{ + "name": "markdownlint", + "version": "0.37.4", + "description": "A Node.js style checker and lint tool for Markdown/CommonMark files.", + "type": "module", + "exports": { + ".": "./lib/exports.mjs", + "./async": "./lib/exports-async.mjs", + "./promise": "./lib/exports-promise.mjs", + "./sync": "./lib/exports-sync.mjs", + "./helpers": "./helpers/helpers.cjs", + "./style/all": "./style/all.json", + "./style/cirosantilli": "./style/cirosantilli.json", + "./style/prettier": "./style/prettier.json", + "./style/relaxed": "./style/relaxed.json" + }, + "imports": { + "#node-imports": { + "markdownlint-imports-browser": "./lib/node-imports-browser.mjs", + "markdownlint-imports-node": "./lib/node-imports-node.mjs", + "browser": "./lib/node-imports-browser.mjs", + "default": "./lib/node-imports-node.mjs" + } + }, + "types": "./lib/types.d.mts", + "author": "David Anson (https://dlaa.me/)", + "license": "MIT", + "homepage": "https://github.com/DavidAnson/markdownlint", + "repository": { + "type": "git", + "url": "git+https://github.com/DavidAnson/markdownlint.git" + }, + "bugs": "https://github.com/DavidAnson/markdownlint/issues", + "funding": "https://github.com/sponsors/DavidAnson", + "scripts": { + "build-config": "npm run build-config-schema && npm run build-config-example", + "build-config-example": "node schema/build-config-example.mjs", + "build-config-schema": "node schema/build-config-schema.mjs", + "build-declaration": "tsc --allowJs --checkJs --declaration --emitDeclarationOnly --module nodenext --outDir dts --rootDir . --target es2015 lib/exports.mjs lib/exports-async.mjs lib/exports-promise.mjs lib/exports-sync.mjs lib/markdownlint.mjs lib/resolve-module.cjs && node scripts/index.mjs copy dts/lib/exports.d.mts lib/exports.d.mts && node scripts/index.mjs copy dts/lib/exports-async.d.mts lib/exports-async.d.mts && node scripts/index.mjs copy dts/lib/exports-promise.d.mts lib/exports-promise.d.mts && node scripts/index.mjs copy dts/lib/exports-sync.d.mts lib/exports-sync.d.mts && node scripts/index.mjs copy dts/lib/markdownlint.d.mts lib/markdownlint.d.mts && node scripts/index.mjs copy dts/lib/resolve-module.d.cts lib/resolve-module.d.cts && node scripts/index.mjs remove dts", + "build-demo": "node scripts/index.mjs copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && cd demo && webpack --no-stats", + "build-docs": "node doc-build/build-rules.mjs", + "build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2", + "ci": "npm-run-all --continue-on-error --parallel lint serial-config-docs serial-declaration-demo test-cover && git diff --exit-code", + "clone-test-repos-apache-airflow": "cd test-repos && git clone https://github.com/apache/airflow apache-airflow --depth 1 --no-tags --quiet", + "clone-test-repos-dotnet-docs": "cd test-repos && git clone https://github.com/dotnet/docs dotnet-docs --depth 1 --no-tags --quiet", + "clone-test-repos-electron-electron": "cd test-repos && git clone https://github.com/electron/electron electron-electron --depth 1 --no-tags --quiet && cd electron-electron && npm install --ignore-scripts @electron/lint-roller typescript@4", + "clone-test-repos-eslint-eslint": "cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet", + "clone-test-repos-mdn-content": "cd test-repos && git clone https://github.com/mdn/content mdn-content --depth 1 --no-tags --quiet", + "clone-test-repos-mkdocs-mkdocs": "cd test-repos && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet", + "clone-test-repos-mochajs-mocha": "cd test-repos && git clone https://github.com/mochajs/mocha mochajs-mocha --depth 1 --no-tags --quiet", + "clone-test-repos-pi-hole-docs": "cd test-repos && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet", + "clone-test-repos-v8-v8-dev": "cd test-repos && git clone https://github.com/v8/v8.dev v8-v8-dev --depth 1 --no-tags --quiet", + "clone-test-repos-webhintio-hint": "cd test-repos && git clone https://github.com/webhintio/hint webhintio-hint --depth 1 --no-tags --quiet", + "clone-test-repos-webpack-webpack-js-org": "cd test-repos && git clone https://github.com/webpack/webpack.js.org webpack-webpack-js-org --depth 1 --no-tags --quiet", + "clone-test-repos": "mkdir test-repos && cd test-repos && npm run clone-test-repos-apache-airflow && npm run clone-test-repos-dotnet-docs && npm run clone-test-repos-electron-electron && npm run clone-test-repos-eslint-eslint && npm run clone-test-repos-mdn-content && npm run clone-test-repos-mkdocs-mkdocs && npm run clone-test-repos-mochajs-mocha && npm run clone-test-repos-pi-hole-docs && npm run clone-test-repos-v8-v8-dev && npm run clone-test-repos-webhintio-hint && npm run clone-test-repos-webpack-webpack-js-org", + "declaration": "npm run build-declaration && npm run test-declaration", + "example": "cd example && node standalone.mjs && grunt markdownlint --force && gulp markdownlint", + "lint": "eslint --max-warnings 0", + "lint-test-repos": "ava --timeout=10m test/markdownlint-test-repos-*.mjs", + "serial-config-docs": "npm run build-config && npm run build-docs", + "serial-declaration-demo": "npm run build-declaration && npm-run-all --continue-on-error --parallel build-demo test-declaration", + "test": "ava --timeout=30s test/markdownlint-test.mjs test/markdownlint-test-config.mjs test/markdownlint-test-custom-rules.mjs test/markdownlint-test-fixes.mjs test/markdownlint-test-helpers.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-result-object.mjs test/markdownlint-test-scenarios.mjs test/resolve-module-test.mjs helpers/test.cjs", + "test-cover": "c8 --100 npm test", + "test-declaration": "cd example/typescript && tsc --module commonjs && tsc --module nodenext && node type-check.js", + "test-extra": "ava --timeout=10m test/markdownlint-test-extra-parse.mjs test/markdownlint-test-extra-type.mjs", + "update-snapshots": "ava --update-snapshots test/markdownlint-test-custom-rules.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-scenarios.mjs", + "update-snapshots-test-repos": "ava --timeout=10m --update-snapshots test/markdownlint-test-repos-*.mjs", + "upgrade": "npx --yes npm-check-updates --upgrade" + }, + "engines": { + "node": ">=18" + }, + "dependencies": { + "markdown-it": "14.1.0", + "micromark": "4.0.1", + "micromark-core-commonmark": "2.0.2", + "micromark-extension-directive": "3.0.2", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.0", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.1" + }, + "devDependencies": { + "@eslint/js": "9.18.0", + "@stylistic/eslint-plugin": "2.13.0", + "ajv": "8.17.1", + "ava": "6.2.0", + "c8": "10.1.3", + "character-entities": "2.0.2", + "eslint": "9.18.0", + "eslint-plugin-jsdoc": "50.6.1", + "eslint-plugin-n": "17.15.1", + "eslint-plugin-regexp": "2.7.0", + "eslint-plugin-unicorn": "56.0.1", + "gemoji": "8.1.0", + "globby": "14.0.2", + "js-yaml": "4.1.0", + "json-schema-to-typescript": "15.0.4", + "jsonc-parser": "3.3.1", + "markdown-it-for-inline": "2.0.1", + "markdown-it-sub": "2.0.0", + "markdown-it-sup": "2.0.0", + "markdownlint-rule-extended-ascii": "0.1.0", + "nano-spawn": "0.2.0", + "npm-run-all": "4.1.5", + "terser-webpack-plugin": "5.3.11", + "toml": "3.0.0", + "typescript": "5.7.3", + "webpack": "5.97.1", + "webpack-cli": "6.0.1" + }, + "keywords": [ + "markdown", + "lint", + "md", + "CommonMark", + "markdownlint" + ] +} diff --git a/node_modules/markdownlint/schema/.markdownlint.jsonc b/node_modules/markdownlint/schema/.markdownlint.jsonc new file mode 100644 index 0000000000..f0f2f93cff --- /dev/null +++ b/node_modules/markdownlint/schema/.markdownlint.jsonc @@ -0,0 +1,310 @@ +// Example markdownlint configuration with all properties set to their default value +{ + + // Default state for all rules + "default": true, + + // Path to configuration file to extend + "extends": null, + + // MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md + "MD001": true, + + // MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md + "MD003": { + // Heading style + "style": "consistent" + }, + + // MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md + "MD004": { + // List style + "style": "consistent" + }, + + // MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md + "MD005": true, + + // MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md + "MD007": { + // Spaces for indent + "indent": 2, + // Whether to indent the first level of the list + "start_indented": false, + // Spaces for first level indent (when start_indented is set) + "start_indent": 2 + }, + + // MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md + "MD009": { + // Spaces for line break + "br_spaces": 2, + // Allow spaces for empty lines in list items + "list_item_empty_lines": false, + // Include unnecessary breaks + "strict": false + }, + + // MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md + "MD010": { + // Include code blocks + "code_blocks": true, + // Fenced code languages to ignore + "ignore_code_languages": [], + // Number of spaces for each hard tab + "spaces_per_tab": 1 + }, + + // MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md + "MD011": true, + + // MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md + "MD012": { + // Consecutive blank lines + "maximum": 1 + }, + + // MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md + "MD013": { + // Number of characters + "line_length": 80, + // Number of characters for headings + "heading_line_length": 80, + // Number of characters for code blocks + "code_block_line_length": 80, + // Include code blocks + "code_blocks": true, + // Include tables + "tables": true, + // Include headings + "headings": true, + // Strict length checking + "strict": false, + // Stern length checking + "stern": false + }, + + // MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md + "MD014": true, + + // MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md + "MD018": true, + + // MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md + "MD019": true, + + // MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md + "MD020": true, + + // MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md + "MD021": true, + + // MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md + "MD022": { + // Blank lines above heading + "lines_above": 1, + // Blank lines below heading + "lines_below": 1 + }, + + // MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md + "MD023": true, + + // MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md + "MD024": { + // Only check sibling headings + "siblings_only": false + }, + + // MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md + "MD025": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md + "MD026": { + // Punctuation characters + "punctuation": ".,;:!。,;:!" + }, + + // MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md + "MD027": true, + + // MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md + "MD028": true, + + // MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md + "MD029": { + // List style + "style": "one_or_ordered" + }, + + // MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md + "MD030": { + // Spaces for single-line unordered list items + "ul_single": 1, + // Spaces for single-line ordered list items + "ol_single": 1, + // Spaces for multi-line unordered list items + "ul_multi": 1, + // Spaces for multi-line ordered list items + "ol_multi": 1 + }, + + // MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md + "MD031": { + // Include list items + "list_items": true + }, + + // MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md + "MD032": true, + + // MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md + "MD033": { + // Allowed elements + "allowed_elements": [] + }, + + // MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md + "MD034": true, + + // MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md + "MD035": { + // Horizontal rule style + "style": "consistent" + }, + + // MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md + "MD036": { + // Punctuation characters + "punctuation": ".,;:!?。,;:!?" + }, + + // MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md + "MD037": true, + + // MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md + "MD038": true, + + // MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md + "MD039": true, + + // MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md + "MD040": { + // List of languages + "allowed_languages": [], + // Require language only + "language_only": false + }, + + // MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md + "MD041": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md + "MD042": true, + + // MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md + "MD043": { + // List of headings + "headings": [], + // Match case of headings + "match_case": false + }, + + // MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md + "MD044": { + // List of proper names + "names": [], + // Include code blocks + "code_blocks": true, + // Include HTML elements + "html_elements": true + }, + + // MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md + "MD045": true, + + // MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md + "MD046": { + // Block style + "style": "consistent" + }, + + // MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md + "MD047": true, + + // MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md + "MD048": { + // Code fence style + "style": "consistent" + }, + + // MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md + "MD049": { + // Emphasis style + "style": "consistent" + }, + + // MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md + "MD050": { + // Strong style + "style": "consistent" + }, + + // MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md + "MD051": { + // Ignore case of fragments + "ignore_case": false + }, + + // MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md + "MD052": { + // Include shortcut syntax + "shortcut_syntax": false + }, + + // MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md + "MD053": { + // Ignored definitions + "ignored_definitions": [ + "//" + ] + }, + + // MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md + "MD054": { + // Allow autolinks + "autolink": true, + // Allow inline links and images + "inline": true, + // Allow full reference links and images + "full": true, + // Allow collapsed reference links and images + "collapsed": true, + // Allow shortcut reference links and images + "shortcut": true, + // Allow URLs as inline links + "url_inline": true + }, + + // MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md + "MD055": { + // Table pipe style + "style": "consistent" + }, + + // MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md + "MD056": true, + + // MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md + "MD058": true +} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/.markdownlint.yaml b/node_modules/markdownlint/schema/.markdownlint.yaml new file mode 100644 index 0000000000..6e71bfd133 --- /dev/null +++ b/node_modules/markdownlint/schema/.markdownlint.yaml @@ -0,0 +1,277 @@ +# Example markdownlint configuration with all properties set to their default value + +# Default state for all rules +default: true + +# Path to configuration file to extend +extends: null + +# MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md +MD001: true + +# MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md +MD003: + # Heading style + style: "consistent" + +# MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md +MD004: + # List style + style: "consistent" + +# MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md +MD005: true + +# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md +MD007: + # Spaces for indent + indent: 2 + # Whether to indent the first level of the list + start_indented: false + # Spaces for first level indent (when start_indented is set) + start_indent: 2 + +# MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md +MD010: + # Include code blocks + code_blocks: true + # Fenced code languages to ignore + ignore_code_languages: [] + # Number of spaces for each hard tab + spaces_per_tab: 1 + +# MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md +MD011: true + +# MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md +MD012: + # Consecutive blank lines + maximum: 1 + +# MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md +MD013: + # Number of characters + line_length: 80 + # Number of characters for headings + heading_line_length: 80 + # Number of characters for code blocks + code_block_line_length: 80 + # Include code blocks + code_blocks: true + # Include tables + tables: true + # Include headings + headings: true + # Strict length checking + strict: false + # Stern length checking + stern: false + +# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md +MD014: true + +# MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md +MD018: true + +# MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md +MD019: true + +# MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md +MD020: true + +# MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md +MD021: true + +# MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md +MD022: + # Blank lines above heading + lines_above: 1 + # Blank lines below heading + lines_below: 1 + +# MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md +MD023: true + +# MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md +MD024: + # Only check sibling headings + siblings_only: false + +# MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md +MD026: + # Punctuation characters + punctuation: ".,;:!。,;:!" + +# MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md +MD027: true + +# MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md +MD028: true + +# MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md +MD029: + # List style + style: "one_or_ordered" + +# MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md +MD031: + # Include list items + list_items: true + +# MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md +MD032: true + +# MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md +MD033: + # Allowed elements + allowed_elements: [] + +# MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md +MD034: true + +# MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md +MD035: + # Horizontal rule style + style: "consistent" + +# MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md +MD036: + # Punctuation characters + punctuation: ".,;:!?。,;:!?" + +# MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md +MD037: true + +# MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md +MD038: true + +# MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md +MD039: true + +# MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md +MD040: + # List of languages + allowed_languages: [] + # Require language only + language_only: false + +# MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md +MD042: true + +# MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md +MD043: + # List of headings + headings: [] + # Match case of headings + match_case: false + +# MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md +MD044: + # List of proper names + names: [] + # Include code blocks + code_blocks: true + # Include HTML elements + html_elements: true + +# MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md +MD045: true + +# MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md +MD046: + # Block style + style: "consistent" + +# MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md +MD047: true + +# MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md +MD048: + # Code fence style + style: "consistent" + +# MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md +MD049: + # Emphasis style + style: "consistent" + +# MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md +MD050: + # Strong style + style: "consistent" + +# MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md +MD051: + # Ignore case of fragments + ignore_case: false + +# MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md +MD052: + # Include shortcut syntax + shortcut_syntax: false + +# MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md +MD053: + # Ignored definitions + ignored_definitions: + - "//" + +# MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md +MD054: + # Allow autolinks + autolink: true + # Allow inline links and images + inline: true + # Allow full reference links and images + full: true + # Allow collapsed reference links and images + collapsed: true + # Allow shortcut reference links and images + shortcut: true + # Allow URLs as inline links + url_inline: true + +# MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md +MD055: + # Table pipe style + style: "consistent" + +# MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md +MD056: true + +# MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md +MD058: true diff --git a/node_modules/markdownlint/schema/ValidatingConfiguration.md b/node_modules/markdownlint/schema/ValidatingConfiguration.md new file mode 100644 index 0000000000..5d842c4981 --- /dev/null +++ b/node_modules/markdownlint/schema/ValidatingConfiguration.md @@ -0,0 +1,26 @@ +# Validating Configuration + +A [JSON Schema][json-schema] is provided to enable validating configuration +objects: [`markdownlint-config-schema.json`][markdownlint-config-schema]. + +Some editors automatically use a JSON Schema with files that reference it. For +example, a `.markdownlint.json` file with: + +```json +"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json" +``` + +A JSON Schema validator can be used to check configuration files like so: + +```bash +npx ajv-cli validate -s ./markdownlint/schema/markdownlint-config-schema.json -d "**/.markdownlint.{json,yaml}" --strict=false +``` + +By default, any rule name is valid because of custom rules. To allow only +built-in rules, use the +[`markdownlint-config-schema-strict.json`][markdownlint-config-schema-strict] +JSON Schema instead. + +[json-schema]: https://json-schema.org +[markdownlint-config-schema]: markdownlint-config-schema.json +[markdownlint-config-schema-strict]: markdownlint-config-schema-strict.json diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json b/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json new file mode 100644 index 0000000000..fe1692651e --- /dev/null +++ b/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json @@ -0,0 +1,1841 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema-strict.json", + "title": "markdownlint configuration schema", + "type": "object", + "properties": { + "$schema": { + "description": "JSON Schema URI (expected by some editors)", + "type": "string", + "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" + }, + "default": { + "description": "Default state for all rules", + "type": "boolean", + "default": true + }, + "extends": { + "description": "Path to configuration file to extend", + "type": [ + "string", + "null" + ], + "default": null + }, + "MD001": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "heading-increment": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "MD003": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "heading-style": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD004": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "ul-style": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD005": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "list-indent": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "MD007": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "ul-indent": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "MD009": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-trailing-spaces": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD010": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-hard-tabs": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD011": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "no-reversed-links": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "MD012": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-multiple-blanks": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD013": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "line-length": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD014": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "commands-show-output": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "MD018": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "no-missing-space-atx": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "MD019": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-atx": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "MD020": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "no-missing-space-closed-atx": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "MD021": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-closed-atx": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "MD022": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "blanks-around-headings": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD023": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "heading-start-left": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "MD024": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-duplicate-heading": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD025": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-title": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-h1": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD026": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "no-trailing-punctuation": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "MD027": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-blockquote": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "MD028": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "no-blanks-blockquote": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "MD029": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "ol-prefix": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "MD030": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "list-marker-space": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD031": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "blanks-around-fences": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD032": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "blanks-around-lists": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "MD033": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "no-inline-html": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "MD034": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "no-bare-urls": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "MD035": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "hr-style": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD036": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "no-emphasis-as-heading": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "MD037": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "no-space-in-emphasis": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "MD038": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "no-space-in-code": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "MD039": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "no-space-in-links": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "MD040": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "fenced-code-language": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD041": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-heading": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-h1": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD042": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "no-empty-links": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "MD043": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "required-headings": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD044": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "proper-names": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD045": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "no-alt-text": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "MD046": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-block-style": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD047": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "single-trailing-newline": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "MD048": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-fence-style": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD049": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "emphasis-style": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD050": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "strong-style": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD051": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "link-fragments": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD052": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "reference-links-images": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD053": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "link-image-reference-definitions": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "MD054": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "link-image-style": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD055": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "table-pipe-style": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD056": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "table-column-count": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "MD058": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "blanks-around-tables": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "headings": { + "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", + "type": "boolean", + "default": true + }, + "bullet": { + "description": "bullet : MD004, MD005, MD007, MD032", + "type": "boolean", + "default": true + }, + "ul": { + "description": "ul : MD004, MD005, MD007, MD030, MD032", + "type": "boolean", + "default": true + }, + "indentation": { + "description": "indentation : MD005, MD007, MD027", + "type": "boolean", + "default": true + }, + "whitespace": { + "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", + "type": "boolean", + "default": true + }, + "hard_tab": { + "description": "hard_tab : MD010", + "type": "boolean", + "default": true + }, + "links": { + "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "blank_lines": { + "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", + "type": "boolean", + "default": true + }, + "line_length": { + "description": "line_length : MD013", + "type": "boolean", + "default": true + }, + "code": { + "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", + "type": "boolean", + "default": true + }, + "atx": { + "description": "atx : MD018, MD019", + "type": "boolean", + "default": true + }, + "spaces": { + "description": "spaces : MD018, MD019, MD020, MD021, MD023", + "type": "boolean", + "default": true + }, + "atx_closed": { + "description": "atx_closed : MD020, MD021", + "type": "boolean", + "default": true + }, + "blockquote": { + "description": "blockquote : MD027, MD028", + "type": "boolean", + "default": true + }, + "ol": { + "description": "ol : MD029, MD030, MD032", + "type": "boolean", + "default": true + }, + "html": { + "description": "html : MD033", + "type": "boolean", + "default": true + }, + "url": { + "description": "url : MD034", + "type": "boolean", + "default": true + }, + "hr": { + "description": "hr : MD035", + "type": "boolean", + "default": true + }, + "emphasis": { + "description": "emphasis : MD036, MD037, MD049, MD050", + "type": "boolean", + "default": true + }, + "language": { + "description": "language : MD040", + "type": "boolean", + "default": true + }, + "spelling": { + "description": "spelling : MD044", + "type": "boolean", + "default": true + }, + "accessibility": { + "description": "accessibility : MD045", + "type": "boolean", + "default": true + }, + "images": { + "description": "images : MD045, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "table": { + "description": "table : MD055, MD056, MD058", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema.json b/node_modules/markdownlint/schema/markdownlint-config-schema.json new file mode 100644 index 0000000000..58005e01c7 --- /dev/null +++ b/node_modules/markdownlint/schema/markdownlint-config-schema.json @@ -0,0 +1,1846 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json", + "title": "markdownlint configuration schema", + "type": "object", + "properties": { + "$schema": { + "description": "JSON Schema URI (expected by some editors)", + "type": "string", + "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" + }, + "default": { + "description": "Default state for all rules", + "type": "boolean", + "default": true + }, + "extends": { + "description": "Path to configuration file to extend", + "type": [ + "string", + "null" + ], + "default": null + }, + "MD001": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "heading-increment": { + "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", + "type": "boolean", + "default": true + }, + "MD003": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "heading-style": { + "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Heading style", + "type": "string", + "enum": [ + "consistent", + "atx", + "atx_closed", + "setext", + "setext_with_atx", + "setext_with_atx_closed" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD004": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "ul-style": { + "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "plus", + "dash", + "sublist" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD005": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "list-indent": { + "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", + "type": "boolean", + "default": true + }, + "MD007": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "ul-indent": { + "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "indent": { + "description": "Spaces for indent", + "type": "integer", + "minimum": 1, + "default": 2 + }, + "start_indented": { + "description": "Whether to indent the first level of the list", + "type": "boolean", + "default": false + }, + "start_indent": { + "description": "Spaces for first level indent (when start_indented is set)", + "type": "integer", + "minimum": 1, + "default": 2 + } + }, + "additionalProperties": false + }, + "MD009": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-trailing-spaces": { + "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "br_spaces": { + "description": "Spaces for line break", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "list_item_empty_lines": { + "description": "Allow spaces for empty lines in list items", + "type": "boolean", + "default": false + }, + "strict": { + "description": "Include unnecessary breaks", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD010": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-hard-tabs": { + "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "ignore_code_languages": { + "description": "Fenced code languages to ignore", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "spaces_per_tab": { + "description": "Number of spaces for each hard tab", + "type": "integer", + "minimum": 0, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD011": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "no-reversed-links": { + "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", + "type": "boolean", + "default": true + }, + "MD012": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "no-multiple-blanks": { + "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "maximum": { + "description": "Consecutive blank lines", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD013": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "line-length": { + "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "line_length": { + "description": "Number of characters", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "heading_line_length": { + "description": "Number of characters for headings", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_block_line_length": { + "description": "Number of characters for code blocks", + "type": "integer", + "minimum": 1, + "default": 80 + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "tables": { + "description": "Include tables", + "type": "boolean", + "default": true + }, + "headings": { + "description": "Include headings", + "type": "boolean", + "default": true + }, + "strict": { + "description": "Strict length checking", + "type": "boolean", + "default": false + }, + "stern": { + "description": "Stern length checking", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD014": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "commands-show-output": { + "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", + "type": "boolean", + "default": true + }, + "MD018": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "no-missing-space-atx": { + "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", + "type": "boolean", + "default": true + }, + "MD019": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-atx": { + "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", + "type": "boolean", + "default": true + }, + "MD020": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "no-missing-space-closed-atx": { + "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", + "type": "boolean", + "default": true + }, + "MD021": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-closed-atx": { + "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", + "type": "boolean", + "default": true + }, + "MD022": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "blanks-around-headings": { + "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "lines_above": { + "description": "Blank lines above heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + }, + "lines_below": { + "description": "Blank lines below heading", + "type": [ + "integer", + "array" + ], + "items": { + "type": "integer" + }, + "minimum": -1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD023": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "heading-start-left": { + "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", + "type": "boolean", + "default": true + }, + "MD024": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "no-duplicate-heading": { + "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "siblings_only": { + "description": "Only check sibling headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD025": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-title": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "single-h1": { + "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD026": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "no-trailing-punctuation": { + "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!。,;:!" + } + }, + "additionalProperties": false + }, + "MD027": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "no-multiple-space-blockquote": { + "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", + "type": "boolean", + "default": true + }, + "MD028": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "no-blanks-blockquote": { + "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", + "type": "boolean", + "default": true + }, + "MD029": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "ol-prefix": { + "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "List style", + "type": "string", + "enum": [ + "one", + "ordered", + "one_or_ordered", + "zero" + ], + "default": "one_or_ordered" + } + }, + "additionalProperties": false + }, + "MD030": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "list-marker-space": { + "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ul_single": { + "description": "Spaces for single-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_single": { + "description": "Spaces for single-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ul_multi": { + "description": "Spaces for multi-line unordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "ol_multi": { + "description": "Spaces for multi-line ordered list items", + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "additionalProperties": false + }, + "MD031": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "blanks-around-fences": { + "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "list_items": { + "description": "Include list items", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD032": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "blanks-around-lists": { + "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", + "type": "boolean", + "default": true + }, + "MD033": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "no-inline-html": { + "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_elements": { + "description": "Allowed elements", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + } + }, + "additionalProperties": false + }, + "MD034": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "no-bare-urls": { + "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", + "type": "boolean", + "default": true + }, + "MD035": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "hr-style": { + "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Horizontal rule style", + "type": "string", + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD036": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "no-emphasis-as-heading": { + "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "punctuation": { + "description": "Punctuation characters", + "type": "string", + "default": ".,;:!?。,;:!?" + } + }, + "additionalProperties": false + }, + "MD037": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "no-space-in-emphasis": { + "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", + "type": "boolean", + "default": true + }, + "MD038": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "no-space-in-code": { + "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", + "type": "boolean", + "default": true + }, + "MD039": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "no-space-in-links": { + "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", + "type": "boolean", + "default": true + }, + "MD040": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "fenced-code-language": { + "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "allowed_languages": { + "description": "List of languages", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "language_only": { + "description": "Require language only", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD041": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-heading": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "first-line-h1": { + "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "level": { + "description": "Heading level", + "type": "integer", + "minimum": 1, + "maximum": 6, + "default": 1 + }, + "front_matter_title": { + "description": "RegExp for matching title in front matter", + "type": "string", + "default": "^\\s*title\\s*[:=]" + } + }, + "additionalProperties": false + }, + "MD042": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "no-empty-links": { + "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", + "type": "boolean", + "default": true + }, + "MD043": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "required-headings": { + "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "headings": { + "description": "List of headings", + "type": "array", + "items": { + "type": "string", + "pattern": "^(\\*|\\+|#{1,6} .*)$" + }, + "default": [] + }, + "match_case": { + "description": "Match case of headings", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD044": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "proper-names": { + "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "names": { + "description": "List of proper names", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "code_blocks": { + "description": "Include code blocks", + "type": "boolean", + "default": true + }, + "html_elements": { + "description": "Include HTML elements", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD045": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "no-alt-text": { + "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", + "type": "boolean", + "default": true + }, + "MD046": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-block-style": { + "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Block style", + "type": "string", + "enum": [ + "consistent", + "fenced", + "indented" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD047": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "single-trailing-newline": { + "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", + "type": "boolean", + "default": true + }, + "MD048": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "code-fence-style": { + "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Code fence style", + "type": "string", + "enum": [ + "consistent", + "backtick", + "tilde" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD049": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "emphasis-style": { + "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Emphasis style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD050": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "strong-style": { + "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Strong style", + "type": "string", + "enum": [ + "consistent", + "asterisk", + "underscore" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD051": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "link-fragments": { + "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignore_case": { + "description": "Ignore case of fragments", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD052": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "reference-links-images": { + "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "shortcut_syntax": { + "description": "Include shortcut syntax", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "MD053": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "link-image-reference-definitions": { + "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "ignored_definitions": { + "description": "Ignored definitions", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "//" + ] + } + }, + "additionalProperties": false + }, + "MD054": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "link-image-style": { + "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "autolink": { + "description": "Allow autolinks", + "type": "boolean", + "default": true + }, + "inline": { + "description": "Allow inline links and images", + "type": "boolean", + "default": true + }, + "full": { + "description": "Allow full reference links and images", + "type": "boolean", + "default": true + }, + "collapsed": { + "description": "Allow collapsed reference links and images", + "type": "boolean", + "default": true + }, + "shortcut": { + "description": "Allow shortcut reference links and images", + "type": "boolean", + "default": true + }, + "url_inline": { + "description": "Allow URLs as inline links", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "MD055": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "table-pipe-style": { + "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", + "type": [ + "boolean", + "object" + ], + "default": true, + "properties": { + "style": { + "description": "Table pipe style", + "type": "string", + "enum": [ + "consistent", + "leading_only", + "trailing_only", + "leading_and_trailing", + "no_leading_or_trailing" + ], + "default": "consistent" + } + }, + "additionalProperties": false + }, + "MD056": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "table-column-count": { + "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", + "type": "boolean", + "default": true + }, + "MD058": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "blanks-around-tables": { + "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", + "type": "boolean", + "default": true + }, + "headings": { + "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", + "type": "boolean", + "default": true + }, + "bullet": { + "description": "bullet : MD004, MD005, MD007, MD032", + "type": "boolean", + "default": true + }, + "ul": { + "description": "ul : MD004, MD005, MD007, MD030, MD032", + "type": "boolean", + "default": true + }, + "indentation": { + "description": "indentation : MD005, MD007, MD027", + "type": "boolean", + "default": true + }, + "whitespace": { + "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", + "type": "boolean", + "default": true + }, + "hard_tab": { + "description": "hard_tab : MD010", + "type": "boolean", + "default": true + }, + "links": { + "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "blank_lines": { + "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", + "type": "boolean", + "default": true + }, + "line_length": { + "description": "line_length : MD013", + "type": "boolean", + "default": true + }, + "code": { + "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", + "type": "boolean", + "default": true + }, + "atx": { + "description": "atx : MD018, MD019", + "type": "boolean", + "default": true + }, + "spaces": { + "description": "spaces : MD018, MD019, MD020, MD021, MD023", + "type": "boolean", + "default": true + }, + "atx_closed": { + "description": "atx_closed : MD020, MD021", + "type": "boolean", + "default": true + }, + "blockquote": { + "description": "blockquote : MD027, MD028", + "type": "boolean", + "default": true + }, + "ol": { + "description": "ol : MD029, MD030, MD032", + "type": "boolean", + "default": true + }, + "html": { + "description": "html : MD033", + "type": "boolean", + "default": true + }, + "url": { + "description": "url : MD034", + "type": "boolean", + "default": true + }, + "hr": { + "description": "hr : MD035", + "type": "boolean", + "default": true + }, + "emphasis": { + "description": "emphasis : MD036, MD037, MD049, MD050", + "type": "boolean", + "default": true + }, + "language": { + "description": "language : MD040", + "type": "boolean", + "default": true + }, + "spelling": { + "description": "spelling : MD044", + "type": "boolean", + "default": true + }, + "accessibility": { + "description": "accessibility : MD045", + "type": "boolean", + "default": true + }, + "images": { + "description": "images : MD045, MD052, MD053, MD054", + "type": "boolean", + "default": true + }, + "table": { + "description": "table : MD055, MD056, MD058", + "type": "boolean", + "default": true + } + }, + "additionalProperties": { + "type": [ + "boolean", + "object" + ] + } +} \ No newline at end of file diff --git a/node_modules/markdownlint/style/all.json b/node_modules/markdownlint/style/all.json new file mode 100644 index 0000000000..edfdd6d736 --- /dev/null +++ b/node_modules/markdownlint/style/all.json @@ -0,0 +1,5 @@ +{ + "comment": "All rules", + + "default": true +} diff --git a/node_modules/markdownlint/style/cirosantilli.json b/node_modules/markdownlint/style/cirosantilli.json new file mode 100644 index 0000000000..609a3bfe16 --- /dev/null +++ b/node_modules/markdownlint/style/cirosantilli.json @@ -0,0 +1,22 @@ +{ + "comment": "Rules for the style guide at https://www.cirosantilli.com/markdown-style-guide/", + + "default": true, + "MD003": { + "style": "atx" + }, + "MD004": { + "style": "dash" + }, + "MD007": { + "indent": 4 + }, + "MD030": { + "ul_multi": 3, + "ol_multi": 2 + }, + "MD033": false, + "MD035": { + "style": "---" + } +} diff --git a/node_modules/markdownlint/style/prettier.json b/node_modules/markdownlint/style/prettier.json new file mode 100644 index 0000000000..29a24e6279 --- /dev/null +++ b/node_modules/markdownlint/style/prettier.json @@ -0,0 +1,27 @@ +{ + "comment": "Disables rules that may conflict with Prettier", + + "blanks-around-fences": false, + "blanks-around-headings": false, + "blanks-around-lists": false, + "code-fence-style": false, + "emphasis-style": false, + "heading-start-left": false, + "heading-style": false, + "hr-style": false, + "line-length": false, + "list-indent": false, + "list-marker-space": false, + "no-blanks-blockquote": false, + "no-hard-tabs": false, + "no-missing-space-atx": false, + "no-missing-space-closed-atx": false, + "no-multiple-blanks": false, + "no-multiple-space-atx": false, + "no-multiple-space-blockquote": false, + "no-multiple-space-closed-atx": false, + "no-trailing-spaces": false, + "ol-prefix": false, + "strong-style": false, + "ul-indent": false +} diff --git a/node_modules/markdownlint/style/relaxed.json b/node_modules/markdownlint/style/relaxed.json new file mode 100644 index 0000000000..1070b5982a --- /dev/null +++ b/node_modules/markdownlint/style/relaxed.json @@ -0,0 +1,12 @@ +{ + "comment": "Relaxed rules", + + "default": true, + "whitespace": false, + "line_length": false, + "ul-indent": false, + "no-inline-html": false, + "no-bare-urls": false, + "fenced-code-language": false, + "first-line-h1": false +} diff --git a/node_modules/mdurl/LICENSE b/node_modules/mdurl/LICENSE new file mode 100644 index 0000000000..3b2c7bfb15 --- /dev/null +++ b/node_modules/mdurl/LICENSE @@ -0,0 +1,45 @@ +Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +.parse() is based on Joyent's node.js `url` code: + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/node_modules/mdurl/README.md b/node_modules/mdurl/README.md new file mode 100644 index 0000000000..c7f9e959a0 --- /dev/null +++ b/node_modules/mdurl/README.md @@ -0,0 +1,102 @@ +# mdurl + +[![CI](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml) +[![NPM version](https://img.shields.io/npm/v/mdurl.svg?style=flat)](https://www.npmjs.org/package/mdurl) + +> URL utilities for [markdown-it](https://github.com/markdown-it/markdown-it) parser. + + +## API + +### .encode(str [, exclude, keepEncoded]) -> String + +Percent-encode a string, avoiding double encoding. Don't touch `/a-zA-Z0-9/` + +excluded chars + `/%[a-fA-F0-9]{2}/` (if not disabled). Broken surrorates are +replaced with `U+FFFD`. + +Params: + +- __str__ - input string. +- __exclude__ - optional, `;/?:@&=+$,-_.!~*'()#`. Additional chars to keep intact + (except `/a-zA-Z0-9/`). +- __keepEncoded__ - optional, `true`. By default it skips already encoded sequences + (`/%[a-fA-F0-9]{2}/`). If set to `false`, `%` will be encoded. + + +### encode.defaultChars, encode.componentChars + +You can use these constants as second argument to `encode` function. + + - `encode.defaultChars` is the same exclude set as in the standard `encodeURI()` function + - `encode.componentChars` is the same exclude set as in the `encodeURIComponent()` function + +For example, `encode('something', encode.componentChars, true)` is roughly the equivalent of +the `encodeURIComponent()` function (except `encode()` doesn't throw). + + +### .decode(str [, exclude]) -> String + +Decode percent-encoded string. Invalid percent-encoded sequences (e.g. `%2G`) +are left as is. Invalid UTF-8 characters are replaced with `U+FFFD`. + + +Params: + +- __str__ - input string. +- __exclude__ - set of characters to leave encoded, optional, `;/?:@&=+$,#`. + + +### decode.defaultChars, decode.componentChars + +You can use these constants as second argument to `decode` function. + + - `decode.defaultChars` is the same exclude set as in the standard `decodeURI()` function + - `decode.componentChars` is the same exclude set as in the `decodeURIComponent()` function + +For example, `decode('something', decode.defaultChars)` has the same behavior as +`decodeURI('something')` on a correctly encoded input. + + +### .parse(url, slashesDenoteHost) -> urlObs + +Parse url string. Similar to node's [url.parse](http://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost), but without any +normalizations and query string parse. + + - __url__ - input url (string) + - __slashesDenoteHost__ - if url starts with `//`, expect a hostname after it. Optional, `false`. + +Result (hash): + +- protocol +- slashes +- auth +- port +- hostname +- hash +- search +- pathname + +Difference with node's `url`: + +1. No leading slash in paths, e.g. in `url.parse('http://foo?bar')` pathname is + ``, not `/` +2. Backslashes are not replaced with slashes, so `http:\\example.org\` is + treated like a relative path +3. Trailing colon is treated like a part of the path, i.e. in + `http://example.org:foo` pathname is `:foo` +4. Nothing is URL-encoded in the resulting object, (in joyent/node some chars + in auth and paths are encoded) +5. `url.parse()` does not have `parseQueryString` argument +6. Removed extraneous result properties: `host`, `path`, `query`, etc., + which can be constructed using other parts of the url. + + +### .format(urlObject) + +Format an object previously obtained with `.parse()` function. Similar to node's +[url.format](http://nodejs.org/api/url.html#url_url_format_urlobj). + + +## License + +[MIT](https://github.com/markdown-it/mdurl/blob/master/LICENSE) diff --git a/node_modules/mdurl/index.mjs b/node_modules/mdurl/index.mjs new file mode 100644 index 0000000000..fd78c377f5 --- /dev/null +++ b/node_modules/mdurl/index.mjs @@ -0,0 +1,11 @@ +import decode from './lib/decode.mjs' +import encode from './lib/encode.mjs' +import format from './lib/format.mjs' +import parse from './lib/parse.mjs' + +export { + decode, + encode, + format, + parse +} diff --git a/node_modules/mdurl/package.json b/node_modules/mdurl/package.json new file mode 100644 index 0000000000..6e89bebc93 --- /dev/null +++ b/node_modules/mdurl/package.json @@ -0,0 +1,37 @@ +{ + "name": "mdurl", + "version": "2.0.0", + "description": "URL utilities for markdown-it", + "repository": "markdown-it/mdurl", + "license": "MIT", + "main": "build/index.cjs.js", + "module": "index.mjs", + "exports": { + ".": { + "require": "./build/index.cjs.js", + "import": "./index.mjs" + }, + "./*": { + "require": "./*", + "import": "./*" + } + }, + "scripts": { + "lint": "eslint .", + "build": "rollup -c", + "test": "npm run lint && npm run build && c8 --exclude build --exclude test -r text -r html -r lcov mocha", + "prepublishOnly": "npm run lint && npm run build" + }, + "files": [ + "index.mjs", + "lib/", + "build/" + ], + "devDependencies": { + "c8": "^8.0.1", + "eslint": "^8.54.0", + "eslint-config-standard": "^17.1.0", + "mocha": "^10.2.0", + "rollup": "^4.6.1" + } +} diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts b/node_modules/micromark-core-commonmark/dev/index.d.ts new file mode 100644 index 0000000000..bd832f665c --- /dev/null +++ b/node_modules/micromark-core-commonmark/dev/index.d.ts @@ -0,0 +1,23 @@ +export { attention } from "./lib/attention.js"; +export { autolink } from "./lib/autolink.js"; +export { blankLine } from "./lib/blank-line.js"; +export { blockQuote } from "./lib/block-quote.js"; +export { characterEscape } from "./lib/character-escape.js"; +export { characterReference } from "./lib/character-reference.js"; +export { codeFenced } from "./lib/code-fenced.js"; +export { codeIndented } from "./lib/code-indented.js"; +export { codeText } from "./lib/code-text.js"; +export { content } from "./lib/content.js"; +export { definition } from "./lib/definition.js"; +export { hardBreakEscape } from "./lib/hard-break-escape.js"; +export { headingAtx } from "./lib/heading-atx.js"; +export { htmlFlow } from "./lib/html-flow.js"; +export { htmlText } from "./lib/html-text.js"; +export { labelEnd } from "./lib/label-end.js"; +export { labelStartImage } from "./lib/label-start-image.js"; +export { labelStartLink } from "./lib/label-start-link.js"; +export { lineEnding } from "./lib/line-ending.js"; +export { list } from "./lib/list.js"; +export { setextUnderline } from "./lib/setext-underline.js"; +export { thematicBreak } from "./lib/thematic-break.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts.map b/node_modules/micromark-core-commonmark/dev/index.d.ts.map new file mode 100644 index 0000000000..ca7a93a9a2 --- /dev/null +++ b/node_modules/micromark-core-commonmark/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.js b/node_modules/micromark-core-commonmark/dev/index.js new file mode 100644 index 0000000000..f9143e0937 --- /dev/null +++ b/node_modules/micromark-core-commonmark/dev/index.js @@ -0,0 +1,22 @@ +export {attention} from './lib/attention.js' +export {autolink} from './lib/autolink.js' +export {blankLine} from './lib/blank-line.js' +export {blockQuote} from './lib/block-quote.js' +export {characterEscape} from './lib/character-escape.js' +export {characterReference} from './lib/character-reference.js' +export {codeFenced} from './lib/code-fenced.js' +export {codeIndented} from './lib/code-indented.js' +export {codeText} from './lib/code-text.js' +export {content} from './lib/content.js' +export {definition} from './lib/definition.js' +export {hardBreakEscape} from './lib/hard-break-escape.js' +export {headingAtx} from './lib/heading-atx.js' +export {htmlFlow} from './lib/html-flow.js' +export {htmlText} from './lib/html-text.js' +export {labelEnd} from './lib/label-end.js' +export {labelStartImage} from './lib/label-start-image.js' +export {labelStartLink} from './lib/label-start-link.js' +export {lineEnding} from './lib/line-ending.js' +export {list} from './lib/list.js' +export {setextUnderline} from './lib/setext-underline.js' +export {thematicBreak} from './lib/thematic-break.js' diff --git a/node_modules/micromark-core-commonmark/index.d.ts b/node_modules/micromark-core-commonmark/index.d.ts new file mode 100644 index 0000000000..bd832f665c --- /dev/null +++ b/node_modules/micromark-core-commonmark/index.d.ts @@ -0,0 +1,23 @@ +export { attention } from "./lib/attention.js"; +export { autolink } from "./lib/autolink.js"; +export { blankLine } from "./lib/blank-line.js"; +export { blockQuote } from "./lib/block-quote.js"; +export { characterEscape } from "./lib/character-escape.js"; +export { characterReference } from "./lib/character-reference.js"; +export { codeFenced } from "./lib/code-fenced.js"; +export { codeIndented } from "./lib/code-indented.js"; +export { codeText } from "./lib/code-text.js"; +export { content } from "./lib/content.js"; +export { definition } from "./lib/definition.js"; +export { hardBreakEscape } from "./lib/hard-break-escape.js"; +export { headingAtx } from "./lib/heading-atx.js"; +export { htmlFlow } from "./lib/html-flow.js"; +export { htmlText } from "./lib/html-text.js"; +export { labelEnd } from "./lib/label-end.js"; +export { labelStartImage } from "./lib/label-start-image.js"; +export { labelStartLink } from "./lib/label-start-link.js"; +export { lineEnding } from "./lib/line-ending.js"; +export { list } from "./lib/list.js"; +export { setextUnderline } from "./lib/setext-underline.js"; +export { thematicBreak } from "./lib/thematic-break.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.d.ts.map b/node_modules/micromark-core-commonmark/index.d.ts.map new file mode 100644 index 0000000000..ca7a93a9a2 --- /dev/null +++ b/node_modules/micromark-core-commonmark/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.js b/node_modules/micromark-core-commonmark/index.js new file mode 100644 index 0000000000..969b1cdf12 --- /dev/null +++ b/node_modules/micromark-core-commonmark/index.js @@ -0,0 +1,22 @@ +export { attention } from './lib/attention.js'; +export { autolink } from './lib/autolink.js'; +export { blankLine } from './lib/blank-line.js'; +export { blockQuote } from './lib/block-quote.js'; +export { characterEscape } from './lib/character-escape.js'; +export { characterReference } from './lib/character-reference.js'; +export { codeFenced } from './lib/code-fenced.js'; +export { codeIndented } from './lib/code-indented.js'; +export { codeText } from './lib/code-text.js'; +export { content } from './lib/content.js'; +export { definition } from './lib/definition.js'; +export { hardBreakEscape } from './lib/hard-break-escape.js'; +export { headingAtx } from './lib/heading-atx.js'; +export { htmlFlow } from './lib/html-flow.js'; +export { htmlText } from './lib/html-text.js'; +export { labelEnd } from './lib/label-end.js'; +export { labelStartImage } from './lib/label-start-image.js'; +export { labelStartLink } from './lib/label-start-link.js'; +export { lineEnding } from './lib/line-ending.js'; +export { list } from './lib/list.js'; +export { setextUnderline } from './lib/setext-underline.js'; +export { thematicBreak } from './lib/thematic-break.js'; \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/license b/node_modules/micromark-core-commonmark/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-core-commonmark/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-core-commonmark/package.json b/node_modules/micromark-core-commonmark/package.json new file mode 100644 index 0000000000..6e158168cc --- /dev/null +++ b/node_modules/micromark-core-commonmark/package.json @@ -0,0 +1,74 @@ +{ + "name": "micromark-core-commonmark", + "version": "2.0.2", + "description": "The CommonMark markdown constructs", + "license": "MIT", + "keywords": [ + "micromark", + "core", + "commonmark" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-core-commonmark", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "max-depth": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-core-commonmark/readme.md b/node_modules/micromark-core-commonmark/readme.md new file mode 100644 index 0000000000..5a47520de9 --- /dev/null +++ b/node_modules/micromark-core-commonmark/readme.md @@ -0,0 +1,171 @@ +# micromark-core-commonmark + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] constructs that make up the core of CommonMark. +Some of these can be [turned off][disable], but they are often essential to +markdown and weird things might happen. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes the default constructs. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-core-commonmark +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import * as core from 'https://esm.sh/micromark-core-commonmark@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {autolink} from 'micromark-core-commonmark' + +console.log(autolink) // Do things with `autolink`. +``` + +## API + +This module exports the following identifiers: `attention`, `autolink`, +`blankLine`, `blockQuote`, `characterEscape`, `characterReference`, +`codeFenced`, `codeIndented`, `codeText`, `content`, `definition`, +`hardBreakEscape`, `headingAtx`, `htmlFlow`, `htmlText`, `labelEnd`, +`labelStartImage`, `labelStartLink`, `lineEnding`, `list`, `setextUnderline`, +`thematicBreak`. +There is no default export. + +Each identifier refers to a [construct][]. + +See the code for more on the exported constructs. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-core-commonmark@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-core-commonmark.svg + +[downloads]: https://www.npmjs.com/package/micromark-core-commonmark + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-core-commonmark + +[bundle-size]: https://bundlejs.com/?q=micromark-core-commonmark + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[disable]: https://github.com/micromark/micromark#case-turn-off-constructs + +[construct]: https://github.com/micromark/micromark#constructs + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark diff --git a/node_modules/micromark-extension-directive/dev/index.d.ts b/node_modules/micromark-extension-directive/dev/index.d.ts new file mode 100644 index 0000000000..b5bac9fe47 --- /dev/null +++ b/node_modules/micromark-extension-directive/dev/index.d.ts @@ -0,0 +1,156 @@ +import type {CompileContext} from 'micromark-util-types' + +export {directive} from './lib/syntax.js' +export {directiveHtml} from './lib/html.js' + +/** + * Internal tuple representing an attribute. + */ +type AttributeTuple = [key: string, value: string] + +/** + * Directive attribute. + */ +interface Attributes { + /** + * Key to value. + */ + [key: string]: string +} + +/** + * Structure representing a directive. + */ +export interface Directive { + /** + * Private :) + */ + _fenceCount?: number | undefined + /** + * Object w/ HTML attributes. + */ + attributes?: Attributes | undefined + /** + * Compiled HTML content inside container directive. + */ + content?: string | undefined + /** + * Compiled HTML content that was in `[brackets]`. + */ + label?: string | undefined + /** + * Name of directive. + */ + name: string + /** + * Kind. + */ + type: 'containerDirective' | 'leafDirective' | 'textDirective' +} + +/** + * Handle a directive. + * + * @param this + * Current context. + * @param directive + * Directive. + * @returns + * Signal whether the directive was handled. + * + * Yield `false` to let the fallback (a special handle for `'*'`) handle it. + */ +export type Handle = ( + this: CompileContext, + directive: Directive +) => boolean | undefined + +/** + * Configuration. + * + * > 👉 **Note**: the special field `'*'` can be used to specify a fallback + * > handle to handle all otherwise unhandled directives. + */ +export interface HtmlOptions { + [name: string]: Handle +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + directiveAttributes?: Array + directiveStack?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + directiveContainer: 'directiveContainer' + directiveContainerAttributes: 'directiveContainerAttributes' + directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' + directiveContainerAttribute: 'directiveContainerAttribute' + directiveContainerAttributeId: 'directiveContainerAttributeId' + directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' + directiveContainerAttributeClass: 'directiveContainerAttributeClass' + directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' + directiveContainerAttributeName: 'directiveContainerAttributeName' + directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' + directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' + directiveContainerAttributeValue: 'directiveContainerAttributeValue' + directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' + directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' + directiveContainerContent: 'directiveContainerContent' + directiveContainerFence: 'directiveContainerFence' + directiveContainerLabel: 'directiveContainerLabel' + directiveContainerLabelMarker: 'directiveContainerLabelMarker' + directiveContainerLabelString: 'directiveContainerLabelString' + directiveContainerName: 'directiveContainerName' + directiveContainerSequence: 'directiveContainerSequence' + + directiveLeaf: 'directiveLeaf' + directiveLeafAttributes: 'directiveLeafAttributes' + directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' + directiveLeafAttribute: 'directiveLeafAttribute' + directiveLeafAttributeId: 'directiveLeafAttributeId' + directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' + directiveLeafAttributeClass: 'directiveLeafAttributeClass' + directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' + directiveLeafAttributeName: 'directiveLeafAttributeName' + directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' + directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' + directiveLeafAttributeValue: 'directiveLeafAttributeValue' + directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' + directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' + directiveLeafLabel: 'directiveLeafLabel' + directiveLeafLabelMarker: 'directiveLeafLabelMarker' + directiveLeafLabelString: 'directiveLeafLabelString' + directiveLeafName: 'directiveLeafName' + directiveLeafSequence: 'directiveLeafSequence' + + directiveText: 'directiveText' + directiveTextAttributes: 'directiveTextAttributes' + directiveTextAttributesMarker: 'directiveTextAttributesMarker' + directiveTextAttribute: 'directiveTextAttribute' + directiveTextAttributeId: 'directiveTextAttributeId' + directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' + directiveTextAttributeClass: 'directiveTextAttributeClass' + directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' + directiveTextAttributeName: 'directiveTextAttributeName' + directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' + directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' + directiveTextAttributeValue: 'directiveTextAttributeValue' + directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' + directiveTextAttributeValueData: 'directiveTextAttributeValueData' + directiveTextLabel: 'directiveTextLabel' + directiveTextLabelMarker: 'directiveTextLabelMarker' + directiveTextLabelString: 'directiveTextLabelString' + directiveTextMarker: 'directiveTextMarker' + directiveTextName: 'directiveTextName' + } +} diff --git a/node_modules/micromark-extension-directive/dev/index.js b/node_modules/micromark-extension-directive/dev/index.js new file mode 100644 index 0000000000..f290efe57b --- /dev/null +++ b/node_modules/micromark-extension-directive/dev/index.js @@ -0,0 +1,3 @@ +// Note: more types exported from `index.d.ts`. +export {directive} from './lib/syntax.js' +export {directiveHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-directive/index.d.ts b/node_modules/micromark-extension-directive/index.d.ts new file mode 100644 index 0000000000..b5bac9fe47 --- /dev/null +++ b/node_modules/micromark-extension-directive/index.d.ts @@ -0,0 +1,156 @@ +import type {CompileContext} from 'micromark-util-types' + +export {directive} from './lib/syntax.js' +export {directiveHtml} from './lib/html.js' + +/** + * Internal tuple representing an attribute. + */ +type AttributeTuple = [key: string, value: string] + +/** + * Directive attribute. + */ +interface Attributes { + /** + * Key to value. + */ + [key: string]: string +} + +/** + * Structure representing a directive. + */ +export interface Directive { + /** + * Private :) + */ + _fenceCount?: number | undefined + /** + * Object w/ HTML attributes. + */ + attributes?: Attributes | undefined + /** + * Compiled HTML content inside container directive. + */ + content?: string | undefined + /** + * Compiled HTML content that was in `[brackets]`. + */ + label?: string | undefined + /** + * Name of directive. + */ + name: string + /** + * Kind. + */ + type: 'containerDirective' | 'leafDirective' | 'textDirective' +} + +/** + * Handle a directive. + * + * @param this + * Current context. + * @param directive + * Directive. + * @returns + * Signal whether the directive was handled. + * + * Yield `false` to let the fallback (a special handle for `'*'`) handle it. + */ +export type Handle = ( + this: CompileContext, + directive: Directive +) => boolean | undefined + +/** + * Configuration. + * + * > 👉 **Note**: the special field `'*'` can be used to specify a fallback + * > handle to handle all otherwise unhandled directives. + */ +export interface HtmlOptions { + [name: string]: Handle +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + directiveAttributes?: Array + directiveStack?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + directiveContainer: 'directiveContainer' + directiveContainerAttributes: 'directiveContainerAttributes' + directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' + directiveContainerAttribute: 'directiveContainerAttribute' + directiveContainerAttributeId: 'directiveContainerAttributeId' + directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' + directiveContainerAttributeClass: 'directiveContainerAttributeClass' + directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' + directiveContainerAttributeName: 'directiveContainerAttributeName' + directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' + directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' + directiveContainerAttributeValue: 'directiveContainerAttributeValue' + directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' + directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' + directiveContainerContent: 'directiveContainerContent' + directiveContainerFence: 'directiveContainerFence' + directiveContainerLabel: 'directiveContainerLabel' + directiveContainerLabelMarker: 'directiveContainerLabelMarker' + directiveContainerLabelString: 'directiveContainerLabelString' + directiveContainerName: 'directiveContainerName' + directiveContainerSequence: 'directiveContainerSequence' + + directiveLeaf: 'directiveLeaf' + directiveLeafAttributes: 'directiveLeafAttributes' + directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' + directiveLeafAttribute: 'directiveLeafAttribute' + directiveLeafAttributeId: 'directiveLeafAttributeId' + directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' + directiveLeafAttributeClass: 'directiveLeafAttributeClass' + directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' + directiveLeafAttributeName: 'directiveLeafAttributeName' + directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' + directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' + directiveLeafAttributeValue: 'directiveLeafAttributeValue' + directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' + directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' + directiveLeafLabel: 'directiveLeafLabel' + directiveLeafLabelMarker: 'directiveLeafLabelMarker' + directiveLeafLabelString: 'directiveLeafLabelString' + directiveLeafName: 'directiveLeafName' + directiveLeafSequence: 'directiveLeafSequence' + + directiveText: 'directiveText' + directiveTextAttributes: 'directiveTextAttributes' + directiveTextAttributesMarker: 'directiveTextAttributesMarker' + directiveTextAttribute: 'directiveTextAttribute' + directiveTextAttributeId: 'directiveTextAttributeId' + directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' + directiveTextAttributeClass: 'directiveTextAttributeClass' + directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' + directiveTextAttributeName: 'directiveTextAttributeName' + directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' + directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' + directiveTextAttributeValue: 'directiveTextAttributeValue' + directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' + directiveTextAttributeValueData: 'directiveTextAttributeValueData' + directiveTextLabel: 'directiveTextLabel' + directiveTextLabelMarker: 'directiveTextLabelMarker' + directiveTextLabelString: 'directiveTextLabelString' + directiveTextMarker: 'directiveTextMarker' + directiveTextName: 'directiveTextName' + } +} diff --git a/node_modules/micromark-extension-directive/index.js b/node_modules/micromark-extension-directive/index.js new file mode 100644 index 0000000000..47666d68ef --- /dev/null +++ b/node_modules/micromark-extension-directive/index.js @@ -0,0 +1,3 @@ +// Note: more types exported from `index.d.ts`. +export { directive } from './lib/syntax.js'; +export { directiveHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-directive/license b/node_modules/micromark-extension-directive/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-directive/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-directive/package.json b/node_modules/micromark-extension-directive/package.json new file mode 100644 index 0000000000..3e4b8ffdaf --- /dev/null +++ b/node_modules/micromark-extension-directive/package.json @@ -0,0 +1,127 @@ +{ + "name": "micromark-extension-directive", + "version": "3.0.2", + "description": "micromark extension to support generic directives (`:cite[smith04]`)", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "generic", + "directive", + "container", + "extension", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-directive", + "bugs": "https://github.com/micromark/micromark-extension-directive/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "c8": "^10.0.0", + "html-void-elements": "^3.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.59.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "overrides": [ + { + "files": [ + "**/*.d.ts" + ], + "rules": { + "@typescript-eslint/array-type": [ + "error", + { + "default": "generic" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": true + } + ], + "@typescript-eslint/consistent-indexed-object-style": [ + "error", + "index-signature" + ], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface" + ] + } + } + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "max-params": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off" + } + } +} diff --git a/node_modules/micromark-extension-directive/readme.md b/node_modules/micromark-extension-directive/readme.md new file mode 100644 index 0000000000..f333822e26 --- /dev/null +++ b/node_modules/micromark-extension-directive/readme.md @@ -0,0 +1,424 @@ +# micromark-extension-directive + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support [directives][prop] (`:cite[smith04]` and +such). + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`directive()`](#directive) + * [`directiveHtml(options?)`](#directivehtmloptions) + * [`Directive`](#directive-1) + * [`Handle`](#handle) + * [`HtmlOptions`](#htmloptions) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains two extensions that add support for directive syntax in +markdown to [`micromark`][micromark]. + +## When to use this + +This project is useful when you want to solve the need for an infinite number +of potential extensions to markdown in a single markdown-esque way. + +You can use these extensions when you are working with [`micromark`][micromark] +already. + +When you need a syntax tree, you can combine this package with +[`mdast-util-directive`][mdast-util-directive]. + +All these packages are used [`remark-directive`][remark-directive], which +focusses on making it easier to transform content by abstracting these +internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +[npm][]: + +```sh +npm install micromark-extension-directive +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {directive, directiveHtml} from 'https://esm.sh/micromark-extension-directive@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say our document `example.md` contains: + +```markdown +A lovely language know as :abbr[HTML]{title="HyperText Markup Language"}. +``` + +…and our module `example.js` looks as follows: + +```js +/** + * @import {Handle} from 'micromark-extension-directive' + * @import {CompileContext} from 'micromark-util-types' + */ + +import fs from 'node:fs/promises' +import {micromark} from 'micromark' +import {directive, directiveHtml} from 'micromark-extension-directive' + +const output = micromark(await fs.readFile('example.md'), { + extensions: [directive()], + htmlExtensions: [directiveHtml({abbr})] +}) + +console.log(output) + +/** + * @this {CompileContext} + * @type {Handle} + * @returns {undefined} + */ +function abbr(d) { + if (d.type !== 'textDirective') return false + + this.tag('') + this.raw(d.label || '') + this.tag('') +} +``` + +…now running `node example.js` yields: + +```html +

          A lovely language know as HTML.

          +``` + +## API + +This package exports the identifiers [`directive`][api-directive] and +[`directiveHtml`][api-directive-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `directive()` + +Create an extension for `micromark` to enable directive syntax. + +###### Returns + +Extension for `micromark` that can be passed in `extensions`, to enable +directive syntax ([`Extension`][micromark-extension]). + +### `directiveHtml(options?)` + +Create an extension for `micromark` to support directives when serializing to +HTML. + +> 👉 **Note**: this uses KaTeX to render math. + +###### Parameters + +* `options` ([`HtmlOptions`][api-html-options], default: `{}`) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions`, to +support directives when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +### `Directive` + +Structure representing a directive (TypeScript type). + +###### Fields + +* `type` (`'containerDirective'`, `'leafDirective'`, or `'textDirective'`) + — kind +* `name` (`string`) + — name of directive +* `label` (`string` or `undefined`) + — compiled HTML content that was in `[brackets]` +* `attributes` (`Record` or `undefined`) + — object w/ HTML attributes +* `content` (`string` or `undefined`) + — compiled HTML content inside container directive + +### `Handle` + +Handle a directive (TypeScript type). + +###### Parameters + +* `this` ([`CompileContext`][micromark-compile-context]) + — current context +* `directive` ([`Directive`][api-directive-type]) + — directive + +###### Returns + +Signal whether the directive was handled (`boolean`, default: `true`). +Yield `false` to let the fallback (a special handle for `'*'`) handle it. + +### `HtmlOptions` + +Configuration (TypeScript type). + +> 👉 **Note**: the special field `'*'` can be used to specify a fallback handle +> to handle all otherwise unhandled directives. + +###### Type + +```ts +type HtmlOptions = Record +``` + +## Authoring + +When authoring markdown with directives, keep in mind that they don’t work in +most places. +On your own site it can be great! + +## HTML + +You can define how directives are turned into HTML. +If directives are not handled, they do not emit anything. + +## CSS + +How to display directives is left as an exercise for the reader. + +## Syntax + +The syntax looks like this: + +```markdown +Directives in text can form with a single colon, such as :cite[smith04]. +Their syntax is `:name[label]{attributes}`. + +Leafs (block without content) can form by using two colons: + +::youtube[Video of a cat in a box]{vid=01ab2cd3efg} + +Their syntax is `::name[label]{attributes}` on its own line. + +Containers (blocks with content) can form by using three colons: + +:::spoiler +He dies. +::: + +The `name` part is required. The first character must be a letter, other +characters can be alphanumerical, `-`, and `_`. +`-` or `_` cannot end a name. + +The `[label]` part is optional (`:x` and `:x[]` are equivalent)†. +When used, it can include text constructs such as emphasis and so on: `x[a *b* +c]`. + +The `{attributes}` part is optional (`:x` and `:x{}` are equivalent)†. +When used, it is handled like HTML attributes, such as that `{a}`, `{a=""}`, +, `{a=''}` but also `{a=b}`, `{a="b"}`, and `{a='b'}` are equivalent. +Shortcuts are available for `id=` (`{#readme}` for `{id=readme}`) and +`class` (`{.big}` for `{class=big}`). +When multiple ids are found, the last is used; when multiple classes are found, +they are combined: `{.red class=green .blue}` is equivalent to +`{.red .green .blue}` and `{class="red green blue"}`. + +† there is one case where a name must be followed by an empty label or empty +attributes: a *text* directive that only has a name, cannot be followed by a +colon. So, `:red:` doesn’t work. Use either `:red[]` or `:red{}` instead. +The reason for this is to allow GitHub emoji (gemoji) and directives to coexist. + +Containers can be nested by using more colons outside: + +::::spoiler +He dies. + +:::spoiler +She is born. +::: +:::: + +The closing fence must include the same or more colons as the opening. +If no closing is found, the container runs to the end of its parent container +(block quote, list item, document, or other container). + +::::spoiler +These three are not enough to close +::: +So this line is also part of the container. +``` + +Note that while other implementations are sometimes loose in what they allow, +this implementation mimics CommonMark as closely as possible: + +* Whitespace is not allowed between colons and name (~~`: a`~~), name and + label (~~`:a []`~~), name and attributes (~~`:a {}`~~), or label and + attributes (~~`:a[] {}`~~) — because it’s not allowed in links either + (~~`[] ()`~~) +* No trailing colons allowed on the opening fence of a container + (~~`:::a:::`~~) — because it’s not allowed in fenced code either +* The label and attributes in a leaf or container cannot include line endings + (~~`::a[b\nc]`~~) — because it’s not allowed in fenced code either + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types [`Directive`][api-directive-type], +[`Handle`][api-handle], and [`HtmlOptions`][api-html-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-directive@^3`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe assuming that you write safe handlers. +Any vulnerability in your code could open you to a +[cross-site scripting (XSS)][xss] attack. + +## Related + +* [`remark-directive`][remark-directive] + — remark plugin to support directives +* [`mdast-util-directive`][mdast-util-directive] + — mdast utility to support directives + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-directive/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-directive/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-directive.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-directive + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-directive.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-directive + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-directive + +[size]: https://bundlejs.com/?q=micromark-extension-directive + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-compile-context]: https://github.com/micromark/micromark/blob/41e3c4c/packages/micromark-util-types/index.js#L457 + +[mdast-util-directive]: https://github.com/syntax-tree/mdast-util-directive + +[remark-directive]: https://github.com/remarkjs/remark-directive + +[prop]: https://talk.commonmark.org/t/generic-directives-plugins-syntax/444 + +[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting + +[api-directive]: #directive + +[api-directive-html]: #directivehtmloptions + +[api-directive-type]: #directive-1 + +[api-handle]: #handle + +[api-html-options]: #htmloptions diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts new file mode 100644 index 0000000000..36f53b55bf --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts @@ -0,0 +1,24 @@ +export {gfmAutolinkLiteral} from './lib/syntax.js' +export {gfmAutolinkLiteralHtml} from './lib/html.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token with a field to improve performance. + */ + interface Token { + _gfmAutolinkLiteralWalkedInto?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + literalAutolink: 'literalAutolink' + literalAutolinkEmail: 'literalAutolinkEmail' + literalAutolinkHttp: 'literalAutolinkHttp' + literalAutolinkWww: 'literalAutolinkWww' + } +} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js new file mode 100644 index 0000000000..928d4456ab --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js @@ -0,0 +1,2 @@ +export {gfmAutolinkLiteral} from './lib/syntax.js' +export {gfmAutolinkLiteralHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts new file mode 100644 index 0000000000..36f53b55bf --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts @@ -0,0 +1,24 @@ +export {gfmAutolinkLiteral} from './lib/syntax.js' +export {gfmAutolinkLiteralHtml} from './lib/html.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token with a field to improve performance. + */ + interface Token { + _gfmAutolinkLiteralWalkedInto?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + literalAutolink: 'literalAutolink' + literalAutolinkEmail: 'literalAutolinkEmail' + literalAutolinkHttp: 'literalAutolinkHttp' + literalAutolinkWww: 'literalAutolinkWww' + } +} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.js b/node_modules/micromark-extension-gfm-autolink-literal/index.js new file mode 100644 index 0000000000..5194682ad9 --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/index.js @@ -0,0 +1,2 @@ +export { gfmAutolinkLiteral } from './lib/syntax.js'; +export { gfmAutolinkLiteralHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-autolink-literal/license b/node_modules/micromark-extension-gfm-autolink-literal/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-autolink-literal/package.json b/node_modules/micromark-extension-gfm-autolink-literal/package.json new file mode 100644 index 0000000000..2b1b6bd476 --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/package.json @@ -0,0 +1,116 @@ +{ + "name": "micromark-extension-gfm-autolink-literal", + "version": "2.1.0", + "description": "micromark extension to support GFM autolink literals", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "literal", + "url", + "autolink", + "auto", + "link", + "gfm", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-gfm-autolink-literal", + "bugs": "https://github.com/micromark/micromark-extension-gfm-autolink-literal/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "create-gfm-fixtures": "^1.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "rehype": "^13.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "prettier": true, + "rules": { + "complexity": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off", + "unicorn/prefer-string-replace-all": "off" + }, + "overrides": [ + { + "files": [ + "**/*.ts" + ], + "rules": { + "@typescript-eslint/consistent-type-definitions": 0 + } + }, + { + "files": [ + "test/**/*.js" + ], + "rules": { + "no-await-in-loop": 0 + } + } + ] + } +} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/readme.md b/node_modules/micromark-extension-gfm-autolink-literal/readme.md new file mode 100644 index 0000000000..61651de01a --- /dev/null +++ b/node_modules/micromark-extension-gfm-autolink-literal/readme.md @@ -0,0 +1,422 @@ +# micromark-extension-gfm-autolink-literal + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support GFM [literal autolinks][spec]. + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`gfmAutolinkLiteral()`](#gfmautolinkliteral) + * [`gfmAutolinkLiteralHtml()`](#gfmautolinkliteralhtml) +* [Bugs](#bugs) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains extensions that add support for the extra autolink syntax +enabled by GFM to [`micromark`][micromark]. + +GitHub employs different algorithms to autolink: one at parse time and one at +transform time (similar to how @mentions are done at transform time). +This difference can be observed because character references and escapes are +handled differently. +But also because issues/PRs/comments omit (perhaps by accident?) the second +algorithm for `www.`, `http://`, and `https://` links (but not for email links). + +As this is a syntax extension, it focuses on the first algorithm. +The second algorithm is performed by +[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. +The `html` part of this micromark extension does not operate on an AST and hence +can’t perform the second algorithm. + +The implementation of autolink literal on github.com is currently buggy. +The bugs have been reported on [`cmark-gfm`][cmark-gfm]. +This micromark extension matches github.com except for its bugs. + +## When to use this + +This project is useful when you want to support autolink literals in markdown. + +You can use these extensions when you are working with [`micromark`][micromark]. +To support all GFM features, use +[`micromark-extension-gfm`][micromark-extension-gfm] instead. + +When you need a syntax tree, combine this package with +[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. + +All these packages are used in [`remark-gfm`][remark-gfm], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-extension-gfm-autolink-literal +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {gfmAutolinkLiteral, gfmAutolinkLiteralHtml} from 'https://esm.sh/micromark-extension-gfm-autolink-literal@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {micromark} from 'micromark' +import { + gfmAutolinkLiteral, + gfmAutolinkLiteralHtml +} from 'micromark-extension-gfm-autolink-literal' + +const output = micromark('Just a URL: www.example.com.', { + extensions: [gfmAutolinkLiteral()], + htmlExtensions: [gfmAutolinkLiteralHtml()] +}) + +console.log(output) +``` + +Yields: + +```html +

          Just a URL: www.example.com.

          +``` + +## API + +This package exports the identifiers +[`gfmAutolinkLiteral`][api-gfm-autolink-literal] and +[`gfmAutolinkLiteralHtml`][api-gfm-autolink-literal-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `gfmAutolinkLiteral()` + +Create an extension for `micromark` to support GitHub autolink literal +syntax. + +###### Parameters + +Extension for `micromark` that can be passed in `extensions` to enable GFM +autolink literal syntax ([`Extension`][micromark-extension]). + +### `gfmAutolinkLiteralHtml()` + +Create an HTML extension for `micromark` to support GitHub autolink literal +when serializing to HTML. + +###### Parameters + +Extension for `micromark` that can be passed in `htmlExtensions` to support +GitHub autolink literal when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +## Bugs + +GitHub’s own algorithm to parse autolink literals contains three bugs. +A smaller bug is left unfixed in this project for consistency. +Two main bugs are not present in this project. +The issues relating to autolink literals are: + +* [GFM autolink extension (`www.`, `https?://` parts): links don’t work when + after bracket](https://github.com/github/cmark-gfm/issues/278)\ + fixed here ✅ +* [GFM autolink extension (`www.` part): uppercase does not match on + issues/PRs/comments](https://github.com/github/cmark-gfm/issues/280)\ + fixed here ✅ +* [GFM autolink extension (`www.` part): the word `www` + matches](https://github.com/github/cmark-gfm/issues/279)\ + present here for consistency + +## Authoring + +It is recommended to use labels, either with a resource or a definition, +instead of autolink literals, as those allow relative URLs and descriptive +text to explain the URL in prose. + +## HTML + +GFM autolink literals relate to the `` element in HTML. +See [*§ 4.5.1 The `a` element*][html-a] in the HTML spec for more info. +When an email autolink is used, the string `mailto:` is prepended when +generating the `href` attribute of the hyperlink. +When a www autolink is used, the string `http://` is prepended. + +## CSS + +As hyperlinks are the fundamental thing that makes the web, you will most +definitely have CSS for `a` elements already. +The same CSS can be used for autolink literals, too. + +GitHub itself does not apply interesting CSS to autolink literals. +For any link, it currently (June 2022) [uses][css]: + +```css +a { + background-color: transparent; + color: #58a6ff; + text-decoration: none; +} + +a:active, +a:hover { + outline-width: 0; +} + +a:hover { + text-decoration: underline; +} + +a:not([href]) { + color: inherit; + text-decoration: none; +} +``` + +## Syntax + +Autolink literals form with, roughly, the following BNF: + +```bnf +gfm_autolink_literal ::= gfm_protocol_autolink | gfm_www_autolink | gfm_email_autolink + +; Restriction: the code before must be `www_autolink_before`. +; Restriction: the code after `.` must not be eof. +www_autolink ::= 3('w' | 'W') '.' [domain [path]] +www_autolink_before ::= eof | eol | space_or_tab | '(' | '*' | '_' | '[' | ']' | '~' + +; Restriction: the code before must be `http_autolink_before`. +; Restriction: the code after the protocol must be `http_autolink_protocol_after`. +http_autolink ::= ('h' | 'H') 2('t' | 'T') ('p' | 'P') ['s' | 'S'] ':' 2'/' domain [path] +http_autolink_before ::= byte - ascii_alpha +http_autolink_protocol_after ::= byte - eof - eol - ascii_control - unicode_whitespace - ode_punctuation + +; Restriction: the code before must be `email_autolink_before`. +; Restriction: `ascii_digit` may not occur in the last label part of the label. +email_autolink ::= 1*('+' | '-' | '.' | '_' | ascii_alphanumeric) '@' 1*(1*label_segment l_dot_cont) 1*label_segment +email_autolink_before ::= byte - ascii_alpha - '/' + +; Restriction: `_` may not occur in the last two domain parts. +domain ::= 1*(url_ampt_cont | domain_punct_cont | '-' | byte - eof - ascii_control - ode_whitespace - unicode_punctuation) +; Restriction: must not be followed by `punct`. +domain_punct_cont ::= '.' | '_' +; Restriction: must not be followed by `char-ref`. +url_ampt_cont ::= '&' + +; Restriction: a counter `balance = 0` is increased for every `(`, and decreased for every `)`. +; Restriction: `)` must not be `paren_at_end`. +path ::= 1*(url_ampt_cont | path_punctuation_cont | '(' | ')' | byte - eof - eol - space_or_tab) +; Restriction: must not be followed by `punct`. +path_punctuation_cont ::= trailing_punctuation - '<' +; Restriction: must be followed by `punct` and `balance` must be less than `0`. +paren_at_end ::= ')' + +label_segment ::= label_dash_underscore_cont | ascii_alpha | ascii_digit +; Restriction: if followed by `punct`, the whole email autolink is invalid. +label_dash_underscore_cont ::= '-' | '_' +; Restriction: must not be followed by `punct`. +label_dot_cont ::= '.' + +punct ::= *trailing_punctuation ( byte - eof - eol - space_or_tab - '<' ) +char_ref ::= *ascii_alpha ';' path_end +trailing_punctuation ::= '!' | '"' | '\'' | ')' | '*' | ',' | '.' | ':' | ';' | '<' | '?' | '_' | '~' +``` + +The grammar for GFM autolink literal is very relaxed: basically anything +except for whitespace is allowed after a prefix. +To use whitespace characters and otherwise impossible characters, in URLs, +you can use percent encoding: + +```markdown +https://example.com/alpha%20bravo +``` + +Yields: + +```html +

          https://example.com/alpha%20bravo

          +``` + +There are several cases where incorrect encoding of URLs would, in other +languages, result in a parse error. +In markdown, there are no errors, and URLs are normalized. +In addition, many characters are percent encoded +([`sanitizeUri`][micromark-util-sanitize-uri]). +For example: + +```markdown +www.a👍b% +``` + +Yields: + +```html +

          www.a👍b%

          +``` + +There is a big difference between how www and protocol literals work +compared to how email literals work. +The first two are done when parsing, and work like anything else in +markdown. +But email literals are handled afterwards: when everything is parsed, we +look back at the events to figure out if there were email addresses. +This particularly affects how they interleave with character escapes and +character references. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-gfm-autolink-literal@^2`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe. +Unlike other links in CommonMark, which allow arbitrary protocols, this +construct always produces safe links. + +## Related + +* [`micromark-extension-gfm`][micromark-extension-gfm] + — support all of GFM +* [`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal] + — support all of GFM in mdast +* [`mdast-util-gfm`][mdast-util-gfm] + — support all of GFM in mdast +* [`remark-gfm`][remark-gfm] + — support all of GFM in remark + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-autolink-literal.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-autolink-literal + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-autolink-literal.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-autolink-literal + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-autolink-literal + +[size]: https://bundlejs.com/?q=micromark-extension-gfm-autolink-literal + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[micromark-util-sanitize-uri]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm + +[mdast-util-gfm-autolink-literal]: https://github.com/syntax-tree/mdast-util-gfm-autolink-literal + +[remark-gfm]: https://github.com/remarkjs/remark-gfm + +[spec]: https://github.github.com/gfm/#autolinks-extension- + +[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element + +[css]: https://github.com/sindresorhus/github-markdown-css + +[cmark-gfm]: https://github.com/github/cmark-gfm + +[api-gfm-autolink-literal]: #gfmautolinkliteral + +[api-gfm-autolink-literal-html]: #gfmautolinkliteralhtml diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts b/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts new file mode 100644 index 0000000000..1be286871d --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts @@ -0,0 +1,164 @@ +export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' +export {gfmFootnote} from './lib/syntax.js' + +/** + * Generate a back label dynamically. + * + * For the following markdown: + * + * ```markdown + * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. + * + * [^remark]: things about remark + * [^micromark]: things about micromark + * ``` + * + * This function will be called with: + * + * * `0` and `0` for the backreference from `things about micromark` to + * `alpha`, as it is the first used definition, and the first call to it + * * `0` and `1` for the backreference from `things about micromark` to + * `bravo`, as it is the first used definition, and the second call to it + * * `1` and `0` for the backreference from `things about remark` to + * `charlie`, as it is the second used definition + * + * @param referenceIndex + * Index of the definition in the order that they are first referenced, + * 0-indexed. + * @param rereferenceIndex + * Index of calls to the same definition, 0-indexed. + * @returns + * Back label to use when linking back from definitions to their reference. + */ +export type BackLabelTemplate = ( + referenceIndex: number, + rereferenceIndex: number +) => string + +/** + * Configuration. + */ +export interface HtmlOptions { + /** + * Prefix to use before the `id` attribute on footnotes to prevent them from + * *clobbering* (default: `'user-content-'`). + * + * Pass `''` for trusted markdown and when you are careful with + * polyfilling. + * You could pass a different prefix. + * + * DOM clobbering is this: + * + * ```html + *

          + * + * ``` + * + * The above example shows that elements are made available by browsers, by + * their ID, on the `window` object. + * This is a security risk because you might be expecting some other variable + * at that place. + * It can also break polyfills. + * Using a prefix solves these problems. + */ + clobberPrefix?: string | null | undefined + /** + * Textual label to use for the footnotes section (default: `'Footnotes'`). + * + * Change it when the markdown is not in English. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + label?: string | null | undefined + /** + * Attributes to use on the footnote label (default: `'class="sr-only"'`). + * + * Change it to show the label and add other attributes. + * + * This label is typically hidden visually (assuming an `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass an empty string. + * You can also add different attributes. + * + * > 👉 **Note**: `id="footnote-label"` is always added, because footnote + * > calls use it with `aria-describedby` to provide an accessible label. + */ + labelAttributes?: string | null | undefined + /** + * HTML tag name to use for the footnote label element (default: `'h2'`). + * + * Change it to match your document structure. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + labelTagName?: string | null | undefined + /** + * Textual label to describe the backreference back to references (default: + * `defaultBackLabel`). + * + * The default value is: + * + * ```js + * function defaultBackLabel(referenceIndex, rereferenceIndex) { + * return ( + * 'Back to reference ' + + * (referenceIndex + 1) + + * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') + * ) + * } + * ``` + * + * Change it when the markdown is not in English. + * + * This label is used in the `aria-label` attribute on each backreference + * (the `↩` links). + * It affects users of assistive technology. + */ + backLabel?: BackLabelTemplate | string | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + gfmFootnoteDefinitions?: Record + gfmFootnoteDefinitionStack?: Array + gfmFootnoteCallCounts?: Record + gfmFootnoteCallOrder?: Array + } + + /** + * Parse context. + */ + interface ParseContext { + gfmFootnotes?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + gfmFootnoteCall: 'gfmFootnoteCall' + gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' + gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' + gfmFootnoteCallString: 'gfmFootnoteCallString' + gfmFootnoteDefinition: 'gfmFootnoteDefinition' + gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' + gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' + gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' + gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' + gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' + gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' + } +} diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.js b/node_modules/micromark-extension-gfm-footnote/dev/index.js new file mode 100644 index 0000000000..a399a81f45 --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/dev/index.js @@ -0,0 +1,3 @@ +// Note: types are exported from `dev/index.d.ts`. +export {gfmFootnote} from './lib/syntax.js' +export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-footnote/index.d.ts b/node_modules/micromark-extension-gfm-footnote/index.d.ts new file mode 100644 index 0000000000..1be286871d --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/index.d.ts @@ -0,0 +1,164 @@ +export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' +export {gfmFootnote} from './lib/syntax.js' + +/** + * Generate a back label dynamically. + * + * For the following markdown: + * + * ```markdown + * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. + * + * [^remark]: things about remark + * [^micromark]: things about micromark + * ``` + * + * This function will be called with: + * + * * `0` and `0` for the backreference from `things about micromark` to + * `alpha`, as it is the first used definition, and the first call to it + * * `0` and `1` for the backreference from `things about micromark` to + * `bravo`, as it is the first used definition, and the second call to it + * * `1` and `0` for the backreference from `things about remark` to + * `charlie`, as it is the second used definition + * + * @param referenceIndex + * Index of the definition in the order that they are first referenced, + * 0-indexed. + * @param rereferenceIndex + * Index of calls to the same definition, 0-indexed. + * @returns + * Back label to use when linking back from definitions to their reference. + */ +export type BackLabelTemplate = ( + referenceIndex: number, + rereferenceIndex: number +) => string + +/** + * Configuration. + */ +export interface HtmlOptions { + /** + * Prefix to use before the `id` attribute on footnotes to prevent them from + * *clobbering* (default: `'user-content-'`). + * + * Pass `''` for trusted markdown and when you are careful with + * polyfilling. + * You could pass a different prefix. + * + * DOM clobbering is this: + * + * ```html + *

          + * + * ``` + * + * The above example shows that elements are made available by browsers, by + * their ID, on the `window` object. + * This is a security risk because you might be expecting some other variable + * at that place. + * It can also break polyfills. + * Using a prefix solves these problems. + */ + clobberPrefix?: string | null | undefined + /** + * Textual label to use for the footnotes section (default: `'Footnotes'`). + * + * Change it when the markdown is not in English. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + label?: string | null | undefined + /** + * Attributes to use on the footnote label (default: `'class="sr-only"'`). + * + * Change it to show the label and add other attributes. + * + * This label is typically hidden visually (assuming an `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass an empty string. + * You can also add different attributes. + * + * > 👉 **Note**: `id="footnote-label"` is always added, because footnote + * > calls use it with `aria-describedby` to provide an accessible label. + */ + labelAttributes?: string | null | undefined + /** + * HTML tag name to use for the footnote label element (default: `'h2'`). + * + * Change it to match your document structure. + * + * This label is typically hidden visually (assuming a `sr-only` CSS class + * is defined that does that) and so affects screen readers only. + * If you do have such a class, but want to show this section to everyone, + * pass different attributes with the `labelAttributes` option. + */ + labelTagName?: string | null | undefined + /** + * Textual label to describe the backreference back to references (default: + * `defaultBackLabel`). + * + * The default value is: + * + * ```js + * function defaultBackLabel(referenceIndex, rereferenceIndex) { + * return ( + * 'Back to reference ' + + * (referenceIndex + 1) + + * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') + * ) + * } + * ``` + * + * Change it when the markdown is not in English. + * + * This label is used in the `aria-label` attribute on each backreference + * (the `↩` links). + * It affects users of assistive technology. + */ + backLabel?: BackLabelTemplate | string | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + gfmFootnoteDefinitions?: Record + gfmFootnoteDefinitionStack?: Array + gfmFootnoteCallCounts?: Record + gfmFootnoteCallOrder?: Array + } + + /** + * Parse context. + */ + interface ParseContext { + gfmFootnotes?: Array + } + + /** + * Token types. + */ + interface TokenTypeMap { + gfmFootnoteCall: 'gfmFootnoteCall' + gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' + gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' + gfmFootnoteCallString: 'gfmFootnoteCallString' + gfmFootnoteDefinition: 'gfmFootnoteDefinition' + gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' + gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' + gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' + gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' + gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' + gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' + } +} diff --git a/node_modules/micromark-extension-gfm-footnote/index.js b/node_modules/micromark-extension-gfm-footnote/index.js new file mode 100644 index 0000000000..b210cb3dae --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/index.js @@ -0,0 +1,3 @@ +// Note: types are exported from `dev/index.d.ts`. +export { gfmFootnote } from './lib/syntax.js'; +export { gfmFootnoteHtml, defaultBackLabel } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-footnote/license b/node_modules/micromark-extension-gfm-footnote/license new file mode 100644 index 0000000000..f4fb31fe44 --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2021 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-footnote/package.json b/node_modules/micromark-extension-gfm-footnote/package.json new file mode 100644 index 0000000000..bcbf3e6c46 --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/package.json @@ -0,0 +1,132 @@ +{ + "name": "micromark-extension-gfm-footnote", + "version": "2.1.0", + "description": "micromark extension to support GFM footnotes", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "gfm", + "footnote", + "note", + "definition", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-gfm-footnote", + "bugs": "https://github.com/micromark/micromark-extension-gfm-footnote/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "create-gfm-fixtures": "^1.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off", + "unicorn/prefer-string-replace-all": "off" + }, + "overrides": [ + { + "files": [ + "**/*.d.ts" + ], + "rules": { + "@typescript-eslint/array-type": [ + "error", + { + "default": "generic" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": true + } + ], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface" + ] + } + }, + { + "files": [ + "test/**/*.js" + ], + "rules": { + "no-await-in-loop": 0 + } + } + ] + } +} diff --git a/node_modules/micromark-extension-gfm-footnote/readme.md b/node_modules/micromark-extension-gfm-footnote/readme.md new file mode 100644 index 0000000000..4c446ae20b --- /dev/null +++ b/node_modules/micromark-extension-gfm-footnote/readme.md @@ -0,0 +1,656 @@ +# micromark-extension-gfm-footnote + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support GFM [footnotes][post]. + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`defaultBackLabel(referenceIndex, rereferenceIndex)`](#defaultbacklabelreferenceindex-rereferenceindex) + * [`gfmFootnote()`](#gfmfootnote) + * [`gfmFootnoteHtml(options?)`](#gfmfootnotehtmloptions) + * [`BackLabelTemplate`](#backlabeltemplate) + * [`HtmlOptions`](#htmloptions) +* [Bugs](#bugs) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains extensions that add support for footnotes as enabled by +GFM to [`micromark`][micromark]. + +GitHub announced footnotes [on September 30, 2021][post] but did not specify +them in their GFM spec. +As they are implemented in their parser and supported in all places where +other GFM features work, they can be considered part of GFM. +GitHub employs several other features (such as mentions or frontmatter) that +are either not in their parser, or not in all places where GFM features work, +which should not be considered GFM. + +The implementation of footnotes on github.com is currently buggy. +The bugs have been reported on [`cmark-gfm`][cmark-gfm]. +This micromark extension matches github.com except for its bugs. + +## When to use this + +This project is useful when you want to support footnotes in markdown. + +You can use these extensions when you are working with [`micromark`][micromark]. +To support all GFM features, use +[`micromark-extension-gfm`][micromark-extension-gfm] instead. + +When you need a syntax tree, combine this package with +[`mdast-util-gfm-footnote`][mdast-util-gfm-footnote]. + +All these packages are used in [`remark-gfm`][remark-gfm], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-extension-gfm-footnote +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {gfmFootnote, gfmFootnoteHtml} from 'https://esm.sh/micromark-extension-gfm-footnote@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say our document `example.md` contains: + +````markdown +Using footnotes is fun![^1] They let you reference relevant information without disrupting the flow of what you’re trying to say.[^bignote] + +[^1]: This is the first footnote. +[^bignote]: Here’s one with multiple paragraphs and code. + + Indent paragraphs to include them in the footnote. + + ``` + my code + ``` + + Add as many paragraphs as you like. + +Text here and here and here. +[Learn more about markdown and footnotes in markdown](https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#footnotes) +```` + +…and our module `example.js` looks as follows: + +```js +import fs from 'node:fs/promises' +import {micromark} from 'micromark' +import {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote' + +const output = micromark(await fs.readFile('example.md'), { + extensions: [gfmFootnote()], + htmlExtensions: [gfmFootnoteHtml()] +}) + +console.log(output) +``` + +…now running `node example.js` yields: + +```html +

          Using footnotes is fun!1 They let you reference relevant information without disrupting the flow of what you’re trying to say.2

          +

          Text here and here and here. +Learn more about markdown and footnotes in markdown

          +

          Footnotes

          +
            +
          1. +

            This is the first footnote.

            +
          2. +
          3. +

            Here’s one with multiple paragraphs and code.

            +

            Indent paragraphs to include them in the footnote.

            +
            my code
            +
            +

            Add as many paragraphs as you like.

            +
          4. +
          +
          +``` + +## API + +This package exports the identifiers +[`defaultBackLabel`][api-default-back-label], +[`gfmFootnote`][api-gfm-footnote], and +[`gfmFootnoteHtml`][api-gfm-footnote-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `defaultBackLabel(referenceIndex, rereferenceIndex)` + +Generate the default label that GitHub uses on backreferences +([`BackLabelTemplate`][api-back-label-template]). + +### `gfmFootnote()` + +Create an extension for `micromark` to enable GFM footnote syntax. + +###### Returns + +Extension for `micromark` that can be passed in `extensions` to enable GFM +footnote syntax ([`Extension`][micromark-extension]). + +### `gfmFootnoteHtml(options?)` + +Create an extension for `micromark` to support GFM footnotes when serializing +to HTML. + +###### Parameters + +* `options` ([`HtmlOptions`][api-html-options], optional) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions` to support GFM +footnotes when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +### `BackLabelTemplate` + +Generate a back label dynamically (TypeScript type). + +For the following markdown: + +```markdown +Alpha[^micromark], bravo[^micromark], and charlie[^remark]. + +[^remark]: things about remark +[^micromark]: things about micromark +``` + +This function will be called with: + +* `0` and `0` for the backreference from `things about micromark` to + `alpha`, as it is the first used definition, and the first call to it +* `0` and `1` for the backreference from `things about micromark` to + `bravo`, as it is the first used definition, and the second call to it +* `1` and `0` for the backreference from `things about remark` to + `charlie`, as it is the second used definition + +###### Parameters + +* `referenceIndex` (`number`) + — index of the definition in the order that they are first referenced, + 0-indexed +* `rereferenceIndex` (`number`) + — index of calls to the same definition, 0-indexed + +###### Returns + +Back label to use when linking back from definitions to their reference +(`string`). + +### `HtmlOptions` + +Configuration (TypeScript type). + +##### Fields + +###### `clobberPrefix` + +Prefix to use before the `id` attribute on footnotes to prevent them from +*clobbering* (`string`, default: `'user-content-'`). + +Pass `''` for trusted markdown and when you are careful with polyfilling. +You could pass a different prefix. + +DOM clobbering is this: + +```html +

          + +``` + +The above example shows that elements are made available by browsers, by their +ID, on the `window` object. +This is a security risk because you might be expecting some other variable at +that place. +It can also break polyfills. +Using a prefix solves these problems. + +###### `label` + +Textual label to use for the footnotes section (`string`, default: +`'Footnotes'`). + +Change it when the markdown is not in English. + +This label is typically hidden visually (assuming a `sr-only` CSS class +is defined that does that) and so affects screen readers only. + +###### `labelAttributes` + +Attributes to use on the footnote label (`string`, default: +`'class="sr-only"'`). + +Change it to show the label and add other attributes. + +This label is typically hidden visually (assuming an `sr-only` CSS class +is defined that does that) and so affects screen readers only. +If you do have such a class, but want to show this section to everyone, +pass an empty string. +You can also add different attributes. + +> 👉 **Note**: `id="footnote-label"` is always added, because footnote +> calls use it with `aria-describedby` to provide an accessible label. + +###### `labelTagName` + +HTML tag name to use for the footnote label element (`string`, default: +`'h2'`). + +Change it to match your document structure. + +This label is typically hidden visually (assuming a `sr-only` CSS class +is defined that does that) and so affects screen readers only. + +###### `backLabel` + +Textual label to describe the backreference back to footnote calls +([`BackLabelTemplate`][api-back-label-template] or `string`, +default: [`defaultBackLabel`][api-default-back-label]). + +Change it when the markdown is not in English. + +This label is used in the [`aria-label`][aria-label] attribute on each +backreference (the `↩` links). +It affects users of assistive technology. + +## Bugs + +GitHub’s own algorithm to parse footnote definitions contains several bugs. +These are not present in this project. +The issues relating to footnote definitions are: + +* [Footnote reference call identifiers are trimmed, but definition + identifiers aren’t](https://github.com/github/cmark-gfm/issues/237)\ + — initial and final whitespace in labels causes them not to match +* [Footnotes are matched case-insensitive, but links keep their casing, + breaking them](https://github.com/github/cmark-gfm/issues/239)\ + — using uppercase (or any character that will be percent encoded) in + identifiers breaks links +* [Colons in footnotes generate links w/o + `href`](https://github.com/github/cmark-gfm/issues/250)\ + — colons in identifiers generate broken links +* [Character escape of `]` does not work in footnote + identifiers](https://github.com/github/cmark-gfm/issues/240)\ + — some character escapes don’t work +* [Footnotes in links are + broken](https://github.com/github/cmark-gfm/issues/249)\ + — while `CommonMark` prevents links in links, GitHub does not prevent + footnotes (which turn into links) in links +* [Footnote-like brackets around image, break that + image](https://github.com/github/cmark-gfm/issues/275)\ + — images can’t be used in what looks like a footnote call +* [GFM footnotes: line ending in footnote definition label causes text to + disappear](https://github.com/github/cmark-gfm/issues/282)\ + — line endings in footnote definitions cause text to disappear + +## Authoring + +When authoring markdown with footnotes it’s recommended to use words instead +of numbers (or letters or anything with an order) as identifiers. +That makes it easier to reuse and reorder footnotes. + +It’s recommended to place footnotes definitions at the bottom of the document. + +## HTML + +GFM footnotes do not, on their own, relate to anything in HTML. +When a footnote reference matches with a definition, they each relate to several +elements in HTML. + +The reference relates to `` and `` elements in HTML: + +```html +1

          +``` + +…where `x` is the identifier used in the markdown source and `1` the number of +corresponding, listed, definition. + +See [*§ 4.5.19 The `sub` and `sup` elements*][html-sup], +[*§ 4.5.1 The `a` element*][html-a], and +[*§ 3.2.6.6 Embedding custom non-visible data with the `data-*` +attributes*][html-data] +in the HTML spec, and +[*§ 6.8 `aria-describedby` property*][aria-describedby] +in WAI-ARIA, for more info. + +When one or more definitions are referenced, a footnote section is generated at +the end of the document, using `
          `, `

          `, and `
            ` elements: + +```html +

            Footnotes

            +
            +
            +``` + +Each definition is generated as a `
          1. ` in the `
              ` in the order they were +first referenced: + +```html +
            1. +``` + +Backreferences are injected at the end of the first paragraph, or, when there +is no paragraph, at the end of the definition. +When a definition is referenced multiple times, multiple backreferences are +generated. +Further backreferences use an extra counter in the `href` attribute and +visually in a `` after `↩`. + +```html + 2 +``` + +See +[*§ 4.5.1 The `a` element*][html-a], +[*§ 4.3.6 The `h1`, `h2`, `h3`, `h4`, `h5`, and `h6` elements*][html-h], +[*§ 4.4.8 The `li` element*][html-li], +[*§ 4.4.5 The `ol` element*][html-ol], +[*§ 4.4.1 The `p` element*][html-p], +[*§ 4.3.3 The `section` element*][html-section], and +[*§ 4.5.19 The `sub` and `sup` elements*][html-sup] +in the HTML spec, and +[*§ 6.8 `aria-label` property*][aria-label] +in WAI-ARIA, for more info. + +## CSS + +The following CSS is needed to make footnotes look a bit like GitHub (and fixes +a bug). +For the complete actual CSS see +[`sindresorhus/github-markdown-css`](https://github.com/sindresorhus/github-markdown-css). + +```css +/* Style the footnotes section. */ +.footnotes { + font-size: smaller; + color: #8b949e; + border-top: 1px solid #30363d; +} + +/* Hide the section label for visual users. */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + word-wrap: normal; + border: 0; +} + +/* Place `[` and `]` around footnote references. */ +[data-footnote-ref]::before { + content: '['; +} + +[data-footnote-ref]::after { + content: ']'; +} +``` + +## Syntax + +Footnotes form with, roughly, the following BNF: + +```bnf +gfm_footnote_reference ::= gfm_footnote_label + +gfm_footnote_definition_start ::= gfm_footnote_label ':' *space_or_tab +; Restriction: blank line allowed. +gfm_footnote_definition_cont ::= 4(space_or_tab) + +; Restriction: maximum `999` codes between `^` and `]`. +gfm_footnote_label ::= '[' '^' 1*(gfm_footnote_label_byte | gfm_footnote_label_escape) ']' +gfm_footnote_label_byte ::= text - '[' - '\\' - ']' +gfm_footnote_label_escape ::= '\\' ['[' | '\\' | ']'] + +; Any byte (u8) +byte ::= 0x00..=0xFFFF +space_or_tab ::= '\t' | ' ' +eol ::= '\n' | '\r' | '\r\n' +line ::= byte - eol +text ::= line - space_or_tab +``` + +Further lines after `gfm_footnote_definition_start` that are not prefixed with +`gfm_footnote_definition_cont` cause the footnote definition to be exited, +except when those lines are lazy continuation or blank. +Like so many things in markdown, footnote definition too are complex. +See [*§ Phase 1: block structure* in `CommonMark`][commonmark-block] for more +on parsing details. + +The identifiers in the `label` parts are interpreted as the +[string][micromark-content-types] content type. +That means that character escapes and character references are allowed. + +Definitions match to references through identifiers. +To match, both labels must be equal after normalizing with +[`normalizeIdentifier`][micromark-normalize-identifier]. +One definition can match to multiple calls. +Multiple definitions with the same, normalized, identifier are ignored: the +first definition is preferred. +To illustrate, the definition with the content of `x` wins: + +```markdown +[^a]: x +[^a]: y + +[^a] +``` + +Importantly, while labels *can* include [string][micromark-content-types] +content (character escapes and character references), these are not considered +when matching. +To illustrate, neither definition matches the reference: + +```markdown +[^a&b]: x +[^a\&b]: y + +[^a&b] +``` + +Because footnote definitions are containers (like block quotes and list items), +they can contain more footnote definitions. +They can even include references to themselves. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types [`BackLabelTemplate`][api-back-label-template] +and [`HtmlOptions`][api-html-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-gfm-footnote@^2`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe. +Setting `clobberPrefix = ''` is dangerous, it opens you up to DOM clobbering. +The `labelTagName` and `labelAttributes` options are unsafe when used with user +content, they allow defining arbitrary HTML. + +## Related + +* [`micromark-extension-gfm`][micromark-extension-gfm] + — support all of GFM +* [`mdast-util-gfm-footnote`][mdast-util-gfm-footnote] + — support all of GFM in mdast +* [`mdast-util-gfm`][mdast-util-gfm] + — support all of GFM in mdast +* [`remark-gfm`][remark-gfm] + — support all of GFM in remark + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-gfm-footnote/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-gfm-footnote/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-footnote.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-footnote + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-footnote.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-footnote + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-footnote + +[size]: https://bundlejs.com/?q=micromark-extension-gfm-footnote + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-content-types]: https://github.com/micromark/micromark#content-types + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-normalize-identifier]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[mdast-util-gfm-footnote]: https://github.com/syntax-tree/mdast-util-gfm-footnote + +[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm + +[remark-gfm]: https://github.com/remarkjs/remark-gfm + +[post]: https://github.blog/changelog/2021-09-30-footnotes-now-supported-in-markdown-fields/ + +[cmark-gfm]: https://github.com/github/cmark-gfm + +[commonmark-block]: https://spec.commonmark.org/0.30/#phase-1-block-structure + +[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element + +[html-data]: https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes + +[html-h]: https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements + +[html-li]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-li-element + +[html-ol]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-ol-element + +[html-p]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-p-element + +[html-section]: https://html.spec.whatwg.org/multipage/sections.html#the-section-element + +[html-sup]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-sub-and-sup-elements + +[aria-describedby]: https://w3c.github.io/aria/#aria-describedby + +[aria-label]: https://w3c.github.io/aria/#aria-label + +[api-gfm-footnote]: #gfmfootnote + +[api-gfm-footnote-html]: #gfmfootnotehtmloptions + +[api-html-options]: #htmloptions + +[api-default-back-label]: #defaultbacklabelreferenceindex-rereferenceindex + +[api-back-label-template]: #backlabeltemplate diff --git a/node_modules/micromark-extension-gfm-table/dev/index.d.ts b/node_modules/micromark-extension-gfm-table/dev/index.d.ts new file mode 100644 index 0000000000..1625d64dcb --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/dev/index.d.ts @@ -0,0 +1,37 @@ +import type {Align} from './lib/infer.js' + +export {gfmTableHtml} from './lib/html.js' +export {gfmTable} from './lib/syntax.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token; + * `align` is patched on `table` tokens. + */ + interface Token { + _align?: Align[] + } + + interface TokenTypeMap { + table: 'table' + tableBody: 'tableBody' + tableCellDivider: 'tableCellDivider' + tableContent: 'tableContent' + tableData: 'tableData' + tableDelimiter: 'tableDelimiter' + tableDelimiterFiller: 'tableDelimiterFiller' + tableDelimiterMarker: 'tableDelimiterMarker' + tableDelimiterRow: 'tableDelimiterRow' + tableHead: 'tableHead' + tableHeader: 'tableHeader' + tableRow: 'tableRow' + } + + interface CompileData { + tableAlign?: Align[] + tableColumn?: number + } +} diff --git a/node_modules/micromark-extension-gfm-table/dev/index.js b/node_modules/micromark-extension-gfm-table/dev/index.js new file mode 100644 index 0000000000..dcb556083f --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/dev/index.js @@ -0,0 +1,2 @@ +export {gfmTableHtml} from './lib/html.js' +export {gfmTable} from './lib/syntax.js' diff --git a/node_modules/micromark-extension-gfm-table/index.d.ts b/node_modules/micromark-extension-gfm-table/index.d.ts new file mode 100644 index 0000000000..1625d64dcb --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/index.d.ts @@ -0,0 +1,37 @@ +import type {Align} from './lib/infer.js' + +export {gfmTableHtml} from './lib/html.js' +export {gfmTable} from './lib/syntax.js' + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Augment token; + * `align` is patched on `table` tokens. + */ + interface Token { + _align?: Align[] + } + + interface TokenTypeMap { + table: 'table' + tableBody: 'tableBody' + tableCellDivider: 'tableCellDivider' + tableContent: 'tableContent' + tableData: 'tableData' + tableDelimiter: 'tableDelimiter' + tableDelimiterFiller: 'tableDelimiterFiller' + tableDelimiterMarker: 'tableDelimiterMarker' + tableDelimiterRow: 'tableDelimiterRow' + tableHead: 'tableHead' + tableHeader: 'tableHeader' + tableRow: 'tableRow' + } + + interface CompileData { + tableAlign?: Align[] + tableColumn?: number + } +} diff --git a/node_modules/micromark-extension-gfm-table/index.js b/node_modules/micromark-extension-gfm-table/index.js new file mode 100644 index 0000000000..8f9afc67d3 --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/index.js @@ -0,0 +1,2 @@ +export { gfmTableHtml } from './lib/html.js'; +export { gfmTable } from './lib/syntax.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-table/license b/node_modules/micromark-extension-gfm-table/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-table/package.json b/node_modules/micromark-extension-gfm-table/package.json new file mode 100644 index 0000000000..49909daa90 --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/package.json @@ -0,0 +1,116 @@ +{ + "name": "micromark-extension-gfm-table", + "version": "2.1.0", + "description": "micromark extension to support GFM tables", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "table", + "row", + "column", + "cell", + "tabular", + "gfm", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-gfm-table", + "bugs": "https://github.com/micromark/micromark-extension-gfm-table/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "create-gfm-fixtures": "^1.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "overrides": [ + { + "files": [ + "test/**/*.js" + ], + "rules": { + "no-await-in-loop": 0 + } + }, + { + "files": [ + "**/*.ts" + ], + "rules": { + "@typescript-eslint/consistent-type-definitions": 0 + } + } + ], + "prettier": true, + "rules": { + "complexity": "off", + "max-depth": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-string-replace-all": "off" + } + } +} diff --git a/node_modules/micromark-extension-gfm-table/readme.md b/node_modules/micromark-extension-gfm-table/readme.md new file mode 100644 index 0000000000..35e1e1966d --- /dev/null +++ b/node_modules/micromark-extension-gfm-table/readme.md @@ -0,0 +1,515 @@ +# micromark-extension-gfm-table + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support GFM [tables][]. + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`gfmTable()`](#gfmtable) + * [`gfmTableHtml()`](#gfmtablehtml) +* [Bugs](#bugs) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains extensions that add support for the table syntax enabled +by GFM to [`micromark`][micromark]. +These extensions match github.com. + +## When to use this + +This project is useful when you want to support tables in markdown. + +You can use these extensions when you are working with [`micromark`][micromark]. +To support all GFM features, use +[`micromark-extension-gfm`][micromark-extension-gfm] instead. + +When you need a syntax tree, combine this package with +[`mdast-util-gfm-table`][mdast-util-gfm-table]. + +All these packages are used in [`remark-gfm`][remark-gfm], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-extension-gfm-table +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {gfmTable, gfmTableHtml} from 'https://esm.sh/micromark-extension-gfm-table@2' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {micromark} from 'micromark' +import {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table' + +const output = micromark('| a |\n| - |', { + extensions: [gfmTable()], + htmlExtensions: [gfmTableHtml()] +}) + +console.log(output) +``` + +Yields: + +```html + + + + + + +
              a
              +``` + +## API + +This package exports the identifiers [`gfmTable`][api-gfm-table] and +[`gfmTableHtml`][api-gfm-table-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `gfmTable()` + +Create an HTML extension for `micromark` to support GitHub tables syntax. + +###### Returns + +Extension for `micromark` that can be passed in `extensions` to enable GFM +table syntax ([`Extension`][micromark-extension]). + +### `gfmTableHtml()` + +Create an HTML extension for `micromark` to support GitHub tables when +serializing to HTML. + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions` to support +GFM tables when serializing to HTML +([`HtmlExtension`][micromark-html-extension]). + +## Bugs + +GitHub’s own algorithm to parse tables contains a bug. +This bug is not present in this project. +The issue relating to tables is: + +* [GFM tables: escaped escapes are incorrectly treated as + escapes](https://github.com/github/cmark-gfm/issues/277) + +## Authoring + +When authoring markdown with GFM tables, it’s recommended to *always* put +pipes around cells. +Without them, it can be hard to infer whether the table will work, how many +columns there are, and which column you are currently editing. + +It is recommended to not use many columns, as it results in very long lines, +making it hard to infer which column you are currently editing. + +For larger tables, particularly when cells vary in size, it is recommended +*not* to manually “pad” cell text. +While it can look better, it results in a lot of time spent realigning +everything when a new, longer cell is added or the longest cell removed, as +every row then must be changed. +Other than costing time, it also causes large diffs in Git. + +To illustrate, when authoring large tables, it is discouraged to pad cells +like this: + +```markdown +| Alpha bravo charlie | delta | +| ------------------- | -----------------: | +| Echo | Foxtrot golf hotel | +``` + +Instead, use single spaces (and single filler dashes): + +```markdown +| Alpha bravo charlie | delta | +| - | -: | +| Echo | Foxtrot golf hotel | +``` + +## HTML + +GFM tables relate to several HTML elements: ``, ``, ``, and ``. +See +[*§ 4.9.1 The `table` element*][html-table], +[*§ 4.9.5 The `tbody` element*][html-tbody], +[*§ 4.9.9 The `td` element*][html-td], +[*§ 4.9.10 The `th` element*][html-th], +[*§ 4.9.6 The `thead` element*][html-thead], and +[*§ 4.9.8 The `tr` element*][html-tr] +in the HTML spec for more info. + +If the alignment of a column is left, right, or center, a deprecated +`align` attribute is added to each `
              `, +``, `
              ` and `` element belonging to +that column. +That attribute is interpreted by browsers as if a CSS `text-align` property +was included, with its value set to that same keyword. + +## CSS + +The following CSS is needed to make tables look a bit like GitHub. +For the complete actual CSS see +[`sindresorhus/github-markdown-css`][github-markdown-css] + +```css +/* Light theme. */ +:root { + --color-canvas-default: #ffffff; + --color-canvas-subtle: #f6f8fa; + --color-border-default: #d0d7de; + --color-border-muted: hsla(210, 18%, 87%, 1); +} + +/* Dark theme. */ +@media (prefers-color-scheme: dark) { + :root { + --color-canvas-default: #0d1117; + --color-canvas-subtle: #161b22; + --color-border-default: #30363d; + --color-border-muted: #21262d; + } +} + +table { + border-spacing: 0; + border-collapse: collapse; + display: block; + margin-top: 0; + margin-bottom: 16px; + width: max-content; + max-width: 100%; + overflow: auto; +} + +tr { + background-color: var(--color-canvas-default); + border-top: 1px solid var(--color-border-muted); +} + +tr:nth-child(2n) { + background-color: var(--color-canvas-subtle); +} + +td, +th { + padding: 6px 13px; + border: 1px solid var(--color-border-default); +} + +th { + font-weight: 600; +} + +table img { + background-color: transparent; +} +``` + +## Syntax + +Tables form with the following BNF: + +```bnf +gfm_table ::= gfm_table_head 0*(eol gfm_table_body_row) + +; Restriction: both rows must have the same number of cells. +gfm_table_head ::= gfm_table_row eol gfm_table_delimiter_row + +gfm_table_row ::= ['|'] gfm_table_cell 0*('|' gfm_table_cell) ['|'] *space_or_tab +gfm_table_cell ::= *space_or_tab gfm_table_text *space_or_tab +gfm_table_text ::= 0*(line - '\\' - '|' | '\\' ['\\' | '|']) + +gfm_table_delimiter_row ::= ['|'] gfm_table_delimiter_cell 0*('|' gfm_table_delimiter_cell) ['|'] *space_or_tab +gfm_table_delimiter_cell ::= *space_or_tab gfm_table_delimiter_value *space_or_tab +gfm_table_delimiter_value ::= [':'] 1*'-' [':'] +``` + +As this construct occurs in flow, like all flow constructs, it must be +followed by an eol (line ending) or eof (end of file). + +The above grammar shows that basically anything can be a cell or a row. +The main thing that makes something a row, is that it occurs directly before +or after a delimiter row, or after another row. + +It is not required for a table to have a body: it can end right after the +delimiter row. + +Each column can be marked with an alignment. +The alignment marker is a colon (`:`) used before and/or after delimiter row +filler. +To illustrate: + +```markdown +| none | left | right | center | +| ---- | :--- | ----: | :----: | +``` + +The number of cells in the delimiter row, is the number of columns of the +table. +Only the head row is required to have the same number of cells. +Body rows are not required to have a certain number of cells. +For body rows that have less cells than the number of columns of the table, +empty cells are injected. +When a row has more cells than the number of columns of the table, the +superfluous cells are dropped. +To illustrate: + +```markdown +| a | b | +| - | - | +| c | +| d | e | f | +``` + +Yields: + +```html + + + + + + + + + + + + + + + + + +
              ab
              c
              de
              +``` + +Each cell’s text is interpreted as the [text][micromark-content-type] content +type. +That means that it can include constructs such as attention (emphasis, strong). + +The grammar for cells prohibits the use of `|` in them. +To use pipes in cells, encode them as a character reference or character +escape: `|` (or `|`, `|`, `|`, `|`) or +`\|`. + +Escapes will typically work, but they are not supported in +code (text) (and the math (text) extension). +To work around this, GitHub came up with a rather weird “trick”. +When inside a table cell *and* inside code, escaped pipes *are* decoded. +To illustrate: + +```markdown +| Name | Character | +| - | - | +| Left curly brace | `{` | +| Pipe | `\|` | +| Right curly brace | `}` | +``` + +Yields: + +```html + + + + + + + + + + + + + + + + + + + + + +
              NameCharacter
              Left curly brace{
              Pipe|
              Right curly brace}
              +``` + +> 👉 **Note**: no other character can be escaped like this. +> Escaping pipes in code does not work when not inside a table, either. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-gfm-table@^2`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe. + +## Related + +* [`micromark-extension-gfm`][micromark-extension-gfm] + — support all of GFM +* [`mdast-util-gfm-table`][mdast-util-gfm-table] + — support all of GFM in mdast +* [`mdast-util-gfm`][mdast-util-gfm] + — support all of GFM in mdast +* [`remark-gfm`][remark-gfm] + — support all of GFM in remark + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-gfm-table/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-gfm-table/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-table.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-table + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-table.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-table + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-table + +[size]: https://bundlejs.com/?q=micromark-extension-gfm-table + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-content-type]: https://github.com/micromark/micromark#content-types + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm + +[mdast-util-gfm-table]: https://github.com/syntax-tree/mdast-util-gfm-table + +[remark-gfm]: https://github.com/remarkjs/remark-gfm + +[tables]: https://github.github.com/gfm/#tables-extension- + +[html-table]: https://html.spec.whatwg.org/multipage/tables.html#the-table-element + +[html-tbody]: https://html.spec.whatwg.org/multipage/tables.html#the-tbody-element + +[html-thead]: https://html.spec.whatwg.org/multipage/tables.html#the-thead-element + +[html-tr]: https://html.spec.whatwg.org/multipage/tables.html#the-tr-element + +[html-td]: https://html.spec.whatwg.org/multipage/tables.html#the-td-element + +[html-th]: https://html.spec.whatwg.org/multipage/tables.html#the-th-element + +[github-markdown-css]: https://github.com/sindresorhus/github-markdown-css + +[api-gfm-table]: #gfmtable + +[api-gfm-table-html]: #gfmtablehtml diff --git a/node_modules/micromark-extension-math/dev/index.d.ts b/node_modules/micromark-extension-math/dev/index.d.ts new file mode 100644 index 0000000000..d09f0e576d --- /dev/null +++ b/node_modules/micromark-extension-math/dev/index.d.ts @@ -0,0 +1,61 @@ +import type {KatexOptions} from 'katex' + +export {mathHtml} from './lib/html.js' +export {math} from './lib/syntax.js' + +/** + * Configuration for HTML output. + * + * > 👉 **Note**: passed to `katex.renderToString`. + * > `displayMode` is overwritten by this plugin, to `false` for math in + * > text (inline), and `true` for math in flow (block). + */ +export interface HtmlOptions extends KatexOptions { + /** + * The field `displayMode` cannot be passed to `micromark-extension-math`. + * It is overwritten by it, + * to `false` for math in text (inline) and `true` for math in flow (block). + */ + displayMode?: never +} + +/** + * Configuration. + */ +export interface Options { + /** + * Whether to support math (text) with a single dollar (default: `true`). + * + * Single dollars work in Pandoc and many other places, but often interfere + * with “normal” dollars in text. + * If you turn this off, you can use two or more dollars for text math. + */ + singleDollarTextMath?: boolean | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + mathFlowOpen?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + mathFlow: 'mathFlow' + mathFlowFence: 'mathFlowFence' + mathFlowFenceMeta: 'mathFlowFenceMeta' + mathFlowFenceSequence: 'mathFlowFenceSequence' + mathFlowValue: 'mathFlowValue' + mathText: 'mathText' + mathTextData: 'mathTextData' + mathTextPadding: 'mathTextPadding' + mathTextSequence: 'mathTextSequence' + } +} diff --git a/node_modules/micromark-extension-math/dev/index.js b/node_modules/micromark-extension-math/dev/index.js new file mode 100644 index 0000000000..120c39c7fc --- /dev/null +++ b/node_modules/micromark-extension-math/dev/index.js @@ -0,0 +1,3 @@ +// Note: types exported from `index.d.ts`. +export {math} from './lib/syntax.js' +export {mathHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-math/index.d.ts b/node_modules/micromark-extension-math/index.d.ts new file mode 100644 index 0000000000..d09f0e576d --- /dev/null +++ b/node_modules/micromark-extension-math/index.d.ts @@ -0,0 +1,61 @@ +import type {KatexOptions} from 'katex' + +export {mathHtml} from './lib/html.js' +export {math} from './lib/syntax.js' + +/** + * Configuration for HTML output. + * + * > 👉 **Note**: passed to `katex.renderToString`. + * > `displayMode` is overwritten by this plugin, to `false` for math in + * > text (inline), and `true` for math in flow (block). + */ +export interface HtmlOptions extends KatexOptions { + /** + * The field `displayMode` cannot be passed to `micromark-extension-math`. + * It is overwritten by it, + * to `false` for math in text (inline) and `true` for math in flow (block). + */ + displayMode?: never +} + +/** + * Configuration. + */ +export interface Options { + /** + * Whether to support math (text) with a single dollar (default: `true`). + * + * Single dollars work in Pandoc and many other places, but often interfere + * with “normal” dollars in text. + * If you turn this off, you can use two or more dollars for text math. + */ + singleDollarTextMath?: boolean | null | undefined +} + +/** + * Augment types. + */ +declare module 'micromark-util-types' { + /** + * Compile data. + */ + interface CompileData { + mathFlowOpen?: boolean + } + + /** + * Token types. + */ + interface TokenTypeMap { + mathFlow: 'mathFlow' + mathFlowFence: 'mathFlowFence' + mathFlowFenceMeta: 'mathFlowFenceMeta' + mathFlowFenceSequence: 'mathFlowFenceSequence' + mathFlowValue: 'mathFlowValue' + mathText: 'mathText' + mathTextData: 'mathTextData' + mathTextPadding: 'mathTextPadding' + mathTextSequence: 'mathTextSequence' + } +} diff --git a/node_modules/micromark-extension-math/index.js b/node_modules/micromark-extension-math/index.js new file mode 100644 index 0000000000..59bed9f691 --- /dev/null +++ b/node_modules/micromark-extension-math/index.js @@ -0,0 +1,3 @@ +// Note: types exported from `index.d.ts`. +export { math } from './lib/syntax.js'; +export { mathHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-math/license b/node_modules/micromark-extension-math/license new file mode 100644 index 0000000000..39372356c4 --- /dev/null +++ b/node_modules/micromark-extension-math/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2020 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-math/package.json b/node_modules/micromark-extension-math/package.json new file mode 100644 index 0000000000..1f7c882e2e --- /dev/null +++ b/node_modules/micromark-extension-math/package.json @@ -0,0 +1,121 @@ +{ + "name": "micromark-extension-math", + "version": "3.1.0", + "description": "micromark extension to support math (`$C_L$`)", + "license": "MIT", + "keywords": [ + "micromark", + "micromark-extension", + "math", + "katex", + "latex", + "tex", + "markdown", + "unified" + ], + "repository": "micromark/micromark-extension-math", + "bugs": "https://github.com/micromark/micromark-extension-math/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "files": [ + "dev/", + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "c8": "^10.0.0", + "micromark": "^4.0.0", + "micromark-build": "^2.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.58.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api-prod": "node --conditions production test/index.js", + "test-api-dev": "node --conditions development test/index.js", + "test-api": "npm run test-api-dev && npm run test-api-prod", + "test-coverage": "c8 --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "bracketSpacing": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "ignoreCatch": true, + "strict": true + }, + "xo": { + "overrides": [ + { + "files": [ + "**/*.d.ts" + ], + "rules": { + "@typescript-eslint/array-type": [ + "error", + { + "default": "generic" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": true + } + ], + "@typescript-eslint/consistent-type-definitions": [ + "error", + "interface" + ] + } + } + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-at": "off" + } + } +} diff --git a/node_modules/micromark-extension-math/readme.md b/node_modules/micromark-extension-math/readme.md new file mode 100644 index 0000000000..6b57c2ab8c --- /dev/null +++ b/node_modules/micromark-extension-math/readme.md @@ -0,0 +1,429 @@ +# micromark-extension-math + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[micromark][] extensions to support math (`$C_L$`). + +## Contents + +* [What is this?](#what-is-this) +* [When to use this](#when-to-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`math(options?)`](#mathoptions) + * [`mathHtml(options?)`](#mathhtmloptions) + * [`HtmlOptions`](#htmloptions) + * [`Options`](#options) +* [Authoring](#authoring) +* [HTML](#html) +* [CSS](#css) +* [Syntax](#syntax) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package contains two extensions that add support for math syntax +in markdown to [`micromark`][micromark]. + +As there is no spec for math in markdown, this extension follows how code +(fenced and text) works in Commonmark, but uses dollars. + +## When to use this + +This project is useful when you want to support math in markdown. +Extending markdown with a syntax extension makes the markdown less portable. +LaTeX equations are also quite hard. +But this mechanism works well when you want authors, that have some LaTeX +experience, to be able to embed rich diagrams of math in scientific text. + +You can use these extensions when you are working with [`micromark`][micromark] +already. + +When you need a syntax tree, you can combine this package with +[`mdast-util-math`][mdast-util-math]. + +All these packages are used [`remark-math`][remark-math], which focusses on +making it easier to transform content by abstracting these internals away. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +[npm][]: + +```sh +npm install micromark-extension-math +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {math, mathHtml} from 'https://esm.sh/micromark-extension-math@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +Say our document `example.md` contains: + +```markdown +Lift($L$) can be determined by Lift Coefficient ($C_L$) like the following equation. + +$$ +L = \frac{1}{2} \rho v^2 S C_L +$$ +``` + +…and our module `example.js` looks as follows: + +```js +import fs from 'node:fs/promises' +import {micromark} from 'micromark' +import {math, mathHtml} from 'micromark-extension-math' + +const output = micromark(await fs.readFile('example.md'), { + extensions: [math()], + htmlExtensions: [mathHtml()] +}) + +console.log(output) +``` + +…now running `node example.js` yields (abbreviated): + +```html +

              Lift() can be determined by Lift Coefficient () like the following equation.

              +
              +``` + +## API + +This package exports the identifiers [`math`][api-math] and +[`mathHtml`][api-math-html]. +There is no default export. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. + +### `math(options?)` + +Create an extension for `micromark` to enable math syntax. + +###### Parameters + +* `options` ([`Options`][api-options], default: `{}`) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `extensions`, to enable math +syntax ([`Extension`][micromark-extension]). + +### `mathHtml(options?)` + +Create an extension for `micromark` to support math when serializing to HTML. + +> 👉 **Note**: this uses KaTeX to render math. + +###### Parameters + +* `options` ([`HtmlOptions`][api-html-options], default: `{}`) + — configuration + +###### Returns + +Extension for `micromark` that can be passed in `htmlExtensions`, to support +math when serializing to HTML ([`HtmlExtension`][micromark-html-extension]). + +### `HtmlOptions` + +Configuration for HTML output (optional). + +> 👉 **Note**: passed to [`katex.renderToString`][katex-options]. +> `displayMode` is overwritten by this plugin, to `false` for math in text +> (inline), and `true` for math in flow (block). + +###### Type + +```ts +type Options = Omit +``` + +### `Options` + +Configuration (TypeScript type). + +###### Fields + +* `singleDollarTextMath` (`boolean`, default: `true`) + — whether to support math (text, inline) with a single dollar. + Single dollars work in Pandoc and many other places, but often interfere + with “normal” dollars in text. + If you turn this off, you use two or more dollars for text math. + +## Authoring + +When authoring markdown with math, keep in mind that math doesn’t work in most +places. +Notably, GitHub currently has a really weird crappy client-side regex-based +thing. +But on your own (math-heavy?) site it can be great! +You can use code (fenced) with an info string of `math` to improve this, as +that works in many places. + +## HTML + +Math (flow) does not relate to HTML elements. +`MathML`, which is sort of like SVG but for math, exists but it doesn’t work +well and isn’t widely supported. +Instead, this uses [KaTeX][], which generates MathML as a fallback but also +generates a bunch of divs and spans so math look pretty. +The KaTeX result is wrapped in `
              ` (for flow, block) and `` (for text, +inline) elements, with two classes: `math` and either `math-display` or +`math-inline`. + +When turning markdown into HTML, each line ending in math (text) is turned +into a space. + +## CSS + +The HTML produced by KaTeX requires CSS to render correctly. +You should use `katex.css` somewhere on the page where the math is shown to +style it properly. +At the time of writing, the last version is: + + + +```html + +``` + +## Syntax + +Math forms with the following BNF: + +```bnf +; Restriction: the number of markers in the closing sequence must be equal +; to the number of markers in the opening sequence. +math_text ::= sequence_text 1*byte sequence_text +math_flow ::= fence_open *( eol *line ) [ eol fence_close ] + +; Restriction: not preceded or followed by the marker. +sequence_text ::= 1*'$' + +fence_open ::= sequence_flow meta +; Restriction: the number of markers in the closing fence sequence must be +; equal to or greater than the number of markers in the opening fence +; sequence. +fence_close ::= sequence_flow *space_or_tab +sequence_flow ::= 2*'$' +; Restriction: the marker cannot occur in `meta` +meta ::= 1*line + +; Character groups for informational purposes. +byte ::= 0x00..=0xFFFF +eol ::= '\n' | '\r' | '\r\n' +line ::= byte - eol +``` + +The above grammar shows that it is not possible to create empty math (text). +It is possible to include the sequence marker (dollar) in math (text), by +wrapping it in bigger or smaller sequences: + +```markdown +Include more: $a$$b$ or include less: $$a$b$$. +``` + +It is also possible to include just one marker: + +```markdown +Include just one: $$ $ $$. +``` + +Sequences are “gready”, in that they cannot be preceded or followed by more +markers. +To illustrate: + +```markdown +Not math: $$x$. + +Not math: $x$$. + +Escapes work, this is math: \$$x$. + +Escapes work, this is math: $x$\$. +``` + +Yields: + +```html +

              Not math: $$x$.

              +

              Not math: $x$$.

              +

              Escapes work, this is math: $.

              +

              Escapes work, this is math: $.

              +``` + +That is because, when turning markdown into HTML, the first and last space, +if both exist and there is also a non-space in the math, are removed. +Line endings, at that stage, are considered as spaces. + +As the math (flow) construct occurs in flow, like all flow constructs, it must +be followed by an eol (line ending) or eof (end of file). + +The above grammar does not show how indentation of each line is handled. +To parse math (flow), let `x` be the number of `space_or_tab` characters +before the opening fence sequence, after interpreting tabs based on how many +virtual spaces they represent. +Each line of text is then allowed (not required) to be indented with up +to `x` spaces or tabs, which are then ignored as an indent instead of being +considered as part of the content. +This indent does not affect the closing fence. +It can be indented up to a separate 3 real or virtual spaces. +A bigger indent makes it part of the content instead of a fence. + +The `meta` part is interpreted as the [string][micromark-content-types] content +type. +That means that character escapes and character references are allowed. + +The optional `meta` part is ignored: it is not used when parsing or +rendering. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types [`HtmlOptions`][api-html-options] +and [`Options`][api-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-extension-math@^3`, compatible with Node.js 16. + +This package works with `micromark` version `3` and later. + +## Security + +This package is safe assuming that you trust KaTeX. +Any vulnerability in it could open you to a [cross-site scripting (XSS)][xss] +attack. + +## Related + +* [`remark-math`][remark-math] + — remark (and rehype) plugins to support math +* [`mdast-util-math`][mdast-util-math] + — mdast utility to support math + +## Contribute + +See [`contributing.md` in `micromark/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark-extension-math/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark-extension-math/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-math.svg + +[coverage]: https://codecov.io/github/micromark/micromark-extension-math + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-math.svg + +[downloads]: https://www.npmjs.com/package/micromark-extension-math + +[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-math + +[size]: https://bundlejs.com/?q=micromark-extension-math + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[micromark]: https://github.com/micromark/micromark + +[micromark-content-types]: https://github.com/micromark/micromark#content-types + +[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension + +[micromark-extension]: https://github.com/micromark/micromark#syntaxextension + +[mdast-util-math]: https://github.com/syntax-tree/mdast-util-math + +[remark-math]: https://github.com/remarkjs/remark-math + +[katex]: https://katex.org + +[katex-options]: https://katex.org/docs/options.html + +[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting + +[api-math]: #mathoptions + +[api-math-html]: #mathhtmloptions + +[api-options]: #options + +[api-html-options]: #htmloptions diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts b/node_modules/micromark-factory-destination/dev/index.d.ts new file mode 100644 index 0000000000..1d5e02a5d8 --- /dev/null +++ b/node_modules/micromark-factory-destination/dev/index.d.ts @@ -0,0 +1,42 @@ +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts.map b/node_modules/micromark-factory-destination/dev/index.d.ts.map new file mode 100644 index 0000000000..84746ee217 --- /dev/null +++ b/node_modules/micromark-factory-destination/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.js b/node_modules/micromark-factory-destination/dev/index.js new file mode 100644 index 0000000000..a4816fdc0d --- /dev/null +++ b/node_modules/micromark-factory-destination/dev/index.js @@ -0,0 +1,255 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import { + asciiControl, + markdownLineEndingOrSpace, + markdownLineEnding +} from 'micromark-util-character' +import {codes, constants, types} from 'micromark-util-symbol' + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + + return start + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === codes.lessThan) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if ( + code === codes.eof || + code === codes.space || + code === codes.rightParenthesis || + asciiControl(code) + ) { + return nok(code) + } + + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === codes.greaterThan) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + + effects.enter(stringType) + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === codes.greaterThan) { + effects.exit(types.chunkString) + effects.exit(stringType) + return enclosedBefore(code) + } + + if ( + code === codes.eof || + code === codes.lessThan || + markdownLineEnding(code) + ) { + return nok(code) + } + + effects.consume(code) + return code === codes.backslash ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if ( + code === codes.lessThan || + code === codes.greaterThan || + code === codes.backslash + ) { + effects.consume(code) + return enclosed + } + + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === codes.eof || + code === codes.rightParenthesis || + markdownLineEndingOrSpace(code)) + ) { + effects.exit(types.chunkString) + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + + if (balance < limit && code === codes.leftParenthesis) { + effects.consume(code) + balance++ + return raw + } + + if (code === codes.rightParenthesis) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if ( + code === codes.eof || + code === codes.space || + code === codes.leftParenthesis || + asciiControl(code) + ) { + return nok(code) + } + + effects.consume(code) + return code === codes.backslash ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if ( + code === codes.leftParenthesis || + code === codes.rightParenthesis || + code === codes.backslash + ) { + effects.consume(code) + return raw + } + + return raw(code) + } +} diff --git a/node_modules/micromark-factory-destination/index.d.ts b/node_modules/micromark-factory-destination/index.d.ts new file mode 100644 index 0000000000..1d5e02a5d8 --- /dev/null +++ b/node_modules/micromark-factory-destination/index.d.ts @@ -0,0 +1,42 @@ +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.d.ts.map b/node_modules/micromark-factory-destination/index.d.ts.map new file mode 100644 index 0000000000..84746ee217 --- /dev/null +++ b/node_modules/micromark-factory-destination/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.js b/node_modules/micromark-factory-destination/index.js new file mode 100644 index 0000000000..eeb60de6d7 --- /dev/null +++ b/node_modules/micromark-factory-destination/index.js @@ -0,0 +1,206 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character'; +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * + * b> + * + * + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`` or `b`). + * @param {TokenType} literalType + * Type when enclosed (``). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ +export function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) { + const limit = max || Number.POSITIVE_INFINITY; + let balance = 0; + return start; + + /** + * Start of destination. + * + * ```markdown + * > | + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type); + effects.enter(literalType); + effects.enter(literalMarkerType); + effects.consume(code); + effects.exit(literalMarkerType); + return enclosedBefore; + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code); + } + effects.enter(type); + effects.enter(rawType); + effects.enter(stringType); + effects.enter("chunkString", { + contentType: "string" + }); + return raw(code); + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType); + effects.consume(code); + effects.exit(literalMarkerType); + effects.exit(literalType); + effects.exit(type); + return ok; + } + effects.enter(stringType); + effects.enter("chunkString", { + contentType: "string" + }); + return enclosed(code); + } + + /** + * In enclosed destination. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit("chunkString"); + effects.exit(stringType); + return enclosedBefore(code); + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code); + } + effects.consume(code); + return code === 92 ? enclosedEscape : enclosed; + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code); + return enclosed; + } + return enclosed(code); + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) { + effects.exit("chunkString"); + effects.exit(stringType); + effects.exit(rawType); + effects.exit(type); + return ok(code); + } + if (balance < limit && code === 40) { + effects.consume(code); + balance++; + return raw; + } + if (code === 41) { + effects.consume(code); + balance--; + return raw; + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code); + } + effects.consume(code); + return code === 92 ? rawEscape : raw; + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code); + return raw; + } + return raw(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/license b/node_modules/micromark-factory-destination/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-destination/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-destination/package.json b/node_modules/micromark-factory-destination/package.json new file mode 100644 index 0000000000..0863cb696d --- /dev/null +++ b/node_modules/micromark-factory-destination/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-factory-destination", + "version": "2.0.1", + "description": "micromark factory to parse destinations (found in resources, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "destination" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-destination", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "max-params": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-destination/readme.md b/node_modules/micromark-factory-destination/readme.md new file mode 100644 index 0000000000..f4899d74da --- /dev/null +++ b/node_modules/micromark-factory-destination/readme.md @@ -0,0 +1,234 @@ +# micromark-factory-destination + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse destinations (found in resources, definitions). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryDestination(…)`](#factorydestination) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse destinations. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-destination +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factoryDestination} from 'https://esm.sh/micromark-factory-destination@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factoryDestination} from 'micromark-factory-destination' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function open(code) { + if (code === codes.rightParenthesis) { + return end(code) + } + + return factoryDestination( + effects, + destinationAfter, + nok, + types.resourceDestination, + types.resourceDestinationLiteral, + types.resourceDestinationLiteralMarker, + types.resourceDestinationRaw, + types.resourceDestinationString, + constants.linkResourceDestinationBalanceMax + )(code) + } + + // … +} +``` + +## API + +This module exports the identifier +[`factoryDestination`][api-factory-destination]. +There is no default export. + +### `factoryDestination(…)` + +Parse destinations. + +###### Examples + +```markdown + +b> + + +a +a\)b +a(b)c +a(b) +``` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `nok` (`State`) + — state switched to when unsuccessful +* `type` (`string`) + — type for whole (`` or `b`) +* `literalType` (`string`) + — type when enclosed (``) +* `literalMarkerType` (`string`) + — type for enclosing (`<` and `>`) +* `rawType` (`string`) + — type when not enclosed (`b`) +* `stringType` (`string`) + — type for the value (`a` or `b`) +* `max` (`number`, default: `Infinity`) + — depth of nested parens (inclusive) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-destination@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-destination.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-destination + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-destination + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-destination + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-destination]: #factorydestination diff --git a/node_modules/micromark-factory-label/dev/index.d.ts b/node_modules/micromark-factory-label/dev/index.d.ts new file mode 100644 index 0000000000..99f5bdad42 --- /dev/null +++ b/node_modules/micromark-factory-label/dev/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +import type { TokenizeContext } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.d.ts.map b/node_modules/micromark-factory-label/dev/index.d.ts.map new file mode 100644 index 0000000000..fe94eeea2d --- /dev/null +++ b/node_modules/micromark-factory-label/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.js b/node_modules/micromark-factory-label/dev/index.js new file mode 100644 index 0000000000..242f0ced9c --- /dev/null +++ b/node_modules/micromark-factory-label/dev/index.js @@ -0,0 +1,172 @@ +/** + * @import { + * Effects, + * State, + * TokenizeContext, + * TokenType + * } from 'micromark-util-types' + */ + +import {ok as assert} from 'devlop' +import {markdownLineEnding, markdownSpace} from 'micromark-util-character' +import {codes, constants, types} from 'micromark-util-symbol' + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + assert(code === codes.leftSquareBracket, 'expected `[`') + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > constants.linkReferenceSizeMax || + code === codes.eof || + code === codes.leftSquareBracket || + (code === codes.rightSquareBracket && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === codes.caret && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + + if (code === codes.rightSquareBracket) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter(types.lineEnding) + effects.consume(code) + effects.exit(types.lineEnding) + return atBreak + } + + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === codes.eof || + code === codes.leftSquareBracket || + code === codes.rightSquareBracket || + markdownLineEnding(code) || + size++ > constants.linkReferenceSizeMax + ) { + effects.exit(types.chunkString) + return atBreak(code) + } + + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === codes.backslash ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if ( + code === codes.leftSquareBracket || + code === codes.backslash || + code === codes.rightSquareBracket + ) { + effects.consume(code) + size++ + return labelInside + } + + return labelInside(code) + } +} diff --git a/node_modules/micromark-factory-label/index.d.ts b/node_modules/micromark-factory-label/index.d.ts new file mode 100644 index 0000000000..99f5bdad42 --- /dev/null +++ b/node_modules/micromark-factory-label/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +import type { TokenizeContext } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.d.ts.map b/node_modules/micromark-factory-label/index.d.ts.map new file mode 100644 index 0000000000..fe94eeea2d --- /dev/null +++ b/node_modules/micromark-factory-label/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.js b/node_modules/micromark-factory-label/index.js new file mode 100644 index 0000000000..269340bb85 --- /dev/null +++ b/node_modules/micromark-factory-label/index.js @@ -0,0 +1,148 @@ +/** + * @import { + * Effects, + * State, + * TokenizeContext, + * TokenType + * } from 'micromark-util-types' + */ + +import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ +export function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this; + let size = 0; + /** @type {boolean} */ + let seen; + return start; + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.enter(stringType); + return atBreak; + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (size > 999 || code === null || code === 91 || code === 93 && !seen || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) { + return nok(code); + } + if (code === 93) { + effects.exit(stringType); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.exit(type); + return ok; + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter("lineEnding"); + effects.consume(code); + effects.exit("lineEnding"); + return atBreak; + } + effects.enter("chunkString", { + contentType: "string" + }); + return labelInside(code); + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) { + effects.exit("chunkString"); + return atBreak(code); + } + effects.consume(code); + if (!seen) seen = !markdownSpace(code); + return code === 92 ? labelEscape : labelInside; + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code); + size++; + return labelInside; + } + return labelInside(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/license b/node_modules/micromark-factory-label/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-label/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-label/package.json b/node_modules/micromark-factory-label/package.json new file mode 100644 index 0000000000..db6dca2650 --- /dev/null +++ b/node_modules/micromark-factory-label/package.json @@ -0,0 +1,60 @@ +{ + "name": "micromark-factory-label", + "version": "2.0.1", + "description": "micromark factory to parse labels (found in media, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "label" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-label", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "logical-assignment-operators": "off", + "max-params": "off", + "unicorn/no-this-assignment": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-label/readme.md b/node_modules/micromark-factory-label/readme.md new file mode 100644 index 0000000000..f4b4eab835 --- /dev/null +++ b/node_modules/micromark-factory-label/readme.md @@ -0,0 +1,224 @@ +# micromark-factory-label + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse labels (found in media, definitions). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryLabel(…)`](#factorylabel) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse labels. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-label +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factoryLabel} from 'https://esm.sh/micromark-factory-label@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {ok as assert} from 'devlop' +import {factoryLabel} from 'micromark-factory-label' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function start(code) { + assert(code === codes.leftSquareBracket, 'expected `[`') + effects.enter(types.definition) + return factoryLabel.call( + self, + effects, + labelAfter, + nok, + types.definitionLabel, + types.definitionLabelMarker, + types.definitionLabelString + )(code) + } + + // … +} +``` + +## API + +This module exports the identifier [`factoryLabel`][api-factory-label]. +There is no default export. + +### `factoryLabel(…)` + +Parse labels. + +> 👉 **Note**: labels in markdown are capped at 999 characters in the string. + +###### Examples + +```markdown +[a] +[a +b] +[a\]b] +``` + +###### Parameters + +* `this` (`TokenizeContext`) + — tokenize context +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `nok` (`State`) + — state switched to when unsuccessful +* `type` (`string`) + — type of the whole label (`[a]`) +* `markerType` (`string`) + — type for the markers (`[` and `]`) +* `stringType` (`string`) + — type for the identifier (`a`) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-label@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-label.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-label + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-label + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-label + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-label]: #factorylabel diff --git a/node_modules/micromark-factory-space/dev/index.d.ts b/node_modules/micromark-factory-space/dev/index.d.ts new file mode 100644 index 0000000000..d9a30cab17 --- /dev/null +++ b/node_modules/micromark-factory-space/dev/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.d.ts.map b/node_modules/micromark-factory-space/dev/index.d.ts.map new file mode 100644 index 0000000000..42d1279235 --- /dev/null +++ b/node_modules/micromark-factory-space/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.js b/node_modules/micromark-factory-space/dev/index.js new file mode 100644 index 0000000000..5cead758c1 --- /dev/null +++ b/node_modules/micromark-factory-space/dev/index.js @@ -0,0 +1,67 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import {markdownSpace} from 'micromark-util-character' + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + + effects.exit(type) + return ok(code) + } +} diff --git a/node_modules/micromark-factory-space/index.d.ts b/node_modules/micromark-factory-space/index.d.ts new file mode 100644 index 0000000000..d9a30cab17 --- /dev/null +++ b/node_modules/micromark-factory-space/index.d.ts @@ -0,0 +1,37 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.d.ts.map b/node_modules/micromark-factory-space/index.d.ts.map new file mode 100644 index 0000000000..42d1279235 --- /dev/null +++ b/node_modules/micromark-factory-space/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.js b/node_modules/micromark-factory-space/index.js new file mode 100644 index 0000000000..646117df2d --- /dev/null +++ b/node_modules/micromark-factory-space/index.js @@ -0,0 +1,64 @@ +/** + * @import {Effects, State, TokenType} from 'micromark-util-types' + */ + +import { markdownSpace } from 'micromark-util-character'; + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns {State} + * Start state. + */ +export function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY; + let size = 0; + return start; + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type); + return prefix(code); + } + return ok(code); + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code); + return prefix; + } + effects.exit(type); + return ok(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/license b/node_modules/micromark-factory-space/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-space/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-space/package.json b/node_modules/micromark-factory-space/package.json new file mode 100644 index 0000000000..45828c493e --- /dev/null +++ b/node_modules/micromark-factory-space/package.json @@ -0,0 +1,55 @@ +{ + "name": "micromark-factory-space", + "version": "2.0.1", + "description": "micromark factory to parse markdown space (found in lots of places)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "space" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-space", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-space/readme.md b/node_modules/micromark-factory-space/readme.md new file mode 100644 index 0000000000..b9c01776d8 --- /dev/null +++ b/node_modules/micromark-factory-space/readme.md @@ -0,0 +1,225 @@ +# micromark-factory-space + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse [markdown space][markdown-space] (found in lots +of places). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factorySpace(…)`](#factoryspace) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse spaces and/or tabs. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-space +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factorySpace} from 'https://esm.sh/micromark-factory-space@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factorySpace} from 'micromark-factory-space' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function info(code) { + if (code === codes.eof || markdownLineEndingOrSpace(code)) { + effects.exit(types.chunkString) + effects.exit(types.codeFencedFenceInfo) + return factorySpace(effects, infoAfter, types.whitespace)(code) + } + + if (code === codes.graveAccent && code === marker) return nok(code) + effects.consume(code) + return info + } + + // … +} +``` + +## API + +This module exports the identifier [`factorySpace`][api-factory-space]. +There is no default export. + +### `factorySpace(…)` + +Parse spaces and tabs. + +There is no `nok` parameter: + +* spaces in markdown are often optional, in which case this factory can be + used and `ok` will be switched to whether spaces were found or not +* one line ending or space can be detected with `markdownSpace(code)` right + before using `factorySpace` + +###### Examples + +Where `␉` represents a tab (plus how much it expands) and `␠` represents a +single space. + +```markdown +␉ +␠␠␠␠ +␉␠ +``` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `type` (`string`) + — type (`' \t'`) +* `max` (`number`, default: `Infinity`) + — max (exclusive) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-space@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-space.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-space + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-space + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-space + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[markdown-space]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownspacecode + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-space]: #factoryspace diff --git a/node_modules/micromark-factory-title/dev/index.d.ts b/node_modules/micromark-factory-title/dev/index.d.ts new file mode 100644 index 0000000000..6d4b4be203 --- /dev/null +++ b/node_modules/micromark-factory-title/dev/index.d.ts @@ -0,0 +1,36 @@ +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.d.ts.map b/node_modules/micromark-factory-title/dev/index.d.ts.map new file mode 100644 index 0000000000..0108e7c976 --- /dev/null +++ b/node_modules/micromark-factory-title/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.js b/node_modules/micromark-factory-title/dev/index.js new file mode 100644 index 0000000000..4774214cbb --- /dev/null +++ b/node_modules/micromark-factory-title/dev/index.js @@ -0,0 +1,169 @@ +/** + * @import { + * Code, + * Effects, + * State, + * TokenType + * } from 'micromark-util-types' + */ + +import {factorySpace} from 'micromark-factory-space' +import {markdownLineEnding} from 'micromark-util-character' +import {codes, constants, types} from 'micromark-util-symbol' + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker + + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if ( + code === codes.quotationMark || + code === codes.apostrophe || + code === codes.leftParenthesis + ) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === codes.leftParenthesis ? codes.rightParenthesis : code + return begin + } + + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + + if (code === codes.eof) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter(types.lineEnding) + effects.consume(code) + effects.exit(types.lineEnding) + return factorySpace(effects, atBreak, types.linePrefix) + } + + effects.enter(types.chunkString, {contentType: constants.contentTypeString}) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === codes.eof || markdownLineEnding(code)) { + effects.exit(types.chunkString) + return atBreak(code) + } + + effects.consume(code) + return code === codes.backslash ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === codes.backslash) { + effects.consume(code) + return inside + } + + return inside(code) + } +} diff --git a/node_modules/micromark-factory-title/index.d.ts b/node_modules/micromark-factory-title/index.d.ts new file mode 100644 index 0000000000..6d4b4be203 --- /dev/null +++ b/node_modules/micromark-factory-title/index.d.ts @@ -0,0 +1,36 @@ +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +import type { TokenType } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.d.ts.map b/node_modules/micromark-factory-title/index.d.ts.map new file mode 100644 index 0000000000..0108e7c976 --- /dev/null +++ b/node_modules/micromark-factory-title/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.js b/node_modules/micromark-factory-title/index.js new file mode 100644 index 0000000000..02c8026c1e --- /dev/null +++ b/node_modules/micromark-factory-title/index.js @@ -0,0 +1,158 @@ +/** + * @import { + * Code, + * Effects, + * State, + * TokenType + * } from 'micromark-util-types' + */ + +import { factorySpace } from 'micromark-factory-space'; +import { markdownLineEnding } from 'micromark-util-character'; +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ +export function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable} */ + let marker; + return start; + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type); + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + marker = code === 40 ? 41 : code; + return begin; + } + return nok(code); + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType); + effects.consume(code); + effects.exit(markerType); + effects.exit(type); + return ok; + } + effects.enter(stringType); + return atBreak(code); + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType); + return begin(marker); + } + if (code === null) { + return nok(code); + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter("lineEnding"); + effects.consume(code); + effects.exit("lineEnding"); + return factorySpace(effects, atBreak, "linePrefix"); + } + effects.enter("chunkString", { + contentType: "string" + }); + return inside(code); + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit("chunkString"); + return atBreak(code); + } + effects.consume(code); + return code === 92 ? escape : inside; + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code); + return inside; + } + return inside(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/license b/node_modules/micromark-factory-title/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-title/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-title/package.json b/node_modules/micromark-factory-title/package.json new file mode 100644 index 0000000000..f643a5dea3 --- /dev/null +++ b/node_modules/micromark-factory-title/package.json @@ -0,0 +1,58 @@ +{ + "name": "micromark-factory-title", + "version": "2.0.1", + "description": "micromark factory to parse markdown titles (found in resources, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "title" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-title", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "max-params": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-title/readme.md b/node_modules/micromark-factory-title/readme.md new file mode 100644 index 0000000000..ff51cbdebe --- /dev/null +++ b/node_modules/micromark-factory-title/readme.md @@ -0,0 +1,229 @@ +# micromark-factory-title + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse markdown titles (found in resources, +definitions). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryTitle(…)`](#factorytitle) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse titles. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-title +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factorySpace} from 'https://esm.sh/micromark-factory-title@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factoryTitle} from 'micromark-factory-title' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + return start + + // … + + /** @type {State} */ + function before(code) { + if ( + code === codes.quotationMark || + code === codes.apostrophe || + code === codes.leftParenthesis + ) { + return factoryTitle( + effects, + factorySpace(effects, after, types.whitespace), + nok, + types.definitionTitle, + types.definitionTitleMarker, + types.definitionTitleString + )(code) + } + + return nok(code) + } + + // … +} +``` + +## API + +This module exports the identifier [`factoryTitle`][api-factory-title]. +There is no default export. + +### `factoryTitle(…)` + +Parse titles. + +###### Examples + +```markdown +"a" +'b' +(c) +"a +b" +'a + b' +(a\)b) +``` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful +* `nok` (`State`) + — state switched to when unsuccessful +* `type` (`string`) + — type of the whole title (`"a"`, `'b'`, `(c)`) +* `markerType` (`string`) + — type for the markers (`"`, `'`, `(`, and `)`) +* `stringType` (`string`) + — type for the value (`a`) + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-title@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-title.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-title + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-title + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-title + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-title]: #factorytitle diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts b/node_modules/micromark-factory-whitespace/dev/index.d.ts new file mode 100644 index 0000000000..52ca4b85bc --- /dev/null +++ b/node_modules/micromark-factory-whitespace/dev/index.d.ts @@ -0,0 +1,22 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects: Effects, ok: State): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts.map b/node_modules/micromark-factory-whitespace/dev/index.d.ts.map new file mode 100644 index 0000000000..5169dc46ad --- /dev/null +++ b/node_modules/micromark-factory-whitespace/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.js b/node_modules/micromark-factory-whitespace/dev/index.js new file mode 100644 index 0000000000..3aa9e37b2d --- /dev/null +++ b/node_modules/micromark-factory-whitespace/dev/index.js @@ -0,0 +1,53 @@ +/** + * @import {Effects, State} from 'micromark-util-types' + */ + +import {factorySpace} from 'micromark-factory-space' +import {markdownLineEnding, markdownSpace} from 'micromark-util-character' +import {types} from 'micromark-util-symbol' + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter(types.lineEnding) + effects.consume(code) + effects.exit(types.lineEnding) + seen = true + return start + } + + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? types.linePrefix : types.lineSuffix + )(code) + } + + return ok(code) + } +} diff --git a/node_modules/micromark-factory-whitespace/index.d.ts b/node_modules/micromark-factory-whitespace/index.d.ts new file mode 100644 index 0000000000..52ca4b85bc --- /dev/null +++ b/node_modules/micromark-factory-whitespace/index.d.ts @@ -0,0 +1,22 @@ +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects: Effects, ok: State): State; +import type { Effects } from 'micromark-util-types'; +import type { State } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.d.ts.map b/node_modules/micromark-factory-whitespace/index.d.ts.map new file mode 100644 index 0000000000..5169dc46ad --- /dev/null +++ b/node_modules/micromark-factory-whitespace/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.js b/node_modules/micromark-factory-whitespace/index.js new file mode 100644 index 0000000000..02243add41 --- /dev/null +++ b/node_modules/micromark-factory-whitespace/index.js @@ -0,0 +1,44 @@ +/** + * @import {Effects, State} from 'micromark-util-types' + */ + +import { factorySpace } from 'micromark-factory-space'; +import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns {State} + * Start state. + */ +export function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen; + return start; + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter("lineEnding"); + effects.consume(code); + effects.exit("lineEnding"); + seen = true; + return start; + } + if (markdownSpace(code)) { + return factorySpace(effects, start, seen ? "linePrefix" : "lineSuffix")(code); + } + return ok(code); + } +} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/license b/node_modules/micromark-factory-whitespace/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-factory-whitespace/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-whitespace/package.json b/node_modules/micromark-factory-whitespace/package.json new file mode 100644 index 0000000000..ce733bd06e --- /dev/null +++ b/node_modules/micromark-factory-whitespace/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-factory-whitespace", + "version": "2.0.1", + "description": "micromark factory to parse markdown whitespace (found in lots of places)", + "license": "MIT", + "keywords": [ + "micromark", + "factory", + "whitespace" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-whitespace", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-factory-whitespace/readme.md b/node_modules/micromark-factory-whitespace/readme.md new file mode 100644 index 0000000000..a846406a52 --- /dev/null +++ b/node_modules/micromark-factory-whitespace/readme.md @@ -0,0 +1,205 @@ +# micromark-factory-whitespace + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] factory to parse [markdown line endings or spaces][ws] (found in +lots of places). + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`factoryWhitespace(…)`](#factorywhitespace) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes states to parse whitespace. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-factory-whitespace +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {factoryWhitespace} from 'https://esm.sh/micromark-factory-whitespace@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {factoryWhitespace} from 'micromark-factory-whitespace' +import {codes, types} from 'micromark-util-symbol' + +// A micromark tokenizer that uses the factory: +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeTitle(effects, ok, nok) { + return start + + /** @type {State} */ + function start(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, before)(code) + : nok(code) + } + + // … +} +``` + +## API + +This module exports the identifier +[`factoryWhitespace`][api-factory-whitespace]. +There is no default export. + +### `factoryWhitespace(…)` + +Parse spaces and tabs. + +There is no `nok` parameter: + +* line endings or spaces in markdown are often optional, in which case this + factory can be used and `ok` will be switched to whether spaces were found + or not +* one line ending or space can be detected with + [`markdownLineEndingOrSpace(code)`][ws] right before using + `factoryWhitespace` + +###### Parameters + +* `effects` (`Effects`) + — context +* `ok` (`State`) + — state switched to when successful + +###### Returns + +Start state (`State`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-factory-whitespace@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-whitespace.svg + +[downloads]: https://www.npmjs.com/package/micromark-factory-whitespace + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-whitespace + +[bundle-size]: https://bundlejs.com/?q=micromark-factory-whitespace + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[ws]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownlineendingorspacecode + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-factory-whitespace]: #factorywhitespace diff --git a/node_modules/micromark-util-character/dev/index.d.ts b/node_modules/micromark-util-character/dev/index.d.ts new file mode 100644 index 0000000000..fe5289573d --- /dev/null +++ b/node_modules/micromark-util-character/dev/index.d.ts @@ -0,0 +1,195 @@ +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code: Code): boolean; +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code: Code): boolean; +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit: (code: Code) => boolean; +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace: (code: Code) => boolean; +import type { Code } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.d.ts.map b/node_modules/micromark-util-character/dev/index.d.ts.map new file mode 100644 index 0000000000..8ded3c1570 --- /dev/null +++ b/node_modules/micromark-util-character/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.js b/node_modules/micromark-util-character/dev/index.js new file mode 100644 index 0000000000..123745e860 --- /dev/null +++ b/node_modules/micromark-util-character/dev/index.js @@ -0,0 +1,252 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +import {codes} from 'micromark-util-symbol' + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < codes.space || code === codes.del) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code) { + return code !== null && code < codes.horizontalTab +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code) { + return code !== null && (code < codes.nul || code === codes.space) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code) { + return ( + code === codes.horizontalTab || + code === codes.virtualSpace || + code === codes.space + ) +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * Expression. + * @returns {(code: Code) => boolean} + * Check. + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && code > -1 && regex.test(String.fromCharCode(code)) + } +} diff --git a/node_modules/micromark-util-character/index.d.ts b/node_modules/micromark-util-character/index.d.ts new file mode 100644 index 0000000000..fe5289573d --- /dev/null +++ b/node_modules/micromark-util-character/index.d.ts @@ -0,0 +1,195 @@ +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code: Code): boolean; +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code: Code): boolean; +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code: Code): boolean; +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit: (code: Code) => boolean; +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit: (code: Code) => boolean; +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation: (code: Code) => boolean; +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace: (code: Code) => boolean; +import type { Code } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.d.ts.map b/node_modules/micromark-util-character/index.d.ts.map new file mode 100644 index 0000000000..8ded3c1570 --- /dev/null +++ b/node_modules/micromark-util-character/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.js b/node_modules/micromark-util-character/index.js new file mode 100644 index 0000000000..13698f04f2 --- /dev/null +++ b/node_modules/micromark-util-character/index.js @@ -0,0 +1,246 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlpha = regexCheck(/[A-Za-z]/); + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/); + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ); +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiDigit = regexCheck(/\d/); + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/); + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/); + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEnding(code) { + return code !== null && code < -2; +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32); +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +export function markdownSpace(code) { + return code === -2 || code === -1 || code === 32; +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u); + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +export const unicodeWhitespace = regexCheck(/\s/); + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * Expression. + * @returns {(code: Code) => boolean} + * Check. + */ +function regexCheck(regex) { + return check; + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && code > -1 && regex.test(String.fromCharCode(code)); + } +} \ No newline at end of file diff --git a/node_modules/micromark-util-character/license b/node_modules/micromark-util-character/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-character/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-character/package.json b/node_modules/micromark-util-character/package.json new file mode 100644 index 0000000000..8af57e3999 --- /dev/null +++ b/node_modules/micromark-util-character/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-util-character", + "version": "2.1.1", + "description": "micromark utility to handle character codes", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "character" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-character", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-character/readme.md b/node_modules/micromark-util-character/readme.md new file mode 100644 index 0000000000..2356e4720f --- /dev/null +++ b/node_modules/micromark-util-character/readme.md @@ -0,0 +1,446 @@ +# micromark-util-character + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to handle [character codes][code]. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`asciiAlpha(code)`](#asciialphacode) + * [`asciiAlphanumeric(code)`](#asciialphanumericcode) + * [`asciiAtext(code)`](#asciiatextcode) + * [`asciiControl(code)`](#asciicontrolcode) + * [`asciiDigit(code)`](#asciidigitcode) + * [`asciiHexDigit(code)`](#asciihexdigitcode) + * [`asciiPunctuation(code)`](#asciipunctuationcode) + * [`markdownLineEnding(code)`](#markdownlineendingcode) + * [`markdownLineEndingOrSpace(code)`](#markdownlineendingorspacecode) + * [`markdownSpace(code)`](#markdownspacecode) + * [`unicodePunctuation(code)`](#unicodepunctuationcode) + * [`unicodeWhitespace(code)`](#unicodewhitespacecode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes algorithms to check whether characters match groups. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-character +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import * as character from 'https://esm.sh/micromark-util-character@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {asciiAlpha} from 'micromark-util-character' + +console.log(asciiAlpha(64)) // false +console.log(asciiAlpha(65)) // true +``` + +## API + +This module exports the identifiers +[`asciiAlpha`][api-ascii-alpha], +[`asciiAlphanumeric`][api-ascii-alphanumeric], +[`asciiAtext`][api-ascii-atext], +[`asciiControl`][api-ascii-control], +[`asciiDigit`][api-ascii-digit], +[`asciiHexDigit`][api-ascii-hex-digit], +[`asciiPunctuation`][api-ascii-punctuation], +[`markdownLineEnding`][api-markdown-line-ending], +[`markdownLineEndingOrSpace`][api-markdown-line-ending-or-space], +[`markdownSpace`][api-markdown-space], +[`unicodePunctuation`][api-unicode-punctuation], +[`unicodeWhitespace`][api-unicode-whitespace]. +There is no default export. + +### `asciiAlpha(code)` + +Check whether the [character code][code] represents an ASCII alpha (`a` through +`z`, case insensitive). + +An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + +An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) +to U+005A (`Z`). + +An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) +to U+007A (`z`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiAlphanumeric(code)` + +Check whether the [character code][code] represents an ASCII alphanumeric (`a` +through `z`, case insensitive, or `0` through `9`). + +An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha +(see `asciiAlpha`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiAtext(code)` + +Check whether the [character code][code] represents an ASCII atext. + +atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in +the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), +U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F +SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E +CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE +(`{`) to U+007E TILDE (`~`) (**\[RFC5322]**). + +See **\[RFC5322]**:\ +[Internet Message Format](https://tools.ietf.org/html/rfc5322).\ +P. Resnick.\ +IETF. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiControl(code)` + +Check whether a [character code][code] is an ASCII control character. + +An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) +to U+001F (US), or U+007F (DEL). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiDigit(code)` + +Check whether the [character code][code] represents an ASCII digit (`0` through +`9`). + +An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to +U+0039 (`9`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiHexDigit(code)` + +Check whether the [character code][code] represents an ASCII hex digit (`a` +through `f`, case insensitive, or `0` through `9`). + +An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex +digit, or an ASCII lower hex digit. + +An **ASCII upper hex digit** is a character in the inclusive range U+0041 +(`A`) to U+0046 (`F`). + +An **ASCII lower hex digit** is a character in the inclusive range U+0061 +(`a`) to U+0066 (`f`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `asciiPunctuation(code)` + +Check whether the [character code][code] represents ASCII punctuation. + +An **ASCII punctuation** is a character in the inclusive ranges U+0021 +EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT +SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT +(`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `markdownLineEnding(code)` + +Check whether a [character code][code] is a markdown line ending. + +A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN +LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + +In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE +RETURN (CR) are replaced by these virtual characters depending on whether +they occurred together. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `markdownLineEndingOrSpace(code)` + +Check whether a [character code][code] is a markdown line ending (see +`markdownLineEnding`) or markdown space (see `markdownSpace`). + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `markdownSpace(code)` + +Check whether a [character code][code] is a markdown space. + +A **markdown space** is the concrete character U+0020 SPACE (SP) and the +virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + +In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is +replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL +SPACE (VS) characters, depending on the column at which the tab occurred. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `unicodePunctuation(code)` + +Check whether the [character code][code] represents Unicode punctuation. + +A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, +Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` +(Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` +(Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII +punctuation (see `asciiPunctuation`) (**\[UNICODE]**). + +See **\[UNICODE]**:\ +[The Unicode Standard](https://www.unicode.org/versions/).\ +Unicode Consortium. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +### `unicodeWhitespace(code)` + +Check whether the [character code][code] represents Unicode whitespace. + +Note that this does handle micromark specific markdown whitespace characters. +See `markdownLineEndingOrSpace` to check that. + +A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, +Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), +U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + +See **\[UNICODE]**:\ +[The Unicode Standard](https://www.unicode.org/versions/).\ +Unicode Consortium. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Whether it matches (`boolean`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-character@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-character.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-character + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-character + +[bundle-size]: https://bundlejs.com/?q=micromark-util-character + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[code]: https://github.com/micromark/micromark#preprocess + +[api-ascii-alpha]: #asciialphacode + +[api-ascii-alphanumeric]: #asciialphanumericcode + +[api-ascii-atext]: #asciiatextcode + +[api-ascii-control]: #asciicontrolcode + +[api-ascii-digit]: #asciidigitcode + +[api-ascii-hex-digit]: #asciihexdigitcode + +[api-ascii-punctuation]: #asciipunctuationcode + +[api-markdown-line-ending]: #markdownlineendingcode + +[api-markdown-line-ending-or-space]: #markdownlineendingorspacecode + +[api-markdown-space]: #markdownspacecode + +[api-unicode-punctuation]: #unicodepunctuationcode + +[api-unicode-whitespace]: #unicodewhitespacecode diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts b/node_modules/micromark-util-chunked/dev/index.d.ts new file mode 100644 index 0000000000..ed04ba20d0 --- /dev/null +++ b/node_modules/micromark-util-chunked/dev/index.d.ts @@ -0,0 +1,41 @@ +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list: Array, start: number, remove: number, items: Array): undefined; +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list: Array, items: Array): Array; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts.map b/node_modules/micromark-util-chunked/dev/index.d.ts.map new file mode 100644 index 0000000000..432125397d --- /dev/null +++ b/node_modules/micromark-util-chunked/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.js b/node_modules/micromark-util-chunked/dev/index.js new file mode 100644 index 0000000000..7b6a18f871 --- /dev/null +++ b/node_modules/micromark-util-chunked/dev/index.js @@ -0,0 +1,89 @@ +import {constants} from 'micromark-util-symbol' + +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < constants.v8MaxSafeChunkSize) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice( + chunkStart, + chunkStart + constants.v8MaxSafeChunkSize + ) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + + chunkStart += constants.v8MaxSafeChunkSize + start += constants.v8MaxSafeChunkSize + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + + return items +} diff --git a/node_modules/micromark-util-chunked/index.d.ts b/node_modules/micromark-util-chunked/index.d.ts new file mode 100644 index 0000000000..ed04ba20d0 --- /dev/null +++ b/node_modules/micromark-util-chunked/index.d.ts @@ -0,0 +1,41 @@ +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list: Array, start: number, remove: number, items: Array): undefined; +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list: Array, items: Array): Array; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.d.ts.map b/node_modules/micromark-util-chunked/index.d.ts.map new file mode 100644 index 0000000000..432125397d --- /dev/null +++ b/node_modules/micromark-util-chunked/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.js b/node_modules/micromark-util-chunked/index.js new file mode 100644 index 0000000000..3a4b262400 --- /dev/null +++ b/node_modules/micromark-util-chunked/index.js @@ -0,0 +1,81 @@ +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array} items + * Items to inject into `list`. + * @returns {undefined} + * Nothing. + */ +export function splice(list, start, remove, items) { + const end = list.length; + let chunkStart = 0; + /** @type {Array} */ + let parameters; + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start; + } else { + start = start > end ? end : start; + } + remove = remove > 0 ? remove : 0; + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items); + parameters.unshift(start, remove); + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters); + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove); + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000); + parameters.unshift(start, 0); + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters); + chunkStart += 10000; + start += 10000; + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array} list + * List to operate on. + * @param {Array} items + * Items to add to `list`. + * @returns {Array} + * Either `list` or `items`. + */ +export function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items); + return list; + } + return items; +} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/license b/node_modules/micromark-util-chunked/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-chunked/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-chunked/package.json b/node_modules/micromark-util-chunked/package.json new file mode 100644 index 0000000000..8a5c91d395 --- /dev/null +++ b/node_modules/micromark-util-chunked/package.json @@ -0,0 +1,57 @@ +{ + "name": "micromark-util-chunked", + "version": "2.0.1", + "description": "micromark utility to splice and push with giant arrays", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "chunk", + "splice", + "push" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-chunked", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-chunked/readme.md b/node_modules/micromark-util-chunked/readme.md new file mode 100644 index 0000000000..6628fad732 --- /dev/null +++ b/node_modules/micromark-util-chunked/readme.md @@ -0,0 +1,219 @@ +# micromark-util-chunked + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to splice and push with giant arrays. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`push(list, items)`](#pushlist-items) + * [`splice(list, start, remove, items)`](#splicelist-start-remove-items) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to splice for giant arrays, which V8 bugs +out on. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-chunked +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {push, splice} from 'https://esm.sh/micromark-util-chunked@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {push, splice} from 'micromark-util-chunked' + +// … + +nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] +]) + +// … + +splice(events, open - 1, index - open + 3, nextEvents) + +// … +``` + +## API + +This module exports the identifiers [`push`][api-push] +and [`splice`][api-splice]. +There is no default export. + +### `push(list, items)` + +Append `items` (an array) at the end of `list` (another array). +When `list` was empty, returns `items` instead. + +This prevents a potentially expensive operation when `list` is empty, +and adds items in batches to prevent V8 from hanging. + +###### Parameters + +* `list` (`Array`) + — list to operate on +* `items` (`Array`) + — items to add to `list` + +###### Returns + +Either `list` or `items` (`Array`). + +### `splice(list, start, remove, items)` + +Like `Array#splice`, but smarter for giant arrays. + +`Array#splice` takes all items to be inserted as individual argument which +causes a stack overflow in V8 when trying to insert 100k items for instance. + +Otherwise, this does not return the removed items, and takes `items` as an +array instead of rest parameters. + +###### Parameters + +* `list` (`Array`) + — list to operate on +* `start` (`number`) + — index to remove/insert at (can be negative) +* `remove` (`number`) + — number of items to remove +* `items` (`Array`) + — items to inject into `list` + +###### Returns + +Nothing (`undefined`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-chunked@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-chunked.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-chunked + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-chunked + +[bundle-size]: https://bundlejs.com/?q=micromark-util-chunked + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-push]: #pushlist-items + +[api-splice]: #splicelist-start-remove-items diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts b/node_modules/micromark-util-classify-character/dev/index.d.ts new file mode 100644 index 0000000000..db98cd1fe9 --- /dev/null +++ b/node_modules/micromark-util-classify-character/dev/index.d.ts @@ -0,0 +1,18 @@ +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; +import type { Code } from 'micromark-util-types'; +import { constants } from 'micromark-util-symbol'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts.map b/node_modules/micromark-util-classify-character/dev/index.d.ts.map new file mode 100644 index 0000000000..9b63a5bedd --- /dev/null +++ b/node_modules/micromark-util-classify-character/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.js b/node_modules/micromark-util-classify-character/dev/index.js new file mode 100644 index 0000000000..0d82474555 --- /dev/null +++ b/node_modules/micromark-util-classify-character/dev/index.js @@ -0,0 +1,38 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +import { + markdownLineEndingOrSpace, + unicodePunctuation, + unicodeWhitespace +} from 'micromark-util-character' +import {codes, constants} from 'micromark-util-symbol' + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code) { + if ( + code === codes.eof || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return constants.characterGroupWhitespace + } + + if (unicodePunctuation(code)) { + return constants.characterGroupPunctuation + } +} diff --git a/node_modules/micromark-util-classify-character/index.d.ts b/node_modules/micromark-util-classify-character/index.d.ts new file mode 100644 index 0000000000..db98cd1fe9 --- /dev/null +++ b/node_modules/micromark-util-classify-character/index.d.ts @@ -0,0 +1,18 @@ +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; +import type { Code } from 'micromark-util-types'; +import { constants } from 'micromark-util-symbol'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.d.ts.map b/node_modules/micromark-util-classify-character/index.d.ts.map new file mode 100644 index 0000000000..9b63a5bedd --- /dev/null +++ b/node_modules/micromark-util-classify-character/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.js b/node_modules/micromark-util-classify-character/index.js new file mode 100644 index 0000000000..a9aebc6cb8 --- /dev/null +++ b/node_modules/micromark-util-classify-character/index.js @@ -0,0 +1,27 @@ +/** + * @import {Code} from 'micromark-util-types' + */ + +import { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character'; +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +export function classifyCharacter(code) { + if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) { + return 1; + } + if (unicodePunctuation(code)) { + return 2; + } +} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/license b/node_modules/micromark-util-classify-character/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-classify-character/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-classify-character/package.json b/node_modules/micromark-util-classify-character/package.json new file mode 100644 index 0000000000..f424ff97e6 --- /dev/null +++ b/node_modules/micromark-util-classify-character/package.json @@ -0,0 +1,59 @@ +{ + "name": "micromark-util-classify-character", + "version": "2.0.1", + "description": "micromark utility to classify whether a character is whitespace or punctuation", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "attention", + "classify", + "character" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-classify-character", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-classify-character/readme.md b/node_modules/micromark-util-classify-character/readme.md new file mode 100644 index 0000000000..f0b3ee78dc --- /dev/null +++ b/node_modules/micromark-util-classify-character/readme.md @@ -0,0 +1,205 @@ +# micromark-util-classify-character + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to classify whether a character is whitespace or +punctuation. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`classifyCharacter(code)`](#classifycharactercode) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to classify characters into 3 categories. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-classify-character +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {classifyCharacter} from 'https://esm.sh/micromark-util-classify-character@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +/** + * @this {TokenizeContext} + * Context. + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + return start + + // … + + /** @type {State} */ + function sequence(code) { + if (code === marker) { + // … + } + + const token = effects.exit('attentionSequence') + const after = classifyCharacter(code) + const open = + !after || (after === constants.characterGroupPunctuation && before) + const close = + !before || (before === constants.characterGroupPunctuation && after) + // … + } + + // … +} +``` + +## API + +This module exports the identifier +[`classifyCharacter`][api-classify-character]. +There is no default export. + +### `classifyCharacter(code)` + +Classify whether a code represents whitespace, punctuation, or something +else. + +Used for attention (emphasis, strong), whose sequences can open or close +based on the class of surrounding characters. + +> 👉 **Note**: eof (`null`) is seen as whitespace. + +###### Parameters + +* `code` (`Code`) + — code + +###### Returns + +Group (`constants.characterGroupWhitespace`, +`constants.characterGroupPunctuation`, or `undefined`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-classify-character@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-classify-character.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-classify-character + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-classify-character + +[bundle-size]: https://bundlejs.com/?q=micromark-util-classify-character + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-classify-character]: #classifycharactercode diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts b/node_modules/micromark-util-combine-extensions/index.d.ts new file mode 100644 index 0000000000..dbd674cb8b --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/index.d.ts @@ -0,0 +1,22 @@ +/** + * Combine multiple syntax extensions into one. + * + * @param {ReadonlyArray} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +export function combineExtensions(extensions: ReadonlyArray): NormalizedExtension; +/** + * Combine multiple HTML extensions into one. + * + * @param {ReadonlyArray} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * Single combined HTML extension. + */ +export function combineHtmlExtensions(htmlExtensions: ReadonlyArray): HtmlExtension; +import type { Extension } from 'micromark-util-types'; +import type { NormalizedExtension } from 'micromark-util-types'; +import type { HtmlExtension } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts.map b/node_modules/micromark-util-combine-extensions/index.d.ts.map new file mode 100644 index 0000000000..e0ea7bf1ee --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,8CALW,aAAa,CAAC,SAAS,CAAC,GAEtB,mBAAmB,CAa/B;AA+DD;;;;;;;GAOG;AACH,sDALW,aAAa,CAAC,aAAa,CAAC,GAE1B,aAAa,CAazB;+BA1GS,sBAAsB;yCAAtB,sBAAsB;mCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.js b/node_modules/micromark-util-combine-extensions/index.js new file mode 100644 index 0000000000..bc28f6d9c3 --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/index.js @@ -0,0 +1,143 @@ +/** + * @import { + * Extension, + * Handles, + * HtmlExtension, + * NormalizedExtension + * } from 'micromark-util-types' + */ + +import {splice} from 'micromark-util-chunked' + +const hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {ReadonlyArray} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +export function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {undefined} + * Nothing. + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record} */ + const left = maybe || (all[hook] = {}) + /** @type {Record | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array} existing + * List of constructs to merge into. + * @param {Array} list + * List of constructs to merge. + * @returns {undefined} + * Nothing. + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {ReadonlyArray} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * Single combined HTML extension. + */ +export function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {undefined} + * Nothing. + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} diff --git a/node_modules/micromark-util-combine-extensions/license b/node_modules/micromark-util-combine-extensions/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-combine-extensions/package.json b/node_modules/micromark-util-combine-extensions/package.json new file mode 100644 index 0000000000..f46ff4099f --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/package.json @@ -0,0 +1,52 @@ +{ + "name": "micromark-util-combine-extensions", + "version": "2.0.1", + "description": "micromark utility to combine syntax or html extensions", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "extension", + "combine", + "merge" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-combine-extensions", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "guard-for-in": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-combine-extensions/readme.md b/node_modules/micromark-util-combine-extensions/readme.md new file mode 100644 index 0000000000..b9b6fc13e9 --- /dev/null +++ b/node_modules/micromark-util-combine-extensions/readme.md @@ -0,0 +1,201 @@ +# micromark-util-combine-extensions + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to combine [syntax][] or [html][] extensions. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`combineExtensions(extensions)`](#combineextensionsextensions) + * [`combineHtmlExtensions(htmlExtensions)`](#combinehtmlextensionshtmlextensions) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package can merge multiple extensions into one. + +## When should I use this? + +This package might be useful when you are making “presets”, such as +[`micromark-extension-gfm`][micromark-extension-gfm]. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-combine-extensions +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {combineExtensions} from 'https://esm.sh/micromark-util-combine-extensions@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {gfmAutolinkLiteral} from 'micromark-extension-gfm-autolink-literal' +import {gfmStrikethrough} from 'micromark-extension-gfm-strikethrough' +import {gfmTable} from 'micromark-extension-gfm-table' +import {gfmTaskListItem} from 'micromark-extension-gfm-task-list-item' +import {combineExtensions} from 'micromark-util-combine-extensions' + +const gfm = combineExtensions([gfmAutolinkLiteral, gfmStrikethrough(), gfmTable, gfmTaskListItem]) +``` + +## API + +This module exports the identifiers +[`combineExtensions`][api-combine-extensions] and +[`combineHtmlExtensions`][api-combine-html-extensions]. +There is no default export. + +### `combineExtensions(extensions)` + +Combine multiple syntax extensions into one. + +###### Parameters + +* `extensions` (`Array`) + — list of syntax extensions + +###### Returns + +A single combined extension (`Extension`). + +### `combineHtmlExtensions(htmlExtensions)` + +Combine multiple html extensions into one. + +###### Parameters + +* `htmlExtensions` (`Array`) + — list of HTML extensions + +###### Returns + +A single combined HTML extension (`HtmlExtension`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-combine-extensions@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-combine-extensions.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-combine-extensions + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-combine-extensions + +[bundle-size]: https://bundlejs.com/?q=micromark-util-combine-extensions + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[syntax]: https://github.com/micromark/micromark#syntaxextension + +[html]: https://github.com/micromark/micromark#htmlextension + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm + +[api-combine-extensions]: #combineextensionsextensions + +[api-combine-html-extensions]: #combinehtmlextensionshtmlextensions diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts new file mode 100644 index 0000000000..333bdbbd0e --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts @@ -0,0 +1,16 @@ +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value: string, base: number): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map new file mode 100644 index 0000000000..17f668f104 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js new file mode 100644 index 0000000000..a96c423833 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js @@ -0,0 +1,42 @@ +import {codes, values} from 'micromark-util-symbol' + +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + + if ( + // C0 except for HT, LF, FF, CR, space. + code < codes.ht || + code === codes.vt || + (code > codes.cr && code < codes.space) || + // Control character (DEL) of C0, and C1 controls. + (code > codes.tilde && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55_295 && code < 57_344) || + // Noncharacters. + (code > 64_975 && code < 65_008) || + /* eslint-disable no-bitwise */ + (code & 65_535) === 65_535 || + (code & 65_535) === 65_534 || + /* eslint-enable no-bitwise */ + // Out of range + code > 1_114_111 + ) { + return values.replacementCharacter + } + + return String.fromCodePoint(code) +} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts new file mode 100644 index 0000000000..333bdbbd0e --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts @@ -0,0 +1,16 @@ +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value: string, base: number): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map new file mode 100644 index 0000000000..17f668f104 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.js b/node_modules/micromark-util-decode-numeric-character-reference/index.js new file mode 100644 index 0000000000..1d75d7ba5c --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/index.js @@ -0,0 +1,32 @@ +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +export function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base); + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || code === 11 || code > 13 && code < 32 || + // Control character (DEL) of C0, and C1 controls. + code > 126 && code < 160 || + // Lone high surrogates and low surrogates. + code > 55_295 && code < 57_344 || + // Noncharacters. + code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */ + (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */ + // Out of range + code > 1_114_111) { + return "\uFFFD"; + } + return String.fromCodePoint(code); +} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/license b/node_modules/micromark-util-decode-numeric-character-reference/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-decode-numeric-character-reference/package.json b/node_modules/micromark-util-decode-numeric-character-reference/package.json new file mode 100644 index 0000000000..759e989b07 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/package.json @@ -0,0 +1,59 @@ +{ + "name": "micromark-util-decode-numeric-character-reference", + "version": "2.0.2", + "description": "micromark utility to decode numeric character references", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "decode", + "numeric", + "number", + "character", + "reference" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-decode-numeric-character-reference", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/readme.md b/node_modules/micromark-util-decode-numeric-character-reference/readme.md new file mode 100644 index 0000000000..4610c59bc9 --- /dev/null +++ b/node_modules/micromark-util-decode-numeric-character-reference/readme.md @@ -0,0 +1,184 @@ +# micromark-util-decode-numeric-character-reference + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to decode numeric character references. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`decodeNumericCharacterReference(value, base)`](#decodenumericcharacterreferencevalue-base) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to decode numeric character references. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-decode-numeric-character-reference +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {decodeNumericCharacterReference} from 'https://esm.sh/micromark-util-decode-numeric-character-reference@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference' + +decodeNumericCharacterReference('41', 16) // 'A' +decodeNumericCharacterReference('65', 10) // 'A' +decodeNumericCharacterReference('A', 16) // '\n' +decodeNumericCharacterReference('7F', 16) // '�' - Control +decodeNumericCharacterReference('110000', 16) // '�' - Out of range +``` + +## API + +This module exports the identifier: +[`decodeNumericCharacterReference`][api-decode-numeric-character-reference]. +There is no default export. + +### `decodeNumericCharacterReference(value, base)` + +Turn the number (in string form as either hexa- or plain decimal) coming from +a numeric character reference into a character. + +Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes +non-characters and control characters safe. + +###### Parameters + +* `value` (`string`) + — value to decode +* `base` (`number`, probably `10` or `16`) + — numeric base + +###### Returns + +Character (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-decode-numeric-character-reference@2`, compatible with +Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier + +[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-decode-numeric-character-reference]: #decodenumericcharacterreferencevalue-base diff --git a/node_modules/micromark-util-encode/index.d.ts b/node_modules/micromark-util-encode/index.d.ts new file mode 100644 index 0000000000..760226f618 --- /dev/null +++ b/node_modules/micromark-util-encode/index.d.ts @@ -0,0 +1,14 @@ +/** + * Encode only the dangerous HTML characters. + * + * This ensures that certain characters which have special meaning in HTML are + * dealt with. + * Technically, we can skip `>` and `"` in many cases, but CM includes them. + * + * @param {string} value + * Value to encode. + * @returns {string} + * Encoded value. + */ +export function encode(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.d.ts.map b/node_modules/micromark-util-encode/index.d.ts.map new file mode 100644 index 0000000000..16eebb1cc4 --- /dev/null +++ b/node_modules/micromark-util-encode/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,8BALW,MAAM,GAEJ,MAAM,CAqBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.js b/node_modules/micromark-util-encode/index.js new file mode 100644 index 0000000000..397f1d4041 --- /dev/null +++ b/node_modules/micromark-util-encode/index.js @@ -0,0 +1,33 @@ +const characterReferences = {'"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'} + +/** + * Encode only the dangerous HTML characters. + * + * This ensures that certain characters which have special meaning in HTML are + * dealt with. + * Technically, we can skip `>` and `"` in many cases, but CM includes them. + * + * @param {string} value + * Value to encode. + * @returns {string} + * Encoded value. + */ +export function encode(value) { + return value.replace(/["&<>]/g, replace) + + /** + * @param {string} value + * Value to replace. + * @returns {string} + * Encoded value. + */ + function replace(value) { + return ( + '&' + + characterReferences[ + /** @type {keyof typeof characterReferences} */ (value) + ] + + ';' + ) + } +} diff --git a/node_modules/micromark-util-encode/license b/node_modules/micromark-util-encode/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-encode/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-encode/package.json b/node_modules/micromark-util-encode/package.json new file mode 100644 index 0000000000..a56c6b3b04 --- /dev/null +++ b/node_modules/micromark-util-encode/package.json @@ -0,0 +1,47 @@ +{ + "name": "micromark-util-encode", + "version": "2.0.1", + "description": "micromark utility to encode dangerous html characters", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "html", + "encode" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-string-replace-all": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-encode/readme.md b/node_modules/micromark-util-encode/readme.md new file mode 100644 index 0000000000..cd27292fe1 --- /dev/null +++ b/node_modules/micromark-util-encode/readme.md @@ -0,0 +1,176 @@ +# micromark-util-encode + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to encode dangerous html characters. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`encode(value)`](#encodevalue) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to make text safe for embedding in HTML. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-encode +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {encode} from 'https://esm.sh/micromark-util-encode@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {encode} from 'micromark-util-encode' + +encode('<3') // '<3' +``` + +## API + +This module exports the identifier [`encode`][api-encode]. +There is no default export. + +### `encode(value)` + +Encode only the dangerous HTML characters. + +This ensures that certain characters which have special meaning in HTML are +dealt with. +Technically, we can skip `>` and `"` in many cases, but CM includes them. + +###### Parameters + +* `value` (`string`) + — value to encode + +###### Returns + +Encoded value (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-encode@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-encode.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-encode + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-encode + +[bundle-size]: https://bundlejs.com/?q=micromark-util-encode + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-encode]: #encodevalue diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts b/node_modules/micromark-util-html-tag-name/index.d.ts new file mode 100644 index 0000000000..cd5ef317cd --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/index.d.ts @@ -0,0 +1,30 @@ +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +export const htmlBlockNames: string[]; +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +export const htmlRawNames: string[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts.map b/node_modules/micromark-util-html-tag-name/index.d.ts.map new file mode 100644 index 0000000000..56f2fc0f2e --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,sCA+DC;AAED;;;;;;;;;;;GAWG;AACH,oCAAkE"} \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.js b/node_modules/micromark-util-html-tag-name/index.js new file mode 100644 index 0000000000..fa0a0fd950 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/index.js @@ -0,0 +1,93 @@ +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * . + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +export const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * . + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +export const htmlRawNames = ['pre', 'script', 'style', 'textarea'] diff --git a/node_modules/micromark-util-html-tag-name/license b/node_modules/micromark-util-html-tag-name/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-html-tag-name/package.json b/node_modules/micromark-util-html-tag-name/package.json new file mode 100644 index 0000000000..9015e128c8 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/package.json @@ -0,0 +1,47 @@ +{ + "name": "micromark-util-html-tag-name", + "version": "2.0.1", + "description": "micromark utility with list of html tag names", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "html", + "tag", + "name" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-html-tag-name", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-html-tag-name/readme.md b/node_modules/micromark-util-html-tag-name/readme.md new file mode 100644 index 0000000000..ff16f68e74 --- /dev/null +++ b/node_modules/micromark-util-html-tag-name/readme.md @@ -0,0 +1,193 @@ +# micromark-util-html-tag-name + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility with list of html tag names. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`htmlBlockNames`](#htmlblocknames) + * [`htmlRawNames`](#htmlrawnames) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes a list of known tag names to markdown. + +## When should I use this? + +This package is only useful if you want to build an alternative to micromark. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-html-tag-name +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {htmlBlockNames, htmlRawNames} from 'https://esm.sh/micromark-util-html-tag-name@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name' + +console.log(htmlBlockNames) // ['address', 'article', …] +console.log(htmlRawNames) // ['pre', 'script', …] +``` + +## API + +This module exports the identifiers [`htmlBlockNames`][api-html-block-names] +and [`htmlRawNames`][api-html-raw-names]. +There is no default export. + +### `htmlBlockNames` + +List of lowercase HTML “block” tag names (`Array`). + +The list, when parsing HTML (flow), results in more relaxed rules (condition +6\). +Because they are known blocks, the HTML-like syntax doesn’t have to be strictly +parsed. +For tag names not in this list, a more strict algorithm (condition 7) is used +to detect whether the HTML-like syntax is seen as HTML (flow) or not. + +This is copied from: +. + +> 👉 **Note**: `search` was added in `CommonMark@0.31`. + +### `htmlRawNames` + +List of lowercase HTML “raw” tag names (`Array`). + +The list, when parsing HTML (flow), results in HTML that can include lines +without exiting, until a closing tag also in this list is found (condition +1\). + +This module is copied from: +. + +> 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-html-tag-name@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-html-tag-name.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-html-tag-name + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-html-tag-name + +[bundle-size]: https://bundlejs.com/?q=micromark-util-html-tag-name + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-html-block-names]: #htmlblocknames + +[api-html-raw-names]: #htmlrawnames diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts new file mode 100644 index 0000000000..96074f6031 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts @@ -0,0 +1,21 @@ +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map new file mode 100644 index 0000000000..684ad8d872 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.js b/node_modules/micromark-util-normalize-identifier/dev/index.js new file mode 100644 index 0000000000..ce4ce9b61c --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/dev/index.js @@ -0,0 +1,38 @@ +import {values} from 'micromark-util-symbol' + +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, values.space) + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts b/node_modules/micromark-util-normalize-identifier/index.d.ts new file mode 100644 index 0000000000..96074f6031 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/index.d.ts @@ -0,0 +1,21 @@ +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/index.d.ts.map new file mode 100644 index 0000000000..684ad8d872 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.js b/node_modules/micromark-util-normalize-identifier/index.js new file mode 100644 index 0000000000..f206021427 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/index.js @@ -0,0 +1,33 @@ +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +export function normalizeIdentifier(value) { + return value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, " ") + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase().toUpperCase(); +} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/license b/node_modules/micromark-util-normalize-identifier/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-normalize-identifier/package.json b/node_modules/micromark-util-normalize-identifier/package.json new file mode 100644 index 0000000000..4fb1982df2 --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/package.json @@ -0,0 +1,58 @@ +{ + "name": "micromark-util-normalize-identifier", + "version": "2.0.1", + "description": "micromark utility normalize identifiers (as found in references, definitions)", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "normalize", + "id", + "identifier" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off", + "unicorn/prefer-string-replace-all": "off" + } + } +} diff --git a/node_modules/micromark-util-normalize-identifier/readme.md b/node_modules/micromark-util-normalize-identifier/readme.md new file mode 100644 index 0000000000..97e2383a1e --- /dev/null +++ b/node_modules/micromark-util-normalize-identifier/readme.md @@ -0,0 +1,187 @@ +# micromark-util-normalize-identifier + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility normalize identifiers. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`normalizeIdentifier(value)`](#normalizeidentifiervalue) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to normalize identifiers found in markdown. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-normalize-identifier +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {normalizeIdentifier} from 'https://esm.sh/micromark-util-normalize-identifier@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {normalizeIdentifier} from 'micromark-util-normalize-identifier' + +normalizeIdentifier(' a ') // 'A' +normalizeIdentifier('a\t\r\nb') // 'A B' +normalizeIdentifier('ТОЛПОЙ') // 'ТОЛПОЙ' +normalizeIdentifier('Толпой') // 'ТОЛПОЙ' +``` + +## API + +This module exports the identifier +[`normalizeIdentifier`][api-normalize-identifier]. +There is no default export. + +### `normalizeIdentifier(value)` + +Normalize an identifier (as found in references, definitions). + +Collapses markdown whitespace, trim, and then lower- and uppercase. + +Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their +lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different +uppercase character (U+0398 (`Θ`)). +So, to get a canonical form, we perform both lower- and uppercase. + +Using uppercase last makes sure keys will never interact with default +prototypal values (such as `constructor`): nothing in the prototype of `Object` +is uppercase. + +###### Parameters + +* `value` (`string`) + — identifier to normalize + +###### Returns + +Normalized identifier (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-normalize-identifier@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier + +[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-normalize-identifier]: #normalizeidentifiervalue diff --git a/node_modules/micromark-util-resolve-all/index.d.ts b/node_modules/micromark-util-resolve-all/index.d.ts new file mode 100644 index 0000000000..c9cbe16b64 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/index.d.ts @@ -0,0 +1,22 @@ +/** + * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' + */ +/** + * Call all `resolveAll`s. + * + * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +export function resolveAll(constructs: ReadonlyArray<{ + resolveAll?: Resolver | undefined; +}>, events: Array, context: TokenizeContext): Array; +import type { Resolver } from 'micromark-util-types'; +import type { Event } from 'micromark-util-types'; +import type { TokenizeContext } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.d.ts.map b/node_modules/micromark-util-resolve-all/index.d.ts.map new file mode 100644 index 0000000000..8ba707e732 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,uCATW,aAAa,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAC,CAAC,UAElD,KAAK,CAAC,KAAK,CAAC,WAEZ,eAAe,GAEb,KAAK,CAAC,KAAK,CAAC,CAkBxB;8BA9BkD,sBAAsB;2BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.js b/node_modules/micromark-util-resolve-all/index.js new file mode 100644 index 0000000000..69eb32b604 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/index.js @@ -0,0 +1,32 @@ +/** + * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' + */ + +/** + * Call all `resolveAll`s. + * + * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array} + * Changed events. + */ +export function resolveAll(constructs, events, context) { + /** @type {Array} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} diff --git a/node_modules/micromark-util-resolve-all/license b/node_modules/micromark-util-resolve-all/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-resolve-all/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-resolve-all/package.json b/node_modules/micromark-util-resolve-all/package.json new file mode 100644 index 0000000000..f1d7c2b2af --- /dev/null +++ b/node_modules/micromark-util-resolve-all/package.json @@ -0,0 +1,48 @@ +{ + "name": "micromark-util-resolve-all", + "version": "2.0.1", + "description": "micromark utility to resolve subtokens", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "resolve" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-resolve-all", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": "./index.js", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-resolve-all/readme.md b/node_modules/micromark-util-resolve-all/readme.md new file mode 100644 index 0000000000..11eefd47ae --- /dev/null +++ b/node_modules/micromark-util-resolve-all/readme.md @@ -0,0 +1,238 @@ +# micromark-util-resolve-all + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to resolve subtokens. + +[Resolvers][resolver] are functions that take events and manipulate them. +This is needed for example because media (links, images) and attention (strong, +italic) aren’t parsed left-to-right. +Instead, their openings and closings are parsed, and when done, their openings +and closings are matched, and left overs are turned into plain text. +Because media and attention can’t overlap, we need to perform that operation +when one closing matches an opening, too. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`resolveAll(constructs, events, context)`](#resolveallconstructs-events-context) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes a micromark internal that you probably don’t need. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-resolve-all +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {resolveAll} from 'https://esm.sh/micromark-util-resolve-all@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {push} from 'micromark-util-chunked' +import {resolveAll} from 'micromark-util-resolve-all' + +/** + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + // … + + // Walk through all events. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + // … + ) { + // … + + // Opening. + nextEvents = push(nextEvents, [ + // … + ]) + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + // … + ]) + + // … + } + } + } + } + + // … +} +``` + +## API + +This module exports the identifier [`resolveAll`][api-resolve-all]. +There is no default export. + +### `resolveAll(constructs, events, context)` + +Call all `resolveAll`s in `constructs`. + +###### Parameters + +* `constructs` (`Array`) + — list of constructs, optionally with `resolveAll`s +* `events` (`Array`) + — list of events +* `context` (`TokenizeContext`) + — context used by `tokenize` + +###### Returns + +Changed events (`Array`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-resolve-all@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-resolve-all.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-resolve-all + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-resolve-all + +[bundle-size]: https://bundlejs.com/?q=micromark-util-resolve-all + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[resolver]: https://github.com/micromark/micromark/blob/a571c09/packages/micromark-util-types/index.js#L219 + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-resolve-all]: #resolveallconstructs-events-context diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts new file mode 100644 index 0000000000..a105f230e8 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts @@ -0,0 +1,36 @@ +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map new file mode 100644 index 0000000000..cab9483524 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.js b/node_modules/micromark-util-sanitize-uri/dev/index.js new file mode 100644 index 0000000000..cc454b5e02 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/dev/index.js @@ -0,0 +1,124 @@ +import {asciiAlphanumeric} from 'micromark-util-character' +import {encode} from 'micromark-util-encode' +import {codes, values} from 'micromark-util-symbol' + +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url, protocol) { + const value = encode(normalizeUri(url || '')) + + if (!protocol) { + return value + } + + const colon = value.indexOf(':') + const questionMark = value.indexOf('?') + const numberSign = value.indexOf('#') + const slash = value.indexOf('/') + + if ( + // If there is no protocol, it’s relative. + colon < 0 || + // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. + (slash > -1 && colon > slash) || + (questionMark > -1 && colon > questionMark) || + (numberSign > -1 && colon > numberSign) || + // It is a protocol, it should be allowed. + protocol.test(value.slice(0, colon)) + ) { + return value + } + + return '' +} + +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value) { + /** @type {Array} */ + const result = [] + let index = -1 + let start = 0 + let skip = 0 + + while (++index < value.length) { + const code = value.charCodeAt(index) + /** @type {string} */ + let replace = '' + + // A correct percent encoded value. + if ( + code === codes.percentSign && + asciiAlphanumeric(value.charCodeAt(index + 1)) && + asciiAlphanumeric(value.charCodeAt(index + 2)) + ) { + skip = 2 + } + // ASCII. + else if (code < 128) { + if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { + replace = String.fromCharCode(code) + } + } + // Astral. + else if (code > 55_295 && code < 57_344) { + const next = value.charCodeAt(index + 1) + + // A correct surrogate pair. + if (code < 56_320 && next > 56_319 && next < 57_344) { + replace = String.fromCharCode(code, next) + skip = 1 + } + // Lone surrogate. + else { + replace = values.replacementCharacter + } + } + // Unicode. + else { + replace = String.fromCharCode(code) + } + + if (replace) { + result.push(value.slice(start, index), encodeURIComponent(replace)) + start = index + skip + 1 + replace = '' + } + + if (skip) { + index += skip + skip = 0 + } + } + + return result.join('') + value.slice(start) +} diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts b/node_modules/micromark-util-sanitize-uri/index.d.ts new file mode 100644 index 0000000000..a105f230e8 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/index.d.ts @@ -0,0 +1,36 @@ +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value: string): string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/index.d.ts.map new file mode 100644 index 0000000000..cab9483524 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.js b/node_modules/micromark-util-sanitize-uri/index.js new file mode 100644 index 0000000000..fb6fe6fbb8 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/index.js @@ -0,0 +1,107 @@ +import { asciiAlphanumeric } from 'micromark-util-character'; +import { encode } from 'micromark-util-encode'; +/** + * Make a value safe for injection as a URL. + * + * This encodes unsafe characters with percent-encoding and skips already + * encoded sequences (see `normalizeUri`). + * Further unsafe characters are encoded as character references (see + * `micromark-util-encode`). + * + * A regex of allowed protocols can be given, in which case the URL is + * sanitized. + * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or + * `/^https?$/i` for `img[src]` (this is what `github.com` allows). + * If the URL includes an unknown protocol (one not matched by `protocol`, such + * as a dangerous example, `javascript:`), the value is ignored. + * + * @param {string | null | undefined} url + * URI to sanitize. + * @param {RegExp | null | undefined} [protocol] + * Allowed protocols. + * @returns {string} + * Sanitized URI. + */ +export function sanitizeUri(url, protocol) { + const value = encode(normalizeUri(url || '')); + if (!protocol) { + return value; + } + const colon = value.indexOf(':'); + const questionMark = value.indexOf('?'); + const numberSign = value.indexOf('#'); + const slash = value.indexOf('/'); + if ( + // If there is no protocol, it’s relative. + colon < 0 || + // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. + slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign || + // It is a protocol, it should be allowed. + protocol.test(value.slice(0, colon))) { + return value; + } + return ''; +} + +/** + * Normalize a URL. + * + * Encode unsafe characters with percent-encoding, skipping already encoded + * sequences. + * + * @param {string} value + * URI to normalize. + * @returns {string} + * Normalized URI. + */ +export function normalizeUri(value) { + /** @type {Array} */ + const result = []; + let index = -1; + let start = 0; + let skip = 0; + while (++index < value.length) { + const code = value.charCodeAt(index); + /** @type {string} */ + let replace = ''; + + // A correct percent encoded value. + if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) { + skip = 2; + } + // ASCII. + else if (code < 128) { + if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { + replace = String.fromCharCode(code); + } + } + // Astral. + else if (code > 55_295 && code < 57_344) { + const next = value.charCodeAt(index + 1); + + // A correct surrogate pair. + if (code < 56_320 && next > 56_319 && next < 57_344) { + replace = String.fromCharCode(code, next); + skip = 1; + } + // Lone surrogate. + else { + replace = "\uFFFD"; + } + } + // Unicode. + else { + replace = String.fromCharCode(code); + } + if (replace) { + result.push(value.slice(start, index), encodeURIComponent(replace)); + start = index + skip + 1; + replace = ''; + } + if (skip) { + index += skip; + skip = 0; + } + } + return result.join('') + value.slice(start); +} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/license b/node_modules/micromark-util-sanitize-uri/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-sanitize-uri/package.json b/node_modules/micromark-util-sanitize-uri/package.json new file mode 100644 index 0000000000..068ecbc7a4 --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/package.json @@ -0,0 +1,59 @@ +{ + "name": "micromark-util-sanitize-uri", + "version": "2.0.1", + "description": "micromark utility to sanitize urls", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "sanitize", + "clear", + "url" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-sanitize-uri/readme.md b/node_modules/micromark-util-sanitize-uri/readme.md new file mode 100644 index 0000000000..2d08fc51fb --- /dev/null +++ b/node_modules/micromark-util-sanitize-uri/readme.md @@ -0,0 +1,214 @@ +# micromark-util-sanitize-uri + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to sanitize urls. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`normalizeUri(value)`](#normalizeurivalue) + * [`sanitizeUri(url[, pattern])`](#sanitizeuriurl-pattern) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes an algorithm to make URLs safe. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-sanitize-uri +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {sanitizeUri} from 'https://esm.sh/micromark-util-sanitize-uri@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {sanitizeUri} from 'micromark-util-sanitize-uri' + +sanitizeUri('https://example.com/a&b') // 'https://example.com/a&amp;b' +sanitizeUri('https://example.com/a%b') // 'https://example.com/a%25b' +sanitizeUri('https://example.com/a%20b') // 'https://example.com/a%20b' +sanitizeUri('https://example.com/👍') // 'https://example.com/%F0%9F%91%8D' +sanitizeUri('https://example.com/', /^https?$/i) // 'https://example.com/' +sanitizeUri('javascript:alert(1)', /^https?$/i) // '' +sanitizeUri('./example.jpg', /^https?$/i) // './example.jpg' +sanitizeUri('#a', /^https?$/i) // '#a' +``` + +## API + +This module exports the identifiers [`normalizeUri`][api-normalize-uri] and +[`sanitizeUri`][api-sanitize-uri]. +There is no default export. + +### `normalizeUri(value)` + +Normalize a URL. + +Encode unsafe characters with percent-encoding, skipping already encoded +sequences. + +###### Parameters + +* `value` (`string`) + — URI to normalize + +###### Returns + +Normalized URI (`string`). + +### `sanitizeUri(url[, pattern])` + +Make a value safe for injection as a URL. + +This encodes unsafe characters with percent-encoding and skips already +encoded sequences (see [`normalizeUri`][api-normalize-uri]). +Further unsafe characters are encoded as character references (see +[`micromark-util-encode`][micromark-util-encode]). + +A regex of allowed protocols can be given, in which case the URL is sanitized. +For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or +`/^https?$/i` for `img[src]` (this is what `github.com` allows). +If the URL includes an unknown protocol (one not matched by `protocol`, such +as a dangerous example, `javascript:`), the value is ignored. + +###### Parameters + +* `url` (`string`) + — URI to sanitize +* `pattern` (`RegExp`, optional) + — allowed protocols + +###### Returns + +Sanitized URI (`string`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-sanitize-uri@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-sanitize-uri.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-sanitize-uri + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-sanitize-uri + +[bundle-size]: https://bundlejs.com/?q=micromark-util-sanitize-uri + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[micromark-util-encode]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode + +[api-normalize-uri]: #normalizeurivalue + +[api-sanitize-uri]: #sanitizeuriurl-pattern diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts b/node_modules/micromark-util-subtokenize/dev/index.d.ts new file mode 100644 index 0000000000..b252238a88 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/dev/index.d.ts @@ -0,0 +1,12 @@ +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +export function subtokenize(eventsArray: Array): boolean; +export { SpliceBuffer } from "./lib/splice-buffer.js"; +import type { Event } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts.map b/node_modules/micromark-util-subtokenize/dev/index.d.ts.map new file mode 100644 index 0000000000..1738691d8e --- /dev/null +++ b/node_modules/micromark-util-subtokenize/dev/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.js b/node_modules/micromark-util-subtokenize/dev/index.js new file mode 100644 index 0000000000..f506fd9a12 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/dev/index.js @@ -0,0 +1,272 @@ +/** + * @import {Chunk, Event, Token} from 'micromark-util-types' + */ + +import {ok as assert} from 'devlop' +import {splice} from 'micromark-util-chunked' +import {codes, types} from 'micromark-util-symbol' +import {SpliceBuffer} from './lib/splice-buffer.js' + +// Hidden API exposed for testing. +export {SpliceBuffer} from './lib/splice-buffer.js' + +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +// eslint-disable-next-line complexity +export function subtokenize(eventsArray) { + /** @type {Record} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array} */ + let parameters + /** @type {Array} */ + let subevents + /** @type {boolean | undefined} */ + let more + const events = new SpliceBuffer(eventsArray) + + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + + event = events.get(index) + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === types.chunkFlow && + events.get(index - 1)[1].type === types.listItemPrefix + ) { + assert(event[1]._tokenizer, 'expected `_tokenizer` on subtokens') + subevents = event[1]._tokenizer.events + otherIndex = 0 + + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === types.lineEndingBlank + ) { + otherIndex += 2 + } + + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === types.content + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === types.content) { + break + } + + if (subevents[otherIndex][1].type === types.chunkText) { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + + while (otherIndex--) { + otherEvent = events.get(otherIndex) + + if ( + otherEvent[1].type === types.lineEnding || + otherEvent[1].type === types.lineEndingBlank + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events.get(lineIndex)[1].type = types.lineEndingBlank + } + + otherEvent[1].type = types.lineEnding + lineIndex = otherIndex + } + } else if (otherEvent[1].type === types.linePrefix) { + // Move past. + } else { + break + } + } + + if (lineIndex) { + // Fix position. + event[1].end = {...events.get(lineIndex)[1].start} + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + events.splice(lineIndex, index - lineIndex + 1, parameters) + } + } + } + + // The changes to the `events` buffer must be copied back into the eventsArray + splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)) + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {SpliceBuffer} events + * Events. + * @param {number} eventIndex + * Index. + * @returns {Record} + * Gaps. + */ +function subcontent(events, eventIndex) { + const token = events.get(eventIndex)[1] + const context = events.get(eventIndex)[2] + let startPosition = eventIndex - 1 + /** @type {Array} */ + const startPositions = [] + assert(token.contentType, 'expected `contentType` on subtokens') + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record} */ + const gaps = {} + /** @type {Array} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events.get(++startPosition)[1] !== current) { + // Empty. + } + + assert( + !previous || current.previous === previous, + 'expected previous to match' + ) + assert(!previous || previous.next === current, 'expected next to match') + + startPositions.push(startPosition) + + if (!current._tokenizer) { + stream = context.sliceStream(current) + + if (!current.next) { + stream.push(codes.eof) + } + + if (previous) { + tokenizer.defineSkip(current.start) + } + + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + + tokenizer.write(stream) + + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + assert(current, 'expected a current token') + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + assert(!current.next, 'expected no next token') + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + assert(start !== undefined, 'expected a start position when splicing') + jumps.push([start, start + slice.length - 1]) + events.splice(start, 2, slice) + } + + jumps.reverse() + index = -1 + + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + + return gaps +} diff --git a/node_modules/micromark-util-subtokenize/index.d.ts b/node_modules/micromark-util-subtokenize/index.d.ts new file mode 100644 index 0000000000..b252238a88 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/index.d.ts @@ -0,0 +1,12 @@ +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +export function subtokenize(eventsArray: Array): boolean; +export { SpliceBuffer } from "./lib/splice-buffer.js"; +import type { Event } from 'micromark-util-types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.d.ts.map b/node_modules/micromark-util-subtokenize/index.d.ts.map new file mode 100644 index 0000000000..1738691d8e --- /dev/null +++ b/node_modules/micromark-util-subtokenize/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.js b/node_modules/micromark-util-subtokenize/index.js new file mode 100644 index 0000000000..de77c382c2 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/index.js @@ -0,0 +1,222 @@ +/** + * @import {Chunk, Event, Token} from 'micromark-util-types' + */ + +import { splice } from 'micromark-util-chunked'; +import { SpliceBuffer } from './lib/splice-buffer.js'; + +// Hidden API exposed for testing. +export { SpliceBuffer } from './lib/splice-buffer.js'; + +/** + * Tokenize subcontent. + * + * @param {Array} eventsArray + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +// eslint-disable-next-line complexity +export function subtokenize(eventsArray) { + /** @type {Record} */ + const jumps = {}; + let index = -1; + /** @type {Event} */ + let event; + /** @type {number | undefined} */ + let lineIndex; + /** @type {number} */ + let otherIndex; + /** @type {Event} */ + let otherEvent; + /** @type {Array} */ + let parameters; + /** @type {Array} */ + let subevents; + /** @type {boolean | undefined} */ + let more; + const events = new SpliceBuffer(eventsArray); + while (++index < events.length) { + while (index in jumps) { + index = jumps[index]; + } + event = events.get(index); + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if (index && event[1].type === "chunkFlow" && events.get(index - 1)[1].type === "listItemPrefix") { + subevents = event[1]._tokenizer.events; + otherIndex = 0; + if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { + otherIndex += 2; + } + if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === "content") { + break; + } + if (subevents[otherIndex][1].type === "chunkText") { + subevents[otherIndex][1]._isInFirstContentOfListItem = true; + otherIndex++; + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)); + index = jumps[index]; + more = true; + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index; + lineIndex = undefined; + while (otherIndex--) { + otherEvent = events.get(otherIndex); + if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events.get(lineIndex)[1].type = "lineEndingBlank"; + } + otherEvent[1].type = "lineEnding"; + lineIndex = otherIndex; + } + } else if (otherEvent[1].type === "linePrefix") { + // Move past. + } else { + break; + } + } + if (lineIndex) { + // Fix position. + event[1].end = { + ...events.get(lineIndex)[1].start + }; + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index); + parameters.unshift(event); + events.splice(lineIndex, index - lineIndex + 1, parameters); + } + } + } + + // The changes to the `events` buffer must be copied back into the eventsArray + splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)); + return !more; +} + +/** + * Tokenize embedded tokens. + * + * @param {SpliceBuffer} events + * Events. + * @param {number} eventIndex + * Index. + * @returns {Record} + * Gaps. + */ +function subcontent(events, eventIndex) { + const token = events.get(eventIndex)[1]; + const context = events.get(eventIndex)[2]; + let startPosition = eventIndex - 1; + /** @type {Array} */ + const startPositions = []; + const tokenizer = token._tokenizer || context.parser[token.contentType](token.start); + const childEvents = tokenizer.events; + /** @type {Array<[number, number]>} */ + const jumps = []; + /** @type {Record} */ + const gaps = {}; + /** @type {Array} */ + let stream; + /** @type {Token | undefined} */ + let previous; + let index = -1; + /** @type {Token | undefined} */ + let current = token; + let adjust = 0; + let start = 0; + const breaks = [start]; + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events.get(++startPosition)[1] !== current) { + // Empty. + } + startPositions.push(startPosition); + if (!current._tokenizer) { + stream = context.sliceStream(current); + if (!current.next) { + stream.push(null); + } + if (previous) { + tokenizer.defineSkip(current.start); + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true; + } + tokenizer.write(stream); + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined; + } + } + + // Unravel the next token. + previous = current; + current = current.next; + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token; + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) { + start = index + 1; + breaks.push(start); + // Help GC. + current._tokenizer = undefined; + current.previous = undefined; + current = current.next; + } + } + + // Help GC. + tokenizer.events = []; + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined; + current.previous = undefined; + } else { + breaks.pop(); + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length; + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]); + const start = startPositions.pop(); + jumps.push([start, start + slice.length - 1]); + events.splice(start, 2, slice); + } + jumps.reverse(); + index = -1; + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; + adjust += jumps[index][1] - jumps[index][0] - 1; + } + return gaps; +} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/license b/node_modules/micromark-util-subtokenize/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-subtokenize/package.json b/node_modules/micromark-util-subtokenize/package.json new file mode 100644 index 0000000000..f68102cc5a --- /dev/null +++ b/node_modules/micromark-util-subtokenize/package.json @@ -0,0 +1,60 @@ +{ + "name": "micromark-util-subtokenize", + "version": "2.0.4", + "description": "micromark utility to tokenize subtokens", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "tokenize" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-subtokenize", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "dev/", + "lib/", + "index.d.ts.map", + "index.d.ts", + "index.js" + ], + "exports": { + "development": "./dev/index.js", + "default": "./index.js" + }, + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "scripts": { + "build": "micromark-build" + }, + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "max-depth": "off", + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-subtokenize/readme.md b/node_modules/micromark-util-subtokenize/readme.md new file mode 100644 index 0000000000..388e423542 --- /dev/null +++ b/node_modules/micromark-util-subtokenize/readme.md @@ -0,0 +1,181 @@ +# micromark-util-subtokenize + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility to tokenize subtokens. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`subtokenize(events)`](#subtokenizeevents) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes a micromark internal that you probably don’t need. + +## When should I use this? + +This package might be useful when you are making your own micromark extensions. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-subtokenize +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {subtokenize} from 'https://esm.sh/micromark-util-subtokenize@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {subtokenize} from 'micromark-util-subtokenize' + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} +``` + +## API + +This module exports the identifiers [`subtokenize`][api-subtokenize]. +There is no default export. + +### `subtokenize(events)` + +Tokenize subcontent. + +###### Parameters + +* `events` (`Array`) + — list of events + +###### Returns + +Whether subtokens were found (`boolean`). + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-subtokenize@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-subtokenize.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-subtokenize + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-subtokenize + +[bundle-size]: https://bundlejs.com/?q=micromark-util-subtokenize + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[api-subtokenize]: #subtokenizeevents diff --git a/node_modules/micromark-util-symbol/license b/node_modules/micromark-util-symbol/license new file mode 100644 index 0000000000..bc8f165a62 --- /dev/null +++ b/node_modules/micromark-util-symbol/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-symbol/package.json b/node_modules/micromark-util-symbol/package.json new file mode 100644 index 0000000000..b557140a60 --- /dev/null +++ b/node_modules/micromark-util-symbol/package.json @@ -0,0 +1,43 @@ +{ + "name": "micromark-util-symbol", + "version": "2.0.1", + "description": "micromark utility with symbols", + "license": "MIT", + "keywords": [ + "micromark", + "util", + "utility", + "symbol" + ], + "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-symbol", + "bugs": "https://github.com/micromark/micromark/issues", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "files": [ + "lib/" + ], + "exports": "./lib/default.js", + "xo": { + "envs": [ + "shared-node-browser" + ], + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off" + } + } +} diff --git a/node_modules/micromark-util-symbol/readme.md b/node_modules/micromark-util-symbol/readme.md new file mode 100644 index 0000000000..4bad177259 --- /dev/null +++ b/node_modules/micromark-util-symbol/readme.md @@ -0,0 +1,168 @@ +# micromark-util-symbol + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][bundle-size-badge]][bundle-size] +[![Sponsors][sponsors-badge]][opencollective] +[![Backers][backers-badge]][opencollective] +[![Chat][chat-badge]][chat] + +[micromark][] utility with symbols. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package exposes constants used throughout the micromark ecosystem. + +## When should I use this? + +This package is useful when you are making your own micromark extensions. +It’s useful to reference these constants by name instead of value while +developing. +[`micromark-build`][micromark-build] compiles them away for production code. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 16+), install with [npm][]: + +```sh +npm install micromark-util-symbol +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import * as symbol from 'https://esm.sh/micromark-util-symbol@1' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {codes, constants, types, values} from 'micromark-util-symbol' + +console.log(codes.atSign) // 64 +console.log(constants.characterReferenceNamedSizeMax) // 31 +console.log(types.definitionDestinationRaw) // 'definitionDestinationRaw' +console.log(values.atSign) // '@' +``` + +## API + +This package exports the identifiers `codes`, `constants`, `types`, and +`values`. +There is no default export. + +Each identifier is an object mapping strings to values. +See the code for the exposed data. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, +`micromark-util-symbol@2`, compatible with Node.js 16. +This package works with `micromark@3`. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-symbol.svg + +[downloads]: https://www.npmjs.com/package/micromark-util-symbol + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-symbol + +[bundle-size]: https://bundlejs.com/?q=micromark-util-symbol + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[typescript]: https://www.typescriptlang.org + +[micromark]: https://github.com/micromark/micromark + +[micromark-build]: https://github.com/micromark/micromark/tree/main/packages/micromark-build diff --git a/node_modules/micromark-util-types/index.d.ts b/node_modules/micromark-util-types/index.d.ts new file mode 100644 index 0000000000..3da4c708ee --- /dev/null +++ b/node_modules/micromark-util-types/index.d.ts @@ -0,0 +1,1294 @@ +// Note: this file is authored manually, not generated from `index.js`. + +/** + * A character code. + * + * This is often the same as what `String#charCodeAt()` yields but micromark + * adds meaning to certain other values. + * + * `null` represents the end of the input stream (called eof). + * Negative integers are used instead of certain sequences of characters (such + * as line endings and tabs). + */ +export type Code = number | null + +/** + * A chunk is either a character code or a slice of a buffer in the form of a + * string. + * + * Chunks are used because strings are more efficient storage that character + * codes, but limited in what they can represent. + */ +export type Chunk = Code | string + +/** + * Enumeration of the content types. + * + * Technically `document` is also a content type, which includes containers + * (lists, block quotes) and flow. + * As `ContentType` is used on tokens to define the type of subcontent but + * `document` is the highest level of content, so it’s not listed here. + * + * Containers in markdown come from the margin and include more constructs + * on the lines that define them. + * Take for example a block quote with a paragraph inside it (such as + * `> asd`). + * + * `flow` represents the sections, such as headings, code, and content, which + * is also parsed per line + * An example is HTML, which has a certain starting condition (such as + * ` +``` + +## Use + + + +Typical use (buffering): + +```js +import {micromark} from 'micromark' + +console.log(micromark('## Hello, *world*!')) +``` + +Yields: + +```html +

              Hello, world!

              +``` + +You can pass extensions (in this case [`micromark-extension-gfm`][gfm]): + +```js +import {micromark} from 'micromark' +import {gfmHtml, gfm} from 'micromark-extension-gfm' + +const value = '* [x] contact@example.com ~~strikethrough~~' + +const result = micromark(value, { + extensions: [gfm()], + htmlExtensions: [gfmHtml()] +}) + +console.log(result) +``` + +Yields: + +```html +
              +``` + +Streaming interface: + +```js +import {createReadStream} from 'node:fs' +import {stream} from 'micromark/stream' + +createReadStream('example.md') + .on('error', handleError) + .pipe(stream()) + .pipe(process.stdout) + +function handleError(error) { + // Handle your error here! + throw error +} +``` + +## API + +`micromark` core has two entries in its export map: `micromark` and +`micromark/stream`. + +`micromark` exports the identifier [`micromark`][api-micromark]. +`micromark/stream` exports the identifier [`stream`][api-stream]. +There are no default exports. + +The export map supports the [`development` condition][development]. +Run `node --conditions development module.js` to get instrumented dev code. +Without this condition, production code is loaded. +See [§ Size & debug][size-debug] for more info. + +### `micromark(value[, encoding][, options])` + +Compile markdown to HTML. + +> Note: which encodings are supported depends on the engine. +> For info on Node.js, see *[WHATWG supported encodings][encoding]*. + +###### Parameters + +* `value` (`string` or [`Uint8Array`][uint8-array]) + — markdown to parse +* `encoding` (`string`, default: `'utf8'`) + — [character encoding][encoding] to understand `value` as when it’s a + [`Uint8Array`][uint8-array] +* `options` ([`Options`][api-options], optional) + — configuration + +###### Returns + +Compiled HTML (`string`). + +### `stream(options?)` + +Create a duplex (readable and writable) stream. + +Some of the work to parse markdown can be done streaming, but in the +end buffering is required. + +micromark does not handle errors for you, so you must handle errors on whatever +streams you pipe into it. +As markdown does not know errors, `micromark` itself does not emit errors. + +###### Parameters + +* `options` ([`Options`][api-options], optional) + — configuration + +###### Returns + +Duplex stream. + +### `Options` + +Configuration (TypeScript type). + +##### Fields + +###### `allowDangerousHtml` + +Whether to allow (dangerous) HTML (`boolean`, default: `false`). + +The default is `false`, which still parses the HTML according to `CommonMark` +but shows the HTML as text instead of as elements. + +Pass `true` for trusted content to get actual HTML elements. +See [§ Security][security]. + +###### `allowDangerousProtocol` + +Whether to allow dangerous protocols in links and images (`boolean`, default: +`false`). + +The default is `false`, which drops URLs in links and images that use dangerous +protocols. + +Pass `true` for trusted content to support all protocols. + +URLs that have no protocol (which means it’s relative to the current page, such +as `./some/page.html`) and URLs that have a safe protocol (for images: `http`, +`https`; for links: `http`, `https`, `irc`, `ircs`, `mailto`, `xmpp`), are +safe. +All other URLs are dangerous and dropped. +See [§ Security][security]. + +###### `defaultLineEnding` + +Default line ending to use when compiling to HTML, for line endings not in +`value` (`'\r'`, `'\n'`, or `'\r\n'`; default: first line ending or `'\n'`). + +Generally, `micromark` copies line endings (`\r`, `\n`, `\r\n`) in the markdown +document over to the compiled HTML. +In some cases, such as `> a`, CommonMark requires that extra line endings are +added: `
              \n

              a

              \n
              `. + +To create that line ending, the document is checked for the first line ending +that is used. +If there is no line ending, `defaultLineEnding` is used. +If that isn’t configured, `\n` is used. + +###### `extensions` + +Array of syntax extensions (`Array`, default: `[]`). +See [§ Extensions][extensions]. + +###### `htmlExtensions` + +Array of syntax extensions (`Array`, default: `[]`). +See [§ Extensions][extensions]. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional type [`Options`][api-options]. + +## Compatibility + +Projects maintained by the unified collective are compatible with maintained +versions of Node.js. + +When we cut a new major release, we drop support for unmaintained versions of +Node. +This means we try to keep the current release line, `micromark@4`, compatible +with Node.js 16. + +## Security + +This package is safe. +See [`security.md`][securitymd] in [`micromark/.github`][health] for how to +submit a security report. + +## Contribute + +See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organisation, or community you agree to +abide by its terms. + +## Sponsor + + + +Support this effort and give back by sponsoring on [OpenCollective][]! + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              +
              + Salesforce 🏅

              + +
              + Vercel

              + +
              + Motif

              + +
              + HashiCorp

              + +
              + GitBook

              + +
              + Gatsby

              + +
              + Netlify

              + + +
              + Coinbase

              + +
              + ThemeIsle

              + +
              + Expo

              + +
              + Boost Note

              + +
              + Markdown Space

              + +
              + Holloway

              + +
              +
              + You? +

              +
              + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg + +[build]: https://github.com/micromark/micromark/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg + +[coverage]: https://codecov.io/github/micromark/micromark + +[downloads-badge]: https://img.shields.io/npm/dm/micromark.svg + +[downloads]: https://www.npmjs.com/package/micromark + +[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark + +[bundle-size]: https://bundlejs.com/?q=micromark + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[opencollective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/micromark/micromark/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[typescript]: https://www.typescriptlang.org + +[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions + +[license]: https://github.com/micromark/micromark/blob/main/license + +[author]: https://wooorm.com + +[health]: https://github.com/micromark/.github + +[securitymd]: https://github.com/micromark/.github/blob/main/security.md + +[contributing]: https://github.com/micromark/.github/blob/main/contributing.md + +[support]: https://github.com/micromark/.github/blob/main/support.md + +[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md + +[cheat]: https://commonmark.org/help/ + +[twitter]: https://twitter.com/unifiedjs + +[site]: https://unifiedjs.com + +[contribute]: #contribute + +[uint8-array]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array + +[encoding]: https://nodejs.org/api/util.html#whatwg-supported-encodings + +[commonmark]: https://commonmark.org + +[directives]: https://github.com/micromark/micromark-extension-directive + +[frontmatter]: https://github.com/micromark/micromark-extension-frontmatter + +[gfm]: https://github.com/micromark/micromark-extension-gfm + +[math]: https://github.com/micromark/micromark-extension-math + +[mdxjs]: https://github.com/micromark/micromark-extension-mdxjs + +[security]: #security + +[sponsor]: #sponsor + +[micromark]: https://github.com/micromark/micromark + +[extensions]: https://github.com/micromark/micromark#extensions + +[test]: https://github.com/micromark/micromark#test + +[size-debug]: https://github.com/micromark/micromark#size--debug + +[comparison]: https://github.com/micromark/micromark#comparison + +[markdown-rs]: https://github.com/wooorm/markdown-rs + +[mdast-util-to-markdown]: https://github.com/syntax-tree/mdast-util-to-markdown + +[api-micromark]: #micromarkvalue-encoding-options + +[api-stream]: #streamoptions + +[api-options]: #options diff --git a/node_modules/micromark/stream.d.ts b/node_modules/micromark/stream.d.ts new file mode 100644 index 0000000000..2b05447e81 --- /dev/null +++ b/node_modules/micromark/stream.d.ts @@ -0,0 +1,35 @@ +/** + * Create a duplex (readable and writable) stream. + * + * Some of the work to parse markdown can be done streaming, but in the + * end buffering is required. + * + * micromark does not handle errors for you, so you must handle errors on whatever + * streams you pipe into it. + * As markdown does not know errors, `micromark` itself does not emit errors. + * + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {MinimalDuplex} + * Duplex stream. + */ +export function stream(options?: Options | null | undefined): MinimalDuplex; +export type Options = import("micromark-util-types").Options; +/** + * Function called when write was successful. + */ +export type Callback = () => undefined; +/** + * Configuration for piping. + */ +export type PipeOptions = { + /** + * Whether to end the destination stream when the source stream ends. + */ + end?: boolean | null | undefined; +}; +/** + * Duplex stream. + */ +export type MinimalDuplex = Omit; +//# sourceMappingURL=stream.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark/stream.d.ts.map b/node_modules/micromark/stream.d.ts.map new file mode 100644 index 0000000000..f89c748fa5 --- /dev/null +++ b/node_modules/micromark/stream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["stream.js"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;GAcG;AACH,iCALW,OAAO,GAAG,IAAI,GAAG,SAAS,GAExB,aAAa,CAoOzB;sBAxQY,OAAO,sBAAsB,EAAE,OAAO;;;;6BAMtC,SAAS;;;;;;;;UAKR,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;4BAG3B,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/micromark/stream.js b/node_modules/micromark/stream.js new file mode 100644 index 0000000000..7561620013 --- /dev/null +++ b/node_modules/micromark/stream.js @@ -0,0 +1,256 @@ +/** + * @import {Encoding, Value} from 'micromark-util-types' + */ + +/** + * @typedef {import('micromark-util-types').Options} Options + */ + +/** + * @callback Callback + * Function called when write was successful. + * @returns {undefined} + * Nothing. + * + * @typedef PipeOptions + * Configuration for piping. + * @property {boolean | null | undefined} [end] + * Whether to end the destination stream when the source stream ends. + * + * @typedef {Omit} MinimalDuplex + * Duplex stream. + */ + +import { EventEmitter } from 'node:events'; +import { compile } from './lib/compile.js'; +import { parse } from './lib/parse.js'; +import { postprocess } from './lib/postprocess.js'; +import { preprocess } from './lib/preprocess.js'; + +/** + * Create a duplex (readable and writable) stream. + * + * Some of the work to parse markdown can be done streaming, but in the + * end buffering is required. + * + * micromark does not handle errors for you, so you must handle errors on whatever + * streams you pipe into it. + * As markdown does not know errors, `micromark` itself does not emit errors. + * + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {MinimalDuplex} + * Duplex stream. + */ +export function stream(options) { + const prep = preprocess(); + const tokenize = parse(options).document().write; + const comp = compile(options); + /** @type {boolean} */ + let ended; + const emitter = /** @type {MinimalDuplex} */new EventEmitter(); + // @ts-expect-error: fine. + emitter.end = end; + emitter.pipe = pipe; + emitter.readable = true; + emitter.writable = true; + // @ts-expect-error: fine. + emitter.write = write; + return emitter; + + /** + * Write a chunk into memory. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + */ + function write(chunk, encoding, callback) { + if (typeof encoding === 'function') { + callback = encoding; + encoding = undefined; + } + if (ended) { + throw new Error('Did not expect `write` after `end`'); + } + tokenize(prep(chunk || '', encoding)); + if (callback) { + callback(); + } + + // Signal successful write. + return true; + } + + /** + * End the writing. + * + * Passes all arguments as a final `write`. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @overload + * @param {Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @overload + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + * + * @param {Callback | Value | null | undefined} [chunk] + * Slice of markdown to parse (`string` or `Uint8Array`). + * @param {Callback | Encoding | null | undefined} [encoding] + * Character encoding to understand `chunk` as when it’s a `Uint8Array` + * (`string`, default: `'utf8'`). + * @param {Callback | null | undefined} [callback] + * Function called when write was successful. + * @returns {boolean} + * Whether write was successful. + */ + function end(chunk, encoding, callback) { + if (typeof chunk === 'function') { + encoding = chunk; + chunk = undefined; + } + if (typeof encoding === 'function') { + callback = encoding; + encoding = undefined; + } + write(chunk, encoding, callback); + emitter.emit('data', comp(postprocess(tokenize(prep('', encoding, true))))); + emitter.emit('end'); + ended = true; + return true; + } + + /** + * Pipe the processor into a writable stream. + * + * Basically `Stream#pipe`, but inlined and simplified to keep the bundled + * size down. + * See: . + * + * @template {NodeJS.WritableStream} Stream + * Writable stream. + * @param {Stream} destination + * Stream to pipe into. + * @param {PipeOptions | null | undefined} [options] + * Configuration. + * @returns {Stream} + * Destination stream. + */ + function pipe(destination, options) { + emitter.on('data', ondata); + emitter.on('error', onerror); + emitter.on('end', cleanup); + emitter.on('close', cleanup); + + // If the `end` option is not supplied, `destination.end()` will be + // called when the `end` or `close` events are received. + // @ts-expect-error `_isStdio` is available on `std{err,out}` + if (!destination._isStdio && (!options || options.end !== false)) { + emitter.on('end', onend); + } + destination.on('error', onerror); + destination.on('close', cleanup); + destination.emit('pipe', emitter); + return destination; + + /** + * End destination stream. + * + * @returns {undefined} + * Nothing. + */ + function onend() { + if (destination.end) { + destination.end(); + } + } + + /** + * Handle data. + * + * @param {string} chunk + * Data. + * @returns {undefined} + * Nothing. + */ + function ondata(chunk) { + if (destination.writable) { + destination.write(chunk); + } + } + + /** + * Clean listeners. + * + * @returns {undefined} + * Nothing. + */ + function cleanup() { + emitter.removeListener('data', ondata); + emitter.removeListener('end', onend); + emitter.removeListener('error', onerror); + emitter.removeListener('end', cleanup); + emitter.removeListener('close', cleanup); + destination.removeListener('error', onerror); + destination.removeListener('close', cleanup); + } + + /** + * Close dangling pipes and handle unheard errors. + * + * @param {Error | null | undefined} [error] + * Error, if any. + * @returns {undefined} + * Nothing. + */ + function onerror(error) { + cleanup(); + if (!emitter.listenerCount('error')) { + throw error; // Unhandled stream error in pipe. + } + } + } +} \ No newline at end of file diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE new file mode 100644 index 0000000000..1493534e60 --- /dev/null +++ b/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md new file mode 100644 index 0000000000..3c97a02fbe --- /dev/null +++ b/node_modules/minimatch/README.md @@ -0,0 +1,454 @@ +# minimatch + +A minimal matching utility. + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```js +// hybrid module, load with require() or import +import { minimatch } from 'minimatch' +// or: +const { minimatch } = require('minimatch') + +minimatch('bar.foo', '*.foo') // true! +minimatch('bar.foo', '*.bar') // false! +minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +- Brace Expansion +- Extended glob matching +- "Globstar" `**` matching +- [Posix character + classes](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html), + like `[[:alpha:]]`, supporting the full range of Unicode + characters. For example, `[[:alpha:]]` will match against + `'é'`, though `[a-zA-Z]` will not. Collating symbol and set + matching is not supported, so `[[=e=]]` will _not_ match `'é'` + and `[[.ch.]]` will not match `'ch'` in locales where `ch` is + considered a single character. + +See: + +- `man sh` +- `man bash` [Pattern + Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) +- `man 3 fnmatch` +- `man 5 gitignore` + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes in patterns +will always be interpreted as escape characters, not path separators. + +Note that `\` or `/` _will_ be interpreted as path separators in paths on +Windows, and will match against `/` in glob expressions. + +So just always use `/` in patterns. + +### UNC Paths + +On Windows, UNC paths like `//?/c:/...` or +`//ComputerName/Share/...` are handled specially. + +- Patterns starting with a double-slash followed by some + non-slash characters will preserve their double-slash. As a + result, a pattern like `//*` will match `//x`, but not `/x`. +- Patterns staring with `//?/:` will _not_ treat + the `?` as a wildcard character. Instead, it will be treated + as a normal string. +- Patterns starting with `//?/:/...` will match + file paths starting with `:/...`, and vice versa, + as if the `//?/` was not present. This behavior only is + present when the drive letters are a case-insensitive match to + one another. The remaining portions of the path/pattern are + compared case sensitively, unless `nocase:true` is set. + +Note that specifying a UNC path using `\` characters as path +separators is always allowed in the file path argument, but only +allowed in the pattern argument when `windowsPathsNoEscape: true` +is set in the options. + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require('minimatch').Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +- `pattern` The original pattern the minimatch object represents. +- `options` The options supplied to the constructor. +- `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +- `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +- `negate` True if the pattern is negated. +- `comment` True if the pattern is a comment. +- `empty` True if the pattern is `""`. + +### Methods + +- `makeRe()` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +- `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +- `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. +- `hasMagic()` Returns true if the parsed pattern contains any + magic characters. Returns false if all comparator parts are + string literals. If the `magicalBraces` option is set on the + constructor, then it will consider brace expansions which are + not otherwise magical to be magic. If not set, then a pattern + like `a{b,c}d` will return `false`, because neither `abd` nor + `acd` contain any special glob characters. + + This does **not** mean that the pattern string can be used as a + literal filename, as it may contain magic glob characters that + are escaped. For example, the pattern `\\*` or `[*]` would not + be considered to have magic, as the matching portion parses to + the literal string `'*'` and would match a path named `'*'`, + not `'\\*'` or `'[*]'`. The `minimatch.unescape()` method may + be used to remove escape characters. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, '*.js', { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true })) +``` + +### minimatch.escape(pattern, options = {}) + +Escape all magic characters in a glob pattern, so that it will +only ever match literal strings + +If the `windowsPathsNoEscape` option is used, then characters are +escaped by wrapping in `[]`, because a magic character wrapped in +a character class can only be satisfied by that exact character. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +### minimatch.unescape(pattern, options = {}) + +Un-escape a glob string that may contain some escaped characters. + +If the `windowsPathsNoEscape` option is used, then square-brace +escapes are removed, but not backslash escapes. For example, it +will turn the string `'[*]'` into `*`, but it will not turn +`'\\*'` into `'*'`, because `\` is a path separator in +`windowsPathsNoEscape` mode. + +When `windowsPathsNoEscape` is not set, then both brace escapes +and backslash escapes are removed. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, '*.js', { matchBase: true }) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nocaseMagicOnly + +When used with `{nocase: true}`, create regular expressions that +are case-insensitive, but leave string match portions untouched. +Has no effect when used without `{nocase: true}` + +Useful when some other form of case-insensitive matching is used, +or if the original string representation is useful in some other +way. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### magicalBraces + +This only affects the results of the `Minimatch.hasMagic` method. + +If the pattern contains brace expansions, such as `a{b,c}d`, but +no other magic characters, then the `Minimatch.hasMagic()` method +will return `false` by default. When this option set, it will +return `true` for brace expansion as well as other magic glob +characters. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + +### partial + +Compare a partial path to a pattern. As long as the parts of the path that +are present are not contradicted by the pattern, it will be treated as a +match. This is useful in applications where you're walking through a +folder structure, and don't yet have the full path, but want to ensure that +you do not walk down paths that can never be a match. + +For example, + +```js +minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d +minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d +minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a +``` + +### windowsPathsNoEscape + +Use `\\` as a path separator _only_, and _never_ as an escape +character. If set, all `\\` characters are replaced with `/` in +the pattern. Note that this makes it **impossible** to match +against paths containing literal glob pattern characters, but +allows matching with patterns constructed using `path.join()` and +`path.resolve()` on Windows platforms, mimicking the (buggy!) +behavior of earlier versions on Windows. Please use with +caution, and be mindful of [the caveat about Windows +paths](#windows). + +For legacy reasons, this is also set if +`options.allowWindowsEscape` is set to the exact value `false`. + +### windowsNoMagicRoot + +When a pattern starts with a UNC path or drive letter, and in +`nocase:true` mode, do not convert the root portions of the +pattern into a case-insensitive regular expression, and instead +leave them as strings. + +This is the default when the platform is `win32` and +`nocase:true` is set. + +### preserveMultipleSlashes + +By default, multiple `/` characters (other than the leading `//` +in a UNC path, see "UNC Paths" above) are treated as a single +`/`. + +That is, a pattern like `a///b` will match the file path `a/b`. + +Set `preserveMultipleSlashes: true` to suppress this behavior. + +### optimizationLevel + +A number indicating the level of optimization that should be done +to the pattern prior to parsing and using it for matches. + +Globstar parts `**` are always converted to `*` when `noglobstar` +is set, and multiple adjacent `**` parts are converted into a +single `**` (ie, `a/**/**/b` will be treated as `a/**/b`, as this +is equivalent in all cases). + +- `0` - Make no further changes. In this mode, `.` and `..` are + maintained in the pattern, meaning that they must also appear + in the same position in the test path string. Eg, a pattern + like `a/*/../c` will match the string `a/b/../c` but not the + string `a/c`. +- `1` - (default) Remove cases where a double-dot `..` follows a + pattern portion that is not `**`, `.`, `..`, or empty `''`. For + example, the pattern `./a/b/../*` is converted to `./a/*`, and + so it will match the path string `./a/c`, but not the path + string `./a/b/../c`. Dots and empty path portions in the + pattern are preserved. +- `2` (or higher) - Much more aggressive optimizations, suitable + for use with file-walking cases: + + - Remove cases where a double-dot `..` follows a pattern + portion that is not `**`, `.`, or empty `''`. Remove empty + and `.` portions of the pattern, where safe to do so (ie, + anywhere other than the last position, the first position, or + the second position in a pattern starting with `/`, as this + may indicate a UNC path on Windows). + - Convert patterns containing `
              /**/../

              /` into the + equivalent `

              /{..,**}/

              /`, where `

              ` is a + a pattern portion other than `.`, `..`, `**`, or empty + `''`. + - Dedupe patterns where a `**` portion is present in one and + omitted in another, and it is not the final path portion, and + they are otherwise equivalent. So `{a/**/b,a/b}` becomes + `a/**/b`, because `**` matches against an empty path portion. + - Dedupe patterns where a `*` portion is present in one, and a + non-dot pattern other than `**`, `.`, `..`, or `''` is in the + same position in the other. So `a/{*,x}/b` becomes `a/*/b`, + because `*` can match against `x`. + + While these optimizations improve the performance of + file-walking use cases such as [glob](http://npm.im/glob) (ie, + the reason this module exists), there are cases where it will + fail to match a literal string that would have been matched in + optimization level 1 or 0. + + Specifically, while the `Minimatch.match()` method will + optimize the file path string in the same ways, resulting in + the same matches, it will fail when tested with the regular + expression provided by `Minimatch.makeRe()`, unless the path + string is first processed with + `minimatch.levelTwoFileOptimize()` or similar. + +### platform + +When set to `win32`, this will trigger all windows-specific +behaviors (special handling for UNC paths, and treating `\` as +separators in file paths for comparison.) + +Defaults to the value of `process.platform`. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a +worthwhile goal, some discrepancies exist between minimatch and +other implementations. Some are intentional, and some are +unavoidable. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +Negated extglob patterns are handled as closely as possible to +Bash semantics, but there are some cases with negative extglobs +which are exceedingly difficult to express in a JavaScript +regular expression. In particular the negated pattern +`!(*|)*` will in bash match anything that does +not start with ``. However, +`!(*)*` _will_ match paths starting with +``, because the empty string can match against +the negated portion. In this library, `!(*|)*` +will _not_ match any pattern starting with ``, due to a +difference in precisely which patterns are considered "greedy" in +Regular Expressions vs bash path expansion. This may be fixable, +but not without incurring some complexity and performance costs, +and the trade-off seems to not be worth pursuing. + +Note that `fnmatch(3)` in libc is an extremely naive string comparison +matcher, which does not do anything special for slashes. This library is +designed to be used in glob searching and file walkers, and so it does do +special things with `/`. Thus, `foo*` will not match `foo/bar` in this +library, even though it would in `fnmatch(3)`. diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json new file mode 100644 index 0000000000..01fc48ecfd --- /dev/null +++ b/node_modules/minimatch/package.json @@ -0,0 +1,82 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "name": "minimatch", + "description": "a glob matcher in javascript", + "version": "9.0.5", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "benchmark": "node benchmark/index.js", + "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.0", + "@types/node": "^18.15.11", + "@types/tap": "^15.0.8", + "eslint-config-prettier": "^8.6.0", + "mkdirp": "1", + "prettier": "^2.8.2", + "tap": "^18.7.2", + "ts-node": "^10.9.1", + "tshy": "^1.12.0", + "typedoc": "^0.23.21", + "typescript": "^4.9.3" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "license": "ISC", + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "type": "module" +} diff --git a/node_modules/minimist/.eslintrc b/node_modules/minimist/.eslintrc new file mode 100644 index 0000000000..bd1a5e046b --- /dev/null +++ b/node_modules/minimist/.eslintrc @@ -0,0 +1,29 @@ +{ + "root": true, + + "extends": "@ljharb/eslint-config/node/0.4", + + "rules": { + "array-element-newline": 0, + "complexity": 0, + "func-style": [2, "declaration"], + "max-lines-per-function": 0, + "max-nested-callbacks": 1, + "max-statements-per-line": 1, + "max-statements": 0, + "multiline-comment-style": 0, + "no-continue": 1, + "no-param-reassign": 1, + "no-restricted-syntax": 1, + "object-curly-newline": 0, + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "camelcase": 0, + }, + }, + ] +} diff --git a/node_modules/minimist/.github/FUNDING.yml b/node_modules/minimist/.github/FUNDING.yml new file mode 100644 index 0000000000..a9366222e9 --- /dev/null +++ b/node_modules/minimist/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/minimist +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/minimist/.nycrc b/node_modules/minimist/.nycrc new file mode 100644 index 0000000000..55c3d29367 --- /dev/null +++ b/node_modules/minimist/.nycrc @@ -0,0 +1,14 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "example", + "test" + ] +} diff --git a/node_modules/minimist/CHANGELOG.md b/node_modules/minimist/CHANGELOG.md new file mode 100644 index 0000000000..c9a1e15e6c --- /dev/null +++ b/node_modules/minimist/CHANGELOG.md @@ -0,0 +1,298 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) +- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) +- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) +- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) +- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) +- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) +- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) + +## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) +- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) +- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) +- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) +- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) +- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) +- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) +- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) +- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) +- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) +- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) + +## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 + +### Commits + +- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) +- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) +- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) + +## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 + +## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 + +### Commits + +- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) +- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) + +## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 + +### Commits + +- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) +- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) + +## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 + +### Commits + +- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) +- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) +- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) +- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) + +## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 + +### Merged + +- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) + +### Commits + +- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) +- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) + +## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 + +### Commits + +- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) +- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) +- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) +- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) +- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) + +## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 + +### Commits + +- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) +- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) + +## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 + +### Commits + +- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) +- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) +- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) + +## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 + +### Commits + +- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) +- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) +- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) +- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) + +## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 + +### Commits + +- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) +- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) +- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) +- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) + +## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 + +### Commits + +- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) +- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) + +## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) + +## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) + +## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 + +## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 + +### Commits + +- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) + +## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 + +### Commits + +- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) +- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) +- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) + +## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 + +### Commits + +- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) +- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) +- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) +- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) +- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) + +## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 + +### Commits + +- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) + +## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 + +### Commits + +- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) +- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) + +## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 + +### Commits + +- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) + +## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 + +### Commits + +- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) + +## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 + +### Commits + +- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) + +## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 + +## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 + +### Commits + +- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) +- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) + +## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 + +### Commits + +- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) +- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) + +## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 + +### Commits + +- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) + +## v0.0.0 - 2013-06-25 + +### Commits + +- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) +- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) +- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) +- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) +- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) +- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) +- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) +- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) +- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) +- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) +- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE new file mode 100644 index 0000000000..ee27ba4b44 --- /dev/null +++ b/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/README.md b/node_modules/minimist/README.md new file mode 100644 index 0000000000..74da3234b4 --- /dev/null +++ b/node_modules/minimist/README.md @@ -0,0 +1,121 @@ +# minimist [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ + _: ['foo', 'bar', 'baz'], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' +} +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { + _: ['one', 'two', 'three'], + '--': ['four', 'five', '--six'] + } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/minimist +[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg +[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/minimist.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/minimist.svg +[downloads-url]: https://npm-stat.com/charts.html?package=minimist +[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist +[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js new file mode 100644 index 0000000000..9d90ffb264 --- /dev/null +++ b/node_modules/minimist/example/parse.js @@ -0,0 +1,4 @@ +'use strict'; + +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js new file mode 100644 index 0000000000..f020f3940e --- /dev/null +++ b/node_modules/minimist/index.js @@ -0,0 +1,263 @@ +'use strict'; + +function hasKey(obj, keys) { + var o = obj; + keys.slice(0, -1).forEach(function (key) { + o = o[key] || {}; + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber(x) { + if (typeof x === 'number') { return true; } + if ((/^0x[0-9a-f]+$/i).test(x)) { return true; } + return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x); +} + +function isConstructorOrProto(obj, key) { + return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__'; +} + +module.exports = function (args, opts) { + if (!opts) { opts = {}; } + + var flags = { + bools: {}, + strings: {}, + unknownFn: null, + }; + + if (typeof opts.unknown === 'function') { + flags.unknownFn = opts.unknown; + } + + if (typeof opts.boolean === 'boolean' && opts.boolean) { + flags.allBools = true; + } else { + [].concat(opts.boolean).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + [].concat(aliases[key]).forEach(function (k) { + flags.strings[k] = true; + }); + } + }); + + var defaults = opts.default || {}; + + var argv = { _: [] }; + + function argDefined(key, arg) { + return (flags.allBools && (/^--[^=]+$/).test(arg)) + || flags.strings[key] + || flags.bools[key] + || aliases[key]; + } + + function setKey(obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length - 1; i++) { + var key = keys[i]; + if (isConstructorOrProto(o, key)) { return; } + if (o[key] === undefined) { o[key] = {}; } + if ( + o[key] === Object.prototype + || o[key] === Number.prototype + || o[key] === String.prototype + ) { + o[key] = {}; + } + if (o[key] === Array.prototype) { o[key] = []; } + o = o[key]; + } + + var lastKey = keys[keys.length - 1]; + if (isConstructorOrProto(o, lastKey)) { return; } + if ( + o === Object.prototype + || o === Number.prototype + || o === String.prototype + ) { + o = {}; + } + if (o === Array.prototype) { o = []; } + if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') { + o[lastKey] = value; + } else if (Array.isArray(o[lastKey])) { + o[lastKey].push(value); + } else { + o[lastKey] = [o[lastKey], value]; + } + } + + function setArg(key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) { return; } + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) + : val; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--') + 1); + args = args.slice(0, args.indexOf('--')); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + var key; + var next; + + if ((/^--.+=/).test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } else if ((/^--no-.+/).test(arg)) { + key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } else if ((/^--.+/).test(arg)) { + key = arg.match(/^--(.+)/)[1]; + next = args[i + 1]; + if ( + next !== undefined + && !(/^(-|--)[^-]/).test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, next, arg); + i += 1; + } else if ((/^(true|false)$/).test(next)) { + setArg(key, next === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } else if ((/^-[^-]+/).test(arg)) { + var letters = arg.slice(1, -1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + + if (next === '-') { + setArg(letters[j], next, arg); + continue; + } + + if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') { + setArg(letters[j], next.slice(1), arg); + broken = true; + break; + } + + if ( + (/[A-Za-z]/).test(letters[j]) + && (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next) + ) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j + 1] && letters[j + 1].match(/\W/)) { + setArg(letters[j], arg.slice(j + 2), arg); + broken = true; + break; + } else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if ( + args[i + 1] + && !(/^(-|--)[^-]/).test(args[i + 1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true) + ) { + setArg(key, args[i + 1], arg); + i += 1; + } else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) { + setArg(key, args[i + 1] === 'true', arg); + i += 1; + } else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg)); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (k) { + if (!hasKey(argv, k.split('.'))) { + setKey(argv, k.split('.'), defaults[k]); + + (aliases[k] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[k]); + }); + } + }); + + if (opts['--']) { + argv['--'] = notFlags.slice(); + } else { + notFlags.forEach(function (k) { + argv._.push(k); + }); + } + + return argv; +}; diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json new file mode 100644 index 0000000000..c10a334441 --- /dev/null +++ b/node_modules/minimist/package.json @@ -0,0 +1,75 @@ +{ + "name": "minimist", + "version": "1.2.8", + "description": "parse argument options", + "main": "index.js", + "devDependencies": { + "@ljharb/eslint-config": "^21.0.1", + "aud": "^2.0.2", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.6.3" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/minimistjs/minimist.git" + }, + "homepage": "https://github.com/minimistjs/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js new file mode 100644 index 0000000000..befa0c9976 --- /dev/null +++ b/node_modules/minimist/test/all_bool.js @@ -0,0 +1,34 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js new file mode 100644 index 0000000000..e58d47e442 --- /dev/null +++ b/node_modules/minimist/test/bool.js @@ -0,0 +1,177 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false }, + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse(['-x', '-z', 'one', 'two', 'three'], { + boolean: ['x', 'y', 'z'], + }); + + t.deepEqual(argv, { + x: true, + y: false, + z: true, + _: ['one', 'two', 'three'], + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var opts = { + alias: { h: 'herp' }, + boolean: 'herp', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var alt = ['--harp', 'derp']; + var opts = { + alias: { h: ['herp', 'harp'] }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = ['-h', 'true']; + var regular = ['--herp', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: [], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function (t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + _: ['true.txt'], + }; + + t.same(result, expected); + t.end(); +}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js new file mode 100644 index 0000000000..707881771e --- /dev/null +++ b/node_modules/minimist/test/dash.js @@ -0,0 +1,43 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(6); + t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); + t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); + t.deepEqual(parse(['-']), { _: ['-'] }); + t.deepEqual(parse(['-f-']), { f: '-', _: [] }); + t.deepEqual( + parse(['-b', '-'], { boolean: 'b' }), + { b: true, _: ['-'] } + ); + t.deepEqual( + parse(['-s', '-'], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(2); + t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); + t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); +}); + +test('move arguments after the -- into their own `--` array', function (t) { + t.plan(1); + t.deepEqual( + parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), + { name: 'John', _: ['before'], '--': ['after'] } + ); +}); + +test('--- option value', function (t) { + // A multi-dash value is largely an edge case, but check the behaviour is as expected, + // and in particular the same for short option and long option (as made consistent in Jan 2023). + t.plan(2); + t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); + t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); +}); + diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js new file mode 100644 index 0000000000..4e9f6250f0 --- /dev/null +++ b/node_modules/minimist/test/default_bool.js @@ -0,0 +1,37 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true }, + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false }, + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argv.maybe, null); + + var argvLong = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null }, + }); + t.equal(argvLong.maybe, true); + t.end(); +}); diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js new file mode 100644 index 0000000000..126ff033b4 --- /dev/null +++ b/node_modules/minimist/test/dotted.js @@ -0,0 +1,24 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', { default: { 'a.b': 11 } }); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js new file mode 100644 index 0000000000..6d1b53a7a7 --- /dev/null +++ b/node_modules/minimist/test/kv_short.js @@ -0,0 +1,32 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-b=123']); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v', function (t) { + t.plan(1); + + var argv = parse(['-a=whatever', '-b=robots']); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); + +test('short with embedded equals -k=a=b', function (t) { + t.plan(1); + + var argv = parse(['-k=a=b']); + t.deepEqual(argv, { k: 'a=b', _: [] }); +}); + +test('short with later equals like -ab=c', function (t) { + t.plan(1); + + var argv = parse(['-ab=c']); + t.deepEqual(argv, { a: true, b: 'c', _: [] }); +}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js new file mode 100644 index 0000000000..9fef51f1fa --- /dev/null +++ b/node_modules/minimist/test/long.js @@ -0,0 +1,33 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse(['--bool']), + { bool: true, _: [] }, + 'long boolean' + ); + t.deepEqual( + parse(['--pow', 'xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture sp' + ); + t.deepEqual( + parse(['--pow=xixxle']), + { pow: 'xixxle', _: [] }, + 'long capture eq' + ); + t.deepEqual( + parse(['--host', 'localhost', '--port', '555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures sp' + ); + t.deepEqual( + parse(['--host=localhost', '--port=555']), + { host: 'localhost', port: 555, _: [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js new file mode 100644 index 0000000000..074393ecaf --- /dev/null +++ b/node_modules/minimist/test/num.js @@ -0,0 +1,38 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789', + ]); + t.deepEqual(argv, { + x: 1234, + y: 5.67, + z: 1e7, + w: '10f', + hex: 0xdeadbeef, + _: [789], + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse(['-x', 1234, 789]); + t.deepEqual(argv, { x: 1234, _: [789] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js new file mode 100644 index 0000000000..65d9d90927 --- /dev/null +++ b/node_modules/minimist/test/parse.js @@ -0,0 +1,209 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse(['--no-moo']), + { moo: false, _: [] }, + 'no' + ); + t.deepEqual( + parse(['-v', 'a', '-v', 'b', '-v', 'c']), + { v: ['a', 'b', 'c'], _: [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek', + ]), + { + c: true, + a: true, + t: true, + s: 'woo', + h: 'awesome', + b: true, + bool: true, + key: 'value', + multi: ['quux', 'baz'], + meep: false, + name: 'meowmers', + _: ['bare', '--not-a-flag', 'eek'], + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse(['-t', 'moo'], { boolean: 't' }); + t.deepEqual(argv, { t: true, _: ['moo'] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: ['t', 'verbose'], + default: { verbose: true }, + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params', function (t) { + var args = parse(['-s', 'X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse(['--s=X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + t.end(); +}); + +test('strings', function (t) { + var s = parse(['-s', '0001234'], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse(['-x', '56'], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([' ', ' '], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function (t) { + var s = parse(['-s'], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse(['--str'], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse(['-art'], { + string: ['a', 't'], + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + +test('string and alias', function (t) { + var x = parse(['--str', '000123'], { + string: 's', + alias: { s: 'str' }, + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse(['-s', '000123'], { + string: 'str', + alias: { str: 's' }, + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + + var z = parse(['-s123'], { + alias: { str: ['s', 'S'] }, + string: ['str'], + }); + + t.deepEqual( + z, + { _: [], s: '123', S: '123', str: '123' }, + 'opt.string works with multiple aliases' + ); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse(['-I/foo/bar/baz']), + { I: '/foo/bar/baz', _: [] } + ); + t.same( + parse(['-xyz/foo/bar/baz']), + { x: true, y: true, z: '/foo/bar/baz', _: [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: 'zoom' }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: ['zm', 'zoom'] }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop', + ]); + + t.same(argv.foo, { + bar: 3, + baz: 4, + quux: { + quibble: 5, + o_O: true, + }, + }); + t.same(argv.beep, { boop: true }); + t.end(); +}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js new file mode 100644 index 0000000000..32965d130f --- /dev/null +++ b/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,11 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions', function (t) { + t.plan(1); + + var argv = parse(['-b', '123'], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff --git a/node_modules/minimist/test/proto.js b/node_modules/minimist/test/proto.js new file mode 100644 index 0000000000..6e629dd34e --- /dev/null +++ b/node_modules/minimist/test/proto.js @@ -0,0 +1,64 @@ +'use strict'; + +/* eslint no-proto: 0 */ + +var parse = require('../'); +var test = require('tape'); + +test('proto pollution', function (t) { + var argv = parse(['--__proto__.x', '123']); + t.equal({}.x, undefined); + t.equal(argv.__proto__.x, undefined); + t.equal(argv.x, undefined); + t.end(); +}); + +test('proto pollution (array)', function (t) { + var argv = parse(['--x', '4', '--x', '5', '--x.__proto__.z', '789']); + t.equal({}.z, undefined); + t.deepEqual(argv.x, [4, 5]); + t.equal(argv.x.z, undefined); + t.equal(argv.x.__proto__.z, undefined); + t.end(); +}); + +test('proto pollution (number)', function (t) { + var argv = parse(['--x', '5', '--x.__proto__.z', '100']); + t.equal({}.z, undefined); + t.equal((4).z, undefined); + t.equal(argv.x, 5); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (string)', function (t) { + var argv = parse(['--x', 'abc', '--x.__proto__.z', 'def']); + t.equal({}.z, undefined); + t.equal('...'.z, undefined); + t.equal(argv.x, 'abc'); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (constructor)', function (t) { + var argv = parse(['--constructor.prototype.y', '123']); + t.equal({}.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +test('proto pollution (constructor function)', function (t) { + var argv = parse(['--_.concat.constructor.prototype.y', '123']); + function fnToBeTested() {} + t.equal(fnToBeTested.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +// powered by snyk - https://github.com/backstage/backstage/issues/10343 +test('proto pollution (constructor function) snyk', function (t) { + var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); + t.equal(function () {}.foo, undefined); + t.equal(argv.y, undefined); + t.end(); +}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js new file mode 100644 index 0000000000..4a7b84385b --- /dev/null +++ b/node_modules/minimist/test/short.js @@ -0,0 +1,69 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse(['-n123']), { n: 123, _: [] }); + t.deepEqual( + parse(['-123', '456']), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse(['-b']), + { b: true, _: [] }, + 'short boolean' + ); + t.deepEqual( + parse(['foo', 'bar', 'baz']), + { _: ['foo', 'bar', 'baz'] }, + 'bare' + ); + t.deepEqual( + parse(['-cats']), + { c: true, a: true, t: true, s: true, _: [] }, + 'group' + ); + t.deepEqual( + parse(['-cats', 'meow']), + { c: true, a: true, t: true, s: 'meow', _: [] }, + 'short group next' + ); + t.deepEqual( + parse(['-h', 'localhost']), + { h: 'localhost', _: [] }, + 'short capture' + ); + t.deepEqual( + parse(['-h', 'localhost', '-p', '555']), + { h: 'localhost', p: 555, _: [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js new file mode 100644 index 0000000000..52a6a91903 --- /dev/null +++ b/node_modules/minimist/test/stop_early.js @@ -0,0 +1,17 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true, + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'], + }); + + t.end(); +}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js new file mode 100644 index 0000000000..4f2e0ca447 --- /dev/null +++ b/node_modules/minimist/test/unknown.js @@ -0,0 +1,104 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'true', '--derp', 'true']; + var regular = ['--herp', 'true', '-d', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn, + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [], + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello', '--derp', 'goodbye']; + var regular = ['--herp', 'hello', '-d', 'moon']; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['-h', 'hello']; + var regular = ['--herp', 'hello']; + var opts = { + default: { h: 'bar' }, + alias: { h: 'herp' }, + unknown: unknownFn, + }; + parse(aliased, opts); + parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = ['--bad', '--', 'good', 'arg']; + var opts = { + '--': true, + unknown: unknownFn, + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + _: [], + }); + t.end(); +}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js new file mode 100644 index 0000000000..4fdaf1d394 --- /dev/null +++ b/node_modules/minimist/test/whitespace.js @@ -0,0 +1,10 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace', function (t) { + t.plan(1); + var x = parse(['-x', '\t']).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/minipass/LICENSE b/node_modules/minipass/LICENSE new file mode 100644 index 0000000000..97f8e32ed8 --- /dev/null +++ b/node_modules/minipass/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minipass/README.md b/node_modules/minipass/README.md new file mode 100644 index 0000000000..1126330582 --- /dev/null +++ b/node_modules/minipass/README.md @@ -0,0 +1,825 @@ +# minipass + +A _very_ minimal implementation of a [PassThrough +stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough) + +[It's very +fast](https://docs.google.com/spreadsheets/d/1K_HR5oh3r80b8WVMWCPPjfuWXUgfkmhlX7FGI6JJ8tY/edit?usp=sharing) +for objects, strings, and buffers. + +Supports `pipe()`ing (including multi-`pipe()` and backpressure +transmission), buffering data until either a `data` event handler +or `pipe()` is added (so you don't lose the first chunk), and +most other cases where PassThrough is a good idea. + +There is a `read()` method, but it's much more efficient to +consume data from this stream via `'data'` events or by calling +`pipe()` into some other stream. Calling `read()` requires the +buffer to be flattened in some cases, which requires copying +memory. + +If you set `objectMode: true` in the options, then whatever is +written will be emitted. Otherwise, it'll do a minimal amount of +Buffer copying to ensure proper Streams semantics when `read(n)` +is called. + +`objectMode` can only be set at instantiation. Attempting to +write something other than a String or Buffer without having set +`objectMode` in the options will throw an error. + +This is not a `through` or `through2` stream. It doesn't +transform the data, it just passes it right through. If you want +to transform the data, extend the class, and override the +`write()` method. Once you're done transforming the data however +you want, call `super.write()` with the transform output. + +For some examples of streams that extend Minipass in various +ways, check out: + +- [minizlib](http://npm.im/minizlib) +- [fs-minipass](http://npm.im/fs-minipass) +- [tar](http://npm.im/tar) +- [minipass-collect](http://npm.im/minipass-collect) +- [minipass-flush](http://npm.im/minipass-flush) +- [minipass-pipeline](http://npm.im/minipass-pipeline) +- [tap](http://npm.im/tap) +- [tap-parser](http://npm.im/tap-parser) +- [treport](http://npm.im/treport) +- [minipass-fetch](http://npm.im/minipass-fetch) +- [pacote](http://npm.im/pacote) +- [make-fetch-happen](http://npm.im/make-fetch-happen) +- [cacache](http://npm.im/cacache) +- [ssri](http://npm.im/ssri) +- [npm-registry-fetch](http://npm.im/npm-registry-fetch) +- [minipass-json-stream](http://npm.im/minipass-json-stream) +- [minipass-sized](http://npm.im/minipass-sized) + +## Usage in TypeScript + +The `Minipass` class takes three type template definitions: + +- `RType` the type being read, which defaults to `Buffer`. If + `RType` is `string`, then the constructor _must_ get an options + object specifying either an `encoding` or `objectMode: true`. + If it's anything other than `string` or `Buffer`, then it + _must_ get an options object specifying `objectMode: true`. +- `WType` the type being written. If `RType` is `Buffer` or + `string`, then this defaults to `ContiguousData` (Buffer, + string, ArrayBuffer, or ArrayBufferView). Otherwise, it + defaults to `RType`. +- `Events` type mapping event names to the arguments emitted + with that event, which extends `Minipass.Events`. + +To declare types for custom events in subclasses, extend the +third parameter with your own event signatures. For example: + +```js +import { Minipass } from 'minipass' + +// a NDJSON stream that emits 'jsonError' when it can't stringify +export interface Events extends Minipass.Events { + jsonError: [e: Error] +} + +export class NDJSONStream extends Minipass { + constructor() { + super({ objectMode: true }) + } + + // data is type `any` because that's WType + write(data, encoding, cb) { + try { + const json = JSON.stringify(data) + return super.write(json + '\n', encoding, cb) + } catch (er) { + if (!er instanceof Error) { + er = Object.assign(new Error('json stringify failed'), { + cause: er, + }) + } + // trying to emit with something OTHER than an error will + // fail, because we declared the event arguments type. + this.emit('jsonError', er) + } + } +} + +const s = new NDJSONStream() +s.on('jsonError', e => { + // here, TS knows that e is an Error +}) +``` + +Emitting/handling events that aren't declared in this way is +fine, but the arguments will be typed as `unknown`. + +## Differences from Node.js Streams + +There are several things that make Minipass streams different +from (and in some ways superior to) Node.js core streams. + +Please read these caveats if you are familiar with node-core +streams and intend to use Minipass streams in your programs. + +You can avoid most of these differences entirely (for a very +small performance penalty) by setting `{async: true}` in the +constructor options. + +### Timing + +Minipass streams are designed to support synchronous use-cases. +Thus, data is emitted as soon as it is available, always. It is +buffered until read, but no longer. Another way to look at it is +that Minipass streams are exactly as synchronous as the logic +that writes into them. + +This can be surprising if your code relies on +`PassThrough.write()` always providing data on the next tick +rather than the current one, or being able to call `resume()` and +not have the entire buffer disappear immediately. + +However, without this synchronicity guarantee, there would be no +way for Minipass to achieve the speeds it does, or support the +synchronous use cases that it does. Simply put, waiting takes +time. + +This non-deferring approach makes Minipass streams much easier to +reason about, especially in the context of Promises and other +flow-control mechanisms. + +Example: + +```js +// hybrid module, either works +import { Minipass } from 'minipass' +// or: +const { Minipass } = require('minipass') + +const stream = new Minipass() +stream.on('data', () => console.log('data event')) +console.log('before write') +stream.write('hello') +console.log('after write') +// output: +// before write +// data event +// after write +``` + +### Exception: Async Opt-In + +If you wish to have a Minipass stream with behavior that more +closely mimics Node.js core streams, you can set the stream in +async mode either by setting `async: true` in the constructor +options, or by setting `stream.async = true` later on. + +```js +// hybrid module, either works +import { Minipass } from 'minipass' +// or: +const { Minipass } = require('minipass') + +const asyncStream = new Minipass({ async: true }) +asyncStream.on('data', () => console.log('data event')) +console.log('before write') +asyncStream.write('hello') +console.log('after write') +// output: +// before write +// after write +// data event <-- this is deferred until the next tick +``` + +Switching _out_ of async mode is unsafe, as it could cause data +corruption, and so is not enabled. Example: + +```js +import { Minipass } from 'minipass' +const stream = new Minipass({ encoding: 'utf8' }) +stream.on('data', chunk => console.log(chunk)) +stream.async = true +console.log('before writes') +stream.write('hello') +setStreamSyncAgainSomehow(stream) // <-- this doesn't actually exist! +stream.write('world') +console.log('after writes') +// hypothetical output would be: +// before writes +// world +// after writes +// hello +// NOT GOOD! +``` + +To avoid this problem, once set into async mode, any attempt to +make the stream sync again will be ignored. + +```js +const { Minipass } = require('minipass') +const stream = new Minipass({ encoding: 'utf8' }) +stream.on('data', chunk => console.log(chunk)) +stream.async = true +console.log('before writes') +stream.write('hello') +stream.async = false // <-- no-op, stream already async +stream.write('world') +console.log('after writes') +// actual output: +// before writes +// after writes +// hello +// world +``` + +### No High/Low Water Marks + +Node.js core streams will optimistically fill up a buffer, +returning `true` on all writes until the limit is hit, even if +the data has nowhere to go. Then, they will not attempt to draw +more data in until the buffer size dips below a minimum value. + +Minipass streams are much simpler. The `write()` method will +return `true` if the data has somewhere to go (which is to say, +given the timing guarantees, that the data is already there by +the time `write()` returns). + +If the data has nowhere to go, then `write()` returns false, and +the data sits in a buffer, to be drained out immediately as soon +as anyone consumes it. + +Since nothing is ever buffered unnecessarily, there is much less +copying data, and less bookkeeping about buffer capacity levels. + +### Hazards of Buffering (or: Why Minipass Is So Fast) + +Since data written to a Minipass stream is immediately written +all the way through the pipeline, and `write()` always returns +true/false based on whether the data was fully flushed, +backpressure is communicated immediately to the upstream caller. +This minimizes buffering. + +Consider this case: + +```js +const { PassThrough } = require('stream') +const p1 = new PassThrough({ highWaterMark: 1024 }) +const p2 = new PassThrough({ highWaterMark: 1024 }) +const p3 = new PassThrough({ highWaterMark: 1024 }) +const p4 = new PassThrough({ highWaterMark: 1024 }) + +p1.pipe(p2).pipe(p3).pipe(p4) +p4.on('data', () => console.log('made it through')) + +// this returns false and buffers, then writes to p2 on next tick (1) +// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2) +// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3) +// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain' +// on next tick (4) +// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and +// 'drain' on next tick (5) +// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6) +// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next +// tick (7) + +p1.write(Buffer.alloc(2048)) // returns false +``` + +Along the way, the data was buffered and deferred at each stage, +and multiple event deferrals happened, for an unblocked pipeline +where it was perfectly safe to write all the way through! + +Furthermore, setting a `highWaterMark` of `1024` might lead +someone reading the code to think an advisory maximum of 1KiB is +being set for the pipeline. However, the actual advisory +buffering level is the _sum_ of `highWaterMark` values, since +each one has its own bucket. + +Consider the Minipass case: + +```js +const m1 = new Minipass() +const m2 = new Minipass() +const m3 = new Minipass() +const m4 = new Minipass() + +m1.pipe(m2).pipe(m3).pipe(m4) +m4.on('data', () => console.log('made it through')) + +// m1 is flowing, so it writes the data to m2 immediately +// m2 is flowing, so it writes the data to m3 immediately +// m3 is flowing, so it writes the data to m4 immediately +// m4 is flowing, so it fires the 'data' event immediately, returns true +// m4's write returned true, so m3 is still flowing, returns true +// m3's write returned true, so m2 is still flowing, returns true +// m2's write returned true, so m1 is still flowing, returns true +// No event deferrals or buffering along the way! + +m1.write(Buffer.alloc(2048)) // returns true +``` + +It is extremely unlikely that you _don't_ want to buffer any data +written, or _ever_ buffer data that can be flushed all the way +through. Neither node-core streams nor Minipass ever fail to +buffer written data, but node-core streams do a lot of +unnecessary buffering and pausing. + +As always, the faster implementation is the one that does less +stuff and waits less time to do it. + +### Immediately emit `end` for empty streams (when not paused) + +If a stream is not paused, and `end()` is called before writing +any data into it, then it will emit `end` immediately. + +If you have logic that occurs on the `end` event which you don't +want to potentially happen immediately (for example, closing file +descriptors, moving on to the next entry in an archive parse +stream, etc.) then be sure to call `stream.pause()` on creation, +and then `stream.resume()` once you are ready to respond to the +`end` event. + +However, this is _usually_ not a problem because: + +### Emit `end` When Asked + +One hazard of immediately emitting `'end'` is that you may not +yet have had a chance to add a listener. In order to avoid this +hazard, Minipass streams safely re-emit the `'end'` event if a +new listener is added after `'end'` has been emitted. + +Ie, if you do `stream.on('end', someFunction)`, and the stream +has already emitted `end`, then it will call the handler right +away. (You can think of this somewhat like attaching a new +`.then(fn)` to a previously-resolved Promise.) + +To prevent calling handlers multiple times who would not expect +multiple ends to occur, all listeners are removed from the +`'end'` event whenever it is emitted. + +### Emit `error` When Asked + +The most recent error object passed to the `'error'` event is +stored on the stream. If a new `'error'` event handler is added, +and an error was previously emitted, then the event handler will +be called immediately (or on `process.nextTick` in the case of +async streams). + +This makes it much more difficult to end up trying to interact +with a broken stream, if the error handler is added after an +error was previously emitted. + +### Impact of "immediate flow" on Tee-streams + +A "tee stream" is a stream piping to multiple destinations: + +```js +const tee = new Minipass() +t.pipe(dest1) +t.pipe(dest2) +t.write('foo') // goes to both destinations +``` + +Since Minipass streams _immediately_ process any pending data +through the pipeline when a new pipe destination is added, this +can have surprising effects, especially when a stream comes in +from some other function and may or may not have data in its +buffer. + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone +src.pipe(dest2) // gets nothing! +``` + +One solution is to create a dedicated tee-stream junction that +pipes to both locations, and then pipe to _that_ instead. + +```js +// Safe example: tee to both places +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.pipe(dest1) +tee.pipe(dest2) +src.pipe(tee) // tee gets 'foo', pipes to both locations +``` + +The same caveat applies to `on('data')` event listeners. The +first one added will _immediately_ receive all of the data, +leaving nothing for the second: + +```js +// WARNING! WILL LOSE DATA! +const src = new Minipass() +src.write('foo') +src.on('data', handler1) // receives 'foo' right away +src.on('data', handler2) // nothing to see here! +``` + +Using a dedicated tee-stream can be used in this case as well: + +```js +// Safe example: tee to both data handlers +const src = new Minipass() +src.write('foo') +const tee = new Minipass() +tee.on('data', handler1) +tee.on('data', handler2) +src.pipe(tee) +``` + +All of the hazards in this section are avoided by setting `{ +async: true }` in the Minipass constructor, or by setting +`stream.async = true` afterwards. Note that this does add some +overhead, so should only be done in cases where you are willing +to lose a bit of performance in order to avoid having to refactor +program logic. + +## USAGE + +It's a stream! Use it like a stream and it'll most likely do what +you want. + +```js +import { Minipass } from 'minipass' +const mp = new Minipass(options) // options is optional +mp.write('foo') +mp.pipe(someOtherStream) +mp.end('bar') +``` + +### OPTIONS + +- `encoding` How would you like the data coming _out_ of the + stream to be encoded? Accepts any values that can be passed to + `Buffer.toString()`. +- `objectMode` Emit data exactly as it comes in. This will be + flipped on by default if you write() something other than a + string or Buffer at any point. Setting `objectMode: true` will + prevent setting any encoding value. +- `async` Defaults to `false`. Set to `true` to defer data + emission until next tick. This reduces performance slightly, + but makes Minipass streams use timing behavior closer to Node + core streams. See [Timing](#timing) for more details. +- `signal` An `AbortSignal` that will cause the stream to unhook + itself from everything and become as inert as possible. Note + that providing a `signal` parameter will make `'error'` events + no longer throw if they are unhandled, but they will still be + emitted to handlers if any are attached. + +### API + +Implements the user-facing portions of Node.js's `Readable` and +`Writable` streams. + +### Methods + +- `write(chunk, [encoding], [callback])` - Put data in. (Note + that, in the base Minipass class, the same data will come out.) + Returns `false` if the stream will buffer the next write, or + true if it's still in "flowing" mode. +- `end([chunk, [encoding]], [callback])` - Signal that you have + no more data to write. This will queue an `end` event to be + fired when all the data has been consumed. +- `pause()` - No more data for a while, please. This also + prevents `end` from being emitted for empty streams until the + stream is resumed. +- `resume()` - Resume the stream. If there's data in the buffer, + it is all discarded. Any buffered events are immediately + emitted. +- `pipe(dest)` - Send all output to the stream provided. When + data is emitted, it is immediately written to any and all pipe + destinations. (Or written on next tick in `async` mode.) +- `unpipe(dest)` - Stop piping to the destination stream. This is + immediate, meaning that any asynchronously queued data will + _not_ make it to the destination when running in `async` mode. + - `options.end` - Boolean, end the destination stream when the + source stream ends. Default `true`. + - `options.proxyErrors` - Boolean, proxy `error` events from + the source stream to the destination stream. Note that errors + are _not_ proxied after the pipeline terminates, either due + to the source emitting `'end'` or manually unpiping with + `src.unpipe(dest)`. Default `false`. +- `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are + EventEmitters. Some events are given special treatment, + however. (See below under "events".) +- `promise()` - Returns a Promise that resolves when the stream + emits `end`, or rejects if the stream emits `error`. +- `collect()` - Return a Promise that resolves on `end` with an + array containing each chunk of data that was emitted, or + rejects if the stream emits `error`. Note that this consumes + the stream data. +- `concat()` - Same as `collect()`, but concatenates the data + into a single Buffer object. Will reject the returned promise + if the stream is in objectMode, or if it goes into objectMode + by the end of the data. +- `read(n)` - Consume `n` bytes of data out of the buffer. If `n` + is not provided, then consume all of it. If `n` bytes are not + available, then it returns null. **Note** consuming streams in + this way is less efficient, and can lead to unnecessary Buffer + copying. +- `destroy([er])` - Destroy the stream. If an error is provided, + then an `'error'` event is emitted. If the stream has a + `close()` method, and has not emitted a `'close'` event yet, + then `stream.close()` will be called. Any Promises returned by + `.promise()`, `.collect()` or `.concat()` will be rejected. + After being destroyed, writing to the stream will emit an + error. No more data will be emitted if the stream is destroyed, + even if it was previously buffered. + +### Properties + +- `bufferLength` Read-only. Total number of bytes buffered, or in + the case of objectMode, the total number of objects. +- `encoding` Read-only. The encoding that has been set. +- `flowing` Read-only. Boolean indicating whether a chunk written + to the stream will be immediately emitted. +- `emittedEnd` Read-only. Boolean indicating whether the end-ish + events (ie, `end`, `prefinish`, `finish`) have been emitted. + Note that listening on any end-ish event will immediateyl + re-emit it if it has already been emitted. +- `writable` Whether the stream is writable. Default `true`. Set + to `false` when `end()` +- `readable` Whether the stream is readable. Default `true`. +- `pipes` An array of Pipe objects referencing streams that this + stream is piping into. +- `destroyed` A getter that indicates whether the stream was + destroyed. +- `paused` True if the stream has been explicitly paused, + otherwise false. +- `objectMode` Indicates whether the stream is in `objectMode`. +- `aborted` Readonly property set when the `AbortSignal` + dispatches an `abort` event. + +### Events + +- `data` Emitted when there's data to read. Argument is the data + to read. This is never emitted while not flowing. If a listener + is attached, that will resume the stream. +- `end` Emitted when there's no more data to read. This will be + emitted immediately for empty streams when `end()` is called. + If a listener is attached, and `end` was already emitted, then + it will be emitted again. All listeners are removed when `end` + is emitted. +- `prefinish` An end-ish event that follows the same logic as + `end` and is emitted in the same conditions where `end` is + emitted. Emitted after `'end'`. +- `finish` An end-ish event that follows the same logic as `end` + and is emitted in the same conditions where `end` is emitted. + Emitted after `'prefinish'`. +- `close` An indication that an underlying resource has been + released. Minipass does not emit this event, but will defer it + until after `end` has been emitted, since it throws off some + stream libraries otherwise. +- `drain` Emitted when the internal buffer empties, and it is + again suitable to `write()` into the stream. +- `readable` Emitted when data is buffered and ready to be read + by a consumer. +- `resume` Emitted when stream changes state from buffering to + flowing mode. (Ie, when `resume` is called, `pipe` is called, + or a `data` event listener is added.) + +### Static Methods + +- `Minipass.isStream(stream)` Returns `true` if the argument is a + stream, and false otherwise. To be considered a stream, the + object must be either an instance of Minipass, or an + EventEmitter that has either a `pipe()` method, or both + `write()` and `end()` methods. (Pretty much any stream in + node-land will return `true` for this.) + +## EXAMPLES + +Here are some examples of things you can do with Minipass +streams. + +### simple "are you done yet" promise + +```js +mp.promise().then( + () => { + // stream is finished + }, + er => { + // stream emitted an error + } +) +``` + +### collecting + +```js +mp.collect().then(all => { + // all is an array of all the data emitted + // encoding is supported in this case, so + // so the result will be a collection of strings if + // an encoding is specified, or buffers/objects if not. + // + // In an async function, you may do + // const data = await stream.collect() +}) +``` + +### collecting into a single blob + +This is a bit slower because it concatenates the data into one +chunk for you, but if you're going to do it yourself anyway, it's +convenient this way: + +```js +mp.concat().then(onebigchunk => { + // onebigchunk is a string if the stream + // had an encoding set, or a buffer otherwise. +}) +``` + +### iteration + +You can iterate over streams synchronously or asynchronously in +platforms that support it. + +Synchronous iteration will end when the currently available data +is consumed, even if the `end` event has not been reached. In +string and buffer mode, the data is concatenated, so unless +multiple writes are occurring in the same tick as the `read()`, +sync iteration loops will generally only have a single iteration. + +To consume chunks in this way exactly as they have been written, +with no flattening, create the stream with the `{ objectMode: +true }` option. + +```js +const mp = new Minipass({ objectMode: true }) +mp.write('a') +mp.write('b') +for (let letter of mp) { + console.log(letter) // a, b +} +mp.write('c') +mp.write('d') +for (let letter of mp) { + console.log(letter) // c, d +} +mp.write('e') +mp.end() +for (let letter of mp) { + console.log(letter) // e +} +for (let letter of mp) { + console.log(letter) // nothing +} +``` + +Asynchronous iteration will continue until the end event is reached, +consuming all of the data. + +```js +const mp = new Minipass({ encoding: 'utf8' }) + +// some source of some data +let i = 5 +const inter = setInterval(() => { + if (i-- > 0) mp.write(Buffer.from('foo\n', 'utf8')) + else { + mp.end() + clearInterval(inter) + } +}, 100) + +// consume the data with asynchronous iteration +async function consume() { + for await (let chunk of mp) { + console.log(chunk) + } + return 'ok' +} + +consume().then(res => console.log(res)) +// logs `foo\n` 5 times, and then `ok` +``` + +### subclass that `console.log()`s everything written into it + +```js +class Logger extends Minipass { + write(chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end(chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } +} + +someSource.pipe(new Logger()).pipe(someDest) +``` + +### same thing, but using an inline anonymous class + +```js +// js classes are fun +someSource + .pipe( + new (class extends Minipass { + emit(ev, ...data) { + // let's also log events, because debugging some weird thing + console.log('EMIT', ev) + return super.emit(ev, ...data) + } + write(chunk, encoding, callback) { + console.log('WRITE', chunk, encoding) + return super.write(chunk, encoding, callback) + } + end(chunk, encoding, callback) { + console.log('END', chunk, encoding) + return super.end(chunk, encoding, callback) + } + })() + ) + .pipe(someDest) +``` + +### subclass that defers 'end' for some reason + +```js +class SlowEnd extends Minipass { + emit(ev, ...args) { + if (ev === 'end') { + console.log('going to end, hold on a sec') + setTimeout(() => { + console.log('ok, ready to end now') + super.emit('end', ...args) + }, 100) + return true + } else { + return super.emit(ev, ...args) + } + } +} +``` + +### transform that creates newline-delimited JSON + +```js +class NDJSONEncode extends Minipass { + write(obj, cb) { + try { + // JSON.stringify can throw, emit an error on that + return super.write(JSON.stringify(obj) + '\n', 'utf8', cb) + } catch (er) { + this.emit('error', er) + } + } + end(obj, cb) { + if (typeof obj === 'function') { + cb = obj + obj = undefined + } + if (obj !== undefined) { + this.write(obj) + } + return super.end(cb) + } +} +``` + +### transform that parses newline-delimited JSON + +```js +class NDJSONDecode extends Minipass { + constructor(options) { + // always be in object mode, as far as Minipass is concerned + super({ objectMode: true }) + this._jsonBuffer = '' + } + write(chunk, encoding, cb) { + if ( + typeof chunk === 'string' && + typeof encoding === 'string' && + encoding !== 'utf8' + ) { + chunk = Buffer.from(chunk, encoding).toString() + } else if (Buffer.isBuffer(chunk)) { + chunk = chunk.toString() + } + if (typeof encoding === 'function') { + cb = encoding + } + const jsonData = (this._jsonBuffer + chunk).split('\n') + this._jsonBuffer = jsonData.pop() + for (let i = 0; i < jsonData.length; i++) { + try { + // JSON.parse can throw, emit an error on that + super.write(JSON.parse(jsonData[i])) + } catch (er) { + this.emit('error', er) + continue + } + } + if (cb) cb() + } +} +``` diff --git a/node_modules/minipass/package.json b/node_modules/minipass/package.json new file mode 100644 index 0000000000..771969b028 --- /dev/null +++ b/node_modules/minipass/package.json @@ -0,0 +1,82 @@ +{ + "name": "minipass", + "version": "7.1.2", + "description": "minimal implementation of a PassThrough stream", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "type": "module", + "tshy": { + "selfLink": false, + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/end-of-stream": "^1.4.2", + "@types/node": "^20.1.2", + "end-of-stream": "^1.4.0", + "node-abort-controller": "^3.1.1", + "prettier": "^2.6.2", + "tap": "^19.0.0", + "through2": "^2.0.3", + "tshy": "^1.14.0", + "typedoc": "^0.25.1" + }, + "repository": "https://github.com/isaacs/minipass", + "keywords": [ + "passthrough", + "stream" + ], + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "tap": { + "typecheck": true, + "include": [ + "test/*.ts" + ] + } +} diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js new file mode 100644 index 0000000000..ea734fb738 --- /dev/null +++ b/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function (val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/node_modules/ms/license.md b/node_modules/ms/license.md new file mode 100644 index 0000000000..fa5d39b621 --- /dev/null +++ b/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json new file mode 100644 index 0000000000..49971890df --- /dev/null +++ b/node_modules/ms/package.json @@ -0,0 +1,38 @@ +{ + "name": "ms", + "version": "2.1.3", + "description": "Tiny millisecond conversion utility", + "repository": "vercel/ms", + "main": "./index", + "files": [ + "index.js" + ], + "scripts": { + "precommit": "lint-staged", + "lint": "eslint lib/* bin/*", + "test": "mocha tests.js" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "license": "MIT", + "devDependencies": { + "eslint": "4.18.2", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1", + "prettier": "2.0.5" + } +} diff --git a/node_modules/ms/readme.md b/node_modules/ms/readme.md new file mode 100644 index 0000000000..0fc1abb3b8 --- /dev/null +++ b/node_modules/ms/readme.md @@ -0,0 +1,59 @@ +# ms + +![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/node_modules/package-json-from-dist/LICENSE.md b/node_modules/package-json-from-dist/LICENSE.md new file mode 100644 index 0000000000..881248b6d7 --- /dev/null +++ b/node_modules/package-json-from-dist/LICENSE.md @@ -0,0 +1,63 @@ +All packages under `src/` are licensed according to the terms in +their respective `LICENSE` or `LICENSE.md` files. + +The remainder of this project is licensed under the Blue Oak +Model License, as follows: + +----- + +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** diff --git a/node_modules/package-json-from-dist/README.md b/node_modules/package-json-from-dist/README.md new file mode 100644 index 0000000000..a9e1344851 --- /dev/null +++ b/node_modules/package-json-from-dist/README.md @@ -0,0 +1,110 @@ +# package-json-from-dist + +Sometimes you want to load the `package.json` into your +TypeScript program, and it's tempting to just `import +'../package.json'`, since that seems to work. + +However, this requires `tsc` to make an entire copy of your +`package.json` file into the `dist` folder, which is a problem if +you're using something like +[tshy](https://github.com/isaacs/tshy), which uses the +`package.json` file in dist for another purpose. Even when that +does work, it's asking the module system to do a bunch of extra +fs system calls, just to load a version number or something. (See +[this issue](https://github.com/isaacs/tshy/issues/61).) + +This module helps by just finding the package.json file +appropriately, and reading and parsing it in the most normal +fashion. + +## Caveats + +This _only_ works if your code builds into a target folder called +`dist`, which is in the root of the package. It also requires +that you do not have a folder named `node_modules` anywhere +within your dev environment, or else it'll get the wrong answers +there. (But, at least, that'll be in dev, so you're pretty likely +to notice.) + +If you build to some other location, then you'll need a different +approach. (Feel free to fork this module and make it your own, or +just put the code right inline, there's not much of it.) + +## USAGE + +```js +// src/index.ts +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' + +const pj = findPackageJson(import.meta.url) +console.log(`package.json found at ${pj}`) + +const pkg = loadPackageJson(import.meta.url) +console.log(`Hello from ${pkg.name}@${pkg.version}`) +``` + +If your module is not directly in the `./src` folder, then you need +to specify the path that you would expect to find the +`package.json` when it's _not_ built to the `dist` folder. + +```js +// src/components/something.ts +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' + +const pj = findPackageJson(import.meta.url, '../../package.json') +console.log(`package.json found at ${pj}`) + +const pkg = loadPackageJson(import.meta.url, '../../package.json') +console.log(`Hello from ${pkg.name}@${pkg.version}`) +``` + +When running from CommmonJS, use `__filename` instead of +`import.meta.url`. + +```js +// src/index.cts +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' + +const pj = findPackageJson(__filename) +console.log(`package.json found at ${pj}`) + +const pkg = loadPackageJson(__filename) +console.log(`Hello from ${pkg.name}@${pkg.version}`) +``` + +Since [tshy](https://github.com/isaacs/tshy) builds _both_ +CommonJS and ESM by default, you may find that you need a +CommonJS override and some `//@ts-ignore` magic to make it work. + +`src/pkg.ts`: + +```js +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' +//@ts-ignore +export const pkg = loadPackageJson(import.meta.url) +//@ts-ignore +export const pj = findPackageJson(import.meta.url) +``` + +`src/pkg-cjs.cts`: + +```js +import { + findPackageJson, + loadPackageJson, +} from 'package-json-from-dist' +export const pkg = loadPackageJson(__filename) +export const pj = findPackageJson(__filename) +``` diff --git a/node_modules/package-json-from-dist/package.json b/node_modules/package-json-from-dist/package.json new file mode 100644 index 0000000000..a2d03c3269 --- /dev/null +++ b/node_modules/package-json-from-dist/package.json @@ -0,0 +1,68 @@ +{ + "name": "package-json-from-dist", + "version": "1.0.1", + "description": "Load the local package.json from either src or dist folder", + "main": "./dist/commonjs/index.js", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc" + }, + "author": "Isaac Z. Schlueter (https://izs.me)", + "license": "BlueOak-1.0.0", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/package-json-from-dist.git" + }, + "devDependencies": { + "@types/node": "^20.12.12", + "prettier": "^3.2.5", + "tap": "^18.5.3", + "typedoc": "^0.24.8", + "typescript": "^5.1.6", + "tshy": "^1.14.0" + }, + "prettier": { + "semi": false, + "printWidth": 70, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf", + "experimentalTernaries": true + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "types": "./dist/commonjs/index.d.ts", + "type": "module" +} diff --git a/node_modules/parse-entities/index.d.ts b/node_modules/parse-entities/index.d.ts new file mode 100644 index 0000000000..4e94341887 --- /dev/null +++ b/node_modules/parse-entities/index.d.ts @@ -0,0 +1,126 @@ +import type {Point, Position} from 'unist' + +// To do: next major: remove `void` from allowed return types. + +/** + * @typeParam Context + * Value used as `this`. + * @this + * The `warningContext` given to `parseEntities` + * @param reason + * Human readable reason for emitting a parse error. + * @param point + * Place where the error occurred. + * @param code + * Machine readable code the error. + */ +export type WarningHandler = ( + this: Context, + reason: string, + point: Point, + code: number +) => undefined | void + +/** + * @typeParam Context + * Value used as `this`. + * @this + * The `referenceContext` given to `parseEntities` + * @param value + * Decoded character reference. + * @param position + * Place where `value` starts and ends. + * @param source + * Raw source of character reference. + */ +export type ReferenceHandler = ( + this: Context, + value: string, + position: Position, + source: string +) => undefined | void + +/** + * @typeParam Context + * Value used as `this`. + * @this + * The `textContext` given to `parseEntities`. + * @param value + * String of content. + * @param position + * Place where `value` starts and ends. + */ +export type TextHandler = ( + this: Context, + value: string, + position: Position +) => undefined | void + +/** + * Configuration. + * + * @typeParam WarningContext + * Value used as `this` in the `warning` handler. + * @typeParam ReferenceContext + * Value used as `this` in the `reference` handler. + * @typeParam TextContext + * Value used as `this` in the `text` handler. + */ +export interface Options< + WarningContext = undefined, + ReferenceContext = undefined, + TextContext = undefined +> { + /** + * Additional character to accept. + * This allows other characters, without error, when following an ampersand. + * + * @default '' + */ + additional?: string | null | undefined + /** + * Whether to parse `value` as an attribute value. + * This results in slightly different behavior. + * + * @default false + */ + attribute?: boolean | null | undefined + /** + * Whether to allow nonterminated character references. + * For example, `©cat` for `©cat`. + * This behavior is compliant to the spec but can lead to unexpected results. + * + * @default true + */ + nonTerminated?: boolean | null | undefined + /** + * Starting `position` of `value` (`Point` or `Position`). Useful when dealing with values nested in some sort of syntax tree. + */ + position?: Readonly | Readonly | null | undefined + /** + * Context used when calling `warning`. + */ + warningContext?: WarningContext | null | undefined + /** + * Context used when calling `reference`. + */ + referenceContext?: ReferenceContext | null | undefined + /** + * Context used when calling `text`. + */ + textContext?: TextContext | null | undefined + /** + * Warning handler. + */ + warning?: WarningHandler | null | undefined + /** + * Reference handler. + */ + reference?: ReferenceHandler | null | undefined + /** + * Text handler. + */ + text?: TextHandler | null | undefined +} + +export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/index.js b/node_modules/parse-entities/index.js new file mode 100644 index 0000000000..60157967c0 --- /dev/null +++ b/node_modules/parse-entities/index.js @@ -0,0 +1,3 @@ +// Note: more types exposed from `index.d.ts`. +// To do: refactor to include type parameters in JS. +export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/license b/node_modules/parse-entities/license new file mode 100644 index 0000000000..8fbc47ddb9 --- /dev/null +++ b/node_modules/parse-entities/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/parse-entities/package.json b/node_modules/parse-entities/package.json new file mode 100644 index 0000000000..cb3820aa91 --- /dev/null +++ b/node_modules/parse-entities/package.json @@ -0,0 +1,91 @@ +{ + "name": "parse-entities", + "version": "4.0.2", + "description": "Parse HTML character references", + "license": "MIT", + "keywords": [ + "parse", + "html", + "character", + "reference", + "entity", + "entities" + ], + "repository": "wooorm/parse-entities", + "bugs": "https://github.com/wooorm/parse-entities/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "c8": "^10.0.0", + "prettier": "^3.0.0", + "remark-cli": "^12.0.0", + "remark-preset-wooorm": "^10.0.0", + "type-coverage": "^2.0.0", + "typescript": "^5.0.0", + "xo": "^0.60.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true, + "rules": { + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/ban-types": "off", + "complexity": "off", + "max-depth": "off", + "no-bitwise": "off", + "unicorn/numeric-separators-style": "off", + "unicorn/prefer-code-point": "off" + } + }, + "remarkConfig": { + "plugins": [ + "remark-preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/parse-entities/readme.md b/node_modules/parse-entities/readme.md new file mode 100644 index 0000000000..cdc8c3279f --- /dev/null +++ b/node_modules/parse-entities/readme.md @@ -0,0 +1,266 @@ +# parse-entities + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Parse HTML character references. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`parseEntities(value[, options])`](#parseentitiesvalue-options) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This is a small and powerful decoder of HTML character references (often called +entities). + +## When should I use this? + +You can use this for spec-compliant decoding of character references. +It’s small and fast enough to do that well. +You can also use this when making a linter, because there are different warnings +emitted with reasons for why and positional info on where they happened. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 14.14+, 16.0+), install with [npm][]: + +```sh +npm install parse-entities +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {parseEntities} from 'https://esm.sh/parse-entities@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {parseEntities} from 'parse-entities' + +console.log(parseEntities('alpha & bravo'))) +// => alpha & bravo + +console.log(parseEntities('charlie ©cat; delta')) +// => charlie ©cat; delta + +console.log(parseEntities('echo © foxtrot ≠ golf 𝌆 hotel')) +// => echo © foxtrot ≠ golf 𝌆 hotel +``` + +## API + +This package exports the identifier `parseEntities`. +There is no default export. + +### `parseEntities(value[, options])` + +Parse HTML character references. + +##### `options` + +Configuration (optional). + +###### `options.additional` + +Additional character to accept (`string?`, default: `''`). +This allows other characters, without error, when following an ampersand. + +###### `options.attribute` + +Whether to parse `value` as an attribute value (`boolean?`, default: `false`). +This results in slightly different behavior. + +###### `options.nonTerminated` + +Whether to allow nonterminated references (`boolean`, default: `true`). +For example, `©cat` for `©cat`. +This behavior is compliant to the spec but can lead to unexpected results. + +###### `options.position` + +Starting `position` of `value` (`Position` or `Point`, optional). +Useful when dealing with values nested in some sort of syntax tree. +The default is: + +```js +{line: 1, column: 1, offset: 0} +``` + +###### `options.warning` + +Error handler ([`Function?`][warning]). + +###### `options.text` + +Text handler ([`Function?`][text]). + +###### `options.reference` + +Reference handler ([`Function?`][reference]). + +###### `options.warningContext` + +Context used when calling `warning` (`'*'`, optional). + +###### `options.textContext` + +Context used when calling `text` (`'*'`, optional). + +###### `options.referenceContext` + +Context used when calling `reference` (`'*'`, optional) + +##### Returns + +`string` — decoded `value`. + +#### `function warning(reason, point, code)` + +Error handler. + +###### Parameters + +* `this` (`*`) — refers to `warningContext` when given to `parseEntities` +* `reason` (`string`) — human readable reason for emitting a parse error +* `point` ([`Point`][point]) — place where the error occurred +* `code` (`number`) — machine readable code the error + +The following codes are used: + +| Code | Example | Note | +| ---- | ------------------ | --------------------------------------------- | +| `1` | `foo & bar` | Missing semicolon (named) | +| `2` | `foo { bar` | Missing semicolon (numeric) | +| `3` | `Foo &bar baz` | Empty (named) | +| `4` | `Foo &#` | Empty (numeric) | +| `5` | `Foo &bar; baz` | Unknown (named) | +| `6` | `Foo € baz` | [Disallowed reference][invalid] | +| `7` | `Foo � baz` | Prohibited: outside permissible unicode range | + +#### `function text(value, position)` + +Text handler. + +###### Parameters + +* `this` (`*`) — refers to `textContext` when given to `parseEntities` +* `value` (`string`) — string of content +* `position` ([`Position`][position]) — place where `value` starts and ends + +#### `function reference(value, position, source)` + +Character reference handler. + +###### Parameters + +* `this` (`*`) — refers to `referenceContext` when given to `parseEntities` +* `value` (`string`) — decoded character reference +* `position` ([`Position`][position]) — place where `source` starts and ends +* `source` (`string`) — raw source of character reference + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types `Options`, `WarningHandler`, +`ReferenceHandler`, and `TextHandler`. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 14.14+ and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe: it matches the HTML spec to parse character references. + +## Related + +* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) + — encode HTML character references +* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) + — info on character references +* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) + — info on HTML4 character references +* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) + — info on legacy character references +* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) + — info on invalid numeric character references + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/parse-entities/workflows/main/badge.svg + +[build]: https://github.com/wooorm/parse-entities/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/parse-entities.svg + +[coverage]: https://codecov.io/github/wooorm/parse-entities + +[downloads-badge]: https://img.shields.io/npm/dm/parse-entities.svg + +[downloads]: https://www.npmjs.com/package/parse-entities + +[size-badge]: https://img.shields.io/bundlephobia/minzip/parse-entities.svg + +[size]: https://bundlephobia.com/result?p=parse-entities + +[npm]: https://docs.npmjs.com/cli/install + +[esmsh]: https://esm.sh + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[warning]: #function-warningreason-point-code + +[text]: #function-textvalue-position + +[reference]: #function-referencevalue-position-source + +[invalid]: https://github.com/wooorm/character-reference-invalid + +[point]: https://github.com/syntax-tree/unist#point + +[position]: https://github.com/syntax-tree/unist#position + +[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/path-key/index.d.ts b/node_modules/path-key/index.d.ts new file mode 100644 index 0000000000..7c575d1975 --- /dev/null +++ b/node_modules/path-key/index.d.ts @@ -0,0 +1,40 @@ +/// + +declare namespace pathKey { + interface Options { + /** + Use a custom environment variables object. Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env). + */ + readonly env?: {[key: string]: string | undefined}; + + /** + Get the PATH key for a specific platform. Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform). + */ + readonly platform?: NodeJS.Platform; + } +} + +declare const pathKey: { + /** + Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform. + + @example + ``` + import pathKey = require('path-key'); + + const key = pathKey(); + //=> 'PATH' + + const PATH = process.env[key]; + //=> '/usr/local/bin:/usr/bin:/bin' + ``` + */ + (options?: pathKey.Options): string; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function pathKey(options?: pathKey.Options): string; + // export = pathKey; + default: typeof pathKey; +}; + +export = pathKey; diff --git a/node_modules/path-key/index.js b/node_modules/path-key/index.js new file mode 100644 index 0000000000..0cf6415d60 --- /dev/null +++ b/node_modules/path-key/index.js @@ -0,0 +1,16 @@ +'use strict'; + +const pathKey = (options = {}) => { + const environment = options.env || process.env; + const platform = options.platform || process.platform; + + if (platform !== 'win32') { + return 'PATH'; + } + + return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path'; +}; + +module.exports = pathKey; +// TODO: Remove this for the next major release +module.exports.default = pathKey; diff --git a/node_modules/path-key/license b/node_modules/path-key/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/path-key/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/path-key/package.json b/node_modules/path-key/package.json new file mode 100644 index 0000000000..c8cbd383af --- /dev/null +++ b/node_modules/path-key/package.json @@ -0,0 +1,39 @@ +{ + "name": "path-key", + "version": "3.1.1", + "description": "Get the PATH environment variable key cross-platform", + "license": "MIT", + "repository": "sindresorhus/path-key", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "path", + "key", + "environment", + "env", + "variable", + "var", + "get", + "cross-platform", + "windows" + ], + "devDependencies": { + "@types/node": "^11.13.0", + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/node_modules/path-key/readme.md b/node_modules/path-key/readme.md new file mode 100644 index 0000000000..a9052d7a69 --- /dev/null +++ b/node_modules/path-key/readme.md @@ -0,0 +1,61 @@ +# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key) + +> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform + +It's usually `PATH`, but on Windows it can be any casing like `Path`... + + +## Install + +``` +$ npm install path-key +``` + + +## Usage + +```js +const pathKey = require('path-key'); + +const key = pathKey(); +//=> 'PATH' + +const PATH = process.env[key]; +//=> '/usr/local/bin:/usr/bin:/bin' +``` + + +## API + +### pathKey(options?) + +#### options + +Type: `object` + +##### env + +Type: `object`
              +Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env) + +Use a custom environment variables object. + +#### platform + +Type: `string`
              +Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform) + +Get the PATH key for a specific platform. + + +--- + +

              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/path-scurry/LICENSE.md b/node_modules/path-scurry/LICENSE.md new file mode 100644 index 0000000000..c5402b9577 --- /dev/null +++ b/node_modules/path-scurry/LICENSE.md @@ -0,0 +1,55 @@ +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +***As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim.*** diff --git a/node_modules/path-scurry/README.md b/node_modules/path-scurry/README.md new file mode 100644 index 0000000000..b5cb495c0b --- /dev/null +++ b/node_modules/path-scurry/README.md @@ -0,0 +1,636 @@ +# path-scurry + +Extremely high performant utility for building tools that read +the file system, minimizing filesystem and path string munging +operations to the greatest degree possible. + +## Ugh, yet another file traversal thing on npm? + +Yes. None of the existing ones gave me exactly what I wanted. + +## Well what is it you wanted? + +While working on [glob](http://npm.im/glob), I found that I +needed a module to very efficiently manage the traversal over a +folder tree, such that: + +1. No `readdir()` or `stat()` would ever be called on the same + file or directory more than one time. +2. No `readdir()` calls would be made if we can be reasonably + sure that the path is not a directory. (Ie, a previous + `readdir()` or `stat()` covered the path, and + `ent.isDirectory()` is false.) +3. `path.resolve()`, `dirname()`, `basename()`, and other + string-parsing/munging operations are be minimized. This means + it has to track "provisional" child nodes that may not exist + (and if we find that they _don't_ exist, store that + information as well, so we don't have to ever check again). +4. The API is not limited to use as a stream/iterator/etc. There + are many cases where an API like node's `fs` is preferrable. +5. It's more important to prevent excess syscalls than to be up + to date, but it should be smart enough to know what it + _doesn't_ know, and go get it seamlessly when requested. +6. Do not blow up the JS heap allocation if operating on a + directory with a huge number of entries. +7. Handle all the weird aspects of Windows paths, like UNC paths + and drive letters and wrongway slashes, so that the consumer + can return canonical platform-specific paths without having to + parse or join or do any error-prone string munging. + +## PERFORMANCE + +JavaScript people throw around the word "blazing" a lot. I hope +that this module doesn't blaze anyone. But it does go very fast, +in the cases it's optimized for, if used properly. + +PathScurry provides ample opportunities to get extremely good +performance, as well as several options to trade performance for +convenience. + +Benchmarks can be run by executing `npm run bench`. + +As is always the case, doing more means going slower, doing less +means going faster, and there are trade offs between speed and +memory usage. + +PathScurry makes heavy use of [LRUCache](http://npm.im/lru-cache) +to efficiently cache whatever it can, and `Path` objects remain +in the graph for the lifetime of the walker, so repeated calls +with a single PathScurry object will be extremely fast. However, +adding items to a cold cache means "doing more", so in those +cases, we pay a price. Nothing is free, but every effort has been +made to reduce costs wherever possible. + +Also, note that a "cache as long as possible" approach means that +changes to the filesystem may not be reflected in the results of +repeated PathScurry operations. + +For resolving string paths, `PathScurry` ranges from 5-50 times +faster than `path.resolve` on repeated resolutions, but around +100 to 1000 times _slower_ on the first resolution. If your +program is spending a lot of time resolving the _same_ paths +repeatedly (like, thousands or millions of times), then this can +be beneficial. But both implementations are pretty fast, and +speeding up an infrequent operation from 4µs to 400ns is not +going to move the needle on your app's performance. + +For walking file system directory trees, a lot depends on how +often a given PathScurry object will be used, and also on the +walk method used. + +With default settings on a folder tree of 100,000 items, +consisting of around a 10-to-1 ratio of normal files to +directories, PathScurry performs comparably to +[@nodelib/fs.walk](http://npm.im/@nodelib/fs.walk), which is the +fastest and most reliable file system walker I could find. As far +as I can tell, it's almost impossible to go much faster in a +Node.js program, just based on how fast you can push syscalls out +to the fs thread pool. + +On my machine, that is about 1000-1200 completed walks per second +for async or stream walks, and around 500-600 walks per second +synchronously. + +In the warm cache state, PathScurry's performance increases +around 4x for async `for await` iteration, 10-15x faster for +streams and synchronous `for of` iteration, and anywhere from 30x +to 80x faster for the rest. + +``` +# walk 100,000 fs entries, 10/1 file/dir ratio +# operations / ms + New PathScurry object | Reuse PathScurry object + stream: 1112.589 | 13974.917 +sync stream: 492.718 | 15028.343 + async walk: 1095.648 | 32706.395 + sync walk: 527.632 | 46129.772 + async iter: 1288.821 | 5045.510 + sync iter: 498.496 | 17920.746 +``` + +A hand-rolled walk calling `entry.readdir()` and recursing +through the entries can benefit even more from caching, with +greater flexibility and without the overhead of streams or +generators. + +The cold cache state is still limited by the costs of file system +operations, but with a warm cache, the only bottleneck is CPU +speed and VM optimizations. Of course, in that case, some care +must be taken to ensure that you don't lose performance as a +result of silly mistakes, like calling `readdir()` on entries +that you know are not directories. + +``` +# manual recursive iteration functions + cold cache | warm cache +async: 1164.901 | 17923.320 + cb: 1101.127 | 40999.344 +zalgo: 1082.240 | 66689.936 + sync: 526.935 | 87097.591 +``` + +In this case, the speed improves by around 10-20x in the async +case, 40x in the case of using `entry.readdirCB` with protections +against synchronous callbacks, and 50-100x with callback +deferrals disabled, and _several hundred times faster_ for +synchronous iteration. + +If you can think of a case that is not covered in these +benchmarks, or an implementation that performs significantly +better than PathScurry, please [let me +know](https://github.com/isaacs/path-scurry/issues). + +## USAGE + +```ts +// hybrid module, load with either method +import { PathScurry, Path } from 'path-scurry' +// or: +const { PathScurry, Path } = require('path-scurry') + +// very simple example, say we want to find and +// delete all the .DS_Store files in a given path +// note that the API is very similar to just a +// naive walk with fs.readdir() +import { unlink } from 'fs/promises' + +// easy way, iterate over the directory and do the thing +const pw = new PathScurry(process.cwd()) +for await (const entry of pw) { + if (entry.isFile() && entry.name === '.DS_Store') { + unlink(entry.fullpath()) + } +} + +// here it is as a manual recursive method +const walk = async (entry: Path) => { + const promises: Promise = [] + // readdir doesn't throw on non-directories, it just doesn't + // return any entries, to save stack trace costs. + // Items are returned in arbitrary unsorted order + for (const child of await pw.readdir(entry)) { + // each child is a Path object + if (child.name === '.DS_Store' && child.isFile()) { + // could also do pw.resolve(entry, child.name), + // just like fs.readdir walking, but .fullpath is + // a *slightly* more efficient shorthand. + promises.push(unlink(child.fullpath())) + } else if (child.isDirectory()) { + promises.push(walk(child)) + } + } + return Promise.all(promises) +} + +walk(pw.cwd).then(() => { + console.log('all .DS_Store files removed') +}) + +const pw2 = new PathScurry('/a/b/c') // pw2.cwd is the Path for /a/b/c +const relativeDir = pw2.cwd.resolve('../x') // Path entry for '/a/b/x' +const relative2 = pw2.cwd.resolve('/a/b/d/../x') // same path, same entry +assert.equal(relativeDir, relative2) +``` + +## API + +[Full TypeDoc API](https://isaacs.github.io/path-scurry) + +There are platform-specific classes exported, but for the most +part, the default `PathScurry` and `Path` exports are what you +most likely need, unless you are testing behavior for other +platforms. + +Intended public API is documented here, but the full +documentation does include internal types, which should not be +accessed directly. + +### Interface `PathScurryOpts` + +The type of the `options` argument passed to the `PathScurry` +constructor. + +- `nocase`: Boolean indicating that file names should be compared + case-insensitively. Defaults to `true` on darwin and win32 + implementations, `false` elsewhere. + + **Warning** Performing case-insensitive matching on a + case-sensitive filesystem will result in occasionally very + bizarre behavior. Performing case-sensitive matching on a + case-insensitive filesystem may negatively impact performance. + +- `childrenCacheSize`: Number of child entries to cache, in order + to speed up `resolve()` and `readdir()` calls. Defaults to + `16 * 1024` (ie, `16384`). + + Setting it to a higher value will run the risk of JS heap + allocation errors on large directory trees. Setting it to `256` + or smaller will significantly reduce the construction time and + data consumption overhead, but with the downside of operations + being slower on large directory trees. Setting it to `0` will + mean that effectively no operations are cached, and this module + will be roughly the same speed as `fs` for file system + operations, and _much_ slower than `path.resolve()` for + repeated path resolution. + +- `fs` An object that will be used to override the default `fs` + methods. Any methods that are not overridden will use Node's + built-in implementations. + + - lstatSync + - readdir (callback `withFileTypes` Dirent variant, used for + readdirCB and most walks) + - readdirSync + - readlinkSync + - realpathSync + - promises: Object containing the following async methods: + - lstat + - readdir (Dirent variant only) + - readlink + - realpath + +### Interface `WalkOptions` + +The options object that may be passed to all walk methods. + +- `withFileTypes`: Boolean, default true. Indicates that `Path` + objects should be returned. Set to `false` to get string paths + instead. +- `follow`: Boolean, default false. Attempt to read directory + entries from symbolic links. Otherwise, only actual directories + are traversed. Regardless of this setting, a given target path + will only ever be walked once, meaning that a symbolic link to + a previously traversed directory will never be followed. + + Setting this imposes a slight performance penalty, because + `readlink` must be called on all symbolic links encountered, in + order to avoid infinite cycles. + +- `filter`: Function `(entry: Path) => boolean`. If provided, + will prevent the inclusion of any entry for which it returns a + falsey value. This will not prevent directories from being + traversed if they do not pass the filter, though it will + prevent the directories themselves from being included in the + results. By default, if no filter is provided, then all entries + are included in the results. +- `walkFilter`: Function `(entry: Path) => boolean`. If provided, + will prevent the traversal of any directory (or in the case of + `follow:true` symbolic links to directories) for which the + function returns false. This will not prevent the directories + themselves from being included in the result set. Use `filter` + for that. + +Note that TypeScript return types will only be inferred properly +from static analysis if the `withFileTypes` option is omitted, or +a constant `true` or `false` value. + +### Class `PathScurry` + +The main interface. Defaults to an appropriate class based on the +current platform. + +Use `PathScurryWin32`, `PathScurryDarwin`, or `PathScurryPosix` +if implementation-specific behavior is desired. + +All walk methods may be called with a `WalkOptions` argument to +walk over the object's current working directory with the +supplied options. + +#### `async pw.walk(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Walk the directory tree according to the options provided, +resolving to an array of all entries found. + +#### `pw.walkSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Walk the directory tree according to the options provided, +returning an array of all entries found. + +#### `pw.iterate(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Iterate over the directory asynchronously, for use with `for +await of`. This is also the default async iterator method. + +#### `pw.iterateSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Iterate over the directory synchronously, for use with `for of`. +This is also the default sync iterator method. + +#### `pw.stream(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Return a [Minipass](http://npm.im/minipass) stream that emits +each entry or path string in the walk. Results are made available +asynchronously. + +#### `pw.streamSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` + +Return a [Minipass](http://npm.im/minipass) stream that emits +each entry or path string in the walk. Results are made available +synchronously, meaning that the walk will complete in a single +tick if the stream is fully consumed. + +#### `pw.cwd` + +Path object representing the current working directory for the +PathScurry. + +#### `pw.chdir(path: string)` + +Set the new effective current working directory for the scurry +object, so that `path.relative()` and `path.relativePosix()` +return values relative to the new cwd path. + +#### `pw.depth(path?: Path | string): number` + +Return the depth of the specified path (or the PathScurry cwd) +within the directory tree. + +Root entries have a depth of `0`. + +#### `pw.resolve(...paths: string[])` + +Caching `path.resolve()`. + +Significantly faster than `path.resolve()` if called repeatedly +with the same paths. Significantly slower otherwise, as it builds +out the cached Path entries. + +To get a `Path` object resolved from the `PathScurry`, use +`pw.cwd.resolve(path)`. Note that `Path.resolve` only takes a +single string argument, not multiple. + +#### `pw.resolvePosix(...paths: string[])` + +Caching `path.resolve()`, but always using posix style paths. + +This is identical to `pw.resolve(...paths)` on posix systems (ie, +everywhere except Windows). + +On Windows, it returns the full absolute UNC path using `/` +separators. Ie, instead of `'C:\\foo\\bar`, it would return +`//?/C:/foo/bar`. + +#### `pw.relative(path: string | Path): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +#### `pw.relativePosix(path: string | Path): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry, using `/` path separators. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +On posix platforms (ie, all platforms except Windows), this is +identical to `pw.relative(path)`. + +On Windows systems, it returns the resulting string as a +`/`-delimited path. If an absolute path is returned (because the +target does not share a common ancestor with `pw.cwd`), then a +full absolute UNC path will be returned. Ie, instead of +`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. + +#### `pw.basename(path: string | Path): string` + +Return the basename of the provided string or Path. + +#### `pw.dirname(path: string | Path): string` + +Return the parent directory of the supplied string or Path. + +#### `async pw.readdir(dir = pw.cwd, opts = { withFileTypes: true })` + +Read the directory and resolve to an array of strings if +`withFileTypes` is explicitly set to `false` or Path objects +otherwise. + +Can be called as `pw.readdir({ withFileTypes: boolean })` as +well. + +Returns `[]` if no entries are found, or if any error occurs. + +Note that TypeScript return types will only be inferred properly +from static analysis if the `withFileTypes` option is omitted, or +a constant `true` or `false` value. + +#### `pw.readdirSync(dir = pw.cwd, opts = { withFileTypes: true })` + +Synchronous `pw.readdir()` + +#### `async pw.readlink(link = pw.cwd, opts = { withFileTypes: false })` + +Call `fs.readlink` on the supplied string or Path object, and +return the result. + +Can be called as `pw.readlink({ withFileTypes: boolean })` as +well. + +Returns `undefined` if any error occurs (for example, if the +argument is not a symbolic link), or a `Path` object if +`withFileTypes` is explicitly set to `true`, or a string +otherwise. + +Note that TypeScript return types will only be inferred properly +from static analysis if the `withFileTypes` option is omitted, or +a constant `true` or `false` value. + +#### `pw.readlinkSync(link = pw.cwd, opts = { withFileTypes: false })` + +Synchronous `pw.readlink()` + +#### `async pw.lstat(entry = pw.cwd)` + +Call `fs.lstat` on the supplied string or Path object, and fill +in as much information as possible, returning the updated `Path` +object. + +Returns `undefined` if the entry does not exist, or if any error +is encountered. + +Note that some `Stats` data (such as `ino`, `dev`, and `mode`) +will not be supplied. For those things, you'll need to call +`fs.lstat` yourself. + +#### `pw.lstatSync(entry = pw.cwd)` + +Synchronous `pw.lstat()` + +#### `pw.realpath(entry = pw.cwd, opts = { withFileTypes: false })` + +Call `fs.realpath` on the supplied string or Path object, and +return the realpath if available. + +Returns `undefined` if any error occurs. + +May be called as `pw.realpath({ withFileTypes: boolean })` to run +on `pw.cwd`. + +#### `pw.realpathSync(entry = pw.cwd, opts = { withFileTypes: false })` + +Synchronous `pw.realpath()` + +### Class `Path` implements [fs.Dirent](https://nodejs.org/docs/latest/api/fs.html#class-fsdirent) + +Object representing a given path on the filesystem, which may or +may not exist. + +Note that the actual class in use will be either `PathWin32` or +`PathPosix`, depending on the implementation of `PathScurry` in +use. They differ in the separators used to split and join path +strings, and the handling of root paths. + +In `PathPosix` implementations, paths are split and joined using +the `'/'` character, and `'/'` is the only root path ever in use. + +In `PathWin32` implementations, paths are split using either +`'/'` or `'\\'` and joined using `'\\'`, and multiple roots may +be in use based on the drives and UNC paths encountered. UNC +paths such as `//?/C:/` that identify a drive letter, will be +treated as an alias for the same root entry as their associated +drive letter (in this case `'C:\\'`). + +#### `path.name` + +Name of this file system entry. + +**Important**: _always_ test the path name against any test +string using the `isNamed` method, and not by directly comparing +this string. Otherwise, unicode path strings that the system sees +as identical will not be properly treated as the same path, +leading to incorrect behavior and possible security issues. + +#### `path.isNamed(name: string): boolean` + +Return true if the path is a match for the given path name. This +handles case sensitivity and unicode normalization. + +Note: even on case-sensitive systems, it is **not** safe to test +the equality of the `.name` property to determine whether a given +pathname matches, due to unicode normalization mismatches. + +Always use this method instead of testing the `path.name` +property directly. + +#### `path.isCWD` + +Set to true if this `Path` object is the current working +directory of the `PathScurry` collection that contains it. + +#### `path.getType()` + +Returns the type of the Path object, `'File'`, `'Directory'`, +etc. + +#### `path.isType(t: type)` + +Returns true if `is{t}()` returns true. + +For example, `path.isType('Directory')` is equivalent to +`path.isDirectory()`. + +#### `path.depth()` + +Return the depth of the Path entry within the directory tree. +Root paths have a depth of `0`. + +#### `path.fullpath()` + +The fully resolved path to the entry. + +#### `path.fullpathPosix()` + +The fully resolved path to the entry, using `/` separators. + +On posix systems, this is identical to `path.fullpath()`. On +windows, this will return a fully resolved absolute UNC path +using `/` separators. Eg, instead of `'C:\\foo\\bar'`, it will +return `'//?/C:/foo/bar'`. + +#### `path.isFile()`, `path.isDirectory()`, etc. + +Same as the identical `fs.Dirent.isX()` methods. + +#### `path.isUnknown()` + +Returns true if the path's type is unknown. Always returns true +when the path is known to not exist. + +#### `path.resolve(p: string)` + +Return a `Path` object associated with the provided path string +as resolved from the current Path object. + +#### `path.relative(): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +#### `path.relativePosix(): string` + +Return the relative path from the PathWalker cwd to the supplied +path string or entry, using `/` path separators. + +If the nearest common ancestor is the root, then an absolute path +is returned. + +On posix platforms (ie, all platforms except Windows), this is +identical to `pw.relative(path)`. + +On Windows systems, it returns the resulting string as a +`/`-delimited path. If an absolute path is returned (because the +target does not share a common ancestor with `pw.cwd`), then a +full absolute UNC path will be returned. Ie, instead of +`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. + +#### `async path.readdir()` + +Return an array of `Path` objects found by reading the associated +path entry. + +If path is not a directory, or if any error occurs, returns `[]`, +and marks all children as provisional and non-existent. + +#### `path.readdirSync()` + +Synchronous `path.readdir()` + +#### `async path.readlink()` + +Return the `Path` object referenced by the `path` as a symbolic +link. + +If the `path` is not a symbolic link, or any error occurs, +returns `undefined`. + +#### `path.readlinkSync()` + +Synchronous `path.readlink()` + +#### `async path.lstat()` + +Call `lstat` on the path object, and fill it in with details +determined. + +If path does not exist, or any other error occurs, returns +`undefined`, and marks the path as "unknown" type. + +#### `path.lstatSync()` + +Synchronous `path.lstat()` + +#### `async path.realpath()` + +Call `realpath` on the path, and return a Path object +corresponding to the result, or `undefined` if any error occurs. + +#### `path.realpathSync()` + +Synchornous `path.realpath()` diff --git a/node_modules/path-scurry/package.json b/node_modules/path-scurry/package.json new file mode 100644 index 0000000000..e176615789 --- /dev/null +++ b/node_modules/path-scurry/package.json @@ -0,0 +1,89 @@ +{ + "name": "path-scurry", + "version": "1.11.1", + "description": "walk paths fast and efficiently", + "author": "Isaac Z. Schlueter (https://blog.izs.me)", + "main": "./dist/commonjs/index.js", + "type": "module", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "license": "BlueOak-1.0.0", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts", + "bench": "bash ./scripts/bench.sh" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@nodelib/fs.walk": "^1.2.8", + "@types/node": "^20.12.11", + "c8": "^7.12.0", + "eslint-config-prettier": "^8.6.0", + "mkdirp": "^3.0.0", + "prettier": "^3.2.5", + "rimraf": "^5.0.1", + "tap": "^18.7.2", + "ts-node": "^10.9.2", + "tshy": "^1.14.0", + "typedoc": "^0.25.12", + "typescript": "^5.4.3" + }, + "tap": { + "typecheck": true + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/path-scurry" + }, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "tshy": { + "selfLink": false, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "types": "./dist/commonjs/index.d.ts" +} diff --git a/node_modules/punycode.js/LICENSE-MIT.txt b/node_modules/punycode.js/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/punycode.js/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/punycode.js/README.md b/node_modules/punycode.js/README.md new file mode 100644 index 0000000000..f611016b01 --- /dev/null +++ b/node_modules/punycode.js/README.md @@ -0,0 +1,148 @@ +# Punycode.js [![punycode on npm](https://img.shields.io/npm/v/punycode)](https://www.npmjs.com/package/punycode) [![](https://data.jsdelivr.com/v1/package/npm/punycode/badge)](https://www.jsdelivr.com/package/npm/punycode) + +Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). + +This project provides a CommonJS module that uses ES2015+ features and JavaScript module, which work in modern Node.js versions and browsers. For the old Punycode.js version that offers the same functionality in a UMD build with support for older pre-ES2015 runtimes, including Rhino, Ringo, and Narwhal, see [v1.4.1](https://github.com/mathiasbynens/punycode.js/releases/tag/v1.4.1). + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install punycode --save +``` + +In [Node.js](https://nodejs.org/): + +> ⚠️ Note that userland modules don't hide core modules. +> For example, `require('punycode')` still imports the deprecated core module even if you executed `npm install punycode`. +> Use `require('punycode/')` to import userland modules rather than core modules. + +```js +const punycode = require('punycode/'); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## For maintainers + +### How to publish a new release + +1. On the `main` branch, bump the version number in `package.json`: + + ```sh + npm version patch -m 'Release v%s' + ``` + + Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). + + Note that this produces a Git commit + tag. + +1. Push the release commit and tag: + + ```sh + git push && git push --tags + ``` + + Our CI then automatically publishes the new release to npm, under both the [`punycode`](https://www.npmjs.com/package/punycode) and [`punycode.js`](https://www.npmjs.com/package/punycode.js) names. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode.js/package.json b/node_modules/punycode.js/package.json new file mode 100644 index 0000000000..7794798516 --- /dev/null +++ b/node_modules/punycode.js/package.json @@ -0,0 +1,58 @@ +{ + "name": "punycode.js", + "version": "2.3.1", + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "homepage": "https://mths.be/punycode", + "main": "punycode.js", + "jsnext:main": "punycode.es6.js", + "module": "punycode.es6.js", + "engines": { + "node": ">=6" + }, + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/punycode.js.git" + }, + "bugs": "https://github.com/mathiasbynens/punycode.js/issues", + "files": [ + "LICENSE-MIT.txt", + "punycode.js", + "punycode.es6.js" + ], + "scripts": { + "test": "mocha tests", + "build": "node scripts/prepublish.js" + }, + "devDependencies": { + "codecov": "^3.8.3", + "nyc": "^15.1.0", + "mocha": "^10.2.0" + }, + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + } +} diff --git a/node_modules/punycode.js/punycode.es6.js b/node_modules/punycode.js/punycode.es6.js new file mode 100644 index 0000000000..dadece25b3 --- /dev/null +++ b/node_modules/punycode.js/punycode.es6.js @@ -0,0 +1,444 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, callback) { + const result = []; + let length = array.length; + while (length--) { + result[length] = callback(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {String} A new string of characters returned by the callback + * function. + */ +function mapDomain(domain, callback) { + const parts = domain.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + domain = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + domain = domain.replace(regexSeparators, '\x2E'); + const labels = domain.split('.'); + const encoded = map(labels, callback).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = codePoints => String.fromCodePoint(...codePoints); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint >= 0x30 && codePoint < 0x3A) { + return 26 + (codePoint - 0x30); + } + if (codePoint >= 0x41 && codePoint < 0x5B) { + return codePoint - 0x41; + } + if (codePoint >= 0x61 && codePoint < 0x7B) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + const oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base) { + error('invalid-input'); + } + if (digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + const inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + const basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.3.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; +export default punycode; diff --git a/node_modules/punycode.js/punycode.js b/node_modules/punycode.js/punycode.js new file mode 100644 index 0000000000..a1ef251924 --- /dev/null +++ b/node_modules/punycode.js/punycode.js @@ -0,0 +1,443 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, callback) { + const result = []; + let length = array.length; + while (length--) { + result[length] = callback(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {String} A new string of characters returned by the callback + * function. + */ +function mapDomain(domain, callback) { + const parts = domain.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + domain = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + domain = domain.replace(regexSeparators, '\x2E'); + const labels = domain.split('.'); + const encoded = map(labels, callback).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = codePoints => String.fromCodePoint(...codePoints); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint >= 0x30 && codePoint < 0x3A) { + return 26 + (codePoint - 0x30); + } + if (codePoint >= 0x41 && codePoint < 0x5B) { + return codePoint - 0x41; + } + if (codePoint >= 0x61 && codePoint < 0x7B) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + const oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base) { + error('invalid-input'); + } + if (digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + const inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + const basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue === n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.3.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +module.exports = punycode; diff --git a/node_modules/run-con/.circleci/config.yml b/node_modules/run-con/.circleci/config.yml new file mode 100644 index 0000000000..6eaa0c8e10 --- /dev/null +++ b/node_modules/run-con/.circleci/config.yml @@ -0,0 +1,7 @@ +version: 2.1 +orbs: + node: circleci/node@5.1.0 +workflows: + node-tests: + jobs: + - node/test diff --git a/node_modules/run-con/.github/FUNDING.yml b/node_modules/run-con/.github/FUNDING.yml new file mode 100644 index 0000000000..f9d9ce5cb8 --- /dev/null +++ b/node_modules/run-con/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +issuehunt: goatandsheep/rc diff --git a/node_modules/run-con/.github/dependabot.yml b/node_modules/run-con/.github/dependabot.yml new file mode 100644 index 0000000000..f45b33e280 --- /dev/null +++ b/node_modules/run-con/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 +updates: +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + time: "10:00" + open-pull-requests-limit: 10 + versioning-strategy: increase diff --git a/node_modules/run-con/.github/workflows/coverage.yml b/node_modules/run-con/.github/workflows/coverage.yml new file mode 100644 index 0000000000..0e6653cd91 --- /dev/null +++ b/node_modules/run-con/.github/workflows/coverage.yml @@ -0,0 +1,37 @@ +name: Running Code Coverage + +on: [push, pull_request] + +permissions: read-all + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 16.x, 18.x, 20.x] + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: npm install + + - name: Run the tests + run: npm test -- --coverage + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/node_modules/run-con/.github/workflows/dependabot.yml b/node_modules/run-con/.github/workflows/dependabot.yml new file mode 100644 index 0000000000..a4679eb58e --- /dev/null +++ b/node_modules/run-con/.github/workflows/dependabot.yml @@ -0,0 +1,44 @@ +name: CreateDependabotIssue +on: + workflow_dispatch: + pull_request: + types: [opened, reopened] + +permissions: + actions: none + checks: none + contents: read + deployments: none + id-token: write + issues: write + discussions: none + packages: none + pages: none + pull-requests: none + repository-projects: none + security-events: none + statuses: none + +jobs: + issue: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + steps: + - name: Checks if Dependabot PR + if: ${{github.event_name != 'pull_request'}} + run: echo "no dependabot" + - uses: actions/checkout@v3 + if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} + + - name: Open issue if Dependabot PR + if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} + env: + pr_title: ${{github.event.pull_request.title}} + pr_number: ${{github.event.pull_request.number}} + pr_url: ${{github.event.pull_request.url}} + run: | + title="Dependabot PR $pr_title opened" + body="Dependabot has opened PR #$pr_number + Link: $pr_url" + gh issue create --title "$title" --body "$body" diff --git a/node_modules/run-con/.github/workflows/issuehunt.yml b/node_modules/run-con/.github/workflows/issuehunt.yml new file mode 100644 index 0000000000..67881e8ae7 --- /dev/null +++ b/node_modules/run-con/.github/workflows/issuehunt.yml @@ -0,0 +1,33 @@ +name: Auto message for Issues +on: + issues: + types: [opened, reopened] + +permissions: + actions: none + checks: none + contents: read + deployments: none + id-token: write + issues: write + discussions: none + packages: none + pages: none + pull-requests: none + repository-projects: none + security-events: none + statuses: none + +jobs: + comment: + name: Hello new contributor + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v3 + - name: Posts comment + env: + issue_num: ${{github.event.issue.number}} + comment_message: "Hey, thank you for opening this issue! 🙂 To boost priority on this issue and support open source please tip the team at https://issuehunt.io/r/${{github.repository}}/issues/${{github.event.issue.number }}" + run: gh issue comment $issue_num --body "$comment_message" diff --git a/node_modules/run-con/LICENSE.APACHE2 b/node_modules/run-con/LICENSE.APACHE2 new file mode 100644 index 0000000000..c65fbe9d29 --- /dev/null +++ b/node_modules/run-con/LICENSE.APACHE2 @@ -0,0 +1,15 @@ +Apache License, Version 2.0 + +Copyright (c) 2011 Dominic Tarr + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/node_modules/run-con/LICENSE.BSD b/node_modules/run-con/LICENSE.BSD new file mode 100644 index 0000000000..dd83f1731c --- /dev/null +++ b/node_modules/run-con/LICENSE.BSD @@ -0,0 +1,26 @@ +Copyright (c) 2013, Dominic Tarr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. diff --git a/node_modules/run-con/LICENSE.MIT b/node_modules/run-con/LICENSE.MIT new file mode 100644 index 0000000000..2cb7d7e207 --- /dev/null +++ b/node_modules/run-con/LICENSE.MIT @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2011 Dominic Tarr + +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/run-con/README.md b/node_modules/run-con/README.md new file mode 100644 index 0000000000..f3d146441c --- /dev/null +++ b/node_modules/run-con/README.md @@ -0,0 +1,239 @@ +# run-con + +Based on +[RC ![npm downloads](https://img.shields.io/npm/dt/rc.svg?style=flat-square)](https://www.npmjs.com/package/rc) + +> The non-configurable runtime configuration loader for lazy people. + +[![npm version](https://badgen.net/npm/v/run-con)](https://www.npmjs.com/package/run-con) +![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/npm/run-con) +[![codecov](https://codecov.io/gh/goatandsheep/rc/branch/main/graph/badge.svg?token=8XbycgIgai)](https://codecov.io/gh/goatandsheep/rc) +[![npm downloads](https://img.shields.io/npm/dt/run-con.svg?style=flat-square)](https://www.npmjs.com/package/run-con) +[![Known Vulnerabilities](https://snyk.io/test/github/goatandsheep/rc/badge.svg)](https://snyk.io/test/github/goatandsheep/rc) + +## Usage + +The only option is to pass run-con the name of your app, and your default configuration. + +```javascript +var conf = require('run-con')(appname, { + //defaults go here. + port: 2468, + + //defaults which are objects will be merged, not replaced + views: { + engine: 'jade' + } +}); +``` + +`run-con` will return your configuration options merged with the defaults you specify. +If you pass in a predefined defaults object, it will be mutated: + +```javascript +var conf = {}; +require('run-con')(appname, conf); +``` + +If `run-con` finds any config files for your app, the returned config object will have +a `configs` array containing their paths: + +```javascript +var appCfg = require('run-con')(appname, conf); +appCfg.configs[0] // /etc/appnamerc +appCfg.configs[1] // /home/dominictarr/.config/appname +appCfg.config // same as appCfg.configs[appCfg.configs.length - 1] +``` + +## Standards + +Given your application name (`appname`), run-con will look in all the obvious places for configuration. + + * command line arguments, parsed by minimist _(e.g. `--foo baz`, also nested: `--foo.bar=baz`)_ + * environment variables prefixed with `${appname}_` + * or use "\_\_" to indicate nested properties
              _(e.g. `appname_foo__bar__baz` => `foo.bar.baz`)_ + * if you passed an option `--config file` then from that file + * a local `.${appname}rc` or the first found looking in `./ ../ ../../ ../../../` etc. + * `$HOME/.${appname}rc` + * `$HOME/.${appname}/config` + * `$HOME/.config/${appname}` + * `$HOME/.config/${appname}/config` + * `/etc/${appname}rc` + * `/etc/${appname}/config` + * the defaults object you passed in. + +All configuration sources that were found will be flattened into one object, +so that sources **earlier** in this list override later ones. + + +## Configuration File Formats + +Configuration files (e.g. `.appnamerc`) may be in either [json](http://json.org/example) or [ini](http://en.wikipedia.org/wiki/INI_file) format. **No** file extension (`.json` or `.ini`) should be used. The example configurations below are equivalent: + + +#### Formatted as `ini` + +``` +; You can include comments in `ini` format if you want. + +dependsOn=0.10.0 + + +; `run-con` has built-in support for ini sections, see? + +[commands] + www = ./commands/www + console = ./commands/repl + + +; You can even do nested sections + +[generators.options] + engine = ejs + +[generators.modules] + new = generate-new + engine = generate-backend + +``` + +#### Formatted as `json` + +```javascript +{ + // You can even comment your JSON, if you want + "dependsOn": "0.10.0", + "commands": { + "www": "./commands/www", + "console": "./commands/repl" + }, + "generators": { + "options": { + "engine": "ejs" + }, + "modules": { + "new": "generate-new", + "backend": "generate-backend" + } + } +} +``` + +Comments are stripped from JSON config via [strip-json-comments](https://github.com/sindresorhus/strip-json-comments). + +> Since ini, and env variables do not have a standard for types, your application needs be prepared for strings. + +To ensure that string representations of booleans and numbers are always converted into their proper types (especially useful if you intend to do strict `===` comparisons), consider using a module such as [parse-strings-in-object](https://github.com/anselanza/parse-strings-in-object) to wrap the config object returned from run-con. + + +## Simple example demonstrating precedence +Assume you have an application like this (notice the hard-coded defaults passed to run-con): +``` +const conf = require('run-con')('myapp', { + port: 12345, + mode: 'test' +}); + +console.log(JSON.stringify(conf, null, 2)); +``` +You also have a file `config.json`, with these contents: +``` +{ + "port": 9000, + "foo": "from config json", + "something": "else" +} +``` +And a file `.myapprc` in the same folder, with these contents: +``` +{ + "port": "3001", + "foo": "bar" +} +``` +Here is the expected output from various commands: + +`node .` +``` +{ + "port": "3001", + "mode": "test", + "foo": "bar", + "_": [], + "configs": [ + "/Users/stephen/repos/conftest/.myapprc" + ], + "config": "/Users/stephen/repos/conftest/.myapprc" +} +``` +*Default `mode` from hard-coded object is retained, but port is overridden by `.myapprc` file (automatically found based on appname match), and `foo` is added.* + + +`node . --foo baz` +``` +{ + "port": "3001", + "mode": "test", + "foo": "baz", + "_": [], + "configs": [ + "/Users/stephen/repos/conftest/.myapprc" + ], + "config": "/Users/stephen/repos/conftest/.myapprc" +} +``` +*Same result as above but `foo` is overridden because command-line arguments take precedence over `.myapprc` file.* + +`node . --foo barbar --config config.json` +``` +{ + "port": 9000, + "mode": "test", + "foo": "barbar", + "something": "else", + "_": [], + "config": "config.json", + "configs": [ + "/Users/stephen/repos/conftest/.myapprc", + "config.json" + ] +} +``` +*Now the `port` comes from the `config.json` file specified (overriding the value from `.myapprc`), and `foo` value is overridden by command-line despite also being specified in the `config.json` file.* + + + +## Advanced Usage + +#### Pass in your own `argv` + +You may pass in your own `argv` as the third argument to `run-con`. This is in case you want to [use your own command-line opts parser](https://github.com/dominictarr/rc/pull/12). + +```javascript +require('run-con')(appname, defaults, customArgvParser); +``` + +## Pass in your own parser + +If you have a special need to use a non-standard parser, +you can do so by passing in the parser as the 4th argument. +(leave the 3rd as null to get the default args parser) + +```javascript +require('run-con')(appname, defaults, null, parser); +``` + +This may also be used to force a more strict format, +such as strict, valid JSON only. + +## Note on Performance + +`run-con` is running `fs.statSync`-- so make sure you don't use it in a hot code path (e.g. a request handler) + +## Credit + +Original author is @dominictarr + +## License + +Multi-licensed under the two-clause BSD License, MIT License, or Apache License, version 2.0 diff --git a/node_modules/run-con/browser.js b/node_modules/run-con/browser.js new file mode 100644 index 0000000000..2a9767c9a3 --- /dev/null +++ b/node_modules/run-con/browser.js @@ -0,0 +1,7 @@ + +// when this is loaded into the browser, +// just use the defaults... + +module.exports = function (name, defaults) { + return defaults +} diff --git a/node_modules/run-con/cli.js b/node_modules/run-con/cli.js new file mode 100755 index 0000000000..34f1c04e6a --- /dev/null +++ b/node_modules/run-con/cli.js @@ -0,0 +1,4 @@ +#! /usr/bin/env node +var rc = require('./index') + +console.log(JSON.stringify(rc(process.argv[2]), false, 2)) diff --git a/node_modules/run-con/index.js b/node_modules/run-con/index.js new file mode 100644 index 0000000000..ef1c31987e --- /dev/null +++ b/node_modules/run-con/index.js @@ -0,0 +1,53 @@ +var cc = require('./lib/utils') +var join = require('path').join +var deepExtend = require('deep-extend') +var etc = '/etc' +var win = process.platform === "win32" +var home = win + ? process.env.USERPROFILE + : process.env.HOME + +module.exports = function (name, defaults, argv, parse) { + if('string' !== typeof name) + throw new Error('rc(name): name *must* be string') + if(!argv) + argv = require('minimist')(process.argv.slice(2)) + defaults = ( + 'string' === typeof defaults + ? cc.json(defaults) : defaults + ) || {} + + parse = parse || cc.parse + + var env = cc.env(name + '_') + + var configs = [defaults] + var configFiles = [] + function addConfigFile (file) { + if (configFiles.indexOf(file) >= 0) return + var fileConfig = cc.file(file) + if (fileConfig) { + configs.push(parse(fileConfig)) + configFiles.push(file) + } + } + + // which files do we look at? + if (!win) + [join(etc, name, 'config'), + join(etc, name + 'rc')].forEach(addConfigFile) + if (home) + [join(home, '.config', name, 'config'), + join(home, '.config', name), + join(home, '.' + name, 'config'), + join(home, '.' + name + 'rc')].forEach(addConfigFile) + addConfigFile(cc.find('.'+name+'rc')) + if (env.config) addConfigFile(env.config) + if (argv.config) addConfigFile(argv.config) + + return deepExtend.apply(null, configs.concat([ + env, + argv, + configFiles.length ? {configs: configFiles, config: configFiles[configFiles.length - 1]} : undefined, + ])) +} diff --git a/node_modules/run-con/package.json b/node_modules/run-con/package.json new file mode 100644 index 0000000000..a9e6ee4405 --- /dev/null +++ b/node_modules/run-con/package.json @@ -0,0 +1,29 @@ +{ + "name": "run-con", + "version": "1.3.2", + "description": "hardwired configuration loader", + "main": "index.js", + "browser": "browser.js", + "scripts": { + "test": "node test/test.js && node test/ini.js && node test/nested-env-vars.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/goatandsheep/rc.git" + }, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "keywords": [ + "config", + "rc", + "unix", + "defaults" + ], + "bin": "./cli.js", + "author": "Kemal Ahmed ", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~4.1.0", + "minimist": "^1.2.8", + "strip-json-comments": "~3.1.1" + } +} diff --git a/node_modules/run-con/renovate.json b/node_modules/run-con/renovate.json new file mode 100644 index 0000000000..8b1edd8cd3 --- /dev/null +++ b/node_modules/run-con/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:base" + ] +} diff --git a/node_modules/shebang-command/index.js b/node_modules/shebang-command/index.js new file mode 100644 index 0000000000..f35db30851 --- /dev/null +++ b/node_modules/shebang-command/index.js @@ -0,0 +1,19 @@ +'use strict'; +const shebangRegex = require('shebang-regex'); + +module.exports = (string = '') => { + const match = string.match(shebangRegex); + + if (!match) { + return null; + } + + const [path, argument] = match[0].replace(/#! ?/, '').split(' '); + const binary = path.split('/').pop(); + + if (binary === 'env') { + return argument; + } + + return argument ? `${binary} ${argument}` : binary; +}; diff --git a/node_modules/shebang-command/license b/node_modules/shebang-command/license new file mode 100644 index 0000000000..db6bc32cc7 --- /dev/null +++ b/node_modules/shebang-command/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Kevin Mårtensson (github.com/kevva) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-command/package.json b/node_modules/shebang-command/package.json new file mode 100644 index 0000000000..18e3c04638 --- /dev/null +++ b/node_modules/shebang-command/package.json @@ -0,0 +1,34 @@ +{ + "name": "shebang-command", + "version": "2.0.0", + "description": "Get the command from a shebang", + "license": "MIT", + "repository": "kevva/shebang-command", + "author": { + "name": "Kevin Mårtensson", + "email": "kevinmartensson@gmail.com", + "url": "github.com/kevva" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "cmd", + "command", + "parse", + "shebang" + ], + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "devDependencies": { + "ava": "^2.3.0", + "xo": "^0.24.0" + } +} diff --git a/node_modules/shebang-command/readme.md b/node_modules/shebang-command/readme.md new file mode 100644 index 0000000000..84feb442d7 --- /dev/null +++ b/node_modules/shebang-command/readme.md @@ -0,0 +1,34 @@ +# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command) + +> Get the command from a shebang + + +## Install + +``` +$ npm install shebang-command +``` + + +## Usage + +```js +const shebangCommand = require('shebang-command'); + +shebangCommand('#!/usr/bin/env node'); +//=> 'node' + +shebangCommand('#!/bin/bash'); +//=> 'bash' +``` + + +## API + +### shebangCommand(string) + +#### string + +Type: `string` + +String containing a shebang. diff --git a/node_modules/shebang-regex/index.d.ts b/node_modules/shebang-regex/index.d.ts new file mode 100644 index 0000000000..61d034b31e --- /dev/null +++ b/node_modules/shebang-regex/index.d.ts @@ -0,0 +1,22 @@ +/** +Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line. + +@example +``` +import shebangRegex = require('shebang-regex'); + +const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; + +shebangRegex.test(string); +//=> true + +shebangRegex.exec(string)[0]; +//=> '#!/usr/bin/env node' + +shebangRegex.exec(string)[1]; +//=> '/usr/bin/env node' +``` +*/ +declare const shebangRegex: RegExp; + +export = shebangRegex; diff --git a/node_modules/shebang-regex/index.js b/node_modules/shebang-regex/index.js new file mode 100644 index 0000000000..63fc4a0b67 --- /dev/null +++ b/node_modules/shebang-regex/index.js @@ -0,0 +1,2 @@ +'use strict'; +module.exports = /^#!(.*)/; diff --git a/node_modules/shebang-regex/license b/node_modules/shebang-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/shebang-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-regex/package.json b/node_modules/shebang-regex/package.json new file mode 100644 index 0000000000..00ab30feee --- /dev/null +++ b/node_modules/shebang-regex/package.json @@ -0,0 +1,35 @@ +{ + "name": "shebang-regex", + "version": "3.0.0", + "description": "Regular expression for matching a shebang line", + "license": "MIT", + "repository": "sindresorhus/shebang-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "regex", + "regexp", + "shebang", + "match", + "test", + "line" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/node_modules/shebang-regex/readme.md b/node_modules/shebang-regex/readme.md new file mode 100644 index 0000000000..5ecf863aa3 --- /dev/null +++ b/node_modules/shebang-regex/readme.md @@ -0,0 +1,33 @@ +# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex) + +> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line + + +## Install + +``` +$ npm install shebang-regex +``` + + +## Usage + +```js +const shebangRegex = require('shebang-regex'); + +const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; + +shebangRegex.test(string); +//=> true + +shebangRegex.exec(string)[0]; +//=> '#!/usr/bin/env node' + +shebangRegex.exec(string)[1]; +//=> '/usr/bin/env node' +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt new file mode 100644 index 0000000000..954f2fa823 --- /dev/null +++ b/node_modules/signal-exit/LICENSE.txt @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md new file mode 100644 index 0000000000..c55cd45ee3 --- /dev/null +++ b/node_modules/signal-exit/README.md @@ -0,0 +1,74 @@ +# signal-exit + +When you want to fire an event no matter how a process exits: + +- reaching the end of execution. +- explicitly having `process.exit(code)` called. +- having `process.kill(pid, sig)` called. +- receiving a fatal signal from outside the process + +Use `signal-exit`. + +```js +// Hybrid module, either works +import { onExit } from 'signal-exit' +// or: +// const { onExit } = require('signal-exit') + +onExit((code, signal) => { + console.log('process exited!', code, signal) +}) +``` + +## API + +`remove = onExit((code, signal) => {}, options)` + +The return value of the function is a function that will remove +the handler. + +Note that the function _only_ fires for signals if the signal +would cause the process to exit. That is, there are no other +listeners, and it is a fatal signal. + +If the global `process` object is not suitable for this purpose +(ie, it's unset, or doesn't have an `emit` method, etc.) then the +`onExit` function is a no-op that returns a no-op `remove` method. + +### Options + +- `alwaysLast`: Run this handler after any other signal or exit + handlers. This causes `process.emit` to be monkeypatched. + +### Capturing Signal Exits + +If the handler returns an exact boolean `true`, and the exit is a +due to signal, then the signal will be considered handled, and +will _not_ trigger a synthetic `process.kill(process.pid, +signal)` after firing the `onExit` handlers. + +In this case, it your responsibility as the caller to exit with a +signal (for example, by calling `process.kill()`) if you wish to +preserve the same exit status that would otherwise have occurred. +If you do not, then the process will likely exit gracefully with +status 0 at some point, assuming that no other terminating signal +or other exit trigger occurs. + +Prior to calling handlers, the `onExit` machinery is unloaded, so +any subsequent exits or signals will not be handled, even if the +signal is captured and the exit is thus prevented. + +Note that numeric code exits may indicate that the process is +already committed to exiting, for example due to a fatal +exception or unhandled promise rejection, and so there is no way to +prevent it safely. + +### Browser Fallback + +The `'signal-exit/browser'` module is the same fallback shim that +just doesn't do anything, but presents the same function +interface. + +Patches welcome to add something that hooks onto +`window.onbeforeunload` or similar, but it might just not be a +thing that makes sense there. diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json new file mode 100644 index 0000000000..ac176cec74 --- /dev/null +++ b/node_modules/signal-exit/package.json @@ -0,0 +1,106 @@ +{ + "name": "signal-exit", + "version": "4.1.0", + "description": "when you want to fire an event no matter how a process exits.", + "main": "./dist/cjs/index.js", + "module": "./dist/mjs/index.js", + "browser": "./dist/mjs/browser.js", + "types": "./dist/mjs/index.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/mjs/index.d.ts", + "default": "./dist/mjs/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.ts", + "default": "./dist/cjs/index.js" + } + }, + "./signals": { + "import": { + "types": "./dist/mjs/signals.d.ts", + "default": "./dist/mjs/signals.js" + }, + "require": { + "types": "./dist/cjs/signals.d.ts", + "default": "./dist/cjs/signals.js" + } + }, + "./browser": { + "import": { + "types": "./dist/mjs/browser.d.ts", + "default": "./dist/mjs/browser.js" + }, + "require": { + "types": "./dist/cjs/browser.d.ts", + "default": "./dist/cjs/browser.js" + } + } + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "repository": { + "type": "git", + "url": "https://github.com/tapjs/signal-exit.git" + }, + "keywords": [ + "signal", + "exit" + ], + "author": "Ben Coe ", + "license": "ISC", + "devDependencies": { + "@types/cross-spawn": "^6.0.2", + "@types/node": "^18.15.11", + "@types/signal-exit": "^3.0.1", + "@types/tap": "^15.0.8", + "c8": "^7.13.0", + "prettier": "^2.8.6", + "tap": "^16.3.4", + "ts-node": "^10.9.1", + "typedoc": "^0.23.28", + "typescript": "^5.0.2" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preprepare": "rm -rf dist", + "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json && bash ./scripts/fixup.sh", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "c8 tap", + "snap": "c8 tap", + "format": "prettier --write . --loglevel warn", + "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "tap": { + "coverage": false, + "jobs": 1, + "node-arg": [ + "--no-warnings", + "--loader", + "ts-node/esm" + ], + "ts": false + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } +} diff --git a/node_modules/smol-toml/LICENSE b/node_modules/smol-toml/LICENSE new file mode 100644 index 0000000000..1ed1c049b4 --- /dev/null +++ b/node_modules/smol-toml/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) Squirrel Chat et al., All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/smol-toml/README.md b/node_modules/smol-toml/README.md new file mode 100644 index 0000000000..0809b5e8c6 --- /dev/null +++ b/node_modules/smol-toml/README.md @@ -0,0 +1,192 @@ +# smol-toml +[![TOML 1.0.0](https://img.shields.io/badge/TOML-1.0.0-9c4221?style=flat-square)](https://toml.io/en/v1.0.0) +[![License](https://img.shields.io/github/license/squirrelchat/smol-toml.svg?style=flat-square)](https://github.com/squirrelchat/smol-toml/blob/mistress/LICENSE) +[![npm](https://img.shields.io/npm/v/smol-toml?style=flat-square)](https://npm.im/smol-toml) +[![Build](https://img.shields.io/github/actions/workflow/status/squirrelchat/smol-toml/build.yml?style=flat-square&logo=github)](https://github.com/squirrelchat/smol-toml/actions/workflows/build.yml) + +A small, fast, and correct TOML parser and serializer. smol-toml is fully(ish) spec-compliant with TOML v1.0.0. + +Why yet another TOML parser? Well, the ecosystem of TOML parsers in JavaScript is quite underwhelming, most likely due +to a lack of interest. With most parsers being outdated, unmaintained, non-compliant, or a combination of these, a new +parser didn't feel too out of place. + +*[insert xkcd 927]* + +smol-toml passes most of the tests from the [`toml-test` suite](https://github.com/toml-lang/toml-test); use the +`run-toml-test.bash` script to run the tests. Due to the nature of JavaScript and the limits of the language, +it doesn't pass certain tests, namely: +- Invalid UTF-8 strings are not rejected +- Certain invalid UTF-8 codepoints are not rejected +- Certain invalid dates are not rejected + - For instance, `2023-02-30` would be accepted and parsed as `2023-03-02`. While additional checks could be performed + to reject these, they've not been added for performance reasons. +- smol-toml doesn't preserve type information between integers and floats (in JS, everything is a float) + +You can see a list of all tests smol-toml fails (and the reason why it fails these) in the list of skipped tests in +`run-toml-test.bash`. Note that some failures are *not* specification violations per-se. For instance, the TOML spec +does not require 64-bit integer range support or sub-millisecond time precision, but are included in the `toml-test` +suite. See https://github.com/toml-lang/toml-test/issues/154 and https://github.com/toml-lang/toml-test/issues/155 + +## Installation +``` +[pnpm | yarn | npm] i smol-toml +``` + +## Usage +```js +import { parse, stringify } from 'smol-toml' + +const doc = '...' +const parsed = parse(doc) +console.log(parsed) + +const toml = stringify(parsed) +console.log(toml) +``` + +Alternatively, if you prefer something similar to the JSON global, you can import the library as follows +```js +import TOML from 'smol-toml' + +TOML.stringify({ ... }) +``` + +A few notes on the `stringify` function: +- `undefined` and `null` values on objects are ignored (does not produce a key/value). +- `undefined` and `null` values in arrays are **rejected**. +- Functions, classes and symbols are **rejected**. +- floats will be serialized as integers if they don't have a decimal part. + - `stringify(parse('a = 1.0')) === 'a = 1'` +- JS `Date` will be serialized as Offset Date Time + - Use the [`TomlDate` object](#dates) for representing other types. + +### Dates +`smol-toml` uses an extended `Date` object to represent all types of TOML Dates. In the future, `smol-toml` will use +objects from the Temporal proposal, but for now we're stuck with the legacy Date object. + +```js +import { TomlDate } from 'smol-toml' + +// Offset Date Time +const date = new TomlDate('1979-05-27T07:32:00.000-08:00') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, false +console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000-08:00 + +// Local Date Time +const date = new TomlDate('1979-05-27T07:32:00.000') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, true +console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000 + +// Local Date +const date = new TomlDate('1979-05-27') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, true, false, true +console.log(date.toISOString()) // ~> 1979-05-27 + +// Local Time +const date = new TomlDate('07:32:00') +console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, false, true, true +console.log(date.toISOString()) // ~> 07:32:00.000 +``` + +You can also wrap a native `Date` object and specify using different methods depending on the type of date you wish +to represent: + +```js +import { TomlDate } from 'smol-toml' + +const jsDate = new Date() + +const offsetDateTime = TomlDate.wrapAsOffsetDateTime(jsDate) +const localDateTime = TomlDate.wrapAsLocalDateTime(jsDate) +const localDate = TomlDate.wrapAsLocalDate(jsDate) +const localTime = TomlDate.wrapAsLocalTime(jsDate) +``` + +## Performance +A note on these performance numbers: in some highly synthetic tests, other parsers such as `fast-toml` greatly +outperform other parsers, mostly due to their lack of compliance with the spec. For example, to parse a string, +`fast-toml` skips the entire string while `smol-toml` does validate the string, costing a fair share of performance. + +The ~5MB test file used for benchmark here is filled with random data which attempts to be close-ish to reality in +terms of structure. The idea is to have a file relatively close to a real-world application, with moderately sized +strings etc. + +The large TOML generator can be found [here](https://gist.github.com/cyyynthia/e77c744cb6494dabe37d0182506526b9) + +| **Parse** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | fast-toml | +|----------------|---------------------|-------------------|-----------------|-----------------| +| Spec example | **71,356.51 op/s** | 33,629.31 op/s | 16,433.86 op/s | 29,421.60 op/s | +| ~5MB test file | **3.8091 op/s** | *DNF* | 2.4369 op/s | 2.6078 op/s | + +| **Stringify** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | +|----------------|----------------------|-------------------|----------------| +| Spec example | **195,191.99 op/s** | 46,583.07 op/s | 5,670.12 op/s | +| ~5MB test file | **14.6709 op/s** | 3.5941 op/s | 0.7856 op/s | + +
              +Detailed benchmark data + +Tests ran using Vitest v0.31.0 on commit f58cb6152e667e9cea09f31c93d90652e3b82bf5 + +CPU: Intel Core i7 7700K (4.2GHz) + +``` + RUN v0.31.0 + + ✓ bench/parseSpecExample.bench.ts (4) 2462ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 71,356.51 0.0132 0.2633 0.0140 0.0137 0.0219 0.0266 0.1135 ±0.37% 35679 fastest + · @iarna/toml 33,629.31 0.0272 0.2629 0.0297 0.0287 0.0571 0.0650 0.1593 ±0.45% 16815 + · @ltd/j-toml 16,433.86 0.0523 1.3088 0.0608 0.0550 0.1140 0.1525 0.7348 ±1.47% 8217 slowest + · fast-toml 29,421.60 0.0305 0.2995 0.0340 0.0312 0.0618 0.0640 0.1553 ±0.47% 14711 + ✓ bench/parseLargeMixed.bench.ts (3) 16062ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 3.8091 239.60 287.30 262.53 274.17 287.30 287.30 287.30 ±3.66% 10 fastest + · @ltd/j-toml 2.4369 376.73 493.49 410.35 442.58 493.49 493.49 493.49 ±7.08% 10 slowest + · fast-toml 2.6078 373.88 412.79 383.47 388.62 412.79 412.79 412.79 ±2.72% 10 + ✓ bench/stringifySpecExample.bench.ts (3) 1886ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 195,191.99 0.0047 0.2704 0.0051 0.0050 0.0099 0.0110 0.0152 ±0.41% 97596 fastest + · @iarna/toml 46,583.07 0.0197 0.2808 0.0215 0.0208 0.0448 0.0470 0.1704 ±0.47% 23292 + · @ltd/j-toml 5,670.12 0.1613 0.5768 0.1764 0.1726 0.3036 0.3129 0.4324 ±0.56% 2836 slowest + ✓ bench/stringifyLargeMixed.bench.ts (3) 24057ms + name hz min max mean p75 p99 p995 p999 rme samples + · smol-toml 14.6709 65.1071 79.2199 68.1623 67.1088 79.2199 79.2199 79.2199 ±5.25% 10 fastest + · @iarna/toml 3.5941 266.48 295.24 278.24 290.10 295.24 295.24 295.24 ±2.83% 10 + · @ltd/j-toml 0.7856 1,254.33 1,322.05 1,272.87 1,286.82 1,322.05 1,322.05 1,322.05 ±1.37% 10 slowest + + + BENCH Summary + + smol-toml - bench/parseLargeMixed.bench.ts > + 1.46x faster than fast-toml + 1.56x faster than @ltd/j-toml + + smol-toml - bench/parseSpecExample.bench.ts > + 2.12x faster than @iarna/toml + 2.43x faster than fast-toml + 4.34x faster than @ltd/j-toml + + smol-toml - bench/stringifyLargeMixed.bench.ts > + 4.00x faster than @iarna/toml + 18.33x faster than @ltd/j-toml + + smol-toml - bench/stringifySpecExample.bench.ts > + 4.19x faster than @iarna/toml + 34.42x faster than @ltd/j-toml +``` + +--- +Additional notes: + +I initially tried to benchmark `toml-nodejs`, but the 0.3.0 package is broken. +I initially reported this to the library author, but the author decided to +- a) advise to use a custom loader (via *experimental* flag) to circumvent the invalid imports. + - Said flag, `--experimental-specifier-resolution`, has been removed in Node v20. +- b) [delete the issue](https://github.com/huan231/toml-nodejs/issues/12) when pointed out links to the NodeJS +documentation about the flag removal and standard resolution algorithm. + +For the reference anyway, `toml-nodejs` (with proper imports) is ~8x slower on both parse benchmark with: +- spec example: 7,543.47 op/s +- 5mb mixed: 0.7006 op/s +
              diff --git a/node_modules/smol-toml/package.json b/node_modules/smol-toml/package.json new file mode 100644 index 0000000000..b144aea9ce --- /dev/null +++ b/node_modules/smol-toml/package.json @@ -0,0 +1,53 @@ +{ + "name": "smol-toml", + "license": "BSD-3-Clause", + "version": "1.3.1", + "description": "A small, fast, and correct TOML parser/serializer", + "author": "Cynthia ", + "repository": "github:squirrelchat/smol-toml", + "bugs": "https://github.com/squirrelchat/smol-toml/issues", + "funding": "https://github.com/sponsors/cyyynthia", + "keywords": [ + "toml", + "parser", + "serializer" + ], + "type": "module", + "packageManager": "pnpm@9.12.3", + "engines": { + "node": ">= 18" + }, + "scripts": { + "test": "vitest", + "test-ui": "vitest --ui", + "bench": "vitest bench", + "build": "pnpm run build:mjs && pnpm run build:cjs && node test/package/package-test.mjs", + "build:mjs": "tsc", + "build:cjs": "esbuild dist/index.js --bundle --platform=node --target=node18 --format=cjs --outfile=dist/index.cjs" + }, + "devDependencies": { + "@iarna/toml": "3.0.0", + "@ltd/j-toml": "^1.38.0", + "@tsconfig/node-lts": "^22.0.0", + "@tsconfig/strictest": "^2.0.5", + "@types/node": "^22.9.0", + "@vitest/ui": "^2.1.5", + "esbuild": "^0.24.0", + "fast-toml": "^0.5.4", + "typescript": "^5.6.3", + "vitest": "^2.1.5" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "files": [ + "README.md", + "LICENSE", + "dist" + ] +} diff --git a/node_modules/string-width-cjs/index.d.ts b/node_modules/string-width-cjs/index.d.ts new file mode 100644 index 0000000000..12b5309751 --- /dev/null +++ b/node_modules/string-width-cjs/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/node_modules/string-width-cjs/index.js b/node_modules/string-width-cjs/index.js new file mode 100644 index 0000000000..f4d261a96a --- /dev/null +++ b/node_modules/string-width-cjs/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/node_modules/string-width-cjs/license b/node_modules/string-width-cjs/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/string-width-cjs/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..2dbf6af2b6 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..616ff837d3 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/license b/node_modules/string-width-cjs/node_modules/ansi-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/package.json b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..017f53116a --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-regex", + "version": "5.0.1", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..4d848bc36f --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
              +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md new file mode 100644 index 0000000000..f10e173335 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 0000000000..b4cf3dcd38 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 0000000000..780309df58 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts new file mode 100644 index 0000000000..1955b4704e --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js new file mode 100644 index 0000000000..d993a3a99c --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json new file mode 100644 index 0000000000..6d32352829 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json @@ -0,0 +1,50 @@ +{ + "name": "emoji-regex", + "version": "8.0.0", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + } +} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js new file mode 100644 index 0000000000..0a55ce2f23 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000000..907fccc292 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js new file mode 100644 index 0000000000..9a593dfcd1 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/license b/node_modules/string-width-cjs/node_modules/strip-ansi/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/package.json b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json new file mode 100644 index 0000000000..1a41108d42 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json @@ -0,0 +1,54 @@ +{ + "name": "strip-ansi", + "version": "6.0.1", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000000..7c4b56d46d --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/string-width-cjs/package.json b/node_modules/string-width-cjs/package.json new file mode 100644 index 0000000000..28ba7b4cae --- /dev/null +++ b/node_modules/string-width-cjs/package.json @@ -0,0 +1,56 @@ +{ + "name": "string-width", + "version": "4.2.3", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + } +} diff --git a/node_modules/string-width-cjs/readme.md b/node_modules/string-width-cjs/readme.md new file mode 100644 index 0000000000..bdd314129c --- /dev/null +++ b/node_modules/string-width-cjs/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/string-width/index.d.ts b/node_modules/string-width/index.d.ts new file mode 100644 index 0000000000..aed9fdffeb --- /dev/null +++ b/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +export interface Options { + /** + Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). + + @default true + */ + readonly ambiguousIsNarrow: boolean; +} + +/** +Get the visual width of a string - the number of columns required to display it. + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +@example +``` +import stringWidth from 'string-width'; + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` +*/ +export default function stringWidth(string: string, options?: Options): number; diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js new file mode 100644 index 0000000000..9294488f88 --- /dev/null +++ b/node_modules/string-width/index.js @@ -0,0 +1,54 @@ +import stripAnsi from 'strip-ansi'; +import eastAsianWidth from 'eastasianwidth'; +import emojiRegex from 'emoji-regex'; + +export default function stringWidth(string, options = {}) { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + options = { + ambiguousIsNarrow: true, + ...options + }; + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2; + let width = 0; + + for (const character of string) { + const codePoint = character.codePointAt(0); + + // Ignore control characters + if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (codePoint >= 0x300 && codePoint <= 0x36F) { + continue; + } + + const code = eastAsianWidth.eastAsianWidth(character); + switch (code) { + case 'F': + case 'W': + width += 2; + break; + case 'A': + width += ambiguousCharacterWidth; + break; + default: + width += 1; + } + } + + return width; +} diff --git a/node_modules/string-width/license b/node_modules/string-width/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json new file mode 100644 index 0000000000..f46d6770f9 --- /dev/null +++ b/node_modules/string-width/package.json @@ -0,0 +1,59 @@ +{ + "name": "string-width", + "version": "5.1.2", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + } +} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md new file mode 100644 index 0000000000..52910df1ab --- /dev/null +++ b/node_modules/string-width/readme.md @@ -0,0 +1,67 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + +## Install + +``` +$ npm install string-width +``` + +## Usage + +```js +import stringWidth from 'string-width'; + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + +## API + +### stringWidth(string, options?) + +#### string + +Type: `string` + +The string to be counted. + +#### options + +Type: `object` + +##### ambiguousIsNarrow + +Type: `boolean`\ +Default: `false` + +Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/strip-ansi-cjs/index.d.ts b/node_modules/strip-ansi-cjs/index.d.ts new file mode 100644 index 0000000000..907fccc292 --- /dev/null +++ b/node_modules/strip-ansi-cjs/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/strip-ansi-cjs/index.js b/node_modules/strip-ansi-cjs/index.js new file mode 100644 index 0000000000..9a593dfcd1 --- /dev/null +++ b/node_modules/strip-ansi-cjs/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/strip-ansi-cjs/license b/node_modules/strip-ansi-cjs/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/strip-ansi-cjs/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..2dbf6af2b6 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..616ff837d3 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..017f53116a --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-regex", + "version": "5.0.1", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..4d848bc36f --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
              +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/strip-ansi-cjs/package.json b/node_modules/strip-ansi-cjs/package.json new file mode 100644 index 0000000000..1a41108d42 --- /dev/null +++ b/node_modules/strip-ansi-cjs/package.json @@ -0,0 +1,54 @@ +{ + "name": "strip-ansi", + "version": "6.0.1", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/strip-ansi-cjs/readme.md b/node_modules/strip-ansi-cjs/readme.md new file mode 100644 index 0000000000..7c4b56d46d --- /dev/null +++ b/node_modules/strip-ansi-cjs/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/strip-ansi/index.d.ts b/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000000..44e954d0c7 --- /dev/null +++ b/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,15 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +export default function stripAnsi(string: string): string; diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js new file mode 100644 index 0000000000..ba19750e64 --- /dev/null +++ b/node_modules/strip-ansi/index.js @@ -0,0 +1,14 @@ +import ansiRegex from 'ansi-regex'; + +const regex = ansiRegex(); + +export default function stripAnsi(string) { + if (typeof string !== 'string') { + throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); + } + + // Even though the regex is global, we don't need to reset the `.lastIndex` + // because unlike `.exec()` and `.test()`, `.replace()` does it automatically + // and doing it manually has a performance penalty. + return string.replace(regex, ''); +} diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json new file mode 100644 index 0000000000..e1f455c325 --- /dev/null +++ b/node_modules/strip-ansi/package.json @@ -0,0 +1,57 @@ +{ + "name": "strip-ansi", + "version": "7.1.0", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "funding": "https://github.com/chalk/strip-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.17.0", + "xo": "^0.44.0" + } +} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000000..562785107b --- /dev/null +++ b/node_modules/strip-ansi/readme.md @@ -0,0 +1,41 @@ +# strip-ansi + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + +## Install + +``` +$ npm install strip-ansi +``` + +## Usage + +```js +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/strip-json-comments/index.d.ts b/node_modules/strip-json-comments/index.d.ts new file mode 100644 index 0000000000..28ba3c8a80 --- /dev/null +++ b/node_modules/strip-json-comments/index.d.ts @@ -0,0 +1,36 @@ +declare namespace stripJsonComments { + interface Options { + /** + Replace comments with whitespace instead of stripping them entirely. + + @default true + */ + readonly whitespace?: boolean; + } +} + +/** +Strip comments from JSON. Lets you use comments in your JSON files! + +It will replace single-line comments `//` and multi-line comments `/**\/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +@param jsonString - Accepts a string with JSON. +@returns A JSON string without comments. + +@example +``` +const json = `{ + // Rainbows + "unicorn": "cake" +}`; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` +*/ +declare function stripJsonComments( + jsonString: string, + options?: stripJsonComments.Options +): string; + +export = stripJsonComments; diff --git a/node_modules/strip-json-comments/index.js b/node_modules/strip-json-comments/index.js new file mode 100644 index 0000000000..bb00b38baf --- /dev/null +++ b/node_modules/strip-json-comments/index.js @@ -0,0 +1,77 @@ +'use strict'; +const singleComment = Symbol('singleComment'); +const multiComment = Symbol('multiComment'); +const stripWithoutWhitespace = () => ''; +const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' '); + +const isEscaped = (jsonString, quotePosition) => { + let index = quotePosition - 1; + let backslashCount = 0; + + while (jsonString[index] === '\\') { + index -= 1; + backslashCount += 1; + } + + return Boolean(backslashCount % 2); +}; + +module.exports = (jsonString, options = {}) => { + if (typeof jsonString !== 'string') { + throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``); + } + + const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; + + let insideString = false; + let insideComment = false; + let offset = 0; + let result = ''; + + for (let i = 0; i < jsonString.length; i++) { + const currentCharacter = jsonString[i]; + const nextCharacter = jsonString[i + 1]; + + if (!insideComment && currentCharacter === '"') { + const escaped = isEscaped(jsonString, i); + if (!escaped) { + insideString = !insideString; + } + } + + if (insideString) { + continue; + } + + if (!insideComment && currentCharacter + nextCharacter === '//') { + result += jsonString.slice(offset, i); + offset = i; + insideComment = singleComment; + i++; + } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') { + i++; + insideComment = false; + result += strip(jsonString, offset, i); + offset = i; + continue; + } else if (insideComment === singleComment && currentCharacter === '\n') { + insideComment = false; + result += strip(jsonString, offset, i); + offset = i; + } else if (!insideComment && currentCharacter + nextCharacter === '/*') { + result += jsonString.slice(offset, i); + offset = i; + insideComment = multiComment; + i++; + continue; + } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') { + i++; + insideComment = false; + result += strip(jsonString, offset, i + 1); + offset = i + 1; + continue; + } + } + + return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset)); +}; diff --git a/node_modules/strip-json-comments/license b/node_modules/strip-json-comments/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/strip-json-comments/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-json-comments/package.json b/node_modules/strip-json-comments/package.json new file mode 100644 index 0000000000..ce7875aa0d --- /dev/null +++ b/node_modules/strip-json-comments/package.json @@ -0,0 +1,47 @@ +{ + "name": "strip-json-comments", + "version": "3.1.1", + "description": "Strip comments from JSON. Lets you use comments in your JSON files!", + "license": "MIT", + "repository": "sindresorhus/strip-json-comments", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "bench": "matcha benchmark.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "json", + "strip", + "comments", + "remove", + "delete", + "trim", + "multiline", + "parse", + "config", + "configuration", + "settings", + "util", + "env", + "environment", + "jsonc" + ], + "devDependencies": { + "ava": "^1.4.1", + "matcha": "^0.7.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/node_modules/strip-json-comments/readme.md b/node_modules/strip-json-comments/readme.md new file mode 100644 index 0000000000..cc542e50cf --- /dev/null +++ b/node_modules/strip-json-comments/readme.md @@ -0,0 +1,78 @@ +# strip-json-comments [![Build Status](https://travis-ci.com/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.com/github/sindresorhus/strip-json-comments) + +> Strip comments from JSON. Lets you use comments in your JSON files! + +This is now possible: + +```js +{ + // Rainbows + "unicorn": /* ❤ */ "cake" +} +``` + +It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +Also available as a [Gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[Grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[Broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. + +## Install + +``` +$ npm install strip-json-comments +``` + +## Usage + +```js +const json = `{ + // Rainbows + "unicorn": /* ❤ */ "cake" +}`; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` + +## API + +### stripJsonComments(jsonString, options?) + +#### jsonString + +Type: `string` + +Accepts a string with JSON and returns a string without comments. + +#### options + +Type: `object` + +##### whitespace + +Type: `boolean`\ +Default: `true` + +Replace comments with whitespace instead of stripping them entirely. + +## Benchmark + +``` +$ npm run bench +``` + +## Related + +- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module +- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/uc.micro/LICENSE.txt b/node_modules/uc.micro/LICENSE.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/uc.micro/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/uc.micro/README.md b/node_modules/uc.micro/README.md new file mode 100644 index 0000000000..7707da48cc --- /dev/null +++ b/node_modules/uc.micro/README.md @@ -0,0 +1,14 @@ +# uc.micro + +[![CI](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml) +[![NPM version](https://img.shields.io/npm/v/uc.micro.svg?style=flat)](https://www.npmjs.org/package/uc.micro) + +> Micro subset of unicode data files for [markdown-it](https://github.com/markdown-it) projects. + +Content of this repo is autogenerated from `unicode-` package, +maintained by [Mathias Bynens](https://github.com/mathiasbynens). + +That's just a proxy to reduce dependencies/install size. + +**This package content is ONLY for [markdown-it](https://github.com/markdown-it) +projects needs. Don't ask to extend it!** diff --git a/node_modules/uc.micro/categories/Cc/regex.mjs b/node_modules/uc.micro/categories/Cc/regex.mjs new file mode 100644 index 0000000000..91cd397c32 --- /dev/null +++ b/node_modules/uc.micro/categories/Cc/regex.mjs @@ -0,0 +1 @@ +export default /[\0-\x1F\x7F-\x9F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Cf/regex.mjs b/node_modules/uc.micro/categories/Cf/regex.mjs new file mode 100644 index 0000000000..bb58c7d3eb --- /dev/null +++ b/node_modules/uc.micro/categories/Cf/regex.mjs @@ -0,0 +1 @@ +export default /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/P/regex.mjs b/node_modules/uc.micro/categories/P/regex.mjs new file mode 100644 index 0000000000..b084264585 --- /dev/null +++ b/node_modules/uc.micro/categories/P/regex.mjs @@ -0,0 +1 @@ +export default /[!-#%-\*,-\/:;\?@\[-\]_\{\}\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]|\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\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\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]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/S/regex.mjs b/node_modules/uc.micro/categories/S/regex.mjs new file mode 100644 index 0000000000..45a2624c7e --- /dev/null +++ b/node_modules/uc.micro/categories/S/regex.mjs @@ -0,0 +1 @@ +export default /[\$\+<->\^`\|~\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-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\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]|\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\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Z/regex.mjs b/node_modules/uc.micro/categories/Z/regex.mjs new file mode 100644 index 0000000000..6f154197bb --- /dev/null +++ b/node_modules/uc.micro/categories/Z/regex.mjs @@ -0,0 +1 @@ +export default /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ \ No newline at end of file diff --git a/node_modules/uc.micro/index.mjs b/node_modules/uc.micro/index.mjs new file mode 100644 index 0000000000..21b80d34ac --- /dev/null +++ b/node_modules/uc.micro/index.mjs @@ -0,0 +1,8 @@ +import Any from './properties/Any/regex.mjs'; +import Cc from './categories/Cc/regex.mjs'; +import Cf from './categories/Cf/regex.mjs'; +import P from './categories/P/regex.mjs'; +import S from './categories/S/regex.mjs'; +import Z from './categories/Z/regex.mjs'; + +export { Any, Cc, Cf, P, S, Z }; diff --git a/node_modules/uc.micro/package.json b/node_modules/uc.micro/package.json new file mode 100644 index 0000000000..73102ce5a5 --- /dev/null +++ b/node_modules/uc.micro/package.json @@ -0,0 +1,37 @@ +{ + "name": "uc.micro", + "version": "2.1.0", + "description": "Micro subset of unicode data files for markdown-it projects.", + "repository": "markdown-it/uc.micro", + "license": "MIT", + "main": "build/index.cjs.js", + "module": "index.mjs", + "exports": { + ".": { + "require": "./build/index.cjs.js", + "import": "./index.mjs" + }, + "./*": { + "require": "./*", + "import": "./*" + } + }, + "files": [ + "index.mjs", + "categories/", + "properties/", + "build/" + ], + "scripts": { + "test": "npm run build && mocha", + "build": "rollup -c", + "update": "node update.mjs && npm test", + "prepublishOnly": "npm run build" + }, + "devDependencies": { + "@unicode/unicode-15.1.0": "^1.5.2", + "mocha": "^10.2.0", + "rollup": "^4.6.1", + "shelljs": "^0.8.5" + } +} diff --git a/node_modules/uc.micro/properties/Any/regex.mjs b/node_modules/uc.micro/properties/Any/regex.mjs new file mode 100644 index 0000000000..72d3b16d55 --- /dev/null +++ b/node_modules/uc.micro/properties/Any/regex.mjs @@ -0,0 +1 @@ +export default /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ \ No newline at end of file diff --git a/node_modules/which/CHANGELOG.md b/node_modules/which/CHANGELOG.md new file mode 100644 index 0000000000..7fb1f2033c --- /dev/null +++ b/node_modules/which/CHANGELOG.md @@ -0,0 +1,166 @@ +# Changes + + +## 2.0.2 + +* Rename bin to `node-which` + +## 2.0.1 + +* generate changelog and publish on version bump +* enforce 100% test coverage +* Promise interface + +## 2.0.0 + +* Parallel tests, modern JavaScript, and drop support for node < 8 + +## 1.3.1 + +* update deps +* update travis + +## v1.3.0 + +* Add nothrow option to which.sync +* update tap + +## v1.2.14 + +* appveyor: drop node 5 and 0.x +* travis-ci: add node 6, drop 0.x + +## v1.2.13 + +* test: Pass missing option to pass on windows +* update tap +* update isexe to 2.0.0 +* neveragain.tech pledge request + +## v1.2.12 + +* Removed unused require + +## v1.2.11 + +* Prevent changelog script from being included in package + +## v1.2.10 + +* Use env.PATH only, not env.Path + +## v1.2.9 + +* fix for paths starting with ../ +* Remove unused `is-absolute` module + +## v1.2.8 + +* bullet items in changelog that contain (but don't start with) # + +## v1.2.7 + +* strip 'update changelog' changelog entries out of changelog + +## v1.2.6 + +* make the changelog bulleted + +## v1.2.5 + +* make a changelog, and keep it up to date +* don't include tests in package +* Properly handle relative-path executables +* appveyor +* Attach error code to Not Found error +* Make tests pass on Windows + +## v1.2.4 + +* Fix typo + +## v1.2.3 + +* update isexe, fix regression in pathExt handling + +## v1.2.2 + +* update deps, use isexe module, test windows + +## v1.2.1 + +* Sometimes windows PATH entries are quoted +* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode. +* doc cli + +## v1.2.0 + +* Add support for opt.all and -as cli flags +* test the bin +* update travis +* Allow checking for multiple programs in bin/which +* tap 2 + +## v1.1.2 + +* travis +* Refactored and fixed undefined error on Windows +* Support strict mode + +## v1.1.1 + +* test +g exes against secondary groups, if available +* Use windows exe semantics on cygwin & msys +* cwd should be first in path on win32, not last +* Handle lower-case 'env.Path' on Windows +* Update docs +* use single-quotes + +## v1.1.0 + +* Add tests, depend on is-absolute + +## v1.0.9 + +* which.js: root is allowed to execute files owned by anyone + +## v1.0.8 + +* don't use graceful-fs + +## v1.0.7 + +* add license to package.json + +## v1.0.6 + +* isc license + +## 1.0.5 + +* Awful typo + +## 1.0.4 + +* Test for path absoluteness properly +* win: Allow '' as a pathext if cmd has a . in it + +## 1.0.3 + +* Remove references to execPath +* Make `which.sync()` work on Windows by honoring the PATHEXT variable. +* Make `isExe()` always return true on Windows. +* MIT + +## 1.0.2 + +* Only files can be exes + +## 1.0.1 + +* Respect the PATHEXT env for win32 support +* should 0755 the bin +* binary +* guts +* package +* 1st diff --git a/node_modules/which/LICENSE b/node_modules/which/LICENSE new file mode 100644 index 0000000000..19129e315f --- /dev/null +++ b/node_modules/which/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/which/README.md b/node_modules/which/README.md new file mode 100644 index 0000000000..cd833509f3 --- /dev/null +++ b/node_modules/which/README.md @@ -0,0 +1,54 @@ +# which + +Like the unix `which` utility. + +Finds the first instance of a specified executable in the PATH +environment variable. Does not cache the results, so `hash -r` is not +needed when the PATH changes. + +## USAGE + +```javascript +var which = require('which') + +// async usage +which('node', function (er, resolvedPath) { + // er is returned if no "node" is found on the PATH + // if it is found, then the absolute path to the exec is returned +}) + +// or promise +which('node').then(resolvedPath => { ... }).catch(er => { ... not found ... }) + +// sync usage +// throws if not found +var resolved = which.sync('node') + +// if nothrow option is used, returns null if not found +resolved = which.sync('node', {nothrow: true}) + +// Pass options to override the PATH and PATHEXT environment vars. +which('node', { path: someOtherPath }, function (er, resolved) { + if (er) + throw er + console.log('found at %j', resolved) +}) +``` + +## CLI USAGE + +Same as the BSD `which(1)` binary. + +``` +usage: which [-as] program ... +``` + +## OPTIONS + +You may pass an options object as the second argument. + +- `path`: Use instead of the `PATH` environment variable. +- `pathExt`: Use instead of the `PATHEXT` environment variable. +- `all`: Return all matches, instead of just the first one. Note that + this means the function returns an array of strings instead of a + single string. diff --git a/node_modules/which/package.json b/node_modules/which/package.json new file mode 100644 index 0000000000..97ad7fbabc --- /dev/null +++ b/node_modules/which/package.json @@ -0,0 +1,43 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "name": "which", + "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", + "version": "2.0.2", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-which.git" + }, + "main": "which.js", + "bin": { + "node-which": "./bin/node-which" + }, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "devDependencies": { + "mkdirp": "^0.5.0", + "rimraf": "^2.6.2", + "tap": "^14.6.9" + }, + "scripts": { + "test": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "prepublish": "npm run changelog", + "prechangelog": "bash gen-changelog.sh", + "changelog": "git add CHANGELOG.md", + "postchangelog": "git commit -m 'update changelog - '${npm_package_version}", + "postpublish": "git push origin --follow-tags" + }, + "files": [ + "which.js", + "bin/node-which" + ], + "tap": { + "check-coverage": true + }, + "engines": { + "node": ">= 8" + } +} diff --git a/node_modules/which/which.js b/node_modules/which/which.js new file mode 100644 index 0000000000..82afffd214 --- /dev/null +++ b/node_modules/which/which.js @@ -0,0 +1,125 @@ +const isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +const path = require('path') +const COLON = isWindows ? ';' : ':' +const isexe = require('isexe') + +const getNotFoundError = (cmd) => + Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) + +const getPathInfo = (cmd, opt) => { + const colon = opt.colon || COLON + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] + : ( + [ + // windows always checks the cwd first + ...(isWindows ? [process.cwd()] : []), + ...(opt.path || process.env.PATH || + /* istanbul ignore next: very unusual */ '').split(colon), + ] + ) + const pathExtExe = isWindows + ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' + : '' + const pathExt = isWindows ? pathExtExe.split(colon) : [''] + + if (isWindows) { + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + return { + pathEnv, + pathExt, + pathExtExe, + } +} + +const which = (cmd, opt, cb) => { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + if (!opt) + opt = {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + const step = i => new Promise((resolve, reject) => { + if (i === pathEnv.length) + return opt.all && found.length ? resolve(found) + : reject(getNotFoundError(cmd)) + + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + resolve(subStep(p, i, 0)) + }) + + const subStep = (p, i, ii) => new Promise((resolve, reject) => { + if (ii === pathExt.length) + return resolve(step(i + 1)) + const ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return resolve(p + ext) + } + return resolve(subStep(p, i, ii + 1)) + }) + }) + + return cb ? step(0).then(res => cb(null, res), cb) : step(0) +} + +const whichSync = (cmd, opt) => { + opt = opt || {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + for (let i = 0; i < pathEnv.length; i ++) { + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + for (let j = 0; j < pathExt.length; j ++) { + const cur = p + pathExt[j] + try { + const is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} + +module.exports = which +which.sync = whichSync diff --git a/node_modules/wrap-ansi-cjs/index.js b/node_modules/wrap-ansi-cjs/index.js new file mode 100755 index 0000000000..d502255bd1 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/index.js @@ -0,0 +1,216 @@ +'use strict'; +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); +const ansiStyles = require('ansi-styles'); + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsi(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsi(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +module.exports = (string, columns, options) => { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +}; diff --git a/node_modules/wrap-ansi-cjs/license b/node_modules/wrap-ansi-cjs/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/wrap-ansi-cjs/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 0000000000..2dbf6af2b6 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 0000000000..616ff837d3 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = ({onlyFirst = false} = {}) => { + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 0000000000..017f53116a --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "name": "ansi-regex", + "version": "5.0.1", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "chalk/ansi-regex", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "view-supported": "node fixtures/view-codes.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.9.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 0000000000..4d848bc36f --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
              +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts new file mode 100644 index 0000000000..44a907e580 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,345 @@ +declare type CSSColor = + | 'aliceblue' + | 'antiquewhite' + | 'aqua' + | 'aquamarine' + | 'azure' + | 'beige' + | 'bisque' + | 'black' + | 'blanchedalmond' + | 'blue' + | 'blueviolet' + | 'brown' + | 'burlywood' + | 'cadetblue' + | 'chartreuse' + | 'chocolate' + | 'coral' + | 'cornflowerblue' + | 'cornsilk' + | 'crimson' + | 'cyan' + | 'darkblue' + | 'darkcyan' + | 'darkgoldenrod' + | 'darkgray' + | 'darkgreen' + | 'darkgrey' + | 'darkkhaki' + | 'darkmagenta' + | 'darkolivegreen' + | 'darkorange' + | 'darkorchid' + | 'darkred' + | 'darksalmon' + | 'darkseagreen' + | 'darkslateblue' + | 'darkslategray' + | 'darkslategrey' + | 'darkturquoise' + | 'darkviolet' + | 'deeppink' + | 'deepskyblue' + | 'dimgray' + | 'dimgrey' + | 'dodgerblue' + | 'firebrick' + | 'floralwhite' + | 'forestgreen' + | 'fuchsia' + | 'gainsboro' + | 'ghostwhite' + | 'gold' + | 'goldenrod' + | 'gray' + | 'green' + | 'greenyellow' + | 'grey' + | 'honeydew' + | 'hotpink' + | 'indianred' + | 'indigo' + | 'ivory' + | 'khaki' + | 'lavender' + | 'lavenderblush' + | 'lawngreen' + | 'lemonchiffon' + | 'lightblue' + | 'lightcoral' + | 'lightcyan' + | 'lightgoldenrodyellow' + | 'lightgray' + | 'lightgreen' + | 'lightgrey' + | 'lightpink' + | 'lightsalmon' + | 'lightseagreen' + | 'lightskyblue' + | 'lightslategray' + | 'lightslategrey' + | 'lightsteelblue' + | 'lightyellow' + | 'lime' + | 'limegreen' + | 'linen' + | 'magenta' + | 'maroon' + | 'mediumaquamarine' + | 'mediumblue' + | 'mediumorchid' + | 'mediumpurple' + | 'mediumseagreen' + | 'mediumslateblue' + | 'mediumspringgreen' + | 'mediumturquoise' + | 'mediumvioletred' + | 'midnightblue' + | 'mintcream' + | 'mistyrose' + | 'moccasin' + | 'navajowhite' + | 'navy' + | 'oldlace' + | 'olive' + | 'olivedrab' + | 'orange' + | 'orangered' + | 'orchid' + | 'palegoldenrod' + | 'palegreen' + | 'paleturquoise' + | 'palevioletred' + | 'papayawhip' + | 'peachpuff' + | 'peru' + | 'pink' + | 'plum' + | 'powderblue' + | 'purple' + | 'rebeccapurple' + | 'red' + | 'rosybrown' + | 'royalblue' + | 'saddlebrown' + | 'salmon' + | 'sandybrown' + | 'seagreen' + | 'seashell' + | 'sienna' + | 'silver' + | 'skyblue' + | 'slateblue' + | 'slategray' + | 'slategrey' + | 'snow' + | 'springgreen' + | 'steelblue' + | 'tan' + | 'teal' + | 'thistle' + | 'tomato' + | 'turquoise' + | 'violet' + | 'wheat' + | 'white' + | 'whitesmoke' + | 'yellow' + | 'yellowgreen'; + +declare namespace ansiStyles { + interface ColorConvert { + /** + The RGB color space. + + @param red - (`0`-`255`) + @param green - (`0`-`255`) + @param blue - (`0`-`255`) + */ + rgb(red: number, green: number, blue: number): string; + + /** + The RGB HEX color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hex(hex: string): string; + + /** + @param keyword - A CSS color name. + */ + keyword(keyword: CSSColor): string; + + /** + The HSL color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param lightness - (`0`-`100`) + */ + hsl(hue: number, saturation: number, lightness: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param value - (`0`-`100`) + */ + hsv(hue: number, saturation: number, value: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param whiteness - (`0`-`100`) + @param blackness - (`0`-`100`) + */ + hwb(hue: number, whiteness: number, blackness: number): string; + + /** + Use a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color. + */ + ansi(ansi: number): string; + + /** + Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. + */ + ansi256(ansi: number): string; + } + + interface CSPair { + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; + } + + interface ColorBase { + readonly ansi: ColorConvert; + readonly ansi256: ColorConvert; + readonly ansi16m: ColorConvert; + + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + } + + interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; + } + + interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; + } + + interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; + } +} + +declare const ansiStyles: { + readonly modifier: ansiStyles.Modifier; + readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase; + readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase; + readonly codes: ReadonlyMap; +} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier; + +export = ansiStyles; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js new file mode 100644 index 0000000000..5d82581a13 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js @@ -0,0 +1,163 @@ +'use strict'; + +const wrapAnsi16 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => (...args) => { + const rgb = fn(...args); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +const ansi2ansi = n => n; +const rgb2rgb = (r, g, b) => [r, g, b]; + +const setLazyProperty = (object, property, get) => { + Object.defineProperty(object, property, { + get: () => { + const value = get(); + + Object.defineProperty(object, property, { + value, + enumerable: true, + configurable: true + }); + + return value; + }, + enumerable: true, + configurable: true + }); +}; + +/** @type {typeof import('color-convert')} */ +let colorConvert; +const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { + if (colorConvert === undefined) { + colorConvert = require('color-convert'); + } + + const offset = isBackground ? 10 : 0; + const styles = {}; + + for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; + if (sourceSpace === targetSpace) { + styles[name] = wrap(identity, offset); + } else if (typeof suite === 'object') { + styles[name] = wrap(suite[targetSpace], offset); + } + } + + return styles; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Alias bright black as gray (and grey) + styles.color.gray = styles.color.blackBright; + styles.bgColor.bgGray = styles.bgColor.bgBlackBright; + styles.color.grey = styles.color.blackBright; + styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); + setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json new file mode 100644 index 0000000000..75393284d7 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json @@ -0,0 +1,56 @@ +{ + "name": "ansi-styles", + "version": "4.3.0", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "color-convert": "^2.0.1" + }, + "devDependencies": { + "@types/color-convert": "^1.9.0", + "ava": "^2.3.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.11.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md new file mode 100644 index 0000000000..24883de808 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md @@ -0,0 +1,152 @@ +# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + + + +## Install + +``` +$ npm install ansi-styles +``` + +## Usage + +```js +const style = require('ansi-styles'); + +console.log(`${style.green.open}Hello world!${style.green.close}`); + + +// Color conversion between 16/256/truecolor +// NOTE: If conversion goes to 16 colors or 256 colors, the original color +// may be degraded to fit that color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); +console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); +console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close); +``` + +## API + +Each style has an `open` and `close` property. + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `style.modifier` +- `style.color` +- `style.bgColor` + +###### Example + +```js +console.log(style.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +console.log(style.codes.get(36)); +//=> 39 +``` + +## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) + +`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. + +The following color spaces from `color-convert` are supported: + +- `rgb` +- `hex` +- `keyword` +- `hsl` +- `hsv` +- `hwb` +- `ansi` +- `ansi256` + +To use these, call the associated conversion function with the intended output, for example: + +```js +style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code +style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code + +style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code +style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code + +style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code +style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 0000000000..a41e0a7ef9 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md new file mode 100644 index 0000000000..f10e173335 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 0000000000..b4cf3dcd38 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 0000000000..780309df58 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts new file mode 100644 index 0000000000..1955b4704e --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js new file mode 100644 index 0000000000..d993a3a99c --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json new file mode 100644 index 0000000000..6d32352829 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json @@ -0,0 +1,50 @@ +{ + "name": "emoji-regex", + "version": "8.0.0", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js new file mode 100644 index 0000000000..0a55ce2f23 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts new file mode 100644 index 0000000000..12b5309751 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js new file mode 100644 index 0000000000..f4d261a96a --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/license b/node_modules/wrap-ansi-cjs/node_modules/string-width/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json new file mode 100644 index 0000000000..28ba7b4cae --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json @@ -0,0 +1,56 @@ +{ + "name": "string-width", + "version": "4.2.3", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md new file mode 100644 index 0000000000..bdd314129c --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts new file mode 100644 index 0000000000..907fccc292 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js new file mode 100644 index 0000000000..9a593dfcd1 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license new file mode 100644 index 0000000000..e7af2f7710 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json new file mode 100644 index 0000000000..1a41108d42 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json @@ -0,0 +1,54 @@ +{ + "name": "strip-ansi", + "version": "6.0.1", + "description": "Strip ANSI escape codes from a string", + "license": "MIT", + "repository": "chalk/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md new file mode 100644 index 0000000000..7c4b56d46d --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/wrap-ansi-cjs/package.json b/node_modules/wrap-ansi-cjs/package.json new file mode 100644 index 0000000000..dfb2f4f108 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/package.json @@ -0,0 +1,62 @@ +{ + "name": "wrap-ansi", + "version": "7.0.0", + "description": "Wordwrap a string with ANSI escape codes", + "license": "MIT", + "repository": "chalk/wrap-ansi", + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "devDependencies": { + "ava": "^2.1.0", + "chalk": "^4.0.0", + "coveralls": "^3.0.3", + "has-ansi": "^4.0.0", + "nyc": "^15.0.1", + "xo": "^0.29.1" + } +} diff --git a/node_modules/wrap-ansi-cjs/readme.md b/node_modules/wrap-ansi-cjs/readme.md new file mode 100644 index 0000000000..68779ba5f4 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +const chalk = require('chalk'); +const wrapAnsi = require('wrap-ansi'); + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              diff --git a/node_modules/wrap-ansi/index.d.ts b/node_modules/wrap-ansi/index.d.ts new file mode 100644 index 0000000000..95471cade4 --- /dev/null +++ b/node_modules/wrap-ansi/index.d.ts @@ -0,0 +1,41 @@ +export type Options = { + /** + By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + + @default false + */ + readonly hard?: boolean; + + /** + By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + + @default true + */ + readonly wordWrap?: boolean; + + /** + Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + + @default true + */ + readonly trim?: boolean; +}; + +/** +Wrap words to the specified column width. + +@param string - String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. +@param columns - Number of columns to wrap the text to. + +@example +``` +import chalk from 'chalk'; +import wrapAnsi from 'wrap-ansi'; + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` +*/ +export default function wrapAnsi(string: string, columns: number, options?: Options): string; diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js new file mode 100755 index 0000000000..d80c74c19c --- /dev/null +++ b/node_modules/wrap-ansi/index.js @@ -0,0 +1,214 @@ +import stringWidth from 'string-width'; +import stripAnsi from 'strip-ansi'; +import ansiStyles from 'ansi-styles'; + +const ESCAPES = new Set([ + '\u001B', + '\u009B', +]); + +const END_CODE = 39; +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(row => stringVisibleTrimSpacesRight(row)); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsiCode(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsiCode(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +export default function wrapAnsi(string, columns, options) { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +} diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license new file mode 100644 index 0000000000..fa7ceba3eb --- /dev/null +++ b/node_modules/wrap-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json new file mode 100644 index 0000000000..198a5dbcb7 --- /dev/null +++ b/node_modules/wrap-ansi/package.json @@ -0,0 +1,69 @@ +{ + "name": "wrap-ansi", + "version": "8.1.0", + "description": "Wordwrap a string with ANSI escape codes", + "license": "MIT", + "repository": "chalk/wrap-ansi", + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && nyc ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "chalk": "^4.1.2", + "coveralls": "^3.1.1", + "has-ansi": "^5.0.1", + "nyc": "^15.1.0", + "tsd": "^0.25.0", + "xo": "^0.44.0" + } +} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md new file mode 100644 index 0000000000..21f6fed7b6 --- /dev/null +++ b/node_modules/wrap-ansi/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +import chalk from 'chalk'; +import wrapAnsi from 'wrap-ansi'; + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
              + + Get professional support for this package with a Tidelift subscription + +
              + + Tidelift helps make open source sustainable for maintainers while giving companies
              assurances about security, maintenance, and licensing for their dependencies. +
              +
              From 5333a1edccbb0b9ed45677914e72d1a3ff9b5a06 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 14:34:46 -0500 Subject: [PATCH 46/51] removing node modules --- node_modules/.bin/glob | 1 - node_modules/.bin/js-yaml | 1 - node_modules/.bin/katex | 1 - node_modules/.bin/markdown-it | 1 - node_modules/.bin/markdownlint | 1 - node_modules/.bin/node-which | 1 - node_modules/.bin/run-con | 1 - node_modules/.package-lock.json | 1415 ------- node_modules/@isaacs/cliui/LICENSE.txt | 14 - node_modules/@isaacs/cliui/README.md | 143 - node_modules/@isaacs/cliui/index.mjs | 14 - node_modules/@isaacs/cliui/package.json | 86 - node_modules/@pkgjs/parseargs/.editorconfig | 14 - node_modules/@pkgjs/parseargs/CHANGELOG.md | 147 - node_modules/@pkgjs/parseargs/LICENSE | 201 - node_modules/@pkgjs/parseargs/README.md | 413 -- .../parseargs/examples/is-default-value.js | 25 - .../parseargs/examples/limit-long-syntax.js | 35 - .../@pkgjs/parseargs/examples/negate.js | 43 - .../parseargs/examples/no-repeated-options.js | 31 - .../parseargs/examples/ordered-options.mjs | 41 - .../parseargs/examples/simple-hard-coded.js | 26 - node_modules/@pkgjs/parseargs/index.js | 396 -- .../@pkgjs/parseargs/internal/errors.js | 47 - .../@pkgjs/parseargs/internal/primordials.js | 393 -- .../@pkgjs/parseargs/internal/util.js | 14 - .../@pkgjs/parseargs/internal/validators.js | 89 - node_modules/@pkgjs/parseargs/package.json | 36 - node_modules/@pkgjs/parseargs/utils.js | 198 - node_modules/@types/debug/LICENSE | 21 - node_modules/@types/debug/README.md | 69 - node_modules/@types/debug/index.d.ts | 50 - node_modules/@types/debug/package.json | 57 - node_modules/@types/katex/LICENSE | 21 - node_modules/@types/katex/README.md | 15 - .../@types/katex/contrib/auto-render.d.ts | 67 - node_modules/@types/katex/index.d.ts | 151 - node_modules/@types/katex/package.json | 50 - node_modules/@types/ms/LICENSE | 21 - node_modules/@types/ms/README.md | 82 - node_modules/@types/ms/index.d.ts | 63 - node_modules/@types/ms/package.json | 26 - node_modules/@types/unist/LICENSE | 21 - node_modules/@types/unist/README.md | 122 - node_modules/@types/unist/index.d.ts | 103 - node_modules/@types/unist/package.json | 55 - node_modules/ansi-regex/index.d.ts | 33 - node_modules/ansi-regex/index.js | 10 - node_modules/ansi-regex/license | 9 - node_modules/ansi-regex/package.json | 61 - node_modules/ansi-regex/readme.md | 60 - node_modules/ansi-styles/index.d.ts | 236 -- node_modules/ansi-styles/index.js | 223 - node_modules/ansi-styles/license | 9 - node_modules/ansi-styles/package.json | 54 - node_modules/ansi-styles/readme.md | 173 - node_modules/argparse/CHANGELOG.md | 216 - node_modules/argparse/LICENSE | 254 -- node_modules/argparse/README.md | 84 - node_modules/argparse/argparse.js | 3707 ----------------- node_modules/argparse/package.json | 31 - .../balanced-match/.github/FUNDING.yml | 2 - node_modules/balanced-match/LICENSE.md | 21 - node_modules/balanced-match/README.md | 97 - node_modules/balanced-match/index.js | 62 - node_modules/balanced-match/package.json | 48 - .../brace-expansion/.github/FUNDING.yml | 2 - node_modules/brace-expansion/LICENSE | 21 - node_modules/brace-expansion/README.md | 135 - node_modules/brace-expansion/index.js | 203 - node_modules/brace-expansion/package.json | 46 - .../character-entities-legacy/index.d.ts | 6 - .../character-entities-legacy/index.js | 113 - .../character-entities-legacy/license | 22 - .../character-entities-legacy/package.json | 77 - .../character-entities-legacy/readme.md | 157 - node_modules/character-entities/index.d.ts | 6 - node_modules/character-entities/index.js | 2132 ---------- node_modules/character-entities/license | 22 - node_modules/character-entities/package.json | 78 - node_modules/character-entities/readme.md | 152 - .../character-reference-invalid/index.d.ts | 6 - .../character-reference-invalid/index.js | 35 - .../character-reference-invalid/license | 22 - .../character-reference-invalid/package.json | 83 - .../character-reference-invalid/readme.md | 156 - node_modules/color-convert/CHANGELOG.md | 54 - node_modules/color-convert/LICENSE | 21 - node_modules/color-convert/README.md | 68 - node_modules/color-convert/conversions.js | 839 ---- node_modules/color-convert/index.js | 81 - node_modules/color-convert/package.json | 48 - node_modules/color-convert/route.js | 97 - node_modules/color-name/LICENSE | 8 - node_modules/color-name/README.md | 11 - node_modules/color-name/index.js | 152 - node_modules/color-name/package.json | 28 - node_modules/commander/LICENSE | 22 - node_modules/commander/Readme.md | 1149 ----- node_modules/commander/esm.mjs | 16 - node_modules/commander/index.js | 24 - node_modules/commander/package-support.json | 16 - node_modules/commander/package.json | 82 - node_modules/commander/typings/esm.d.mts | 3 - node_modules/commander/typings/index.d.ts | 1045 ----- node_modules/cross-spawn/LICENSE | 21 - node_modules/cross-spawn/README.md | 89 - node_modules/cross-spawn/index.js | 39 - node_modules/cross-spawn/package.json | 73 - node_modules/debug/LICENSE | 20 - node_modules/debug/README.md | 481 --- node_modules/debug/package.json | 65 - node_modules/debug/src/browser.js | 272 -- node_modules/debug/src/common.js | 292 -- node_modules/debug/src/index.js | 10 - node_modules/debug/src/node.js | 263 -- .../index.d.ts | 12 - .../index.dom.d.ts | 6 - .../index.dom.js | 33 - .../decode-named-character-reference/index.js | 18 - .../decode-named-character-reference/license | 22 - .../package.json | 89 - .../readme.md | 135 - node_modules/deep-extend/CHANGELOG.md | 46 - node_modules/deep-extend/LICENSE | 20 - node_modules/deep-extend/README.md | 91 - node_modules/deep-extend/index.js | 1 - node_modules/deep-extend/package.json | 62 - node_modules/dequal/index.d.ts | 1 - node_modules/dequal/license | 21 - node_modules/dequal/lite/index.d.ts | 1 - node_modules/dequal/lite/index.js | 31 - node_modules/dequal/lite/index.min.js | 1 - node_modules/dequal/lite/index.mjs | 29 - node_modules/dequal/package.json | 57 - node_modules/dequal/readme.md | 112 - node_modules/devlop/license | 22 - node_modules/devlop/package.json | 80 - node_modules/devlop/readme.md | 360 -- node_modules/eastasianwidth/README.md | 32 - node_modules/eastasianwidth/eastasianwidth.js | 311 -- node_modules/eastasianwidth/package.json | 18 - node_modules/emoji-regex/LICENSE-MIT.txt | 20 - node_modules/emoji-regex/README.md | 137 - node_modules/emoji-regex/RGI_Emoji.d.ts | 5 - node_modules/emoji-regex/RGI_Emoji.js | 6 - .../emoji-regex/es2015/RGI_Emoji.d.ts | 5 - node_modules/emoji-regex/es2015/RGI_Emoji.js | 6 - node_modules/emoji-regex/es2015/index.d.ts | 5 - node_modules/emoji-regex/es2015/index.js | 6 - node_modules/emoji-regex/es2015/text.d.ts | 5 - node_modules/emoji-regex/es2015/text.js | 6 - node_modules/emoji-regex/index.d.ts | 5 - node_modules/emoji-regex/index.js | 6 - node_modules/emoji-regex/package.json | 52 - node_modules/emoji-regex/text.d.ts | 5 - node_modules/emoji-regex/text.js | 6 - node_modules/entities/LICENSE | 11 - node_modules/entities/package.json | 90 - node_modules/entities/readme.md | 122 - node_modules/foreground-child/LICENSE | 15 - node_modules/foreground-child/README.md | 128 - node_modules/foreground-child/package.json | 111 - node_modules/glob/LICENSE | 15 - node_modules/glob/README.md | 1265 ------ node_modules/glob/package.json | 99 - node_modules/ignore/LICENSE-MIT | 21 - node_modules/ignore/README.md | 452 -- node_modules/ignore/index.d.ts | 81 - node_modules/ignore/index.js | 779 ---- node_modules/ignore/legacy.js | 673 --- node_modules/ignore/package.json | 88 - node_modules/ini/LICENSE | 15 - node_modules/ini/README.md | 180 - node_modules/ini/package.json | 45 - node_modules/is-alphabetical/index.d.ts | 8 - node_modules/is-alphabetical/index.js | 16 - node_modules/is-alphabetical/license | 22 - node_modules/is-alphabetical/package.json | 73 - node_modules/is-alphabetical/readme.md | 141 - node_modules/is-alphanumerical/index.d.ts | 8 - node_modules/is-alphanumerical/index.js | 13 - node_modules/is-alphanumerical/license | 22 - node_modules/is-alphanumerical/package.json | 79 - node_modules/is-alphanumerical/readme.md | 142 - node_modules/is-decimal/index.d.ts | 8 - node_modules/is-decimal/index.js | 13 - node_modules/is-decimal/license | 22 - node_modules/is-decimal/package.json | 73 - node_modules/is-decimal/readme.md | 139 - .../is-fullwidth-code-point/index.d.ts | 17 - node_modules/is-fullwidth-code-point/index.js | 50 - node_modules/is-fullwidth-code-point/license | 9 - .../is-fullwidth-code-point/package.json | 42 - .../is-fullwidth-code-point/readme.md | 39 - node_modules/is-hexadecimal/index.d.ts | 8 - node_modules/is-hexadecimal/index.js | 17 - node_modules/is-hexadecimal/license | 22 - node_modules/is-hexadecimal/package.json | 73 - node_modules/is-hexadecimal/readme.md | 141 - node_modules/isexe/.npmignore | 2 - node_modules/isexe/LICENSE | 15 - node_modules/isexe/README.md | 51 - node_modules/isexe/index.js | 57 - node_modules/isexe/mode.js | 41 - node_modules/isexe/package.json | 31 - node_modules/isexe/test/basic.js | 221 - node_modules/isexe/windows.js | 42 - node_modules/jackspeak/LICENSE.md | 55 - node_modules/jackspeak/README.md | 357 -- node_modules/jackspeak/package.json | 95 - node_modules/js-yaml/CHANGELOG.md | 616 --- node_modules/js-yaml/LICENSE | 21 - node_modules/js-yaml/README.md | 246 -- node_modules/js-yaml/index.js | 47 - node_modules/js-yaml/package.json | 66 - node_modules/jsonc-parser/CHANGELOG.md | 76 - node_modules/jsonc-parser/LICENSE.md | 21 - node_modules/jsonc-parser/README.md | 364 -- node_modules/jsonc-parser/SECURITY.md | 41 - node_modules/jsonc-parser/package.json | 37 - node_modules/jsonpointer/LICENSE.md | 21 - node_modules/jsonpointer/README.md | 45 - node_modules/jsonpointer/jsonpointer.d.ts | 35 - node_modules/jsonpointer/jsonpointer.js | 100 - node_modules/jsonpointer/package.json | 48 - node_modules/katex/LICENSE | 21 - node_modules/katex/README.md | 125 - node_modules/katex/cli.js | 112 - .../katex/contrib/auto-render/README.md | 8 - .../katex/contrib/auto-render/auto-render.js | 142 - .../katex/contrib/auto-render/index.html | 56 - .../contrib/auto-render/splitAtDelimiters.js | 85 - .../auto-render/test/auto-render-spec.js | 363 -- node_modules/katex/contrib/copy-tex/README.md | 39 - .../katex/contrib/copy-tex/copy-tex.js | 51 - .../katex/contrib/copy-tex/index.html | 38 - .../katex/contrib/copy-tex/katex2tex.js | 61 - .../contrib/mathtex-script-type/README.md | 38 - .../mathtex-script-type.js | 22 - node_modules/katex/contrib/mhchem/README.md | 23 - node_modules/katex/contrib/mhchem/mhchem.js | 1695 -------- .../render-a11y-string/render-a11y-string.js | 746 ---- .../test/render-a11y-string-spec.js | 549 --- node_modules/katex/katex.js | 247 -- .../katex/node_modules/commander/LICENSE | 22 - .../katex/node_modules/commander/Readme.md | 1015 ----- .../katex/node_modules/commander/esm.mjs | 15 - .../katex/node_modules/commander/index.js | 27 - .../commander/package-support.json | 16 - .../katex/node_modules/commander/package.json | 69 - .../node_modules/commander/typings/index.d.ts | 774 ---- node_modules/katex/package.json | 195 - node_modules/katex/src/Lexer.js | 122 - node_modules/katex/src/MacroExpander.js | 470 --- node_modules/katex/src/Namespace.js | 129 - node_modules/katex/src/Options.js | 319 -- node_modules/katex/src/ParseError.js | 86 - node_modules/katex/src/Parser.js | 1029 ----- node_modules/katex/src/Settings.js | 360 -- node_modules/katex/src/SourceLocation.js | 42 - node_modules/katex/src/Style.js | 130 - node_modules/katex/src/Token.js | 47 - node_modules/katex/src/buildCommon.js | 784 ---- node_modules/katex/src/buildHTML.js | 406 -- node_modules/katex/src/buildMathML.js | 322 -- node_modules/katex/src/buildTree.js | 67 - node_modules/katex/src/defineEnvironment.js | 117 - node_modules/katex/src/defineFunction.js | 223 - node_modules/katex/src/defineMacro.js | 125 - node_modules/katex/src/delimiter.js | 835 ---- node_modules/katex/src/domTree.js | 632 --- node_modules/katex/src/environments.js | 9 - node_modules/katex/src/environments/array.js | 1118 ----- node_modules/katex/src/environments/cd.js | 313 -- node_modules/katex/src/fontMetrics.js | 282 -- node_modules/katex/src/fontMetricsData.js | 2077 --------- node_modules/katex/src/fonts/Makefile | 139 - node_modules/katex/src/fonts/default.cfg | 20 - .../katex/src/fonts/generate_fonts.py | 58 - node_modules/katex/src/fonts/makeBlacker | 49 - node_modules/katex/src/fonts/makeFF | 2005 --------- node_modules/katex/src/fonts/xbbold.mf | 182 - node_modules/katex/src/functions.js | 55 - node_modules/katex/src/functions/accent.js | 284 -- .../katex/src/functions/accentunder.js | 60 - node_modules/katex/src/functions/arrow.js | 144 - node_modules/katex/src/functions/char.js | 45 - node_modules/katex/src/functions/color.js | 88 - node_modules/katex/src/functions/cr.js | 61 - node_modules/katex/src/functions/def.js | 210 - .../katex/src/functions/delimsizing.js | 360 -- node_modules/katex/src/functions/enclose.js | 323 -- .../katex/src/functions/environment.js | 62 - node_modules/katex/src/functions/font.js | 120 - node_modules/katex/src/functions/genfrac.js | 510 --- node_modules/katex/src/functions/hbox.js | 39 - .../katex/src/functions/horizBrace.js | 137 - node_modules/katex/src/functions/href.js | 93 - node_modules/katex/src/functions/html.js | 102 - .../katex/src/functions/htmlmathml.js | 34 - .../katex/src/functions/includegraphics.js | 151 - node_modules/katex/src/functions/kern.js | 56 - node_modules/katex/src/functions/lap.js | 74 - node_modules/katex/src/functions/math.js | 42 - .../katex/src/functions/mathchoice.js | 51 - node_modules/katex/src/functions/mclass.js | 168 - node_modules/katex/src/functions/op.js | 334 -- .../katex/src/functions/operatorname.js | 164 - node_modules/katex/src/functions/ordgroup.js | 22 - node_modules/katex/src/functions/overline.js | 59 - node_modules/katex/src/functions/phantom.js | 117 - node_modules/katex/src/functions/pmb.js | 44 - node_modules/katex/src/functions/raisebox.js | 46 - node_modules/katex/src/functions/relax.js | 17 - node_modules/katex/src/functions/rule.js | 77 - node_modules/katex/src/functions/sizing.js | 91 - node_modules/katex/src/functions/smash.js | 110 - node_modules/katex/src/functions/sqrt.js | 125 - node_modules/katex/src/functions/styling.js | 73 - node_modules/katex/src/functions/supsub.js | 267 -- node_modules/katex/src/functions/symbolsOp.js | 34 - .../katex/src/functions/symbolsOrd.js | 62 - .../katex/src/functions/symbolsSpacing.js | 73 - node_modules/katex/src/functions/tag.js | 40 - node_modules/katex/src/functions/text.js | 76 - node_modules/katex/src/functions/underline.js | 58 - .../src/functions/utils/assembleSupSub.js | 120 - node_modules/katex/src/functions/vcenter.js | 44 - node_modules/katex/src/functions/verb.js | 58 - node_modules/katex/src/macros.js | 1033 ----- node_modules/katex/src/mathMLTree.js | 267 -- node_modules/katex/src/metrics/README.md | 23 - .../katex/src/metrics/extract_tfms.py | 114 - .../katex/src/metrics/extract_ttfs.py | 122 - node_modules/katex/src/metrics/format_json.py | 28 - node_modules/katex/src/metrics/mapping.pl | 1224 ------ node_modules/katex/src/metrics/parse_tfm.py | 211 - node_modules/katex/src/parseNode.js | 524 --- node_modules/katex/src/parseTree.js | 49 - node_modules/katex/src/spacingData.js | 108 - node_modules/katex/src/stretchy.js | 378 -- node_modules/katex/src/styles/fonts.scss | 71 - node_modules/katex/src/styles/katex.scss | 664 --- node_modules/katex/src/svgGeometry.js | 545 --- node_modules/katex/src/symbols.js | 890 ---- node_modules/katex/src/tree.js | 78 - node_modules/katex/src/types.js | 36 - node_modules/katex/src/unicodeAccents.js | 18 - node_modules/katex/src/unicodeScripts.js | 126 - node_modules/katex/src/unicodeSupOrSub.js | 108 - node_modules/katex/src/unicodeSymbols.js | 32 - node_modules/katex/src/units.js | 106 - node_modules/katex/src/utils.js | 130 - node_modules/katex/src/wide-character.js | 111 - node_modules/katex/types/katex.d.ts | 258 -- node_modules/linkify-it/LICENSE | 22 - node_modules/linkify-it/README.md | 196 - node_modules/linkify-it/index.mjs | 642 --- node_modules/linkify-it/package.json | 58 - node_modules/lru-cache/LICENSE | 15 - node_modules/lru-cache/README.md | 331 -- node_modules/lru-cache/package.json | 116 - node_modules/markdown-it/LICENSE | 22 - node_modules/markdown-it/README.md | 324 -- node_modules/markdown-it/index.mjs | 1 - node_modules/markdown-it/package.json | 92 - node_modules/markdownlint-cli/LICENSE | 21 - node_modules/markdownlint-cli/README.md | 181 - node_modules/markdownlint-cli/markdownlint.js | 336 -- node_modules/markdownlint-cli/package.json | 95 - node_modules/markdownlint/CHANGELOG.md | 495 --- node_modules/markdownlint/CONTRIBUTING.md | 93 - node_modules/markdownlint/LICENSE | 21 - node_modules/markdownlint/README.md | 1037 ----- node_modules/markdownlint/doc/CustomRules.md | 194 - node_modules/markdownlint/doc/Prettier.md | 27 - .../markdownlint/doc/ReleaseProcess.md | 20 - node_modules/markdownlint/doc/Rules.md | 2535 ----------- node_modules/markdownlint/doc/md001.md | 37 - node_modules/markdownlint/doc/md003.md | 59 - node_modules/markdownlint/doc/md004.md | 50 - node_modules/markdownlint/doc/md005.md | 53 - node_modules/markdownlint/doc/md007.md | 52 - node_modules/markdownlint/doc/md009.md | 51 - node_modules/markdownlint/doc/md010.md | 56 - node_modules/markdownlint/doc/md011.md | 30 - node_modules/markdownlint/doc/md012.md | 38 - node_modules/markdownlint/doc/md013.md | 58 - node_modules/markdownlint/doc/md014.md | 54 - node_modules/markdownlint/doc/md018.md | 27 - node_modules/markdownlint/doc/md019.md | 28 - node_modules/markdownlint/doc/md020.md | 29 - node_modules/markdownlint/doc/md021.md | 31 - node_modules/markdownlint/doc/md022.md | 52 - node_modules/markdownlint/doc/md023.md | 33 - node_modules/markdownlint/doc/md024.md | 44 - node_modules/markdownlint/doc/md025.md | 49 - node_modules/markdownlint/doc/md026.md | 40 - node_modules/markdownlint/doc/md027.md | 24 - node_modules/markdownlint/doc/md028.md | 40 - node_modules/markdownlint/doc/md029.md | 98 - node_modules/markdownlint/doc/md030.md | 82 - node_modules/markdownlint/doc/md031.md | 50 - node_modules/markdownlint/doc/md032.md | 55 - node_modules/markdownlint/doc/md033.md | 27 - node_modules/markdownlint/doc/md034.md | 55 - node_modules/markdownlint/doc/md035.md | 37 - node_modules/markdownlint/doc/md036.md | 45 - node_modules/markdownlint/doc/md037.md | 37 - node_modules/markdownlint/doc/md038.md | 40 - node_modules/markdownlint/doc/md039.md | 21 - node_modules/markdownlint/doc/md040.md | 52 - node_modules/markdownlint/doc/md041.md | 49 - node_modules/markdownlint/doc/md042.md | 32 - node_modules/markdownlint/doc/md043.md | 69 - node_modules/markdownlint/doc/md044.md | 45 - node_modules/markdownlint/doc/md045.md | 40 - node_modules/markdownlint/doc/md046.md | 40 - node_modules/markdownlint/doc/md047.md | 34 - node_modules/markdownlint/doc/md048.md | 42 - node_modules/markdownlint/doc/md049.md | 36 - node_modules/markdownlint/doc/md050.md | 35 - node_modules/markdownlint/doc/md051.md | 95 - node_modules/markdownlint/doc/md052.md | 40 - node_modules/markdownlint/doc/md053.md | 38 - node_modules/markdownlint/doc/md054.md | 100 - node_modules/markdownlint/doc/md055.md | 55 - node_modules/markdownlint/doc/md056.md | 37 - node_modules/markdownlint/doc/md058.md | 48 - node_modules/markdownlint/helpers/LICENSE | 21 - node_modules/markdownlint/helpers/README.md | 29 - node_modules/markdownlint/helpers/helpers.cjs | 542 --- .../helpers/micromark-helpers.cjs | 301 -- .../markdownlint/helpers/package.json | 26 - node_modules/markdownlint/helpers/shared.cjs | 16 - node_modules/markdownlint/package.json | 120 - .../markdownlint/schema/.markdownlint.jsonc | 310 -- .../markdownlint/schema/.markdownlint.yaml | 277 -- .../schema/ValidatingConfiguration.md | 26 - .../markdownlint-config-schema-strict.json | 1841 -------- .../schema/markdownlint-config-schema.json | 1846 -------- node_modules/markdownlint/style/all.json | 5 - .../markdownlint/style/cirosantilli.json | 22 - node_modules/markdownlint/style/prettier.json | 27 - node_modules/markdownlint/style/relaxed.json | 12 - node_modules/mdurl/LICENSE | 45 - node_modules/mdurl/README.md | 102 - node_modules/mdurl/index.mjs | 11 - node_modules/mdurl/package.json | 37 - .../micromark-core-commonmark/dev/index.d.ts | 23 - .../dev/index.d.ts.map | 1 - .../micromark-core-commonmark/dev/index.js | 22 - .../micromark-core-commonmark/index.d.ts | 23 - .../micromark-core-commonmark/index.d.ts.map | 1 - .../micromark-core-commonmark/index.js | 22 - .../micromark-core-commonmark/license | 22 - .../micromark-core-commonmark/package.json | 74 - .../micromark-core-commonmark/readme.md | 171 - .../dev/index.d.ts | 156 - .../dev/index.js | 3 - .../micromark-extension-directive/index.d.ts | 156 - .../micromark-extension-directive/index.js | 3 - .../micromark-extension-directive/license | 22 - .../package.json | 127 - .../micromark-extension-directive/readme.md | 424 -- .../dev/index.d.ts | 24 - .../dev/index.js | 2 - .../index.d.ts | 24 - .../index.js | 2 - .../license | 22 - .../package.json | 116 - .../readme.md | 422 -- .../dev/index.d.ts | 164 - .../dev/index.js | 3 - .../index.d.ts | 164 - .../micromark-extension-gfm-footnote/index.js | 3 - .../micromark-extension-gfm-footnote/license | 22 - .../package.json | 132 - .../readme.md | 656 --- .../dev/index.d.ts | 37 - .../dev/index.js | 2 - .../micromark-extension-gfm-table/index.d.ts | 37 - .../micromark-extension-gfm-table/index.js | 2 - .../micromark-extension-gfm-table/license | 22 - .../package.json | 116 - .../micromark-extension-gfm-table/readme.md | 515 --- .../micromark-extension-math/dev/index.d.ts | 61 - .../micromark-extension-math/dev/index.js | 3 - .../micromark-extension-math/index.d.ts | 61 - .../micromark-extension-math/index.js | 3 - node_modules/micromark-extension-math/license | 22 - .../micromark-extension-math/package.json | 121 - .../micromark-extension-math/readme.md | 429 -- .../dev/index.d.ts | 42 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 255 -- .../micromark-factory-destination/index.d.ts | 42 - .../index.d.ts.map | 1 - .../micromark-factory-destination/index.js | 206 - .../micromark-factory-destination/license | 22 - .../package.json | 57 - .../micromark-factory-destination/readme.md | 234 -- .../micromark-factory-label/dev/index.d.ts | 37 - .../dev/index.d.ts.map | 1 - .../micromark-factory-label/dev/index.js | 172 - .../micromark-factory-label/index.d.ts | 37 - .../micromark-factory-label/index.d.ts.map | 1 - node_modules/micromark-factory-label/index.js | 148 - node_modules/micromark-factory-label/license | 22 - .../micromark-factory-label/package.json | 60 - .../micromark-factory-label/readme.md | 224 - .../micromark-factory-space/dev/index.d.ts | 37 - .../dev/index.d.ts.map | 1 - .../micromark-factory-space/dev/index.js | 67 - .../micromark-factory-space/index.d.ts | 37 - .../micromark-factory-space/index.d.ts.map | 1 - node_modules/micromark-factory-space/index.js | 64 - node_modules/micromark-factory-space/license | 22 - .../micromark-factory-space/package.json | 55 - .../micromark-factory-space/readme.md | 225 - .../micromark-factory-title/dev/index.d.ts | 36 - .../dev/index.d.ts.map | 1 - .../micromark-factory-title/dev/index.js | 169 - .../micromark-factory-title/index.d.ts | 36 - .../micromark-factory-title/index.d.ts.map | 1 - node_modules/micromark-factory-title/index.js | 158 - node_modules/micromark-factory-title/license | 22 - .../micromark-factory-title/package.json | 58 - .../micromark-factory-title/readme.md | 229 - .../dev/index.d.ts | 22 - .../dev/index.d.ts.map | 1 - .../micromark-factory-whitespace/dev/index.js | 53 - .../micromark-factory-whitespace/index.d.ts | 22 - .../index.d.ts.map | 1 - .../micromark-factory-whitespace/index.js | 44 - .../micromark-factory-whitespace/license | 22 - .../micromark-factory-whitespace/package.json | 57 - .../micromark-factory-whitespace/readme.md | 205 - .../micromark-util-character/dev/index.d.ts | 195 - .../dev/index.d.ts.map | 1 - .../micromark-util-character/dev/index.js | 252 -- .../micromark-util-character/index.d.ts | 195 - .../micromark-util-character/index.d.ts.map | 1 - .../micromark-util-character/index.js | 246 -- node_modules/micromark-util-character/license | 22 - .../micromark-util-character/package.json | 57 - .../micromark-util-character/readme.md | 446 -- .../micromark-util-chunked/dev/index.d.ts | 41 - .../micromark-util-chunked/dev/index.d.ts.map | 1 - .../micromark-util-chunked/dev/index.js | 89 - .../micromark-util-chunked/index.d.ts | 41 - .../micromark-util-chunked/index.d.ts.map | 1 - node_modules/micromark-util-chunked/index.js | 81 - node_modules/micromark-util-chunked/license | 22 - .../micromark-util-chunked/package.json | 57 - node_modules/micromark-util-chunked/readme.md | 219 - .../dev/index.d.ts | 18 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 38 - .../index.d.ts | 18 - .../index.d.ts.map | 1 - .../index.js | 27 - .../micromark-util-classify-character/license | 22 - .../package.json | 59 - .../readme.md | 205 - .../index.d.ts | 22 - .../index.d.ts.map | 1 - .../index.js | 143 - .../micromark-util-combine-extensions/license | 22 - .../package.json | 52 - .../readme.md | 201 - .../dev/index.d.ts | 16 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 42 - .../index.d.ts | 16 - .../index.d.ts.map | 1 - .../index.js | 32 - .../license | 22 - .../package.json | 59 - .../readme.md | 184 - node_modules/micromark-util-encode/index.d.ts | 14 - .../micromark-util-encode/index.d.ts.map | 1 - node_modules/micromark-util-encode/index.js | 33 - node_modules/micromark-util-encode/license | 22 - .../micromark-util-encode/package.json | 47 - node_modules/micromark-util-encode/readme.md | 176 - .../micromark-util-html-tag-name/index.d.ts | 30 - .../index.d.ts.map | 1 - .../micromark-util-html-tag-name/index.js | 93 - .../micromark-util-html-tag-name/license | 22 - .../micromark-util-html-tag-name/package.json | 47 - .../micromark-util-html-tag-name/readme.md | 193 - .../dev/index.d.ts | 21 - .../dev/index.d.ts.map | 1 - .../dev/index.js | 38 - .../index.d.ts | 21 - .../index.d.ts.map | 1 - .../index.js | 33 - .../license | 22 - .../package.json | 58 - .../readme.md | 187 - .../micromark-util-resolve-all/index.d.ts | 22 - .../micromark-util-resolve-all/index.d.ts.map | 1 - .../micromark-util-resolve-all/index.js | 32 - .../micromark-util-resolve-all/license | 22 - .../micromark-util-resolve-all/package.json | 48 - .../micromark-util-resolve-all/readme.md | 238 -- .../dev/index.d.ts | 36 - .../dev/index.d.ts.map | 1 - .../micromark-util-sanitize-uri/dev/index.js | 124 - .../micromark-util-sanitize-uri/index.d.ts | 36 - .../index.d.ts.map | 1 - .../micromark-util-sanitize-uri/index.js | 107 - .../micromark-util-sanitize-uri/license | 22 - .../micromark-util-sanitize-uri/package.json | 59 - .../micromark-util-sanitize-uri/readme.md | 214 - .../micromark-util-subtokenize/dev/index.d.ts | 12 - .../dev/index.d.ts.map | 1 - .../micromark-util-subtokenize/dev/index.js | 272 -- .../micromark-util-subtokenize/index.d.ts | 12 - .../micromark-util-subtokenize/index.d.ts.map | 1 - .../micromark-util-subtokenize/index.js | 222 - .../micromark-util-subtokenize/license | 22 - .../micromark-util-subtokenize/package.json | 60 - .../micromark-util-subtokenize/readme.md | 181 - node_modules/micromark-util-symbol/license | 22 - .../micromark-util-symbol/package.json | 43 - node_modules/micromark-util-symbol/readme.md | 168 - node_modules/micromark-util-types/index.d.ts | 1294 ------ node_modules/micromark-util-types/index.js | 2 - node_modules/micromark-util-types/license | 22 - .../micromark-util-types/package.json | 71 - node_modules/micromark-util-types/readme.md | 151 - node_modules/micromark/dev/index.d.ts | 82 - node_modules/micromark/dev/index.d.ts.map | 1 - node_modules/micromark/dev/index.js | 68 - node_modules/micromark/dev/stream.d.ts | 35 - node_modules/micromark/dev/stream.d.ts.map | 1 - node_modules/micromark/dev/stream.js | 270 -- node_modules/micromark/index.d.ts | 82 - node_modules/micromark/index.d.ts.map | 1 - node_modules/micromark/index.js | 60 - node_modules/micromark/license | 22 - node_modules/micromark/package.json | 100 - node_modules/micromark/readme.md | 491 --- node_modules/micromark/stream.d.ts | 35 - node_modules/micromark/stream.d.ts.map | 1 - node_modules/micromark/stream.js | 256 -- node_modules/minimatch/LICENSE | 15 - node_modules/minimatch/README.md | 454 -- node_modules/minimatch/package.json | 82 - node_modules/minimist/.eslintrc | 29 - node_modules/minimist/.github/FUNDING.yml | 12 - node_modules/minimist/.nycrc | 14 - node_modules/minimist/CHANGELOG.md | 298 -- node_modules/minimist/LICENSE | 18 - node_modules/minimist/README.md | 121 - node_modules/minimist/example/parse.js | 4 - node_modules/minimist/index.js | 263 -- node_modules/minimist/package.json | 75 - node_modules/minimist/test/all_bool.js | 34 - node_modules/minimist/test/bool.js | 177 - node_modules/minimist/test/dash.js | 43 - node_modules/minimist/test/default_bool.js | 37 - node_modules/minimist/test/dotted.js | 24 - node_modules/minimist/test/kv_short.js | 32 - node_modules/minimist/test/long.js | 33 - node_modules/minimist/test/num.js | 38 - node_modules/minimist/test/parse.js | 209 - node_modules/minimist/test/parse_modified.js | 11 - node_modules/minimist/test/proto.js | 64 - node_modules/minimist/test/short.js | 69 - node_modules/minimist/test/stop_early.js | 17 - node_modules/minimist/test/unknown.js | 104 - node_modules/minimist/test/whitespace.js | 10 - node_modules/minipass/LICENSE | 15 - node_modules/minipass/README.md | 825 ---- node_modules/minipass/package.json | 82 - node_modules/ms/index.js | 162 - node_modules/ms/license.md | 21 - node_modules/ms/package.json | 38 - node_modules/ms/readme.md | 59 - .../package-json-from-dist/LICENSE.md | 63 - node_modules/package-json-from-dist/README.md | 110 - .../package-json-from-dist/package.json | 68 - node_modules/parse-entities/index.d.ts | 126 - node_modules/parse-entities/index.js | 3 - node_modules/parse-entities/license | 22 - node_modules/parse-entities/package.json | 91 - node_modules/parse-entities/readme.md | 266 -- node_modules/path-key/index.d.ts | 40 - node_modules/path-key/index.js | 16 - node_modules/path-key/license | 9 - node_modules/path-key/package.json | 39 - node_modules/path-key/readme.md | 61 - node_modules/path-scurry/LICENSE.md | 55 - node_modules/path-scurry/README.md | 636 --- node_modules/path-scurry/package.json | 89 - node_modules/punycode.js/LICENSE-MIT.txt | 20 - node_modules/punycode.js/README.md | 148 - node_modules/punycode.js/package.json | 58 - node_modules/punycode.js/punycode.es6.js | 444 -- node_modules/punycode.js/punycode.js | 443 -- node_modules/run-con/.circleci/config.yml | 7 - node_modules/run-con/.github/FUNDING.yml | 3 - node_modules/run-con/.github/dependabot.yml | 9 - .../run-con/.github/workflows/coverage.yml | 37 - .../run-con/.github/workflows/dependabot.yml | 44 - .../run-con/.github/workflows/issuehunt.yml | 33 - node_modules/run-con/LICENSE.APACHE2 | 15 - node_modules/run-con/LICENSE.BSD | 26 - node_modules/run-con/LICENSE.MIT | 24 - node_modules/run-con/README.md | 239 -- node_modules/run-con/browser.js | 7 - node_modules/run-con/cli.js | 4 - node_modules/run-con/index.js | 53 - node_modules/run-con/package.json | 29 - node_modules/run-con/renovate.json | 6 - node_modules/shebang-command/index.js | 19 - node_modules/shebang-command/license | 9 - node_modules/shebang-command/package.json | 34 - node_modules/shebang-command/readme.md | 34 - node_modules/shebang-regex/index.d.ts | 22 - node_modules/shebang-regex/index.js | 2 - node_modules/shebang-regex/license | 9 - node_modules/shebang-regex/package.json | 35 - node_modules/shebang-regex/readme.md | 33 - node_modules/signal-exit/LICENSE.txt | 16 - node_modules/signal-exit/README.md | 74 - node_modules/signal-exit/package.json | 106 - node_modules/smol-toml/LICENSE | 24 - node_modules/smol-toml/README.md | 192 - node_modules/smol-toml/package.json | 53 - node_modules/string-width-cjs/index.d.ts | 29 - node_modules/string-width-cjs/index.js | 47 - node_modules/string-width-cjs/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 - .../node_modules/emoji-regex/README.md | 73 - .../node_modules/emoji-regex/es2015/index.js | 6 - .../node_modules/emoji-regex/es2015/text.js | 6 - .../node_modules/emoji-regex/index.d.ts | 23 - .../node_modules/emoji-regex/index.js | 6 - .../node_modules/emoji-regex/package.json | 50 - .../node_modules/emoji-regex/text.js | 6 - .../node_modules/strip-ansi/index.d.ts | 17 - .../node_modules/strip-ansi/index.js | 4 - .../node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../node_modules/strip-ansi/readme.md | 46 - node_modules/string-width-cjs/package.json | 56 - node_modules/string-width-cjs/readme.md | 50 - node_modules/string-width/index.d.ts | 29 - node_modules/string-width/index.js | 54 - node_modules/string-width/license | 9 - node_modules/string-width/package.json | 59 - node_modules/string-width/readme.md | 67 - node_modules/strip-ansi-cjs/index.d.ts | 17 - node_modules/strip-ansi-cjs/index.js | 4 - node_modules/strip-ansi-cjs/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - node_modules/strip-ansi-cjs/package.json | 54 - node_modules/strip-ansi-cjs/readme.md | 46 - node_modules/strip-ansi/index.d.ts | 15 - node_modules/strip-ansi/index.js | 14 - node_modules/strip-ansi/license | 9 - node_modules/strip-ansi/package.json | 57 - node_modules/strip-ansi/readme.md | 41 - node_modules/strip-json-comments/index.d.ts | 36 - node_modules/strip-json-comments/index.js | 77 - node_modules/strip-json-comments/license | 9 - node_modules/strip-json-comments/package.json | 47 - node_modules/strip-json-comments/readme.md | 78 - node_modules/uc.micro/LICENSE.txt | 20 - node_modules/uc.micro/README.md | 14 - node_modules/uc.micro/categories/Cc/regex.mjs | 1 - node_modules/uc.micro/categories/Cf/regex.mjs | 1 - node_modules/uc.micro/categories/P/regex.mjs | 1 - node_modules/uc.micro/categories/S/regex.mjs | 1 - node_modules/uc.micro/categories/Z/regex.mjs | 1 - node_modules/uc.micro/index.mjs | 8 - node_modules/uc.micro/package.json | 37 - .../uc.micro/properties/Any/regex.mjs | 1 - node_modules/which/CHANGELOG.md | 166 - node_modules/which/LICENSE | 15 - node_modules/which/README.md | 54 - node_modules/which/package.json | 43 - node_modules/which/which.js | 125 - node_modules/wrap-ansi-cjs/index.js | 216 - node_modules/wrap-ansi-cjs/license | 9 - .../node_modules/ansi-regex/index.d.ts | 37 - .../node_modules/ansi-regex/index.js | 10 - .../node_modules/ansi-regex/license | 9 - .../node_modules/ansi-regex/package.json | 55 - .../node_modules/ansi-regex/readme.md | 78 - .../node_modules/ansi-styles/index.d.ts | 345 -- .../node_modules/ansi-styles/index.js | 163 - .../node_modules/ansi-styles/license | 9 - .../node_modules/ansi-styles/package.json | 56 - .../node_modules/ansi-styles/readme.md | 152 - .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 - .../node_modules/emoji-regex/README.md | 73 - .../node_modules/emoji-regex/es2015/index.js | 6 - .../node_modules/emoji-regex/es2015/text.js | 6 - .../node_modules/emoji-regex/index.d.ts | 23 - .../node_modules/emoji-regex/index.js | 6 - .../node_modules/emoji-regex/package.json | 50 - .../node_modules/emoji-regex/text.js | 6 - .../node_modules/string-width/index.d.ts | 29 - .../node_modules/string-width/index.js | 47 - .../node_modules/string-width/license | 9 - .../node_modules/string-width/package.json | 56 - .../node_modules/string-width/readme.md | 50 - .../node_modules/strip-ansi/index.d.ts | 17 - .../node_modules/strip-ansi/index.js | 4 - .../node_modules/strip-ansi/license | 9 - .../node_modules/strip-ansi/package.json | 54 - .../node_modules/strip-ansi/readme.md | 46 - node_modules/wrap-ansi-cjs/package.json | 62 - node_modules/wrap-ansi-cjs/readme.md | 91 - node_modules/wrap-ansi/index.d.ts | 41 - node_modules/wrap-ansi/index.js | 214 - node_modules/wrap-ansi/license | 9 - node_modules/wrap-ansi/package.json | 69 - node_modules/wrap-ansi/readme.md | 91 - 834 files changed, 104372 deletions(-) delete mode 120000 node_modules/.bin/glob delete mode 120000 node_modules/.bin/js-yaml delete mode 120000 node_modules/.bin/katex delete mode 120000 node_modules/.bin/markdown-it delete mode 120000 node_modules/.bin/markdownlint delete mode 120000 node_modules/.bin/node-which delete mode 120000 node_modules/.bin/run-con delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/@isaacs/cliui/LICENSE.txt delete mode 100644 node_modules/@isaacs/cliui/README.md delete mode 100644 node_modules/@isaacs/cliui/index.mjs delete mode 100644 node_modules/@isaacs/cliui/package.json delete mode 100644 node_modules/@pkgjs/parseargs/.editorconfig delete mode 100644 node_modules/@pkgjs/parseargs/CHANGELOG.md delete mode 100644 node_modules/@pkgjs/parseargs/LICENSE delete mode 100644 node_modules/@pkgjs/parseargs/README.md delete mode 100644 node_modules/@pkgjs/parseargs/examples/is-default-value.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/negate.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/no-repeated-options.js delete mode 100644 node_modules/@pkgjs/parseargs/examples/ordered-options.mjs delete mode 100644 node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js delete mode 100644 node_modules/@pkgjs/parseargs/index.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/errors.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/primordials.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/util.js delete mode 100644 node_modules/@pkgjs/parseargs/internal/validators.js delete mode 100644 node_modules/@pkgjs/parseargs/package.json delete mode 100644 node_modules/@pkgjs/parseargs/utils.js delete mode 100644 node_modules/@types/debug/LICENSE delete mode 100644 node_modules/@types/debug/README.md delete mode 100644 node_modules/@types/debug/index.d.ts delete mode 100644 node_modules/@types/debug/package.json delete mode 100644 node_modules/@types/katex/LICENSE delete mode 100644 node_modules/@types/katex/README.md delete mode 100644 node_modules/@types/katex/contrib/auto-render.d.ts delete mode 100644 node_modules/@types/katex/index.d.ts delete mode 100644 node_modules/@types/katex/package.json delete mode 100644 node_modules/@types/ms/LICENSE delete mode 100644 node_modules/@types/ms/README.md delete mode 100644 node_modules/@types/ms/index.d.ts delete mode 100644 node_modules/@types/ms/package.json delete mode 100644 node_modules/@types/unist/LICENSE delete mode 100644 node_modules/@types/unist/README.md delete mode 100644 node_modules/@types/unist/index.d.ts delete mode 100644 node_modules/@types/unist/package.json delete mode 100644 node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/ansi-regex/index.js delete mode 100644 node_modules/ansi-regex/license delete mode 100644 node_modules/ansi-regex/package.json delete mode 100644 node_modules/ansi-regex/readme.md delete mode 100644 node_modules/ansi-styles/index.d.ts delete mode 100644 node_modules/ansi-styles/index.js delete mode 100644 node_modules/ansi-styles/license delete mode 100644 node_modules/ansi-styles/package.json delete mode 100644 node_modules/ansi-styles/readme.md delete mode 100644 node_modules/argparse/CHANGELOG.md delete mode 100644 node_modules/argparse/LICENSE delete mode 100644 node_modules/argparse/README.md delete mode 100644 node_modules/argparse/argparse.js delete mode 100644 node_modules/argparse/package.json delete mode 100644 node_modules/balanced-match/.github/FUNDING.yml delete mode 100644 node_modules/balanced-match/LICENSE.md delete mode 100644 node_modules/balanced-match/README.md delete mode 100644 node_modules/balanced-match/index.js delete mode 100644 node_modules/balanced-match/package.json delete mode 100644 node_modules/brace-expansion/.github/FUNDING.yml delete mode 100644 node_modules/brace-expansion/LICENSE delete mode 100644 node_modules/brace-expansion/README.md delete mode 100644 node_modules/brace-expansion/index.js delete mode 100644 node_modules/brace-expansion/package.json delete mode 100644 node_modules/character-entities-legacy/index.d.ts delete mode 100644 node_modules/character-entities-legacy/index.js delete mode 100644 node_modules/character-entities-legacy/license delete mode 100644 node_modules/character-entities-legacy/package.json delete mode 100644 node_modules/character-entities-legacy/readme.md delete mode 100644 node_modules/character-entities/index.d.ts delete mode 100644 node_modules/character-entities/index.js delete mode 100644 node_modules/character-entities/license delete mode 100644 node_modules/character-entities/package.json delete mode 100644 node_modules/character-entities/readme.md delete mode 100644 node_modules/character-reference-invalid/index.d.ts delete mode 100644 node_modules/character-reference-invalid/index.js delete mode 100644 node_modules/character-reference-invalid/license delete mode 100644 node_modules/character-reference-invalid/package.json delete mode 100644 node_modules/character-reference-invalid/readme.md delete mode 100644 node_modules/color-convert/CHANGELOG.md delete mode 100644 node_modules/color-convert/LICENSE delete mode 100644 node_modules/color-convert/README.md delete mode 100644 node_modules/color-convert/conversions.js delete mode 100644 node_modules/color-convert/index.js delete mode 100644 node_modules/color-convert/package.json delete mode 100644 node_modules/color-convert/route.js delete mode 100644 node_modules/color-name/LICENSE delete mode 100644 node_modules/color-name/README.md delete mode 100644 node_modules/color-name/index.js delete mode 100644 node_modules/color-name/package.json delete mode 100644 node_modules/commander/LICENSE delete mode 100644 node_modules/commander/Readme.md delete mode 100644 node_modules/commander/esm.mjs delete mode 100644 node_modules/commander/index.js delete mode 100644 node_modules/commander/package-support.json delete mode 100644 node_modules/commander/package.json delete mode 100644 node_modules/commander/typings/esm.d.mts delete mode 100644 node_modules/commander/typings/index.d.ts delete mode 100644 node_modules/cross-spawn/LICENSE delete mode 100644 node_modules/cross-spawn/README.md delete mode 100644 node_modules/cross-spawn/index.js delete mode 100644 node_modules/cross-spawn/package.json delete mode 100644 node_modules/debug/LICENSE delete mode 100644 node_modules/debug/README.md delete mode 100644 node_modules/debug/package.json delete mode 100644 node_modules/debug/src/browser.js delete mode 100644 node_modules/debug/src/common.js delete mode 100644 node_modules/debug/src/index.js delete mode 100644 node_modules/debug/src/node.js delete mode 100644 node_modules/decode-named-character-reference/index.d.ts delete mode 100644 node_modules/decode-named-character-reference/index.dom.d.ts delete mode 100644 node_modules/decode-named-character-reference/index.dom.js delete mode 100644 node_modules/decode-named-character-reference/index.js delete mode 100644 node_modules/decode-named-character-reference/license delete mode 100644 node_modules/decode-named-character-reference/package.json delete mode 100644 node_modules/decode-named-character-reference/readme.md delete mode 100644 node_modules/deep-extend/CHANGELOG.md delete mode 100644 node_modules/deep-extend/LICENSE delete mode 100644 node_modules/deep-extend/README.md delete mode 100644 node_modules/deep-extend/index.js delete mode 100644 node_modules/deep-extend/package.json delete mode 100644 node_modules/dequal/index.d.ts delete mode 100644 node_modules/dequal/license delete mode 100644 node_modules/dequal/lite/index.d.ts delete mode 100644 node_modules/dequal/lite/index.js delete mode 100644 node_modules/dequal/lite/index.min.js delete mode 100644 node_modules/dequal/lite/index.mjs delete mode 100644 node_modules/dequal/package.json delete mode 100644 node_modules/dequal/readme.md delete mode 100644 node_modules/devlop/license delete mode 100644 node_modules/devlop/package.json delete mode 100644 node_modules/devlop/readme.md delete mode 100644 node_modules/eastasianwidth/README.md delete mode 100644 node_modules/eastasianwidth/eastasianwidth.js delete mode 100644 node_modules/eastasianwidth/package.json delete mode 100644 node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 node_modules/emoji-regex/README.md delete mode 100644 node_modules/emoji-regex/RGI_Emoji.d.ts delete mode 100644 node_modules/emoji-regex/RGI_Emoji.js delete mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.d.ts delete mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.js delete mode 100644 node_modules/emoji-regex/es2015/index.d.ts delete mode 100644 node_modules/emoji-regex/es2015/index.js delete mode 100644 node_modules/emoji-regex/es2015/text.d.ts delete mode 100644 node_modules/emoji-regex/es2015/text.js delete mode 100644 node_modules/emoji-regex/index.d.ts delete mode 100644 node_modules/emoji-regex/index.js delete mode 100644 node_modules/emoji-regex/package.json delete mode 100644 node_modules/emoji-regex/text.d.ts delete mode 100644 node_modules/emoji-regex/text.js delete mode 100644 node_modules/entities/LICENSE delete mode 100644 node_modules/entities/package.json delete mode 100644 node_modules/entities/readme.md delete mode 100644 node_modules/foreground-child/LICENSE delete mode 100644 node_modules/foreground-child/README.md delete mode 100644 node_modules/foreground-child/package.json delete mode 100644 node_modules/glob/LICENSE delete mode 100644 node_modules/glob/README.md delete mode 100644 node_modules/glob/package.json delete mode 100644 node_modules/ignore/LICENSE-MIT delete mode 100644 node_modules/ignore/README.md delete mode 100644 node_modules/ignore/index.d.ts delete mode 100644 node_modules/ignore/index.js delete mode 100644 node_modules/ignore/legacy.js delete mode 100644 node_modules/ignore/package.json delete mode 100644 node_modules/ini/LICENSE delete mode 100644 node_modules/ini/README.md delete mode 100644 node_modules/ini/package.json delete mode 100644 node_modules/is-alphabetical/index.d.ts delete mode 100644 node_modules/is-alphabetical/index.js delete mode 100644 node_modules/is-alphabetical/license delete mode 100644 node_modules/is-alphabetical/package.json delete mode 100644 node_modules/is-alphabetical/readme.md delete mode 100644 node_modules/is-alphanumerical/index.d.ts delete mode 100644 node_modules/is-alphanumerical/index.js delete mode 100644 node_modules/is-alphanumerical/license delete mode 100644 node_modules/is-alphanumerical/package.json delete mode 100644 node_modules/is-alphanumerical/readme.md delete mode 100644 node_modules/is-decimal/index.d.ts delete mode 100644 node_modules/is-decimal/index.js delete mode 100644 node_modules/is-decimal/license delete mode 100644 node_modules/is-decimal/package.json delete mode 100644 node_modules/is-decimal/readme.md delete mode 100644 node_modules/is-fullwidth-code-point/index.d.ts delete mode 100644 node_modules/is-fullwidth-code-point/index.js delete mode 100644 node_modules/is-fullwidth-code-point/license delete mode 100644 node_modules/is-fullwidth-code-point/package.json delete mode 100644 node_modules/is-fullwidth-code-point/readme.md delete mode 100644 node_modules/is-hexadecimal/index.d.ts delete mode 100644 node_modules/is-hexadecimal/index.js delete mode 100644 node_modules/is-hexadecimal/license delete mode 100644 node_modules/is-hexadecimal/package.json delete mode 100644 node_modules/is-hexadecimal/readme.md delete mode 100644 node_modules/isexe/.npmignore delete mode 100644 node_modules/isexe/LICENSE delete mode 100644 node_modules/isexe/README.md delete mode 100644 node_modules/isexe/index.js delete mode 100644 node_modules/isexe/mode.js delete mode 100644 node_modules/isexe/package.json delete mode 100644 node_modules/isexe/test/basic.js delete mode 100644 node_modules/isexe/windows.js delete mode 100644 node_modules/jackspeak/LICENSE.md delete mode 100644 node_modules/jackspeak/README.md delete mode 100644 node_modules/jackspeak/package.json delete mode 100644 node_modules/js-yaml/CHANGELOG.md delete mode 100644 node_modules/js-yaml/LICENSE delete mode 100644 node_modules/js-yaml/README.md delete mode 100644 node_modules/js-yaml/index.js delete mode 100644 node_modules/js-yaml/package.json delete mode 100644 node_modules/jsonc-parser/CHANGELOG.md delete mode 100644 node_modules/jsonc-parser/LICENSE.md delete mode 100644 node_modules/jsonc-parser/README.md delete mode 100644 node_modules/jsonc-parser/SECURITY.md delete mode 100644 node_modules/jsonc-parser/package.json delete mode 100644 node_modules/jsonpointer/LICENSE.md delete mode 100644 node_modules/jsonpointer/README.md delete mode 100644 node_modules/jsonpointer/jsonpointer.d.ts delete mode 100644 node_modules/jsonpointer/jsonpointer.js delete mode 100644 node_modules/jsonpointer/package.json delete mode 100644 node_modules/katex/LICENSE delete mode 100644 node_modules/katex/README.md delete mode 100755 node_modules/katex/cli.js delete mode 100644 node_modules/katex/contrib/auto-render/README.md delete mode 100644 node_modules/katex/contrib/auto-render/auto-render.js delete mode 100644 node_modules/katex/contrib/auto-render/index.html delete mode 100644 node_modules/katex/contrib/auto-render/splitAtDelimiters.js delete mode 100644 node_modules/katex/contrib/auto-render/test/auto-render-spec.js delete mode 100644 node_modules/katex/contrib/copy-tex/README.md delete mode 100644 node_modules/katex/contrib/copy-tex/copy-tex.js delete mode 100644 node_modules/katex/contrib/copy-tex/index.html delete mode 100644 node_modules/katex/contrib/copy-tex/katex2tex.js delete mode 100644 node_modules/katex/contrib/mathtex-script-type/README.md delete mode 100644 node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js delete mode 100644 node_modules/katex/contrib/mhchem/README.md delete mode 100644 node_modules/katex/contrib/mhchem/mhchem.js delete mode 100644 node_modules/katex/contrib/render-a11y-string/render-a11y-string.js delete mode 100644 node_modules/katex/contrib/render-a11y-string/test/render-a11y-string-spec.js delete mode 100644 node_modules/katex/katex.js delete mode 100644 node_modules/katex/node_modules/commander/LICENSE delete mode 100644 node_modules/katex/node_modules/commander/Readme.md delete mode 100644 node_modules/katex/node_modules/commander/esm.mjs delete mode 100644 node_modules/katex/node_modules/commander/index.js delete mode 100644 node_modules/katex/node_modules/commander/package-support.json delete mode 100644 node_modules/katex/node_modules/commander/package.json delete mode 100644 node_modules/katex/node_modules/commander/typings/index.d.ts delete mode 100644 node_modules/katex/package.json delete mode 100644 node_modules/katex/src/Lexer.js delete mode 100644 node_modules/katex/src/MacroExpander.js delete mode 100644 node_modules/katex/src/Namespace.js delete mode 100644 node_modules/katex/src/Options.js delete mode 100644 node_modules/katex/src/ParseError.js delete mode 100644 node_modules/katex/src/Parser.js delete mode 100644 node_modules/katex/src/Settings.js delete mode 100644 node_modules/katex/src/SourceLocation.js delete mode 100644 node_modules/katex/src/Style.js delete mode 100644 node_modules/katex/src/Token.js delete mode 100644 node_modules/katex/src/buildCommon.js delete mode 100644 node_modules/katex/src/buildHTML.js delete mode 100644 node_modules/katex/src/buildMathML.js delete mode 100644 node_modules/katex/src/buildTree.js delete mode 100644 node_modules/katex/src/defineEnvironment.js delete mode 100644 node_modules/katex/src/defineFunction.js delete mode 100644 node_modules/katex/src/defineMacro.js delete mode 100644 node_modules/katex/src/delimiter.js delete mode 100644 node_modules/katex/src/domTree.js delete mode 100644 node_modules/katex/src/environments.js delete mode 100644 node_modules/katex/src/environments/array.js delete mode 100644 node_modules/katex/src/environments/cd.js delete mode 100644 node_modules/katex/src/fontMetrics.js delete mode 100644 node_modules/katex/src/fontMetricsData.js delete mode 100644 node_modules/katex/src/fonts/Makefile delete mode 100644 node_modules/katex/src/fonts/default.cfg delete mode 100755 node_modules/katex/src/fonts/generate_fonts.py delete mode 100755 node_modules/katex/src/fonts/makeBlacker delete mode 100755 node_modules/katex/src/fonts/makeFF delete mode 100644 node_modules/katex/src/fonts/xbbold.mf delete mode 100644 node_modules/katex/src/functions.js delete mode 100644 node_modules/katex/src/functions/accent.js delete mode 100644 node_modules/katex/src/functions/accentunder.js delete mode 100644 node_modules/katex/src/functions/arrow.js delete mode 100644 node_modules/katex/src/functions/char.js delete mode 100644 node_modules/katex/src/functions/color.js delete mode 100644 node_modules/katex/src/functions/cr.js delete mode 100644 node_modules/katex/src/functions/def.js delete mode 100644 node_modules/katex/src/functions/delimsizing.js delete mode 100644 node_modules/katex/src/functions/enclose.js delete mode 100644 node_modules/katex/src/functions/environment.js delete mode 100644 node_modules/katex/src/functions/font.js delete mode 100644 node_modules/katex/src/functions/genfrac.js delete mode 100644 node_modules/katex/src/functions/hbox.js delete mode 100644 node_modules/katex/src/functions/horizBrace.js delete mode 100644 node_modules/katex/src/functions/href.js delete mode 100644 node_modules/katex/src/functions/html.js delete mode 100644 node_modules/katex/src/functions/htmlmathml.js delete mode 100644 node_modules/katex/src/functions/includegraphics.js delete mode 100644 node_modules/katex/src/functions/kern.js delete mode 100644 node_modules/katex/src/functions/lap.js delete mode 100644 node_modules/katex/src/functions/math.js delete mode 100644 node_modules/katex/src/functions/mathchoice.js delete mode 100644 node_modules/katex/src/functions/mclass.js delete mode 100644 node_modules/katex/src/functions/op.js delete mode 100644 node_modules/katex/src/functions/operatorname.js delete mode 100644 node_modules/katex/src/functions/ordgroup.js delete mode 100644 node_modules/katex/src/functions/overline.js delete mode 100644 node_modules/katex/src/functions/phantom.js delete mode 100644 node_modules/katex/src/functions/pmb.js delete mode 100644 node_modules/katex/src/functions/raisebox.js delete mode 100644 node_modules/katex/src/functions/relax.js delete mode 100644 node_modules/katex/src/functions/rule.js delete mode 100644 node_modules/katex/src/functions/sizing.js delete mode 100644 node_modules/katex/src/functions/smash.js delete mode 100644 node_modules/katex/src/functions/sqrt.js delete mode 100644 node_modules/katex/src/functions/styling.js delete mode 100644 node_modules/katex/src/functions/supsub.js delete mode 100644 node_modules/katex/src/functions/symbolsOp.js delete mode 100644 node_modules/katex/src/functions/symbolsOrd.js delete mode 100644 node_modules/katex/src/functions/symbolsSpacing.js delete mode 100644 node_modules/katex/src/functions/tag.js delete mode 100644 node_modules/katex/src/functions/text.js delete mode 100644 node_modules/katex/src/functions/underline.js delete mode 100644 node_modules/katex/src/functions/utils/assembleSupSub.js delete mode 100644 node_modules/katex/src/functions/vcenter.js delete mode 100644 node_modules/katex/src/functions/verb.js delete mode 100644 node_modules/katex/src/macros.js delete mode 100644 node_modules/katex/src/mathMLTree.js delete mode 100644 node_modules/katex/src/metrics/README.md delete mode 100755 node_modules/katex/src/metrics/extract_tfms.py delete mode 100755 node_modules/katex/src/metrics/extract_ttfs.py delete mode 100755 node_modules/katex/src/metrics/format_json.py delete mode 100755 node_modules/katex/src/metrics/mapping.pl delete mode 100644 node_modules/katex/src/metrics/parse_tfm.py delete mode 100644 node_modules/katex/src/parseNode.js delete mode 100644 node_modules/katex/src/parseTree.js delete mode 100644 node_modules/katex/src/spacingData.js delete mode 100644 node_modules/katex/src/stretchy.js delete mode 100644 node_modules/katex/src/styles/fonts.scss delete mode 100644 node_modules/katex/src/styles/katex.scss delete mode 100644 node_modules/katex/src/svgGeometry.js delete mode 100644 node_modules/katex/src/symbols.js delete mode 100644 node_modules/katex/src/tree.js delete mode 100644 node_modules/katex/src/types.js delete mode 100644 node_modules/katex/src/unicodeAccents.js delete mode 100644 node_modules/katex/src/unicodeScripts.js delete mode 100644 node_modules/katex/src/unicodeSupOrSub.js delete mode 100644 node_modules/katex/src/unicodeSymbols.js delete mode 100644 node_modules/katex/src/units.js delete mode 100644 node_modules/katex/src/utils.js delete mode 100644 node_modules/katex/src/wide-character.js delete mode 100644 node_modules/katex/types/katex.d.ts delete mode 100644 node_modules/linkify-it/LICENSE delete mode 100644 node_modules/linkify-it/README.md delete mode 100644 node_modules/linkify-it/index.mjs delete mode 100644 node_modules/linkify-it/package.json delete mode 100644 node_modules/lru-cache/LICENSE delete mode 100644 node_modules/lru-cache/README.md delete mode 100644 node_modules/lru-cache/package.json delete mode 100644 node_modules/markdown-it/LICENSE delete mode 100644 node_modules/markdown-it/README.md delete mode 100644 node_modules/markdown-it/index.mjs delete mode 100644 node_modules/markdown-it/package.json delete mode 100644 node_modules/markdownlint-cli/LICENSE delete mode 100644 node_modules/markdownlint-cli/README.md delete mode 100755 node_modules/markdownlint-cli/markdownlint.js delete mode 100644 node_modules/markdownlint-cli/package.json delete mode 100644 node_modules/markdownlint/CHANGELOG.md delete mode 100644 node_modules/markdownlint/CONTRIBUTING.md delete mode 100644 node_modules/markdownlint/LICENSE delete mode 100644 node_modules/markdownlint/README.md delete mode 100644 node_modules/markdownlint/doc/CustomRules.md delete mode 100644 node_modules/markdownlint/doc/Prettier.md delete mode 100644 node_modules/markdownlint/doc/ReleaseProcess.md delete mode 100644 node_modules/markdownlint/doc/Rules.md delete mode 100644 node_modules/markdownlint/doc/md001.md delete mode 100644 node_modules/markdownlint/doc/md003.md delete mode 100644 node_modules/markdownlint/doc/md004.md delete mode 100644 node_modules/markdownlint/doc/md005.md delete mode 100644 node_modules/markdownlint/doc/md007.md delete mode 100644 node_modules/markdownlint/doc/md009.md delete mode 100644 node_modules/markdownlint/doc/md010.md delete mode 100644 node_modules/markdownlint/doc/md011.md delete mode 100644 node_modules/markdownlint/doc/md012.md delete mode 100644 node_modules/markdownlint/doc/md013.md delete mode 100644 node_modules/markdownlint/doc/md014.md delete mode 100644 node_modules/markdownlint/doc/md018.md delete mode 100644 node_modules/markdownlint/doc/md019.md delete mode 100644 node_modules/markdownlint/doc/md020.md delete mode 100644 node_modules/markdownlint/doc/md021.md delete mode 100644 node_modules/markdownlint/doc/md022.md delete mode 100644 node_modules/markdownlint/doc/md023.md delete mode 100644 node_modules/markdownlint/doc/md024.md delete mode 100644 node_modules/markdownlint/doc/md025.md delete mode 100644 node_modules/markdownlint/doc/md026.md delete mode 100644 node_modules/markdownlint/doc/md027.md delete mode 100644 node_modules/markdownlint/doc/md028.md delete mode 100644 node_modules/markdownlint/doc/md029.md delete mode 100644 node_modules/markdownlint/doc/md030.md delete mode 100644 node_modules/markdownlint/doc/md031.md delete mode 100644 node_modules/markdownlint/doc/md032.md delete mode 100644 node_modules/markdownlint/doc/md033.md delete mode 100644 node_modules/markdownlint/doc/md034.md delete mode 100644 node_modules/markdownlint/doc/md035.md delete mode 100644 node_modules/markdownlint/doc/md036.md delete mode 100644 node_modules/markdownlint/doc/md037.md delete mode 100644 node_modules/markdownlint/doc/md038.md delete mode 100644 node_modules/markdownlint/doc/md039.md delete mode 100644 node_modules/markdownlint/doc/md040.md delete mode 100644 node_modules/markdownlint/doc/md041.md delete mode 100644 node_modules/markdownlint/doc/md042.md delete mode 100644 node_modules/markdownlint/doc/md043.md delete mode 100644 node_modules/markdownlint/doc/md044.md delete mode 100644 node_modules/markdownlint/doc/md045.md delete mode 100644 node_modules/markdownlint/doc/md046.md delete mode 100644 node_modules/markdownlint/doc/md047.md delete mode 100644 node_modules/markdownlint/doc/md048.md delete mode 100644 node_modules/markdownlint/doc/md049.md delete mode 100644 node_modules/markdownlint/doc/md050.md delete mode 100644 node_modules/markdownlint/doc/md051.md delete mode 100644 node_modules/markdownlint/doc/md052.md delete mode 100644 node_modules/markdownlint/doc/md053.md delete mode 100644 node_modules/markdownlint/doc/md054.md delete mode 100644 node_modules/markdownlint/doc/md055.md delete mode 100644 node_modules/markdownlint/doc/md056.md delete mode 100644 node_modules/markdownlint/doc/md058.md delete mode 100644 node_modules/markdownlint/helpers/LICENSE delete mode 100644 node_modules/markdownlint/helpers/README.md delete mode 100644 node_modules/markdownlint/helpers/helpers.cjs delete mode 100644 node_modules/markdownlint/helpers/micromark-helpers.cjs delete mode 100644 node_modules/markdownlint/helpers/package.json delete mode 100644 node_modules/markdownlint/helpers/shared.cjs delete mode 100644 node_modules/markdownlint/package.json delete mode 100644 node_modules/markdownlint/schema/.markdownlint.jsonc delete mode 100644 node_modules/markdownlint/schema/.markdownlint.yaml delete mode 100644 node_modules/markdownlint/schema/ValidatingConfiguration.md delete mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema-strict.json delete mode 100644 node_modules/markdownlint/schema/markdownlint-config-schema.json delete mode 100644 node_modules/markdownlint/style/all.json delete mode 100644 node_modules/markdownlint/style/cirosantilli.json delete mode 100644 node_modules/markdownlint/style/prettier.json delete mode 100644 node_modules/markdownlint/style/relaxed.json delete mode 100644 node_modules/mdurl/LICENSE delete mode 100644 node_modules/mdurl/README.md delete mode 100644 node_modules/mdurl/index.mjs delete mode 100644 node_modules/mdurl/package.json delete mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts delete mode 100644 node_modules/micromark-core-commonmark/dev/index.d.ts.map delete mode 100644 node_modules/micromark-core-commonmark/dev/index.js delete mode 100644 node_modules/micromark-core-commonmark/index.d.ts delete mode 100644 node_modules/micromark-core-commonmark/index.d.ts.map delete mode 100644 node_modules/micromark-core-commonmark/index.js delete mode 100644 node_modules/micromark-core-commonmark/license delete mode 100644 node_modules/micromark-core-commonmark/package.json delete mode 100644 node_modules/micromark-core-commonmark/readme.md delete mode 100644 node_modules/micromark-extension-directive/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-directive/dev/index.js delete mode 100644 node_modules/micromark-extension-directive/index.d.ts delete mode 100644 node_modules/micromark-extension-directive/index.js delete mode 100644 node_modules/micromark-extension-directive/license delete mode 100644 node_modules/micromark-extension-directive/package.json delete mode 100644 node_modules/micromark-extension-directive/readme.md delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/dev/index.js delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/index.js delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/license delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/package.json delete mode 100644 node_modules/micromark-extension-gfm-autolink-literal/readme.md delete mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-footnote/dev/index.js delete mode 100644 node_modules/micromark-extension-gfm-footnote/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-footnote/index.js delete mode 100644 node_modules/micromark-extension-gfm-footnote/license delete mode 100644 node_modules/micromark-extension-gfm-footnote/package.json delete mode 100644 node_modules/micromark-extension-gfm-footnote/readme.md delete mode 100644 node_modules/micromark-extension-gfm-table/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-table/dev/index.js delete mode 100644 node_modules/micromark-extension-gfm-table/index.d.ts delete mode 100644 node_modules/micromark-extension-gfm-table/index.js delete mode 100644 node_modules/micromark-extension-gfm-table/license delete mode 100644 node_modules/micromark-extension-gfm-table/package.json delete mode 100644 node_modules/micromark-extension-gfm-table/readme.md delete mode 100644 node_modules/micromark-extension-math/dev/index.d.ts delete mode 100644 node_modules/micromark-extension-math/dev/index.js delete mode 100644 node_modules/micromark-extension-math/index.d.ts delete mode 100644 node_modules/micromark-extension-math/index.js delete mode 100644 node_modules/micromark-extension-math/license delete mode 100644 node_modules/micromark-extension-math/package.json delete mode 100644 node_modules/micromark-extension-math/readme.md delete mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-destination/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-destination/dev/index.js delete mode 100644 node_modules/micromark-factory-destination/index.d.ts delete mode 100644 node_modules/micromark-factory-destination/index.d.ts.map delete mode 100644 node_modules/micromark-factory-destination/index.js delete mode 100644 node_modules/micromark-factory-destination/license delete mode 100644 node_modules/micromark-factory-destination/package.json delete mode 100644 node_modules/micromark-factory-destination/readme.md delete mode 100644 node_modules/micromark-factory-label/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-label/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-label/dev/index.js delete mode 100644 node_modules/micromark-factory-label/index.d.ts delete mode 100644 node_modules/micromark-factory-label/index.d.ts.map delete mode 100644 node_modules/micromark-factory-label/index.js delete mode 100644 node_modules/micromark-factory-label/license delete mode 100644 node_modules/micromark-factory-label/package.json delete mode 100644 node_modules/micromark-factory-label/readme.md delete mode 100644 node_modules/micromark-factory-space/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-space/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-space/dev/index.js delete mode 100644 node_modules/micromark-factory-space/index.d.ts delete mode 100644 node_modules/micromark-factory-space/index.d.ts.map delete mode 100644 node_modules/micromark-factory-space/index.js delete mode 100644 node_modules/micromark-factory-space/license delete mode 100644 node_modules/micromark-factory-space/package.json delete mode 100644 node_modules/micromark-factory-space/readme.md delete mode 100644 node_modules/micromark-factory-title/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-title/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-title/dev/index.js delete mode 100644 node_modules/micromark-factory-title/index.d.ts delete mode 100644 node_modules/micromark-factory-title/index.d.ts.map delete mode 100644 node_modules/micromark-factory-title/index.js delete mode 100644 node_modules/micromark-factory-title/license delete mode 100644 node_modules/micromark-factory-title/package.json delete mode 100644 node_modules/micromark-factory-title/readme.md delete mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts delete mode 100644 node_modules/micromark-factory-whitespace/dev/index.d.ts.map delete mode 100644 node_modules/micromark-factory-whitespace/dev/index.js delete mode 100644 node_modules/micromark-factory-whitespace/index.d.ts delete mode 100644 node_modules/micromark-factory-whitespace/index.d.ts.map delete mode 100644 node_modules/micromark-factory-whitespace/index.js delete mode 100644 node_modules/micromark-factory-whitespace/license delete mode 100644 node_modules/micromark-factory-whitespace/package.json delete mode 100644 node_modules/micromark-factory-whitespace/readme.md delete mode 100644 node_modules/micromark-util-character/dev/index.d.ts delete mode 100644 node_modules/micromark-util-character/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-character/dev/index.js delete mode 100644 node_modules/micromark-util-character/index.d.ts delete mode 100644 node_modules/micromark-util-character/index.d.ts.map delete mode 100644 node_modules/micromark-util-character/index.js delete mode 100644 node_modules/micromark-util-character/license delete mode 100644 node_modules/micromark-util-character/package.json delete mode 100644 node_modules/micromark-util-character/readme.md delete mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts delete mode 100644 node_modules/micromark-util-chunked/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-chunked/dev/index.js delete mode 100644 node_modules/micromark-util-chunked/index.d.ts delete mode 100644 node_modules/micromark-util-chunked/index.d.ts.map delete mode 100644 node_modules/micromark-util-chunked/index.js delete mode 100644 node_modules/micromark-util-chunked/license delete mode 100644 node_modules/micromark-util-chunked/package.json delete mode 100644 node_modules/micromark-util-chunked/readme.md delete mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts delete mode 100644 node_modules/micromark-util-classify-character/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-classify-character/dev/index.js delete mode 100644 node_modules/micromark-util-classify-character/index.d.ts delete mode 100644 node_modules/micromark-util-classify-character/index.d.ts.map delete mode 100644 node_modules/micromark-util-classify-character/index.js delete mode 100644 node_modules/micromark-util-classify-character/license delete mode 100644 node_modules/micromark-util-classify-character/package.json delete mode 100644 node_modules/micromark-util-classify-character/readme.md delete mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts delete mode 100644 node_modules/micromark-util-combine-extensions/index.d.ts.map delete mode 100644 node_modules/micromark-util-combine-extensions/index.js delete mode 100644 node_modules/micromark-util-combine-extensions/license delete mode 100644 node_modules/micromark-util-combine-extensions/package.json delete mode 100644 node_modules/micromark-util-combine-extensions/readme.md delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/dev/index.js delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/index.js delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/license delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/package.json delete mode 100644 node_modules/micromark-util-decode-numeric-character-reference/readme.md delete mode 100644 node_modules/micromark-util-encode/index.d.ts delete mode 100644 node_modules/micromark-util-encode/index.d.ts.map delete mode 100644 node_modules/micromark-util-encode/index.js delete mode 100644 node_modules/micromark-util-encode/license delete mode 100644 node_modules/micromark-util-encode/package.json delete mode 100644 node_modules/micromark-util-encode/readme.md delete mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts delete mode 100644 node_modules/micromark-util-html-tag-name/index.d.ts.map delete mode 100644 node_modules/micromark-util-html-tag-name/index.js delete mode 100644 node_modules/micromark-util-html-tag-name/license delete mode 100644 node_modules/micromark-util-html-tag-name/package.json delete mode 100644 node_modules/micromark-util-html-tag-name/readme.md delete mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts delete mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-normalize-identifier/dev/index.js delete mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts delete mode 100644 node_modules/micromark-util-normalize-identifier/index.d.ts.map delete mode 100644 node_modules/micromark-util-normalize-identifier/index.js delete mode 100644 node_modules/micromark-util-normalize-identifier/license delete mode 100644 node_modules/micromark-util-normalize-identifier/package.json delete mode 100644 node_modules/micromark-util-normalize-identifier/readme.md delete mode 100644 node_modules/micromark-util-resolve-all/index.d.ts delete mode 100644 node_modules/micromark-util-resolve-all/index.d.ts.map delete mode 100644 node_modules/micromark-util-resolve-all/index.js delete mode 100644 node_modules/micromark-util-resolve-all/license delete mode 100644 node_modules/micromark-util-resolve-all/package.json delete mode 100644 node_modules/micromark-util-resolve-all/readme.md delete mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts delete mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-sanitize-uri/dev/index.js delete mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts delete mode 100644 node_modules/micromark-util-sanitize-uri/index.d.ts.map delete mode 100644 node_modules/micromark-util-sanitize-uri/index.js delete mode 100644 node_modules/micromark-util-sanitize-uri/license delete mode 100644 node_modules/micromark-util-sanitize-uri/package.json delete mode 100644 node_modules/micromark-util-sanitize-uri/readme.md delete mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts delete mode 100644 node_modules/micromark-util-subtokenize/dev/index.d.ts.map delete mode 100644 node_modules/micromark-util-subtokenize/dev/index.js delete mode 100644 node_modules/micromark-util-subtokenize/index.d.ts delete mode 100644 node_modules/micromark-util-subtokenize/index.d.ts.map delete mode 100644 node_modules/micromark-util-subtokenize/index.js delete mode 100644 node_modules/micromark-util-subtokenize/license delete mode 100644 node_modules/micromark-util-subtokenize/package.json delete mode 100644 node_modules/micromark-util-subtokenize/readme.md delete mode 100644 node_modules/micromark-util-symbol/license delete mode 100644 node_modules/micromark-util-symbol/package.json delete mode 100644 node_modules/micromark-util-symbol/readme.md delete mode 100644 node_modules/micromark-util-types/index.d.ts delete mode 100644 node_modules/micromark-util-types/index.js delete mode 100644 node_modules/micromark-util-types/license delete mode 100644 node_modules/micromark-util-types/package.json delete mode 100644 node_modules/micromark-util-types/readme.md delete mode 100644 node_modules/micromark/dev/index.d.ts delete mode 100644 node_modules/micromark/dev/index.d.ts.map delete mode 100644 node_modules/micromark/dev/index.js delete mode 100644 node_modules/micromark/dev/stream.d.ts delete mode 100644 node_modules/micromark/dev/stream.d.ts.map delete mode 100644 node_modules/micromark/dev/stream.js delete mode 100644 node_modules/micromark/index.d.ts delete mode 100644 node_modules/micromark/index.d.ts.map delete mode 100644 node_modules/micromark/index.js delete mode 100644 node_modules/micromark/license delete mode 100644 node_modules/micromark/package.json delete mode 100644 node_modules/micromark/readme.md delete mode 100644 node_modules/micromark/stream.d.ts delete mode 100644 node_modules/micromark/stream.d.ts.map delete mode 100644 node_modules/micromark/stream.js delete mode 100644 node_modules/minimatch/LICENSE delete mode 100644 node_modules/minimatch/README.md delete mode 100644 node_modules/minimatch/package.json delete mode 100644 node_modules/minimist/.eslintrc delete mode 100644 node_modules/minimist/.github/FUNDING.yml delete mode 100644 node_modules/minimist/.nycrc delete mode 100644 node_modules/minimist/CHANGELOG.md delete mode 100644 node_modules/minimist/LICENSE delete mode 100644 node_modules/minimist/README.md delete mode 100644 node_modules/minimist/example/parse.js delete mode 100644 node_modules/minimist/index.js delete mode 100644 node_modules/minimist/package.json delete mode 100644 node_modules/minimist/test/all_bool.js delete mode 100644 node_modules/minimist/test/bool.js delete mode 100644 node_modules/minimist/test/dash.js delete mode 100644 node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/minimist/test/dotted.js delete mode 100644 node_modules/minimist/test/kv_short.js delete mode 100644 node_modules/minimist/test/long.js delete mode 100644 node_modules/minimist/test/num.js delete mode 100644 node_modules/minimist/test/parse.js delete mode 100644 node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/minimist/test/proto.js delete mode 100644 node_modules/minimist/test/short.js delete mode 100644 node_modules/minimist/test/stop_early.js delete mode 100644 node_modules/minimist/test/unknown.js delete mode 100644 node_modules/minimist/test/whitespace.js delete mode 100644 node_modules/minipass/LICENSE delete mode 100644 node_modules/minipass/README.md delete mode 100644 node_modules/minipass/package.json delete mode 100644 node_modules/ms/index.js delete mode 100644 node_modules/ms/license.md delete mode 100644 node_modules/ms/package.json delete mode 100644 node_modules/ms/readme.md delete mode 100644 node_modules/package-json-from-dist/LICENSE.md delete mode 100644 node_modules/package-json-from-dist/README.md delete mode 100644 node_modules/package-json-from-dist/package.json delete mode 100644 node_modules/parse-entities/index.d.ts delete mode 100644 node_modules/parse-entities/index.js delete mode 100644 node_modules/parse-entities/license delete mode 100644 node_modules/parse-entities/package.json delete mode 100644 node_modules/parse-entities/readme.md delete mode 100644 node_modules/path-key/index.d.ts delete mode 100644 node_modules/path-key/index.js delete mode 100644 node_modules/path-key/license delete mode 100644 node_modules/path-key/package.json delete mode 100644 node_modules/path-key/readme.md delete mode 100644 node_modules/path-scurry/LICENSE.md delete mode 100644 node_modules/path-scurry/README.md delete mode 100644 node_modules/path-scurry/package.json delete mode 100644 node_modules/punycode.js/LICENSE-MIT.txt delete mode 100644 node_modules/punycode.js/README.md delete mode 100644 node_modules/punycode.js/package.json delete mode 100644 node_modules/punycode.js/punycode.es6.js delete mode 100644 node_modules/punycode.js/punycode.js delete mode 100644 node_modules/run-con/.circleci/config.yml delete mode 100644 node_modules/run-con/.github/FUNDING.yml delete mode 100644 node_modules/run-con/.github/dependabot.yml delete mode 100644 node_modules/run-con/.github/workflows/coverage.yml delete mode 100644 node_modules/run-con/.github/workflows/dependabot.yml delete mode 100644 node_modules/run-con/.github/workflows/issuehunt.yml delete mode 100644 node_modules/run-con/LICENSE.APACHE2 delete mode 100644 node_modules/run-con/LICENSE.BSD delete mode 100644 node_modules/run-con/LICENSE.MIT delete mode 100644 node_modules/run-con/README.md delete mode 100644 node_modules/run-con/browser.js delete mode 100755 node_modules/run-con/cli.js delete mode 100644 node_modules/run-con/index.js delete mode 100644 node_modules/run-con/package.json delete mode 100644 node_modules/run-con/renovate.json delete mode 100644 node_modules/shebang-command/index.js delete mode 100644 node_modules/shebang-command/license delete mode 100644 node_modules/shebang-command/package.json delete mode 100644 node_modules/shebang-command/readme.md delete mode 100644 node_modules/shebang-regex/index.d.ts delete mode 100644 node_modules/shebang-regex/index.js delete mode 100644 node_modules/shebang-regex/license delete mode 100644 node_modules/shebang-regex/package.json delete mode 100644 node_modules/shebang-regex/readme.md delete mode 100644 node_modules/signal-exit/LICENSE.txt delete mode 100644 node_modules/signal-exit/README.md delete mode 100644 node_modules/signal-exit/package.json delete mode 100644 node_modules/smol-toml/LICENSE delete mode 100644 node_modules/smol-toml/README.md delete mode 100644 node_modules/smol-toml/package.json delete mode 100644 node_modules/string-width-cjs/index.d.ts delete mode 100644 node_modules/string-width-cjs/index.js delete mode 100644 node_modules/string-width-cjs/license delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/license delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/package.json delete mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/README.md delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/package.json delete mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/text.js delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.js delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/license delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/package.json delete mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/string-width-cjs/package.json delete mode 100644 node_modules/string-width-cjs/readme.md delete mode 100644 node_modules/string-width/index.d.ts delete mode 100644 node_modules/string-width/index.js delete mode 100644 node_modules/string-width/license delete mode 100644 node_modules/string-width/package.json delete mode 100644 node_modules/string-width/readme.md delete mode 100644 node_modules/strip-ansi-cjs/index.d.ts delete mode 100644 node_modules/strip-ansi-cjs/index.js delete mode 100644 node_modules/strip-ansi-cjs/license delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/license delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json delete mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/strip-ansi-cjs/package.json delete mode 100644 node_modules/strip-ansi-cjs/readme.md delete mode 100644 node_modules/strip-ansi/index.d.ts delete mode 100644 node_modules/strip-ansi/index.js delete mode 100644 node_modules/strip-ansi/license delete mode 100644 node_modules/strip-ansi/package.json delete mode 100644 node_modules/strip-ansi/readme.md delete mode 100644 node_modules/strip-json-comments/index.d.ts delete mode 100644 node_modules/strip-json-comments/index.js delete mode 100644 node_modules/strip-json-comments/license delete mode 100644 node_modules/strip-json-comments/package.json delete mode 100644 node_modules/strip-json-comments/readme.md delete mode 100644 node_modules/uc.micro/LICENSE.txt delete mode 100644 node_modules/uc.micro/README.md delete mode 100644 node_modules/uc.micro/categories/Cc/regex.mjs delete mode 100644 node_modules/uc.micro/categories/Cf/regex.mjs delete mode 100644 node_modules/uc.micro/categories/P/regex.mjs delete mode 100644 node_modules/uc.micro/categories/S/regex.mjs delete mode 100644 node_modules/uc.micro/categories/Z/regex.mjs delete mode 100644 node_modules/uc.micro/index.mjs delete mode 100644 node_modules/uc.micro/package.json delete mode 100644 node_modules/uc.micro/properties/Any/regex.mjs delete mode 100644 node_modules/which/CHANGELOG.md delete mode 100644 node_modules/which/LICENSE delete mode 100644 node_modules/which/README.md delete mode 100644 node_modules/which/package.json delete mode 100644 node_modules/which/which.js delete mode 100755 node_modules/wrap-ansi-cjs/index.js delete mode 100644 node_modules/wrap-ansi-cjs/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json delete mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md delete mode 100644 node_modules/wrap-ansi-cjs/package.json delete mode 100644 node_modules/wrap-ansi-cjs/readme.md delete mode 100644 node_modules/wrap-ansi/index.d.ts delete mode 100755 node_modules/wrap-ansi/index.js delete mode 100644 node_modules/wrap-ansi/license delete mode 100644 node_modules/wrap-ansi/package.json delete mode 100644 node_modules/wrap-ansi/readme.md diff --git a/node_modules/.bin/glob b/node_modules/.bin/glob deleted file mode 120000 index 85c9c1db30..0000000000 --- a/node_modules/.bin/glob +++ /dev/null @@ -1 +0,0 @@ -../glob/dist/esm/bin.mjs \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml deleted file mode 120000 index 9dbd010d47..0000000000 --- a/node_modules/.bin/js-yaml +++ /dev/null @@ -1 +0,0 @@ -../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/katex b/node_modules/.bin/katex deleted file mode 120000 index 891ac1324e..0000000000 --- a/node_modules/.bin/katex +++ /dev/null @@ -1 +0,0 @@ -../katex/cli.js \ No newline at end of file diff --git a/node_modules/.bin/markdown-it b/node_modules/.bin/markdown-it deleted file mode 120000 index 8a641084ea..0000000000 --- a/node_modules/.bin/markdown-it +++ /dev/null @@ -1 +0,0 @@ -../markdown-it/bin/markdown-it.mjs \ No newline at end of file diff --git a/node_modules/.bin/markdownlint b/node_modules/.bin/markdownlint deleted file mode 120000 index f2b1093a66..0000000000 --- a/node_modules/.bin/markdownlint +++ /dev/null @@ -1 +0,0 @@ -../markdownlint-cli/markdownlint.js \ No newline at end of file diff --git a/node_modules/.bin/node-which b/node_modules/.bin/node-which deleted file mode 120000 index 6f8415ec58..0000000000 --- a/node_modules/.bin/node-which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/node-which \ No newline at end of file diff --git a/node_modules/.bin/run-con b/node_modules/.bin/run-con deleted file mode 120000 index 85da8da1e2..0000000000 --- a/node_modules/.bin/run-con +++ /dev/null @@ -1 +0,0 @@ -../run-con/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index acdb98746d..0000000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,1415 +0,0 @@ -{ - "name": "iceberg-python", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/katex": { - "version": "0.16.21", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", - "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdownlint": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", - "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", - "license": "MIT", - "dependencies": { - "markdown-it": "14.1.0", - "micromark": "4.0.1", - "micromark-core-commonmark": "2.0.2", - "micromark-extension-directive": "3.0.2", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.0", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli": { - "version": "0.44.0", - "resolved": "git+ssh://git@github.com/igorshubovych/markdownlint-cli.git#586c3ea3f51230da42bab657c6a32e9e66c364f0", - "license": "MIT", - "dependencies": { - "commander": "~13.1.0", - "glob": "~10.4.5", - "ignore": "~7.0.3", - "js-yaml": "~4.1.0", - "jsonc-parser": "~3.3.1", - "jsonpointer": "~5.0.1", - "markdownlint": "~0.37.4", - "minimatch": "~9.0.5", - "run-con": "~1.3.2", - "smol-toml": "~1.3.1" - }, - "bin": { - "markdownlint": "markdownlint.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "license": "MIT" - }, - "node_modules/micromark": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", - "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", - "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.4.tgz", - "integrity": "sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", - "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/run-con": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", - "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - }, - "bin": { - "run-con": "cli.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/smol-toml": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz", - "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - } - } -} diff --git a/node_modules/@isaacs/cliui/LICENSE.txt b/node_modules/@isaacs/cliui/LICENSE.txt deleted file mode 100644 index c7e27478a3..0000000000 --- a/node_modules/@isaacs/cliui/LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/@isaacs/cliui/README.md b/node_modules/@isaacs/cliui/README.md deleted file mode 100644 index 488064267d..0000000000 --- a/node_modules/@isaacs/cliui/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# @isaacs/cliui - -Temporary fork of [cliui](http://npm.im/cliui). - -![ci](https://github.com/yargs/cliui/workflows/ci/badge.svg) -[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui) -[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) -![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/cliui) - -easily create complex multi-column command-line-interfaces. - -## Example - -```js -const ui = require('cliui')() - -ui.div('Usage: $0 [command] [options]') - -ui.div({ - text: 'Options:', - padding: [2, 0, 1, 0] -}) - -ui.div( - { - text: "-f, --file", - width: 20, - padding: [0, 4, 0, 4] - }, - { - text: "the file to load." + - chalk.green("(if this description is long it wraps).") - , - width: 20 - }, - { - text: chalk.red("[required]"), - align: 'right' - } -) - -console.log(ui.toString()) -``` - -## Deno/ESM Support - -As of `v7` `cliui` supports [Deno](https://github.com/denoland/deno) and -[ESM](https://nodejs.org/api/esm.html#esm_ecmascript_modules): - -```typescript -import cliui from "https://deno.land/x/cliui/deno.ts"; - -const ui = cliui({}) - -ui.div('Usage: $0 [command] [options]') - -ui.div({ - text: 'Options:', - padding: [2, 0, 1, 0] -}) - -ui.div({ - text: "-f, --file", - width: 20, - padding: [0, 4, 0, 4] -}) - -console.log(ui.toString()) -``` - - - -## Layout DSL - -cliui exposes a simple layout DSL: - -If you create a single `ui.div`, passing a string rather than an -object: - -* `\n`: characters will be interpreted as new rows. -* `\t`: characters will be interpreted as new columns. -* `\s`: characters will be interpreted as padding. - -**as an example...** - -```js -var ui = require('./')({ - width: 60 -}) - -ui.div( - 'Usage: node ./bin/foo.js\n' + - ' \t provide a regex\n' + - ' \t provide a glob\t [required]' -) - -console.log(ui.toString()) -``` - -**will output:** - -```shell -Usage: node ./bin/foo.js - provide a regex - provide a glob [required] -``` - -## Methods - -```js -cliui = require('cliui') -``` - -### cliui({width: integer}) - -Specify the maximum width of the UI being generated. -If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`. - -### cliui({wrap: boolean}) - -Enable or disable the wrapping of text in a column. - -### cliui.div(column, column, column) - -Create a row with any number of columns, a column -can either be a string, or an object with the following -options: - -* **text:** some text to place in the column. -* **width:** the width of a column. -* **align:** alignment, `right` or `center`. -* **padding:** `[top, right, bottom, left]`. -* **border:** should a border be placed around the div? - -### cliui.span(column, column, column) - -Similar to `div`, except the next row will be appended without -a new line being created. - -### cliui.resetOutput() - -Resets the UI elements of the current cliui instance, maintaining the values -set for `width` and `wrap`. diff --git a/node_modules/@isaacs/cliui/index.mjs b/node_modules/@isaacs/cliui/index.mjs deleted file mode 100644 index 5177519af3..0000000000 --- a/node_modules/@isaacs/cliui/index.mjs +++ /dev/null @@ -1,14 +0,0 @@ -// Bootstrap cliui with ESM dependencies: -import { cliui } from './build/lib/index.js' - -import stringWidth from 'string-width' -import stripAnsi from 'strip-ansi' -import wrap from 'wrap-ansi' - -export default function ui (opts) { - return cliui(opts, { - stringWidth, - stripAnsi, - wrap - }) -} diff --git a/node_modules/@isaacs/cliui/package.json b/node_modules/@isaacs/cliui/package.json deleted file mode 100644 index 7a952532de..0000000000 --- a/node_modules/@isaacs/cliui/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "@isaacs/cliui", - "version": "8.0.2", - "description": "easily create complex multi-column command-line-interfaces", - "main": "build/index.cjs", - "exports": { - ".": [ - { - "import": "./index.mjs", - "require": "./build/index.cjs" - }, - "./build/index.cjs" - ] - }, - "type": "module", - "module": "./index.mjs", - "scripts": { - "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'", - "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'", - "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", - "test": "c8 mocha ./test/*.cjs", - "test:esm": "c8 mocha ./test/**/*.mjs", - "postest": "check", - "coverage": "c8 report --check-coverage", - "precompile": "rimraf build", - "compile": "tsc", - "postcompile": "npm run build:cjs", - "build:cjs": "rollup -c", - "prepare": "npm run compile" - }, - "repository": "yargs/cliui", - "standard": { - "ignore": [ - "**/example/**" - ], - "globals": [ - "it" - ] - }, - "keywords": [ - "cli", - "command-line", - "layout", - "design", - "console", - "wrap", - "table" - ], - "author": "Ben Coe ", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "devDependencies": { - "@types/node": "^14.0.27", - "@typescript-eslint/eslint-plugin": "^4.0.0", - "@typescript-eslint/parser": "^4.0.0", - "c8": "^7.3.0", - "chai": "^4.2.0", - "chalk": "^4.1.0", - "cross-env": "^7.0.2", - "eslint": "^7.6.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-node": "^11.1.0", - "gts": "^3.0.0", - "mocha": "^10.0.0", - "rimraf": "^3.0.2", - "rollup": "^2.23.1", - "rollup-plugin-ts": "^3.0.2", - "standardx": "^7.0.0", - "typescript": "^4.0.0" - }, - "files": [ - "build", - "index.mjs", - "!*.d.ts" - ], - "engines": { - "node": ">=12" - } -} diff --git a/node_modules/@pkgjs/parseargs/.editorconfig b/node_modules/@pkgjs/parseargs/.editorconfig deleted file mode 100644 index b140163905..0000000000 --- a/node_modules/@pkgjs/parseargs/.editorconfig +++ /dev/null @@ -1,14 +0,0 @@ -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file -root = true - -# Copied from Node.js to ease compatibility in PR. -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -indent_style = space -insert_final_newline = true -trim_trailing_whitespace = true -quote_type = single diff --git a/node_modules/@pkgjs/parseargs/CHANGELOG.md b/node_modules/@pkgjs/parseargs/CHANGELOG.md deleted file mode 100644 index 2adc7d3273..0000000000 --- a/node_modules/@pkgjs/parseargs/CHANGELOG.md +++ /dev/null @@ -1,147 +0,0 @@ -# Changelog - -## [0.11.0](https://github.com/pkgjs/parseargs/compare/v0.10.0...v0.11.0) (2022-10-08) - - -### Features - -* add `default` option parameter ([#142](https://github.com/pkgjs/parseargs/issues/142)) ([cd20847](https://github.com/pkgjs/parseargs/commit/cd20847a00b2f556aa9c085ac83b942c60868ec1)) - -## [0.10.0](https://github.com/pkgjs/parseargs/compare/v0.9.1...v0.10.0) (2022-07-21) - - -### Features - -* add parsed meta-data to returned properties ([#129](https://github.com/pkgjs/parseargs/issues/129)) ([91bfb4d](https://github.com/pkgjs/parseargs/commit/91bfb4d3f7b6937efab1b27c91c45d1205f1497e)) - -## [0.9.1](https://github.com/pkgjs/parseargs/compare/v0.9.0...v0.9.1) (2022-06-20) - - -### Bug Fixes - -* **runtime:** support node 14+ ([#135](https://github.com/pkgjs/parseargs/issues/135)) ([6a1c5a6](https://github.com/pkgjs/parseargs/commit/6a1c5a6f7cadf2f035e004027e2742e3c4ce554b)) - -## [0.9.0](https://github.com/pkgjs/parseargs/compare/v0.8.0...v0.9.0) (2022-05-23) - - -### ⚠ BREAKING CHANGES - -* drop handling of electron arguments (#121) - -### Code Refactoring - -* drop handling of electron arguments ([#121](https://github.com/pkgjs/parseargs/issues/121)) ([a2ffd53](https://github.com/pkgjs/parseargs/commit/a2ffd537c244a062371522b955acb45a404fc9f2)) - -## [0.8.0](https://github.com/pkgjs/parseargs/compare/v0.7.1...v0.8.0) (2022-05-16) - - -### ⚠ BREAKING CHANGES - -* switch type:string option arguments to greedy, but with error for suspect cases in strict mode (#88) -* positionals now opt-in when strict:true (#116) -* create result.values with null prototype (#111) - -### Features - -* create result.values with null prototype ([#111](https://github.com/pkgjs/parseargs/issues/111)) ([9d539c3](https://github.com/pkgjs/parseargs/commit/9d539c3d57f269c160e74e0656ad4fa84ff92ec2)) -* positionals now opt-in when strict:true ([#116](https://github.com/pkgjs/parseargs/issues/116)) ([3643338](https://github.com/pkgjs/parseargs/commit/364333826b746e8a7dc5505b4b22fd19ac51df3b)) -* switch type:string option arguments to greedy, but with error for suspect cases in strict mode ([#88](https://github.com/pkgjs/parseargs/issues/88)) ([c2b5e72](https://github.com/pkgjs/parseargs/commit/c2b5e72161991dfdc535909f1327cc9b970fe7e8)) - -### [0.7.1](https://github.com/pkgjs/parseargs/compare/v0.7.0...v0.7.1) (2022-04-15) - - -### Bug Fixes - -* resist pollution ([#106](https://github.com/pkgjs/parseargs/issues/106)) ([ecf2dec](https://github.com/pkgjs/parseargs/commit/ecf2dece0a9f2a76d789384d5d71c68ffe64022a)) - -## [0.7.0](https://github.com/pkgjs/parseargs/compare/v0.6.0...v0.7.0) (2022-04-13) - - -### Features - -* Add strict mode to parser ([#74](https://github.com/pkgjs/parseargs/issues/74)) ([8267d02](https://github.com/pkgjs/parseargs/commit/8267d02083a87b8b8a71fcce08348d1e031ea91c)) - -## [0.6.0](https://github.com/pkgjs/parseargs/compare/v0.5.0...v0.6.0) (2022-04-11) - - -### ⚠ BREAKING CHANGES - -* rework results to remove redundant `flags` property and store value true for boolean options (#83) -* switch to existing ERR_INVALID_ARG_VALUE (#97) - -### Code Refactoring - -* rework results to remove redundant `flags` property and store value true for boolean options ([#83](https://github.com/pkgjs/parseargs/issues/83)) ([be153db](https://github.com/pkgjs/parseargs/commit/be153dbed1d488cb7b6e27df92f601ba7337713d)) -* switch to existing ERR_INVALID_ARG_VALUE ([#97](https://github.com/pkgjs/parseargs/issues/97)) ([084a23f](https://github.com/pkgjs/parseargs/commit/084a23f9fde2da030b159edb1c2385f24579ce40)) - -## [0.5.0](https://github.com/pkgjs/parseargs/compare/v0.4.0...v0.5.0) (2022-04-10) - - -### ⚠ BREAKING CHANGES - -* Require type to be specified for each supplied option (#95) - -### Features - -* Require type to be specified for each supplied option ([#95](https://github.com/pkgjs/parseargs/issues/95)) ([02cd018](https://github.com/pkgjs/parseargs/commit/02cd01885b8aaa59f2db8308f2d4479e64340068)) - -## [0.4.0](https://github.com/pkgjs/parseargs/compare/v0.3.0...v0.4.0) (2022-03-12) - - -### ⚠ BREAKING CHANGES - -* parsing, revisit short option groups, add support for combined short and value (#75) -* restructure configuration to take options bag (#63) - -### Code Refactoring - -* parsing, revisit short option groups, add support for combined short and value ([#75](https://github.com/pkgjs/parseargs/issues/75)) ([a92600f](https://github.com/pkgjs/parseargs/commit/a92600fa6c214508ab1e016fa55879a314f541af)) -* restructure configuration to take options bag ([#63](https://github.com/pkgjs/parseargs/issues/63)) ([b412095](https://github.com/pkgjs/parseargs/commit/b4120957d90e809ee8b607b06e747d3e6a6b213e)) - -## [0.3.0](https://github.com/pkgjs/parseargs/compare/v0.2.0...v0.3.0) (2022-02-06) - - -### Features - -* **parser:** support short-option groups ([#59](https://github.com/pkgjs/parseargs/issues/59)) ([882067b](https://github.com/pkgjs/parseargs/commit/882067bc2d7cbc6b796f8e5a079a99bc99d4e6ba)) - -## [0.2.0](https://github.com/pkgjs/parseargs/compare/v0.1.1...v0.2.0) (2022-02-05) - - -### Features - -* basic support for shorts ([#50](https://github.com/pkgjs/parseargs/issues/50)) ([a2f36d7](https://github.com/pkgjs/parseargs/commit/a2f36d7da4145af1c92f76806b7fe2baf6beeceb)) - - -### Bug Fixes - -* always store value for a=b ([#43](https://github.com/pkgjs/parseargs/issues/43)) ([a85e8dc](https://github.com/pkgjs/parseargs/commit/a85e8dc06379fd2696ee195cc625de8fac6aee42)) -* support single dash as positional ([#49](https://github.com/pkgjs/parseargs/issues/49)) ([d795bf8](https://github.com/pkgjs/parseargs/commit/d795bf877d068fd67aec381f30b30b63f97109ad)) - -### [0.1.1](https://github.com/pkgjs/parseargs/compare/v0.1.0...v0.1.1) (2022-01-25) - - -### Bug Fixes - -* only use arrays in results for multiples ([#42](https://github.com/pkgjs/parseargs/issues/42)) ([c357584](https://github.com/pkgjs/parseargs/commit/c357584847912506319ed34a0840080116f4fd65)) - -## 0.1.0 (2022-01-22) - - -### Features - -* expand scenarios covered by default arguments for environments ([#20](https://github.com/pkgjs/parseargs/issues/20)) ([582ada7](https://github.com/pkgjs/parseargs/commit/582ada7be0eca3a73d6e0bd016e7ace43449fa4c)) -* update readme and include contributing guidelines ([8edd6fc](https://github.com/pkgjs/parseargs/commit/8edd6fc863cd705f6fac732724159ebe8065a2b0)) - - -### Bug Fixes - -* do not strip excess leading dashes on long option names ([#21](https://github.com/pkgjs/parseargs/issues/21)) ([f848590](https://github.com/pkgjs/parseargs/commit/f848590ebf3249ed5979ff47e003fa6e1a8ec5c0)) -* name & readme ([3f057c1](https://github.com/pkgjs/parseargs/commit/3f057c1b158a1bdbe878c64b57460c58e56e465f)) -* package.json values ([9bac300](https://github.com/pkgjs/parseargs/commit/9bac300e00cd76c77076bf9e75e44f8929512da9)) -* update readme name ([957d8d9](https://github.com/pkgjs/parseargs/commit/957d8d96e1dcb48297c0a14345d44c0123b2883e)) - - -### Build System - -* first release as minor ([421c6e2](https://github.com/pkgjs/parseargs/commit/421c6e2569a8668ad14fac5a5af5be60479a7571)) diff --git a/node_modules/@pkgjs/parseargs/LICENSE b/node_modules/@pkgjs/parseargs/LICENSE deleted file mode 100644 index 261eeb9e9f..0000000000 --- a/node_modules/@pkgjs/parseargs/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/node_modules/@pkgjs/parseargs/README.md b/node_modules/@pkgjs/parseargs/README.md deleted file mode 100644 index 0a041927e8..0000000000 --- a/node_modules/@pkgjs/parseargs/README.md +++ /dev/null @@ -1,413 +0,0 @@ - -# parseArgs - -[![Coverage][coverage-image]][coverage-url] - -Polyfill of `util.parseArgs()` - -## `util.parseArgs([config])` - - - -> Stability: 1 - Experimental - -* `config` {Object} Used to provide arguments for parsing and to configure - the parser. `config` supports the following properties: - * `args` {string\[]} array of argument strings. **Default:** `process.argv` - with `execPath` and `filename` removed. - * `options` {Object} Used to describe arguments known to the parser. - Keys of `options` are the long names of options and values are an - {Object} accepting the following properties: - * `type` {string} Type of argument, which must be either `boolean` or `string`. - * `multiple` {boolean} Whether this option can be provided multiple - times. If `true`, all values will be collected in an array. If - `false`, values for the option are last-wins. **Default:** `false`. - * `short` {string} A single character alias for the option. - * `default` {string | boolean | string\[] | boolean\[]} The default option - value when it is not set by args. It must be of the same type as the - the `type` property. When `multiple` is `true`, it must be an array. - * `strict` {boolean} Should an error be thrown when unknown arguments - are encountered, or when arguments are passed that do not match the - `type` configured in `options`. - **Default:** `true`. - * `allowPositionals` {boolean} Whether this command accepts positional - arguments. - **Default:** `false` if `strict` is `true`, otherwise `true`. - * `tokens` {boolean} Return the parsed tokens. This is useful for extending - the built-in behavior, from adding additional checks through to reprocessing - the tokens in different ways. - **Default:** `false`. - -* Returns: {Object} The parsed command line arguments: - * `values` {Object} A mapping of parsed option names with their {string} - or {boolean} values. - * `positionals` {string\[]} Positional arguments. - * `tokens` {Object\[] | undefined} See [parseArgs tokens](#parseargs-tokens) - section. Only returned if `config` includes `tokens: true`. - -Provides a higher level API for command-line argument parsing than interacting -with `process.argv` directly. Takes a specification for the expected arguments -and returns a structured object with the parsed options and positionals. - -```mjs -import { parseArgs } from 'node:util'; -const args = ['-f', '--bar', 'b']; -const options = { - foo: { - type: 'boolean', - short: 'f' - }, - bar: { - type: 'string' - } -}; -const { - values, - positionals -} = parseArgs({ args, options }); -console.log(values, positionals); -// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] -``` - -```cjs -const { parseArgs } = require('node:util'); -const args = ['-f', '--bar', 'b']; -const options = { - foo: { - type: 'boolean', - short: 'f' - }, - bar: { - type: 'string' - } -}; -const { - values, - positionals -} = parseArgs({ args, options }); -console.log(values, positionals); -// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] -``` - -`util.parseArgs` is experimental and behavior may change. Join the -conversation in [pkgjs/parseargs][] to contribute to the design. - -### `parseArgs` `tokens` - -Detailed parse information is available for adding custom behaviours by -specifying `tokens: true` in the configuration. -The returned tokens have properties describing: - -* all tokens - * `kind` {string} One of 'option', 'positional', or 'option-terminator'. - * `index` {number} Index of element in `args` containing token. So the - source argument for a token is `args[token.index]`. -* option tokens - * `name` {string} Long name of option. - * `rawName` {string} How option used in args, like `-f` of `--foo`. - * `value` {string | undefined} Option value specified in args. - Undefined for boolean options. - * `inlineValue` {boolean | undefined} Whether option value specified inline, - like `--foo=bar`. -* positional tokens - * `value` {string} The value of the positional argument in args (i.e. `args[index]`). -* option-terminator token - -The returned tokens are in the order encountered in the input args. Options -that appear more than once in args produce a token for each use. Short option -groups like `-xy` expand to a token for each option. So `-xxx` produces -three tokens. - -For example to use the returned tokens to add support for a negated option -like `--no-color`, the tokens can be reprocessed to change the value stored -for the negated option. - -```mjs -import { parseArgs } from 'node:util'; - -const options = { - 'color': { type: 'boolean' }, - 'no-color': { type: 'boolean' }, - 'logfile': { type: 'string' }, - 'no-logfile': { type: 'boolean' }, -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -// Reprocess the option tokens and overwrite the returned values. -tokens - .filter((token) => token.kind === 'option') - .forEach((token) => { - if (token.name.startsWith('no-')) { - // Store foo:false for --no-foo - const positiveName = token.name.slice(3); - values[positiveName] = false; - delete values[token.name]; - } else { - // Resave value so last one wins if both --foo and --no-foo. - values[token.name] = token.value ?? true; - } - }); - -const color = values.color; -const logfile = values.logfile ?? 'default.log'; - -console.log({ logfile, color }); -``` - -```cjs -const { parseArgs } = require('node:util'); - -const options = { - 'color': { type: 'boolean' }, - 'no-color': { type: 'boolean' }, - 'logfile': { type: 'string' }, - 'no-logfile': { type: 'boolean' }, -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -// Reprocess the option tokens and overwrite the returned values. -tokens - .filter((token) => token.kind === 'option') - .forEach((token) => { - if (token.name.startsWith('no-')) { - // Store foo:false for --no-foo - const positiveName = token.name.slice(3); - values[positiveName] = false; - delete values[token.name]; - } else { - // Resave value so last one wins if both --foo and --no-foo. - values[token.name] = token.value ?? true; - } - }); - -const color = values.color; -const logfile = values.logfile ?? 'default.log'; - -console.log({ logfile, color }); -``` - -Example usage showing negated options, and when an option is used -multiple ways then last one wins. - -```console -$ node negate.js -{ logfile: 'default.log', color: undefined } -$ node negate.js --no-logfile --no-color -{ logfile: false, color: false } -$ node negate.js --logfile=test.log --color -{ logfile: 'test.log', color: true } -$ node negate.js --no-logfile --logfile=test.log --color --no-color -{ logfile: 'test.log', color: false } -``` - ------ - - -## Table of Contents -- [`util.parseArgs([config])`](#utilparseargsconfig) -- [Scope](#scope) -- [Version Matchups](#version-matchups) -- [🚀 Getting Started](#-getting-started) -- [🙌 Contributing](#-contributing) -- [💡 `process.mainArgs` Proposal](#-processmainargs-proposal) - - [Implementation:](#implementation) -- [📃 Examples](#-examples) -- [F.A.Qs](#faqs) -- [Links & Resources](#links--resources) - ------ - -## Scope - -It is already possible to build great arg parsing modules on top of what Node.js provides; the prickly API is abstracted away by these modules. Thus, process.parseArgs() is not necessarily intended for library authors; it is intended for developers of simple CLI tools, ad-hoc scripts, deployed Node.js applications, and learning materials. - -It is exceedingly difficult to provide an API which would both be friendly to these Node.js users while being extensible enough for libraries to build upon. We chose to prioritize these use cases because these are currently not well-served by Node.js' API. - ----- - -## Version Matchups - -| Node.js | @pkgjs/parseArgs | -| -- | -- | -| [v18.3.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [v0.9.1](https://github.com/pkgjs/parseargs/tree/v0.9.1#utilparseargsconfig) | -| [v16.17.0](https://nodejs.org/dist/latest-v16.x/docs/api/util.html#utilparseargsconfig), [v18.7.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [0.10.0](https://github.com/pkgjs/parseargs/tree/v0.10.0#utilparseargsconfig) | - ----- - -## 🚀 Getting Started - -1. **Install dependencies.** - - ```bash - npm install - ``` - -2. **Open the index.js file and start editing!** - -3. **Test your code by calling parseArgs through our test file** - - ```bash - npm test - ``` - ----- - -## 🙌 Contributing - -Any person who wants to contribute to the initiative is welcome! Please first read the [Contributing Guide](CONTRIBUTING.md) - -Additionally, reading the [`Examples w/ Output`](#-examples-w-output) section of this document will be the best way to familiarize yourself with the target expected behavior for parseArgs() once it is fully implemented. - -This package was implemented using [tape](https://www.npmjs.com/package/tape) as its test harness. - ----- - -## 💡 `process.mainArgs` Proposal - -> Note: This can be moved forward independently of the `util.parseArgs()` proposal/work. - -### Implementation: - -```javascript -process.mainArgs = process.argv.slice(process._exec ? 1 : 2) -``` - ----- - -## 📃 Examples - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// specify the options that may be used -const options = { - foo: { type: 'string'}, - bar: { type: 'boolean' }, -}; -const args = ['--foo=a', '--bar']; -const { values, positionals } = parseArgs({ args, options }); -// values = { foo: 'a', bar: true } -// positionals = [] -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// type:string & multiple -const options = { - foo: { - type: 'string', - multiple: true, - }, -}; -const args = ['--foo=a', '--foo', 'b']; -const { values, positionals } = parseArgs({ args, options }); -// values = { foo: [ 'a', 'b' ] } -// positionals = [] -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// shorts -const options = { - foo: { - short: 'f', - type: 'boolean' - }, -}; -const args = ['-f', 'b']; -const { values, positionals } = parseArgs({ args, options, allowPositionals: true }); -// values = { foo: true } -// positionals = ['b'] -``` - -```js -const { parseArgs } = require('@pkgjs/parseargs'); -// unconfigured -const options = {}; -const args = ['-f', '--foo=a', '--bar', 'b']; -const { values, positionals } = parseArgs({ strict: false, args, options, allowPositionals: true }); -// values = { f: true, foo: 'a', bar: true } -// positionals = ['b'] -``` - ----- - -## F.A.Qs - -- Is `cmd --foo=bar baz` the same as `cmd baz --foo=bar`? - - yes -- Does the parser execute a function? - - no -- Does the parser execute one of several functions, depending on input? - - no -- Can subcommands take options that are distinct from the main command? - - no -- Does it output generated help when no options match? - - no -- Does it generated short usage? Like: `usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]` - - no (no usage/help at all) -- Does the user provide the long usage text? For each option? For the whole command? - - no -- Do subcommands (if implemented) have their own usage output? - - no -- Does usage print if the user runs `cmd --help`? - - no -- Does it set `process.exitCode`? - - no -- Does usage print to stderr or stdout? - - N/A -- Does it check types? (Say, specify that an option is a boolean, number, etc.) - - no -- Can an option have more than one type? (string or false, for example) - - no -- Can the user define a type? (Say, `type: path` to call `path.resolve()` on the argument.) - - no -- Does a `--foo=0o22` mean 0, 22, 18, or "0o22"? - - `"0o22"` -- Does it coerce types? - - no -- Does `--no-foo` coerce to `--foo=false`? For all options? Only boolean options? - - no, it sets `{values:{'no-foo': true}}` -- Is `--foo` the same as `--foo=true`? Only for known booleans? Only at the end? - - no, they are not the same. There is no special handling of `true` as a value so it is just another string. -- Does it read environment variables? Ie, is `FOO=1 cmd` the same as `cmd --foo=1`? - - no -- Do unknown arguments raise an error? Are they parsed? Are they treated as positional arguments? - - no, they are parsed, not treated as positionals -- Does `--` signal the end of options? - - yes -- Is `--` included as a positional? - - no -- Is `program -- foo` the same as `program foo`? - - yes, both store `{positionals:['foo']}` -- Does the API specify whether a `--` was present/relevant? - - no -- Is `-bar` the same as `--bar`? - - no, `-bar` is a short option or options, with expansion logic that follows the - [Utility Syntax Guidelines in POSIX.1-2017](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). `-bar` expands to `-b`, `-a`, `-r`. -- Is `---foo` the same as `--foo`? - - no - - the first is a long option named `'-foo'` - - the second is a long option named `'foo'` -- Is `-` a positional? ie, `bash some-test.sh | tap -` - - yes - -## Links & Resources - -* [Initial Tooling Issue](https://github.com/nodejs/tooling/issues/19) -* [Initial Proposal](https://github.com/nodejs/node/pull/35015) -* [parseArgs Proposal](https://github.com/nodejs/node/pull/42675) - -[coverage-image]: https://img.shields.io/nycrc/pkgjs/parseargs -[coverage-url]: https://github.com/pkgjs/parseargs/blob/main/.nycrc -[pkgjs/parseargs]: https://github.com/pkgjs/parseargs diff --git a/node_modules/@pkgjs/parseargs/examples/is-default-value.js b/node_modules/@pkgjs/parseargs/examples/is-default-value.js deleted file mode 100644 index 0a67972b71..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/is-default-value.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -// This example shows how to understand if a default value is used or not. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - file: { short: 'f', type: 'string', default: 'FOO' }, -}; - -const { values, tokens } = parseArgs({ options, tokens: true }); - -const isFileDefault = !tokens.some((token) => token.kind === 'option' && - token.name === 'file' -); - -console.log(values); -console.log(`Is the file option [${values.file}] the default value? ${isFileDefault}`); - -// Try the following: -// node is-default-value.js -// node is-default-value.js -f FILE -// node is-default-value.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js deleted file mode 100644 index 943e643ee9..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -// This is an example of using tokens to add a custom behaviour. -// -// Require the use of `=` for long options and values by blocking -// the use of space separated values. -// So allow `--foo=bar`, and not allow `--foo bar`. -// -// Note: this is not a common behaviour, most CLIs allow both forms. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - file: { short: 'f', type: 'string' }, - log: { type: 'string' }, -}; - -const { values, tokens } = parseArgs({ options, tokens: true }); - -const badToken = tokens.find((token) => token.kind === 'option' && - token.value != null && - token.rawName.startsWith('--') && - !token.inlineValue -); -if (badToken) { - throw new Error(`Option value for '${badToken.rawName}' must be inline, like '${badToken.rawName}=VALUE'`); -} - -console.log(values); - -// Try the following: -// node limit-long-syntax.js -f FILE --log=LOG -// node limit-long-syntax.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/negate.js b/node_modules/@pkgjs/parseargs/examples/negate.js deleted file mode 100644 index b6634690a4..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/negate.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -// This example is used in the documentation. - -// How might I add my own support for --no-foo? - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - 'color': { type: 'boolean' }, - 'no-color': { type: 'boolean' }, - 'logfile': { type: 'string' }, - 'no-logfile': { type: 'boolean' }, -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -// Reprocess the option tokens and overwrite the returned values. -tokens - .filter((token) => token.kind === 'option') - .forEach((token) => { - if (token.name.startsWith('no-')) { - // Store foo:false for --no-foo - const positiveName = token.name.slice(3); - values[positiveName] = false; - delete values[token.name]; - } else { - // Resave value so last one wins if both --foo and --no-foo. - values[token.name] = token.value ?? true; - } - }); - -const color = values.color; -const logfile = values.logfile ?? 'default.log'; - -console.log({ logfile, color }); - -// Try the following: -// node negate.js -// node negate.js --no-logfile --no-color -// negate.js --logfile=test.log --color -// node negate.js --no-logfile --logfile=test.log --color --no-color diff --git a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js deleted file mode 100644 index 0c324688af..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -// This is an example of using tokens to add a custom behaviour. -// -// Throw an error if an option is used more than once. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const options = { - ding: { type: 'boolean', short: 'd' }, - beep: { type: 'boolean', short: 'b' } -}; -const { values, tokens } = parseArgs({ options, tokens: true }); - -const seenBefore = new Set(); -tokens.forEach((token) => { - if (token.kind !== 'option') return; - if (seenBefore.has(token.name)) { - throw new Error(`option '${token.name}' used multiple times`); - } - seenBefore.add(token.name); -}); - -console.log(values); - -// Try the following: -// node no-repeated-options --ding --beep -// node no-repeated-options --beep -b -// node no-repeated-options -ddd diff --git a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs deleted file mode 100644 index 8ab7367b8b..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs +++ /dev/null @@ -1,41 +0,0 @@ -// This is an example of using tokens to add a custom behaviour. -// -// This adds a option order check so that --some-unstable-option -// may only be used after --enable-experimental-options -// -// Note: this is not a common behaviour, the order of different options -// does not usually matter. - -import { parseArgs } from '../index.js'; - -function findTokenIndex(tokens, target) { - return tokens.findIndex((token) => token.kind === 'option' && - token.name === target - ); -} - -const experimentalName = 'enable-experimental-options'; -const unstableName = 'some-unstable-option'; - -const options = { - [experimentalName]: { type: 'boolean' }, - [unstableName]: { type: 'boolean' }, -}; - -const { values, tokens } = parseArgs({ options, tokens: true }); - -const experimentalIndex = findTokenIndex(tokens, experimentalName); -const unstableIndex = findTokenIndex(tokens, unstableName); -if (unstableIndex !== -1 && - ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) { - throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`); -} - -console.log(values); - -/* eslint-disable max-len */ -// Try the following: -// node ordered-options.mjs -// node ordered-options.mjs --some-unstable-option -// node ordered-options.mjs --some-unstable-option --enable-experimental-options -// node ordered-options.mjs --enable-experimental-options --some-unstable-option diff --git a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js deleted file mode 100644 index eff04c2a60..0000000000 --- a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -// This example is used in the documentation. - -// 1. const { parseArgs } = require('node:util'); // from node -// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package -const { parseArgs } = require('..'); // in repo - -const args = ['-f', '--bar', 'b']; -const options = { - foo: { - type: 'boolean', - short: 'f' - }, - bar: { - type: 'string' - } -}; -const { - values, - positionals -} = parseArgs({ args, options }); -console.log(values, positionals); - -// Try the following: -// node simple-hard-coded.js diff --git a/node_modules/@pkgjs/parseargs/index.js b/node_modules/@pkgjs/parseargs/index.js deleted file mode 100644 index b1004c7b72..0000000000 --- a/node_modules/@pkgjs/parseargs/index.js +++ /dev/null @@ -1,396 +0,0 @@ -'use strict'; - -const { - ArrayPrototypeForEach, - ArrayPrototypeIncludes, - ArrayPrototypeMap, - ArrayPrototypePush, - ArrayPrototypePushApply, - ArrayPrototypeShift, - ArrayPrototypeSlice, - ArrayPrototypeUnshiftApply, - ObjectEntries, - ObjectPrototypeHasOwnProperty: ObjectHasOwn, - StringPrototypeCharAt, - StringPrototypeIndexOf, - StringPrototypeSlice, - StringPrototypeStartsWith, -} = require('./internal/primordials'); - -const { - validateArray, - validateBoolean, - validateBooleanArray, - validateObject, - validateString, - validateStringArray, - validateUnion, -} = require('./internal/validators'); - -const { - kEmptyObject, -} = require('./internal/util'); - -const { - findLongOptionForShort, - isLoneLongOption, - isLoneShortOption, - isLongOptionAndValue, - isOptionValue, - isOptionLikeValue, - isShortOptionAndValue, - isShortOptionGroup, - useDefaultValueOption, - objectGetOwn, - optionsGetOwn, -} = require('./utils'); - -const { - codes: { - ERR_INVALID_ARG_VALUE, - ERR_PARSE_ARGS_INVALID_OPTION_VALUE, - ERR_PARSE_ARGS_UNKNOWN_OPTION, - ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, - }, -} = require('./internal/errors'); - -function getMainArgs() { - // Work out where to slice process.argv for user supplied arguments. - - // Check node options for scenarios where user CLI args follow executable. - const execArgv = process.execArgv; - if (ArrayPrototypeIncludes(execArgv, '-e') || - ArrayPrototypeIncludes(execArgv, '--eval') || - ArrayPrototypeIncludes(execArgv, '-p') || - ArrayPrototypeIncludes(execArgv, '--print')) { - return ArrayPrototypeSlice(process.argv, 1); - } - - // Normally first two arguments are executable and script, then CLI arguments - return ArrayPrototypeSlice(process.argv, 2); -} - -/** - * In strict mode, throw for possible usage errors like --foo --bar - * - * @param {object} token - from tokens as available from parseArgs - */ -function checkOptionLikeValue(token) { - if (!token.inlineValue && isOptionLikeValue(token.value)) { - // Only show short example if user used short option. - const example = StringPrototypeStartsWith(token.rawName, '--') ? - `'${token.rawName}=-XYZ'` : - `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`; - const errorMessage = `Option '${token.rawName}' argument is ambiguous. -Did you forget to specify the option argument for '${token.rawName}'? -To specify an option argument starting with a dash use ${example}.`; - throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage); - } -} - -/** - * In strict mode, throw for usage errors. - * - * @param {object} config - from config passed to parseArgs - * @param {object} token - from tokens as available from parseArgs - */ -function checkOptionUsage(config, token) { - if (!ObjectHasOwn(config.options, token.name)) { - throw new ERR_PARSE_ARGS_UNKNOWN_OPTION( - token.rawName, config.allowPositionals); - } - - const short = optionsGetOwn(config.options, token.name, 'short'); - const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`; - const type = optionsGetOwn(config.options, token.name, 'type'); - if (type === 'string' && typeof token.value !== 'string') { - throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} ' argument missing`); - } - // (Idiomatic test for undefined||null, expecting undefined.) - if (type === 'boolean' && token.value != null) { - throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`); - } -} - - -/** - * Store the option value in `values`. - * - * @param {string} longOption - long option name e.g. 'foo' - * @param {string|undefined} optionValue - value from user args - * @param {object} options - option configs, from parseArgs({ options }) - * @param {object} values - option values returned in `values` by parseArgs - */ -function storeOption(longOption, optionValue, options, values) { - if (longOption === '__proto__') { - return; // No. Just no. - } - - // We store based on the option value rather than option type, - // preserving the users intent for author to deal with. - const newValue = optionValue ?? true; - if (optionsGetOwn(options, longOption, 'multiple')) { - // Always store value in array, including for boolean. - // values[longOption] starts out not present, - // first value is added as new array [newValue], - // subsequent values are pushed to existing array. - // (note: values has null prototype, so simpler usage) - if (values[longOption]) { - ArrayPrototypePush(values[longOption], newValue); - } else { - values[longOption] = [newValue]; - } - } else { - values[longOption] = newValue; - } -} - -/** - * Store the default option value in `values`. - * - * @param {string} longOption - long option name e.g. 'foo' - * @param {string - * | boolean - * | string[] - * | boolean[]} optionValue - default value from option config - * @param {object} values - option values returned in `values` by parseArgs - */ -function storeDefaultOption(longOption, optionValue, values) { - if (longOption === '__proto__') { - return; // No. Just no. - } - - values[longOption] = optionValue; -} - -/** - * Process args and turn into identified tokens: - * - option (along with value, if any) - * - positional - * - option-terminator - * - * @param {string[]} args - from parseArgs({ args }) or mainArgs - * @param {object} options - option configs, from parseArgs({ options }) - */ -function argsToTokens(args, options) { - const tokens = []; - let index = -1; - let groupCount = 0; - - const remainingArgs = ArrayPrototypeSlice(args); - while (remainingArgs.length > 0) { - const arg = ArrayPrototypeShift(remainingArgs); - const nextArg = remainingArgs[0]; - if (groupCount > 0) - groupCount--; - else - index++; - - // Check if `arg` is an options terminator. - // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html - if (arg === '--') { - // Everything after a bare '--' is considered a positional argument. - ArrayPrototypePush(tokens, { kind: 'option-terminator', index }); - ArrayPrototypePushApply( - tokens, ArrayPrototypeMap(remainingArgs, (arg) => { - return { kind: 'positional', index: ++index, value: arg }; - }) - ); - break; // Finished processing args, leave while loop. - } - - if (isLoneShortOption(arg)) { - // e.g. '-f' - const shortOption = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(shortOption, options); - let value; - let inlineValue; - if (optionsGetOwn(options, longOption, 'type') === 'string' && - isOptionValue(nextArg)) { - // e.g. '-f', 'bar' - value = ArrayPrototypeShift(remainingArgs); - inlineValue = false; - } - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: arg, - index, value, inlineValue }); - if (value != null) ++index; - continue; - } - - if (isShortOptionGroup(arg, options)) { - // Expand -fXzy to -f -X -z -y - const expanded = []; - for (let index = 1; index < arg.length; index++) { - const shortOption = StringPrototypeCharAt(arg, index); - const longOption = findLongOptionForShort(shortOption, options); - if (optionsGetOwn(options, longOption, 'type') !== 'string' || - index === arg.length - 1) { - // Boolean option, or last short in group. Well formed. - ArrayPrototypePush(expanded, `-${shortOption}`); - } else { - // String option in middle. Yuck. - // Expand -abfFILE to -a -b -fFILE - ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`); - break; // finished short group - } - } - ArrayPrototypeUnshiftApply(remainingArgs, expanded); - groupCount = expanded.length; - continue; - } - - if (isShortOptionAndValue(arg, options)) { - // e.g. -fFILE - const shortOption = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(shortOption, options); - const value = StringPrototypeSlice(arg, 2); - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: `-${shortOption}`, - index, value, inlineValue: true }); - continue; - } - - if (isLoneLongOption(arg)) { - // e.g. '--foo' - const longOption = StringPrototypeSlice(arg, 2); - let value; - let inlineValue; - if (optionsGetOwn(options, longOption, 'type') === 'string' && - isOptionValue(nextArg)) { - // e.g. '--foo', 'bar' - value = ArrayPrototypeShift(remainingArgs); - inlineValue = false; - } - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: arg, - index, value, inlineValue }); - if (value != null) ++index; - continue; - } - - if (isLongOptionAndValue(arg)) { - // e.g. --foo=bar - const equalIndex = StringPrototypeIndexOf(arg, '='); - const longOption = StringPrototypeSlice(arg, 2, equalIndex); - const value = StringPrototypeSlice(arg, equalIndex + 1); - ArrayPrototypePush( - tokens, - { kind: 'option', name: longOption, rawName: `--${longOption}`, - index, value, inlineValue: true }); - continue; - } - - ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg }); - } - - return tokens; -} - -const parseArgs = (config = kEmptyObject) => { - const args = objectGetOwn(config, 'args') ?? getMainArgs(); - const strict = objectGetOwn(config, 'strict') ?? true; - const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict; - const returnTokens = objectGetOwn(config, 'tokens') ?? false; - const options = objectGetOwn(config, 'options') ?? { __proto__: null }; - // Bundle these up for passing to strict-mode checks. - const parseConfig = { args, strict, options, allowPositionals }; - - // Validate input configuration. - validateArray(args, 'args'); - validateBoolean(strict, 'strict'); - validateBoolean(allowPositionals, 'allowPositionals'); - validateBoolean(returnTokens, 'tokens'); - validateObject(options, 'options'); - ArrayPrototypeForEach( - ObjectEntries(options), - ({ 0: longOption, 1: optionConfig }) => { - validateObject(optionConfig, `options.${longOption}`); - - // type is required - const optionType = objectGetOwn(optionConfig, 'type'); - validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']); - - if (ObjectHasOwn(optionConfig, 'short')) { - const shortOption = optionConfig.short; - validateString(shortOption, `options.${longOption}.short`); - if (shortOption.length !== 1) { - throw new ERR_INVALID_ARG_VALUE( - `options.${longOption}.short`, - shortOption, - 'must be a single character' - ); - } - } - - const multipleOption = objectGetOwn(optionConfig, 'multiple'); - if (ObjectHasOwn(optionConfig, 'multiple')) { - validateBoolean(multipleOption, `options.${longOption}.multiple`); - } - - const defaultValue = objectGetOwn(optionConfig, 'default'); - if (defaultValue !== undefined) { - let validator; - switch (optionType) { - case 'string': - validator = multipleOption ? validateStringArray : validateString; - break; - - case 'boolean': - validator = multipleOption ? validateBooleanArray : validateBoolean; - break; - } - validator(defaultValue, `options.${longOption}.default`); - } - } - ); - - // Phase 1: identify tokens - const tokens = argsToTokens(args, options); - - // Phase 2: process tokens into parsed option values and positionals - const result = { - values: { __proto__: null }, - positionals: [], - }; - if (returnTokens) { - result.tokens = tokens; - } - ArrayPrototypeForEach(tokens, (token) => { - if (token.kind === 'option') { - if (strict) { - checkOptionUsage(parseConfig, token); - checkOptionLikeValue(token); - } - storeOption(token.name, token.value, options, result.values); - } else if (token.kind === 'positional') { - if (!allowPositionals) { - throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value); - } - ArrayPrototypePush(result.positionals, token.value); - } - }); - - // Phase 3: fill in default values for missing args - ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption, - 1: optionConfig }) => { - const mustSetDefault = useDefaultValueOption(longOption, - optionConfig, - result.values); - if (mustSetDefault) { - storeDefaultOption(longOption, - objectGetOwn(optionConfig, 'default'), - result.values); - } - }); - - - return result; -}; - -module.exports = { - parseArgs, -}; diff --git a/node_modules/@pkgjs/parseargs/internal/errors.js b/node_modules/@pkgjs/parseargs/internal/errors.js deleted file mode 100644 index e1b237b5b1..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/errors.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -class ERR_INVALID_ARG_TYPE extends TypeError { - constructor(name, expected, actual) { - super(`${name} must be ${expected} got ${actual}`); - this.code = 'ERR_INVALID_ARG_TYPE'; - } -} - -class ERR_INVALID_ARG_VALUE extends TypeError { - constructor(arg1, arg2, expected) { - super(`The property ${arg1} ${expected}. Received '${arg2}'`); - this.code = 'ERR_INVALID_ARG_VALUE'; - } -} - -class ERR_PARSE_ARGS_INVALID_OPTION_VALUE extends Error { - constructor(message) { - super(message); - this.code = 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE'; - } -} - -class ERR_PARSE_ARGS_UNKNOWN_OPTION extends Error { - constructor(option, allowPositionals) { - const suggestDashDash = allowPositionals ? `. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- ${JSON.stringify(option)}` : ''; - super(`Unknown option '${option}'${suggestDashDash}`); - this.code = 'ERR_PARSE_ARGS_UNKNOWN_OPTION'; - } -} - -class ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL extends Error { - constructor(positional) { - super(`Unexpected argument '${positional}'. This command does not take positional arguments`); - this.code = 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL'; - } -} - -module.exports = { - codes: { - ERR_INVALID_ARG_TYPE, - ERR_INVALID_ARG_VALUE, - ERR_PARSE_ARGS_INVALID_OPTION_VALUE, - ERR_PARSE_ARGS_UNKNOWN_OPTION, - ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, - } -}; diff --git a/node_modules/@pkgjs/parseargs/internal/primordials.js b/node_modules/@pkgjs/parseargs/internal/primordials.js deleted file mode 100644 index 63e23ab117..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/primordials.js +++ /dev/null @@ -1,393 +0,0 @@ -/* -This file is copied from https://github.com/nodejs/node/blob/v14.19.3/lib/internal/per_context/primordials.js -under the following license: - -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -*/ - -'use strict'; - -/* eslint-disable node-core/prefer-primordials */ - -// This file subclasses and stores the JS builtins that come from the VM -// so that Node.js's builtin modules do not need to later look these up from -// the global proxy, which can be mutated by users. - -// Use of primordials have sometimes a dramatic impact on performance, please -// benchmark all changes made in performance-sensitive areas of the codebase. -// See: https://github.com/nodejs/node/pull/38248 - -const primordials = {}; - -const { - defineProperty: ReflectDefineProperty, - getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor, - ownKeys: ReflectOwnKeys, -} = Reflect; - -// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`. -// It is using `bind.bind(call)` to avoid using `Function.prototype.bind` -// and `Function.prototype.call` after it may have been mutated by users. -const { apply, bind, call } = Function.prototype; -const uncurryThis = bind.bind(call); -primordials.uncurryThis = uncurryThis; - -// `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`. -// It is using `bind.bind(apply)` to avoid using `Function.prototype.bind` -// and `Function.prototype.apply` after it may have been mutated by users. -const applyBind = bind.bind(apply); -primordials.applyBind = applyBind; - -// Methods that accept a variable number of arguments, and thus it's useful to -// also create `${prefix}${key}Apply`, which uses `Function.prototype.apply`, -// instead of `Function.prototype.call`, and thus doesn't require iterator -// destructuring. -const varargsMethods = [ - // 'ArrayPrototypeConcat' is omitted, because it performs the spread - // on its own for arrays and array-likes with a truthy - // @@isConcatSpreadable symbol property. - 'ArrayOf', - 'ArrayPrototypePush', - 'ArrayPrototypeUnshift', - // 'FunctionPrototypeCall' is omitted, since there's 'ReflectApply' - // and 'FunctionPrototypeApply'. - 'MathHypot', - 'MathMax', - 'MathMin', - 'StringPrototypeConcat', - 'TypedArrayOf', -]; - -function getNewKey(key) { - return typeof key === 'symbol' ? - `Symbol${key.description[7].toUpperCase()}${key.description.slice(8)}` : - `${key[0].toUpperCase()}${key.slice(1)}`; -} - -function copyAccessor(dest, prefix, key, { enumerable, get, set }) { - ReflectDefineProperty(dest, `${prefix}Get${key}`, { - value: uncurryThis(get), - enumerable - }); - if (set !== undefined) { - ReflectDefineProperty(dest, `${prefix}Set${key}`, { - value: uncurryThis(set), - enumerable - }); - } -} - -function copyPropsRenamed(src, dest, prefix) { - for (const key of ReflectOwnKeys(src)) { - const newKey = getNewKey(key); - const desc = ReflectGetOwnPropertyDescriptor(src, key); - if ('get' in desc) { - copyAccessor(dest, prefix, newKey, desc); - } else { - const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); - if (varargsMethods.includes(name)) { - ReflectDefineProperty(dest, `${name}Apply`, { - // `src` is bound as the `this` so that the static `this` points - // to the object it was defined on, - // e.g.: `ArrayOfApply` gets a `this` of `Array`: - value: applyBind(desc.value, src), - }); - } - } - } -} - -function copyPropsRenamedBound(src, dest, prefix) { - for (const key of ReflectOwnKeys(src)) { - const newKey = getNewKey(key); - const desc = ReflectGetOwnPropertyDescriptor(src, key); - if ('get' in desc) { - copyAccessor(dest, prefix, newKey, desc); - } else { - const { value } = desc; - if (typeof value === 'function') { - desc.value = value.bind(src); - } - - const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); - if (varargsMethods.includes(name)) { - ReflectDefineProperty(dest, `${name}Apply`, { - value: applyBind(value, src), - }); - } - } - } -} - -function copyPrototype(src, dest, prefix) { - for (const key of ReflectOwnKeys(src)) { - const newKey = getNewKey(key); - const desc = ReflectGetOwnPropertyDescriptor(src, key); - if ('get' in desc) { - copyAccessor(dest, prefix, newKey, desc); - } else { - const { value } = desc; - if (typeof value === 'function') { - desc.value = uncurryThis(value); - } - - const name = `${prefix}${newKey}`; - ReflectDefineProperty(dest, name, desc); - if (varargsMethods.includes(name)) { - ReflectDefineProperty(dest, `${name}Apply`, { - value: applyBind(value), - }); - } - } - } -} - -// Create copies of configurable value properties of the global object -[ - 'Proxy', - 'globalThis', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - primordials[name] = globalThis[name]; -}); - -// Create copies of URI handling functions -[ - decodeURI, - decodeURIComponent, - encodeURI, - encodeURIComponent, -].forEach((fn) => { - primordials[fn.name] = fn; -}); - -// Create copies of the namespace objects -[ - 'JSON', - 'Math', - 'Proxy', - 'Reflect', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - copyPropsRenamed(global[name], primordials, name); -}); - -// Create copies of intrinsic objects -[ - 'Array', - 'ArrayBuffer', - 'BigInt', - 'BigInt64Array', - 'BigUint64Array', - 'Boolean', - 'DataView', - 'Date', - 'Error', - 'EvalError', - 'Float32Array', - 'Float64Array', - 'Function', - 'Int16Array', - 'Int32Array', - 'Int8Array', - 'Map', - 'Number', - 'Object', - 'RangeError', - 'ReferenceError', - 'RegExp', - 'Set', - 'String', - 'Symbol', - 'SyntaxError', - 'TypeError', - 'URIError', - 'Uint16Array', - 'Uint32Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'WeakMap', - 'WeakSet', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - const original = global[name]; - primordials[name] = original; - copyPropsRenamed(original, primordials, name); - copyPrototype(original.prototype, primordials, `${name}Prototype`); -}); - -// Create copies of intrinsic objects that require a valid `this` to call -// static methods. -// Refs: https://www.ecma-international.org/ecma-262/#sec-promise.all -[ - 'Promise', -].forEach((name) => { - // eslint-disable-next-line no-restricted-globals - const original = global[name]; - primordials[name] = original; - copyPropsRenamedBound(original, primordials, name); - copyPrototype(original.prototype, primordials, `${name}Prototype`); -}); - -// Create copies of abstract intrinsic objects that are not directly exposed -// on the global object. -// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object -[ - { name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) }, - { name: 'ArrayIterator', original: { - prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()), - } }, - { name: 'StringIterator', original: { - prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()), - } }, -].forEach(({ name, original }) => { - primordials[name] = original; - // The static %TypedArray% methods require a valid `this`, but can't be bound, - // as they need a subclass constructor as the receiver: - copyPrototype(original, primordials, name); - copyPrototype(original.prototype, primordials, `${name}Prototype`); -}); - -/* eslint-enable node-core/prefer-primordials */ - -const { - ArrayPrototypeForEach, - FunctionPrototypeCall, - Map, - ObjectFreeze, - ObjectSetPrototypeOf, - Set, - SymbolIterator, - WeakMap, - WeakSet, -} = primordials; - -// Because these functions are used by `makeSafe`, which is exposed -// on the `primordials` object, it's important to use const references -// to the primordials that they use: -const createSafeIterator = (factory, next) => { - class SafeIterator { - constructor(iterable) { - this._iterator = factory(iterable); - } - next() { - return next(this._iterator); - } - [SymbolIterator]() { - return this; - } - } - ObjectSetPrototypeOf(SafeIterator.prototype, null); - ObjectFreeze(SafeIterator.prototype); - ObjectFreeze(SafeIterator); - return SafeIterator; -}; - -primordials.SafeArrayIterator = createSafeIterator( - primordials.ArrayPrototypeSymbolIterator, - primordials.ArrayIteratorPrototypeNext -); -primordials.SafeStringIterator = createSafeIterator( - primordials.StringPrototypeSymbolIterator, - primordials.StringIteratorPrototypeNext -); - -const copyProps = (src, dest) => { - ArrayPrototypeForEach(ReflectOwnKeys(src), (key) => { - if (!ReflectGetOwnPropertyDescriptor(dest, key)) { - ReflectDefineProperty( - dest, - key, - ReflectGetOwnPropertyDescriptor(src, key)); - } - }); -}; - -const makeSafe = (unsafe, safe) => { - if (SymbolIterator in unsafe.prototype) { - const dummy = new unsafe(); - let next; // We can reuse the same `next` method. - - ArrayPrototypeForEach(ReflectOwnKeys(unsafe.prototype), (key) => { - if (!ReflectGetOwnPropertyDescriptor(safe.prototype, key)) { - const desc = ReflectGetOwnPropertyDescriptor(unsafe.prototype, key); - if ( - typeof desc.value === 'function' && - desc.value.length === 0 && - SymbolIterator in (FunctionPrototypeCall(desc.value, dummy) ?? {}) - ) { - const createIterator = uncurryThis(desc.value); - next = next ?? uncurryThis(createIterator(dummy).next); - const SafeIterator = createSafeIterator(createIterator, next); - desc.value = function() { - return new SafeIterator(this); - }; - } - ReflectDefineProperty(safe.prototype, key, desc); - } - }); - } else { - copyProps(unsafe.prototype, safe.prototype); - } - copyProps(unsafe, safe); - - ObjectSetPrototypeOf(safe.prototype, null); - ObjectFreeze(safe.prototype); - ObjectFreeze(safe); - return safe; -}; -primordials.makeSafe = makeSafe; - -// Subclass the constructors because we need to use their prototype -// methods later. -// Defining the `constructor` is necessary here to avoid the default -// constructor which uses the user-mutable `%ArrayIteratorPrototype%.next`. -primordials.SafeMap = makeSafe( - Map, - class SafeMap extends Map { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); -primordials.SafeWeakMap = makeSafe( - WeakMap, - class SafeWeakMap extends WeakMap { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); -primordials.SafeSet = makeSafe( - Set, - class SafeSet extends Set { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); -primordials.SafeWeakSet = makeSafe( - WeakSet, - class SafeWeakSet extends WeakSet { - constructor(i) { super(i); } // eslint-disable-line no-useless-constructor - } -); - -ObjectSetPrototypeOf(primordials, null); -ObjectFreeze(primordials); - -module.exports = primordials; diff --git a/node_modules/@pkgjs/parseargs/internal/util.js b/node_modules/@pkgjs/parseargs/internal/util.js deleted file mode 100644 index b9b8fe5b8d..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/util.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -// This is a placeholder for util.js in node.js land. - -const { - ObjectCreate, - ObjectFreeze, -} = require('./primordials'); - -const kEmptyObject = ObjectFreeze(ObjectCreate(null)); - -module.exports = { - kEmptyObject, -}; diff --git a/node_modules/@pkgjs/parseargs/internal/validators.js b/node_modules/@pkgjs/parseargs/internal/validators.js deleted file mode 100644 index b5ac4fb501..0000000000 --- a/node_modules/@pkgjs/parseargs/internal/validators.js +++ /dev/null @@ -1,89 +0,0 @@ -'use strict'; - -// This file is a proxy of the original file located at: -// https://github.com/nodejs/node/blob/main/lib/internal/validators.js -// Every addition or modification to this file must be evaluated -// during the PR review. - -const { - ArrayIsArray, - ArrayPrototypeIncludes, - ArrayPrototypeJoin, -} = require('./primordials'); - -const { - codes: { - ERR_INVALID_ARG_TYPE - } -} = require('./errors'); - -function validateString(value, name) { - if (typeof value !== 'string') { - throw new ERR_INVALID_ARG_TYPE(name, 'String', value); - } -} - -function validateUnion(value, name, union) { - if (!ArrayPrototypeIncludes(union, value)) { - throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value); - } -} - -function validateBoolean(value, name) { - if (typeof value !== 'boolean') { - throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value); - } -} - -function validateArray(value, name) { - if (!ArrayIsArray(value)) { - throw new ERR_INVALID_ARG_TYPE(name, 'Array', value); - } -} - -function validateStringArray(value, name) { - validateArray(value, name); - for (let i = 0; i < value.length; i++) { - validateString(value[i], `${name}[${i}]`); - } -} - -function validateBooleanArray(value, name) { - validateArray(value, name); - for (let i = 0; i < value.length; i++) { - validateBoolean(value[i], `${name}[${i}]`); - } -} - -/** - * @param {unknown} value - * @param {string} name - * @param {{ - * allowArray?: boolean, - * allowFunction?: boolean, - * nullable?: boolean - * }} [options] - */ -function validateObject(value, name, options) { - const useDefaultOptions = options == null; - const allowArray = useDefaultOptions ? false : options.allowArray; - const allowFunction = useDefaultOptions ? false : options.allowFunction; - const nullable = useDefaultOptions ? false : options.nullable; - if ((!nullable && value === null) || - (!allowArray && ArrayIsArray(value)) || - (typeof value !== 'object' && ( - !allowFunction || typeof value !== 'function' - ))) { - throw new ERR_INVALID_ARG_TYPE(name, 'Object', value); - } -} - -module.exports = { - validateArray, - validateObject, - validateString, - validateStringArray, - validateUnion, - validateBoolean, - validateBooleanArray, -}; diff --git a/node_modules/@pkgjs/parseargs/package.json b/node_modules/@pkgjs/parseargs/package.json deleted file mode 100644 index 0bcc05c0d4..0000000000 --- a/node_modules/@pkgjs/parseargs/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@pkgjs/parseargs", - "version": "0.11.0", - "description": "Polyfill of future proposal for `util.parseArgs()`", - "engines": { - "node": ">=14" - }, - "main": "index.js", - "exports": { - ".": "./index.js", - "./package.json": "./package.json" - }, - "scripts": { - "coverage": "c8 --check-coverage tape 'test/*.js'", - "test": "c8 tape 'test/*.js'", - "posttest": "eslint .", - "fix": "npm run posttest -- --fix" - }, - "repository": { - "type": "git", - "url": "git@github.com:pkgjs/parseargs.git" - }, - "keywords": [], - "author": "", - "license": "MIT", - "bugs": { - "url": "https://github.com/pkgjs/parseargs/issues" - }, - "homepage": "https://github.com/pkgjs/parseargs#readme", - "devDependencies": { - "c8": "^7.10.0", - "eslint": "^8.2.0", - "eslint-plugin-node-core": "iansu/eslint-plugin-node-core", - "tape": "^5.2.2" - } -} diff --git a/node_modules/@pkgjs/parseargs/utils.js b/node_modules/@pkgjs/parseargs/utils.js deleted file mode 100644 index d7f420a233..0000000000 --- a/node_modules/@pkgjs/parseargs/utils.js +++ /dev/null @@ -1,198 +0,0 @@ -'use strict'; - -const { - ArrayPrototypeFind, - ObjectEntries, - ObjectPrototypeHasOwnProperty: ObjectHasOwn, - StringPrototypeCharAt, - StringPrototypeIncludes, - StringPrototypeStartsWith, -} = require('./internal/primordials'); - -const { - validateObject, -} = require('./internal/validators'); - -// These are internal utilities to make the parsing logic easier to read, and -// add lots of detail for the curious. They are in a separate file to allow -// unit testing, although that is not essential (this could be rolled into -// main file and just tested implicitly via API). -// -// These routines are for internal use, not for export to client. - -/** - * Return the named property, but only if it is an own property. - */ -function objectGetOwn(obj, prop) { - if (ObjectHasOwn(obj, prop)) - return obj[prop]; -} - -/** - * Return the named options property, but only if it is an own property. - */ -function optionsGetOwn(options, longOption, prop) { - if (ObjectHasOwn(options, longOption)) - return objectGetOwn(options[longOption], prop); -} - -/** - * Determines if the argument may be used as an option value. - * @example - * isOptionValue('V') // returns true - * isOptionValue('-v') // returns true (greedy) - * isOptionValue('--foo') // returns true (greedy) - * isOptionValue(undefined) // returns false - */ -function isOptionValue(value) { - if (value == null) return false; - - // Open Group Utility Conventions are that an option-argument - // is the argument after the option, and may start with a dash. - return true; // greedy! -} - -/** - * Detect whether there is possible confusion and user may have omitted - * the option argument, like `--port --verbose` when `port` of type:string. - * In strict mode we throw errors if value is option-like. - */ -function isOptionLikeValue(value) { - if (value == null) return false; - - return value.length > 1 && StringPrototypeCharAt(value, 0) === '-'; -} - -/** - * Determines if `arg` is just a short option. - * @example '-f' - */ -function isLoneShortOption(arg) { - return arg.length === 2 && - StringPrototypeCharAt(arg, 0) === '-' && - StringPrototypeCharAt(arg, 1) !== '-'; -} - -/** - * Determines if `arg` is a lone long option. - * @example - * isLoneLongOption('a') // returns false - * isLoneLongOption('-a') // returns false - * isLoneLongOption('--foo') // returns true - * isLoneLongOption('--foo=bar') // returns false - */ -function isLoneLongOption(arg) { - return arg.length > 2 && - StringPrototypeStartsWith(arg, '--') && - !StringPrototypeIncludes(arg, '=', 3); -} - -/** - * Determines if `arg` is a long option and value in the same argument. - * @example - * isLongOptionAndValue('--foo') // returns false - * isLongOptionAndValue('--foo=bar') // returns true - */ -function isLongOptionAndValue(arg) { - return arg.length > 2 && - StringPrototypeStartsWith(arg, '--') && - StringPrototypeIncludes(arg, '=', 3); -} - -/** - * Determines if `arg` is a short option group. - * - * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). - * One or more options without option-arguments, followed by at most one - * option that takes an option-argument, should be accepted when grouped - * behind one '-' delimiter. - * @example - * isShortOptionGroup('-a', {}) // returns false - * isShortOptionGroup('-ab', {}) // returns true - * // -fb is an option and a value, not a short option group - * isShortOptionGroup('-fb', { - * options: { f: { type: 'string' } } - * }) // returns false - * isShortOptionGroup('-bf', { - * options: { f: { type: 'string' } } - * }) // returns true - * // -bfb is an edge case, return true and caller sorts it out - * isShortOptionGroup('-bfb', { - * options: { f: { type: 'string' } } - * }) // returns true - */ -function isShortOptionGroup(arg, options) { - if (arg.length <= 2) return false; - if (StringPrototypeCharAt(arg, 0) !== '-') return false; - if (StringPrototypeCharAt(arg, 1) === '-') return false; - - const firstShort = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(firstShort, options); - return optionsGetOwn(options, longOption, 'type') !== 'string'; -} - -/** - * Determine if arg is a short string option followed by its value. - * @example - * isShortOptionAndValue('-a', {}); // returns false - * isShortOptionAndValue('-ab', {}); // returns false - * isShortOptionAndValue('-fFILE', { - * options: { foo: { short: 'f', type: 'string' }} - * }) // returns true - */ -function isShortOptionAndValue(arg, options) { - validateObject(options, 'options'); - - if (arg.length <= 2) return false; - if (StringPrototypeCharAt(arg, 0) !== '-') return false; - if (StringPrototypeCharAt(arg, 1) === '-') return false; - - const shortOption = StringPrototypeCharAt(arg, 1); - const longOption = findLongOptionForShort(shortOption, options); - return optionsGetOwn(options, longOption, 'type') === 'string'; -} - -/** - * Find the long option associated with a short option. Looks for a configured - * `short` and returns the short option itself if a long option is not found. - * @example - * findLongOptionForShort('a', {}) // returns 'a' - * findLongOptionForShort('b', { - * options: { bar: { short: 'b' } } - * }) // returns 'bar' - */ -function findLongOptionForShort(shortOption, options) { - validateObject(options, 'options'); - const longOptionEntry = ArrayPrototypeFind( - ObjectEntries(options), - ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption - ); - return longOptionEntry?.[0] ?? shortOption; -} - -/** - * Check if the given option includes a default value - * and that option has not been set by the input args. - * - * @param {string} longOption - long option name e.g. 'foo' - * @param {object} optionConfig - the option configuration properties - * @param {object} values - option values returned in `values` by parseArgs - */ -function useDefaultValueOption(longOption, optionConfig, values) { - return objectGetOwn(optionConfig, 'default') !== undefined && - values[longOption] === undefined; -} - -module.exports = { - findLongOptionForShort, - isLoneLongOption, - isLoneShortOption, - isLongOptionAndValue, - isOptionValue, - isOptionLikeValue, - isShortOptionAndValue, - isShortOptionGroup, - useDefaultValueOption, - objectGetOwn, - optionsGetOwn, -}; diff --git a/node_modules/@types/debug/LICENSE b/node_modules/@types/debug/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/debug/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/debug/README.md b/node_modules/@types/debug/README.md deleted file mode 100644 index e9563de5c1..0000000000 --- a/node_modules/@types/debug/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Installation -> `npm install --save @types/debug` - -# Summary -This package contains type definitions for debug (https://github.com/debug-js/debug). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug. -## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug/index.d.ts) -````ts -declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; - -export = debug; -export as namespace debug; - -declare namespace debug { - interface Debug { - (namespace: string): Debugger; - coerce: (val: any) => any; - disable: () => string; - enable: (namespaces: string) => void; - enabled: (namespaces: string) => boolean; - formatArgs: (this: Debugger, args: any[]) => void; - log: (...args: any[]) => any; - selectColor: (namespace: string) => string | number; - humanize: typeof import("ms"); - - names: RegExp[]; - skips: RegExp[]; - - formatters: Formatters; - - inspectOpts?: { - hideDate?: boolean | number | null; - colors?: boolean | number | null; - depth?: boolean | number | null; - showHidden?: boolean | number | null; - }; - } - - type IDebug = Debug; - - interface Formatters { - [formatter: string]: (v: any) => string; - } - - type IDebugger = Debugger; - - interface Debugger { - (formatter: any, ...args: any[]): void; - - color: string; - diff: number; - enabled: boolean; - log: (...args: any[]) => any; - namespace: string; - destroy: () => boolean; - extend: (namespace: string, delimiter?: string) => Debugger; - } -} - -```` - -### Additional Details - * Last updated: Thu, 09 Nov 2023 03:06:57 GMT - * Dependencies: [@types/ms](https://npmjs.com/package/@types/ms) - -# Credits -These definitions were written by [Seon-Wook Park](https://github.com/swook), [Gal Talmor](https://github.com/galtalmor), [John McLaughlin](https://github.com/zamb3zi), [Brasten Sager](https://github.com/brasten), [Nicolas Penin](https://github.com/npenin), [Kristian Brünn](https://github.com/kristianmitk), and [Caleb Gregory](https://github.com/calebgregory). diff --git a/node_modules/@types/debug/index.d.ts b/node_modules/@types/debug/index.d.ts deleted file mode 100644 index 3778eb8dbc..0000000000 --- a/node_modules/@types/debug/index.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -declare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug }; - -export = debug; -export as namespace debug; - -declare namespace debug { - interface Debug { - (namespace: string): Debugger; - coerce: (val: any) => any; - disable: () => string; - enable: (namespaces: string) => void; - enabled: (namespaces: string) => boolean; - formatArgs: (this: Debugger, args: any[]) => void; - log: (...args: any[]) => any; - selectColor: (namespace: string) => string | number; - humanize: typeof import("ms"); - - names: RegExp[]; - skips: RegExp[]; - - formatters: Formatters; - - inspectOpts?: { - hideDate?: boolean | number | null; - colors?: boolean | number | null; - depth?: boolean | number | null; - showHidden?: boolean | number | null; - }; - } - - type IDebug = Debug; - - interface Formatters { - [formatter: string]: (v: any) => string; - } - - type IDebugger = Debugger; - - interface Debugger { - (formatter: any, ...args: any[]): void; - - color: string; - diff: number; - enabled: boolean; - log: (...args: any[]) => any; - namespace: string; - destroy: () => boolean; - extend: (namespace: string, delimiter?: string) => Debugger; - } -} diff --git a/node_modules/@types/debug/package.json b/node_modules/@types/debug/package.json deleted file mode 100644 index 9127e48fe6..0000000000 --- a/node_modules/@types/debug/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@types/debug", - "version": "4.1.12", - "description": "TypeScript definitions for debug", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug", - "license": "MIT", - "contributors": [ - { - "name": "Seon-Wook Park", - "githubUsername": "swook", - "url": "https://github.com/swook" - }, - { - "name": "Gal Talmor", - "githubUsername": "galtalmor", - "url": "https://github.com/galtalmor" - }, - { - "name": "John McLaughlin", - "githubUsername": "zamb3zi", - "url": "https://github.com/zamb3zi" - }, - { - "name": "Brasten Sager", - "githubUsername": "brasten", - "url": "https://github.com/brasten" - }, - { - "name": "Nicolas Penin", - "githubUsername": "npenin", - "url": "https://github.com/npenin" - }, - { - "name": "Kristian Brünn", - "githubUsername": "kristianmitk", - "url": "https://github.com/kristianmitk" - }, - { - "name": "Caleb Gregory", - "githubUsername": "calebgregory", - "url": "https://github.com/calebgregory" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/debug" - }, - "scripts": {}, - "dependencies": { - "@types/ms": "*" - }, - "typesPublisherContentHash": "1053110a8e5e302f35fb57f45389304fa5a4f53bb8982b76b8065bcfd7083731", - "typeScriptVersion": "4.5" -} \ No newline at end of file diff --git a/node_modules/@types/katex/LICENSE b/node_modules/@types/katex/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/katex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/katex/README.md b/node_modules/@types/katex/README.md deleted file mode 100644 index bdaeab425b..0000000000 --- a/node_modules/@types/katex/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Installation -> `npm install --save @types/katex` - -# Summary -This package contains type definitions for katex (http://khan.github.io/KaTeX/). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex. - -### Additional Details - * Last updated: Mon, 20 Nov 2023 23:36:24 GMT - * Dependencies: none - -# Credits -These definitions were written by [Michael Randolph](https://github.com/mrand01), [Kevin Nguyen](https://github.com/knguyen0125), [bLue](https://github.com/dreamerblue), [Sebastian Weigand](https://github.com/s-weigand), [sapphi-red](https://github.com/sapphi-red), and [Stefaans](https://github.com/Stefaans). diff --git a/node_modules/@types/katex/contrib/auto-render.d.ts b/node_modules/@types/katex/contrib/auto-render.d.ts deleted file mode 100644 index 86db5d3b98..0000000000 --- a/node_modules/@types/katex/contrib/auto-render.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { KatexOptions } from "../index.js"; - -declare namespace renderMathInElement { - interface RenderMathInElementSpecificOptionsDelimiters { - /** - * A string which starts the math expression (i.e. the left delimiter) - */ - left: string; - /** - * A string which ends the math expression (i.e. the right delimiter) - */ - right: string; - /** - * A boolean of whether the math in the expression should be rendered in display mode or not - */ - display: boolean; - } - - interface RenderMathInElementSpecificOptions { - /** - * A list of delimiters to look for math - * - * @default [ - * {left: "$$", right: "$$", display: true}, - * {left: "\\(", right: "\\)", display: false}, - * {left: "\\[", right: "\\]", display: true} - * ] - */ - delimiters?: readonly RenderMathInElementSpecificOptionsDelimiters[] | undefined; - /** - * A list of DOM node types to ignore when recursing through - * - * @default ["script", "noscript", "style", "textarea", "pre", "code"] - */ - ignoredTags?: ReadonlyArray | undefined; - /** - * A list of DOM node class names to ignore when recursing through - * - * @default [] - */ - ignoredClasses?: string[] | undefined; - - /** - * A callback method returning a message and an error stack in case of an critical error during rendering - * @param msg Message generated by KaTeX - * @param err Caught error - * - * @default console.error - */ - errorCallback?(msg: string, err: Error): void; - } - - /** - * renderMathInElement options contain KaTeX render options and renderMathInElement specific options - */ - type RenderMathInElementOptions = KatexOptions & RenderMathInElementSpecificOptions; -} - -/** - * Auto-render TeX expressions in HTML element - * @param elem HTML element to auto-render - * @param options Render options - */ -declare function renderMathInElement(elem: HTMLElement, options?: renderMathInElement.RenderMathInElementOptions): void; - -export = renderMathInElement; -export as namespace renderMathInElement; diff --git a/node_modules/@types/katex/index.d.ts b/node_modules/@types/katex/index.d.ts deleted file mode 100644 index 59ec21f757..0000000000 --- a/node_modules/@types/katex/index.d.ts +++ /dev/null @@ -1,151 +0,0 @@ -export interface TrustContext { - command: string; - url: string; - protocol: string; -} - -/** Documentation: https://katex.org/docs/options.html */ -export interface KatexOptions { - /** - * If `true`, math will be rendered in display mode - * (math in display style and center math on page) - * - * If `false`, math will be rendered in inline mode - * @default false - */ - displayMode?: boolean | undefined; - /** - * Determines the markup language of the output. The valid choices are: - * - `html`: Outputs KaTeX in HTML only. - * - `mathml`: Outputs KaTeX in MathML only. - * - `htmlAndMathml`: Outputs HTML for visual rendering - * and includes MathML for accessibility. - * - * @default 'htmlAndMathml' - */ - output?: "html" | "mathml" | "htmlAndMathml" | undefined; - /** - * If `true`, display math has \tags rendered on the left - * instead of the right, like \usepackage[leqno]{amsmath} in LaTeX. - * - * @default false - */ - leqno?: boolean | undefined; - /** - * If `true`, display math renders flush left with a 2em left margin, - * like \documentclass[fleqn] in LaTeX with the amsmath package. - * - * @default false - */ - fleqn?: boolean | undefined; - /** - * If `true`, KaTeX will throw a `ParseError` when - * it encounters an unsupported command or invalid LaTex - * - * If `false`, KaTeX will render unsupported commands as - * text, and render invalid LaTeX as its source code with - * hover text giving the error, in color given by errorColor - * @default true - */ - throwOnError?: boolean | undefined; - /** - * A Color string given in format `#XXX` or `#XXXXXX` - */ - errorColor?: string | undefined; - /** - * A collection of custom macros. - * - * See `src/macros.js` for its usage - */ - macros?: any; - /** - * Specifies a minimum thickness, in ems, for fraction lines, - * \sqrt top lines, {array} vertical lines, \hline, \hdashline, - * \underline, \overline, and the borders of \fbox, \boxed, and - * \fcolorbox. - */ - minRuleThickness?: number | undefined; - /** - * If `true`, `\color` will work like LaTeX's `\textcolor` - * and takes 2 arguments - * - * If `false`, `\color` will work like LaTeX's `\color` - * and takes 1 argument - * - * In both cases, `\textcolor` works as in LaTeX - * - * @default false - */ - colorIsTextColor?: boolean | undefined; - /** - * All user-specified sizes will be caped to `maxSize` ems - * - * If set to Infinity, users can make elements and space - * arbitrarily large - * - * @default Infinity - */ - maxSize?: number | undefined; - /** - * Limit the number of macro expansions to specified number - * - * If set to `Infinity`, marco expander will try to fully expand - * as in LaTex - * - * @default 1000 - */ - maxExpand?: number | undefined; - /** - * If `false` or `"ignore"`, allow features that make - * writing in LaTex convenient but not supported by LaTex - * - * If `true` or `"error"`, throw an error for such transgressions - * - * If `"warn"`, warn about behavior via `console.warn` - * - * @default "warn" - */ - strict?: boolean | string | Function | undefined; - /** - * If `false` (do not trust input), prevent any commands that could enable adverse behavior, rendering them instead in errorColor. - * - * If `true` (trust input), allow all such commands. - * - * @default false - */ - trust?: boolean | ((context: TrustContext) => boolean) | undefined; - /** - * Place KaTeX code in the global group. - * - * @default false - */ - globalGroup?: boolean | undefined; -} - -/** - * KaTeX error, usually during parsing. - */ -export class ParseError implements Error { - constructor(message: string, lexer: any, position: number); - - name: string; - message: string; - position: number; -} - -/** - * Renders a TeX expression into the specified DOM element - * @param tex A TeX expression - * @param element The DOM element to render into - * @param options KaTeX options - */ -export function render(tex: string, element: HTMLElement, options?: KatexOptions): void; - -/** - * Renders a TeX expression into an HTML string - * @param tex A TeX expression - * @param options KaTeX options - */ -export function renderToString(tex: string, options?: KatexOptions): string; - -export as namespace katex; diff --git a/node_modules/@types/katex/package.json b/node_modules/@types/katex/package.json deleted file mode 100644 index 0128c544e1..0000000000 --- a/node_modules/@types/katex/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@types/katex", - "version": "0.16.7", - "description": "TypeScript definitions for katex", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex", - "license": "MIT", - "contributors": [ - { - "name": "Michael Randolph", - "githubUsername": "mrand01", - "url": "https://github.com/mrand01" - }, - { - "name": "Kevin Nguyen", - "githubUsername": "knguyen0125", - "url": "https://github.com/knguyen0125" - }, - { - "name": "bLue", - "githubUsername": "dreamerblue", - "url": "https://github.com/dreamerblue" - }, - { - "name": "Sebastian Weigand", - "githubUsername": "s-weigand", - "url": "https://github.com/s-weigand" - }, - { - "name": "sapphi-red", - "githubUsername": "sapphi-red", - "url": "https://github.com/sapphi-red" - }, - { - "name": "Stefaans", - "githubUsername": "Stefaans", - "url": "https://github.com/Stefaans" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/katex" - }, - "scripts": {}, - "dependencies": {}, - "typesPublisherContentHash": "5e09618b84fb6154b3cd4956ffc16513292057ac5cbfc7e16676474d3cecf13a", - "typeScriptVersion": "4.5" -} \ No newline at end of file diff --git a/node_modules/@types/ms/LICENSE b/node_modules/@types/ms/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/ms/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/ms/README.md b/node_modules/@types/ms/README.md deleted file mode 100644 index 1152869e50..0000000000 --- a/node_modules/@types/ms/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# Installation -> `npm install --save @types/ms` - -# Summary -This package contains type definitions for ms (https://github.com/vercel/ms). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms. -## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms/index.d.ts) -````ts -/** - * Short/Long format for `value`. - * - * @param {Number} value - * @param {{long: boolean}} options - * @return {String} - */ -declare function ms(value: number, options?: { long: boolean }): string; - -/** - * Parse the given `value` and return milliseconds. - * - * @param {ms.StringValue} value - * @return {Number} - */ -declare function ms(value: ms.StringValue): number; - -declare namespace ms { - // Unit, UnitAnyCase, and StringValue are backported from ms@3 - // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts - - type Unit = - | "Years" - | "Year" - | "Yrs" - | "Yr" - | "Y" - | "Weeks" - | "Week" - | "W" - | "Days" - | "Day" - | "D" - | "Hours" - | "Hour" - | "Hrs" - | "Hr" - | "H" - | "Minutes" - | "Minute" - | "Mins" - | "Min" - | "M" - | "Seconds" - | "Second" - | "Secs" - | "Sec" - | "s" - | "Milliseconds" - | "Millisecond" - | "Msecs" - | "Msec" - | "Ms"; - - type UnitAnyCase = Unit | Uppercase | Lowercase; - - type StringValue = - | `${number}` - | `${number}${UnitAnyCase}` - | `${number} ${UnitAnyCase}`; -} - -export = ms; - -```` - -### Additional Details - * Last updated: Thu, 16 Jan 2025 21:02:45 GMT - * Dependencies: none - -# Credits -These definitions were written by [Zhiyuan Wang](https://github.com/danny8002). diff --git a/node_modules/@types/ms/index.d.ts b/node_modules/@types/ms/index.d.ts deleted file mode 100644 index b1b1f5159a..0000000000 --- a/node_modules/@types/ms/index.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Short/Long format for `value`. - * - * @param {Number} value - * @param {{long: boolean}} options - * @return {String} - */ -declare function ms(value: number, options?: { long: boolean }): string; - -/** - * Parse the given `value` and return milliseconds. - * - * @param {ms.StringValue} value - * @return {Number} - */ -declare function ms(value: ms.StringValue): number; - -declare namespace ms { - // Unit, UnitAnyCase, and StringValue are backported from ms@3 - // https://github.com/vercel/ms/blob/8b5923d1d86c84a9f6aba8022d416dcf2361aa8d/src/index.ts - - type Unit = - | "Years" - | "Year" - | "Yrs" - | "Yr" - | "Y" - | "Weeks" - | "Week" - | "W" - | "Days" - | "Day" - | "D" - | "Hours" - | "Hour" - | "Hrs" - | "Hr" - | "H" - | "Minutes" - | "Minute" - | "Mins" - | "Min" - | "M" - | "Seconds" - | "Second" - | "Secs" - | "Sec" - | "s" - | "Milliseconds" - | "Millisecond" - | "Msecs" - | "Msec" - | "Ms"; - - type UnitAnyCase = Unit | Uppercase | Lowercase; - - type StringValue = - | `${number}` - | `${number}${UnitAnyCase}` - | `${number} ${UnitAnyCase}`; -} - -export = ms; diff --git a/node_modules/@types/ms/package.json b/node_modules/@types/ms/package.json deleted file mode 100644 index 0f547d02ca..0000000000 --- a/node_modules/@types/ms/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "@types/ms", - "version": "2.1.0", - "description": "TypeScript definitions for ms", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms", - "license": "MIT", - "contributors": [ - { - "name": "Zhiyuan Wang", - "githubUsername": "danny8002", - "url": "https://github.com/danny8002" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/ms" - }, - "scripts": {}, - "dependencies": {}, - "peerDependencies": {}, - "typesPublisherContentHash": "2c8651ce1714fdc6bcbc0f262c93a790f1d127fb1c2dc8edbb583decef56fd39", - "typeScriptVersion": "5.0" -} \ No newline at end of file diff --git a/node_modules/@types/unist/LICENSE b/node_modules/@types/unist/LICENSE deleted file mode 100644 index 9e841e7a26..0000000000 --- a/node_modules/@types/unist/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/node_modules/@types/unist/README.md b/node_modules/@types/unist/README.md deleted file mode 100644 index b038f89e90..0000000000 --- a/node_modules/@types/unist/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Installation -> `npm install --save @types/unist` - -# Summary -This package contains type definitions for unist (https://github.com/syntax-tree/unist). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2. -## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2/index.d.ts) -````ts -/** - * Syntactic units in unist syntax trees are called nodes. - * - * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. - */ -export interface Node { - /** - * The variant of a node. - */ - type: string; - - /** - * Information from the ecosystem. - */ - data?: TData | undefined; - - /** - * Location of a node in a source document. - * Must not be present if a node is generated. - */ - position?: Position | undefined; -} - -/** - * Information associated by the ecosystem with the node. - * Space is guaranteed to never be specified by unist or specifications - * implementing unist. - */ -export interface Data { - [key: string]: unknown; -} - -/** - * Location of a node in a source file. - */ -export interface Position { - /** - * Place of the first character of the parsed source region. - */ - start: Point; - - /** - * Place of the first character after the parsed source region. - */ - end: Point; - - /** - * Start column at each index (plus start line) in the source region, - * for elements that span multiple lines. - */ - indent?: number[] | undefined; -} - -/** - * One place in a source file. - */ -export interface Point { - /** - * Line in a source file (1-indexed integer). - */ - line: number; - - /** - * Column in a source file (1-indexed integer). - */ - column: number; - /** - * Character in a source file (0-indexed integer). - */ - offset?: number | undefined; -} - -/** - * Util for extracting type of {@link Node.data} - * - * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. - * - * @example `NodeData>` -> `{ key: string }` - */ -export type NodeData> = TNode extends Node ? TData : never; - -/** - * Nodes containing other nodes. - * - * @typeParam ChildNode Node item of {@link Parent.children} - */ -export interface Parent = Node, TData extends object = NodeData> - extends Node -{ - /** - * List representing the children of a node. - */ - children: ChildNode[]; -} - -/** - * Nodes containing a value. - * - * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node - */ -export interface Literal extends Node { - value: Value; -} - -```` - -### Additional Details - * Last updated: Thu, 15 Aug 2024 02:18:53 GMT - * Dependencies: none - -# Credits -These definitions were written by [bizen241](https://github.com/bizen241), [Jun Lu](https://github.com/lujun2), [Hernan Rajchert](https://github.com/hrajchert), [Titus Wormer](https://github.com/wooorm), [Junyoung Choi](https://github.com/rokt33r), [Ben Moon](https://github.com/GuiltyDolphin), and [JounQin](https://github.com/JounQin). diff --git a/node_modules/@types/unist/index.d.ts b/node_modules/@types/unist/index.d.ts deleted file mode 100644 index b019d389d1..0000000000 --- a/node_modules/@types/unist/index.d.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Syntactic units in unist syntax trees are called nodes. - * - * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. - */ -export interface Node { - /** - * The variant of a node. - */ - type: string; - - /** - * Information from the ecosystem. - */ - data?: TData | undefined; - - /** - * Location of a node in a source document. - * Must not be present if a node is generated. - */ - position?: Position | undefined; -} - -/** - * Information associated by the ecosystem with the node. - * Space is guaranteed to never be specified by unist or specifications - * implementing unist. - */ -export interface Data { - [key: string]: unknown; -} - -/** - * Location of a node in a source file. - */ -export interface Position { - /** - * Place of the first character of the parsed source region. - */ - start: Point; - - /** - * Place of the first character after the parsed source region. - */ - end: Point; - - /** - * Start column at each index (plus start line) in the source region, - * for elements that span multiple lines. - */ - indent?: number[] | undefined; -} - -/** - * One place in a source file. - */ -export interface Point { - /** - * Line in a source file (1-indexed integer). - */ - line: number; - - /** - * Column in a source file (1-indexed integer). - */ - column: number; - /** - * Character in a source file (0-indexed integer). - */ - offset?: number | undefined; -} - -/** - * Util for extracting type of {@link Node.data} - * - * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. - * - * @example `NodeData>` -> `{ key: string }` - */ -export type NodeData> = TNode extends Node ? TData : never; - -/** - * Nodes containing other nodes. - * - * @typeParam ChildNode Node item of {@link Parent.children} - */ -export interface Parent = Node, TData extends object = NodeData> - extends Node -{ - /** - * List representing the children of a node. - */ - children: ChildNode[]; -} - -/** - * Nodes containing a value. - * - * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node - */ -export interface Literal extends Node { - value: Value; -} diff --git a/node_modules/@types/unist/package.json b/node_modules/@types/unist/package.json deleted file mode 100644 index 01cb5b0d4e..0000000000 --- a/node_modules/@types/unist/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "@types/unist", - "version": "2.0.11", - "description": "TypeScript definitions for unist", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist", - "license": "MIT", - "contributors": [ - { - "name": "bizen241", - "githubUsername": "bizen241", - "url": "https://github.com/bizen241" - }, - { - "name": "Jun Lu", - "githubUsername": "lujun2", - "url": "https://github.com/lujun2" - }, - { - "name": "Hernan Rajchert", - "githubUsername": "hrajchert", - "url": "https://github.com/hrajchert" - }, - { - "name": "Titus Wormer", - "githubUsername": "wooorm", - "url": "https://github.com/wooorm" - }, - { - "name": "Junyoung Choi", - "githubUsername": "rokt33r", - "url": "https://github.com/rokt33r" - }, - { - "name": "Ben Moon", - "githubUsername": "GuiltyDolphin", - "url": "https://github.com/GuiltyDolphin" - }, - { - "name": "JounQin", - "githubUsername": "JounQin", - "url": "https://github.com/JounQin" - } - ], - "main": "", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/unist" - }, - "scripts": {}, - "dependencies": {}, - "typesPublisherContentHash": "6e36525a6db49ae5517fe0751796ca8f6c65099098415046d4f1ad6c2ef1a33c", - "typeScriptVersion": "4.8" -} \ No newline at end of file diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 7d562e9ca9..0000000000 --- a/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -export type Options = { - /** - Match only the first ANSI escape. - - @default false - */ - readonly onlyFirst: boolean; -}; - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex from 'ansi-regex'; - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -export default function ansiRegex(options?: Options): RegExp; diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js deleted file mode 100644 index ddfdba39a7..0000000000 --- a/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -export default function ansiRegex({onlyFirst = false} = {}) { - // Valid string terminator sequences are BEL, ESC\, and 0x9c - const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)'; - const pattern = [ - `[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))', - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -} diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json deleted file mode 100644 index 49f3f61021..0000000000 --- a/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "ansi-regex", - "version": "6.1.0", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "funding": "https://github.com/chalk/ansi-regex?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "types": "./index.d.ts", - "sideEffects": false, - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ansi-escapes": "^5.0.0", - "ava": "^3.15.0", - "tsd": "^0.21.0", - "xo": "^0.54.2" - } -} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md deleted file mode 100644 index 1e91ee10f5..0000000000 --- a/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - -## Install - -```sh -npm install ansi-regex -``` - -## Usage - -```js -import ansiRegex from 'ansi-regex'; - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`\ -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) diff --git a/node_modules/ansi-styles/index.d.ts b/node_modules/ansi-styles/index.d.ts deleted file mode 100644 index 58f133abe9..0000000000 --- a/node_modules/ansi-styles/index.d.ts +++ /dev/null @@ -1,236 +0,0 @@ -export interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention - /** - The ANSI terminal control sequence for starting this style. - */ - readonly open: string; - - /** - The ANSI terminal control sequence for ending this style. - */ - readonly close: string; -} - -export interface ColorBase { - /** - The ANSI terminal control sequence for ending this color. - */ - readonly close: string; - - ansi(code: number): string; - - ansi256(code: number): string; - - ansi16m(red: number, green: number, blue: number): string; -} - -export interface Modifier { - /** - Resets the current color chain. - */ - readonly reset: CSPair; - - /** - Make text bold. - */ - readonly bold: CSPair; - - /** - Emitting only a small amount of light. - */ - readonly dim: CSPair; - - /** - Make text italic. (Not widely supported) - */ - readonly italic: CSPair; - - /** - Make text underline. (Not widely supported) - */ - readonly underline: CSPair; - - /** - Make text overline. - - Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash. - */ - readonly overline: CSPair; - - /** - Inverse background and foreground colors. - */ - readonly inverse: CSPair; - - /** - Prints the text, but makes it invisible. - */ - readonly hidden: CSPair; - - /** - Puts a horizontal line through the center of the text. (Not widely supported) - */ - readonly strikethrough: CSPair; -} - -export interface ForegroundColor { - readonly black: CSPair; - readonly red: CSPair; - readonly green: CSPair; - readonly yellow: CSPair; - readonly blue: CSPair; - readonly cyan: CSPair; - readonly magenta: CSPair; - readonly white: CSPair; - - /** - Alias for `blackBright`. - */ - readonly gray: CSPair; - - /** - Alias for `blackBright`. - */ - readonly grey: CSPair; - - readonly blackBright: CSPair; - readonly redBright: CSPair; - readonly greenBright: CSPair; - readonly yellowBright: CSPair; - readonly blueBright: CSPair; - readonly cyanBright: CSPair; - readonly magentaBright: CSPair; - readonly whiteBright: CSPair; -} - -export interface BackgroundColor { - readonly bgBlack: CSPair; - readonly bgRed: CSPair; - readonly bgGreen: CSPair; - readonly bgYellow: CSPair; - readonly bgBlue: CSPair; - readonly bgCyan: CSPair; - readonly bgMagenta: CSPair; - readonly bgWhite: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGray: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGrey: CSPair; - - readonly bgBlackBright: CSPair; - readonly bgRedBright: CSPair; - readonly bgGreenBright: CSPair; - readonly bgYellowBright: CSPair; - readonly bgBlueBright: CSPair; - readonly bgCyanBright: CSPair; - readonly bgMagentaBright: CSPair; - readonly bgWhiteBright: CSPair; -} - -export interface ConvertColor { - /** - Convert from the RGB color space to the ANSI 256 color space. - - @param red - (`0...255`) - @param green - (`0...255`) - @param blue - (`0...255`) - */ - rgbToAnsi256(red: number, green: number, blue: number): number; - - /** - Convert from the RGB HEX color space to the RGB color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hexToRgb(hex: string): [red: number, green: number, blue: number]; - - /** - Convert from the RGB HEX color space to the ANSI 256 color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hexToAnsi256(hex: string): number; - - /** - Convert from the ANSI 256 color space to the ANSI 16 color space. - - @param code - A number representing the ANSI 256 color. - */ - ansi256ToAnsi(code: number): number; - - /** - Convert from the RGB color space to the ANSI 16 color space. - - @param red - (`0...255`) - @param green - (`0...255`) - @param blue - (`0...255`) - */ - rgbToAnsi(red: number, green: number, blue: number): number; - - /** - Convert from the RGB HEX color space to the ANSI 16 color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hexToAnsi(hex: string): number; -} - -/** -Basic modifier names. -*/ -export type ModifierName = keyof Modifier; - -/** -Basic foreground color names. - -[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) -*/ -export type ForegroundColorName = keyof ForegroundColor; - -/** -Basic background color names. - -[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) -*/ -export type BackgroundColorName = keyof BackgroundColor; - -/** -Basic color names. The combination of foreground and background color names. - -[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) -*/ -export type ColorName = ForegroundColorName | BackgroundColorName; - -/** -Basic modifier names. -*/ -export const modifierNames: readonly ModifierName[]; - -/** -Basic foreground color names. -*/ -export const foregroundColorNames: readonly ForegroundColorName[]; - -/** -Basic background color names. -*/ -export const backgroundColorNames: readonly BackgroundColorName[]; - -/* -Basic color names. The combination of foreground and background color names. -*/ -export const colorNames: readonly ColorName[]; - -declare const ansiStyles: { - readonly modifier: Modifier; - readonly color: ColorBase & ForegroundColor; - readonly bgColor: ColorBase & BackgroundColor; - readonly codes: ReadonlyMap; -} & ForegroundColor & BackgroundColor & Modifier & ConvertColor; - -export default ansiStyles; diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js deleted file mode 100644 index d7bede44b7..0000000000 --- a/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,223 +0,0 @@ -const ANSI_BACKGROUND_OFFSET = 10; - -const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`; - -const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`; - -const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`; - -const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - overline: [53, 55], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29], - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - - // Bright color - blackBright: [90, 39], - gray: [90, 39], // Alias of `blackBright` - grey: [90, 39], // Alias of `blackBright` - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39], - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgGray: [100, 49], // Alias of `bgBlackBright` - bgGrey: [100, 49], // Alias of `bgBlackBright` - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49], - }, -}; - -export const modifierNames = Object.keys(styles.modifier); -export const foregroundColorNames = Object.keys(styles.color); -export const backgroundColorNames = Object.keys(styles.bgColor); -export const colorNames = [...foregroundColorNames, ...backgroundColorNames]; - -function assembleStyles() { - const codes = new Map(); - - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m`, - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false, - }); - } - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false, - }); - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = wrapAnsi16(); - styles.color.ansi256 = wrapAnsi256(); - styles.color.ansi16m = wrapAnsi16m(); - styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET); - styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); - styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); - - // From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js - Object.defineProperties(styles, { - rgbToAnsi256: { - value: (red, green, blue) => { - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (red === green && green === blue) { - if (red < 8) { - return 16; - } - - if (red > 248) { - return 231; - } - - return Math.round(((red - 8) / 247) * 24) + 232; - } - - return 16 - + (36 * Math.round(red / 255 * 5)) - + (6 * Math.round(green / 255 * 5)) - + Math.round(blue / 255 * 5); - }, - enumerable: false, - }, - hexToRgb: { - value: hex => { - const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16)); - if (!matches) { - return [0, 0, 0]; - } - - let [colorString] = matches; - - if (colorString.length === 3) { - colorString = [...colorString].map(character => character + character).join(''); - } - - const integer = Number.parseInt(colorString, 16); - - return [ - /* eslint-disable no-bitwise */ - (integer >> 16) & 0xFF, - (integer >> 8) & 0xFF, - integer & 0xFF, - /* eslint-enable no-bitwise */ - ]; - }, - enumerable: false, - }, - hexToAnsi256: { - value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)), - enumerable: false, - }, - ansi256ToAnsi: { - value: code => { - if (code < 8) { - return 30 + code; - } - - if (code < 16) { - return 90 + (code - 8); - } - - let red; - let green; - let blue; - - if (code >= 232) { - red = (((code - 232) * 10) + 8) / 255; - green = red; - blue = red; - } else { - code -= 16; - - const remainder = code % 36; - - red = Math.floor(code / 36) / 5; - green = Math.floor(remainder / 6) / 5; - blue = (remainder % 6) / 5; - } - - const value = Math.max(red, green, blue) * 2; - - if (value === 0) { - return 30; - } - - // eslint-disable-next-line no-bitwise - let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red)); - - if (value === 2) { - result += 60; - } - - return result; - }, - enumerable: false, - }, - rgbToAnsi: { - value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), - enumerable: false, - }, - hexToAnsi: { - value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), - enumerable: false, - }, - }); - - return styles; -} - -const ansiStyles = assembleStyles(); - -export default ansiStyles; diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/ansi-styles/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json deleted file mode 100644 index 6cd3ca5bf9..0000000000 --- a/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "ansi-styles", - "version": "6.2.1", - "description": "ANSI escape codes for styling strings in the terminal", - "license": "MIT", - "repository": "chalk/ansi-styles", - "funding": "https://github.com/chalk/ansi-styles?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd", - "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "devDependencies": { - "ava": "^3.15.0", - "svg-term-cli": "^2.1.1", - "tsd": "^0.19.0", - "xo": "^0.47.0" - } -} diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md deleted file mode 100644 index 6d04183f0c..0000000000 --- a/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,173 +0,0 @@ -# ansi-styles - -> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - -![](screenshot.png) - -## Install - -```sh -npm install ansi-styles -``` - -## Usage - -```js -import styles from 'ansi-styles'; - -console.log(`${styles.green.open}Hello world!${styles.green.close}`); - - -// Color conversion between 256/truecolor -// NOTE: When converting from truecolor to 256 colors, the original color -// may be degraded to fit the new color palette. This means terminals -// that do not support 16 million colors will best-match the -// original color. -console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`) -console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`) -console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`) -``` - -## API - -### `open` and `close` - -Each style has an `open` and `close` property. - -### `modifierNames`, `foregroundColorNames`, `backgroundColorNames`, and `colorNames` - -All supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`. - -This can be useful if you need to validate input: - -```js -import {modifierNames, foregroundColorNames} from 'ansi-styles'; - -console.log(modifierNames.includes('bold')); -//=> true - -console.log(foregroundColorNames.includes('pink')); -//=> false -``` - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(Not widely supported)* -- `underline` -- `overline` *Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.* -- `inverse` -- `hidden` -- `strikethrough` *(Not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `blackBright` (alias: `gray`, `grey`) -- `redBright` -- `greenBright` -- `yellowBright` -- `blueBright` -- `magentaBright` -- `cyanBright` -- `whiteBright` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` -- `bgBlackBright` (alias: `bgGray`, `bgGrey`) -- `bgRedBright` -- `bgGreenBright` -- `bgYellowBright` -- `bgBlueBright` -- `bgMagentaBright` -- `bgCyanBright` -- `bgWhiteBright` - -## Advanced usage - -By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `styles.modifier` -- `styles.color` -- `styles.bgColor` - -###### Example - -```js -import styles from 'ansi-styles'; - -console.log(styles.color.green.open); -``` - -Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `styles.codes`, which returns a `Map` with the open codes as keys and close codes as values. - -###### Example - -```js -import styles from 'ansi-styles'; - -console.log(styles.codes.get(36)); -//=> 39 -``` - -## 16 / 256 / 16 million (TrueColor) support - -`ansi-styles` allows converting between various color formats and ANSI escapes, with support for 16, 256 and [16 million colors](https://gist.github.com/XVilka/8346728). - -The following color spaces are supported: - -- `rgb` -- `hex` -- `ansi256` -- `ansi` - -To use these, call the associated conversion function with the intended output, for example: - -```js -import styles from 'ansi-styles'; - -styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code -styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code - -styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code -styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code - -styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code -styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code -``` - -## Related - -- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - -## For enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md deleted file mode 100644 index dc39ed6952..0000000000 --- a/node_modules/argparse/CHANGELOG.md +++ /dev/null @@ -1,216 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - - -## [2.0.1] - 2020-08-29 -### Fixed -- Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150. - - -## [2.0.0] - 2020-08-14 -### Changed -- Full rewrite. Now port from python 3.9.0 & more precise following. - See [doc](./doc) for difference and migration info. -- node.js 10+ required -- Removed most of local docs in favour of original ones. - - -## [1.0.10] - 2018-02-15 -### Fixed -- Use .concat instead of + for arrays, #122. - - -## [1.0.9] - 2016-09-29 -### Changed -- Rerelease after 1.0.8 - deps cleanup. - - -## [1.0.8] - 2016-09-29 -### Changed -- Maintenance (deps bump, fix node 6.5+ tests, coverage report). - - -## [1.0.7] - 2016-03-17 -### Changed -- Teach `addArgument` to accept string arg names. #97, @tomxtobin. - - -## [1.0.6] - 2016-02-06 -### Changed -- Maintenance: moved to eslint & updated CS. - - -## [1.0.5] - 2016-02-05 -### Changed -- Removed lodash dependency to significantly reduce install size. - Thanks to @mourner. - - -## [1.0.4] - 2016-01-17 -### Changed -- Maintenance: lodash update to 4.0.0. - - -## [1.0.3] - 2015-10-27 -### Fixed -- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. - - -## [1.0.2] - 2015-03-22 -### Changed -- Relaxed lodash version dependency. - - -## [1.0.1] - 2015-02-20 -### Changed -- Changed dependencies to be compatible with ancient nodejs. - - -## [1.0.0] - 2015-02-19 -### Changed -- Maintenance release. -- Replaced `underscore` with `lodash`. -- Bumped version to 1.0.0 to better reflect semver meaning. -- HISTORY.md -> CHANGELOG.md - - -## [0.1.16] - 2013-12-01 -### Changed -- Maintenance release. Updated dependencies and docs. - - -## [0.1.15] - 2013-05-13 -### Fixed -- Fixed #55, @trebor89 - - -## [0.1.14] - 2013-05-12 -### Fixed -- Fixed #62, @maxtaco - - -## [0.1.13] - 2013-04-08 -### Changed -- Added `.npmignore` to reduce package size - - -## [0.1.12] - 2013-02-10 -### Fixed -- Fixed conflictHandler (#46), @hpaulj - - -## [0.1.11] - 2013-02-07 -### Added -- Added 70+ tests (ported from python), @hpaulj -- Added conflictHandler, @applepicke -- Added fromfilePrefixChar, @hpaulj - -### Fixed -- Multiple bugfixes, @hpaulj - - -## [0.1.10] - 2012-12-30 -### Added -- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) - support, thanks to @hpaulj - -### Fixed -- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj - - -## [0.1.9] - 2012-12-27 -### Fixed -- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj -- Fixed default value behavior with `*` positionals, thanks to @hpaulj -- Improve `getDefault()` behavior, thanks to @hpaulj -- Improve negative argument parsing, thanks to @hpaulj - - -## [0.1.8] - 2012-12-01 -### Fixed -- Fixed parser parents (issue #19), thanks to @hpaulj -- Fixed negative argument parse (issue #20), thanks to @hpaulj - - -## [0.1.7] - 2012-10-14 -### Fixed -- Fixed 'choices' argument parse (issue #16) -- Fixed stderr output (issue #15) - - -## [0.1.6] - 2012-09-09 -### Fixed -- Fixed check for conflict of options (thanks to @tomxtobin) - - -## [0.1.5] - 2012-09-03 -### Fixed -- Fix parser #setDefaults method (thanks to @tomxtobin) - - -## [0.1.4] - 2012-07-30 -### Fixed -- Fixed pseudo-argument support (thanks to @CGamesPlay) -- Fixed addHelp default (should be true), if not set (thanks to @benblank) - - -## [0.1.3] - 2012-06-27 -### Fixed -- Fixed formatter api name: Formatter -> HelpFormatter - - -## [0.1.2] - 2012-05-29 -### Fixed -- Removed excess whitespace in help -- Fixed error reporting, when parcer with subcommands - called with empty arguments - -### Added -- Added basic tests - - -## [0.1.1] - 2012-05-23 -### Fixed -- Fixed line wrapping in help formatter -- Added better error reporting on invalid arguments - - -## [0.1.0] - 2012-05-16 -### Added -- First release. - - -[2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0 -[1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10 -[1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9 -[1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8 -[1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7 -[1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6 -[1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5 -[1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4 -[1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3 -[1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2 -[1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1 -[1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0 -[0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16 -[0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15 -[0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14 -[0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13 -[0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12 -[0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11 -[0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10 -[0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9 -[0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8 -[0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7 -[0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6 -[0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5 -[0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4 -[0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3 -[0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2 -[0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1 -[0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0 diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE deleted file mode 100644 index 66a3ac80d7..0000000000 --- a/node_modules/argparse/LICENSE +++ /dev/null @@ -1,254 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations, which became -Zope Corporation. In 2001, the Python Software Foundation (PSF, see -https://www.python.org/psf/) was formed, a non-profit organization -created specifically to own Python-related Intellectual Property. -Zope Corporation was a sponsoring member of the PSF. - -All Python releases are Open Source (see http://www.opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2 and above 2.1.1 2001-now PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby -grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, -analyze, test, perform and/or display publicly, prepare derivative works, -distribute, and otherwise use Python alone or in any derivative version, -provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md deleted file mode 100644 index 550b5c9b7b..0000000000 --- a/node_modules/argparse/README.md +++ /dev/null @@ -1,84 +0,0 @@ -argparse -======== - -[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) -[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) - -CLI arguments parser for node.js, with [sub-commands](https://docs.python.org/3.9/library/argparse.html#sub-commands) support. Port of python's [argparse](http://docs.python.org/dev/library/argparse.html) (version [3.9.0](https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py)). - -**Difference with original.** - -- JS has no keyword arguments support. - - Pass options instead: `new ArgumentParser({ description: 'example', add_help: true })`. -- JS has no python's types `int`, `float`, ... - - Use string-typed names: `.add_argument('-b', { type: 'int', help: 'help' })`. -- `%r` format specifier uses `require('util').inspect()`. - -More details in [doc](./doc). - - -Example -------- - -`test.js` file: - -```javascript -#!/usr/bin/env node -'use strict'; - -const { ArgumentParser } = require('argparse'); -const { version } = require('./package.json'); - -const parser = new ArgumentParser({ - description: 'Argparse example' -}); - -parser.add_argument('-v', '--version', { action: 'version', version }); -parser.add_argument('-f', '--foo', { help: 'foo bar' }); -parser.add_argument('-b', '--bar', { help: 'bar foo' }); -parser.add_argument('--baz', { help: 'baz bar' }); - -console.dir(parser.parse_args()); -``` - -Display help: - -``` -$ ./test.js -h -usage: test.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] - -Argparse example - -optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -f FOO, --foo FOO foo bar - -b BAR, --bar BAR bar foo - --baz BAZ baz bar -``` - -Parse arguments: - -``` -$ ./test.js -f=3 --bar=4 --baz 5 -{ foo: '3', bar: '4', baz: '5' } -``` - - -API docs --------- - -Since this is a port with minimal divergence, there's no separate documentation. -Use original one instead, with notes about difference. - -1. [Original doc](https://docs.python.org/3.9/library/argparse.html). -2. [Original tutorial](https://docs.python.org/3.9/howto/argparse.html). -3. [Difference with python](./doc). - - -argparse for enterprise ------------------------ - -Available as part of the Tidelift Subscription - -The maintainers of argparse and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-argparse?utm_source=npm-argparse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/argparse/argparse.js b/node_modules/argparse/argparse.js deleted file mode 100644 index 2b8c8c6317..0000000000 --- a/node_modules/argparse/argparse.js +++ /dev/null @@ -1,3707 +0,0 @@ -// Port of python's argparse module, version 3.9.0: -// https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py - -'use strict' - -// Copyright (C) 2010-2020 Python Software Foundation. -// Copyright (C) 2020 argparse.js authors - -/* - * Command-line parsing library - * - * This module is an optparse-inspired command-line parsing library that: - * - * - handles both optional and positional arguments - * - produces highly informative usage messages - * - supports parsers that dispatch to sub-parsers - * - * The following is a simple usage example that sums integers from the - * command-line and writes the result to a file:: - * - * parser = argparse.ArgumentParser( - * description='sum the integers at the command line') - * parser.add_argument( - * 'integers', metavar='int', nargs='+', type=int, - * help='an integer to be summed') - * parser.add_argument( - * '--log', default=sys.stdout, type=argparse.FileType('w'), - * help='the file where the sum should be written') - * args = parser.parse_args() - * args.log.write('%s' % sum(args.integers)) - * args.log.close() - * - * The module contains the following public classes: - * - * - ArgumentParser -- The main entry point for command-line parsing. As the - * example above shows, the add_argument() method is used to populate - * the parser with actions for optional and positional arguments. Then - * the parse_args() method is invoked to convert the args at the - * command-line into an object with attributes. - * - * - ArgumentError -- The exception raised by ArgumentParser objects when - * there are errors with the parser's actions. Errors raised while - * parsing the command-line are caught by ArgumentParser and emitted - * as command-line messages. - * - * - FileType -- A factory for defining types of files to be created. As the - * example above shows, instances of FileType are typically passed as - * the type= argument of add_argument() calls. - * - * - Action -- The base class for parser actions. Typically actions are - * selected by passing strings like 'store_true' or 'append_const' to - * the action= argument of add_argument(). However, for greater - * customization of ArgumentParser actions, subclasses of Action may - * be defined and passed as the action= argument. - * - * - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, - * ArgumentDefaultsHelpFormatter -- Formatter classes which - * may be passed as the formatter_class= argument to the - * ArgumentParser constructor. HelpFormatter is the default, - * RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser - * not to change the formatting for help text, and - * ArgumentDefaultsHelpFormatter adds information about argument defaults - * to the help. - * - * All other classes in this module are considered implementation details. - * (Also note that HelpFormatter and RawDescriptionHelpFormatter are only - * considered public as object names -- the API of the formatter objects is - * still considered an implementation detail.) - */ - -const SUPPRESS = '==SUPPRESS==' - -const OPTIONAL = '?' -const ZERO_OR_MORE = '*' -const ONE_OR_MORE = '+' -const PARSER = 'A...' -const REMAINDER = '...' -const _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args' - - -// ================================== -// Utility functions used for porting -// ================================== -const assert = require('assert') -const util = require('util') -const fs = require('fs') -const sub = require('./lib/sub') -const path = require('path') -const repr = util.inspect - -function get_argv() { - // omit first argument (which is assumed to be interpreter - `node`, `coffee`, `ts-node`, etc.) - return process.argv.slice(1) -} - -function get_terminal_size() { - return { - columns: +process.env.COLUMNS || process.stdout.columns || 80 - } -} - -function hasattr(object, name) { - return Object.prototype.hasOwnProperty.call(object, name) -} - -function getattr(object, name, value) { - return hasattr(object, name) ? object[name] : value -} - -function setattr(object, name, value) { - object[name] = value -} - -function setdefault(object, name, value) { - if (!hasattr(object, name)) object[name] = value - return object[name] -} - -function delattr(object, name) { - delete object[name] -} - -function range(from, to, step=1) { - // range(10) is equivalent to range(0, 10) - if (arguments.length === 1) [ to, from ] = [ from, 0 ] - if (typeof from !== 'number' || typeof to !== 'number' || typeof step !== 'number') { - throw new TypeError('argument cannot be interpreted as an integer') - } - if (step === 0) throw new TypeError('range() arg 3 must not be zero') - - let result = [] - if (step > 0) { - for (let i = from; i < to; i += step) result.push(i) - } else { - for (let i = from; i > to; i += step) result.push(i) - } - return result -} - -function splitlines(str, keepends = false) { - let result - if (!keepends) { - result = str.split(/\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/) - } else { - result = [] - let parts = str.split(/(\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029])/) - for (let i = 0; i < parts.length; i += 2) { - result.push(parts[i] + (i + 1 < parts.length ? parts[i + 1] : '')) - } - } - if (!result[result.length - 1]) result.pop() - return result -} - -function _string_lstrip(string, prefix_chars) { - let idx = 0 - while (idx < string.length && prefix_chars.includes(string[idx])) idx++ - return idx ? string.slice(idx) : string -} - -function _string_split(string, sep, maxsplit) { - let result = string.split(sep) - if (result.length > maxsplit) { - result = result.slice(0, maxsplit).concat([ result.slice(maxsplit).join(sep) ]) - } - return result -} - -function _array_equal(array1, array2) { - if (array1.length !== array2.length) return false - for (let i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) return false - } - return true -} - -function _array_remove(array, item) { - let idx = array.indexOf(item) - if (idx === -1) throw new TypeError(sub('%r not in list', item)) - array.splice(idx, 1) -} - -// normalize choices to array; -// this isn't required in python because `in` and `map` operators work with anything, -// but in js dealing with multiple types here is too clunky -function _choices_to_array(choices) { - if (choices === undefined) { - return [] - } else if (Array.isArray(choices)) { - return choices - } else if (choices !== null && typeof choices[Symbol.iterator] === 'function') { - return Array.from(choices) - } else if (typeof choices === 'object' && choices !== null) { - return Object.keys(choices) - } else { - throw new Error(sub('invalid choices value: %r', choices)) - } -} - -// decorator that allows a class to be called without new -function _callable(cls) { - let result = { // object is needed for inferred class name - [cls.name]: function (...args) { - let this_class = new.target === result || !new.target - return Reflect.construct(cls, args, this_class ? cls : new.target) - } - } - result[cls.name].prototype = cls.prototype - // fix default tag for toString, e.g. [object Action] instead of [object Object] - cls.prototype[Symbol.toStringTag] = cls.name - return result[cls.name] -} - -function _alias(object, from, to) { - try { - let name = object.constructor.name - Object.defineProperty(object, from, { - value: util.deprecate(object[to], sub('%s.%s() is renamed to %s.%s()', - name, from, name, to)), - enumerable: false - }) - } catch {} -} - -// decorator that allows snake_case class methods to be called with camelCase and vice versa -function _camelcase_alias(_class) { - for (let name of Object.getOwnPropertyNames(_class.prototype)) { - let camelcase = name.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) - if (camelcase !== name) _alias(_class.prototype, camelcase, name) - } - return _class -} - -function _to_legacy_name(key) { - key = key.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase()) - if (key === 'default') key = 'defaultValue' - if (key === 'const') key = 'constant' - return key -} - -function _to_new_name(key) { - if (key === 'defaultValue') key = 'default' - if (key === 'constant') key = 'const' - key = key.replace(/[A-Z]/g, c => '_' + c.toLowerCase()) - return key -} - -// parse options -let no_default = Symbol('no_default_value') -function _parse_opts(args, descriptor) { - function get_name() { - let stack = new Error().stack.split('\n') - .map(x => x.match(/^ at (.*) \(.*\)$/)) - .filter(Boolean) - .map(m => m[1]) - .map(fn => fn.match(/[^ .]*$/)[0]) - - if (stack.length && stack[0] === get_name.name) stack.shift() - if (stack.length && stack[0] === _parse_opts.name) stack.shift() - return stack.length ? stack[0] : '' - } - - args = Array.from(args) - let kwargs = {} - let result = [] - let last_opt = args.length && args[args.length - 1] - - if (typeof last_opt === 'object' && last_opt !== null && !Array.isArray(last_opt) && - (!last_opt.constructor || last_opt.constructor.name === 'Object')) { - kwargs = Object.assign({}, args.pop()) - } - - // LEGACY (v1 compatibility): camelcase - let renames = [] - for (let key of Object.keys(descriptor)) { - let old_name = _to_legacy_name(key) - if (old_name !== key && (old_name in kwargs)) { - if (key in kwargs) { - // default and defaultValue specified at the same time, happens often in old tests - //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) - } else { - kwargs[key] = kwargs[old_name] - } - renames.push([ old_name, key ]) - delete kwargs[old_name] - } - } - if (renames.length) { - let name = get_name() - deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', - name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) - } - // end - - let missing_positionals = [] - let positional_count = args.length - - for (let [ key, def ] of Object.entries(descriptor)) { - if (key[0] === '*') { - if (key.length > 0 && key[1] === '*') { - // LEGACY (v1 compatibility): camelcase - let renames = [] - for (let key of Object.keys(kwargs)) { - let new_name = _to_new_name(key) - if (new_name !== key && (key in kwargs)) { - if (new_name in kwargs) { - // default and defaultValue specified at the same time, happens often in old tests - //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), new_name)) - } else { - kwargs[new_name] = kwargs[key] - } - renames.push([ key, new_name ]) - delete kwargs[key] - } - } - if (renames.length) { - let name = get_name() - deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s', - name, renames.map(([ a, b ]) => sub('%r -> %r', a, b)))) - } - // end - result.push(kwargs) - kwargs = {} - } else { - result.push(args) - args = [] - } - } else if (key in kwargs && args.length > 0) { - throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key)) - } else if (key in kwargs) { - result.push(kwargs[key]) - delete kwargs[key] - } else if (args.length > 0) { - result.push(args.shift()) - } else if (def !== no_default) { - result.push(def) - } else { - missing_positionals.push(key) - } - } - - if (Object.keys(kwargs).length) { - throw new TypeError(sub('%s() got an unexpected keyword argument %r', - get_name(), Object.keys(kwargs)[0])) - } - - if (args.length) { - let from = Object.entries(descriptor).filter(([ k, v ]) => k[0] !== '*' && v !== no_default).length - let to = Object.entries(descriptor).filter(([ k ]) => k[0] !== '*').length - throw new TypeError(sub('%s() takes %s positional argument%s but %s %s given', - get_name(), - from === to ? sub('from %s to %s', from, to) : to, - from === to && to === 1 ? '' : 's', - positional_count, - positional_count === 1 ? 'was' : 'were')) - } - - if (missing_positionals.length) { - let strs = missing_positionals.map(repr) - if (strs.length > 1) strs[strs.length - 1] = 'and ' + strs[strs.length - 1] - let str_joined = strs.join(strs.length === 2 ? '' : ', ') - throw new TypeError(sub('%s() missing %i required positional argument%s: %s', - get_name(), strs.length, strs.length === 1 ? '' : 's', str_joined)) - } - - return result -} - -let _deprecations = {} -function deprecate(id, string) { - _deprecations[id] = _deprecations[id] || util.deprecate(() => {}, string) - _deprecations[id]() -} - - -// ============================= -// Utility functions and classes -// ============================= -function _AttributeHolder(cls = Object) { - /* - * Abstract base class that provides __repr__. - * - * The __repr__ method returns a string in the format:: - * ClassName(attr=name, attr=name, ...) - * The attributes are determined either by a class-level attribute, - * '_kwarg_names', or by inspecting the instance __dict__. - */ - - return class _AttributeHolder extends cls { - [util.inspect.custom]() { - let type_name = this.constructor.name - let arg_strings = [] - let star_args = {} - for (let arg of this._get_args()) { - arg_strings.push(repr(arg)) - } - for (let [ name, value ] of this._get_kwargs()) { - if (/^[a-z_][a-z0-9_$]*$/i.test(name)) { - arg_strings.push(sub('%s=%r', name, value)) - } else { - star_args[name] = value - } - } - if (Object.keys(star_args).length) { - arg_strings.push(sub('**%s', repr(star_args))) - } - return sub('%s(%s)', type_name, arg_strings.join(', ')) - } - - toString() { - return this[util.inspect.custom]() - } - - _get_kwargs() { - return Object.entries(this) - } - - _get_args() { - return [] - } - } -} - - -function _copy_items(items) { - if (items === undefined) { - return [] - } - return items.slice(0) -} - - -// =============== -// Formatting Help -// =============== -const HelpFormatter = _camelcase_alias(_callable(class HelpFormatter { - /* - * Formatter for generating usage messages and argument help strings. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - constructor() { - let [ - prog, - indent_increment, - max_help_position, - width - ] = _parse_opts(arguments, { - prog: no_default, - indent_increment: 2, - max_help_position: 24, - width: undefined - }) - - // default setting for width - if (width === undefined) { - width = get_terminal_size().columns - width -= 2 - } - - this._prog = prog - this._indent_increment = indent_increment - this._max_help_position = Math.min(max_help_position, - Math.max(width - 20, indent_increment * 2)) - this._width = width - - this._current_indent = 0 - this._level = 0 - this._action_max_length = 0 - - this._root_section = this._Section(this, undefined) - this._current_section = this._root_section - - this._whitespace_matcher = /[ \t\n\r\f\v]+/g // equivalent to python /\s+/ with ASCII flag - this._long_break_matcher = /\n\n\n+/g - } - - // =============================== - // Section and indentation methods - // =============================== - _indent() { - this._current_indent += this._indent_increment - this._level += 1 - } - - _dedent() { - this._current_indent -= this._indent_increment - assert(this._current_indent >= 0, 'Indent decreased below 0.') - this._level -= 1 - } - - _add_item(func, args) { - this._current_section.items.push([ func, args ]) - } - - // ======================== - // Message building methods - // ======================== - start_section(heading) { - this._indent() - let section = this._Section(this, this._current_section, heading) - this._add_item(section.format_help.bind(section), []) - this._current_section = section - } - - end_section() { - this._current_section = this._current_section.parent - this._dedent() - } - - add_text(text) { - if (text !== SUPPRESS && text !== undefined) { - this._add_item(this._format_text.bind(this), [text]) - } - } - - add_usage(usage, actions, groups, prefix = undefined) { - if (usage !== SUPPRESS) { - let args = [ usage, actions, groups, prefix ] - this._add_item(this._format_usage.bind(this), args) - } - } - - add_argument(action) { - if (action.help !== SUPPRESS) { - - // find all invocations - let invocations = [this._format_action_invocation(action)] - for (let subaction of this._iter_indented_subactions(action)) { - invocations.push(this._format_action_invocation(subaction)) - } - - // update the maximum item length - let invocation_length = Math.max(...invocations.map(invocation => invocation.length)) - let action_length = invocation_length + this._current_indent - this._action_max_length = Math.max(this._action_max_length, - action_length) - - // add the item to the list - this._add_item(this._format_action.bind(this), [action]) - } - } - - add_arguments(actions) { - for (let action of actions) { - this.add_argument(action) - } - } - - // ======================= - // Help-formatting methods - // ======================= - format_help() { - let help = this._root_section.format_help() - if (help) { - help = help.replace(this._long_break_matcher, '\n\n') - help = help.replace(/^\n+|\n+$/g, '') + '\n' - } - return help - } - - _join_parts(part_strings) { - return part_strings.filter(part => part && part !== SUPPRESS).join('') - } - - _format_usage(usage, actions, groups, prefix) { - if (prefix === undefined) { - prefix = 'usage: ' - } - - // if usage is specified, use that - if (usage !== undefined) { - usage = sub(usage, { prog: this._prog }) - - // if no optionals or positionals are available, usage is just prog - } else if (usage === undefined && !actions.length) { - usage = sub('%(prog)s', { prog: this._prog }) - - // if optionals and positionals are available, calculate usage - } else if (usage === undefined) { - let prog = sub('%(prog)s', { prog: this._prog }) - - // split optionals from positionals - let optionals = [] - let positionals = [] - for (let action of actions) { - if (action.option_strings.length) { - optionals.push(action) - } else { - positionals.push(action) - } - } - - // build full usage string - let action_usage = this._format_actions_usage([].concat(optionals).concat(positionals), groups) - usage = [ prog, action_usage ].map(String).join(' ') - - // wrap the usage parts if it's too long - let text_width = this._width - this._current_indent - if (prefix.length + usage.length > text_width) { - - // break usage into wrappable parts - let part_regexp = /\(.*?\)+(?=\s|$)|\[.*?\]+(?=\s|$)|\S+/g - let opt_usage = this._format_actions_usage(optionals, groups) - let pos_usage = this._format_actions_usage(positionals, groups) - let opt_parts = opt_usage.match(part_regexp) || [] - let pos_parts = pos_usage.match(part_regexp) || [] - assert(opt_parts.join(' ') === opt_usage) - assert(pos_parts.join(' ') === pos_usage) - - // helper for wrapping lines - let get_lines = (parts, indent, prefix = undefined) => { - let lines = [] - let line = [] - let line_len - if (prefix !== undefined) { - line_len = prefix.length - 1 - } else { - line_len = indent.length - 1 - } - for (let part of parts) { - if (line_len + 1 + part.length > text_width && line) { - lines.push(indent + line.join(' ')) - line = [] - line_len = indent.length - 1 - } - line.push(part) - line_len += part.length + 1 - } - if (line.length) { - lines.push(indent + line.join(' ')) - } - if (prefix !== undefined) { - lines[0] = lines[0].slice(indent.length) - } - return lines - } - - let lines - - // if prog is short, follow it with optionals or positionals - if (prefix.length + prog.length <= 0.75 * text_width) { - let indent = ' '.repeat(prefix.length + prog.length + 1) - if (opt_parts.length) { - lines = get_lines([prog].concat(opt_parts), indent, prefix) - lines = lines.concat(get_lines(pos_parts, indent)) - } else if (pos_parts.length) { - lines = get_lines([prog].concat(pos_parts), indent, prefix) - } else { - lines = [prog] - } - - // if prog is long, put it on its own line - } else { - let indent = ' '.repeat(prefix.length) - let parts = [].concat(opt_parts).concat(pos_parts) - lines = get_lines(parts, indent) - if (lines.length > 1) { - lines = [] - lines = lines.concat(get_lines(opt_parts, indent)) - lines = lines.concat(get_lines(pos_parts, indent)) - } - lines = [prog].concat(lines) - } - - // join lines into usage - usage = lines.join('\n') - } - } - - // prefix with 'usage:' - return sub('%s%s\n\n', prefix, usage) - } - - _format_actions_usage(actions, groups) { - // find group indices and identify actions in groups - let group_actions = new Set() - let inserts = {} - for (let group of groups) { - let start = actions.indexOf(group._group_actions[0]) - if (start === -1) { - continue - } else { - let end = start + group._group_actions.length - if (_array_equal(actions.slice(start, end), group._group_actions)) { - for (let action of group._group_actions) { - group_actions.add(action) - } - if (!group.required) { - if (start in inserts) { - inserts[start] += ' [' - } else { - inserts[start] = '[' - } - if (end in inserts) { - inserts[end] += ']' - } else { - inserts[end] = ']' - } - } else { - if (start in inserts) { - inserts[start] += ' (' - } else { - inserts[start] = '(' - } - if (end in inserts) { - inserts[end] += ')' - } else { - inserts[end] = ')' - } - } - for (let i of range(start + 1, end)) { - inserts[i] = '|' - } - } - } - } - - // collect all actions format strings - let parts = [] - for (let [ i, action ] of Object.entries(actions)) { - - // suppressed arguments are marked with None - // remove | separators for suppressed arguments - if (action.help === SUPPRESS) { - parts.push(undefined) - if (inserts[+i] === '|') { - delete inserts[+i] - } else if (inserts[+i + 1] === '|') { - delete inserts[+i + 1] - } - - // produce all arg strings - } else if (!action.option_strings.length) { - let default_value = this._get_default_metavar_for_positional(action) - let part = this._format_args(action, default_value) - - // if it's in a group, strip the outer [] - if (group_actions.has(action)) { - if (part[0] === '[' && part[part.length - 1] === ']') { - part = part.slice(1, -1) - } - } - - // add the action string to the list - parts.push(part) - - // produce the first way to invoke the option in brackets - } else { - let option_string = action.option_strings[0] - let part - - // if the Optional doesn't take a value, format is: - // -s or --long - if (action.nargs === 0) { - part = action.format_usage() - - // if the Optional takes a value, format is: - // -s ARGS or --long ARGS - } else { - let default_value = this._get_default_metavar_for_optional(action) - let args_string = this._format_args(action, default_value) - part = sub('%s %s', option_string, args_string) - } - - // make it look optional if it's not required or in a group - if (!action.required && !group_actions.has(action)) { - part = sub('[%s]', part) - } - - // add the action string to the list - parts.push(part) - } - } - - // insert things at the necessary indices - for (let i of Object.keys(inserts).map(Number).sort((a, b) => b - a)) { - parts.splice(+i, 0, inserts[+i]) - } - - // join all the action items with spaces - let text = parts.filter(Boolean).join(' ') - - // clean up separators for mutually exclusive groups - text = text.replace(/([\[(]) /g, '$1') - text = text.replace(/ ([\])])/g, '$1') - text = text.replace(/[\[(] *[\])]/g, '') - text = text.replace(/\(([^|]*)\)/g, '$1', text) - text = text.trim() - - // return the text - return text - } - - _format_text(text) { - if (text.includes('%(prog)')) { - text = sub(text, { prog: this._prog }) - } - let text_width = Math.max(this._width - this._current_indent, 11) - let indent = ' '.repeat(this._current_indent) - return this._fill_text(text, text_width, indent) + '\n\n' - } - - _format_action(action) { - // determine the required width and the entry label - let help_position = Math.min(this._action_max_length + 2, - this._max_help_position) - let help_width = Math.max(this._width - help_position, 11) - let action_width = help_position - this._current_indent - 2 - let action_header = this._format_action_invocation(action) - let indent_first - - // no help; start on same line and add a final newline - if (!action.help) { - let tup = [ this._current_indent, '', action_header ] - action_header = sub('%*s%s\n', ...tup) - - // short action name; start on the same line and pad two spaces - } else if (action_header.length <= action_width) { - let tup = [ this._current_indent, '', action_width, action_header ] - action_header = sub('%*s%-*s ', ...tup) - indent_first = 0 - - // long action name; start on the next line - } else { - let tup = [ this._current_indent, '', action_header ] - action_header = sub('%*s%s\n', ...tup) - indent_first = help_position - } - - // collect the pieces of the action help - let parts = [action_header] - - // if there was help for the action, add lines of help text - if (action.help) { - let help_text = this._expand_help(action) - let help_lines = this._split_lines(help_text, help_width) - parts.push(sub('%*s%s\n', indent_first, '', help_lines[0])) - for (let line of help_lines.slice(1)) { - parts.push(sub('%*s%s\n', help_position, '', line)) - } - - // or add a newline if the description doesn't end with one - } else if (!action_header.endsWith('\n')) { - parts.push('\n') - } - - // if there are any sub-actions, add their help as well - for (let subaction of this._iter_indented_subactions(action)) { - parts.push(this._format_action(subaction)) - } - - // return a single string - return this._join_parts(parts) - } - - _format_action_invocation(action) { - if (!action.option_strings.length) { - let default_value = this._get_default_metavar_for_positional(action) - let metavar = this._metavar_formatter(action, default_value)(1)[0] - return metavar - - } else { - let parts = [] - - // if the Optional doesn't take a value, format is: - // -s, --long - if (action.nargs === 0) { - parts = parts.concat(action.option_strings) - - // if the Optional takes a value, format is: - // -s ARGS, --long ARGS - } else { - let default_value = this._get_default_metavar_for_optional(action) - let args_string = this._format_args(action, default_value) - for (let option_string of action.option_strings) { - parts.push(sub('%s %s', option_string, args_string)) - } - } - - return parts.join(', ') - } - } - - _metavar_formatter(action, default_metavar) { - let result - if (action.metavar !== undefined) { - result = action.metavar - } else if (action.choices !== undefined) { - let choice_strs = _choices_to_array(action.choices).map(String) - result = sub('{%s}', choice_strs.join(',')) - } else { - result = default_metavar - } - - function format(tuple_size) { - if (Array.isArray(result)) { - return result - } else { - return Array(tuple_size).fill(result) - } - } - return format - } - - _format_args(action, default_metavar) { - let get_metavar = this._metavar_formatter(action, default_metavar) - let result - if (action.nargs === undefined) { - result = sub('%s', ...get_metavar(1)) - } else if (action.nargs === OPTIONAL) { - result = sub('[%s]', ...get_metavar(1)) - } else if (action.nargs === ZERO_OR_MORE) { - let metavar = get_metavar(1) - if (metavar.length === 2) { - result = sub('[%s [%s ...]]', ...metavar) - } else { - result = sub('[%s ...]', ...metavar) - } - } else if (action.nargs === ONE_OR_MORE) { - result = sub('%s [%s ...]', ...get_metavar(2)) - } else if (action.nargs === REMAINDER) { - result = '...' - } else if (action.nargs === PARSER) { - result = sub('%s ...', ...get_metavar(1)) - } else if (action.nargs === SUPPRESS) { - result = '' - } else { - let formats - try { - formats = range(action.nargs).map(() => '%s') - } catch (err) { - throw new TypeError('invalid nargs value') - } - result = sub(formats.join(' '), ...get_metavar(action.nargs)) - } - return result - } - - _expand_help(action) { - let params = Object.assign({ prog: this._prog }, action) - for (let name of Object.keys(params)) { - if (params[name] === SUPPRESS) { - delete params[name] - } - } - for (let name of Object.keys(params)) { - if (params[name] && params[name].name) { - params[name] = params[name].name - } - } - if (params.choices !== undefined) { - let choices_str = _choices_to_array(params.choices).map(String).join(', ') - params.choices = choices_str - } - // LEGACY (v1 compatibility): camelcase - for (let key of Object.keys(params)) { - let old_name = _to_legacy_name(key) - if (old_name !== key) { - params[old_name] = params[key] - } - } - // end - return sub(this._get_help_string(action), params) - } - - * _iter_indented_subactions(action) { - if (typeof action._get_subactions === 'function') { - this._indent() - yield* action._get_subactions() - this._dedent() - } - } - - _split_lines(text, width) { - text = text.replace(this._whitespace_matcher, ' ').trim() - // The textwrap module is used only for formatting help. - // Delay its import for speeding up the common usage of argparse. - let textwrap = require('./lib/textwrap') - return textwrap.wrap(text, { width }) - } - - _fill_text(text, width, indent) { - text = text.replace(this._whitespace_matcher, ' ').trim() - let textwrap = require('./lib/textwrap') - return textwrap.fill(text, { width, - initial_indent: indent, - subsequent_indent: indent }) - } - - _get_help_string(action) { - return action.help - } - - _get_default_metavar_for_optional(action) { - return action.dest.toUpperCase() - } - - _get_default_metavar_for_positional(action) { - return action.dest - } -})) - -HelpFormatter.prototype._Section = _callable(class _Section { - - constructor(formatter, parent, heading = undefined) { - this.formatter = formatter - this.parent = parent - this.heading = heading - this.items = [] - } - - format_help() { - // format the indented section - if (this.parent !== undefined) { - this.formatter._indent() - } - let item_help = this.formatter._join_parts(this.items.map(([ func, args ]) => func.apply(null, args))) - if (this.parent !== undefined) { - this.formatter._dedent() - } - - // return nothing if the section was empty - if (!item_help) { - return '' - } - - // add the heading if the section was non-empty - let heading - if (this.heading !== SUPPRESS && this.heading !== undefined) { - let current_indent = this.formatter._current_indent - heading = sub('%*s%s:\n', current_indent, '', this.heading) - } else { - heading = '' - } - - // join the section-initial newline, the heading and the help - return this.formatter._join_parts(['\n', heading, item_help, '\n']) - } -}) - - -const RawDescriptionHelpFormatter = _camelcase_alias(_callable(class RawDescriptionHelpFormatter extends HelpFormatter { - /* - * Help message formatter which retains any formatting in descriptions. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _fill_text(text, width, indent) { - return splitlines(text, true).map(line => indent + line).join('') - } -})) - - -const RawTextHelpFormatter = _camelcase_alias(_callable(class RawTextHelpFormatter extends RawDescriptionHelpFormatter { - /* - * Help message formatter which retains formatting of all help text. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _split_lines(text/*, width*/) { - return splitlines(text) - } -})) - - -const ArgumentDefaultsHelpFormatter = _camelcase_alias(_callable(class ArgumentDefaultsHelpFormatter extends HelpFormatter { - /* - * Help message formatter which adds default values to argument help. - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _get_help_string(action) { - let help = action.help - // LEGACY (v1 compatibility): additional check for defaultValue needed - if (!action.help.includes('%(default)') && !action.help.includes('%(defaultValue)')) { - if (action.default !== SUPPRESS) { - let defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] - if (action.option_strings.length || defaulting_nargs.includes(action.nargs)) { - help += ' (default: %(default)s)' - } - } - } - return help - } -})) - - -const MetavarTypeHelpFormatter = _camelcase_alias(_callable(class MetavarTypeHelpFormatter extends HelpFormatter { - /* - * Help message formatter which uses the argument 'type' as the default - * metavar value (instead of the argument 'dest') - * - * Only the name of this class is considered a public API. All the methods - * provided by the class are considered an implementation detail. - */ - - _get_default_metavar_for_optional(action) { - return typeof action.type === 'function' ? action.type.name : action.type - } - - _get_default_metavar_for_positional(action) { - return typeof action.type === 'function' ? action.type.name : action.type - } -})) - - -// ===================== -// Options and Arguments -// ===================== -function _get_action_name(argument) { - if (argument === undefined) { - return undefined - } else if (argument.option_strings.length) { - return argument.option_strings.join('/') - } else if (![ undefined, SUPPRESS ].includes(argument.metavar)) { - return argument.metavar - } else if (![ undefined, SUPPRESS ].includes(argument.dest)) { - return argument.dest - } else { - return undefined - } -} - - -const ArgumentError = _callable(class ArgumentError extends Error { - /* - * An error from creating or using an argument (optional or positional). - * - * The string value of this exception is the message, augmented with - * information about the argument that caused it. - */ - - constructor(argument, message) { - super() - this.name = 'ArgumentError' - this._argument_name = _get_action_name(argument) - this._message = message - this.message = this.str() - } - - str() { - let format - if (this._argument_name === undefined) { - format = '%(message)s' - } else { - format = 'argument %(argument_name)s: %(message)s' - } - return sub(format, { message: this._message, - argument_name: this._argument_name }) - } -}) - - -const ArgumentTypeError = _callable(class ArgumentTypeError extends Error { - /* - * An error from trying to convert a command line string to a type. - */ - - constructor(message) { - super(message) - this.name = 'ArgumentTypeError' - } -}) - - -// ============== -// Action classes -// ============== -const Action = _camelcase_alias(_callable(class Action extends _AttributeHolder(Function) { - /* - * Information about how to convert command line strings to Python objects. - * - * Action objects are used by an ArgumentParser to represent the information - * needed to parse a single argument from one or more strings from the - * command line. The keyword arguments to the Action constructor are also - * all attributes of Action instances. - * - * Keyword Arguments: - * - * - option_strings -- A list of command-line option strings which - * should be associated with this action. - * - * - dest -- The name of the attribute to hold the created object(s) - * - * - nargs -- The number of command-line arguments that should be - * consumed. By default, one argument will be consumed and a single - * value will be produced. Other values include: - * - N (an integer) consumes N arguments (and produces a list) - * - '?' consumes zero or one arguments - * - '*' consumes zero or more arguments (and produces a list) - * - '+' consumes one or more arguments (and produces a list) - * Note that the difference between the default and nargs=1 is that - * with the default, a single value will be produced, while with - * nargs=1, a list containing a single value will be produced. - * - * - const -- The value to be produced if the option is specified and the - * option uses an action that takes no values. - * - * - default -- The value to be produced if the option is not specified. - * - * - type -- A callable that accepts a single string argument, and - * returns the converted value. The standard Python types str, int, - * float, and complex are useful examples of such callables. If None, - * str is used. - * - * - choices -- A container of values that should be allowed. If not None, - * after a command-line argument has been converted to the appropriate - * type, an exception will be raised if it is not a member of this - * collection. - * - * - required -- True if the action must always be specified at the - * command line. This is only meaningful for optional command-line - * arguments. - * - * - help -- The help string describing the argument. - * - * - metavar -- The name to be used for the option's argument with the - * help string. If None, the 'dest' value will be used as the name. - */ - - constructor() { - let [ - option_strings, - dest, - nargs, - const_value, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - nargs: undefined, - const: undefined, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - // when this class is called as a function, redirect it to .call() method of itself - super('return arguments.callee.call.apply(arguments.callee, arguments)') - - this.option_strings = option_strings - this.dest = dest - this.nargs = nargs - this.const = const_value - this.default = default_value - this.type = type - this.choices = choices - this.required = required - this.help = help - this.metavar = metavar - } - - _get_kwargs() { - let names = [ - 'option_strings', - 'dest', - 'nargs', - 'const', - 'default', - 'type', - 'choices', - 'help', - 'metavar' - ] - return names.map(name => [ name, getattr(this, name) ]) - } - - format_usage() { - return this.option_strings[0] - } - - call(/*parser, namespace, values, option_string = undefined*/) { - throw new Error('.call() not defined') - } -})) - - -const BooleanOptionalAction = _camelcase_alias(_callable(class BooleanOptionalAction extends Action { - - constructor() { - let [ - option_strings, - dest, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - let _option_strings = [] - for (let option_string of option_strings) { - _option_strings.push(option_string) - - if (option_string.startsWith('--')) { - option_string = '--no-' + option_string.slice(2) - _option_strings.push(option_string) - } - } - - if (help !== undefined && default_value !== undefined) { - help += ` (default: ${default_value})` - } - - super({ - option_strings: _option_strings, - dest, - nargs: 0, - default: default_value, - type, - choices, - required, - help, - metavar - }) - } - - call(parser, namespace, values, option_string = undefined) { - if (this.option_strings.includes(option_string)) { - setattr(namespace, this.dest, !option_string.startsWith('--no-')) - } - } - - format_usage() { - return this.option_strings.join(' | ') - } -})) - - -const _StoreAction = _callable(class _StoreAction extends Action { - - constructor() { - let [ - option_strings, - dest, - nargs, - const_value, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - nargs: undefined, - const: undefined, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - if (nargs === 0) { - throw new TypeError('nargs for store actions must be != 0; if you ' + - 'have nothing to store, actions such as store ' + - 'true or store const may be more appropriate') - } - if (const_value !== undefined && nargs !== OPTIONAL) { - throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) - } - super({ - option_strings, - dest, - nargs, - const: const_value, - default: default_value, - type, - choices, - required, - help, - metavar - }) - } - - call(parser, namespace, values/*, option_string = undefined*/) { - setattr(namespace, this.dest, values) - } -}) - - -const _StoreConstAction = _callable(class _StoreConstAction extends Action { - - constructor() { - let [ - option_strings, - dest, - const_value, - default_value, - required, - help - //, metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - const: no_default, - default: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - super({ - option_strings, - dest, - nargs: 0, - const: const_value, - default: default_value, - required, - help - }) - } - - call(parser, namespace/*, values, option_string = undefined*/) { - setattr(namespace, this.dest, this.const) - } -}) - - -const _StoreTrueAction = _callable(class _StoreTrueAction extends _StoreConstAction { - - constructor() { - let [ - option_strings, - dest, - default_value, - required, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: false, - required: false, - help: undefined - }) - - super({ - option_strings, - dest, - const: true, - default: default_value, - required, - help - }) - } -}) - - -const _StoreFalseAction = _callable(class _StoreFalseAction extends _StoreConstAction { - - constructor() { - let [ - option_strings, - dest, - default_value, - required, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: true, - required: false, - help: undefined - }) - - super({ - option_strings, - dest, - const: false, - default: default_value, - required, - help - }) - } -}) - - -const _AppendAction = _callable(class _AppendAction extends Action { - - constructor() { - let [ - option_strings, - dest, - nargs, - const_value, - default_value, - type, - choices, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - nargs: undefined, - const: undefined, - default: undefined, - type: undefined, - choices: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - if (nargs === 0) { - throw new TypeError('nargs for append actions must be != 0; if arg ' + - 'strings are not supplying the value to append, ' + - 'the append const action may be more appropriate') - } - if (const_value !== undefined && nargs !== OPTIONAL) { - throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL)) - } - super({ - option_strings, - dest, - nargs, - const: const_value, - default: default_value, - type, - choices, - required, - help, - metavar - }) - } - - call(parser, namespace, values/*, option_string = undefined*/) { - let items = getattr(namespace, this.dest, undefined) - items = _copy_items(items) - items.push(values) - setattr(namespace, this.dest, items) - } -}) - - -const _AppendConstAction = _callable(class _AppendConstAction extends Action { - - constructor() { - let [ - option_strings, - dest, - const_value, - default_value, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - const: no_default, - default: undefined, - required: false, - help: undefined, - metavar: undefined - }) - - super({ - option_strings, - dest, - nargs: 0, - const: const_value, - default: default_value, - required, - help, - metavar - }) - } - - call(parser, namespace/*, values, option_string = undefined*/) { - let items = getattr(namespace, this.dest, undefined) - items = _copy_items(items) - items.push(this.const) - setattr(namespace, this.dest, items) - } -}) - - -const _CountAction = _callable(class _CountAction extends Action { - - constructor() { - let [ - option_strings, - dest, - default_value, - required, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: no_default, - default: undefined, - required: false, - help: undefined - }) - - super({ - option_strings, - dest, - nargs: 0, - default: default_value, - required, - help - }) - } - - call(parser, namespace/*, values, option_string = undefined*/) { - let count = getattr(namespace, this.dest, undefined) - if (count === undefined) { - count = 0 - } - setattr(namespace, this.dest, count + 1) - } -}) - - -const _HelpAction = _callable(class _HelpAction extends Action { - - constructor() { - let [ - option_strings, - dest, - default_value, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - dest: SUPPRESS, - default: SUPPRESS, - help: undefined - }) - - super({ - option_strings, - dest, - default: default_value, - nargs: 0, - help - }) - } - - call(parser/*, namespace, values, option_string = undefined*/) { - parser.print_help() - parser.exit() - } -}) - - -const _VersionAction = _callable(class _VersionAction extends Action { - - constructor() { - let [ - option_strings, - version, - dest, - default_value, - help - ] = _parse_opts(arguments, { - option_strings: no_default, - version: undefined, - dest: SUPPRESS, - default: SUPPRESS, - help: "show program's version number and exit" - }) - - super({ - option_strings, - dest, - default: default_value, - nargs: 0, - help - }) - this.version = version - } - - call(parser/*, namespace, values, option_string = undefined*/) { - let version = this.version - if (version === undefined) { - version = parser.version - } - let formatter = parser._get_formatter() - formatter.add_text(version) - parser._print_message(formatter.format_help(), process.stdout) - parser.exit() - } -}) - - -const _SubParsersAction = _camelcase_alias(_callable(class _SubParsersAction extends Action { - - constructor() { - let [ - option_strings, - prog, - parser_class, - dest, - required, - help, - metavar - ] = _parse_opts(arguments, { - option_strings: no_default, - prog: no_default, - parser_class: no_default, - dest: SUPPRESS, - required: false, - help: undefined, - metavar: undefined - }) - - let name_parser_map = {} - - super({ - option_strings, - dest, - nargs: PARSER, - choices: name_parser_map, - required, - help, - metavar - }) - - this._prog_prefix = prog - this._parser_class = parser_class - this._name_parser_map = name_parser_map - this._choices_actions = [] - } - - add_parser() { - let [ - name, - kwargs - ] = _parse_opts(arguments, { - name: no_default, - '**kwargs': no_default - }) - - // set prog from the existing prefix - if (kwargs.prog === undefined) { - kwargs.prog = sub('%s %s', this._prog_prefix, name) - } - - let aliases = getattr(kwargs, 'aliases', []) - delete kwargs.aliases - - // create a pseudo-action to hold the choice help - if ('help' in kwargs) { - let help = kwargs.help - delete kwargs.help - let choice_action = this._ChoicesPseudoAction(name, aliases, help) - this._choices_actions.push(choice_action) - } - - // create the parser and add it to the map - let parser = new this._parser_class(kwargs) - this._name_parser_map[name] = parser - - // make parser available under aliases also - for (let alias of aliases) { - this._name_parser_map[alias] = parser - } - - return parser - } - - _get_subactions() { - return this._choices_actions - } - - call(parser, namespace, values/*, option_string = undefined*/) { - let parser_name = values[0] - let arg_strings = values.slice(1) - - // set the parser name if requested - if (this.dest !== SUPPRESS) { - setattr(namespace, this.dest, parser_name) - } - - // select the parser - if (hasattr(this._name_parser_map, parser_name)) { - parser = this._name_parser_map[parser_name] - } else { - let args = {parser_name, - choices: this._name_parser_map.join(', ')} - let msg = sub('unknown parser %(parser_name)r (choices: %(choices)s)', args) - throw new ArgumentError(this, msg) - } - - // parse all the remaining options into the namespace - // store any unrecognized options on the object, so that the top - // level parser can decide what to do with them - - // In case this subparser defines new defaults, we parse them - // in a new namespace object and then update the original - // namespace for the relevant parts. - let subnamespace - [ subnamespace, arg_strings ] = parser.parse_known_args(arg_strings, undefined) - for (let [ key, value ] of Object.entries(subnamespace)) { - setattr(namespace, key, value) - } - - if (arg_strings.length) { - setdefault(namespace, _UNRECOGNIZED_ARGS_ATTR, []) - getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).push(...arg_strings) - } - } -})) - - -_SubParsersAction.prototype._ChoicesPseudoAction = _callable(class _ChoicesPseudoAction extends Action { - constructor(name, aliases, help) { - let metavar = name, dest = name - if (aliases.length) { - metavar += sub(' (%s)', aliases.join(', ')) - } - super({ option_strings: [], dest, help, metavar }) - } -}) - - -const _ExtendAction = _callable(class _ExtendAction extends _AppendAction { - call(parser, namespace, values/*, option_string = undefined*/) { - let items = getattr(namespace, this.dest, undefined) - items = _copy_items(items) - items = items.concat(values) - setattr(namespace, this.dest, items) - } -}) - - -// ============== -// Type classes -// ============== -const FileType = _callable(class FileType extends Function { - /* - * Factory for creating file object types - * - * Instances of FileType are typically passed as type= arguments to the - * ArgumentParser add_argument() method. - * - * Keyword Arguments: - * - mode -- A string indicating how the file is to be opened. Accepts the - * same values as the builtin open() function. - * - bufsize -- The file's desired buffer size. Accepts the same values as - * the builtin open() function. - * - encoding -- The file's encoding. Accepts the same values as the - * builtin open() function. - * - errors -- A string indicating how encoding and decoding errors are to - * be handled. Accepts the same value as the builtin open() function. - */ - - constructor() { - let [ - flags, - encoding, - mode, - autoClose, - emitClose, - start, - end, - highWaterMark, - fs - ] = _parse_opts(arguments, { - flags: 'r', - encoding: undefined, - mode: undefined, // 0o666 - autoClose: undefined, // true - emitClose: undefined, // false - start: undefined, // 0 - end: undefined, // Infinity - highWaterMark: undefined, // 64 * 1024 - fs: undefined - }) - - // when this class is called as a function, redirect it to .call() method of itself - super('return arguments.callee.call.apply(arguments.callee, arguments)') - - Object.defineProperty(this, 'name', { - get() { - return sub('FileType(%r)', flags) - } - }) - this._flags = flags - this._options = {} - if (encoding !== undefined) this._options.encoding = encoding - if (mode !== undefined) this._options.mode = mode - if (autoClose !== undefined) this._options.autoClose = autoClose - if (emitClose !== undefined) this._options.emitClose = emitClose - if (start !== undefined) this._options.start = start - if (end !== undefined) this._options.end = end - if (highWaterMark !== undefined) this._options.highWaterMark = highWaterMark - if (fs !== undefined) this._options.fs = fs - } - - call(string) { - // the special argument "-" means sys.std{in,out} - if (string === '-') { - if (this._flags.includes('r')) { - return process.stdin - } else if (this._flags.includes('w')) { - return process.stdout - } else { - let msg = sub('argument "-" with mode %r', this._flags) - throw new TypeError(msg) - } - } - - // all other arguments are used as file names - let fd - try { - fd = fs.openSync(string, this._flags, this._options.mode) - } catch (e) { - let args = { filename: string, error: e.message } - let message = "can't open '%(filename)s': %(error)s" - throw new ArgumentTypeError(sub(message, args)) - } - - let options = Object.assign({ fd, flags: this._flags }, this._options) - if (this._flags.includes('r')) { - return fs.createReadStream(undefined, options) - } else if (this._flags.includes('w')) { - return fs.createWriteStream(undefined, options) - } else { - let msg = sub('argument "%s" with mode %r', string, this._flags) - throw new TypeError(msg) - } - } - - [util.inspect.custom]() { - let args = [ this._flags ] - let kwargs = Object.entries(this._options).map(([ k, v ]) => { - if (k === 'mode') v = { value: v, [util.inspect.custom]() { return '0o' + this.value.toString(8) } } - return [ k, v ] - }) - let args_str = [] - .concat(args.filter(arg => arg !== -1).map(repr)) - .concat(kwargs.filter(([/*kw*/, arg]) => arg !== undefined) - .map(([kw, arg]) => sub('%s=%r', kw, arg))) - .join(', ') - return sub('%s(%s)', this.constructor.name, args_str) - } - - toString() { - return this[util.inspect.custom]() - } -}) - -// =========================== -// Optional and Positional Parsing -// =========================== -const Namespace = _callable(class Namespace extends _AttributeHolder() { - /* - * Simple object for storing attributes. - * - * Implements equality by attribute names and values, and provides a simple - * string representation. - */ - - constructor(options = {}) { - super() - Object.assign(this, options) - } -}) - -// unset string tag to mimic plain object -Namespace.prototype[Symbol.toStringTag] = undefined - - -const _ActionsContainer = _camelcase_alias(_callable(class _ActionsContainer { - - constructor() { - let [ - description, - prefix_chars, - argument_default, - conflict_handler - ] = _parse_opts(arguments, { - description: no_default, - prefix_chars: no_default, - argument_default: no_default, - conflict_handler: no_default - }) - - this.description = description - this.argument_default = argument_default - this.prefix_chars = prefix_chars - this.conflict_handler = conflict_handler - - // set up registries - this._registries = {} - - // register actions - this.register('action', undefined, _StoreAction) - this.register('action', 'store', _StoreAction) - this.register('action', 'store_const', _StoreConstAction) - this.register('action', 'store_true', _StoreTrueAction) - this.register('action', 'store_false', _StoreFalseAction) - this.register('action', 'append', _AppendAction) - this.register('action', 'append_const', _AppendConstAction) - this.register('action', 'count', _CountAction) - this.register('action', 'help', _HelpAction) - this.register('action', 'version', _VersionAction) - this.register('action', 'parsers', _SubParsersAction) - this.register('action', 'extend', _ExtendAction) - // LEGACY (v1 compatibility): camelcase variants - ;[ 'storeConst', 'storeTrue', 'storeFalse', 'appendConst' ].forEach(old_name => { - let new_name = _to_new_name(old_name) - this.register('action', old_name, util.deprecate(this._registry_get('action', new_name), - sub('{action: "%s"} is renamed to {action: "%s"}', old_name, new_name))) - }) - // end - - // raise an exception if the conflict handler is invalid - this._get_handler() - - // action storage - this._actions = [] - this._option_string_actions = {} - - // groups - this._action_groups = [] - this._mutually_exclusive_groups = [] - - // defaults storage - this._defaults = {} - - // determines whether an "option" looks like a negative number - this._negative_number_matcher = /^-\d+$|^-\d*\.\d+$/ - - // whether or not there are any optionals that look like negative - // numbers -- uses a list so it can be shared and edited - this._has_negative_number_optionals = [] - } - - // ==================== - // Registration methods - // ==================== - register(registry_name, value, object) { - let registry = setdefault(this._registries, registry_name, {}) - registry[value] = object - } - - _registry_get(registry_name, value, default_value = undefined) { - return getattr(this._registries[registry_name], value, default_value) - } - - // ================================== - // Namespace default accessor methods - // ================================== - set_defaults(kwargs) { - Object.assign(this._defaults, kwargs) - - // if these defaults match any existing arguments, replace - // the previous default on the object with the new one - for (let action of this._actions) { - if (action.dest in kwargs) { - action.default = kwargs[action.dest] - } - } - } - - get_default(dest) { - for (let action of this._actions) { - if (action.dest === dest && action.default !== undefined) { - return action.default - } - } - return this._defaults[dest] - } - - - // ======================= - // Adding argument actions - // ======================= - add_argument() { - /* - * add_argument(dest, ..., name=value, ...) - * add_argument(option_string, option_string, ..., name=value, ...) - */ - let [ - args, - kwargs - ] = _parse_opts(arguments, { - '*args': no_default, - '**kwargs': no_default - }) - // LEGACY (v1 compatibility), old-style add_argument([ args ], { options }) - if (args.length === 1 && Array.isArray(args[0])) { - args = args[0] - deprecate('argument-array', - sub('use add_argument(%(args)s, {...}) instead of add_argument([ %(args)s ], { ... })', { - args: args.map(repr).join(', ') - })) - } - // end - - // if no positional args are supplied or only one is supplied and - // it doesn't look like an option string, parse a positional - // argument - let chars = this.prefix_chars - if (!args.length || args.length === 1 && !chars.includes(args[0][0])) { - if (args.length && 'dest' in kwargs) { - throw new TypeError('dest supplied twice for positional argument') - } - kwargs = this._get_positional_kwargs(...args, kwargs) - - // otherwise, we're adding an optional argument - } else { - kwargs = this._get_optional_kwargs(...args, kwargs) - } - - // if no default was supplied, use the parser-level default - if (!('default' in kwargs)) { - let dest = kwargs.dest - if (dest in this._defaults) { - kwargs.default = this._defaults[dest] - } else if (this.argument_default !== undefined) { - kwargs.default = this.argument_default - } - } - - // create the action object, and add it to the parser - let action_class = this._pop_action_class(kwargs) - if (typeof action_class !== 'function') { - throw new TypeError(sub('unknown action "%s"', action_class)) - } - // eslint-disable-next-line new-cap - let action = new action_class(kwargs) - - // raise an error if the action type is not callable - let type_func = this._registry_get('type', action.type, action.type) - if (typeof type_func !== 'function') { - throw new TypeError(sub('%r is not callable', type_func)) - } - - if (type_func === FileType) { - throw new TypeError(sub('%r is a FileType class object, instance of it' + - ' must be passed', type_func)) - } - - // raise an error if the metavar does not match the type - if ('_get_formatter' in this) { - try { - this._get_formatter()._format_args(action, undefined) - } catch (err) { - // check for 'invalid nargs value' is an artifact of TypeError and ValueError in js being the same - if (err instanceof TypeError && err.message !== 'invalid nargs value') { - throw new TypeError('length of metavar tuple does not match nargs') - } else { - throw err - } - } - } - - return this._add_action(action) - } - - add_argument_group() { - let group = _ArgumentGroup(this, ...arguments) - this._action_groups.push(group) - return group - } - - add_mutually_exclusive_group() { - // eslint-disable-next-line no-use-before-define - let group = _MutuallyExclusiveGroup(this, ...arguments) - this._mutually_exclusive_groups.push(group) - return group - } - - _add_action(action) { - // resolve any conflicts - this._check_conflict(action) - - // add to actions list - this._actions.push(action) - action.container = this - - // index the action by any option strings it has - for (let option_string of action.option_strings) { - this._option_string_actions[option_string] = action - } - - // set the flag if any option strings look like negative numbers - for (let option_string of action.option_strings) { - if (this._negative_number_matcher.test(option_string)) { - if (!this._has_negative_number_optionals.length) { - this._has_negative_number_optionals.push(true) - } - } - } - - // return the created action - return action - } - - _remove_action(action) { - _array_remove(this._actions, action) - } - - _add_container_actions(container) { - // collect groups by titles - let title_group_map = {} - for (let group of this._action_groups) { - if (group.title in title_group_map) { - let msg = 'cannot merge actions - two groups are named %r' - throw new TypeError(sub(msg, group.title)) - } - title_group_map[group.title] = group - } - - // map each action to its group - let group_map = new Map() - for (let group of container._action_groups) { - - // if a group with the title exists, use that, otherwise - // create a new group matching the container's group - if (!(group.title in title_group_map)) { - title_group_map[group.title] = this.add_argument_group({ - title: group.title, - description: group.description, - conflict_handler: group.conflict_handler - }) - } - - // map the actions to their new group - for (let action of group._group_actions) { - group_map.set(action, title_group_map[group.title]) - } - } - - // add container's mutually exclusive groups - // NOTE: if add_mutually_exclusive_group ever gains title= and - // description= then this code will need to be expanded as above - for (let group of container._mutually_exclusive_groups) { - let mutex_group = this.add_mutually_exclusive_group({ - required: group.required - }) - - // map the actions to their new mutex group - for (let action of group._group_actions) { - group_map.set(action, mutex_group) - } - } - - // add all actions to this container or their group - for (let action of container._actions) { - group_map.get(action)._add_action(action) - } - } - - _get_positional_kwargs() { - let [ - dest, - kwargs - ] = _parse_opts(arguments, { - dest: no_default, - '**kwargs': no_default - }) - - // make sure required is not specified - if ('required' in kwargs) { - let msg = "'required' is an invalid argument for positionals" - throw new TypeError(msg) - } - - // mark positional arguments as required if at least one is - // always required - if (![OPTIONAL, ZERO_OR_MORE].includes(kwargs.nargs)) { - kwargs.required = true - } - if (kwargs.nargs === ZERO_OR_MORE && !('default' in kwargs)) { - kwargs.required = true - } - - // return the keyword arguments with no option strings - return Object.assign(kwargs, { dest, option_strings: [] }) - } - - _get_optional_kwargs() { - let [ - args, - kwargs - ] = _parse_opts(arguments, { - '*args': no_default, - '**kwargs': no_default - }) - - // determine short and long option strings - let option_strings = [] - let long_option_strings = [] - let option_string - for (option_string of args) { - // error on strings that don't start with an appropriate prefix - if (!this.prefix_chars.includes(option_string[0])) { - let args = {option: option_string, - prefix_chars: this.prefix_chars} - let msg = 'invalid option string %(option)r: ' + - 'must start with a character %(prefix_chars)r' - throw new TypeError(sub(msg, args)) - } - - // strings starting with two prefix characters are long options - option_strings.push(option_string) - if (option_string.length > 1 && this.prefix_chars.includes(option_string[1])) { - long_option_strings.push(option_string) - } - } - - // infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' - let dest = kwargs.dest - delete kwargs.dest - if (dest === undefined) { - let dest_option_string - if (long_option_strings.length) { - dest_option_string = long_option_strings[0] - } else { - dest_option_string = option_strings[0] - } - dest = _string_lstrip(dest_option_string, this.prefix_chars) - if (!dest) { - let msg = 'dest= is required for options like %r' - throw new TypeError(sub(msg, option_string)) - } - dest = dest.replace(/-/g, '_') - } - - // return the updated keyword arguments - return Object.assign(kwargs, { dest, option_strings }) - } - - _pop_action_class(kwargs, default_value = undefined) { - let action = getattr(kwargs, 'action', default_value) - delete kwargs.action - return this._registry_get('action', action, action) - } - - _get_handler() { - // determine function from conflict handler string - let handler_func_name = sub('_handle_conflict_%s', this.conflict_handler) - if (typeof this[handler_func_name] === 'function') { - return this[handler_func_name] - } else { - let msg = 'invalid conflict_resolution value: %r' - throw new TypeError(sub(msg, this.conflict_handler)) - } - } - - _check_conflict(action) { - - // find all options that conflict with this option - let confl_optionals = [] - for (let option_string of action.option_strings) { - if (hasattr(this._option_string_actions, option_string)) { - let confl_optional = this._option_string_actions[option_string] - confl_optionals.push([ option_string, confl_optional ]) - } - } - - // resolve any conflicts - if (confl_optionals.length) { - let conflict_handler = this._get_handler() - conflict_handler.call(this, action, confl_optionals) - } - } - - _handle_conflict_error(action, conflicting_actions) { - let message = conflicting_actions.length === 1 ? - 'conflicting option string: %s' : - 'conflicting option strings: %s' - let conflict_string = conflicting_actions.map(([ option_string/*, action*/ ]) => option_string).join(', ') - throw new ArgumentError(action, sub(message, conflict_string)) - } - - _handle_conflict_resolve(action, conflicting_actions) { - - // remove all conflicting options - for (let [ option_string, action ] of conflicting_actions) { - - // remove the conflicting option - _array_remove(action.option_strings, option_string) - delete this._option_string_actions[option_string] - - // if the option now has no option string, remove it from the - // container holding it - if (!action.option_strings.length) { - action.container._remove_action(action) - } - } - } -})) - - -const _ArgumentGroup = _callable(class _ArgumentGroup extends _ActionsContainer { - - constructor() { - let [ - container, - title, - description, - kwargs - ] = _parse_opts(arguments, { - container: no_default, - title: undefined, - description: undefined, - '**kwargs': no_default - }) - - // add any missing keyword arguments by checking the container - setdefault(kwargs, 'conflict_handler', container.conflict_handler) - setdefault(kwargs, 'prefix_chars', container.prefix_chars) - setdefault(kwargs, 'argument_default', container.argument_default) - super(Object.assign({ description }, kwargs)) - - // group attributes - this.title = title - this._group_actions = [] - - // share most attributes with the container - this._registries = container._registries - this._actions = container._actions - this._option_string_actions = container._option_string_actions - this._defaults = container._defaults - this._has_negative_number_optionals = - container._has_negative_number_optionals - this._mutually_exclusive_groups = container._mutually_exclusive_groups - } - - _add_action(action) { - action = super._add_action(action) - this._group_actions.push(action) - return action - } - - _remove_action(action) { - super._remove_action(action) - _array_remove(this._group_actions, action) - } -}) - - -const _MutuallyExclusiveGroup = _callable(class _MutuallyExclusiveGroup extends _ArgumentGroup { - - constructor() { - let [ - container, - required - ] = _parse_opts(arguments, { - container: no_default, - required: false - }) - - super(container) - this.required = required - this._container = container - } - - _add_action(action) { - if (action.required) { - let msg = 'mutually exclusive arguments must be optional' - throw new TypeError(msg) - } - action = this._container._add_action(action) - this._group_actions.push(action) - return action - } - - _remove_action(action) { - this._container._remove_action(action) - _array_remove(this._group_actions, action) - } -}) - - -const ArgumentParser = _camelcase_alias(_callable(class ArgumentParser extends _AttributeHolder(_ActionsContainer) { - /* - * Object for parsing command line strings into Python objects. - * - * Keyword Arguments: - * - prog -- The name of the program (default: sys.argv[0]) - * - usage -- A usage message (default: auto-generated from arguments) - * - description -- A description of what the program does - * - epilog -- Text following the argument descriptions - * - parents -- Parsers whose arguments should be copied into this one - * - formatter_class -- HelpFormatter class for printing help messages - * - prefix_chars -- Characters that prefix optional arguments - * - fromfile_prefix_chars -- Characters that prefix files containing - * additional arguments - * - argument_default -- The default value for all arguments - * - conflict_handler -- String indicating how to handle conflicts - * - add_help -- Add a -h/-help option - * - allow_abbrev -- Allow long options to be abbreviated unambiguously - * - exit_on_error -- Determines whether or not ArgumentParser exits with - * error info when an error occurs - */ - - constructor() { - let [ - prog, - usage, - description, - epilog, - parents, - formatter_class, - prefix_chars, - fromfile_prefix_chars, - argument_default, - conflict_handler, - add_help, - allow_abbrev, - exit_on_error, - debug, // LEGACY (v1 compatibility), debug mode - version // LEGACY (v1 compatibility), version - ] = _parse_opts(arguments, { - prog: undefined, - usage: undefined, - description: undefined, - epilog: undefined, - parents: [], - formatter_class: HelpFormatter, - prefix_chars: '-', - fromfile_prefix_chars: undefined, - argument_default: undefined, - conflict_handler: 'error', - add_help: true, - allow_abbrev: true, - exit_on_error: true, - debug: undefined, // LEGACY (v1 compatibility), debug mode - version: undefined // LEGACY (v1 compatibility), version - }) - - // LEGACY (v1 compatibility) - if (debug !== undefined) { - deprecate('debug', - 'The "debug" argument to ArgumentParser is deprecated. Please ' + - 'override ArgumentParser.exit function instead.' - ) - } - - if (version !== undefined) { - deprecate('version', - 'The "version" argument to ArgumentParser is deprecated. Please use ' + - "add_argument(..., { action: 'version', version: 'N', ... }) instead." - ) - } - // end - - super({ - description, - prefix_chars, - argument_default, - conflict_handler - }) - - // default setting for prog - if (prog === undefined) { - prog = path.basename(get_argv()[0] || '') - } - - this.prog = prog - this.usage = usage - this.epilog = epilog - this.formatter_class = formatter_class - this.fromfile_prefix_chars = fromfile_prefix_chars - this.add_help = add_help - this.allow_abbrev = allow_abbrev - this.exit_on_error = exit_on_error - // LEGACY (v1 compatibility), debug mode - this.debug = debug - // end - - this._positionals = this.add_argument_group('positional arguments') - this._optionals = this.add_argument_group('optional arguments') - this._subparsers = undefined - - // register types - function identity(string) { - return string - } - this.register('type', undefined, identity) - this.register('type', null, identity) - this.register('type', 'auto', identity) - this.register('type', 'int', function (x) { - let result = Number(x) - if (!Number.isInteger(result)) { - throw new TypeError(sub('could not convert string to int: %r', x)) - } - return result - }) - this.register('type', 'float', function (x) { - let result = Number(x) - if (isNaN(result)) { - throw new TypeError(sub('could not convert string to float: %r', x)) - } - return result - }) - this.register('type', 'str', String) - // LEGACY (v1 compatibility): custom types - this.register('type', 'string', - util.deprecate(String, 'use {type:"str"} or {type:String} instead of {type:"string"}')) - // end - - // add help argument if necessary - // (using explicit default to override global argument_default) - let default_prefix = prefix_chars.includes('-') ? '-' : prefix_chars[0] - if (this.add_help) { - this.add_argument( - default_prefix + 'h', - default_prefix.repeat(2) + 'help', - { - action: 'help', - default: SUPPRESS, - help: 'show this help message and exit' - } - ) - } - // LEGACY (v1 compatibility), version - if (version) { - this.add_argument( - default_prefix + 'v', - default_prefix.repeat(2) + 'version', - { - action: 'version', - default: SUPPRESS, - version: this.version, - help: "show program's version number and exit" - } - ) - } - // end - - // add parent arguments and defaults - for (let parent of parents) { - this._add_container_actions(parent) - Object.assign(this._defaults, parent._defaults) - } - } - - // ======================= - // Pretty __repr__ methods - // ======================= - _get_kwargs() { - let names = [ - 'prog', - 'usage', - 'description', - 'formatter_class', - 'conflict_handler', - 'add_help' - ] - return names.map(name => [ name, getattr(this, name) ]) - } - - // ================================== - // Optional/Positional adding methods - // ================================== - add_subparsers() { - let [ - kwargs - ] = _parse_opts(arguments, { - '**kwargs': no_default - }) - - if (this._subparsers !== undefined) { - this.error('cannot have multiple subparser arguments') - } - - // add the parser class to the arguments if it's not present - setdefault(kwargs, 'parser_class', this.constructor) - - if ('title' in kwargs || 'description' in kwargs) { - let title = getattr(kwargs, 'title', 'subcommands') - let description = getattr(kwargs, 'description', undefined) - delete kwargs.title - delete kwargs.description - this._subparsers = this.add_argument_group(title, description) - } else { - this._subparsers = this._positionals - } - - // prog defaults to the usage message of this parser, skipping - // optional arguments and with no "usage:" prefix - if (kwargs.prog === undefined) { - let formatter = this._get_formatter() - let positionals = this._get_positional_actions() - let groups = this._mutually_exclusive_groups - formatter.add_usage(this.usage, positionals, groups, '') - kwargs.prog = formatter.format_help().trim() - } - - // create the parsers action and add it to the positionals list - let parsers_class = this._pop_action_class(kwargs, 'parsers') - // eslint-disable-next-line new-cap - let action = new parsers_class(Object.assign({ option_strings: [] }, kwargs)) - this._subparsers._add_action(action) - - // return the created parsers action - return action - } - - _add_action(action) { - if (action.option_strings.length) { - this._optionals._add_action(action) - } else { - this._positionals._add_action(action) - } - return action - } - - _get_optional_actions() { - return this._actions.filter(action => action.option_strings.length) - } - - _get_positional_actions() { - return this._actions.filter(action => !action.option_strings.length) - } - - // ===================================== - // Command line argument parsing methods - // ===================================== - parse_args(args = undefined, namespace = undefined) { - let argv - [ args, argv ] = this.parse_known_args(args, namespace) - if (argv && argv.length > 0) { - let msg = 'unrecognized arguments: %s' - this.error(sub(msg, argv.join(' '))) - } - return args - } - - parse_known_args(args = undefined, namespace = undefined) { - if (args === undefined) { - args = get_argv().slice(1) - } - - // default Namespace built from parser defaults - if (namespace === undefined) { - namespace = new Namespace() - } - - // add any action defaults that aren't present - for (let action of this._actions) { - if (action.dest !== SUPPRESS) { - if (!hasattr(namespace, action.dest)) { - if (action.default !== SUPPRESS) { - setattr(namespace, action.dest, action.default) - } - } - } - } - - // add any parser defaults that aren't present - for (let dest of Object.keys(this._defaults)) { - if (!hasattr(namespace, dest)) { - setattr(namespace, dest, this._defaults[dest]) - } - } - - // parse the arguments and exit if there are any errors - if (this.exit_on_error) { - try { - [ namespace, args ] = this._parse_known_args(args, namespace) - } catch (err) { - if (err instanceof ArgumentError) { - this.error(err.message) - } else { - throw err - } - } - } else { - [ namespace, args ] = this._parse_known_args(args, namespace) - } - - if (hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) { - args = args.concat(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) - delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) - } - - return [ namespace, args ] - } - - _parse_known_args(arg_strings, namespace) { - // replace arg strings that are file references - if (this.fromfile_prefix_chars !== undefined) { - arg_strings = this._read_args_from_files(arg_strings) - } - - // map all mutually exclusive arguments to the other arguments - // they can't occur with - let action_conflicts = new Map() - for (let mutex_group of this._mutually_exclusive_groups) { - let group_actions = mutex_group._group_actions - for (let [ i, mutex_action ] of Object.entries(mutex_group._group_actions)) { - let conflicts = action_conflicts.get(mutex_action) || [] - conflicts = conflicts.concat(group_actions.slice(0, +i)) - conflicts = conflicts.concat(group_actions.slice(+i + 1)) - action_conflicts.set(mutex_action, conflicts) - } - } - - // find all option indices, and determine the arg_string_pattern - // which has an 'O' if there is an option at an index, - // an 'A' if there is an argument, or a '-' if there is a '--' - let option_string_indices = {} - let arg_string_pattern_parts = [] - let arg_strings_iter = Object.entries(arg_strings)[Symbol.iterator]() - for (let [ i, arg_string ] of arg_strings_iter) { - - // all args after -- are non-options - if (arg_string === '--') { - arg_string_pattern_parts.push('-') - for ([ i, arg_string ] of arg_strings_iter) { - arg_string_pattern_parts.push('A') - } - - // otherwise, add the arg to the arg strings - // and note the index if it was an option - } else { - let option_tuple = this._parse_optional(arg_string) - let pattern - if (option_tuple === undefined) { - pattern = 'A' - } else { - option_string_indices[i] = option_tuple - pattern = 'O' - } - arg_string_pattern_parts.push(pattern) - } - } - - // join the pieces together to form the pattern - let arg_strings_pattern = arg_string_pattern_parts.join('') - - // converts arg strings to the appropriate and then takes the action - let seen_actions = new Set() - let seen_non_default_actions = new Set() - let extras - - let take_action = (action, argument_strings, option_string = undefined) => { - seen_actions.add(action) - let argument_values = this._get_values(action, argument_strings) - - // error if this argument is not allowed with other previously - // seen arguments, assuming that actions that use the default - // value don't really count as "present" - if (argument_values !== action.default) { - seen_non_default_actions.add(action) - for (let conflict_action of action_conflicts.get(action) || []) { - if (seen_non_default_actions.has(conflict_action)) { - let msg = 'not allowed with argument %s' - let action_name = _get_action_name(conflict_action) - throw new ArgumentError(action, sub(msg, action_name)) - } - } - } - - // take the action if we didn't receive a SUPPRESS value - // (e.g. from a default) - if (argument_values !== SUPPRESS) { - action(this, namespace, argument_values, option_string) - } - } - - // function to convert arg_strings into an optional action - let consume_optional = start_index => { - - // get the optional identified at this index - let option_tuple = option_string_indices[start_index] - let [ action, option_string, explicit_arg ] = option_tuple - - // identify additional optionals in the same arg string - // (e.g. -xyz is the same as -x -y -z if no args are required) - let action_tuples = [] - let stop - for (;;) { - - // if we found no optional action, skip it - if (action === undefined) { - extras.push(arg_strings[start_index]) - return start_index + 1 - } - - // if there is an explicit argument, try to match the - // optional's string arguments to only this - if (explicit_arg !== undefined) { - let arg_count = this._match_argument(action, 'A') - - // if the action is a single-dash option and takes no - // arguments, try to parse more single-dash options out - // of the tail of the option string - let chars = this.prefix_chars - if (arg_count === 0 && !chars.includes(option_string[1])) { - action_tuples.push([ action, [], option_string ]) - let char = option_string[0] - option_string = char + explicit_arg[0] - let new_explicit_arg = explicit_arg.slice(1) || undefined - let optionals_map = this._option_string_actions - if (hasattr(optionals_map, option_string)) { - action = optionals_map[option_string] - explicit_arg = new_explicit_arg - } else { - let msg = 'ignored explicit argument %r' - throw new ArgumentError(action, sub(msg, explicit_arg)) - } - - // if the action expect exactly one argument, we've - // successfully matched the option; exit the loop - } else if (arg_count === 1) { - stop = start_index + 1 - let args = [ explicit_arg ] - action_tuples.push([ action, args, option_string ]) - break - - // error if a double-dash option did not use the - // explicit argument - } else { - let msg = 'ignored explicit argument %r' - throw new ArgumentError(action, sub(msg, explicit_arg)) - } - - // if there is no explicit argument, try to match the - // optional's string arguments with the following strings - // if successful, exit the loop - } else { - let start = start_index + 1 - let selected_patterns = arg_strings_pattern.slice(start) - let arg_count = this._match_argument(action, selected_patterns) - stop = start + arg_count - let args = arg_strings.slice(start, stop) - action_tuples.push([ action, args, option_string ]) - break - } - } - - // add the Optional to the list and return the index at which - // the Optional's string args stopped - assert(action_tuples.length) - for (let [ action, args, option_string ] of action_tuples) { - take_action(action, args, option_string) - } - return stop - } - - // the list of Positionals left to be parsed; this is modified - // by consume_positionals() - let positionals = this._get_positional_actions() - - // function to convert arg_strings into positional actions - let consume_positionals = start_index => { - // match as many Positionals as possible - let selected_pattern = arg_strings_pattern.slice(start_index) - let arg_counts = this._match_arguments_partial(positionals, selected_pattern) - - // slice off the appropriate arg strings for each Positional - // and add the Positional and its args to the list - for (let i = 0; i < positionals.length && i < arg_counts.length; i++) { - let action = positionals[i] - let arg_count = arg_counts[i] - let args = arg_strings.slice(start_index, start_index + arg_count) - start_index += arg_count - take_action(action, args) - } - - // slice off the Positionals that we just parsed and return the - // index at which the Positionals' string args stopped - positionals = positionals.slice(arg_counts.length) - return start_index - } - - // consume Positionals and Optionals alternately, until we have - // passed the last option string - extras = [] - let start_index = 0 - let max_option_string_index = Math.max(-1, ...Object.keys(option_string_indices).map(Number)) - while (start_index <= max_option_string_index) { - - // consume any Positionals preceding the next option - let next_option_string_index = Math.min( - // eslint-disable-next-line no-loop-func - ...Object.keys(option_string_indices).map(Number).filter(index => index >= start_index) - ) - if (start_index !== next_option_string_index) { - let positionals_end_index = consume_positionals(start_index) - - // only try to parse the next optional if we didn't consume - // the option string during the positionals parsing - if (positionals_end_index > start_index) { - start_index = positionals_end_index - continue - } else { - start_index = positionals_end_index - } - } - - // if we consumed all the positionals we could and we're not - // at the index of an option string, there were extra arguments - if (!(start_index in option_string_indices)) { - let strings = arg_strings.slice(start_index, next_option_string_index) - extras = extras.concat(strings) - start_index = next_option_string_index - } - - // consume the next optional and any arguments for it - start_index = consume_optional(start_index) - } - - // consume any positionals following the last Optional - let stop_index = consume_positionals(start_index) - - // if we didn't consume all the argument strings, there were extras - extras = extras.concat(arg_strings.slice(stop_index)) - - // make sure all required actions were present and also convert - // action defaults which were not given as arguments - let required_actions = [] - for (let action of this._actions) { - if (!seen_actions.has(action)) { - if (action.required) { - required_actions.push(_get_action_name(action)) - } else { - // Convert action default now instead of doing it before - // parsing arguments to avoid calling convert functions - // twice (which may fail) if the argument was given, but - // only if it was defined already in the namespace - if (action.default !== undefined && - typeof action.default === 'string' && - hasattr(namespace, action.dest) && - action.default === getattr(namespace, action.dest)) { - setattr(namespace, action.dest, - this._get_value(action, action.default)) - } - } - } - } - - if (required_actions.length) { - this.error(sub('the following arguments are required: %s', - required_actions.join(', '))) - } - - // make sure all required groups had one option present - for (let group of this._mutually_exclusive_groups) { - if (group.required) { - let no_actions_used = true - for (let action of group._group_actions) { - if (seen_non_default_actions.has(action)) { - no_actions_used = false - break - } - } - - // if no actions were used, report the error - if (no_actions_used) { - let names = group._group_actions - .filter(action => action.help !== SUPPRESS) - .map(action => _get_action_name(action)) - let msg = 'one of the arguments %s is required' - this.error(sub(msg, names.join(' '))) - } - } - } - - // return the updated namespace and the extra arguments - return [ namespace, extras ] - } - - _read_args_from_files(arg_strings) { - // expand arguments referencing files - let new_arg_strings = [] - for (let arg_string of arg_strings) { - - // for regular arguments, just add them back into the list - if (!arg_string || !this.fromfile_prefix_chars.includes(arg_string[0])) { - new_arg_strings.push(arg_string) - - // replace arguments referencing files with the file content - } else { - try { - let args_file = fs.readFileSync(arg_string.slice(1), 'utf8') - let arg_strings = [] - for (let arg_line of splitlines(args_file)) { - for (let arg of this.convert_arg_line_to_args(arg_line)) { - arg_strings.push(arg) - } - } - arg_strings = this._read_args_from_files(arg_strings) - new_arg_strings = new_arg_strings.concat(arg_strings) - } catch (err) { - this.error(err.message) - } - } - } - - // return the modified argument list - return new_arg_strings - } - - convert_arg_line_to_args(arg_line) { - return [arg_line] - } - - _match_argument(action, arg_strings_pattern) { - // match the pattern for this action to the arg strings - let nargs_pattern = this._get_nargs_pattern(action) - let match = arg_strings_pattern.match(new RegExp('^' + nargs_pattern)) - - // raise an exception if we weren't able to find a match - if (match === null) { - let nargs_errors = { - undefined: 'expected one argument', - [OPTIONAL]: 'expected at most one argument', - [ONE_OR_MORE]: 'expected at least one argument' - } - let msg = nargs_errors[action.nargs] - if (msg === undefined) { - msg = sub(action.nargs === 1 ? 'expected %s argument' : 'expected %s arguments', action.nargs) - } - throw new ArgumentError(action, msg) - } - - // return the number of arguments matched - return match[1].length - } - - _match_arguments_partial(actions, arg_strings_pattern) { - // progressively shorten the actions list by slicing off the - // final actions until we find a match - let result = [] - for (let i of range(actions.length, 0, -1)) { - let actions_slice = actions.slice(0, i) - let pattern = actions_slice.map(action => this._get_nargs_pattern(action)).join('') - let match = arg_strings_pattern.match(new RegExp('^' + pattern)) - if (match !== null) { - result = result.concat(match.slice(1).map(string => string.length)) - break - } - } - - // return the list of arg string counts - return result - } - - _parse_optional(arg_string) { - // if it's an empty string, it was meant to be a positional - if (!arg_string) { - return undefined - } - - // if it doesn't start with a prefix, it was meant to be positional - if (!this.prefix_chars.includes(arg_string[0])) { - return undefined - } - - // if the option string is present in the parser, return the action - if (arg_string in this._option_string_actions) { - let action = this._option_string_actions[arg_string] - return [ action, arg_string, undefined ] - } - - // if it's just a single character, it was meant to be positional - if (arg_string.length === 1) { - return undefined - } - - // if the option string before the "=" is present, return the action - if (arg_string.includes('=')) { - let [ option_string, explicit_arg ] = _string_split(arg_string, '=', 1) - if (option_string in this._option_string_actions) { - let action = this._option_string_actions[option_string] - return [ action, option_string, explicit_arg ] - } - } - - // search through all possible prefixes of the option string - // and all actions in the parser for possible interpretations - let option_tuples = this._get_option_tuples(arg_string) - - // if multiple actions match, the option string was ambiguous - if (option_tuples.length > 1) { - let options = option_tuples.map(([ /*action*/, option_string/*, explicit_arg*/ ]) => option_string).join(', ') - let args = {option: arg_string, matches: options} - let msg = 'ambiguous option: %(option)s could match %(matches)s' - this.error(sub(msg, args)) - - // if exactly one action matched, this segmentation is good, - // so return the parsed action - } else if (option_tuples.length === 1) { - let [ option_tuple ] = option_tuples - return option_tuple - } - - // if it was not found as an option, but it looks like a negative - // number, it was meant to be positional - // unless there are negative-number-like options - if (this._negative_number_matcher.test(arg_string)) { - if (!this._has_negative_number_optionals.length) { - return undefined - } - } - - // if it contains a space, it was meant to be a positional - if (arg_string.includes(' ')) { - return undefined - } - - // it was meant to be an optional but there is no such option - // in this parser (though it might be a valid option in a subparser) - return [ undefined, arg_string, undefined ] - } - - _get_option_tuples(option_string) { - let result = [] - - // option strings starting with two prefix characters are only - // split at the '=' - let chars = this.prefix_chars - if (chars.includes(option_string[0]) && chars.includes(option_string[1])) { - if (this.allow_abbrev) { - let option_prefix, explicit_arg - if (option_string.includes('=')) { - [ option_prefix, explicit_arg ] = _string_split(option_string, '=', 1) - } else { - option_prefix = option_string - explicit_arg = undefined - } - for (let option_string of Object.keys(this._option_string_actions)) { - if (option_string.startsWith(option_prefix)) { - let action = this._option_string_actions[option_string] - let tup = [ action, option_string, explicit_arg ] - result.push(tup) - } - } - } - - // single character options can be concatenated with their arguments - // but multiple character options always have to have their argument - // separate - } else if (chars.includes(option_string[0]) && !chars.includes(option_string[1])) { - let option_prefix = option_string - let explicit_arg = undefined - let short_option_prefix = option_string.slice(0, 2) - let short_explicit_arg = option_string.slice(2) - - for (let option_string of Object.keys(this._option_string_actions)) { - if (option_string === short_option_prefix) { - let action = this._option_string_actions[option_string] - let tup = [ action, option_string, short_explicit_arg ] - result.push(tup) - } else if (option_string.startsWith(option_prefix)) { - let action = this._option_string_actions[option_string] - let tup = [ action, option_string, explicit_arg ] - result.push(tup) - } - } - - // shouldn't ever get here - } else { - this.error(sub('unexpected option string: %s', option_string)) - } - - // return the collected option tuples - return result - } - - _get_nargs_pattern(action) { - // in all examples below, we have to allow for '--' args - // which are represented as '-' in the pattern - let nargs = action.nargs - let nargs_pattern - - // the default (None) is assumed to be a single argument - if (nargs === undefined) { - nargs_pattern = '(-*A-*)' - - // allow zero or one arguments - } else if (nargs === OPTIONAL) { - nargs_pattern = '(-*A?-*)' - - // allow zero or more arguments - } else if (nargs === ZERO_OR_MORE) { - nargs_pattern = '(-*[A-]*)' - - // allow one or more arguments - } else if (nargs === ONE_OR_MORE) { - nargs_pattern = '(-*A[A-]*)' - - // allow any number of options or arguments - } else if (nargs === REMAINDER) { - nargs_pattern = '([-AO]*)' - - // allow one argument followed by any number of options or arguments - } else if (nargs === PARSER) { - nargs_pattern = '(-*A[-AO]*)' - - // suppress action, like nargs=0 - } else if (nargs === SUPPRESS) { - nargs_pattern = '(-*-*)' - - // all others should be integers - } else { - nargs_pattern = sub('(-*%s-*)', 'A'.repeat(nargs).split('').join('-*')) - } - - // if this is an optional action, -- is not allowed - if (action.option_strings.length) { - nargs_pattern = nargs_pattern.replace(/-\*/g, '') - nargs_pattern = nargs_pattern.replace(/-/g, '') - } - - // return the pattern - return nargs_pattern - } - - // ======================== - // Alt command line argument parsing, allowing free intermix - // ======================== - - parse_intermixed_args(args = undefined, namespace = undefined) { - let argv - [ args, argv ] = this.parse_known_intermixed_args(args, namespace) - if (argv.length) { - let msg = 'unrecognized arguments: %s' - this.error(sub(msg, argv.join(' '))) - } - return args - } - - parse_known_intermixed_args(args = undefined, namespace = undefined) { - // returns a namespace and list of extras - // - // positional can be freely intermixed with optionals. optionals are - // first parsed with all positional arguments deactivated. The 'extras' - // are then parsed. If the parser definition is incompatible with the - // intermixed assumptions (e.g. use of REMAINDER, subparsers) a - // TypeError is raised. - // - // positionals are 'deactivated' by setting nargs and default to - // SUPPRESS. This blocks the addition of that positional to the - // namespace - - let extras - let positionals = this._get_positional_actions() - let a = positionals.filter(action => [ PARSER, REMAINDER ].includes(action.nargs)) - if (a.length) { - throw new TypeError(sub('parse_intermixed_args: positional arg' + - ' with nargs=%s', a[0].nargs)) - } - - for (let group of this._mutually_exclusive_groups) { - for (let action of group._group_actions) { - if (positionals.includes(action)) { - throw new TypeError('parse_intermixed_args: positional in' + - ' mutuallyExclusiveGroup') - } - } - } - - let save_usage - try { - save_usage = this.usage - let remaining_args - try { - if (this.usage === undefined) { - // capture the full usage for use in error messages - this.usage = this.format_usage().slice(7) - } - for (let action of positionals) { - // deactivate positionals - action.save_nargs = action.nargs - // action.nargs = 0 - action.nargs = SUPPRESS - action.save_default = action.default - action.default = SUPPRESS - } - [ namespace, remaining_args ] = this.parse_known_args(args, - namespace) - for (let action of positionals) { - // remove the empty positional values from namespace - let attr = getattr(namespace, action.dest) - if (Array.isArray(attr) && attr.length === 0) { - // eslint-disable-next-line no-console - console.warn(sub('Do not expect %s in %s', action.dest, namespace)) - delattr(namespace, action.dest) - } - } - } finally { - // restore nargs and usage before exiting - for (let action of positionals) { - action.nargs = action.save_nargs - action.default = action.save_default - } - } - let optionals = this._get_optional_actions() - try { - // parse positionals. optionals aren't normally required, but - // they could be, so make sure they aren't. - for (let action of optionals) { - action.save_required = action.required - action.required = false - } - for (let group of this._mutually_exclusive_groups) { - group.save_required = group.required - group.required = false - } - [ namespace, extras ] = this.parse_known_args(remaining_args, - namespace) - } finally { - // restore parser values before exiting - for (let action of optionals) { - action.required = action.save_required - } - for (let group of this._mutually_exclusive_groups) { - group.required = group.save_required - } - } - } finally { - this.usage = save_usage - } - return [ namespace, extras ] - } - - // ======================== - // Value conversion methods - // ======================== - _get_values(action, arg_strings) { - // for everything but PARSER, REMAINDER args, strip out first '--' - if (![PARSER, REMAINDER].includes(action.nargs)) { - try { - _array_remove(arg_strings, '--') - } catch (err) {} - } - - let value - // optional argument produces a default when not present - if (!arg_strings.length && action.nargs === OPTIONAL) { - if (action.option_strings.length) { - value = action.const - } else { - value = action.default - } - if (typeof value === 'string') { - value = this._get_value(action, value) - this._check_value(action, value) - } - - // when nargs='*' on a positional, if there were no command-line - // args, use the default if it is anything other than None - } else if (!arg_strings.length && action.nargs === ZERO_OR_MORE && - !action.option_strings.length) { - if (action.default !== undefined) { - value = action.default - } else { - value = arg_strings - } - this._check_value(action, value) - - // single argument or optional argument produces a single value - } else if (arg_strings.length === 1 && [undefined, OPTIONAL].includes(action.nargs)) { - let arg_string = arg_strings[0] - value = this._get_value(action, arg_string) - this._check_value(action, value) - - // REMAINDER arguments convert all values, checking none - } else if (action.nargs === REMAINDER) { - value = arg_strings.map(v => this._get_value(action, v)) - - // PARSER arguments convert all values, but check only the first - } else if (action.nargs === PARSER) { - value = arg_strings.map(v => this._get_value(action, v)) - this._check_value(action, value[0]) - - // SUPPRESS argument does not put anything in the namespace - } else if (action.nargs === SUPPRESS) { - value = SUPPRESS - - // all other types of nargs produce a list - } else { - value = arg_strings.map(v => this._get_value(action, v)) - for (let v of value) { - this._check_value(action, v) - } - } - - // return the converted value - return value - } - - _get_value(action, arg_string) { - let type_func = this._registry_get('type', action.type, action.type) - if (typeof type_func !== 'function') { - let msg = '%r is not callable' - throw new ArgumentError(action, sub(msg, type_func)) - } - - // convert the value to the appropriate type - let result - try { - try { - result = type_func(arg_string) - } catch (err) { - // Dear TC39, why would you ever consider making es6 classes not callable? - // We had one universal interface, [[Call]], which worked for anything - // (with familiar this-instanceof guard for classes). Now we have two. - if (err instanceof TypeError && - /Class constructor .* cannot be invoked without 'new'/.test(err.message)) { - // eslint-disable-next-line new-cap - result = new type_func(arg_string) - } else { - throw err - } - } - - } catch (err) { - // ArgumentTypeErrors indicate errors - if (err instanceof ArgumentTypeError) { - //let name = getattr(action.type, 'name', repr(action.type)) - let msg = err.message - throw new ArgumentError(action, msg) - - // TypeErrors or ValueErrors also indicate errors - } else if (err instanceof TypeError) { - let name = getattr(action.type, 'name', repr(action.type)) - let args = {type: name, value: arg_string} - let msg = 'invalid %(type)s value: %(value)r' - throw new ArgumentError(action, sub(msg, args)) - } else { - throw err - } - } - - // return the converted value - return result - } - - _check_value(action, value) { - // converted value must be one of the choices (if specified) - if (action.choices !== undefined && !_choices_to_array(action.choices).includes(value)) { - let args = {value, - choices: _choices_to_array(action.choices).map(repr).join(', ')} - let msg = 'invalid choice: %(value)r (choose from %(choices)s)' - throw new ArgumentError(action, sub(msg, args)) - } - } - - // ======================= - // Help-formatting methods - // ======================= - format_usage() { - let formatter = this._get_formatter() - formatter.add_usage(this.usage, this._actions, - this._mutually_exclusive_groups) - return formatter.format_help() - } - - format_help() { - let formatter = this._get_formatter() - - // usage - formatter.add_usage(this.usage, this._actions, - this._mutually_exclusive_groups) - - // description - formatter.add_text(this.description) - - // positionals, optionals and user-defined groups - for (let action_group of this._action_groups) { - formatter.start_section(action_group.title) - formatter.add_text(action_group.description) - formatter.add_arguments(action_group._group_actions) - formatter.end_section() - } - - // epilog - formatter.add_text(this.epilog) - - // determine help from format above - return formatter.format_help() - } - - _get_formatter() { - // eslint-disable-next-line new-cap - return new this.formatter_class({ prog: this.prog }) - } - - // ===================== - // Help-printing methods - // ===================== - print_usage(file = undefined) { - if (file === undefined) file = process.stdout - this._print_message(this.format_usage(), file) - } - - print_help(file = undefined) { - if (file === undefined) file = process.stdout - this._print_message(this.format_help(), file) - } - - _print_message(message, file = undefined) { - if (message) { - if (file === undefined) file = process.stderr - file.write(message) - } - } - - // =============== - // Exiting methods - // =============== - exit(status = 0, message = undefined) { - if (message) { - this._print_message(message, process.stderr) - } - process.exit(status) - } - - error(message) { - /* - * error(message: string) - * - * Prints a usage message incorporating the message to stderr and - * exits. - * - * If you override this in a subclass, it should not return -- it - * should either exit or raise an exception. - */ - - // LEGACY (v1 compatibility), debug mode - if (this.debug === true) throw new Error(message) - // end - this.print_usage(process.stderr) - let args = {prog: this.prog, message: message} - this.exit(2, sub('%(prog)s: error: %(message)s\n', args)) - } -})) - - -module.exports = { - ArgumentParser, - ArgumentError, - ArgumentTypeError, - BooleanOptionalAction, - FileType, - HelpFormatter, - ArgumentDefaultsHelpFormatter, - RawDescriptionHelpFormatter, - RawTextHelpFormatter, - MetavarTypeHelpFormatter, - Namespace, - Action, - ONE_OR_MORE, - OPTIONAL, - PARSER, - REMAINDER, - SUPPRESS, - ZERO_OR_MORE -} - -// LEGACY (v1 compatibility), Const alias -Object.defineProperty(module.exports, 'Const', { - get() { - let result = {} - Object.entries({ ONE_OR_MORE, OPTIONAL, PARSER, REMAINDER, SUPPRESS, ZERO_OR_MORE }).forEach(([ n, v ]) => { - Object.defineProperty(result, n, { - get() { - deprecate(n, sub('use argparse.%s instead of argparse.Const.%s', n, n)) - return v - } - }) - }) - Object.entries({ _UNRECOGNIZED_ARGS_ATTR }).forEach(([ n, v ]) => { - Object.defineProperty(result, n, { - get() { - deprecate(n, sub('argparse.Const.%s is an internal symbol and will no longer be available', n)) - return v - } - }) - }) - return result - }, - enumerable: false -}) -// end diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json deleted file mode 100644 index 647d2aff18..0000000000 --- a/node_modules/argparse/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "argparse", - "description": "CLI arguments parser. Native port of python's argparse.", - "version": "2.0.1", - "keywords": [ - "cli", - "parser", - "argparse", - "option", - "args" - ], - "main": "argparse.js", - "files": [ - "argparse.js", - "lib/" - ], - "license": "Python-2.0", - "repository": "nodeca/argparse", - "scripts": { - "lint": "eslint .", - "test": "npm run lint && nyc mocha", - "coverage": "npm run test && nyc report --reporter html" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.11.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "eslint": "^7.5.0", - "mocha": "^8.0.1", - "nyc": "^15.1.0" - } -} diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml deleted file mode 100644 index cea8b16e9e..0000000000 --- a/node_modules/balanced-match/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -tidelift: "npm/balanced-match" -patreon: juliangruber diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md deleted file mode 100644 index 2cdc8e4148..0000000000 --- a/node_modules/balanced-match/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md deleted file mode 100644 index d2a48b6b49..0000000000 --- a/node_modules/balanced-match/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# balanced-match - -Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! - -[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) -[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) - -[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) - -## Example - -Get the first matching pair of braces: - -```js -var balanced = require('balanced-match'); - -console.log(balanced('{', '}', 'pre{in{nested}}post')); -console.log(balanced('{', '}', 'pre{first}between{second}post')); -console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); -``` - -The matches are: - -```bash -$ node example.js -{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } -{ start: 3, - end: 9, - pre: 'pre', - body: 'first', - post: 'between{second}post' } -{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } -``` - -## API - -### var m = balanced(a, b, str) - -For the first non-nested matching pair of `a` and `b` in `str`, return an -object with those keys: - -* **start** the index of the first match of `a` -* **end** the index of the matching `b` -* **pre** the preamble, `a` and `b` not included -* **body** the match, `a` and `b` not included -* **post** the postscript, `a` and `b` not included - -If there's no match, `undefined` will be returned. - -If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. - -### var r = balanced.range(a, b, str) - -For the first non-nested matching pair of `a` and `b` in `str`, return an -array with indexes: `[ , ]`. - -If there's no match, `undefined` will be returned. - -If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install balanced-match -``` - -## Security contact information - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js deleted file mode 100644 index c67a64608d..0000000000 --- a/node_modules/balanced-match/index.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; -module.exports = balanced; -function balanced(a, b, str) { - if (a instanceof RegExp) a = maybeMatch(a, str); - if (b instanceof RegExp) b = maybeMatch(b, str); - - var r = range(a, b, str); - - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; -} - -function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; -} - -balanced.range = range; -function range(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; - - if (ai >= 0 && bi > 0) { - if(a===b) { - return [ai, bi]; - } - begs = []; - left = str.length; - - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [ begs.pop(), bi ]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } - - bi = str.indexOf(b, i + 1); - } - - i = ai < bi && ai >= 0 ? ai : bi; - } - - if (begs.length) { - result = [ left, right ]; - } - } - - return result; -} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json deleted file mode 100644 index ce6073e040..0000000000 --- a/node_modules/balanced-match/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "balanced-match", - "description": "Match balanced character pairs, like \"{\" and \"}\"", - "version": "1.0.2", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/balanced-match.git" - }, - "homepage": "https://github.com/juliangruber/balanced-match", - "main": "index.js", - "scripts": { - "test": "tape test/test.js", - "bench": "matcha test/bench.js" - }, - "devDependencies": { - "matcha": "^0.7.0", - "tape": "^4.6.0" - }, - "keywords": [ - "match", - "regexp", - "test", - "balanced", - "parse" - ], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT", - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - } -} diff --git a/node_modules/brace-expansion/.github/FUNDING.yml b/node_modules/brace-expansion/.github/FUNDING.yml deleted file mode 100644 index 79d1eafcec..0000000000 --- a/node_modules/brace-expansion/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -tidelift: "npm/brace-expansion" -patreon: juliangruber diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE deleted file mode 100644 index de3226673c..0000000000 --- a/node_modules/brace-expansion/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md deleted file mode 100644 index e55c583dd0..0000000000 --- a/node_modules/brace-expansion/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# brace-expansion - -[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), -as known from sh/bash, in JavaScript. - -[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) -[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) -[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) - -[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) - -## Example - -```js -var expand = require('brace-expansion'); - -expand('file-{a,b,c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('-v{,,}') -// => ['-v', '-v', '-v'] - -expand('file{0..2}.jpg') -// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] - -expand('file-{a..c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('file{2..0}.jpg') -// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] - -expand('file{0..4..2}.jpg') -// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] - -expand('file-{a..e..2}.jpg') -// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] - -expand('file{00..10..5}.jpg') -// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] - -expand('{{A..C},{a..c}}') -// => ['A', 'B', 'C', 'a', 'b', 'c'] - -expand('ppp{,config,oe{,conf}}') -// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] -``` - -## API - -```js -var expand = require('brace-expansion'); -``` - -### var expanded = expand(str) - -Return an array of all possible and valid expansions of `str`. If none are -found, `[str]` is returned. - -Valid expansions are: - -```js -/^(.*,)+(.+)?$/ -// {a,b,...} -``` - -A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -A numeric sequence from `x` to `y` inclusive, with optional increment. -If `x` or `y` start with a leading `0`, all the numbers will be padded -to have equal length. Negative numbers and backwards iteration work too. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -An alphabetic sequence from `x` to `y` inclusive, with optional increment. -`x` and `y` must be exactly one character, and if given, `incr` must be a -number. - -For compatibility reasons, the string `${` is not eligible for brace expansion. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install brace-expansion -``` - -## Contributors - -- [Julian Gruber](https://github.com/juliangruber) -- [Isaac Z. Schlueter](https://github.com/isaacs) - -## Sponsors - -This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! - -Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! - -## Security contact information - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js deleted file mode 100644 index 4af9ddee46..0000000000 --- a/node_modules/brace-expansion/index.js +++ /dev/null @@ -1,203 +0,0 @@ -var balanced = require('balanced-match'); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } - - return expand(escapeBraces(str), true).map(unescapeBraces); -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str, isTop) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m) return [str]; - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post, false) - : ['']; - - if (/\$$/.test(m.pre)) { - for (var k = 0; k < post.length; k++) { - var expansion = pre+ '{' + m.body + '}' + post[k]; - expansions.push(expansion); - } - } else { - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(',') >= 0; - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); - if (n.length === 1) { - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = []; - - for (var j = 0; j < n.length; j++) { - N.push.apply(N, expand(n[j], false)); - } - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - } - - return expansions; -} - diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json deleted file mode 100644 index 7097d41e39..0000000000 --- a/node_modules/brace-expansion/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "brace-expansion", - "description": "Brace expansion as known from sh/bash", - "version": "2.0.1", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/brace-expansion.git" - }, - "homepage": "https://github.com/juliangruber/brace-expansion", - "main": "index.js", - "scripts": { - "test": "tape test/*.js", - "gentest": "bash test/generate.sh", - "bench": "matcha test/perf/bench.js" - }, - "dependencies": { - "balanced-match": "^1.0.0" - }, - "devDependencies": { - "@c4312/matcha": "^1.3.1", - "tape": "^4.6.0" - }, - "keywords": [], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT", - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - } -} diff --git a/node_modules/character-entities-legacy/index.d.ts b/node_modules/character-entities-legacy/index.d.ts deleted file mode 100644 index 2d567ecc0f..0000000000 --- a/node_modules/character-entities-legacy/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * List of legacy HTML named character references that don’t need a trailing semicolon. - * - * @type {Array} - */ -export const characterEntitiesLegacy: Array diff --git a/node_modules/character-entities-legacy/index.js b/node_modules/character-entities-legacy/index.js deleted file mode 100644 index 678d6a7034..0000000000 --- a/node_modules/character-entities-legacy/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/** - * List of legacy HTML named character references that don’t need a trailing semicolon. - * - * @type {Array} - */ -export const characterEntitiesLegacy = [ - 'AElig', - 'AMP', - 'Aacute', - 'Acirc', - 'Agrave', - 'Aring', - 'Atilde', - 'Auml', - 'COPY', - 'Ccedil', - 'ETH', - 'Eacute', - 'Ecirc', - 'Egrave', - 'Euml', - 'GT', - 'Iacute', - 'Icirc', - 'Igrave', - 'Iuml', - 'LT', - 'Ntilde', - 'Oacute', - 'Ocirc', - 'Ograve', - 'Oslash', - 'Otilde', - 'Ouml', - 'QUOT', - 'REG', - 'THORN', - 'Uacute', - 'Ucirc', - 'Ugrave', - 'Uuml', - 'Yacute', - 'aacute', - 'acirc', - 'acute', - 'aelig', - 'agrave', - 'amp', - 'aring', - 'atilde', - 'auml', - 'brvbar', - 'ccedil', - 'cedil', - 'cent', - 'copy', - 'curren', - 'deg', - 'divide', - 'eacute', - 'ecirc', - 'egrave', - 'eth', - 'euml', - 'frac12', - 'frac14', - 'frac34', - 'gt', - 'iacute', - 'icirc', - 'iexcl', - 'igrave', - 'iquest', - 'iuml', - 'laquo', - 'lt', - 'macr', - 'micro', - 'middot', - 'nbsp', - 'not', - 'ntilde', - 'oacute', - 'ocirc', - 'ograve', - 'ordf', - 'ordm', - 'oslash', - 'otilde', - 'ouml', - 'para', - 'plusmn', - 'pound', - 'quot', - 'raquo', - 'reg', - 'sect', - 'shy', - 'sup1', - 'sup2', - 'sup3', - 'szlig', - 'thorn', - 'times', - 'uacute', - 'ucirc', - 'ugrave', - 'uml', - 'uuml', - 'yacute', - 'yen', - 'yuml' -] diff --git a/node_modules/character-entities-legacy/license b/node_modules/character-entities-legacy/license deleted file mode 100644 index 32e7a3d93c..0000000000 --- a/node_modules/character-entities-legacy/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities-legacy/package.json b/node_modules/character-entities-legacy/package.json deleted file mode 100644 index 6f6805616c..0000000000 --- a/node_modules/character-entities-legacy/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "character-entities-legacy", - "version": "3.0.0", - "description": "List of legacy HTML named character references that don’t need a trailing semicolon", - "license": "MIT", - "keywords": [ - "html", - "entity", - "entities", - "character", - "reference", - "name" - ], - "repository": "wooorm/character-entities-legacy", - "bugs": "https://github.com/wooorm/character-entities-legacy/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "bail": "^2.0.0", - "c8": "^7.0.0", - "concat-stream": "^2.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.45.0" - }, - "scripts": { - "generate": "node build", - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run generate && npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/character-entities-legacy/readme.md b/node_modules/character-entities-legacy/readme.md deleted file mode 100644 index 9c1765faf6..0000000000 --- a/node_modules/character-entities-legacy/readme.md +++ /dev/null @@ -1,157 +0,0 @@ -# character-entities-legacy - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -List of legacy HTML named character references that don’t need a trailing -semicolon. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`characterEntitiesLegacy`](#characterentitieslegacy) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a list of certain named character references, that due to legacy -reasons, don’t need a trailing semicolon in HTML. -For example, `©` is perfectly fine for `©`! - -## When should I use this? - -Maybe when you’re writing an HTML parser or minifier, but otherwise probably -never! -Even then, it might be better to use [`parse-entities`][parse-entities] or -[`stringify-entities`][stringify-entities]. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install character-entities-legacy -``` - -In Deno with [Skypack][]: - -```js -import {characterEntitiesLegacy} from 'https://cdn.skypack.dev/character-entities-legacy@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {characterEntitiesLegacy} from 'character-entities-legacy' - -console.log(characterEntitiesLegacy.includes('copy')) // => true -console.log(characterEntitiesLegacy.includes('frac34')) // => true -console.log(characterEntitiesLegacy.includes('sup1')) // => true -``` - -## API - -This package exports the following identifiers: `characterEntitiesLegacy`. -There is no default export. - -### `characterEntitiesLegacy` - -List of (case sensitive) legacy character entity names. -[`wooorm/character-entities`][character-entities] holds their decoded values. -See [`whatwg/html`][html] for more info. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) - — parse (decode) character references -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — serialize (encode) character references -* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) - — info on character entities -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — info on HTML4 character entities -* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) - — info on invalid numeric character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/character-entities-legacy/workflows/main/badge.svg - -[build]: https://github.com/wooorm/character-entities-legacy/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities-legacy.svg - -[coverage]: https://codecov.io/github/wooorm/character-entities-legacy - -[downloads-badge]: https://img.shields.io/npm/dm/character-entities-legacy.svg - -[downloads]: https://www.npmjs.com/package/character-entities-legacy - -[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities-legacy.svg - -[size]: https://bundlephobia.com/result?p=character-entities-legacy - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[html]: https://github.com/whatwg/html-build/blob/HEAD/entities/json-entities-legacy.inc - -[parse-entities]: https://github.com/wooorm/parse-entities - -[stringify-entities]: https://github.com/wooorm/stringify-entities - -[character-entities]: https://github.com/wooorm/character-entities diff --git a/node_modules/character-entities/index.d.ts b/node_modules/character-entities/index.d.ts deleted file mode 100644 index aa7e651aaf..0000000000 --- a/node_modules/character-entities/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Map of named character references. - * - * @type {Record} - */ -export const characterEntities: Record diff --git a/node_modules/character-entities/index.js b/node_modules/character-entities/index.js deleted file mode 100644 index 9222e7a7fe..0000000000 --- a/node_modules/character-entities/index.js +++ /dev/null @@ -1,2132 +0,0 @@ -/** - * Map of named character references. - * - * @type {Record} - */ -export const characterEntities = { - AElig: 'Æ', - AMP: '&', - Aacute: 'Á', - Abreve: 'Ă', - Acirc: 'Â', - Acy: 'А', - Afr: '𝔄', - Agrave: 'À', - Alpha: 'Α', - Amacr: 'Ā', - And: '⩓', - Aogon: 'Ą', - Aopf: '𝔸', - ApplyFunction: '⁡', - Aring: 'Å', - Ascr: '𝒜', - Assign: '≔', - Atilde: 'Ã', - Auml: 'Ä', - Backslash: '∖', - Barv: '⫧', - Barwed: '⌆', - Bcy: 'Б', - Because: '∵', - Bernoullis: 'ℬ', - Beta: 'Β', - Bfr: '𝔅', - Bopf: '𝔹', - Breve: '˘', - Bscr: 'ℬ', - Bumpeq: '≎', - CHcy: 'Ч', - COPY: '©', - Cacute: 'Ć', - Cap: '⋒', - CapitalDifferentialD: 'ⅅ', - Cayleys: 'ℭ', - Ccaron: 'Č', - Ccedil: 'Ç', - Ccirc: 'Ĉ', - Cconint: '∰', - Cdot: 'Ċ', - Cedilla: '¸', - CenterDot: '·', - Cfr: 'ℭ', - Chi: 'Χ', - CircleDot: '⊙', - CircleMinus: '⊖', - CirclePlus: '⊕', - CircleTimes: '⊗', - ClockwiseContourIntegral: '∲', - CloseCurlyDoubleQuote: '”', - CloseCurlyQuote: '’', - Colon: '∷', - Colone: '⩴', - Congruent: '≡', - Conint: '∯', - ContourIntegral: '∮', - Copf: 'ℂ', - Coproduct: '∐', - CounterClockwiseContourIntegral: '∳', - Cross: '⨯', - Cscr: '𝒞', - Cup: '⋓', - CupCap: '≍', - DD: 'ⅅ', - DDotrahd: '⤑', - DJcy: 'Ђ', - DScy: 'Ѕ', - DZcy: 'Џ', - Dagger: '‡', - Darr: '↡', - Dashv: '⫤', - Dcaron: 'Ď', - Dcy: 'Д', - Del: '∇', - Delta: 'Δ', - Dfr: '𝔇', - DiacriticalAcute: '´', - DiacriticalDot: '˙', - DiacriticalDoubleAcute: '˝', - DiacriticalGrave: '`', - DiacriticalTilde: '˜', - Diamond: '⋄', - DifferentialD: 'ⅆ', - Dopf: '𝔻', - Dot: '¨', - DotDot: '⃜', - DotEqual: '≐', - DoubleContourIntegral: '∯', - DoubleDot: '¨', - DoubleDownArrow: '⇓', - DoubleLeftArrow: '⇐', - DoubleLeftRightArrow: '⇔', - DoubleLeftTee: '⫤', - DoubleLongLeftArrow: '⟸', - DoubleLongLeftRightArrow: '⟺', - DoubleLongRightArrow: '⟹', - DoubleRightArrow: '⇒', - DoubleRightTee: '⊨', - DoubleUpArrow: '⇑', - DoubleUpDownArrow: '⇕', - DoubleVerticalBar: '∥', - DownArrow: '↓', - DownArrowBar: '⤓', - DownArrowUpArrow: '⇵', - DownBreve: '̑', - DownLeftRightVector: '⥐', - DownLeftTeeVector: '⥞', - DownLeftVector: '↽', - DownLeftVectorBar: '⥖', - DownRightTeeVector: '⥟', - DownRightVector: '⇁', - DownRightVectorBar: '⥗', - DownTee: '⊤', - DownTeeArrow: '↧', - Downarrow: '⇓', - Dscr: '𝒟', - Dstrok: 'Đ', - ENG: 'Ŋ', - ETH: 'Ð', - Eacute: 'É', - Ecaron: 'Ě', - Ecirc: 'Ê', - Ecy: 'Э', - Edot: 'Ė', - Efr: '𝔈', - Egrave: 'È', - Element: '∈', - Emacr: 'Ē', - EmptySmallSquare: '◻', - EmptyVerySmallSquare: '▫', - Eogon: 'Ę', - Eopf: '𝔼', - Epsilon: 'Ε', - Equal: '⩵', - EqualTilde: '≂', - Equilibrium: '⇌', - Escr: 'ℰ', - Esim: '⩳', - Eta: 'Η', - Euml: 'Ë', - Exists: '∃', - ExponentialE: 'ⅇ', - Fcy: 'Ф', - Ffr: '𝔉', - FilledSmallSquare: '◼', - FilledVerySmallSquare: '▪', - Fopf: '𝔽', - ForAll: '∀', - Fouriertrf: 'ℱ', - Fscr: 'ℱ', - GJcy: 'Ѓ', - GT: '>', - Gamma: 'Γ', - Gammad: 'Ϝ', - Gbreve: 'Ğ', - Gcedil: 'Ģ', - Gcirc: 'Ĝ', - Gcy: 'Г', - Gdot: 'Ġ', - Gfr: '𝔊', - Gg: '⋙', - Gopf: '𝔾', - GreaterEqual: '≥', - GreaterEqualLess: '⋛', - GreaterFullEqual: '≧', - GreaterGreater: '⪢', - GreaterLess: '≷', - GreaterSlantEqual: '⩾', - GreaterTilde: '≳', - Gscr: '𝒢', - Gt: '≫', - HARDcy: 'Ъ', - Hacek: 'ˇ', - Hat: '^', - Hcirc: 'Ĥ', - Hfr: 'ℌ', - HilbertSpace: 'ℋ', - Hopf: 'ℍ', - HorizontalLine: '─', - Hscr: 'ℋ', - Hstrok: 'Ħ', - HumpDownHump: '≎', - HumpEqual: '≏', - IEcy: 'Е', - IJlig: 'IJ', - IOcy: 'Ё', - Iacute: 'Í', - Icirc: 'Î', - Icy: 'И', - Idot: 'İ', - Ifr: 'ℑ', - Igrave: 'Ì', - Im: 'ℑ', - Imacr: 'Ī', - ImaginaryI: 'ⅈ', - Implies: '⇒', - Int: '∬', - Integral: '∫', - Intersection: '⋂', - InvisibleComma: '⁣', - InvisibleTimes: '⁢', - Iogon: 'Į', - Iopf: '𝕀', - Iota: 'Ι', - Iscr: 'ℐ', - Itilde: 'Ĩ', - Iukcy: 'І', - Iuml: 'Ï', - Jcirc: 'Ĵ', - Jcy: 'Й', - Jfr: '𝔍', - Jopf: '𝕁', - Jscr: '𝒥', - Jsercy: 'Ј', - Jukcy: 'Є', - KHcy: 'Х', - KJcy: 'Ќ', - Kappa: 'Κ', - Kcedil: 'Ķ', - Kcy: 'К', - Kfr: '𝔎', - Kopf: '𝕂', - Kscr: '𝒦', - LJcy: 'Љ', - LT: '<', - Lacute: 'Ĺ', - Lambda: 'Λ', - Lang: '⟪', - Laplacetrf: 'ℒ', - Larr: '↞', - Lcaron: 'Ľ', - Lcedil: 'Ļ', - Lcy: 'Л', - LeftAngleBracket: '⟨', - LeftArrow: '←', - LeftArrowBar: '⇤', - LeftArrowRightArrow: '⇆', - LeftCeiling: '⌈', - LeftDoubleBracket: '⟦', - LeftDownTeeVector: '⥡', - LeftDownVector: '⇃', - LeftDownVectorBar: '⥙', - LeftFloor: '⌊', - LeftRightArrow: '↔', - LeftRightVector: '⥎', - LeftTee: '⊣', - LeftTeeArrow: '↤', - LeftTeeVector: '⥚', - LeftTriangle: '⊲', - LeftTriangleBar: '⧏', - LeftTriangleEqual: '⊴', - LeftUpDownVector: '⥑', - LeftUpTeeVector: '⥠', - LeftUpVector: '↿', - LeftUpVectorBar: '⥘', - LeftVector: '↼', - LeftVectorBar: '⥒', - Leftarrow: '⇐', - Leftrightarrow: '⇔', - LessEqualGreater: '⋚', - LessFullEqual: '≦', - LessGreater: '≶', - LessLess: '⪡', - LessSlantEqual: '⩽', - LessTilde: '≲', - Lfr: '𝔏', - Ll: '⋘', - Lleftarrow: '⇚', - Lmidot: 'Ŀ', - LongLeftArrow: '⟵', - LongLeftRightArrow: '⟷', - LongRightArrow: '⟶', - Longleftarrow: '⟸', - Longleftrightarrow: '⟺', - Longrightarrow: '⟹', - Lopf: '𝕃', - LowerLeftArrow: '↙', - LowerRightArrow: '↘', - Lscr: 'ℒ', - Lsh: '↰', - Lstrok: 'Ł', - Lt: '≪', - Map: '⤅', - Mcy: 'М', - MediumSpace: ' ', - Mellintrf: 'ℳ', - Mfr: '𝔐', - MinusPlus: '∓', - Mopf: '𝕄', - Mscr: 'ℳ', - Mu: 'Μ', - NJcy: 'Њ', - Nacute: 'Ń', - Ncaron: 'Ň', - Ncedil: 'Ņ', - Ncy: 'Н', - NegativeMediumSpace: '​', - NegativeThickSpace: '​', - NegativeThinSpace: '​', - NegativeVeryThinSpace: '​', - NestedGreaterGreater: '≫', - NestedLessLess: '≪', - NewLine: '\n', - Nfr: '𝔑', - NoBreak: '⁠', - NonBreakingSpace: ' ', - Nopf: 'ℕ', - Not: '⫬', - NotCongruent: '≢', - NotCupCap: '≭', - NotDoubleVerticalBar: '∦', - NotElement: '∉', - NotEqual: '≠', - NotEqualTilde: '≂̸', - NotExists: '∄', - NotGreater: '≯', - NotGreaterEqual: '≱', - NotGreaterFullEqual: '≧̸', - NotGreaterGreater: '≫̸', - NotGreaterLess: '≹', - NotGreaterSlantEqual: '⩾̸', - NotGreaterTilde: '≵', - NotHumpDownHump: '≎̸', - NotHumpEqual: '≏̸', - NotLeftTriangle: '⋪', - NotLeftTriangleBar: '⧏̸', - NotLeftTriangleEqual: '⋬', - NotLess: '≮', - NotLessEqual: '≰', - NotLessGreater: '≸', - NotLessLess: '≪̸', - NotLessSlantEqual: '⩽̸', - NotLessTilde: '≴', - NotNestedGreaterGreater: '⪢̸', - NotNestedLessLess: '⪡̸', - NotPrecedes: '⊀', - NotPrecedesEqual: '⪯̸', - NotPrecedesSlantEqual: '⋠', - NotReverseElement: '∌', - NotRightTriangle: '⋫', - NotRightTriangleBar: '⧐̸', - NotRightTriangleEqual: '⋭', - NotSquareSubset: '⊏̸', - NotSquareSubsetEqual: '⋢', - NotSquareSuperset: '⊐̸', - NotSquareSupersetEqual: '⋣', - NotSubset: '⊂⃒', - NotSubsetEqual: '⊈', - NotSucceeds: '⊁', - NotSucceedsEqual: '⪰̸', - NotSucceedsSlantEqual: '⋡', - NotSucceedsTilde: '≿̸', - NotSuperset: '⊃⃒', - NotSupersetEqual: '⊉', - NotTilde: '≁', - NotTildeEqual: '≄', - NotTildeFullEqual: '≇', - NotTildeTilde: '≉', - NotVerticalBar: '∤', - Nscr: '𝒩', - Ntilde: 'Ñ', - Nu: 'Ν', - OElig: 'Œ', - Oacute: 'Ó', - Ocirc: 'Ô', - Ocy: 'О', - Odblac: 'Ő', - Ofr: '𝔒', - Ograve: 'Ò', - Omacr: 'Ō', - Omega: 'Ω', - Omicron: 'Ο', - Oopf: '𝕆', - OpenCurlyDoubleQuote: '“', - OpenCurlyQuote: '‘', - Or: '⩔', - Oscr: '𝒪', - Oslash: 'Ø', - Otilde: 'Õ', - Otimes: '⨷', - Ouml: 'Ö', - OverBar: '‾', - OverBrace: '⏞', - OverBracket: '⎴', - OverParenthesis: '⏜', - PartialD: '∂', - Pcy: 'П', - Pfr: '𝔓', - Phi: 'Φ', - Pi: 'Π', - PlusMinus: '±', - Poincareplane: 'ℌ', - Popf: 'ℙ', - Pr: '⪻', - Precedes: '≺', - PrecedesEqual: '⪯', - PrecedesSlantEqual: '≼', - PrecedesTilde: '≾', - Prime: '″', - Product: '∏', - Proportion: '∷', - Proportional: '∝', - Pscr: '𝒫', - Psi: 'Ψ', - QUOT: '"', - Qfr: '𝔔', - Qopf: 'ℚ', - Qscr: '𝒬', - RBarr: '⤐', - REG: '®', - Racute: 'Ŕ', - Rang: '⟫', - Rarr: '↠', - Rarrtl: '⤖', - Rcaron: 'Ř', - Rcedil: 'Ŗ', - Rcy: 'Р', - Re: 'ℜ', - ReverseElement: '∋', - ReverseEquilibrium: '⇋', - ReverseUpEquilibrium: '⥯', - Rfr: 'ℜ', - Rho: 'Ρ', - RightAngleBracket: '⟩', - RightArrow: '→', - RightArrowBar: '⇥', - RightArrowLeftArrow: '⇄', - RightCeiling: '⌉', - RightDoubleBracket: '⟧', - RightDownTeeVector: '⥝', - RightDownVector: '⇂', - RightDownVectorBar: '⥕', - RightFloor: '⌋', - RightTee: '⊢', - RightTeeArrow: '↦', - RightTeeVector: '⥛', - RightTriangle: '⊳', - RightTriangleBar: '⧐', - RightTriangleEqual: '⊵', - RightUpDownVector: '⥏', - RightUpTeeVector: '⥜', - RightUpVector: '↾', - RightUpVectorBar: '⥔', - RightVector: '⇀', - RightVectorBar: '⥓', - Rightarrow: '⇒', - Ropf: 'ℝ', - RoundImplies: '⥰', - Rrightarrow: '⇛', - Rscr: 'ℛ', - Rsh: '↱', - RuleDelayed: '⧴', - SHCHcy: 'Щ', - SHcy: 'Ш', - SOFTcy: 'Ь', - Sacute: 'Ś', - Sc: '⪼', - Scaron: 'Š', - Scedil: 'Ş', - Scirc: 'Ŝ', - Scy: 'С', - Sfr: '𝔖', - ShortDownArrow: '↓', - ShortLeftArrow: '←', - ShortRightArrow: '→', - ShortUpArrow: '↑', - Sigma: 'Σ', - SmallCircle: '∘', - Sopf: '𝕊', - Sqrt: '√', - Square: '□', - SquareIntersection: '⊓', - SquareSubset: '⊏', - SquareSubsetEqual: '⊑', - SquareSuperset: '⊐', - SquareSupersetEqual: '⊒', - SquareUnion: '⊔', - Sscr: '𝒮', - Star: '⋆', - Sub: '⋐', - Subset: '⋐', - SubsetEqual: '⊆', - Succeeds: '≻', - SucceedsEqual: '⪰', - SucceedsSlantEqual: '≽', - SucceedsTilde: '≿', - SuchThat: '∋', - Sum: '∑', - Sup: '⋑', - Superset: '⊃', - SupersetEqual: '⊇', - Supset: '⋑', - THORN: 'Þ', - TRADE: '™', - TSHcy: 'Ћ', - TScy: 'Ц', - Tab: '\t', - Tau: 'Τ', - Tcaron: 'Ť', - Tcedil: 'Ţ', - Tcy: 'Т', - Tfr: '𝔗', - Therefore: '∴', - Theta: 'Θ', - ThickSpace: '  ', - ThinSpace: ' ', - Tilde: '∼', - TildeEqual: '≃', - TildeFullEqual: '≅', - TildeTilde: '≈', - Topf: '𝕋', - TripleDot: '⃛', - Tscr: '𝒯', - Tstrok: 'Ŧ', - Uacute: 'Ú', - Uarr: '↟', - Uarrocir: '⥉', - Ubrcy: 'Ў', - Ubreve: 'Ŭ', - Ucirc: 'Û', - Ucy: 'У', - Udblac: 'Ű', - Ufr: '𝔘', - Ugrave: 'Ù', - Umacr: 'Ū', - UnderBar: '_', - UnderBrace: '⏟', - UnderBracket: '⎵', - UnderParenthesis: '⏝', - Union: '⋃', - UnionPlus: '⊎', - Uogon: 'Ų', - Uopf: '𝕌', - UpArrow: '↑', - UpArrowBar: '⤒', - UpArrowDownArrow: '⇅', - UpDownArrow: '↕', - UpEquilibrium: '⥮', - UpTee: '⊥', - UpTeeArrow: '↥', - Uparrow: '⇑', - Updownarrow: '⇕', - UpperLeftArrow: '↖', - UpperRightArrow: '↗', - Upsi: 'ϒ', - Upsilon: 'Υ', - Uring: 'Ů', - Uscr: '𝒰', - Utilde: 'Ũ', - Uuml: 'Ü', - VDash: '⊫', - Vbar: '⫫', - Vcy: 'В', - Vdash: '⊩', - Vdashl: '⫦', - Vee: '⋁', - Verbar: '‖', - Vert: '‖', - VerticalBar: '∣', - VerticalLine: '|', - VerticalSeparator: '❘', - VerticalTilde: '≀', - VeryThinSpace: ' ', - Vfr: '𝔙', - Vopf: '𝕍', - Vscr: '𝒱', - Vvdash: '⊪', - Wcirc: 'Ŵ', - Wedge: '⋀', - Wfr: '𝔚', - Wopf: '𝕎', - Wscr: '𝒲', - Xfr: '𝔛', - Xi: 'Ξ', - Xopf: '𝕏', - Xscr: '𝒳', - YAcy: 'Я', - YIcy: 'Ї', - YUcy: 'Ю', - Yacute: 'Ý', - Ycirc: 'Ŷ', - Ycy: 'Ы', - Yfr: '𝔜', - Yopf: '𝕐', - Yscr: '𝒴', - Yuml: 'Ÿ', - ZHcy: 'Ж', - Zacute: 'Ź', - Zcaron: 'Ž', - Zcy: 'З', - Zdot: 'Ż', - ZeroWidthSpace: '​', - Zeta: 'Ζ', - Zfr: 'ℨ', - Zopf: 'ℤ', - Zscr: '𝒵', - aacute: 'á', - abreve: 'ă', - ac: '∾', - acE: '∾̳', - acd: '∿', - acirc: 'â', - acute: '´', - acy: 'а', - aelig: 'æ', - af: '⁡', - afr: '𝔞', - agrave: 'à', - alefsym: 'ℵ', - aleph: 'ℵ', - alpha: 'α', - amacr: 'ā', - amalg: '⨿', - amp: '&', - and: '∧', - andand: '⩕', - andd: '⩜', - andslope: '⩘', - andv: '⩚', - ang: '∠', - ange: '⦤', - angle: '∠', - angmsd: '∡', - angmsdaa: '⦨', - angmsdab: '⦩', - angmsdac: '⦪', - angmsdad: '⦫', - angmsdae: '⦬', - angmsdaf: '⦭', - angmsdag: '⦮', - angmsdah: '⦯', - angrt: '∟', - angrtvb: '⊾', - angrtvbd: '⦝', - angsph: '∢', - angst: 'Å', - angzarr: '⍼', - aogon: 'ą', - aopf: '𝕒', - ap: '≈', - apE: '⩰', - apacir: '⩯', - ape: '≊', - apid: '≋', - apos: "'", - approx: '≈', - approxeq: '≊', - aring: 'å', - ascr: '𝒶', - ast: '*', - asymp: '≈', - asympeq: '≍', - atilde: 'ã', - auml: 'ä', - awconint: '∳', - awint: '⨑', - bNot: '⫭', - backcong: '≌', - backepsilon: '϶', - backprime: '‵', - backsim: '∽', - backsimeq: '⋍', - barvee: '⊽', - barwed: '⌅', - barwedge: '⌅', - bbrk: '⎵', - bbrktbrk: '⎶', - bcong: '≌', - bcy: 'б', - bdquo: '„', - becaus: '∵', - because: '∵', - bemptyv: '⦰', - bepsi: '϶', - bernou: 'ℬ', - beta: 'β', - beth: 'ℶ', - between: '≬', - bfr: '𝔟', - bigcap: '⋂', - bigcirc: '◯', - bigcup: '⋃', - bigodot: '⨀', - bigoplus: '⨁', - bigotimes: '⨂', - bigsqcup: '⨆', - bigstar: '★', - bigtriangledown: '▽', - bigtriangleup: '△', - biguplus: '⨄', - bigvee: '⋁', - bigwedge: '⋀', - bkarow: '⤍', - blacklozenge: '⧫', - blacksquare: '▪', - blacktriangle: '▴', - blacktriangledown: '▾', - blacktriangleleft: '◂', - blacktriangleright: '▸', - blank: '␣', - blk12: '▒', - blk14: '░', - blk34: '▓', - block: '█', - bne: '=⃥', - bnequiv: '≡⃥', - bnot: '⌐', - bopf: '𝕓', - bot: '⊥', - bottom: '⊥', - bowtie: '⋈', - boxDL: '╗', - boxDR: '╔', - boxDl: '╖', - boxDr: '╓', - boxH: '═', - boxHD: '╦', - boxHU: '╩', - boxHd: '╤', - boxHu: '╧', - boxUL: '╝', - boxUR: '╚', - boxUl: '╜', - boxUr: '╙', - boxV: '║', - boxVH: '╬', - boxVL: '╣', - boxVR: '╠', - boxVh: '╫', - boxVl: '╢', - boxVr: '╟', - boxbox: '⧉', - boxdL: '╕', - boxdR: '╒', - boxdl: '┐', - boxdr: '┌', - boxh: '─', - boxhD: '╥', - boxhU: '╨', - boxhd: '┬', - boxhu: '┴', - boxminus: '⊟', - boxplus: '⊞', - boxtimes: '⊠', - boxuL: '╛', - boxuR: '╘', - boxul: '┘', - boxur: '└', - boxv: '│', - boxvH: '╪', - boxvL: '╡', - boxvR: '╞', - boxvh: '┼', - boxvl: '┤', - boxvr: '├', - bprime: '‵', - breve: '˘', - brvbar: '¦', - bscr: '𝒷', - bsemi: '⁏', - bsim: '∽', - bsime: '⋍', - bsol: '\\', - bsolb: '⧅', - bsolhsub: '⟈', - bull: '•', - bullet: '•', - bump: '≎', - bumpE: '⪮', - bumpe: '≏', - bumpeq: '≏', - cacute: 'ć', - cap: '∩', - capand: '⩄', - capbrcup: '⩉', - capcap: '⩋', - capcup: '⩇', - capdot: '⩀', - caps: '∩︀', - caret: '⁁', - caron: 'ˇ', - ccaps: '⩍', - ccaron: 'č', - ccedil: 'ç', - ccirc: 'ĉ', - ccups: '⩌', - ccupssm: '⩐', - cdot: 'ċ', - cedil: '¸', - cemptyv: '⦲', - cent: '¢', - centerdot: '·', - cfr: '𝔠', - chcy: 'ч', - check: '✓', - checkmark: '✓', - chi: 'χ', - cir: '○', - cirE: '⧃', - circ: 'ˆ', - circeq: '≗', - circlearrowleft: '↺', - circlearrowright: '↻', - circledR: '®', - circledS: 'Ⓢ', - circledast: '⊛', - circledcirc: '⊚', - circleddash: '⊝', - cire: '≗', - cirfnint: '⨐', - cirmid: '⫯', - cirscir: '⧂', - clubs: '♣', - clubsuit: '♣', - colon: ':', - colone: '≔', - coloneq: '≔', - comma: ',', - commat: '@', - comp: '∁', - compfn: '∘', - complement: '∁', - complexes: 'ℂ', - cong: '≅', - congdot: '⩭', - conint: '∮', - copf: '𝕔', - coprod: '∐', - copy: '©', - copysr: '℗', - crarr: '↵', - cross: '✗', - cscr: '𝒸', - csub: '⫏', - csube: '⫑', - csup: '⫐', - csupe: '⫒', - ctdot: '⋯', - cudarrl: '⤸', - cudarrr: '⤵', - cuepr: '⋞', - cuesc: '⋟', - cularr: '↶', - cularrp: '⤽', - cup: '∪', - cupbrcap: '⩈', - cupcap: '⩆', - cupcup: '⩊', - cupdot: '⊍', - cupor: '⩅', - cups: '∪︀', - curarr: '↷', - curarrm: '⤼', - curlyeqprec: '⋞', - curlyeqsucc: '⋟', - curlyvee: '⋎', - curlywedge: '⋏', - curren: '¤', - curvearrowleft: '↶', - curvearrowright: '↷', - cuvee: '⋎', - cuwed: '⋏', - cwconint: '∲', - cwint: '∱', - cylcty: '⌭', - dArr: '⇓', - dHar: '⥥', - dagger: '†', - daleth: 'ℸ', - darr: '↓', - dash: '‐', - dashv: '⊣', - dbkarow: '⤏', - dblac: '˝', - dcaron: 'ď', - dcy: 'д', - dd: 'ⅆ', - ddagger: '‡', - ddarr: '⇊', - ddotseq: '⩷', - deg: '°', - delta: 'δ', - demptyv: '⦱', - dfisht: '⥿', - dfr: '𝔡', - dharl: '⇃', - dharr: '⇂', - diam: '⋄', - diamond: '⋄', - diamondsuit: '♦', - diams: '♦', - die: '¨', - digamma: 'ϝ', - disin: '⋲', - div: '÷', - divide: '÷', - divideontimes: '⋇', - divonx: '⋇', - djcy: 'ђ', - dlcorn: '⌞', - dlcrop: '⌍', - dollar: '$', - dopf: '𝕕', - dot: '˙', - doteq: '≐', - doteqdot: '≑', - dotminus: '∸', - dotplus: '∔', - dotsquare: '⊡', - doublebarwedge: '⌆', - downarrow: '↓', - downdownarrows: '⇊', - downharpoonleft: '⇃', - downharpoonright: '⇂', - drbkarow: '⤐', - drcorn: '⌟', - drcrop: '⌌', - dscr: '𝒹', - dscy: 'ѕ', - dsol: '⧶', - dstrok: 'đ', - dtdot: '⋱', - dtri: '▿', - dtrif: '▾', - duarr: '⇵', - duhar: '⥯', - dwangle: '⦦', - dzcy: 'џ', - dzigrarr: '⟿', - eDDot: '⩷', - eDot: '≑', - eacute: 'é', - easter: '⩮', - ecaron: 'ě', - ecir: '≖', - ecirc: 'ê', - ecolon: '≕', - ecy: 'э', - edot: 'ė', - ee: 'ⅇ', - efDot: '≒', - efr: '𝔢', - eg: '⪚', - egrave: 'è', - egs: '⪖', - egsdot: '⪘', - el: '⪙', - elinters: '⏧', - ell: 'ℓ', - els: '⪕', - elsdot: '⪗', - emacr: 'ē', - empty: '∅', - emptyset: '∅', - emptyv: '∅', - emsp13: ' ', - emsp14: ' ', - emsp: ' ', - eng: 'ŋ', - ensp: ' ', - eogon: 'ę', - eopf: '𝕖', - epar: '⋕', - eparsl: '⧣', - eplus: '⩱', - epsi: 'ε', - epsilon: 'ε', - epsiv: 'ϵ', - eqcirc: '≖', - eqcolon: '≕', - eqsim: '≂', - eqslantgtr: '⪖', - eqslantless: '⪕', - equals: '=', - equest: '≟', - equiv: '≡', - equivDD: '⩸', - eqvparsl: '⧥', - erDot: '≓', - erarr: '⥱', - escr: 'ℯ', - esdot: '≐', - esim: '≂', - eta: 'η', - eth: 'ð', - euml: 'ë', - euro: '€', - excl: '!', - exist: '∃', - expectation: 'ℰ', - exponentiale: 'ⅇ', - fallingdotseq: '≒', - fcy: 'ф', - female: '♀', - ffilig: 'ffi', - fflig: 'ff', - ffllig: 'ffl', - ffr: '𝔣', - filig: 'fi', - fjlig: 'fj', - flat: '♭', - fllig: 'fl', - fltns: '▱', - fnof: 'ƒ', - fopf: '𝕗', - forall: '∀', - fork: '⋔', - forkv: '⫙', - fpartint: '⨍', - frac12: '½', - frac13: '⅓', - frac14: '¼', - frac15: '⅕', - frac16: '⅙', - frac18: '⅛', - frac23: '⅔', - frac25: '⅖', - frac34: '¾', - frac35: '⅗', - frac38: '⅜', - frac45: '⅘', - frac56: '⅚', - frac58: '⅝', - frac78: '⅞', - frasl: '⁄', - frown: '⌢', - fscr: '𝒻', - gE: '≧', - gEl: '⪌', - gacute: 'ǵ', - gamma: 'γ', - gammad: 'ϝ', - gap: '⪆', - gbreve: 'ğ', - gcirc: 'ĝ', - gcy: 'г', - gdot: 'ġ', - ge: '≥', - gel: '⋛', - geq: '≥', - geqq: '≧', - geqslant: '⩾', - ges: '⩾', - gescc: '⪩', - gesdot: '⪀', - gesdoto: '⪂', - gesdotol: '⪄', - gesl: '⋛︀', - gesles: '⪔', - gfr: '𝔤', - gg: '≫', - ggg: '⋙', - gimel: 'ℷ', - gjcy: 'ѓ', - gl: '≷', - glE: '⪒', - gla: '⪥', - glj: '⪤', - gnE: '≩', - gnap: '⪊', - gnapprox: '⪊', - gne: '⪈', - gneq: '⪈', - gneqq: '≩', - gnsim: '⋧', - gopf: '𝕘', - grave: '`', - gscr: 'ℊ', - gsim: '≳', - gsime: '⪎', - gsiml: '⪐', - gt: '>', - gtcc: '⪧', - gtcir: '⩺', - gtdot: '⋗', - gtlPar: '⦕', - gtquest: '⩼', - gtrapprox: '⪆', - gtrarr: '⥸', - gtrdot: '⋗', - gtreqless: '⋛', - gtreqqless: '⪌', - gtrless: '≷', - gtrsim: '≳', - gvertneqq: '≩︀', - gvnE: '≩︀', - hArr: '⇔', - hairsp: ' ', - half: '½', - hamilt: 'ℋ', - hardcy: 'ъ', - harr: '↔', - harrcir: '⥈', - harrw: '↭', - hbar: 'ℏ', - hcirc: 'ĥ', - hearts: '♥', - heartsuit: '♥', - hellip: '…', - hercon: '⊹', - hfr: '𝔥', - hksearow: '⤥', - hkswarow: '⤦', - hoarr: '⇿', - homtht: '∻', - hookleftarrow: '↩', - hookrightarrow: '↪', - hopf: '𝕙', - horbar: '―', - hscr: '𝒽', - hslash: 'ℏ', - hstrok: 'ħ', - hybull: '⁃', - hyphen: '‐', - iacute: 'í', - ic: '⁣', - icirc: 'î', - icy: 'и', - iecy: 'е', - iexcl: '¡', - iff: '⇔', - ifr: '𝔦', - igrave: 'ì', - ii: 'ⅈ', - iiiint: '⨌', - iiint: '∭', - iinfin: '⧜', - iiota: '℩', - ijlig: 'ij', - imacr: 'ī', - image: 'ℑ', - imagline: 'ℐ', - imagpart: 'ℑ', - imath: 'ı', - imof: '⊷', - imped: 'Ƶ', - in: '∈', - incare: '℅', - infin: '∞', - infintie: '⧝', - inodot: 'ı', - int: '∫', - intcal: '⊺', - integers: 'ℤ', - intercal: '⊺', - intlarhk: '⨗', - intprod: '⨼', - iocy: 'ё', - iogon: 'į', - iopf: '𝕚', - iota: 'ι', - iprod: '⨼', - iquest: '¿', - iscr: '𝒾', - isin: '∈', - isinE: '⋹', - isindot: '⋵', - isins: '⋴', - isinsv: '⋳', - isinv: '∈', - it: '⁢', - itilde: 'ĩ', - iukcy: 'і', - iuml: 'ï', - jcirc: 'ĵ', - jcy: 'й', - jfr: '𝔧', - jmath: 'ȷ', - jopf: '𝕛', - jscr: '𝒿', - jsercy: 'ј', - jukcy: 'є', - kappa: 'κ', - kappav: 'ϰ', - kcedil: 'ķ', - kcy: 'к', - kfr: '𝔨', - kgreen: 'ĸ', - khcy: 'х', - kjcy: 'ќ', - kopf: '𝕜', - kscr: '𝓀', - lAarr: '⇚', - lArr: '⇐', - lAtail: '⤛', - lBarr: '⤎', - lE: '≦', - lEg: '⪋', - lHar: '⥢', - lacute: 'ĺ', - laemptyv: '⦴', - lagran: 'ℒ', - lambda: 'λ', - lang: '⟨', - langd: '⦑', - langle: '⟨', - lap: '⪅', - laquo: '«', - larr: '←', - larrb: '⇤', - larrbfs: '⤟', - larrfs: '⤝', - larrhk: '↩', - larrlp: '↫', - larrpl: '⤹', - larrsim: '⥳', - larrtl: '↢', - lat: '⪫', - latail: '⤙', - late: '⪭', - lates: '⪭︀', - lbarr: '⤌', - lbbrk: '❲', - lbrace: '{', - lbrack: '[', - lbrke: '⦋', - lbrksld: '⦏', - lbrkslu: '⦍', - lcaron: 'ľ', - lcedil: 'ļ', - lceil: '⌈', - lcub: '{', - lcy: 'л', - ldca: '⤶', - ldquo: '“', - ldquor: '„', - ldrdhar: '⥧', - ldrushar: '⥋', - ldsh: '↲', - le: '≤', - leftarrow: '←', - leftarrowtail: '↢', - leftharpoondown: '↽', - leftharpoonup: '↼', - leftleftarrows: '⇇', - leftrightarrow: '↔', - leftrightarrows: '⇆', - leftrightharpoons: '⇋', - leftrightsquigarrow: '↭', - leftthreetimes: '⋋', - leg: '⋚', - leq: '≤', - leqq: '≦', - leqslant: '⩽', - les: '⩽', - lescc: '⪨', - lesdot: '⩿', - lesdoto: '⪁', - lesdotor: '⪃', - lesg: '⋚︀', - lesges: '⪓', - lessapprox: '⪅', - lessdot: '⋖', - lesseqgtr: '⋚', - lesseqqgtr: '⪋', - lessgtr: '≶', - lesssim: '≲', - lfisht: '⥼', - lfloor: '⌊', - lfr: '𝔩', - lg: '≶', - lgE: '⪑', - lhard: '↽', - lharu: '↼', - lharul: '⥪', - lhblk: '▄', - ljcy: 'љ', - ll: '≪', - llarr: '⇇', - llcorner: '⌞', - llhard: '⥫', - lltri: '◺', - lmidot: 'ŀ', - lmoust: '⎰', - lmoustache: '⎰', - lnE: '≨', - lnap: '⪉', - lnapprox: '⪉', - lne: '⪇', - lneq: '⪇', - lneqq: '≨', - lnsim: '⋦', - loang: '⟬', - loarr: '⇽', - lobrk: '⟦', - longleftarrow: '⟵', - longleftrightarrow: '⟷', - longmapsto: '⟼', - longrightarrow: '⟶', - looparrowleft: '↫', - looparrowright: '↬', - lopar: '⦅', - lopf: '𝕝', - loplus: '⨭', - lotimes: '⨴', - lowast: '∗', - lowbar: '_', - loz: '◊', - lozenge: '◊', - lozf: '⧫', - lpar: '(', - lparlt: '⦓', - lrarr: '⇆', - lrcorner: '⌟', - lrhar: '⇋', - lrhard: '⥭', - lrm: '‎', - lrtri: '⊿', - lsaquo: '‹', - lscr: '𝓁', - lsh: '↰', - lsim: '≲', - lsime: '⪍', - lsimg: '⪏', - lsqb: '[', - lsquo: '‘', - lsquor: '‚', - lstrok: 'ł', - lt: '<', - ltcc: '⪦', - ltcir: '⩹', - ltdot: '⋖', - lthree: '⋋', - ltimes: '⋉', - ltlarr: '⥶', - ltquest: '⩻', - ltrPar: '⦖', - ltri: '◃', - ltrie: '⊴', - ltrif: '◂', - lurdshar: '⥊', - luruhar: '⥦', - lvertneqq: '≨︀', - lvnE: '≨︀', - mDDot: '∺', - macr: '¯', - male: '♂', - malt: '✠', - maltese: '✠', - map: '↦', - mapsto: '↦', - mapstodown: '↧', - mapstoleft: '↤', - mapstoup: '↥', - marker: '▮', - mcomma: '⨩', - mcy: 'м', - mdash: '—', - measuredangle: '∡', - mfr: '𝔪', - mho: '℧', - micro: 'µ', - mid: '∣', - midast: '*', - midcir: '⫰', - middot: '·', - minus: '−', - minusb: '⊟', - minusd: '∸', - minusdu: '⨪', - mlcp: '⫛', - mldr: '…', - mnplus: '∓', - models: '⊧', - mopf: '𝕞', - mp: '∓', - mscr: '𝓂', - mstpos: '∾', - mu: 'μ', - multimap: '⊸', - mumap: '⊸', - nGg: '⋙̸', - nGt: '≫⃒', - nGtv: '≫̸', - nLeftarrow: '⇍', - nLeftrightarrow: '⇎', - nLl: '⋘̸', - nLt: '≪⃒', - nLtv: '≪̸', - nRightarrow: '⇏', - nVDash: '⊯', - nVdash: '⊮', - nabla: '∇', - nacute: 'ń', - nang: '∠⃒', - nap: '≉', - napE: '⩰̸', - napid: '≋̸', - napos: 'ʼn', - napprox: '≉', - natur: '♮', - natural: '♮', - naturals: 'ℕ', - nbsp: ' ', - nbump: '≎̸', - nbumpe: '≏̸', - ncap: '⩃', - ncaron: 'ň', - ncedil: 'ņ', - ncong: '≇', - ncongdot: '⩭̸', - ncup: '⩂', - ncy: 'н', - ndash: '–', - ne: '≠', - neArr: '⇗', - nearhk: '⤤', - nearr: '↗', - nearrow: '↗', - nedot: '≐̸', - nequiv: '≢', - nesear: '⤨', - nesim: '≂̸', - nexist: '∄', - nexists: '∄', - nfr: '𝔫', - ngE: '≧̸', - nge: '≱', - ngeq: '≱', - ngeqq: '≧̸', - ngeqslant: '⩾̸', - nges: '⩾̸', - ngsim: '≵', - ngt: '≯', - ngtr: '≯', - nhArr: '⇎', - nharr: '↮', - nhpar: '⫲', - ni: '∋', - nis: '⋼', - nisd: '⋺', - niv: '∋', - njcy: 'њ', - nlArr: '⇍', - nlE: '≦̸', - nlarr: '↚', - nldr: '‥', - nle: '≰', - nleftarrow: '↚', - nleftrightarrow: '↮', - nleq: '≰', - nleqq: '≦̸', - nleqslant: '⩽̸', - nles: '⩽̸', - nless: '≮', - nlsim: '≴', - nlt: '≮', - nltri: '⋪', - nltrie: '⋬', - nmid: '∤', - nopf: '𝕟', - not: '¬', - notin: '∉', - notinE: '⋹̸', - notindot: '⋵̸', - notinva: '∉', - notinvb: '⋷', - notinvc: '⋶', - notni: '∌', - notniva: '∌', - notnivb: '⋾', - notnivc: '⋽', - npar: '∦', - nparallel: '∦', - nparsl: '⫽⃥', - npart: '∂̸', - npolint: '⨔', - npr: '⊀', - nprcue: '⋠', - npre: '⪯̸', - nprec: '⊀', - npreceq: '⪯̸', - nrArr: '⇏', - nrarr: '↛', - nrarrc: '⤳̸', - nrarrw: '↝̸', - nrightarrow: '↛', - nrtri: '⋫', - nrtrie: '⋭', - nsc: '⊁', - nsccue: '⋡', - nsce: '⪰̸', - nscr: '𝓃', - nshortmid: '∤', - nshortparallel: '∦', - nsim: '≁', - nsime: '≄', - nsimeq: '≄', - nsmid: '∤', - nspar: '∦', - nsqsube: '⋢', - nsqsupe: '⋣', - nsub: '⊄', - nsubE: '⫅̸', - nsube: '⊈', - nsubset: '⊂⃒', - nsubseteq: '⊈', - nsubseteqq: '⫅̸', - nsucc: '⊁', - nsucceq: '⪰̸', - nsup: '⊅', - nsupE: '⫆̸', - nsupe: '⊉', - nsupset: '⊃⃒', - nsupseteq: '⊉', - nsupseteqq: '⫆̸', - ntgl: '≹', - ntilde: 'ñ', - ntlg: '≸', - ntriangleleft: '⋪', - ntrianglelefteq: '⋬', - ntriangleright: '⋫', - ntrianglerighteq: '⋭', - nu: 'ν', - num: '#', - numero: '№', - numsp: ' ', - nvDash: '⊭', - nvHarr: '⤄', - nvap: '≍⃒', - nvdash: '⊬', - nvge: '≥⃒', - nvgt: '>⃒', - nvinfin: '⧞', - nvlArr: '⤂', - nvle: '≤⃒', - nvlt: '<⃒', - nvltrie: '⊴⃒', - nvrArr: '⤃', - nvrtrie: '⊵⃒', - nvsim: '∼⃒', - nwArr: '⇖', - nwarhk: '⤣', - nwarr: '↖', - nwarrow: '↖', - nwnear: '⤧', - oS: 'Ⓢ', - oacute: 'ó', - oast: '⊛', - ocir: '⊚', - ocirc: 'ô', - ocy: 'о', - odash: '⊝', - odblac: 'ő', - odiv: '⨸', - odot: '⊙', - odsold: '⦼', - oelig: 'œ', - ofcir: '⦿', - ofr: '𝔬', - ogon: '˛', - ograve: 'ò', - ogt: '⧁', - ohbar: '⦵', - ohm: 'Ω', - oint: '∮', - olarr: '↺', - olcir: '⦾', - olcross: '⦻', - oline: '‾', - olt: '⧀', - omacr: 'ō', - omega: 'ω', - omicron: 'ο', - omid: '⦶', - ominus: '⊖', - oopf: '𝕠', - opar: '⦷', - operp: '⦹', - oplus: '⊕', - or: '∨', - orarr: '↻', - ord: '⩝', - order: 'ℴ', - orderof: 'ℴ', - ordf: 'ª', - ordm: 'º', - origof: '⊶', - oror: '⩖', - orslope: '⩗', - orv: '⩛', - oscr: 'ℴ', - oslash: 'ø', - osol: '⊘', - otilde: 'õ', - otimes: '⊗', - otimesas: '⨶', - ouml: 'ö', - ovbar: '⌽', - par: '∥', - para: '¶', - parallel: '∥', - parsim: '⫳', - parsl: '⫽', - part: '∂', - pcy: 'п', - percnt: '%', - period: '.', - permil: '‰', - perp: '⊥', - pertenk: '‱', - pfr: '𝔭', - phi: 'φ', - phiv: 'ϕ', - phmmat: 'ℳ', - phone: '☎', - pi: 'π', - pitchfork: '⋔', - piv: 'ϖ', - planck: 'ℏ', - planckh: 'ℎ', - plankv: 'ℏ', - plus: '+', - plusacir: '⨣', - plusb: '⊞', - pluscir: '⨢', - plusdo: '∔', - plusdu: '⨥', - pluse: '⩲', - plusmn: '±', - plussim: '⨦', - plustwo: '⨧', - pm: '±', - pointint: '⨕', - popf: '𝕡', - pound: '£', - pr: '≺', - prE: '⪳', - prap: '⪷', - prcue: '≼', - pre: '⪯', - prec: '≺', - precapprox: '⪷', - preccurlyeq: '≼', - preceq: '⪯', - precnapprox: '⪹', - precneqq: '⪵', - precnsim: '⋨', - precsim: '≾', - prime: '′', - primes: 'ℙ', - prnE: '⪵', - prnap: '⪹', - prnsim: '⋨', - prod: '∏', - profalar: '⌮', - profline: '⌒', - profsurf: '⌓', - prop: '∝', - propto: '∝', - prsim: '≾', - prurel: '⊰', - pscr: '𝓅', - psi: 'ψ', - puncsp: ' ', - qfr: '𝔮', - qint: '⨌', - qopf: '𝕢', - qprime: '⁗', - qscr: '𝓆', - quaternions: 'ℍ', - quatint: '⨖', - quest: '?', - questeq: '≟', - quot: '"', - rAarr: '⇛', - rArr: '⇒', - rAtail: '⤜', - rBarr: '⤏', - rHar: '⥤', - race: '∽̱', - racute: 'ŕ', - radic: '√', - raemptyv: '⦳', - rang: '⟩', - rangd: '⦒', - range: '⦥', - rangle: '⟩', - raquo: '»', - rarr: '→', - rarrap: '⥵', - rarrb: '⇥', - rarrbfs: '⤠', - rarrc: '⤳', - rarrfs: '⤞', - rarrhk: '↪', - rarrlp: '↬', - rarrpl: '⥅', - rarrsim: '⥴', - rarrtl: '↣', - rarrw: '↝', - ratail: '⤚', - ratio: '∶', - rationals: 'ℚ', - rbarr: '⤍', - rbbrk: '❳', - rbrace: '}', - rbrack: ']', - rbrke: '⦌', - rbrksld: '⦎', - rbrkslu: '⦐', - rcaron: 'ř', - rcedil: 'ŗ', - rceil: '⌉', - rcub: '}', - rcy: 'р', - rdca: '⤷', - rdldhar: '⥩', - rdquo: '”', - rdquor: '”', - rdsh: '↳', - real: 'ℜ', - realine: 'ℛ', - realpart: 'ℜ', - reals: 'ℝ', - rect: '▭', - reg: '®', - rfisht: '⥽', - rfloor: '⌋', - rfr: '𝔯', - rhard: '⇁', - rharu: '⇀', - rharul: '⥬', - rho: 'ρ', - rhov: 'ϱ', - rightarrow: '→', - rightarrowtail: '↣', - rightharpoondown: '⇁', - rightharpoonup: '⇀', - rightleftarrows: '⇄', - rightleftharpoons: '⇌', - rightrightarrows: '⇉', - rightsquigarrow: '↝', - rightthreetimes: '⋌', - ring: '˚', - risingdotseq: '≓', - rlarr: '⇄', - rlhar: '⇌', - rlm: '‏', - rmoust: '⎱', - rmoustache: '⎱', - rnmid: '⫮', - roang: '⟭', - roarr: '⇾', - robrk: '⟧', - ropar: '⦆', - ropf: '𝕣', - roplus: '⨮', - rotimes: '⨵', - rpar: ')', - rpargt: '⦔', - rppolint: '⨒', - rrarr: '⇉', - rsaquo: '›', - rscr: '𝓇', - rsh: '↱', - rsqb: ']', - rsquo: '’', - rsquor: '’', - rthree: '⋌', - rtimes: '⋊', - rtri: '▹', - rtrie: '⊵', - rtrif: '▸', - rtriltri: '⧎', - ruluhar: '⥨', - rx: '℞', - sacute: 'ś', - sbquo: '‚', - sc: '≻', - scE: '⪴', - scap: '⪸', - scaron: 'š', - sccue: '≽', - sce: '⪰', - scedil: 'ş', - scirc: 'ŝ', - scnE: '⪶', - scnap: '⪺', - scnsim: '⋩', - scpolint: '⨓', - scsim: '≿', - scy: 'с', - sdot: '⋅', - sdotb: '⊡', - sdote: '⩦', - seArr: '⇘', - searhk: '⤥', - searr: '↘', - searrow: '↘', - sect: '§', - semi: ';', - seswar: '⤩', - setminus: '∖', - setmn: '∖', - sext: '✶', - sfr: '𝔰', - sfrown: '⌢', - sharp: '♯', - shchcy: 'щ', - shcy: 'ш', - shortmid: '∣', - shortparallel: '∥', - shy: '­', - sigma: 'σ', - sigmaf: 'ς', - sigmav: 'ς', - sim: '∼', - simdot: '⩪', - sime: '≃', - simeq: '≃', - simg: '⪞', - simgE: '⪠', - siml: '⪝', - simlE: '⪟', - simne: '≆', - simplus: '⨤', - simrarr: '⥲', - slarr: '←', - smallsetminus: '∖', - smashp: '⨳', - smeparsl: '⧤', - smid: '∣', - smile: '⌣', - smt: '⪪', - smte: '⪬', - smtes: '⪬︀', - softcy: 'ь', - sol: '/', - solb: '⧄', - solbar: '⌿', - sopf: '𝕤', - spades: '♠', - spadesuit: '♠', - spar: '∥', - sqcap: '⊓', - sqcaps: '⊓︀', - sqcup: '⊔', - sqcups: '⊔︀', - sqsub: '⊏', - sqsube: '⊑', - sqsubset: '⊏', - sqsubseteq: '⊑', - sqsup: '⊐', - sqsupe: '⊒', - sqsupset: '⊐', - sqsupseteq: '⊒', - squ: '□', - square: '□', - squarf: '▪', - squf: '▪', - srarr: '→', - sscr: '𝓈', - ssetmn: '∖', - ssmile: '⌣', - sstarf: '⋆', - star: '☆', - starf: '★', - straightepsilon: 'ϵ', - straightphi: 'ϕ', - strns: '¯', - sub: '⊂', - subE: '⫅', - subdot: '⪽', - sube: '⊆', - subedot: '⫃', - submult: '⫁', - subnE: '⫋', - subne: '⊊', - subplus: '⪿', - subrarr: '⥹', - subset: '⊂', - subseteq: '⊆', - subseteqq: '⫅', - subsetneq: '⊊', - subsetneqq: '⫋', - subsim: '⫇', - subsub: '⫕', - subsup: '⫓', - succ: '≻', - succapprox: '⪸', - succcurlyeq: '≽', - succeq: '⪰', - succnapprox: '⪺', - succneqq: '⪶', - succnsim: '⋩', - succsim: '≿', - sum: '∑', - sung: '♪', - sup1: '¹', - sup2: '²', - sup3: '³', - sup: '⊃', - supE: '⫆', - supdot: '⪾', - supdsub: '⫘', - supe: '⊇', - supedot: '⫄', - suphsol: '⟉', - suphsub: '⫗', - suplarr: '⥻', - supmult: '⫂', - supnE: '⫌', - supne: '⊋', - supplus: '⫀', - supset: '⊃', - supseteq: '⊇', - supseteqq: '⫆', - supsetneq: '⊋', - supsetneqq: '⫌', - supsim: '⫈', - supsub: '⫔', - supsup: '⫖', - swArr: '⇙', - swarhk: '⤦', - swarr: '↙', - swarrow: '↙', - swnwar: '⤪', - szlig: 'ß', - target: '⌖', - tau: 'τ', - tbrk: '⎴', - tcaron: 'ť', - tcedil: 'ţ', - tcy: 'т', - tdot: '⃛', - telrec: '⌕', - tfr: '𝔱', - there4: '∴', - therefore: '∴', - theta: 'θ', - thetasym: 'ϑ', - thetav: 'ϑ', - thickapprox: '≈', - thicksim: '∼', - thinsp: ' ', - thkap: '≈', - thksim: '∼', - thorn: 'þ', - tilde: '˜', - times: '×', - timesb: '⊠', - timesbar: '⨱', - timesd: '⨰', - tint: '∭', - toea: '⤨', - top: '⊤', - topbot: '⌶', - topcir: '⫱', - topf: '𝕥', - topfork: '⫚', - tosa: '⤩', - tprime: '‴', - trade: '™', - triangle: '▵', - triangledown: '▿', - triangleleft: '◃', - trianglelefteq: '⊴', - triangleq: '≜', - triangleright: '▹', - trianglerighteq: '⊵', - tridot: '◬', - trie: '≜', - triminus: '⨺', - triplus: '⨹', - trisb: '⧍', - tritime: '⨻', - trpezium: '⏢', - tscr: '𝓉', - tscy: 'ц', - tshcy: 'ћ', - tstrok: 'ŧ', - twixt: '≬', - twoheadleftarrow: '↞', - twoheadrightarrow: '↠', - uArr: '⇑', - uHar: '⥣', - uacute: 'ú', - uarr: '↑', - ubrcy: 'ў', - ubreve: 'ŭ', - ucirc: 'û', - ucy: 'у', - udarr: '⇅', - udblac: 'ű', - udhar: '⥮', - ufisht: '⥾', - ufr: '𝔲', - ugrave: 'ù', - uharl: '↿', - uharr: '↾', - uhblk: '▀', - ulcorn: '⌜', - ulcorner: '⌜', - ulcrop: '⌏', - ultri: '◸', - umacr: 'ū', - uml: '¨', - uogon: 'ų', - uopf: '𝕦', - uparrow: '↑', - updownarrow: '↕', - upharpoonleft: '↿', - upharpoonright: '↾', - uplus: '⊎', - upsi: 'υ', - upsih: 'ϒ', - upsilon: 'υ', - upuparrows: '⇈', - urcorn: '⌝', - urcorner: '⌝', - urcrop: '⌎', - uring: 'ů', - urtri: '◹', - uscr: '𝓊', - utdot: '⋰', - utilde: 'ũ', - utri: '▵', - utrif: '▴', - uuarr: '⇈', - uuml: 'ü', - uwangle: '⦧', - vArr: '⇕', - vBar: '⫨', - vBarv: '⫩', - vDash: '⊨', - vangrt: '⦜', - varepsilon: 'ϵ', - varkappa: 'ϰ', - varnothing: '∅', - varphi: 'ϕ', - varpi: 'ϖ', - varpropto: '∝', - varr: '↕', - varrho: 'ϱ', - varsigma: 'ς', - varsubsetneq: '⊊︀', - varsubsetneqq: '⫋︀', - varsupsetneq: '⊋︀', - varsupsetneqq: '⫌︀', - vartheta: 'ϑ', - vartriangleleft: '⊲', - vartriangleright: '⊳', - vcy: 'в', - vdash: '⊢', - vee: '∨', - veebar: '⊻', - veeeq: '≚', - vellip: '⋮', - verbar: '|', - vert: '|', - vfr: '𝔳', - vltri: '⊲', - vnsub: '⊂⃒', - vnsup: '⊃⃒', - vopf: '𝕧', - vprop: '∝', - vrtri: '⊳', - vscr: '𝓋', - vsubnE: '⫋︀', - vsubne: '⊊︀', - vsupnE: '⫌︀', - vsupne: '⊋︀', - vzigzag: '⦚', - wcirc: 'ŵ', - wedbar: '⩟', - wedge: '∧', - wedgeq: '≙', - weierp: '℘', - wfr: '𝔴', - wopf: '𝕨', - wp: '℘', - wr: '≀', - wreath: '≀', - wscr: '𝓌', - xcap: '⋂', - xcirc: '◯', - xcup: '⋃', - xdtri: '▽', - xfr: '𝔵', - xhArr: '⟺', - xharr: '⟷', - xi: 'ξ', - xlArr: '⟸', - xlarr: '⟵', - xmap: '⟼', - xnis: '⋻', - xodot: '⨀', - xopf: '𝕩', - xoplus: '⨁', - xotime: '⨂', - xrArr: '⟹', - xrarr: '⟶', - xscr: '𝓍', - xsqcup: '⨆', - xuplus: '⨄', - xutri: '△', - xvee: '⋁', - xwedge: '⋀', - yacute: 'ý', - yacy: 'я', - ycirc: 'ŷ', - ycy: 'ы', - yen: '¥', - yfr: '𝔶', - yicy: 'ї', - yopf: '𝕪', - yscr: '𝓎', - yucy: 'ю', - yuml: 'ÿ', - zacute: 'ź', - zcaron: 'ž', - zcy: 'з', - zdot: 'ż', - zeetrf: 'ℨ', - zeta: 'ζ', - zfr: '𝔷', - zhcy: 'ж', - zigrarr: '⇝', - zopf: '𝕫', - zscr: '𝓏', - zwj: '‍', - zwnj: '‌' -} diff --git a/node_modules/character-entities/license b/node_modules/character-entities/license deleted file mode 100644 index 32e7a3d93c..0000000000 --- a/node_modules/character-entities/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-entities/package.json b/node_modules/character-entities/package.json deleted file mode 100644 index 30f6a53963..0000000000 --- a/node_modules/character-entities/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "character-entities", - "version": "2.0.2", - "description": "Map of named character references", - "license": "MIT", - "keywords": [ - "html", - "entity", - "entities", - "character", - "reference", - "name", - "replacement" - ], - "repository": "wooorm/character-entities", - "bugs": "https://github.com/wooorm/character-entities/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "bail": "^2.0.0", - "c8": "^7.0.0", - "concat-stream": "^2.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.50.0" - }, - "scripts": { - "generate": "node build", - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run generate && npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/character-entities/readme.md b/node_modules/character-entities/readme.md deleted file mode 100644 index 16889ca142..0000000000 --- a/node_modules/character-entities/readme.md +++ /dev/null @@ -1,152 +0,0 @@ -# character-entities - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Map of named character references. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [characterEntities](#characterentities) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a map of named character references in HTML (latest) to the characters -they represent. - -## When should I use this? - -Maybe when you’re writing an HTML parser or minifier, but otherwise probably -never! -Even then, it might be better to use [`parse-entities`][parse-entities] or -[`stringify-entities`][stringify-entities]. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, 16.0+, 18.0+), install with [npm][]: - -```sh -npm install character-entities -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {characterEntities} from 'https://esm.sh/character-entities@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {characterEntities} from 'character-entities' - -console.log(characterEntities.AElig) // => 'Æ' -console.log(characterEntities.aelig) // => 'æ' -console.log(characterEntities.amp) // => '&' -``` - -## API - -This package exports the identifier `characterEntities`. -There is no default export. - -### characterEntities - -Mapping between (case-sensitive) character entity names to replacements. -See [`html.spec.whatwg.org`][html] for more info. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, 16.0+, and 18.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) - — parse (decode) character references -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — serialize (encode) character references -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — info on named character references in HTML 4 -* [`character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) - — info on invalid numeric character references -* [`character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) - — info on legacy named character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/character-entities/workflows/main/badge.svg - -[build]: https://github.com/wooorm/character-entities/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-entities.svg - -[coverage]: https://codecov.io/github/wooorm/character-entities - -[downloads-badge]: https://img.shields.io/npm/dm/character-entities.svg - -[downloads]: https://www.npmjs.com/package/character-entities - -[size-badge]: https://img.shields.io/bundlephobia/minzip/character-entities.svg - -[size]: https://bundlephobia.com/result?p=character-entities - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[parse-entities]: https://github.com/wooorm/parse-entities - -[stringify-entities]: https://github.com/wooorm/stringify-entities - -[html]: https://html.spec.whatwg.org/multipage/syntax.html#named-character-references diff --git a/node_modules/character-reference-invalid/index.d.ts b/node_modules/character-reference-invalid/index.d.ts deleted file mode 100644 index 800115adbf..0000000000 --- a/node_modules/character-reference-invalid/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Map of invalid numeric character references to their replacements, according to HTML. - * - * @type {Record} - */ -export const characterReferenceInvalid: Record diff --git a/node_modules/character-reference-invalid/index.js b/node_modules/character-reference-invalid/index.js deleted file mode 100644 index 3fd48c5d7c..0000000000 --- a/node_modules/character-reference-invalid/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Map of invalid numeric character references to their replacements, according to HTML. - * - * @type {Record} - */ -export const characterReferenceInvalid = { - 0: '�', - 128: '€', - 130: '‚', - 131: 'ƒ', - 132: '„', - 133: '…', - 134: '†', - 135: '‡', - 136: 'ˆ', - 137: '‰', - 138: 'Š', - 139: '‹', - 140: 'Œ', - 142: 'Ž', - 145: '‘', - 146: '’', - 147: '“', - 148: '”', - 149: '•', - 150: '–', - 151: '—', - 152: '˜', - 153: '™', - 154: 'š', - 155: '›', - 156: 'œ', - 158: 'ž', - 159: 'Ÿ' -} diff --git a/node_modules/character-reference-invalid/license b/node_modules/character-reference-invalid/license deleted file mode 100644 index 32e7a3d93c..0000000000 --- a/node_modules/character-reference-invalid/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/character-reference-invalid/package.json b/node_modules/character-reference-invalid/package.json deleted file mode 100644 index b133319c35..0000000000 --- a/node_modules/character-reference-invalid/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "character-reference-invalid", - "version": "2.0.1", - "description": "Map of invalid numeric character references to their replacements, according to HTML", - "license": "MIT", - "keywords": [ - "html", - "entity", - "numeric", - "character", - "reference", - "replacement", - "invalid", - "name" - ], - "repository": "wooorm/character-reference-invalid", - "bugs": "https://github.com/wooorm/character-reference-invalid/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "bail": "^2.0.0", - "c8": "^7.0.0", - "concat-stream": "^2.0.0", - "hast-util-select": "^5.0.0", - "hast-util-to-string": "^2.0.0", - "prettier": "^2.0.0", - "rehype-parse": "^8.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "unified": "^10.0.0", - "xo": "^0.45.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "generate": "node build", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run generate && npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/character-reference-invalid/readme.md b/node_modules/character-reference-invalid/readme.md deleted file mode 100644 index 2190876940..0000000000 --- a/node_modules/character-reference-invalid/readme.md +++ /dev/null @@ -1,156 +0,0 @@ -# character-reference-invalid - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Map of invalid numeric character references to their replacements, according to -HTML. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`characterReferenceInvalid`](#characterreferenceinvalid) -* [Source](#source) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a map from the [HTML spec][source] of C1 ASCII/Unicode control -characters (which are disallowed by HTML) to the characters those code points -would have in Windows 1252. -For example, U+0080 (Padding Character) maps to `€`, because that’s used for -0x80 in Windows 1252. - -## When should I use this? - -Probably never, unless you’re dealing with parsing HTML or similar XML-like -things, or in a place where Unicode is not the primary encoding (it is in most -places). - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install character-reference-invalid -``` - -In Deno with [Skypack][]: - -```js -import {characterReferenceInvalid} from 'https://cdn.skypack.dev/character-reference-invalid@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {characterReferenceInvalid} from 'character-reference-invalid' - -console.log(characterReferenceInvalid[0x80]) // => '€' -console.log(characterReferenceInvalid[0x89]) // => '‰' -console.log(characterReferenceInvalid[0x99]) // => '™' -``` - -## API - -This package exports the following identifiers: `characterReferenceInvalid`. -There is no default export. - -### `characterReferenceInvalid` - -`Record` — mapping between invalid numeric character reference -codes to replacements characters. - -## Source - -See [`html.spec.whatwg.org`][source]. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) - — HTML character entity info -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — HTML 4 character entity info -* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) - — legacy character entity info -* [`wooorm/parse-entities`](https://github.com/wooorm/parse-entities) - — parse HTML character references -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — serialize HTML character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/character-reference-invalid/workflows/main/badge.svg - -[build]: https://github.com/wooorm/character-reference-invalid/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/character-reference-invalid.svg - -[coverage]: https://codecov.io/github/wooorm/character-reference-invalid - -[downloads-badge]: https://img.shields.io/npm/dm/character-reference-invalid.svg - -[downloads]: https://www.npmjs.com/package/character-reference-invalid - -[size-badge]: https://img.shields.io/bundlephobia/minzip/character-reference-invalid.svg - -[size]: https://bundlephobia.com/result?p=character-reference-invalid - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[source]: https://html.spec.whatwg.org/multipage/parsing.html#table-charref-overrides diff --git a/node_modules/color-convert/CHANGELOG.md b/node_modules/color-convert/CHANGELOG.md deleted file mode 100644 index 0a7bce4fd5..0000000000 --- a/node_modules/color-convert/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# 1.0.0 - 2016-01-07 - -- Removed: unused speed test -- Added: Automatic routing between previously unsupported conversions -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Removed: `convert()` class -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Changed: all functions to lookup dictionary -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Changed: `ansi` to `ansi256` -([#27](https://github.com/Qix-/color-convert/pull/27)) -- Fixed: argument grouping for functions requiring only one argument -([#27](https://github.com/Qix-/color-convert/pull/27)) - -# 0.6.0 - 2015-07-23 - -- Added: methods to handle -[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: - - rgb2ansi16 - - rgb2ansi - - hsl2ansi16 - - hsl2ansi - - hsv2ansi16 - - hsv2ansi - - hwb2ansi16 - - hwb2ansi - - cmyk2ansi16 - - cmyk2ansi - - keyword2ansi16 - - keyword2ansi - - ansi162rgb - - ansi162hsl - - ansi162hsv - - ansi162hwb - - ansi162cmyk - - ansi162keyword - - ansi2rgb - - ansi2hsl - - ansi2hsv - - ansi2hwb - - ansi2cmyk - - ansi2keyword -([#18](https://github.com/harthur/color-convert/pull/18)) - -# 0.5.3 - 2015-06-02 - -- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` -([#15](https://github.com/harthur/color-convert/issues/15)) - ---- - -Check out commit logs for older releases diff --git a/node_modules/color-convert/LICENSE b/node_modules/color-convert/LICENSE deleted file mode 100644 index 5b4c386f92..0000000000 --- a/node_modules/color-convert/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2011-2016 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/node_modules/color-convert/README.md b/node_modules/color-convert/README.md deleted file mode 100644 index d4b08fc369..0000000000 --- a/node_modules/color-convert/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# color-convert - -[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert) - -Color-convert is a color conversion library for JavaScript and node. -It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest): - -```js -var convert = require('color-convert'); - -convert.rgb.hsl(140, 200, 100); // [96, 48, 59] -convert.keyword.rgb('blue'); // [0, 0, 255] - -var rgbChannels = convert.rgb.channels; // 3 -var cmykChannels = convert.cmyk.channels; // 4 -var ansiChannels = convert.ansi16.channels; // 1 -``` - -# Install - -```console -$ npm install color-convert -``` - -# API - -Simply get the property of the _from_ and _to_ conversion that you're looking for. - -All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function. - -All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha). - -```js -var convert = require('color-convert'); - -// Hex to LAB -convert.hex.lab('DEADBF'); // [ 76, 21, -2 ] -convert.hex.lab.raw('DEADBF'); // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ] - -// RGB to CMYK -convert.rgb.cmyk(167, 255, 4); // [ 35, 0, 98, 0 ] -convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ] -``` - -### Arrays -All functions that accept multiple arguments also support passing an array. - -Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.) - -```js -var convert = require('color-convert'); - -convert.rgb.hex(123, 45, 67); // '7B2D43' -convert.rgb.hex([123, 45, 67]); // '7B2D43' -``` - -## Routing - -Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex). - -Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js). - -# Contribute - -If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request. - -# License -Copyright © 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE). diff --git a/node_modules/color-convert/conversions.js b/node_modules/color-convert/conversions.js deleted file mode 100644 index 2657f265c9..0000000000 --- a/node_modules/color-convert/conversions.js +++ /dev/null @@ -1,839 +0,0 @@ -/* MIT license */ -/* eslint-disable no-mixed-operators */ -const cssKeywords = require('color-name'); - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -const reverseKeywords = {}; -for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; -} - -const convert = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -module.exports = convert; - -// Hide .channels and .labels properties -for (const model of Object.keys(convert)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - const {channels, labels} = convert[model]; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); -} - -convert.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - const l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; - - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); -} - -convert.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - let currentClosestDistance = Infinity; - let currentClosestKeyword; - - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; - - // Compute comparative distance - const distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; - - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); - - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - const xyz = convert.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - const t1 = 2 * l - t2; - - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; - - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; - - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; - - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - const n = wh + f * (v - wh); // Linear interpolation - - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - /* eslint-enable max-statements-per-line,no-multi-spaces */ - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; - - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - const c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; - - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; - - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - let color = args % 10; - - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - let colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } - - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; - - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); - - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; - - const c = s * v; - let f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; - - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const v = c + g * (1.0 - c); - let f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hsv = convert.gray.hsl; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; diff --git a/node_modules/color-convert/index.js b/node_modules/color-convert/index.js deleted file mode 100644 index b648e5737b..0000000000 --- a/node_modules/color-convert/index.js +++ /dev/null @@ -1,81 +0,0 @@ -const conversions = require('./conversions'); -const route = require('./route'); - -const convert = {}; - -const models = Object.keys(conversions); - -function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - return fn(args); - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - const result = fn(args); - - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(fromModel => { - convert[fromModel] = {}; - - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); - - const routes = route(fromModel); - const routeModels = Object.keys(routes); - - routeModels.forEach(toModel => { - const fn = routes[toModel]; - - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -module.exports = convert; diff --git a/node_modules/color-convert/package.json b/node_modules/color-convert/package.json deleted file mode 100644 index 6e48000c7c..0000000000 --- a/node_modules/color-convert/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "color-convert", - "description": "Plain color conversion functions", - "version": "2.0.1", - "author": "Heather Arthur ", - "license": "MIT", - "repository": "Qix-/color-convert", - "scripts": { - "pretest": "xo", - "test": "node test/basic.js" - }, - "engines": { - "node": ">=7.0.0" - }, - "keywords": [ - "color", - "colour", - "convert", - "converter", - "conversion", - "rgb", - "hsl", - "hsv", - "hwb", - "cmyk", - "ansi", - "ansi16" - ], - "files": [ - "index.js", - "conversions.js", - "route.js" - ], - "xo": { - "rules": { - "default-case": 0, - "no-inline-comments": 0, - "operator-linebreak": 0 - } - }, - "devDependencies": { - "chalk": "^2.4.2", - "xo": "^0.24.0" - }, - "dependencies": { - "color-name": "~1.1.4" - } -} diff --git a/node_modules/color-convert/route.js b/node_modules/color-convert/route.js deleted file mode 100644 index 1a08521b5a..0000000000 --- a/node_modules/color-convert/route.js +++ /dev/null @@ -1,97 +0,0 @@ -const conversions = require('./conversions'); - -/* - This function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions); - - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions[current]); - - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions[graph[toModel].parent][toModel]; - - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -module.exports = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; - - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; - - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - diff --git a/node_modules/color-name/LICENSE b/node_modules/color-name/LICENSE deleted file mode 100644 index c6b1001254..0000000000 --- a/node_modules/color-name/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2015 Dmitry Ivanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/color-name/README.md b/node_modules/color-name/README.md deleted file mode 100644 index 932b979176..0000000000 --- a/node_modules/color-name/README.md +++ /dev/null @@ -1,11 +0,0 @@ -A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. - -[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) - - -```js -var colors = require('color-name'); -colors.red //[255,0,0] -``` - - diff --git a/node_modules/color-name/index.js b/node_modules/color-name/index.js deleted file mode 100644 index b7c198a6f3..0000000000 --- a/node_modules/color-name/index.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict' - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; diff --git a/node_modules/color-name/package.json b/node_modules/color-name/package.json deleted file mode 100644 index 782dd82878..0000000000 --- a/node_modules/color-name/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "color-name", - "version": "1.1.4", - "description": "A list of color names and its values", - "main": "index.js", - "files": [ - "index.js" - ], - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "git@github.com:colorjs/color-name.git" - }, - "keywords": [ - "color-name", - "color", - "color-keyword", - "keyword" - ], - "author": "DY ", - "license": "MIT", - "bugs": { - "url": "https://github.com/colorjs/color-name/issues" - }, - "homepage": "https://github.com/colorjs/color-name" -} diff --git a/node_modules/commander/LICENSE b/node_modules/commander/LICENSE deleted file mode 100644 index 10f997ab10..0000000000 --- a/node_modules/commander/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/commander/Readme.md b/node_modules/commander/Readme.md deleted file mode 100644 index ca6fb27fff..0000000000 --- a/node_modules/commander/Readme.md +++ /dev/null @@ -1,1149 +0,0 @@ -# Commander.js - -[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22) -[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) -[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true) -[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander) - -The complete solution for [node.js](http://nodejs.org) command-line interfaces. - -Read this in other languages: English | [简体中文](./Readme_zh-CN.md) - -- [Commander.js](#commanderjs) - - [Installation](#installation) - - [Quick Start](#quick-start) - - [Declaring _program_ variable](#declaring-program-variable) - - [Options](#options) - - [Common option types, boolean and value](#common-option-types-boolean-and-value) - - [Default option value](#default-option-value) - - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue) - - [Required option](#required-option) - - [Variadic option](#variadic-option) - - [Version option](#version-option) - - [More configuration](#more-configuration) - - [Custom option processing](#custom-option-processing) - - [Commands](#commands) - - [Command-arguments](#command-arguments) - - [More configuration](#more-configuration-1) - - [Custom argument processing](#custom-argument-processing) - - [Action handler](#action-handler) - - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands) - - [Life cycle hooks](#life-cycle-hooks) - - [Automated help](#automated-help) - - [Custom help](#custom-help) - - [Display help after errors](#display-help-after-errors) - - [Display help from code](#display-help-from-code) - - [.name](#name) - - [.usage](#usage) - - [.description and .summary](#description-and-summary) - - [.helpOption(flags, description)](#helpoptionflags-description) - - [.helpCommand()](#helpcommand) - - [More configuration](#more-configuration-2) - - [Custom event listeners](#custom-event-listeners) - - [Bits and pieces](#bits-and-pieces) - - [.parse() and .parseAsync()](#parse-and-parseasync) - - [Parsing Configuration](#parsing-configuration) - - [Legacy options as properties](#legacy-options-as-properties) - - [TypeScript](#typescript) - - [createCommand()](#createcommand) - - [Node options such as `--harmony`](#node-options-such-as---harmony) - - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands) - - [npm run-script](#npm-run-script) - - [Display error](#display-error) - - [Override exit and output handling](#override-exit-and-output-handling) - - [Additional documentation](#additional-documentation) - - [Support](#support) - - [Commander for enterprise](#commander-for-enterprise) - -For information about terms used in this document see: [terminology](./docs/terminology.md) - -## Installation - -```sh -npm install commander -``` - -## Quick Start - -You write code to describe your command line interface. -Commander looks after parsing the arguments into options and command-arguments, -displays usage errors for problems, and implements a help system. - -Commander is strict and displays an error for unrecognised options. -The two most used option types are a boolean option, and an option which takes its value from the following argument. - -Example file: [split.js](./examples/split.js) - -```js -const { program } = require('commander'); - -program - .option('--first') - .option('-s, --separator ') - .argument(''); - -program.parse(); - -const options = program.opts(); -const limit = options.first ? 1 : undefined; -console.log(program.args[0].split(options.separator, limit)); -``` - -```console -$ node split.js -s / --fits a/b/c -error: unknown option '--fits' -(Did you mean --first?) -$ node split.js -s / --first a/b/c -[ 'a' ] -``` - -Here is a more complete program using a subcommand and with descriptions for the help. In a multi-command program, you have an action handler for each command (or stand-alone executables for the commands). - -Example file: [string-util.js](./examples/string-util.js) - -```js -const { Command } = require('commander'); -const program = new Command(); - -program - .name('string-util') - .description('CLI to some JavaScript string utilities') - .version('0.8.0'); - -program.command('split') - .description('Split a string into substrings and display as an array') - .argument('', 'string to split') - .option('--first', 'display just the first substring') - .option('-s, --separator ', 'separator character', ',') - .action((str, options) => { - const limit = options.first ? 1 : undefined; - console.log(str.split(options.separator, limit)); - }); - -program.parse(); -``` - -```console -$ node string-util.js help split -Usage: string-util split [options] - -Split a string into substrings and display as an array. - -Arguments: - string string to split - -Options: - --first display just the first substring - -s, --separator separator character (default: ",") - -h, --help display help for command - -$ node string-util.js split --separator=/ a/b/c -[ 'a', 'b', 'c' ] -``` - -More samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. - -## Declaring _program_ variable - -Commander exports a global object which is convenient for quick programs. -This is used in the examples in this README for brevity. - -```js -// CommonJS (.cjs) -const { program } = require('commander'); -``` - -For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use. - -```js -// CommonJS (.cjs) -const { Command } = require('commander'); -const program = new Command(); -``` - -```js -// ECMAScript (.mjs) -import { Command } from 'commander'; -const program = new Command(); -``` - -```ts -// TypeScript (.ts) -import { Command } from 'commander'; -const program = new Command(); -``` - -## Options - -Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|'). To allow a wider range of short-ish flags than just -single characters, you may also have two long options. Examples: - -```js -program - .option('-p, --port ', 'server port number') - .option('--trace', 'add extra debugging output') - .option('--ws, --workspace ', 'use a custom workspace') -``` - -The parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler. - -Multi-word options such as "--template-engine" are camel-cased, becoming `program.opts().templateEngine` etc. - -An option and its option-argument can be separated by a space, or combined into the same argument. The option-argument can follow the short option directly or follow an `=` for a long option. - -```sh -serve -p 80 -serve -p80 -serve --port 80 -serve --port=80 -``` - -You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted. - -By default, options on the command line are not positional, and can be specified before or after other arguments. - -There are additional related routines for when `.opts()` is not enough: - -- `.optsWithGlobals()` returns merged local and global option values -- `.getOptionValue()` and `.setOptionValue()` work with a single option value -- `.getOptionValueSource()` and `.setOptionValueWithSource()` include where the option value came from - -### Common option types, boolean and value - -The two most used option types are a boolean option, and an option which takes its value -from the following argument (declared with angle brackets like `--expect `). Both are `undefined` unless specified on command line. - -Example file: [options-common.js](./examples/options-common.js) - -```js -program - .option('-d, --debug', 'output extra debugging') - .option('-s, --small', 'small pizza size') - .option('-p, --pizza-type ', 'flavour of pizza'); - -program.parse(process.argv); - -const options = program.opts(); -if (options.debug) console.log(options); -console.log('pizza details:'); -if (options.small) console.log('- small pizza size'); -if (options.pizzaType) console.log(`- ${options.pizzaType}`); -``` - -```console -$ pizza-options -p -error: option '-p, --pizza-type ' argument missing -$ pizza-options -d -s -p vegetarian -{ debug: true, small: true, pizzaType: 'vegetarian' } -pizza details: -- small pizza size -- vegetarian -$ pizza-options --pizza-type=cheese -pizza details: -- cheese -``` - -Multiple boolean short options may be combined following the dash, and may be followed by a single short option taking a value. -For example `-d -s -p cheese` may be written as `-ds -p cheese` or even `-dsp cheese`. - -Options with an expected option-argument are greedy and will consume the following argument whatever the value. -So `--id -xyz` reads `-xyz` as the option-argument. - -`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`. - -### Default option value - -You can specify a default value for an option. - -Example file: [options-defaults.js](./examples/options-defaults.js) - -```js -program - .option('-c, --cheese ', 'add the specified type of cheese', 'blue'); - -program.parse(); - -console.log(`cheese: ${program.opts().cheese}`); -``` - -```console -$ pizza-options -cheese: blue -$ pizza-options --cheese stilton -cheese: stilton -``` - -### Other option types, negatable boolean and boolean|value - -You can define a boolean option long name with a leading `no-` to set the option value to false when used. -Defined alone this also makes the option true by default. - -If you define `--foo` first, adding `--no-foo` does not change the default value from what it would -otherwise be. - -Example file: [options-negatable.js](./examples/options-negatable.js) - -```js -program - .option('--no-sauce', 'Remove sauce') - .option('--cheese ', 'cheese flavour', 'mozzarella') - .option('--no-cheese', 'plain with no cheese') - .parse(); - -const options = program.opts(); -const sauceStr = options.sauce ? 'sauce' : 'no sauce'; -const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`; -console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`); -``` - -```console -$ pizza-options -You ordered a pizza with sauce and mozzarella cheese -$ pizza-options --sauce -error: unknown option '--sauce' -$ pizza-options --cheese=blue -You ordered a pizza with sauce and blue cheese -$ pizza-options --no-sauce --no-cheese -You ordered a pizza with no sauce and no cheese -``` - -You can specify an option which may be used as a boolean option but may optionally take an option-argument -(declared with square brackets like `--optional [value]`). - -Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js) - -```js -program - .option('-c, --cheese [type]', 'Add cheese with optional type'); - -program.parse(process.argv); - -const options = program.opts(); -if (options.cheese === undefined) console.log('no cheese'); -else if (options.cheese === true) console.log('add cheese'); -else console.log(`add cheese type ${options.cheese}`); -``` - -```console -$ pizza-options -no cheese -$ pizza-options --cheese -add cheese -$ pizza-options --cheese mozzarella -add cheese type mozzarella -``` - -Options with an optional option-argument are not greedy and will ignore arguments starting with a dash. -So `id` behaves as a boolean option for `--id -5`, but you can use a combined form if needed like `--id=-5`. - -For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). - -### Required option - -You may specify a required (mandatory) option using `.requiredOption()`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option()` in format, taking flags and description, and optional default value or custom processing. - -Example file: [options-required.js](./examples/options-required.js) - -```js -program - .requiredOption('-c, --cheese ', 'pizza must have cheese'); - -program.parse(); -``` - -```console -$ pizza -error: required option '-c, --cheese ' not specified -``` - -### Variadic option - -You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you -can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments -are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value -is specified in the same argument as the option then no further values are read. - -Example file: [options-variadic.js](./examples/options-variadic.js) - -```js -program - .option('-n, --number ', 'specify numbers') - .option('-l, --letter [letters...]', 'specify letters'); - -program.parse(); - -console.log('Options: ', program.opts()); -console.log('Remaining arguments: ', program.args); -``` - -```console -$ collect -n 1 2 3 --letter a b c -Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] } -Remaining arguments: [] -$ collect --letter=A -n80 operand -Options: { number: [ '80' ], letter: [ 'A' ] } -Remaining arguments: [ 'operand' ] -$ collect --letter -n 1 -n 2 3 -- operand -Options: { number: [ '1', '2', '3' ], letter: true } -Remaining arguments: [ 'operand' ] -``` - -For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-in-depth.md). - -### Version option - -The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits. - -```js -program.version('0.0.1'); -``` - -```console -$ ./examples/pizza -V -0.0.1 -``` - -You may change the flags and description by passing additional parameters to the `version` method, using -the same syntax for flags as the `option` method. - -```js -program.version('0.0.1', '-v, --vers', 'output the current version'); -``` - -### More configuration - -You can add most options using the `.option()` method, but there are some additional features available -by constructing an `Option` explicitly for less common cases. - -Example files: [options-extra.js](./examples/options-extra.js), [options-env.js](./examples/options-env.js), [options-conflicts.js](./examples/options-conflicts.js), [options-implies.js](./examples/options-implies.js) - -```js -program - .addOption(new Option('-s, --secret').hideHelp()) - .addOption(new Option('-t, --timeout ', 'timeout in seconds').default(60, 'one minute')) - .addOption(new Option('-d, --drink ', 'drink size').choices(['small', 'medium', 'large'])) - .addOption(new Option('-p, --port ', 'port number').env('PORT')) - .addOption(new Option('--donate [amount]', 'optional donation in dollars').preset('20').argParser(parseFloat)) - .addOption(new Option('--disable-server', 'disables the server').conflicts('port')) - .addOption(new Option('--free-drink', 'small drink included free ').implies({ drink: 'small' })); -``` - -```console -$ extra --help -Usage: help [options] - -Options: - -t, --timeout timeout in seconds (default: one minute) - -d, --drink drink cup size (choices: "small", "medium", "large") - -p, --port port number (env: PORT) - --donate [amount] optional donation in dollars (preset: "20") - --disable-server disables the server - --free-drink small drink included free - -h, --help display help for command - -$ extra --drink huge -error: option '-d, --drink ' argument 'huge' is invalid. Allowed choices are small, medium, large. - -$ PORT=80 extra --donate --free-drink -Options: { timeout: 60, donate: 20, port: '80', freeDrink: true, drink: 'small' } - -$ extra --disable-server --port 8000 -error: option '--disable-server' cannot be used with option '-p, --port ' -``` - -Specify a required (mandatory) option using the `Option` method `.makeOptionMandatory()`. This matches the `Command` method [.requiredOption()](#required-option). - -### Custom option processing - -You may specify a function to do custom processing of option-arguments. The callback function receives two parameters, -the user specified option-argument and the previous value for the option. It returns the new value for the option. - -This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing. - -You can optionally specify the default/starting value for the option after the function parameter. - -Example file: [options-custom-processing.js](./examples/options-custom-processing.js) - -```js -function myParseInt(value, dummyPrevious) { - // parseInt takes a string and a radix - const parsedValue = parseInt(value, 10); - if (isNaN(parsedValue)) { - throw new commander.InvalidArgumentError('Not a number.'); - } - return parsedValue; -} - -function increaseVerbosity(dummyValue, previous) { - return previous + 1; -} - -function collect(value, previous) { - return previous.concat([value]); -} - -function commaSeparatedList(value, dummyPrevious) { - return value.split(','); -} - -program - .option('-f, --float ', 'float argument', parseFloat) - .option('-i, --integer ', 'integer argument', myParseInt) - .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0) - .option('-c, --collect ', 'repeatable value', collect, []) - .option('-l, --list ', 'comma separated list', commaSeparatedList) -; - -program.parse(); - -const options = program.opts(); -if (options.float !== undefined) console.log(`float: ${options.float}`); -if (options.integer !== undefined) console.log(`integer: ${options.integer}`); -if (options.verbose > 0) console.log(`verbosity: ${options.verbose}`); -if (options.collect.length > 0) console.log(options.collect); -if (options.list !== undefined) console.log(options.list); -``` - -```console -$ custom -f 1e2 -float: 100 -$ custom --integer 2 -integer: 2 -$ custom -v -v -v -verbose: 3 -$ custom -c a -c b -c c -[ 'a', 'b', 'c' ] -$ custom --list x,y,z -[ 'x', 'y', 'z' ] -``` - -## Commands - -You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)). - -In the first parameter to `.command()` you specify the command name. You may append the command-arguments after the command name, or specify them separately using `.argument()`. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`. - -You can use `.addCommand()` to add an already configured subcommand to the program. - -For example: - -```js -// Command implemented using action handler (description is supplied separately to `.command`) -// Returns new command for configuring. -program - .command('clone [destination]') - .description('clone a repository into a newly created directory') - .action((source, destination) => { - console.log('clone command called'); - }); - -// Command implemented using stand-alone executable file, indicated by adding description as second parameter to `.command`. -// Returns `this` for adding more commands. -program - .command('start ', 'start named service') - .command('stop [service]', 'stop named service, or all if no name supplied'); - -// Command prepared separately. -// Returns `this` for adding more commands. -program - .addCommand(build.makeBuildCommand()); -``` - -Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will -remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other -subcommand is specified ([example](./examples/defaultCommand.js)). - -You can add alternative names for a command with `.alias()`. ([example](./examples/alias.js)) - -`.command()` automatically copies the inherited settings from the parent command to the newly created subcommand. This is only done during creation, any later setting changes to the parent are not inherited. - -For safety, `.addCommand()` does not automatically copy the inherited settings from the parent command. There is a helper routine `.copyInheritedSettings()` for copying the settings when they are wanted. - -### Command-arguments - -For subcommands, you can specify the argument syntax in the call to `.command()` (as shown above). This -is the only method usable for subcommands implemented using a stand-alone executable, but for other subcommands -you can instead use the following method. - -To configure a command, you can use `.argument()` to specify each expected command-argument. -You supply the argument name and an optional description. The argument may be `` or `[optional]`. -You can specify a default value for an optional command-argument. - -Example file: [argument.js](./examples/argument.js) - -```js -program - .version('0.1.0') - .argument('', 'user to login') - .argument('[password]', 'password for user, if required', 'no password given') - .action((username, password) => { - console.log('username:', username); - console.log('password:', password); - }); -``` - - The last argument of a command can be variadic, and only the last argument. To make an argument variadic you - append `...` to the argument name. A variadic argument is passed to the action handler as an array. For example: - -```js -program - .version('0.1.0') - .command('rmdir') - .argument('') - .action(function (dirs) { - dirs.forEach((dir) => { - console.log('rmdir %s', dir); - }); - }); -``` - -There is a convenience method to add multiple arguments at once, but without descriptions: - -```js -program - .arguments(' '); -``` - -#### More configuration - -There are some additional features available by constructing an `Argument` explicitly for less common cases. - -Example file: [arguments-extra.js](./examples/arguments-extra.js) - -```js -program - .addArgument(new commander.Argument('', 'drink cup size').choices(['small', 'medium', 'large'])) - .addArgument(new commander.Argument('[timeout]', 'timeout in seconds').default(60, 'one minute')) -``` - -#### Custom argument processing - -You may specify a function to do custom processing of command-arguments (like for option-arguments). -The callback function receives two parameters, the user specified command-argument and the previous value for the argument. -It returns the new value for the argument. - -The processed argument values are passed to the action handler, and saved as `.processedArgs`. - -You can optionally specify the default/starting value for the argument after the function parameter. - -Example file: [arguments-custom-processing.js](./examples/arguments-custom-processing.js) - -```js -program - .command('add') - .argument('', 'integer argument', myParseInt) - .argument('[second]', 'integer argument', myParseInt, 1000) - .action((first, second) => { - console.log(`${first} + ${second} = ${first + second}`); - }) -; -``` - -### Action handler - -The action handler gets passed a parameter for each command-argument you declared, and two additional parameters -which are the parsed options and the command object itself. - -Example file: [thank.js](./examples/thank.js) - -```js -program - .argument('') - .option('-t, --title ', 'title to use before name') - .option('-d, --debug', 'display some debugging') - .action((name, options, command) => { - if (options.debug) { - console.error('Called %s with options %o', command.name(), options); - } - const title = options.title ? `${options.title} ` : ''; - console.log(`Thank-you ${title}${name}`); - }); -``` - -If you prefer, you can work with the command directly and skip declaring the parameters for the action handler. The `this` keyword is set to the running command and can be used from a function expression (but not from an arrow function). - -Example file: [action-this.js](./examples/action-this.js) - -```js -program - .command('serve') - .argument(' -``` - -## Use - -```js -import {decodeNamedCharacterReference} from 'decode-named-character-reference' - -decodeNamedCharacterReference('amp') //=> '&' -``` - -## API - -This package exports the following identifier: `decodeNamedCharacterReference`. -There is no default export. - -### `decodeNamedCharacterReference(value)` - -Again, use [`parse-entities`][parse-entities]. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`parse-entities`][parse-entities] - — parse (decode) HTML character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/decode-named-character-reference/workflows/main/badge.svg - -[build]: https://github.com/wooorm/decode-named-character-reference/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/decode-named-character-reference.svg - -[coverage]: https://codecov.io/github/wooorm/decode-named-character-reference - -[downloads-badge]: https://img.shields.io/npm/dm/decode-named-character-reference.svg - -[downloads]: https://www.npmjs.com/package/decode-named-character-reference - -[size-badge]: https://img.shields.io/bundlephobia/minzip/decode-named-character-reference.svg - -[size]: https://bundlephobia.com/result?p=decode-named-character-reference - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[parse-entities]: https://github.com/wooorm/parse-entities diff --git a/node_modules/deep-extend/CHANGELOG.md b/node_modules/deep-extend/CHANGELOG.md deleted file mode 100644 index dd13ec1311..0000000000 --- a/node_modules/deep-extend/CHANGELOG.md +++ /dev/null @@ -1,46 +0,0 @@ -Changelog -========= - -v0.6.0 ------- - -- Updated "devDependencies" versions to fix vulnerability alerts -- Dropped support of io.js and node.js v0.12.x and lower since new versions of - "devDependencies" couldn't work with those old node.js versions - (minimal supported version of node.js now is v4.0.0) - -v0.5.1 ------- - -- Fix prototype pollution vulnerability (thanks to @mwakerman for the PR) -- Avoid using deprecated Buffer API (thanks to @ChALkeR for the PR) - -v0.5.0 ------- - -- Auto-testing provided by Travis CI; -- Support older Node.JS versions (`v0.11.x` and `v0.10.x`); -- Removed tests files from npm package. - -v0.4.2 ------- - -- Fix for `null` as an argument. - -v0.4.1 ------- - -- Removed test code from npm package - ([see pull request #21](https://github.com/unclechu/node-deep-extend/pull/21)); -- Increased minimal version of Node from `0.4.0` to `0.12.0` - (because can't run tests on lesser version anyway). - -v0.4.0 ------- - -- **WARNING!** Broken backward compatibility with `v0.3.x`; -- Fixed bug with extending arrays instead of cloning; -- Deep cloning for arrays; -- Check for own property; -- Fixed some documentation issues; -- Strict JS mode. diff --git a/node_modules/deep-extend/LICENSE b/node_modules/deep-extend/LICENSE deleted file mode 100644 index 5c58916f2f..0000000000 --- a/node_modules/deep-extend/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2018, Viacheslav Lotsmanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/deep-extend/README.md b/node_modules/deep-extend/README.md deleted file mode 100644 index 67c7fc0859..0000000000 --- a/node_modules/deep-extend/README.md +++ /dev/null @@ -1,91 +0,0 @@ -Deep Extend -=========== - -Recursive object extending. - -[![Build Status](https://api.travis-ci.org/unclechu/node-deep-extend.svg?branch=master)](https://travis-ci.org/unclechu/node-deep-extend) - -[![NPM](https://nodei.co/npm/deep-extend.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/deep-extend/) - -Install -------- - -```bash -$ npm install deep-extend -``` - -Usage ------ - -```javascript -var deepExtend = require('deep-extend'); -var obj1 = { - a: 1, - b: 2, - d: { - a: 1, - b: [], - c: { test1: 123, test2: 321 } - }, - f: 5, - g: 123, - i: 321, - j: [1, 2] -}; -var obj2 = { - b: 3, - c: 5, - d: { - b: { first: 'one', second: 'two' }, - c: { test2: 222 } - }, - e: { one: 1, two: 2 }, - f: [], - g: (void 0), - h: /abc/g, - i: null, - j: [3, 4] -}; - -deepExtend(obj1, obj2); - -console.log(obj1); -/* -{ a: 1, - b: 3, - d: - { a: 1, - b: { first: 'one', second: 'two' }, - c: { test1: 123, test2: 222 } }, - f: [], - g: undefined, - c: 5, - e: { one: 1, two: 2 }, - h: /abc/g, - i: null, - j: [3, 4] } -*/ -``` - -Unit testing ------------- - -```bash -$ npm test -``` - -Changelog ---------- - -[CHANGELOG.md](./CHANGELOG.md) - -Any issues? ------------ - -Please, report about issues -[here](https://github.com/unclechu/node-deep-extend/issues). - -License -------- - -[MIT](./LICENSE) diff --git a/node_modules/deep-extend/index.js b/node_modules/deep-extend/index.js deleted file mode 100644 index 762d81e954..0000000000 --- a/node_modules/deep-extend/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/deep-extend'); diff --git a/node_modules/deep-extend/package.json b/node_modules/deep-extend/package.json deleted file mode 100644 index 5f2195ff93..0000000000 --- a/node_modules/deep-extend/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "deep-extend", - "description": "Recursive object extending", - "license": "MIT", - "version": "0.6.0", - "homepage": "https://github.com/unclechu/node-deep-extend", - "keywords": [ - "deep-extend", - "extend", - "deep", - "recursive", - "xtend", - "clone", - "merge", - "json" - ], - "licenses": [ - { - "type": "MIT", - "url": "https://raw.githubusercontent.com/unclechu/node-deep-extend/master/LICENSE" - } - ], - "repository": { - "type": "git", - "url": "git://github.com/unclechu/node-deep-extend.git" - }, - "author": "Viacheslav Lotsmanov ", - "bugs": "https://github.com/unclechu/node-deep-extend/issues", - "contributors": [ - { - "name": "Romain Prieto", - "url": "https://github.com/rprieto" - }, - { - "name": "Max Maximov", - "url": "https://github.com/maxmaximov" - }, - { - "name": "Marshall Bowers", - "url": "https://github.com/maxdeviant" - }, - { - "name": "Misha Wakerman", - "url": "https://github.com/mwakerman" - } - ], - "main": "lib/deep-extend.js", - "engines": { - "node": ">=4.0.0" - }, - "scripts": { - "test": "./node_modules/.bin/mocha" - }, - "devDependencies": { - "mocha": "5.2.0", - "should": "13.2.1" - }, - "files": [ - "index.js", - "lib/" - ] -} diff --git a/node_modules/dequal/index.d.ts b/node_modules/dequal/index.d.ts deleted file mode 100644 index a9aea5d506..0000000000 --- a/node_modules/dequal/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/license b/node_modules/dequal/license deleted file mode 100644 index a3f96f8284..0000000000 --- a/node_modules/dequal/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Luke Edwards (lukeed.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/dequal/lite/index.d.ts b/node_modules/dequal/lite/index.d.ts deleted file mode 100644 index a9aea5d506..0000000000 --- a/node_modules/dequal/lite/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function dequal(foo: any, bar: any): boolean; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.js b/node_modules/dequal/lite/index.js deleted file mode 100644 index ac3eb6b870..0000000000 --- a/node_modules/dequal/lite/index.js +++ /dev/null @@ -1,31 +0,0 @@ -var has = Object.prototype.hasOwnProperty; - -function dequal(foo, bar) { - var ctor, len; - if (foo === bar) return true; - - if (foo && bar && (ctor=foo.constructor) === bar.constructor) { - if (ctor === Date) return foo.getTime() === bar.getTime(); - if (ctor === RegExp) return foo.toString() === bar.toString(); - - if (ctor === Array) { - if ((len=foo.length) === bar.length) { - while (len-- && dequal(foo[len], bar[len])); - } - return len === -1; - } - - if (!ctor || typeof foo === 'object') { - len = 0; - for (ctor in foo) { - if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; - if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; - } - return Object.keys(bar).length === len; - } - } - - return foo !== foo && bar !== bar; -} - -exports.dequal = dequal; \ No newline at end of file diff --git a/node_modules/dequal/lite/index.min.js b/node_modules/dequal/lite/index.min.js deleted file mode 100644 index 2eaa55fd06..0000000000 --- a/node_modules/dequal/lite/index.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dequal={})}(this,(function(e){var t=Object.prototype.hasOwnProperty;e.dequal=function e(r,n){var o,i;if(r===n)return!0;if(r&&n&&(o=r.constructor)===n.constructor){if(o===Date)return r.getTime()===n.getTime();if(o===RegExp)return r.toString()===n.toString();if(o===Array){if((i=r.length)===n.length)for(;i--&&e(r[i],n[i]););return-1===i}if(!o||"object"==typeof r){for(o in i=0,r){if(t.call(r,o)&&++i&&!t.call(n,o))return!1;if(!(o in n)||!e(r[o],n[o]))return!1}return Object.keys(n).length===i}}return r!=r&&n!=n}})); \ No newline at end of file diff --git a/node_modules/dequal/lite/index.mjs b/node_modules/dequal/lite/index.mjs deleted file mode 100644 index 5820d674f8..0000000000 --- a/node_modules/dequal/lite/index.mjs +++ /dev/null @@ -1,29 +0,0 @@ -var has = Object.prototype.hasOwnProperty; - -export function dequal(foo, bar) { - var ctor, len; - if (foo === bar) return true; - - if (foo && bar && (ctor=foo.constructor) === bar.constructor) { - if (ctor === Date) return foo.getTime() === bar.getTime(); - if (ctor === RegExp) return foo.toString() === bar.toString(); - - if (ctor === Array) { - if ((len=foo.length) === bar.length) { - while (len-- && dequal(foo[len], bar[len])); - } - return len === -1; - } - - if (!ctor || typeof foo === 'object') { - len = 0; - for (ctor in foo) { - if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; - if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; - } - return Object.keys(bar).length === len; - } - } - - return foo !== foo && bar !== bar; -} diff --git a/node_modules/dequal/package.json b/node_modules/dequal/package.json deleted file mode 100644 index df1cb29cb2..0000000000 --- a/node_modules/dequal/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "dequal", - "version": "2.0.3", - "repository": "lukeed/dequal", - "description": "A tiny (304B to 489B) utility for check for deep equality", - "unpkg": "dist/index.min.js", - "module": "dist/index.mjs", - "main": "dist/index.js", - "types": "index.d.ts", - "license": "MIT", - "author": { - "name": "Luke Edwards", - "email": "luke.edwards05@gmail.com", - "url": "https://lukeed.com" - }, - "engines": { - "node": ">=6" - }, - "scripts": { - "build": "bundt", - "pretest": "npm run build", - "postbuild": "echo \"lite\" | xargs -n1 cp -v index.d.ts", - "test": "uvu -r esm test" - }, - "files": [ - "*.d.ts", - "dist", - "lite" - ], - "exports": { - ".": { - "types": "./index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - }, - "./lite": { - "types": "./index.d.ts", - "import": "./lite/index.mjs", - "require": "./lite/index.js" - }, - "./package.json": "./package.json" - }, - "modes": { - "lite": "src/lite.js", - "default": "src/index.js" - }, - "keywords": [ - "deep", - "deep-equal", - "equality" - ], - "devDependencies": { - "bundt": "1.0.2", - "esm": "3.2.25", - "uvu": "0.3.2" - } -} diff --git a/node_modules/dequal/readme.md b/node_modules/dequal/readme.md deleted file mode 100644 index e3341ef475..0000000000 --- a/node_modules/dequal/readme.md +++ /dev/null @@ -1,112 +0,0 @@ -# dequal [![CI](https://github.com/lukeed/dequal/workflows/CI/badge.svg)](https://github.com/lukeed/dequal/actions) - -> A tiny (304B to 489B) utility to check for deep equality - -This module supports comparison of all types, including `Function`, `RegExp`, `Date`, `Set`, `Map`, `TypedArray`s, `DataView`, `null`, `undefined`, and `NaN` values. Complex values (eg, Objects, Arrays, Sets, Maps, etc) are traversed recursively. - -> **Important:** -> * key order **within Objects** does not matter -> * value order **within Arrays** _does_ matter -> * values **within Sets and Maps** use value equality -> * keys **within Maps** use value equality - - -## Install - -``` -$ npm install --save dequal -``` - -## Modes - -There are two "versions" of `dequal` available: - -#### `dequal` -> **Size (gzip):** 489 bytes
              -> **Availability:** [CommonJS](https://unpkg.com/dequal/dist/index.js), [ES Module](https://unpkg.com/dequal/dist/index.mjs), [UMD](https://unpkg.com/dequal/dist/index.min.js) - -#### `dequal/lite` -> **Size (gzip):** 304 bytes
              -> **Availability:** [CommonJS](https://unpkg.com/dequal/lite/index.js), [ES Module](https://unpkg.com/dequal/lite/index.mjs) - -| | IE9+ | Number | String | Date | RegExp | Object | Array | Class | Set | Map | ArrayBuffer | [TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects) | [DataView](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) | -|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| -| `dequal` | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| `dequal/lite` | :+1: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | - -> **Note:** Table scrolls horizontally! - -## Usage - -```js -import { dequal } from 'dequal'; - -dequal(1, 1); //=> true -dequal({}, {}); //=> true -dequal('foo', 'foo'); //=> true -dequal([1, 2, 3], [1, 2, 3]); //=> true -dequal(dequal, dequal); //=> true -dequal(/foo/, /foo/); //=> true -dequal(null, null); //=> true -dequal(NaN, NaN); //=> true -dequal([], []); //=> true -dequal( - [{ a:1 }, [{ b:{ c:[1] } }]], - [{ a:1 }, [{ b:{ c:[1] } }]] -); //=> true - -dequal(1, '1'); //=> false -dequal(null, undefined); //=> false -dequal({ a:1, b:[2,3] }, { a:1, b:[2,5] }); //=> false -dequal(/foo/i, /bar/g); //=> false -``` - -## API - -### dequal(foo, bar) -Returns: `Boolean` - -Both `foo` and `bar` can be of any type.
              -A `Boolean` is returned indicating if the two were deeply equal. - - -## Benchmarks - -> Running Node v10.13.0 - -The benchmarks can be found in the [`/bench`](/bench) directory. They are separated into two categories: - -* `basic` – compares an object comprised of `String`, `Number`, `Date`, `Array`, and `Object` values. -* `complex` – like `basic`, but adds `RegExp`, `Map`, `Set`, and `Uint8Array` values. - -> **Note:** Only candidates that pass validation step(s) are listed.
              For example, `fast-deep-equal/es6` handles `Set` and `Map` values, but uses _referential equality_ while those listed use _value equality_. - -``` -Load times: - assert 0.109ms - util 0.006ms - fast-deep-equal 0.479ms - lodash/isequal 22.826ms - nano-equal 0.417ms - dequal 0.396ms - dequal/lite 0.264ms - -Benchmark :: basic - assert.deepStrictEqual x 325,262 ops/sec ±0.57% (94 runs sampled) - util.isDeepStrictEqual x 318,812 ops/sec ±0.87% (94 runs sampled) - fast-deep-equal x 1,332,393 ops/sec ±0.36% (93 runs sampled) - lodash.isEqual x 269,129 ops/sec ±0.59% (95 runs sampled) - nano-equal x 1,122,053 ops/sec ±0.36% (96 runs sampled) - dequal/lite x 1,700,972 ops/sec ±0.31% (94 runs sampled) - dequal x 1,698,972 ops/sec ±0.63% (97 runs sampled) - -Benchmark :: complex - assert.deepStrictEqual x 124,518 ops/sec ±0.64% (96 runs sampled) - util.isDeepStrictEqual x 125,113 ops/sec ±0.24% (96 runs sampled) - lodash.isEqual x 58,677 ops/sec ±0.49% (96 runs sampled) - dequal x 345,386 ops/sec ±0.27% (96 runs sampled) -``` - -## License - -MIT © [Luke Edwards](https://lukeed.com) diff --git a/node_modules/devlop/license b/node_modules/devlop/license deleted file mode 100644 index de5a7bba71..0000000000 --- a/node_modules/devlop/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2023 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/devlop/package.json b/node_modules/devlop/package.json deleted file mode 100644 index 8319d8d58a..0000000000 --- a/node_modules/devlop/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "devlop", - "version": "1.1.0", - "description": "Do things in development and nothing otherwise", - "license": "MIT", - "keywords": [ - "assert", - "deprecate", - "develop", - "development" - ], - "repository": "wooorm/devlop", - "bugs": "https://github.com/wooorm/devlop/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "exports": { - "types": "./lib/development.d.ts", - "development": "./lib/development.js", - "default": "./lib/default.js" - }, - "files": [ - "lib/" - ], - "dependencies": { - "dequal": "^2.0.0" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^15.1.0", - "@rollup/plugin-terser": "^0.4.3", - "@types/node": "^20.0.0", - "c8": "^8.0.0", - "esbuild": "^0.18.0", - "prettier": "^2.0.0", - "remark-cli": "^11.0.0", - "remark-preset-wooorm": "^9.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.54.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api-development": "node --conditions development test-development.js", - "test-api-default": "node test-default.js", - "test-api": "npm run test-api-development && npm run test-api-default", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "prettier": true - } -} diff --git a/node_modules/devlop/readme.md b/node_modules/devlop/readme.md deleted file mode 100644 index d90be19130..0000000000 --- a/node_modules/devlop/readme.md +++ /dev/null @@ -1,360 +0,0 @@ -# devlop - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Some tools to make developing easier while not including code in production. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`deprecate(fn, message[, code])`](#deprecatefn-message-code) - * [`equal(actual, expected[, message])`](#equalactual-expected-message) - * [`ok(value[, message])`](#okvalue-message) - * [`unreachable(message?)`](#unreachablemessage) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package lets you do things in development that are free in production. -It contains useful `assert` functions and a `deprecate` function that are -useful when developing JavaScript packages while being small in production. - -If you know Rust, you might know how nice having a -[`debug_assert!`][rust-debug-assert] is. -This is that, and a bit more. -For more on why they’re nice, see -[“Rust’s Two Kinds of ‘Assert’ Make for Better Code”][rust-two-kinds] - -## When should I use this? - -Many JavaScript programs do not use assertions at all (perhaps because they’re -typed and so assume type safety) or include lots of code to throw errors when -users do weird things (weighing down production code). -This package hopes to improve the sitation by making assertions free and -deprecations cheap. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install devlop -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {deprecate, equal, ok, unreachable} from 'https://esm.sh/devlop@1' -// For development code: -// import {deprecate, equal, ok} from 'https://esm.sh/devlop@1?conditions=development' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say we have a small ponyfill for the ES5 `String#includes` function. -It’s deprecated, because folks can use `String#includes` nowadays. -It’s nicely typed so users should be able to figure out what to pass but we -include assertions to show nicer errors when they get it wrong. - -`example/string-includes.js`: - -```js -import {deprecate, ok} from 'devlop' - -export const stringIncludes = deprecate( - includes, - 'Since ES5, please use `String#includes` itself.' -) - -/** - * @deprecated - * Since ES5, please use `String#includes` itself. - * @param {string} value - * Value to search in. - * @param {string} search - * Value to search for. - * @param {number | undefined} [position=0] - * Position to search from (default: `0`). - * @returns {boolean} - * Whether the searched for value exists in the searched value after position. - */ -function includes(value, search, position) { - ok(typeof value === 'string', 'expected string for `value`') - ok(typeof search === 'string', 'expected string for `search`') - ok(position === undefined || typeof position === 'number', 'expected number') - ok( - position === undefined || - (typeof position === 'number' && - !(/* #__PURE__ */ Number.isNaN(position))), - 'expected number' - ) - // eslint-disable-next-line unicorn/prefer-includes - return value.indexOf(search, position || 0) !== -1 -} -``` - -`example/index.js`: - -```js -import {stringIncludes} from './example-includes.js' - -console.log(stringIncludes('blue whale', 'dolphin')) //=> false -console.log(stringIncludes('blue whale', 'whale')) //=> true -``` - -Say we’d bundle that in development with [`esbuild`][esbuild] and check the -gzip size ([`gzip-size-cli`][gzip-size-cli]), we’d get 1.02 kB of code: - -```sh -$ esbuild example/index.js --bundle --conditions=development --format=esm --minify --target=es2022 | gzip-size -1.02 kB -``` - -But because `devlop` is light in production we’d get: - -```sh -$ esbuild example/index.js --bundle --format=esm --minify --target=es2022 | gzip-size -169 B -``` - -The bundle looks as follows: - -```js -function u(n){return n}var r=u(c,"Since ES5, please use `String#includes` itself.");function c(n,t,e){return n.indexOf(t,e||0)!==-1}console.log(r("blue whale","dolphin"));console.log(r("blue whale","whale")); -``` - -It depends a bit on which bundler and minifier you use how small the code is: -esbuild keeps the unused message parameter to the `deprecate` function around -and does not know `Number.isNaN` can be dropped without a `/* #__PURE__ */` -annotation. - -[`rollup`][rollup] with [`@rollup/plugin-node-resolve`][node-resolve] -and [`@rollup/plugin-terser`][terser] performs even better: - -```sh -$ rollup example/index.js -p node-resolve -p terser | gzip-size -118 B -``` - -The bundle looks as follows: - -```js -const l=function(l,e,o){return-1!==l.indexOf(e,o||0)};console.log(l("blue whale","dolphin")),console.log(l("blue whale","whale")); -``` - -Rollup doesn’t need the `/* #__PURE__ */` comment either! - -## API - -This package exports the identifiers [`deprecate`][api-deprecate], -[`equal`][api-equal], [`ok`][api-ok], and [`unreachable`][api-unreachable]. -There is no default export. - -The export map supports the [`development` condition][node-condition]. -Run `node --conditions development module.js` to get dev code. -Without this condition, no-ops are loaded. - -### `deprecate(fn, message[, code])` - -Wrap a function or class to show a deprecation message when first called. - -> 👉 **Important**: only shows a message when the `development` condition is -> used, does nothing in production. - -When the resulting wrapped `fn` is called, emits a warning once to -`console.error` (`stderr`). -If a code is given, one warning message will be emitted in total per code. - -###### Parameters - -* `fn` (`Function`) - — function or class -* `message` (`string`) - — message explaining deprecation -* `code` (`string`, optional) - — deprecation identifier (optional); deprecation messages will be generated - only once per code - -###### Returns - -Wrapped `fn`. - -### `equal(actual, expected[, message])` - -Assert deep strict equivalence. - -> 👉 **Important**: only asserts when the `development` condition is used, does -> nothing in production. - -###### Parameters - -* `actual` (`unknown`) - — value -* `expected` (`unknown`) - — baseline -* `message` (`Error` or `string`, default: `'Expected values to be deeply - equal'`) - — message for assertion error - -###### Returns - -Nothing (`undefined`). - -###### Throws - -Throws (`AssertionError`) when `actual` is not deep strict equal to `expected`. - -### `ok(value[, message])` - -Assert if `value` is truthy. - -> 👉 **Important**: only asserts when the `development` condition is used, does -> nothing in production. - -###### Parameters - -* `actual` (`unknown`) - — value to assert -* `message` (`Error` or `string`, default: `'Expected value to be truthy'`) - — message for assertion error - -###### Returns - -Nothing (`undefined`). - -###### Throws - -Throws (`AssertionError`) when `value` is falsey. - -### `unreachable(message?)` - -Assert that a code path never happens. - -> 👉 **Important**: only asserts when the `development` condition is used, -> does nothing in production. - -###### Parameters - -* `message` (`Error` or `string`, default: `'Unreachable'`) - — message for assertion error - -###### Returns - -Never (`never`). - -###### Throws - -Throws (`AssertionError`), always. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -This project is compatible with maintained versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, `devlop@^1`, -compatible with Node.js 16. - -## Security - -This package is safe. - -## Related - -* [`babel-plugin-unassert`](https://github.com/unassert-js/babel-plugin-unassert) - — encourage reliable programming with assertions while compiling them away - in production (can remove arbitrary `assert` modules, works regardless of - conditions, so has to be configured by the end user) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/devlop/workflows/main/badge.svg - -[build]: https://github.com/wooorm/devlop/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/devlop.svg - -[coverage]: https://codecov.io/github/wooorm/devlop - -[downloads-badge]: https://img.shields.io/npm/dm/devlop.svg - -[downloads]: https://www.npmjs.com/package/devlop - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=devlop - -[size]: https://bundlejs.com/?q=devlop - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ - -[node-condition]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[rust-debug-assert]: https://doc.rust-lang.org/std/macro.debug_assert.html - -[rust-two-kinds]: https://tratt.net/laurie/blog/2023/rusts_two_kinds_of_assert_make_for_better_code.html - -[esbuild]: https://esbuild.github.io - -[gzip-size-cli]: https://github.com/sindresorhus/gzip-size-cli/tree/main - -[rollup]: https://rollupjs.org - -[node-resolve]: https://github.com/rollup/plugins/tree/master/packages/node-resolve - -[terser]: https://github.com/rollup/plugins/tree/master/packages/terser#readme - -[api-deprecate]: #deprecatefn-message-code - -[api-equal]: #equalactual-expected-message - -[api-ok]: #okvalue-message - -[api-unreachable]: #unreachablemessage diff --git a/node_modules/eastasianwidth/README.md b/node_modules/eastasianwidth/README.md deleted file mode 100644 index a8b71ee54d..0000000000 --- a/node_modules/eastasianwidth/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# East Asian Width - -Get [East Asian Width](http://www.unicode.org/reports/tr11/) from a character. - -'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural). - -Original Code is [東アジアの文字幅 (East Asian Width) の判定 - 中途](http://d.hatena.ne.jp/takenspc/20111126#1322252878). - -## Install - - $ npm install eastasianwidth - -## Usage - - var eaw = require('eastasianwidth'); - console.log(eaw.eastAsianWidth('₩')) // 'F' - console.log(eaw.eastAsianWidth('。')) // 'H' - console.log(eaw.eastAsianWidth('뀀')) // 'W' - console.log(eaw.eastAsianWidth('a')) // 'Na' - console.log(eaw.eastAsianWidth('①')) // 'A' - console.log(eaw.eastAsianWidth('ف')) // 'N' - - console.log(eaw.characterLength('₩')) // 2 - console.log(eaw.characterLength('。')) // 1 - console.log(eaw.characterLength('뀀')) // 2 - console.log(eaw.characterLength('a')) // 1 - console.log(eaw.characterLength('①')) // 2 - console.log(eaw.characterLength('ف')) // 1 - - console.log(eaw.length('あいうえお')) // 10 - console.log(eaw.length('abcdefg')) // 7 - console.log(eaw.length('¢₩。ᅵㄅ뀀¢⟭a⊙①بف')) // 19 diff --git a/node_modules/eastasianwidth/eastasianwidth.js b/node_modules/eastasianwidth/eastasianwidth.js deleted file mode 100644 index 7d0aa0f6ec..0000000000 --- a/node_modules/eastasianwidth/eastasianwidth.js +++ /dev/null @@ -1,311 +0,0 @@ -var eaw = {}; - -if ('undefined' == typeof module) { - window.eastasianwidth = eaw; -} else { - module.exports = eaw; -} - -eaw.eastAsianWidth = function(character) { - var x = character.charCodeAt(0); - var y = (character.length == 2) ? character.charCodeAt(1) : 0; - var codePoint = x; - if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { - x &= 0x3FF; - y &= 0x3FF; - codePoint = (x << 10) | y; - codePoint += 0x10000; - } - - if ((0x3000 == codePoint) || - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { - return 'F'; - } - if ((0x20A9 == codePoint) || - (0xFF61 <= codePoint && codePoint <= 0xFFBE) || - (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || - (0xFFCA <= codePoint && codePoint <= 0xFFCF) || - (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || - (0xFFDA <= codePoint && codePoint <= 0xFFDC) || - (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { - return 'H'; - } - if ((0x1100 <= codePoint && codePoint <= 0x115F) || - (0x11A3 <= codePoint && codePoint <= 0x11A7) || - (0x11FA <= codePoint && codePoint <= 0x11FF) || - (0x2329 <= codePoint && codePoint <= 0x232A) || - (0x2E80 <= codePoint && codePoint <= 0x2E99) || - (0x2E9B <= codePoint && codePoint <= 0x2EF3) || - (0x2F00 <= codePoint && codePoint <= 0x2FD5) || - (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || - (0x3001 <= codePoint && codePoint <= 0x303E) || - (0x3041 <= codePoint && codePoint <= 0x3096) || - (0x3099 <= codePoint && codePoint <= 0x30FF) || - (0x3105 <= codePoint && codePoint <= 0x312D) || - (0x3131 <= codePoint && codePoint <= 0x318E) || - (0x3190 <= codePoint && codePoint <= 0x31BA) || - (0x31C0 <= codePoint && codePoint <= 0x31E3) || - (0x31F0 <= codePoint && codePoint <= 0x321E) || - (0x3220 <= codePoint && codePoint <= 0x3247) || - (0x3250 <= codePoint && codePoint <= 0x32FE) || - (0x3300 <= codePoint && codePoint <= 0x4DBF) || - (0x4E00 <= codePoint && codePoint <= 0xA48C) || - (0xA490 <= codePoint && codePoint <= 0xA4C6) || - (0xA960 <= codePoint && codePoint <= 0xA97C) || - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || - (0xD7CB <= codePoint && codePoint <= 0xD7FB) || - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - (0xFE30 <= codePoint && codePoint <= 0xFE52) || - (0xFE54 <= codePoint && codePoint <= 0xFE66) || - (0xFE68 <= codePoint && codePoint <= 0xFE6B) || - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - (0x1F200 <= codePoint && codePoint <= 0x1F202) || - (0x1F210 <= codePoint && codePoint <= 0x1F23A) || - (0x1F240 <= codePoint && codePoint <= 0x1F248) || - (0x1F250 <= codePoint && codePoint <= 0x1F251) || - (0x20000 <= codePoint && codePoint <= 0x2F73F) || - (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || - (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { - return 'W'; - } - if ((0x0020 <= codePoint && codePoint <= 0x007E) || - (0x00A2 <= codePoint && codePoint <= 0x00A3) || - (0x00A5 <= codePoint && codePoint <= 0x00A6) || - (0x00AC == codePoint) || - (0x00AF == codePoint) || - (0x27E6 <= codePoint && codePoint <= 0x27ED) || - (0x2985 <= codePoint && codePoint <= 0x2986)) { - return 'Na'; - } - if ((0x00A1 == codePoint) || - (0x00A4 == codePoint) || - (0x00A7 <= codePoint && codePoint <= 0x00A8) || - (0x00AA == codePoint) || - (0x00AD <= codePoint && codePoint <= 0x00AE) || - (0x00B0 <= codePoint && codePoint <= 0x00B4) || - (0x00B6 <= codePoint && codePoint <= 0x00BA) || - (0x00BC <= codePoint && codePoint <= 0x00BF) || - (0x00C6 == codePoint) || - (0x00D0 == codePoint) || - (0x00D7 <= codePoint && codePoint <= 0x00D8) || - (0x00DE <= codePoint && codePoint <= 0x00E1) || - (0x00E6 == codePoint) || - (0x00E8 <= codePoint && codePoint <= 0x00EA) || - (0x00EC <= codePoint && codePoint <= 0x00ED) || - (0x00F0 == codePoint) || - (0x00F2 <= codePoint && codePoint <= 0x00F3) || - (0x00F7 <= codePoint && codePoint <= 0x00FA) || - (0x00FC == codePoint) || - (0x00FE == codePoint) || - (0x0101 == codePoint) || - (0x0111 == codePoint) || - (0x0113 == codePoint) || - (0x011B == codePoint) || - (0x0126 <= codePoint && codePoint <= 0x0127) || - (0x012B == codePoint) || - (0x0131 <= codePoint && codePoint <= 0x0133) || - (0x0138 == codePoint) || - (0x013F <= codePoint && codePoint <= 0x0142) || - (0x0144 == codePoint) || - (0x0148 <= codePoint && codePoint <= 0x014B) || - (0x014D == codePoint) || - (0x0152 <= codePoint && codePoint <= 0x0153) || - (0x0166 <= codePoint && codePoint <= 0x0167) || - (0x016B == codePoint) || - (0x01CE == codePoint) || - (0x01D0 == codePoint) || - (0x01D2 == codePoint) || - (0x01D4 == codePoint) || - (0x01D6 == codePoint) || - (0x01D8 == codePoint) || - (0x01DA == codePoint) || - (0x01DC == codePoint) || - (0x0251 == codePoint) || - (0x0261 == codePoint) || - (0x02C4 == codePoint) || - (0x02C7 == codePoint) || - (0x02C9 <= codePoint && codePoint <= 0x02CB) || - (0x02CD == codePoint) || - (0x02D0 == codePoint) || - (0x02D8 <= codePoint && codePoint <= 0x02DB) || - (0x02DD == codePoint) || - (0x02DF == codePoint) || - (0x0300 <= codePoint && codePoint <= 0x036F) || - (0x0391 <= codePoint && codePoint <= 0x03A1) || - (0x03A3 <= codePoint && codePoint <= 0x03A9) || - (0x03B1 <= codePoint && codePoint <= 0x03C1) || - (0x03C3 <= codePoint && codePoint <= 0x03C9) || - (0x0401 == codePoint) || - (0x0410 <= codePoint && codePoint <= 0x044F) || - (0x0451 == codePoint) || - (0x2010 == codePoint) || - (0x2013 <= codePoint && codePoint <= 0x2016) || - (0x2018 <= codePoint && codePoint <= 0x2019) || - (0x201C <= codePoint && codePoint <= 0x201D) || - (0x2020 <= codePoint && codePoint <= 0x2022) || - (0x2024 <= codePoint && codePoint <= 0x2027) || - (0x2030 == codePoint) || - (0x2032 <= codePoint && codePoint <= 0x2033) || - (0x2035 == codePoint) || - (0x203B == codePoint) || - (0x203E == codePoint) || - (0x2074 == codePoint) || - (0x207F == codePoint) || - (0x2081 <= codePoint && codePoint <= 0x2084) || - (0x20AC == codePoint) || - (0x2103 == codePoint) || - (0x2105 == codePoint) || - (0x2109 == codePoint) || - (0x2113 == codePoint) || - (0x2116 == codePoint) || - (0x2121 <= codePoint && codePoint <= 0x2122) || - (0x2126 == codePoint) || - (0x212B == codePoint) || - (0x2153 <= codePoint && codePoint <= 0x2154) || - (0x215B <= codePoint && codePoint <= 0x215E) || - (0x2160 <= codePoint && codePoint <= 0x216B) || - (0x2170 <= codePoint && codePoint <= 0x2179) || - (0x2189 == codePoint) || - (0x2190 <= codePoint && codePoint <= 0x2199) || - (0x21B8 <= codePoint && codePoint <= 0x21B9) || - (0x21D2 == codePoint) || - (0x21D4 == codePoint) || - (0x21E7 == codePoint) || - (0x2200 == codePoint) || - (0x2202 <= codePoint && codePoint <= 0x2203) || - (0x2207 <= codePoint && codePoint <= 0x2208) || - (0x220B == codePoint) || - (0x220F == codePoint) || - (0x2211 == codePoint) || - (0x2215 == codePoint) || - (0x221A == codePoint) || - (0x221D <= codePoint && codePoint <= 0x2220) || - (0x2223 == codePoint) || - (0x2225 == codePoint) || - (0x2227 <= codePoint && codePoint <= 0x222C) || - (0x222E == codePoint) || - (0x2234 <= codePoint && codePoint <= 0x2237) || - (0x223C <= codePoint && codePoint <= 0x223D) || - (0x2248 == codePoint) || - (0x224C == codePoint) || - (0x2252 == codePoint) || - (0x2260 <= codePoint && codePoint <= 0x2261) || - (0x2264 <= codePoint && codePoint <= 0x2267) || - (0x226A <= codePoint && codePoint <= 0x226B) || - (0x226E <= codePoint && codePoint <= 0x226F) || - (0x2282 <= codePoint && codePoint <= 0x2283) || - (0x2286 <= codePoint && codePoint <= 0x2287) || - (0x2295 == codePoint) || - (0x2299 == codePoint) || - (0x22A5 == codePoint) || - (0x22BF == codePoint) || - (0x2312 == codePoint) || - (0x2460 <= codePoint && codePoint <= 0x24E9) || - (0x24EB <= codePoint && codePoint <= 0x254B) || - (0x2550 <= codePoint && codePoint <= 0x2573) || - (0x2580 <= codePoint && codePoint <= 0x258F) || - (0x2592 <= codePoint && codePoint <= 0x2595) || - (0x25A0 <= codePoint && codePoint <= 0x25A1) || - (0x25A3 <= codePoint && codePoint <= 0x25A9) || - (0x25B2 <= codePoint && codePoint <= 0x25B3) || - (0x25B6 <= codePoint && codePoint <= 0x25B7) || - (0x25BC <= codePoint && codePoint <= 0x25BD) || - (0x25C0 <= codePoint && codePoint <= 0x25C1) || - (0x25C6 <= codePoint && codePoint <= 0x25C8) || - (0x25CB == codePoint) || - (0x25CE <= codePoint && codePoint <= 0x25D1) || - (0x25E2 <= codePoint && codePoint <= 0x25E5) || - (0x25EF == codePoint) || - (0x2605 <= codePoint && codePoint <= 0x2606) || - (0x2609 == codePoint) || - (0x260E <= codePoint && codePoint <= 0x260F) || - (0x2614 <= codePoint && codePoint <= 0x2615) || - (0x261C == codePoint) || - (0x261E == codePoint) || - (0x2640 == codePoint) || - (0x2642 == codePoint) || - (0x2660 <= codePoint && codePoint <= 0x2661) || - (0x2663 <= codePoint && codePoint <= 0x2665) || - (0x2667 <= codePoint && codePoint <= 0x266A) || - (0x266C <= codePoint && codePoint <= 0x266D) || - (0x266F == codePoint) || - (0x269E <= codePoint && codePoint <= 0x269F) || - (0x26BE <= codePoint && codePoint <= 0x26BF) || - (0x26C4 <= codePoint && codePoint <= 0x26CD) || - (0x26CF <= codePoint && codePoint <= 0x26E1) || - (0x26E3 == codePoint) || - (0x26E8 <= codePoint && codePoint <= 0x26FF) || - (0x273D == codePoint) || - (0x2757 == codePoint) || - (0x2776 <= codePoint && codePoint <= 0x277F) || - (0x2B55 <= codePoint && codePoint <= 0x2B59) || - (0x3248 <= codePoint && codePoint <= 0x324F) || - (0xE000 <= codePoint && codePoint <= 0xF8FF) || - (0xFE00 <= codePoint && codePoint <= 0xFE0F) || - (0xFFFD == codePoint) || - (0x1F100 <= codePoint && codePoint <= 0x1F10A) || - (0x1F110 <= codePoint && codePoint <= 0x1F12D) || - (0x1F130 <= codePoint && codePoint <= 0x1F169) || - (0x1F170 <= codePoint && codePoint <= 0x1F19A) || - (0xE0100 <= codePoint && codePoint <= 0xE01EF) || - (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || - (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { - return 'A'; - } - - return 'N'; -}; - -eaw.characterLength = function(character) { - var code = this.eastAsianWidth(character); - if (code == 'F' || code == 'W' || code == 'A') { - return 2; - } else { - return 1; - } -}; - -// Split a string considering surrogate-pairs. -function stringToArray(string) { - return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; -} - -eaw.length = function(string) { - var characters = stringToArray(string); - var len = 0; - for (var i = 0; i < characters.length; i++) { - len = len + this.characterLength(characters[i]); - } - return len; -}; - -eaw.slice = function(text, start, end) { - textLen = eaw.length(text) - start = start ? start : 0; - end = end ? end : 1; - if (start < 0) { - start = textLen + start; - } - if (end < 0) { - end = textLen + end; - } - var result = ''; - var eawLen = 0; - var chars = stringToArray(text); - for (var i = 0; i < chars.length; i++) { - var char = chars[i]; - var charLen = eaw.length(char); - if (eawLen >= start - (charLen == 2 ? 1 : 0)) { - if (eawLen + charLen <= end) { - result += char; - } else { - break; - } - } - eawLen += charLen; - } - return result; -}; diff --git a/node_modules/eastasianwidth/package.json b/node_modules/eastasianwidth/package.json deleted file mode 100644 index cb7ac6ab3b..0000000000 --- a/node_modules/eastasianwidth/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "eastasianwidth", - "version": "0.2.0", - "description": "Get East Asian Width from a character.", - "main": "eastasianwidth.js", - "files": [ - "eastasianwidth.js" - ], - "scripts": { - "test": "mocha" - }, - "repository": "git://github.com/komagata/eastasianwidth.git", - "author": "Masaki Komagata", - "license": "MIT", - "devDependencies": { - "mocha": "~1.9.0" - } -} diff --git a/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/emoji-regex/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/emoji-regex/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/emoji-regex/README.md b/node_modules/emoji-regex/README.md deleted file mode 100644 index 6d63082740..0000000000 --- a/node_modules/emoji-regex/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=main)](https://travis-ci.org/mathiasbynens/emoji-regex) - -_emoji-regex_ offers a regular expression to match all emoji symbols and sequences (including textual representations of emoji) as per the Unicode Standard. - -This repository contains a script that generates this regular expression based on [Unicode data](https://github.com/node-unicode/node-unicode-data). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install emoji-regex -``` - -In [Node.js](https://nodejs.org/): - -```js -const emojiRegex = require('emoji-regex/RGI_Emoji.js'); -// Note: because the regular expression has the global flag set, this module -// exports a function that returns the regex rather than exporting the regular -// expression itself, to make it impossible to (accidentally) mutate the -// original regular expression. - -const text = ` -\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) -\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji -\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) -\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier -`; - -const regex = emojiRegex(); -let match; -while (match = regex.exec(text)) { - const emoji = match[0]; - console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); -} -``` - -Console output: - -``` -Matched sequence ⌚ — code points: 1 -Matched sequence ⌚ — code points: 1 -Matched sequence ↔️ — code points: 2 -Matched sequence ↔️ — code points: 2 -Matched sequence 👩 — code points: 1 -Matched sequence 👩 — code points: 1 -Matched sequence 👩🏿 — code points: 2 -Matched sequence 👩🏿 — code points: 2 -``` - -## Regular expression flavors - -The package comes with three distinct regular expressions: - -```js -// This is the recommended regular expression to use. It matches all -// emoji recommended for general interchange, as defined via the -// `RGI_Emoji` property in the Unicode Standard. -// https://unicode.org/reports/tr51/#def_rgi_set -// When in doubt, use this! -const emojiRegexRGI = require('emoji-regex/RGI_Emoji.js'); - -// This is the old regular expression, prior to `RGI_Emoji` being -// standardized. In addition to all `RGI_Emoji` sequences, it matches -// some emoji you probably don’t want to match (such as emoji component -// symbols that are not meant to be used separately). -const emojiRegex = require('emoji-regex/index.js'); - -// This regular expression matches even more emoji than the previous -// one, including emoji that render as text instead of icons (i.e. -// emoji that are not `Emoji_Presentation` symbols and that aren’t -// forced to render as emoji by a variation selector). -const emojiRegexText = require('emoji-regex/text.js'); -``` - -Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: - -```js -const emojiRegexRGI = require('emoji-regex/es2015/RGI_Emoji.js'); -const emojiRegex = require('emoji-regex/es2015/index.js'); -const emojiRegexText = require('emoji-regex/es2015/text.js'); -``` - -## For maintainers - -### How to update emoji-regex after new Unicode Standard releases - -1. Update the Unicode data dependency in `package.json` by running the following commands: - - ```sh - # Example: updating from Unicode v12 to Unicode v13. - npm uninstall @unicode/unicode-12.0.0 - npm install @unicode/unicode-13.0.0 --save-dev - ```` - -1. Generate the new output: - - ```sh - npm run build - ``` - -1. Verify that tests still pass: - - ```sh - npm test - ``` - -1. Send a pull request with the changes, and get it reviewed & merged. - -1. On the `main` branch, bump the emoji-regex version number in `package.json`: - - ```sh - npm version patch -m 'Release v%s' - ``` - - Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). - - Note that this produces a Git commit + tag. - -1. Push the release commit and tag: - - ```sh - git push - ``` - - Our CI then automatically publishes the new release to npm. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/emoji-regex/RGI_Emoji.d.ts b/node_modules/emoji-regex/RGI_Emoji.d.ts deleted file mode 100644 index 89a651fb33..0000000000 --- a/node_modules/emoji-regex/RGI_Emoji.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/RGI_Emoji' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/RGI_Emoji.js b/node_modules/emoji-regex/RGI_Emoji.js deleted file mode 100644 index 3fbe924100..0000000000 --- a/node_modules/emoji-regex/RGI_Emoji.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g; -}; diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts deleted file mode 100644 index bf0f154b15..0000000000 --- a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/es2015/RGI_Emoji' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.js b/node_modules/emoji-regex/es2015/RGI_Emoji.js deleted file mode 100644 index ecf32f1779..0000000000 --- a/node_modules/emoji-regex/es2015/RGI_Emoji.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu; -}; diff --git a/node_modules/emoji-regex/es2015/index.d.ts b/node_modules/emoji-regex/es2015/index.d.ts deleted file mode 100644 index 823dfa6532..0000000000 --- a/node_modules/emoji-regex/es2015/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/es2015' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/es2015/index.js b/node_modules/emoji-regex/es2015/index.js deleted file mode 100644 index 1a4fc8d0dc..0000000000 --- a/node_modules/emoji-regex/es2015/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/emoji-regex/es2015/text.d.ts b/node_modules/emoji-regex/es2015/text.d.ts deleted file mode 100644 index ccc2f9adca..0000000000 --- a/node_modules/emoji-regex/es2015/text.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/es2015/text' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/es2015/text.js b/node_modules/emoji-regex/es2015/text.js deleted file mode 100644 index 8e9f985758..0000000000 --- a/node_modules/emoji-regex/es2015/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu; -}; diff --git a/node_modules/emoji-regex/index.d.ts b/node_modules/emoji-regex/index.d.ts deleted file mode 100644 index 8f235c9a73..0000000000 --- a/node_modules/emoji-regex/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/index.js b/node_modules/emoji-regex/index.js deleted file mode 100644 index c0490d4c95..0000000000 --- a/node_modules/emoji-regex/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/emoji-regex/package.json b/node_modules/emoji-regex/package.json deleted file mode 100644 index eac892a16a..0000000000 --- a/node_modules/emoji-regex/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "emoji-regex", - "version": "9.2.2", - "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", - "homepage": "https://mths.be/emoji-regex", - "main": "index.js", - "types": "index.d.ts", - "keywords": [ - "unicode", - "regex", - "regexp", - "regular expressions", - "code points", - "symbols", - "characters", - "emoji" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/emoji-regex.git" - }, - "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", - "files": [ - "LICENSE-MIT.txt", - "index.js", - "index.d.ts", - "RGI_Emoji.js", - "RGI_Emoji.d.ts", - "text.js", - "text.d.ts", - "es2015" - ], - "scripts": { - "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js", - "test": "mocha", - "test:watch": "npm run test -- --watch" - }, - "devDependencies": { - "@babel/cli": "^7.4.4", - "@babel/core": "^7.4.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@unicode/unicode-13.0.0": "^1.0.3", - "mocha": "^6.1.4", - "regexgen": "^1.3.0" - } -} diff --git a/node_modules/emoji-regex/text.d.ts b/node_modules/emoji-regex/text.d.ts deleted file mode 100644 index c3a0125451..0000000000 --- a/node_modules/emoji-regex/text.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'emoji-regex/text' { - function emojiRegex(): RegExp; - - export = emojiRegex; -} diff --git a/node_modules/emoji-regex/text.js b/node_modules/emoji-regex/text.js deleted file mode 100644 index 9bc63ce747..0000000000 --- a/node_modules/emoji-regex/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g; -}; diff --git a/node_modules/entities/LICENSE b/node_modules/entities/LICENSE deleted file mode 100644 index c464f863ea..0000000000 --- a/node_modules/entities/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/entities/package.json b/node_modules/entities/package.json deleted file mode 100644 index 2e857f8cf5..0000000000 --- a/node_modules/entities/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "entities", - "version": "4.5.0", - "description": "Encode & decode XML and HTML entities with ease & speed", - "author": "Felix Boehm ", - "funding": "https://github.com/fb55/entities?sponsor=1", - "sideEffects": false, - "keywords": [ - "entity", - "decoding", - "encoding", - "html", - "xml", - "html entities" - ], - "directories": { - "lib": "lib/" - }, - "main": "lib/index.js", - "types": "lib/index.d.ts", - "module": "lib/esm/index.js", - "exports": { - ".": { - "require": "./lib/index.js", - "import": "./lib/esm/index.js" - }, - "./lib/decode.js": { - "require": "./lib/decode.js", - "import": "./lib/esm/decode.js" - }, - "./lib/escape.js": { - "require": "./lib/escape.js", - "import": "./lib/esm/escape.js" - } - }, - "files": [ - "lib/**/*" - ], - "engines": { - "node": ">=0.12" - }, - "devDependencies": { - "@types/jest": "^28.1.8", - "@types/node": "^18.15.11", - "@typescript-eslint/eslint-plugin": "^5.58.0", - "@typescript-eslint/parser": "^5.58.0", - "eslint": "^8.38.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-node": "^11.1.0", - "jest": "^28.1.3", - "prettier": "^2.8.7", - "ts-jest": "^28.0.8", - "typedoc": "^0.24.1", - "typescript": "^5.0.4" - }, - "scripts": { - "test": "npm run test:jest && npm run lint", - "test:jest": "jest", - "lint": "npm run lint:es && npm run lint:prettier", - "lint:es": "eslint .", - "lint:prettier": "npm run prettier -- --check", - "format": "npm run format:es && npm run format:prettier", - "format:es": "npm run lint:es -- --fix", - "format:prettier": "npm run prettier -- --write", - "prettier": "prettier '**/*.{ts,md,json,yml}'", - "build": "npm run build:cjs && npm run build:esm", - "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/entities/$(git rev-parse HEAD)/src/", - "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", - "build:docs": "typedoc --hideGenerator src/index.ts", - "build:trie": "ts-node scripts/write-decode-map.ts", - "build:encode-trie": "ts-node scripts/write-encode-map.ts", - "prepare": "npm run build" - }, - "repository": { - "type": "git", - "url": "git://github.com/fb55/entities.git" - }, - "license": "BSD-2-Clause", - "jest": { - "preset": "ts-jest", - "coverageProvider": "v8", - "moduleNameMapper": { - "^(.*)\\.js$": "$1" - } - }, - "prettier": { - "tabWidth": 4, - "proseWrap": "always" - } -} diff --git a/node_modules/entities/readme.md b/node_modules/entities/readme.md deleted file mode 100644 index 731d90c68f..0000000000 --- a/node_modules/entities/readme.md +++ /dev/null @@ -1,122 +0,0 @@ -# entities [![NPM version](https://img.shields.io/npm/v/entities.svg)](https://npmjs.org/package/entities) [![Downloads](https://img.shields.io/npm/dm/entities.svg)](https://npmjs.org/package/entities) [![Node.js CI](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml) - -Encode & decode HTML & XML entities with ease & speed. - -## Features - -- 😇 Tried and true: `entities` is used by many popular libraries; eg. - [`htmlparser2`](https://github.com/fb55/htmlparser2), the official - [AWS SDK](https://github.com/aws/aws-sdk-js-v3) and - [`commonmark`](https://github.com/commonmark/commonmark.js) use it to - process HTML entities. -- ⚡️ Fast: `entities` is the fastest library for decoding HTML entities (as - of April 2022); see [performance](#performance). -- 🎛 Configurable: Get an output tailored for your needs. You are fine with - UTF8? That'll save you some bytes. Prefer to only have ASCII characters? We - can do that as well! - -## How to… - -### …install `entities` - - npm install entities - -### …use `entities` - -```javascript -const entities = require("entities"); - -// Encoding -entities.escapeUTF8("& ü"); // "&#38; ü" -entities.encodeXML("& ü"); // "&#38; ü" -entities.encodeHTML("& ü"); // "&#38; ü" - -// Decoding -entities.decodeXML("asdf & ÿ ü '"); // "asdf & ÿ ü '" -entities.decodeHTML("asdf & ÿ ü '"); // "asdf & ÿ ü '" -``` - -## Performance - -This is how `entities` compares to other libraries on a very basic benchmark -(see `scripts/benchmark.ts`, for 10,000,000 iterations; **lower is better**): - -| Library | Version | `decode` perf | `encode` perf | `escape` perf | -| -------------- | ------- | ------------- | ------------- | ------------- | -| entities | `3.0.1` | 1.418s | 6.786s | 2.196s | -| html-entities | `2.3.2` | 2.530s | 6.829s | 2.415s | -| he | `1.2.0` | 5.800s | 24.237s | 3.624s | -| parse-entities | `3.0.0` | 9.660s | N/A | N/A | - ---- - -## FAQ - -> What methods should I actually use to encode my documents? - -If your target supports UTF-8, the `escapeUTF8` method is going to be your best -choice. Otherwise, use either `encodeHTML` or `encodeXML` based on whether -you're dealing with an HTML or an XML document. - -You can have a look at the options for the `encode` and `decode` methods to see -everything you can configure. - -> When should I use strict decoding? - -When strict decoding, entities not terminated with a semicolon will be ignored. -This is helpful for decoding entities in legacy environments. - -> Why should I use `entities` instead of alternative modules? - -As of April 2022, `entities` is a bit faster than other modules. Still, this is -not a very differentiated space and other modules can catch up. - -**More importantly**, you might already have `entities` in your dependency graph -(as a dependency of eg. `cheerio`, or `htmlparser2`), and including it directly -might not even increase your bundle size. The same is true for other entity -libraries, so have a look through your `node_modules` directory! - -> Does `entities` support tree shaking? - -Yes! `entities` ships as both a CommonJS and a ES module. Note that for best -results, you should not use the `encode` and `decode` functions, as they wrap -around a number of other functions, all of which will remain in the bundle. -Instead, use the functions that you need directly. - ---- - -## Acknowledgements - -This library wouldn't be possible without the work of these individuals. Thanks -to - -- [@mathiasbynens](https://github.com/mathiasbynens) for his explanations - about character encodings, and his library `he`, which was one of the - inspirations for `entities` -- [@inikulin](https://github.com/inikulin) for his work on optimized tries for - decoding HTML entities for the `parse5` project -- [@mdevils](https://github.com/mdevils) for taking on the challenge of - producing a quick entity library with his `html-entities` library. - `entities` would be quite a bit slower if there wasn't any competition. - Right now `entities` is on top, but we'll see how long that lasts! - ---- - -License: BSD-2-Clause - -## Security contact information - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). Tidelift will -coordinate the fix and disclosure. - -## `entities` for enterprise - -Available as part of the Tidelift Subscription - -The maintainers of `entities` and thousands of other packages are working with -Tidelift to deliver commercial support and maintenance for the open source -dependencies you use to build your applications. Save time, reduce risk, and -improve code health, while paying the maintainers of the exact dependencies you -use. -[Learn more.](https://tidelift.com/subscription/pkg/npm-entities?utm_source=npm-entities&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/foreground-child/LICENSE b/node_modules/foreground-child/LICENSE deleted file mode 100644 index 2d80720fe6..0000000000 --- a/node_modules/foreground-child/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/foreground-child/README.md b/node_modules/foreground-child/README.md deleted file mode 100644 index 477ca57178..0000000000 --- a/node_modules/foreground-child/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# foreground-child - -Run a child as if it's the foreground process. Give it stdio. Exit -when it exits. - -Mostly this module is here to support some use cases around -wrapping child processes for test coverage and such. But it's -also generally useful any time you want one program to execute -another as if it's the "main" process, for example, if a program -takes a `--cmd` argument to execute in some way. - -## USAGE - -```js -import { foregroundChild } from 'foreground-child' -// hybrid module, this also works: -// const { foregroundChild } = require('foreground-child') - -// cats out this file -const child = foregroundChild('cat', [__filename]) - -// At this point, it's best to just do nothing else. -// return or whatever. -// If the child gets a signal, or just exits, then this -// parent process will exit in the same way. -``` - -You can provide custom spawn options by passing an object after -the program and arguments: - -```js -const child = foregroundChild(`cat ${__filename}`, { shell: true }) -``` - -A callback can optionally be provided, if you want to perform an -action before your foreground-child exits: - -```js -const child = foregroundChild('cat', [__filename], spawnOptions, () => { - doSomeActions() -}) -``` - -The callback can return a Promise in order to perform -asynchronous actions. If the callback does not return a promise, -then it must complete its actions within a single JavaScript -tick. - -```js -const child = foregroundChild('cat', [__filename], async () => { - await doSomeAsyncActions() -}) -``` - -If the callback throws or rejects, then it will be unhandled, and -node will exit in error. - -If the callback returns a string value, then that will be used as -the signal to exit the parent process. If it returns a number, -then that number will be used as the parent exit status code. If -it returns boolean `false`, then the parent process will not be -terminated. If it returns `undefined`, then it will exit with the -same signal/code as the child process. - -## Caveats - -The "normal" standard IO file descriptors (0, 1, and 2 for stdin, -stdout, and stderr respectively) are shared with the child process. -Additionally, if there is an IPC channel set up in the parent, then -messages are proxied to the child on file descriptor 3. - -In Node, it's possible to also map arbitrary file descriptors -into a child process. In these cases, foreground-child will not -map the file descriptors into the child. If file descriptors 0, -1, or 2 are used for the IPC channel, then strange behavior may -happen (like printing IPC messages to stderr, for example). - -Note that a SIGKILL will always kill the parent process, but -will not proxy the signal to the child process, because SIGKILL -cannot be caught. In order to address this, a special "watchdog" -child process is spawned which will send a SIGKILL to the child -process if it does not terminate within half a second after the -watchdog receives a SIGHUP due to its parent terminating. - -On Windows, issuing a `process.kill(process.pid, signal)` with a -fatal termination signal may cause the process to exit with a `1` -status code rather than reporting the signal properly. This -module tries to do the right thing, but on Windows systems, you -may see that incorrect result. There is as far as I'm aware no -workaround for this. - -## util: `foreground-child/proxy-signals` - -If you just want to proxy the signals to a child process that the -main process receives, you can use the `proxy-signals` export -from this package. - -```js -import { proxySignals } from 'foreground-child/proxy-signals' - -const childProcess = spawn('command', ['some', 'args']) -proxySignals(childProcess) -``` - -Now, any fatal signal received by the current process will be -proxied to the child process. - -It doesn't go in the other direction; ie, signals sent to the -child process will not affect the parent. For that, listen to the -child `exit` or `close` events, and handle them appropriately. - -## util: `foreground-child/watchdog` - -If you are spawning a child process, and want to ensure that it -isn't left dangling if the parent process exits, you can use the -watchdog utility exported by this module. - -```js -import { watchdog } from 'foreground-child/watchdog' - -const childProcess = spawn('command', ['some', 'args']) -const watchdogProcess = watchdog(childProcess) - -// watchdogProcess is a reference to the process monitoring the -// parent and child. There's usually no reason to do anything -// with it, as it's silent and will terminate -// automatically when it's no longer needed. -``` diff --git a/node_modules/foreground-child/package.json b/node_modules/foreground-child/package.json deleted file mode 100644 index 980b7e85d1..0000000000 --- a/node_modules/foreground-child/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "name": "foreground-child", - "version": "3.3.0", - "description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.", - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "exports": { - "./watchdog": { - "import": { - "source": "./src/watchdog.ts", - "types": "./dist/esm/watchdog.d.ts", - "default": "./dist/esm/watchdog.js" - }, - "require": { - "source": "./src/watchdog.ts", - "types": "./dist/commonjs/watchdog.d.ts", - "default": "./dist/commonjs/watchdog.js" - } - }, - "./proxy-signals": { - "import": { - "source": "./src/proxy-signals.ts", - "types": "./dist/esm/proxy-signals.d.ts", - "default": "./dist/esm/proxy-signals.js" - }, - "require": { - "source": "./src/proxy-signals.ts", - "types": "./dist/commonjs/proxy-signals.d.ts", - "default": "./dist/commonjs/proxy-signals.js" - } - }, - "./package.json": "./package.json", - ".": { - "import": { - "source": "./src/index.ts", - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "source": "./src/index.ts", - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "engines": { - "node": ">=14" - }, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" - }, - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "tap": { - "typecheck": true - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tapjs/foreground-child.git" - }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "devDependencies": { - "@types/cross-spawn": "^6.0.2", - "@types/node": "^18.15.11", - "@types/tap": "^15.0.8", - "prettier": "^3.3.2", - "tap": "^19.2.5", - "tshy": "^1.15.1", - "typedoc": "^0.24.2", - "typescript": "^5.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "tshy": { - "exports": { - "./watchdog": "./src/watchdog.ts", - "./proxy-signals": "./src/proxy-signals.ts", - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "type": "module" -} diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE deleted file mode 100644 index ec7df93329..0000000000 --- a/node_modules/glob/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md deleted file mode 100644 index 023cd77968..0000000000 --- a/node_modules/glob/README.md +++ /dev/null @@ -1,1265 +0,0 @@ -# Glob - -Match files using the patterns the shell uses. - -The most correct and second fastest glob implementation in -JavaScript. (See **Comparison to Other JavaScript Glob -Implementations** at the bottom of this readme.) - -![a fun cartoon logo made of glob characters](https://github.com/isaacs/node-glob/raw/main/logo/glob.png) - -## Usage - -Install with npm - -``` -npm i glob -``` - -**Note** the npm package name is _not_ `node-glob` that's a -different thing that was abandoned years ago. Just `glob`. - -```js -// load using import -import { glob, globSync, globStream, globStreamSync, Glob } from 'glob' -// or using commonjs, that's fine, too -const { - glob, - globSync, - globStream, - globStreamSync, - Glob, -} = require('glob') - -// the main glob() and globSync() resolve/return array of filenames - -// all js files, but don't look in node_modules -const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' }) - -// pass in a signal to cancel the glob walk -const stopAfter100ms = await glob('**/*.css', { - signal: AbortSignal.timeout(100), -}) - -// multiple patterns supported as well -const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}']) - -// but of course you can do that with the glob pattern also -// the sync function is the same, just returns a string[] instead -// of Promise -const imagesAlt = globSync('{css,public}/*.{png,jpeg}') - -// you can also stream them, this is a Minipass stream -const filesStream = globStream(['**/*.dat', 'logs/**/*.log']) - -// construct a Glob object if you wanna do it that way, which -// allows for much faster walks if you have to look in the same -// folder multiple times. -const g = new Glob('**/foo', {}) -// glob objects are async iterators, can also do globIterate() or -// g.iterate(), same deal -for await (const file of g) { - console.log('found a foo file:', file) -} -// pass a glob as the glob options to reuse its settings and caches -const g2 = new Glob('**/bar', g) -// sync iteration works as well -for (const file of g2) { - console.log('found a bar file:', file) -} - -// you can also pass withFileTypes: true to get Path objects -// these are like a Dirent, but with some more added powers -// check out http://npm.im/path-scurry for more info on their API -const g3 = new Glob('**/baz/**', { withFileTypes: true }) -g3.stream().on('data', path => { - console.log( - 'got a path object', - path.fullpath(), - path.isDirectory(), - path.readdirSync().map(e => e.name), - ) -}) - -// if you use stat:true and withFileTypes, you can sort results -// by things like modified time, filter by permission mode, etc. -// All Stats fields will be available in that case. Slightly -// slower, though. -// For example: -const results = await glob('**', { stat: true, withFileTypes: true }) - -const timeSortedFiles = results - .sort((a, b) => a.mtimeMs - b.mtimeMs) - .map(path => path.fullpath()) - -const groupReadableFiles = results - .filter(path => path.mode & 0o040) - .map(path => path.fullpath()) - -// custom ignores can be done like this, for example by saying -// you'll ignore all markdown files, and all folders named 'docs' -const customIgnoreResults = await glob('**', { - ignore: { - ignored: p => /\.md$/.test(p.name), - childrenIgnored: p => p.isNamed('docs'), - }, -}) - -// another fun use case, only return files with the same name as -// their parent folder, plus either `.ts` or `.js` -const folderNamedModules = await glob('**/*.{ts,js}', { - ignore: { - ignored: p => { - const pp = p.parent - return !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js')) - }, - }, -}) - -// find all files edited in the last hour, to do this, we ignore -// all of them that are more than an hour old -const newFiles = await glob('**', { - // need stat so we have mtime - stat: true, - // only want the files, not the dirs - nodir: true, - ignore: { - ignored: p => { - return new Date() - p.mtime > 60 * 60 * 1000 - }, - // could add similar childrenIgnored here as well, but - // directory mtime is inconsistent across platforms, so - // probably better not to, unless you know the system - // tracks this reliably. - }, -}) -``` - -**Note** Glob patterns should always use `/` as a path separator, -even on Windows systems, as `\` is used to escape glob -characters. If you wish to use `\` as a path separator _instead -of_ using it as an escape character on Windows platforms, you may -set `windowsPathsNoEscape:true` in the options. In this mode, -special glob characters cannot be escaped, making it impossible -to match a literal `*` `?` and so on in filenames. - -## Command Line Interface - -``` -$ glob -h - -Usage: - glob [options] [ [ ...]] - -Expand the positional glob expression arguments into any matching file system -paths found. - - -c --cmd= - Run the command provided, passing the glob expression - matches as arguments. - - -A --all By default, the glob cli command will not expand any - arguments that are an exact match to a file on disk. - - This prevents double-expanding, in case the shell - expands an argument whose filename is a glob - expression. - - For example, if 'app/*.ts' would match 'app/[id].ts', - then on Windows powershell or cmd.exe, 'glob app/*.ts' - will expand to 'app/[id].ts', as expected. However, in - posix shells such as bash or zsh, the shell will first - expand 'app/*.ts' to a list of filenames. Then glob - will look for a file matching 'app/[id].ts' (ie, - 'app/i.ts' or 'app/d.ts'), which is unexpected. - - Setting '--all' prevents this behavior, causing glob to - treat ALL patterns as glob expressions to be expanded, - even if they are an exact match to a file on disk. - - When setting this option, be sure to enquote arguments - so that the shell will not expand them prior to passing - them to the glob command process. - - -a --absolute Expand to absolute paths - -d --dot-relative Prepend './' on relative matches - -m --mark Append a / on any directories matched - -x --posix Always resolve to posix style paths, using '/' as the - directory separator, even on Windows. Drive letter - absolute matches on Windows will be expanded to their - full resolved UNC maths, eg instead of 'C:\foo\bar', it - will expand to '//?/C:/foo/bar'. - - -f --follow Follow symlinked directories when expanding '**' - -R --realpath Call 'fs.realpath' on all of the results. In the case - of an entry that cannot be resolved, the entry is - omitted. This incurs a slight performance penalty, of - course, because of the added system calls. - - -s --stat Call 'fs.lstat' on all entries, whether required or not - to determine if it's a valid match. - - -b --match-base Perform a basename-only match if the pattern does not - contain any slash characters. That is, '*.js' would be - treated as equivalent to '**/*.js', matching js files - in all directories. - - --dot Allow patterns to match files/directories that start - with '.', even if the pattern does not start with '.' - - --nobrace Do not expand {...} patterns - --nocase Perform a case-insensitive match. This defaults to - 'true' on macOS and Windows platforms, and false on all - others. - - Note: 'nocase' should only be explicitly set when it is - known that the filesystem's case sensitivity differs - from the platform default. If set 'true' on - case-insensitive file systems, then the walk may return - more or less results than expected. - - --nodir Do not match directories, only files. - - Note: to *only* match directories, append a '/' at the - end of the pattern. - - --noext Do not expand extglob patterns, such as '+(a|b)' - --noglobstar Do not expand '**' against multiple path portions. Ie, - treat it as a normal '*' instead. - - --windows-path-no-escape - Use '\' as a path separator *only*, and *never* as an - escape character. If set, all '\' characters are - replaced with '/' in the pattern. - - -D --max-depth= Maximum depth to traverse from the current working - directory - - -C --cwd= Current working directory to execute/match in - -r --root= A string path resolved against the 'cwd', which is used - as the starting point for absolute patterns that start - with '/' (but not drive letters or UNC paths on - Windows). - - Note that this *doesn't* necessarily limit the walk to - the 'root' directory, and doesn't affect the cwd - starting point for non-absolute patterns. A pattern - containing '..' will still be able to traverse out of - the root directory, if it is not an actual root - directory on the filesystem, and any non-absolute - patterns will still be matched in the 'cwd'. - - To start absolute and non-absolute patterns in the same - path, you can use '--root=' to set it to the empty - string. However, be aware that on Windows systems, a - pattern like 'x:/*' or '//host/share/*' will *always* - start in the 'x:/' or '//host/share/' directory, - regardless of the --root setting. - - --platform= Defaults to the value of 'process.platform' if - available, or 'linux' if not. Setting --platform=win32 - on non-Windows systems may cause strange behavior! - - -i --ignore= - Glob patterns to ignore Can be set multiple times - -v --debug Output a huge amount of noisy debug information about - patterns as they are parsed and used to match files. - - -h --help Show this usage information -``` - -## `glob(pattern: string | string[], options?: GlobOptions) => Promise` - -Perform an asynchronous glob search for the pattern(s) specified. -Returns -[Path](https://isaacs.github.io/path-scurry/classes/PathBase) -objects if the `withFileTypes` option is set to `true`. See below -for full options field desciptions. - -## `globSync(pattern: string | string[], options?: GlobOptions) => string[] | Path[]` - -Synchronous form of `glob()`. - -Alias: `glob.sync()` - -## `globIterate(pattern: string | string[], options?: GlobOptions) => AsyncGenerator` - -Return an async iterator for walking glob pattern matches. - -Alias: `glob.iterate()` - -## `globIterateSync(pattern: string | string[], options?: GlobOptions) => Generator` - -Return a sync iterator for walking glob pattern matches. - -Alias: `glob.iterate.sync()`, `glob.sync.iterate()` - -## `globStream(pattern: string | string[], options?: GlobOptions) => Minipass` - -Return a stream that emits all the strings or `Path` objects and -then emits `end` when completed. - -Alias: `glob.stream()` - -## `globStreamSync(pattern: string | string[], options?: GlobOptions) => Minipass` - -Syncronous form of `globStream()`. Will read all the matches as -fast as you consume them, even all in a single tick if you -consume them immediately, but will still respond to backpressure -if they're not consumed immediately. - -Alias: `glob.stream.sync()`, `glob.sync.stream()` - -## `hasMagic(pattern: string | string[], options?: GlobOptions) => boolean` - -Returns `true` if the provided pattern contains any "magic" glob -characters, given the options provided. - -Brace expansion is not considered "magic" unless the -`magicalBraces` option is set, as brace expansion just turns one -string into an array of strings. So a pattern like `'x{a,b}y'` -would return `false`, because `'xay'` and `'xby'` both do not -contain any magic glob characters, and it's treated the same as -if you had called it on `['xay', 'xby']`. When -`magicalBraces:true` is in the options, brace expansion _is_ -treated as a pattern having magic. - -## `escape(pattern: string, options?: GlobOptions) => string` - -Escape all magic characters in a glob pattern, so that it will -only ever match literal strings - -If the `windowsPathsNoEscape` option is used, then characters are -escaped by wrapping in `[]`, because a magic character wrapped in -a character class can only be satisfied by that exact character. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -## `unescape(pattern: string, options?: GlobOptions) => string` - -Un-escape a glob string that may contain some escaped characters. - -If the `windowsPathsNoEscape` option is used, then square-brace -escapes are removed, but not backslash escapes. For example, it -will turn the string `'[*]'` into `*`, but it will not turn -`'\\*'` into `'*'`, because `\` is a path separator in -`windowsPathsNoEscape` mode. - -When `windowsPathsNoEscape` is not set, then both brace escapes -and backslash escapes are removed. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -## Class `Glob` - -An object that can perform glob pattern traversals. - -### `const g = new Glob(pattern: string | string[], options: GlobOptions)` - -Options object is required. - -See full options descriptions below. - -Note that a previous `Glob` object can be passed as the -`GlobOptions` to another `Glob` instantiation to re-use settings -and caches with a new pattern. - -Traversal functions can be called multiple times to run the walk -again. - -### `g.stream()` - -Stream results asynchronously, - -### `g.streamSync()` - -Stream results synchronously. - -### `g.iterate()` - -Default async iteration function. Returns an AsyncGenerator that -iterates over the results. - -### `g.iterateSync()` - -Default sync iteration function. Returns a Generator that -iterates over the results. - -### `g.walk()` - -Returns a Promise that resolves to the results array. - -### `g.walkSync()` - -Returns a results array. - -### Properties - -All options are stored as properties on the `Glob` object. - -- `opts` The options provided to the constructor. -- `patterns` An array of parsed immutable `Pattern` objects. - -## Options - -Exported as `GlobOptions` TypeScript interface. A `GlobOptions` -object may be provided to any of the exported methods, and must -be provided to the `Glob` constructor. - -All options are optional, boolean, and false by default, unless -otherwise noted. - -All resolved options are added to the Glob object as properties. - -If you are running many `glob` operations, you can pass a Glob -object as the `options` argument to a subsequent operation to -share the previously loaded cache. - -- `cwd` String path or `file://` string or URL object. The - current working directory in which to search. Defaults to - `process.cwd()`. See also: "Windows, CWDs, Drive Letters, and - UNC Paths", below. - - This option may be either a string path or a `file://` URL - object or string. - -- `root` A string path resolved against the `cwd` option, which - is used as the starting point for absolute patterns that start - with `/`, (but not drive letters or UNC paths on Windows). - - Note that this _doesn't_ necessarily limit the walk to the - `root` directory, and doesn't affect the cwd starting point for - non-absolute patterns. A pattern containing `..` will still be - able to traverse out of the root directory, if it is not an - actual root directory on the filesystem, and any non-absolute - patterns will be matched in the `cwd`. For example, the - pattern `/../*` with `{root:'/some/path'}` will return all - files in `/some`, not all files in `/some/path`. The pattern - `*` with `{root:'/some/path'}` will return all the entries in - the cwd, not the entries in `/some/path`. - - To start absolute and non-absolute patterns in the same - path, you can use `{root:''}`. However, be aware that on - Windows systems, a pattern like `x:/*` or `//host/share/*` will - _always_ start in the `x:/` or `//host/share` directory, - regardless of the `root` setting. - -- `windowsPathsNoEscape` Use `\\` as a path separator _only_, and - _never_ as an escape character. If set, all `\\` characters are - replaced with `/` in the pattern. - - Note that this makes it **impossible** to match against paths - containing literal glob pattern characters, but allows matching - with patterns constructed using `path.join()` and - `path.resolve()` on Windows platforms, mimicking the (buggy!) - behavior of Glob v7 and before on Windows. Please use with - caution, and be mindful of [the caveat below about Windows - paths](#windows). (For legacy reasons, this is also set if - `allowWindowsEscape` is set to the exact value `false`.) - -- `dot` Include `.dot` files in normal matches and `globstar` - matches. Note that an explicit dot in a portion of the pattern - will always match dot files. - -- `magicalBraces` Treat brace expansion like `{a,b}` as a "magic" - pattern. Has no effect if {@link nobrace} is set. - - Only has effect on the {@link hasMagic} function, no effect on - glob pattern matching itself. - -- `dotRelative` Prepend all relative path strings with `./` (or - `.\` on Windows). - - Without this option, returned relative paths are "bare", so - instead of returning `'./foo/bar'`, they are returned as - `'foo/bar'`. - - Relative patterns starting with `'../'` are not prepended with - `./`, even if this option is set. - -- `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. - -- `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. - -- `noglobstar` Do not match `**` against multiple filenames. (Ie, - treat it as a normal `*` instead.) - -- `noext` Do not match "extglob" patterns such as `+(a|b)`. - -- `nocase` Perform a case-insensitive match. This defaults to - `true` on macOS and Windows systems, and `false` on all others. - - **Note** `nocase` should only be explicitly set when it is - known that the filesystem's case sensitivity differs from the - platform default. If set `true` on case-sensitive file - systems, or `false` on case-insensitive file systems, then the - walk may return more or less results than expected. - -- `maxDepth` Specify a number to limit the depth of the directory - traversal to this many levels below the `cwd`. - -- `matchBase` Perform a basename-only match if the pattern does - not contain any slash characters. That is, `*.js` would be - treated as equivalent to `**/*.js`, matching all js files in - all directories. - -- `nodir` Do not match directories, only files. (Note: to match - _only_ directories, put a `/` at the end of the pattern.) - - Note: when `follow` and `nodir` are both set, then symbolic - links to directories are also omitted. - -- `stat` Call `lstat()` on all entries, whether required or not - to determine whether it's a valid match. When used with - `withFileTypes`, this means that matches will include data such - as modified time, permissions, and so on. Note that this will - incur a performance cost due to the added system calls. - -- `ignore` string or string[], or an object with `ignore` and - `ignoreChildren` methods. - - If a string or string[] is provided, then this is treated as a - glob pattern or array of glob patterns to exclude from matches. - To ignore all children within a directory, as well as the entry - itself, append `'/**'` to the ignore pattern. - - **Note** `ignore` patterns are _always_ in `dot:true` mode, - regardless of any other settings. - - If an object is provided that has `ignored(path)` and/or - `childrenIgnored(path)` methods, then these methods will be - called to determine whether any Path is a match or if its - children should be traversed, respectively. - -- `follow` Follow symlinked directories when expanding `**` - patterns. This can result in a lot of duplicate references in - the presence of cyclic links, and make performance quite bad. - - By default, a `**` in a pattern will follow 1 symbolic link if - it is not the first item in the pattern, or none if it is the - first item in the pattern, following the same behavior as Bash. - - Note: when `follow` and `nodir` are both set, then symbolic - links to directories are also omitted. - -- `realpath` Set to true to call `fs.realpath` on all of the - results. In the case of an entry that cannot be resolved, the - entry is omitted. This incurs a slight performance penalty, of - course, because of the added system calls. - -- `absolute` Set to true to always receive absolute paths for - matched files. Set to `false` to always receive relative paths - for matched files. - - By default, when this option is not set, absolute paths are - returned for patterns that are absolute, and otherwise paths - are returned that are relative to the `cwd` setting. - - This does _not_ make an extra system call to get the realpath, - it only does string path resolution. - - `absolute` may not be used along with `withFileTypes`. - -- `posix` Set to true to use `/` as the path separator in - returned results. On posix systems, this has no effect. On - Windows systems, this will return `/` delimited path results, - and absolute paths will be returned in their full resolved UNC - path form, eg insted of `'C:\\foo\\bar'`, it will return - `//?/C:/foo/bar`. - -- `platform` Defaults to value of `process.platform` if - available, or `'linux'` if not. Setting `platform:'win32'` on - non-Windows systems may cause strange behavior. - -- `withFileTypes` Return [PathScurry](http://npm.im/path-scurry) - `Path` objects instead of strings. These are similar to a - NodeJS `Dirent` object, but with additional methods and - properties. - - `withFileTypes` may not be used along with `absolute`. - -- `signal` An AbortSignal which will cancel the Glob walk when - triggered. - -- `fs` An override object to pass in custom filesystem methods. - See [PathScurry docs](http://npm.im/path-scurry) for what can - be overridden. - -- `scurry` A [PathScurry](http://npm.im/path-scurry) object used - to traverse the file system. If the `nocase` option is set - explicitly, then any provided `scurry` object must match this - setting. - -- `includeChildMatches` boolean, default `true`. Do not match any - children of any matches. For example, the pattern `**\/foo` - would match `a/foo`, but not `a/foo/b/foo` in this mode. - - This is especially useful for cases like "find all - `node_modules` folders, but not the ones in `node_modules`". - - In order to support this, the `Ignore` implementation must - support an `add(pattern: string)` method. If using the default - `Ignore` class, then this is fine, but if this is set to - `false`, and a custom `Ignore` is provided that does not have - an `add()` method, then it will throw an error. - - **Caveat** It _only_ ignores matches that would be a descendant - of a previous match, and only if that descendant is matched - _after_ the ancestor is encountered. Since the file system walk - happens in indeterminate order, it's possible that a match will - already be added before its ancestor, if multiple or braced - patterns are used. - - For example: - - ```js - const results = await glob( - [ - // likely to match first, since it's just a stat - 'a/b/c/d/e/f', - - // this pattern is more complicated! It must to various readdir() - // calls and test the results against a regular expression, and that - // is certainly going to take a little bit longer. - // - // So, later on, it encounters a match at 'a/b/c/d/e', but it's too - // late to ignore a/b/c/d/e/f, because it's already been emitted. - 'a/[bdf]/?/[a-z]/*', - ], - { includeChildMatches: false }, - ) - ``` - - It's best to only set this to `false` if you can be reasonably - sure that no components of the pattern will potentially match - one another's file system descendants, or if the occasional - included child entry will not cause problems. - -## Glob Primer - -Much more information about glob pattern expansion can be found -by running `man bash` and searching for `Pattern Matching`. - -"Globs" are the patterns you type when you do stuff like `ls -*.js` on the command line, or put `build/*` in a `.gitignore` -file. - -Before parsing the path part patterns, braced sections are -expanded into a set. Braced sections start with `{` and end with -`}`, with 2 or more comma-delimited sections within. Braced -sections may contain slash characters, so `a{/b/c,bcd}` would -expand into `a/b/c` and `abcd`. - -The following characters have special magic meaning when used in -a path portion. With the exception of `**`, none of these match -path separators (ie, `/` on all platforms, and `\` on Windows). - -- `*` Matches 0 or more characters in a single path portion. - When alone in a path portion, it must match at least 1 - character. If `dot:true` is not specified, then `*` will not - match against a `.` character at the start of a path portion. -- `?` Matches 1 character. If `dot:true` is not specified, then - `?` will not match against a `.` character at the start of a - path portion. -- `[...]` Matches a range of characters, similar to a RegExp - range. If the first character of the range is `!` or `^` then - it matches any character not in the range. If the first - character is `]`, then it will be considered the same as `\]`, - rather than the end of the character class. -- `!(pattern|pattern|pattern)` Matches anything that does not - match any of the patterns provided. May _not_ contain `/` - characters. Similar to `*`, if alone in a path portion, then - the path portion must have at least one character. -- `?(pattern|pattern|pattern)` Matches zero or one occurrence of - the patterns provided. May _not_ contain `/` characters. -- `+(pattern|pattern|pattern)` Matches one or more occurrences of - the patterns provided. May _not_ contain `/` characters. -- `*(a|b|c)` Matches zero or more occurrences of the patterns - provided. May _not_ contain `/` characters. -- `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns - provided. May _not_ contain `/` characters. -- `**` If a "globstar" is alone in a path portion, then it - matches zero or more directories and subdirectories searching - for matches. It does not crawl symlinked directories, unless - `{follow:true}` is passed in the options object. A pattern - like `a/b/**` will only match `a/b` if it is a directory. - Follows 1 symbolic link if not the first item in the pattern, - or 0 if it is the first item, unless `follow:true` is set, in - which case it follows all symbolic links. - -`[:class:]` patterns are supported by this implementation, but -`[=c=]` and `[.symbol.]` style class patterns are not. - -### Dots - -If a file or directory path portion has a `.` as the first -character, then it will not match any glob pattern unless that -pattern's corresponding path part also has a `.` as its first -character. - -For example, the pattern `a/.*/c` would match the file at -`a/.b/c`. However the pattern `a/*/c` would not, because `*` does -not start with a dot character. - -You can make glob treat dots as normal characters by setting -`dot:true` in the options. - -### Basename Matching - -If you set `matchBase:true` in the options, and the pattern has -no slashes in it, then it will seek for any file anywhere in the -tree with a matching basename. For example, `*.js` would match -`test/simple/basic.js`. - -### Empty Sets - -If no matching files are found, then an empty array is returned. -This differs from the shell, where the pattern itself is -returned. For example: - -```sh -$ echo a*s*d*f -a*s*d*f -``` - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a -worthwhile goal, some discrepancies exist between node-glob and -other implementations, and are intentional. - -The double-star character `**` is supported by default, unless -the `noglobstar` flag is set. This is supported in the manner of -bsdglob and bash 5, where `**` only has special significance if -it is the only thing in a path part. That is, `a/**/b` will match -`a/x/y/b`, but `a/**b` will not. - -Note that symlinked directories are not traversed as part of a -`**`, though their contents may match against subsequent portions -of the pattern. This prevents infinite loops and duplicates and -the like. You can force glob to traverse symlinks with `**` by -setting `{follow:true}` in the options. - -There is no equivalent of the `nonull` option. A pattern that -does not find any matches simply resolves to nothing. (An empty -array, immediately ended stream, etc.) - -If brace expansion is not disabled, then it is performed before -any other interpretation of the glob pattern. Thus, a pattern -like `+(a|{b),c)}`, which would not be valid in bash or zsh, is -expanded **first** into the set of `+(a|b)` and `+(a|c)`, and -those patterns are checked for validity. Since those two are -valid, matching proceeds. - -The character class patterns `[:class:]` (posix standard named -classes) style class patterns are supported and unicode-aware, -but `[=c=]` (locale-specific character collation weight), and -`[.symbol.]` (collating symbol), are not. - -### Repeated Slashes - -Unlike Bash and zsh, repeated `/` are always coalesced into a -single path separator. - -### Comments and Negation - -Previously, this module let you mark a pattern as a "comment" if -it started with a `#` character, or a "negated" pattern if it -started with a `!` character. - -These options were deprecated in version 5, and removed in -version 6. - -To specify things that should not match, use the `ignore` option. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only -`/` characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will -always be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto -the root setting using `path.join`. On windows, this will by -default result in `/foo/*` matching `C:\foo\bar.txt`. - -To automatically coerce all `\` characters to `/` in pattern -strings, **thus making it impossible to escape literal glob -characters**, you may set the `windowsPathsNoEscape` option to -`true`. - -### Windows, CWDs, Drive Letters, and UNC Paths - -On posix systems, when a pattern starts with `/`, any `cwd` -option is ignored, and the traversal starts at `/`, plus any -non-magic path portions specified in the pattern. - -On Windows systems, the behavior is similar, but the concept of -an "absolute path" is somewhat more involved. - -#### UNC Paths - -A UNC path may be used as the start of a pattern on Windows -platforms. For example, a pattern like: `//?/x:/*` will return -all file entries in the root of the `x:` drive. A pattern like -`//ComputerName/Share/*` will return all files in the associated -share. - -UNC path roots are always compared case insensitively. - -#### Drive Letters - -A pattern starting with a drive letter, like `c:/*`, will search -in that drive, regardless of any `cwd` option provided. - -If the pattern starts with `/`, and is not a UNC path, and there -is an explicit `cwd` option set with a drive letter, then the -drive letter in the `cwd` is used as the root of the directory -traversal. - -For example, `glob('/tmp', { cwd: 'c:/any/thing' })` will return -`['c:/tmp']` as the result. - -If an explicit `cwd` option is not provided, and the pattern -starts with `/`, then the traversal will run on the root of the -drive provided as the `cwd` option. (That is, it is the result of -`path.resolve('/')`.) - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race -conditions, since it relies on directory walking. - -As a result, it is possible that a file that exists when glob -looks for it may have been deleted or modified by the time it -returns the result. - -By design, this implementation caches all readdir calls that it -makes, in order to cut down on system overhead. However, this -also makes it even more susceptible to races, especially if the -cache object is reused between glob calls. - -Users are thus advised not to use a glob result as a guarantee of -filesystem state in the face of rapid changes. For the vast -majority of operations, this is never a problem. - -### See Also: - -- `man sh` -- `man bash` [Pattern - Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) -- `man 3 fnmatch` -- `man 5 gitignore` -- [minimatch documentation](https://github.com/isaacs/minimatch) - -## Glob Logo - -Glob's logo was created by [Tanya -Brassie](http://tanyabrassie.com/). Logo files can be found -[here](https://github.com/isaacs/node-glob/tree/master/logo). - -The logo is licensed under a [Creative Commons -Attribution-ShareAlike 4.0 International -License](https://creativecommons.org/licenses/by-sa/4.0/). - -## Contributing - -Any change to behavior (including bugfixes) must come with a -test. - -Patches that fail tests or reduce performance will be rejected. - -```sh -# to run tests -npm test - -# to re-generate test fixtures -npm run test-regen - -# run the benchmarks -npm run bench - -# to profile javascript -npm run prof -``` - -## Comparison to Other JavaScript Glob Implementations - -**tl;dr** - -- If you want glob matching that is as faithful as possible to - Bash pattern expansion semantics, and as fast as possible - within that constraint, _use this module_. -- If you are reasonably sure that the patterns you will encounter - are relatively simple, and want the absolutely fastest glob - matcher out there, _use [fast-glob](http://npm.im/fast-glob)_. -- If you are reasonably sure that the patterns you will encounter - are relatively simple, and want the convenience of - automatically respecting `.gitignore` files, _use - [globby](http://npm.im/globby)_. - -There are some other glob matcher libraries on npm, but these -three are (in my opinion, as of 2023) the best. - ---- - -**full explanation** - -Every library reflects a set of opinions and priorities in the -trade-offs it makes. Other than this library, I can personally -recommend both [globby](http://npm.im/globby) and -[fast-glob](http://npm.im/fast-glob), though they differ in their -benefits and drawbacks. - -Both have very nice APIs and are reasonably fast. - -`fast-glob` is, as far as I am aware, the fastest glob -implementation in JavaScript today. However, there are many -cases where the choices that `fast-glob` makes in pursuit of -speed mean that its results differ from the results returned by -Bash and other sh-like shells, which may be surprising. - -In my testing, `fast-glob` is around 10-20% faster than this -module when walking over 200k files nested 4 directories -deep[1](#fn-webscale). However, there are some inconsistencies -with Bash matching behavior that this module does not suffer -from: - -- `**` only matches files, not directories -- `..` path portions are not handled unless they appear at the - start of the pattern -- `./!()` will not match any files that _start_ with - ``, even if they do not match ``. For - example, `!(9).txt` will not match `9999.txt`. -- Some brace patterns in the middle of a pattern will result in - failing to find certain matches. -- Extglob patterns are allowed to contain `/` characters. - -Globby exhibits all of the same pattern semantics as fast-glob, -(as it is a wrapper around fast-glob) and is slightly slower than -node-glob (by about 10-20% in the benchmark test set, or in other -words, anywhere from 20-50% slower than fast-glob). However, it -adds some API conveniences that may be worth the costs. - -- Support for `.gitignore` and other ignore files. -- Support for negated globs (ie, patterns starting with `!` - rather than using a separate `ignore` option). - -The priority of this module is "correctness" in the sense of -performing a glob pattern expansion as faithfully as possible to -the behavior of Bash and other sh-like shells, with as much speed -as possible. - -Note that prior versions of `node-glob` are _not_ on this list. -Former versions of this module are far too slow for any cases -where performance matters at all, and were designed with APIs -that are extremely dated by current JavaScript standards. - ---- - -[1]: In the cases where this module -returns results and `fast-glob` doesn't, it's even faster, of -course. - -![lumpy space princess saying 'oh my GLOB'](https://github.com/isaacs/node-glob/raw/main/oh-my-glob.gif) - -### Benchmark Results - -First number is time, smaller is better. - -Second number is the count of results returned. - -``` ---- pattern: '**' --- -~~ sync ~~ -node fast-glob sync 0m0.598s 200364 -node globby sync 0m0.765s 200364 -node current globSync mjs 0m0.683s 222656 -node current glob syncStream 0m0.649s 222656 -~~ async ~~ -node fast-glob async 0m0.350s 200364 -node globby async 0m0.509s 200364 -node current glob async mjs 0m0.463s 222656 -node current glob stream 0m0.411s 222656 - ---- pattern: '**/..' --- -~~ sync ~~ -node fast-glob sync 0m0.486s 0 -node globby sync 0m0.769s 200364 -node current globSync mjs 0m0.564s 2242 -node current glob syncStream 0m0.583s 2242 -~~ async ~~ -node fast-glob async 0m0.283s 0 -node globby async 0m0.512s 200364 -node current glob async mjs 0m0.299s 2242 -node current glob stream 0m0.312s 2242 - ---- pattern: './**/0/**/0/**/0/**/0/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.490s 10 -node globby sync 0m0.517s 10 -node current globSync mjs 0m0.540s 10 -node current glob syncStream 0m0.550s 10 -~~ async ~~ -node fast-glob async 0m0.290s 10 -node globby async 0m0.296s 10 -node current glob async mjs 0m0.278s 10 -node current glob stream 0m0.302s 10 - ---- pattern: './**/[01]/**/[12]/**/[23]/**/[45]/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.500s 160 -node globby sync 0m0.528s 160 -node current globSync mjs 0m0.556s 160 -node current glob syncStream 0m0.573s 160 -~~ async ~~ -node fast-glob async 0m0.283s 160 -node globby async 0m0.301s 160 -node current glob async mjs 0m0.306s 160 -node current glob stream 0m0.322s 160 - ---- pattern: './**/0/**/0/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.502s 5230 -node globby sync 0m0.527s 5230 -node current globSync mjs 0m0.544s 5230 -node current glob syncStream 0m0.557s 5230 -~~ async ~~ -node fast-glob async 0m0.285s 5230 -node globby async 0m0.305s 5230 -node current glob async mjs 0m0.304s 5230 -node current glob stream 0m0.310s 5230 - ---- pattern: '**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.580s 200023 -node globby sync 0m0.771s 200023 -node current globSync mjs 0m0.685s 200023 -node current glob syncStream 0m0.649s 200023 -~~ async ~~ -node fast-glob async 0m0.349s 200023 -node globby async 0m0.509s 200023 -node current glob async mjs 0m0.427s 200023 -node current glob stream 0m0.388s 200023 - ---- pattern: '{**/*.txt,**/?/**/*.txt,**/?/**/?/**/*.txt,**/?/**/?/**/?/**/*.txt,**/?/**/?/**/?/**/?/**/*.txt}' --- -~~ sync ~~ -node fast-glob sync 0m0.589s 200023 -node globby sync 0m0.771s 200023 -node current globSync mjs 0m0.716s 200023 -node current glob syncStream 0m0.684s 200023 -~~ async ~~ -node fast-glob async 0m0.351s 200023 -node globby async 0m0.518s 200023 -node current glob async mjs 0m0.462s 200023 -node current glob stream 0m0.468s 200023 - ---- pattern: '**/5555/0000/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.496s 1000 -node globby sync 0m0.519s 1000 -node current globSync mjs 0m0.539s 1000 -node current glob syncStream 0m0.567s 1000 -~~ async ~~ -node fast-glob async 0m0.285s 1000 -node globby async 0m0.299s 1000 -node current glob async mjs 0m0.305s 1000 -node current glob stream 0m0.301s 1000 - ---- pattern: './**/0/**/../[01]/**/0/../**/0/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.484s 0 -node globby sync 0m0.507s 0 -node current globSync mjs 0m0.577s 4880 -node current glob syncStream 0m0.586s 4880 -~~ async ~~ -node fast-glob async 0m0.280s 0 -node globby async 0m0.298s 0 -node current glob async mjs 0m0.327s 4880 -node current glob stream 0m0.324s 4880 - ---- pattern: '**/????/????/????/????/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.547s 100000 -node globby sync 0m0.673s 100000 -node current globSync mjs 0m0.626s 100000 -node current glob syncStream 0m0.618s 100000 -~~ async ~~ -node fast-glob async 0m0.315s 100000 -node globby async 0m0.414s 100000 -node current glob async mjs 0m0.366s 100000 -node current glob stream 0m0.345s 100000 - ---- pattern: './{**/?{/**/?{/**/?{/**/?,,,,},,,,},,,,},,,}/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.588s 100000 -node globby sync 0m0.670s 100000 -node current globSync mjs 0m0.717s 200023 -node current glob syncStream 0m0.687s 200023 -~~ async ~~ -node fast-glob async 0m0.343s 100000 -node globby async 0m0.418s 100000 -node current glob async mjs 0m0.519s 200023 -node current glob stream 0m0.451s 200023 - ---- pattern: '**/!(0|9).txt' --- -~~ sync ~~ -node fast-glob sync 0m0.573s 160023 -node globby sync 0m0.731s 160023 -node current globSync mjs 0m0.680s 180023 -node current glob syncStream 0m0.659s 180023 -~~ async ~~ -node fast-glob async 0m0.345s 160023 -node globby async 0m0.476s 160023 -node current glob async mjs 0m0.427s 180023 -node current glob stream 0m0.388s 180023 - ---- pattern: './{*/**/../{*/**/../{*/**/../{*/**/../{*/**,,,,},,,,},,,,},,,,},,,,}/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.483s 0 -node globby sync 0m0.512s 0 -node current globSync mjs 0m0.811s 200023 -node current glob syncStream 0m0.773s 200023 -~~ async ~~ -node fast-glob async 0m0.280s 0 -node globby async 0m0.299s 0 -node current glob async mjs 0m0.617s 200023 -node current glob stream 0m0.568s 200023 - ---- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.485s 0 -node globby sync 0m0.507s 0 -node current globSync mjs 0m0.759s 200023 -node current glob syncStream 0m0.740s 200023 -~~ async ~~ -node fast-glob async 0m0.281s 0 -node globby async 0m0.297s 0 -node current glob async mjs 0m0.544s 200023 -node current glob stream 0m0.464s 200023 - ---- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.486s 0 -node globby sync 0m0.513s 0 -node current globSync mjs 0m0.734s 200023 -node current glob syncStream 0m0.696s 200023 -~~ async ~~ -node fast-glob async 0m0.286s 0 -node globby async 0m0.296s 0 -node current glob async mjs 0m0.506s 200023 -node current glob stream 0m0.483s 200023 - ---- pattern: './0/**/../1/**/../2/**/../3/**/../4/**/../5/**/../6/**/../7/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.060s 0 -node globby sync 0m0.074s 0 -node current globSync mjs 0m0.067s 0 -node current glob syncStream 0m0.066s 0 -~~ async ~~ -node fast-glob async 0m0.060s 0 -node globby async 0m0.075s 0 -node current glob async mjs 0m0.066s 0 -node current glob stream 0m0.067s 0 - ---- pattern: './**/?/**/?/**/?/**/?/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.568s 100000 -node globby sync 0m0.651s 100000 -node current globSync mjs 0m0.619s 100000 -node current glob syncStream 0m0.617s 100000 -~~ async ~~ -node fast-glob async 0m0.332s 100000 -node globby async 0m0.409s 100000 -node current glob async mjs 0m0.372s 100000 -node current glob stream 0m0.351s 100000 - ---- pattern: '**/*/**/*/**/*/**/*/**' --- -~~ sync ~~ -node fast-glob sync 0m0.603s 200113 -node globby sync 0m0.798s 200113 -node current globSync mjs 0m0.730s 222137 -node current glob syncStream 0m0.693s 222137 -~~ async ~~ -node fast-glob async 0m0.356s 200113 -node globby async 0m0.525s 200113 -node current glob async mjs 0m0.508s 222137 -node current glob stream 0m0.455s 222137 - ---- pattern: './**/*/**/*/**/*/**/*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.622s 200000 -node globby sync 0m0.792s 200000 -node current globSync mjs 0m0.722s 200000 -node current glob syncStream 0m0.695s 200000 -~~ async ~~ -node fast-glob async 0m0.369s 200000 -node globby async 0m0.527s 200000 -node current glob async mjs 0m0.502s 200000 -node current glob stream 0m0.481s 200000 - ---- pattern: '**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.588s 200023 -node globby sync 0m0.771s 200023 -node current globSync mjs 0m0.684s 200023 -node current glob syncStream 0m0.658s 200023 -~~ async ~~ -node fast-glob async 0m0.352s 200023 -node globby async 0m0.516s 200023 -node current glob async mjs 0m0.432s 200023 -node current glob stream 0m0.384s 200023 - ---- pattern: './**/**/**/**/**/**/**/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.589s 200023 -node globby sync 0m0.766s 200023 -node current globSync mjs 0m0.682s 200023 -node current glob syncStream 0m0.652s 200023 -~~ async ~~ -node fast-glob async 0m0.352s 200023 -node globby async 0m0.523s 200023 -node current glob async mjs 0m0.436s 200023 -node current glob stream 0m0.380s 200023 - ---- pattern: '**/*/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.592s 200023 -node globby sync 0m0.776s 200023 -node current globSync mjs 0m0.691s 200023 -node current glob syncStream 0m0.659s 200023 -~~ async ~~ -node fast-glob async 0m0.357s 200023 -node globby async 0m0.513s 200023 -node current glob async mjs 0m0.471s 200023 -node current glob stream 0m0.424s 200023 - ---- pattern: '**/*/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.585s 200023 -node globby sync 0m0.766s 200023 -node current globSync mjs 0m0.694s 200023 -node current glob syncStream 0m0.664s 200023 -~~ async ~~ -node fast-glob async 0m0.350s 200023 -node globby async 0m0.514s 200023 -node current glob async mjs 0m0.472s 200023 -node current glob stream 0m0.424s 200023 - ---- pattern: '**/[0-9]/**/*.txt' --- -~~ sync ~~ -node fast-glob sync 0m0.544s 100000 -node globby sync 0m0.636s 100000 -node current globSync mjs 0m0.626s 100000 -node current glob syncStream 0m0.621s 100000 -~~ async ~~ -node fast-glob async 0m0.322s 100000 -node globby async 0m0.404s 100000 -node current glob async mjs 0m0.360s 100000 -node current glob stream 0m0.352s 100000 -``` diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json deleted file mode 100644 index 6d4893b5f3..0000000000 --- a/node_modules/glob/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (https://blog.izs.me/)", - "publishConfig": { - "tag": "legacy-v10" - }, - "name": "glob", - "description": "the most correct and second fastest glob implementation in JavaScript", - "version": "10.4.5", - "type": "module", - "tshy": { - "main": true, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "bin": "./dist/esm/bin.mjs", - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts", - "prepublish": "npm run benchclean", - "profclean": "rm -f v8.log profile.txt", - "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts", - "prebench": "npm run prepare", - "bench": "bash benchmark.sh", - "preprof": "npm run prepare", - "prof": "bash prof.sh", - "benchclean": "node benchclean.cjs" - }, - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "devDependencies": { - "@types/node": "^20.11.30", - "memfs": "^3.4.13", - "mkdirp": "^3.0.1", - "prettier": "^3.2.5", - "rimraf": "^5.0.7", - "sync-content": "^1.0.2", - "tap": "^19.0.0", - "tshy": "^1.14.0", - "typedoc": "^0.25.12" - }, - "tap": { - "before": "test/00-setup.ts" - }, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "module": "./dist/esm/index.js" -} diff --git a/node_modules/ignore/LICENSE-MIT b/node_modules/ignore/LICENSE-MIT deleted file mode 100644 index 825533e337..0000000000 --- a/node_modules/ignore/LICENSE-MIT +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2013 Kael Zhang , contributors -http://kael.me/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/ignore/README.md b/node_modules/ignore/README.md deleted file mode 100644 index 4e99471113..0000000000 --- a/node_modules/ignore/README.md +++ /dev/null @@ -1,452 +0,0 @@ -| Linux / MacOS / Windows | Coverage | Downloads | -| ----------------------- | -------- | --------- | -| [![build][bb]][bl] | [![coverage][cb]][cl] | [![downloads][db]][dl] | - -[bb]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml/badge.svg -[bl]: https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml - -[cb]: https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg -[cl]: https://codecov.io/gh/kaelzhang/node-ignore - -[db]: http://img.shields.io/npm/dm/ignore.svg -[dl]: https://www.npmjs.org/package/ignore - -# ignore - -`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the [.gitignore spec 2.22.1](http://git-scm.com/docs/gitignore). - -`ignore` is used by eslint, gitbook and [many others](https://www.npmjs.com/browse/depended/ignore). - -Pay **ATTENTION** that [`minimatch`](https://www.npmjs.org/package/minimatch) (which used by `fstream-ignore`) does not follow the gitignore spec. - -To filter filenames according to a .gitignore file, I recommend this npm package, `ignore`. - -To parse an `.npmignore` file, you should use `minimatch`, because an `.npmignore` file is parsed by npm using `minimatch` and it does not work in the .gitignore way. - -### Tested on - -`ignore` is fully tested, and has more than **five hundreds** of unit tests. - -- Linux + Node: `0.8` - `7.x` -- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor. - -Actually, `ignore` does not rely on any versions of node specially. - -Since `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md). - -## Table Of Main Contents - -- [Usage](#usage) -- [`Pathname` Conventions](#pathname-conventions) -- See Also: - - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules. -- [Upgrade Guide](#upgrade-guide) - -## Install - -```sh -npm i ignore -``` - -## Usage - -```js -import ignore from 'ignore' -const ig = ignore().add(['.abc/*', '!.abc/d/']) -``` - -### Filter the given paths - -```js -const paths = [ - '.abc/a.js', // filtered out - '.abc/d/e.js' // included -] - -ig.filter(paths) // ['.abc/d/e.js'] -ig.ignores('.abc/a.js') // true -``` - -### As the filter function - -```js -paths.filter(ig.createFilter()); // ['.abc/d/e.js'] -``` - -### Win32 paths will be handled - -```js -ig.filter(['.abc\\a.js', '.abc\\d\\e.js']) -// if the code above runs on windows, the result will be -// ['.abc\\d\\e.js'] -``` - -## Why another ignore? - -- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family. - -- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so - - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations. - - `ignore` don't cares about sub-modules of git projects. - -- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as: - - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'. - - '`**/foo`' should match '`foo`' anywhere. - - Prevent re-including a file if a parent directory of that file is excluded. - - Handle trailing whitespaces: - - `'a '`(one space) should not match `'a '`(two spaces). - - `'a \ '` matches `'a '` - - All test cases are verified with the result of `git check-ignore`. - -# Methods - -## .add(pattern: string | Ignore): this -## .add(patterns: Array): this -## .add({pattern: string, mark?: string}): this since 7.0.0 - -- **pattern** `string | Ignore` An ignore pattern string, or the `Ignore` instance -- **patterns** `Array` Array of ignore patterns. -- **mark?** `string` Pattern mark, which is used to associate the pattern with a certain marker, such as the line no of the `.gitignore` file. Actually it could be an arbitrary string and is optional. - -Adds a rule or several rules to the current manager. - -Returns `this` - -Notice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename. - -```js -ignore().add('#abc').ignores('#abc') // false -ignore().add('\\#abc').ignores('#abc') // true -``` - -`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file: - -```js -ignore() -.add(fs.readFileSync(filenameOfGitignore).toString()) -.filter(filenames) -``` - -`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance. - -## .ignores(pathname: [Pathname](#pathname-conventions)): boolean - -> new in 3.2.0 - -Returns `Boolean` whether `pathname` should be ignored. - -```js -ig.ignores('.abc/a.js') // true -``` - -Please **PAY ATTENTION** that `.ignores()` is **NOT** equivalent to `git check-ignore` although in most cases they return equivalent results. - -However, for the purposes of imitating the behavior of `git check-ignore`, please use `.checkIgnore()` instead. - -### `Pathname` Conventions: - -#### 1. `Pathname` should be a `path.relative()`d pathname - -`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory, - -```js -// WRONG, an error will be thrown -ig.ignores('./abc') - -// WRONG, for it will never happen, and an error will be thrown -// If the gitignore rule locates at the root directory, -// `'/abc'` should be changed to `'abc'`. -// ``` -// path.relative('/', '/abc') -> 'abc' -// ``` -ig.ignores('/abc') - -// WRONG, that it is an absolute path on Windows, an error will be thrown -ig.ignores('C:\\abc') - -// Right -ig.ignores('abc') - -// Right -ig.ignores(path.join('./abc')) // path.join('./abc') -> 'abc' -``` - -In other words, each `Pathname` here should be a relative path to the directory of the gitignore rules. - -Suppose the dir structure is: - -``` -/path/to/your/repo - |-- a - | |-- a.js - | - |-- .b - | - |-- .c - |-- .DS_store -``` - -Then the `paths` might be like this: - -```js -[ - 'a/a.js' - '.b', - '.c/.DS_store' -] -``` - -#### 2. filenames and dirnames - -`node-ignore` does NO `fs.stat` during path matching, so `node-ignore` treats -- `foo` as a file -- **`foo/` as a directory** - -For the example below: - -```js -// First, we add a ignore pattern to ignore a directory -ig.add('config/') - -// `ig` does NOT know if 'config', in the real world, -// is a normal file, directory or something. - -ig.ignores('config') -// `ig` treats `config` as a file, so it returns `false` - -ig.ignores('config/') -// returns `true` -``` - -Specially for people who develop some library based on `node-ignore`, it is important to understand that. - -Usually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory: - -```js -import glob from 'glob' - -glob('**', { - // Adds a / character to directory matches. - mark: true -}, (err, files) => { - if (err) { - return console.error(err) - } - - let filtered = ignore().add(patterns).filter(files) - console.log(filtered) -}) -``` - - -## .filter(paths: Array<Pathname>): Array<Pathname> - -```ts -type Pathname = string -``` - -Filters the given array of pathnames, and returns the filtered array. - -- **paths** `Array.` The array of `pathname`s to be filtered. - -## .createFilter() - -Creates a filter function which could filter an array of paths with `Array.prototype.filter`. - -Returns `function(path)` the filter function. - -## .test(pathname: Pathname): TestResult - -> New in 5.0.0 - -Returns `TestResult` - -```ts -// Since 5.0.0 -interface TestResult { - ignored: boolean - // true if the `pathname` is finally unignored by some negative pattern - unignored: boolean - // The `IgnoreRule` which ignores the pathname - rule?: IgnoreRule -} - -// Since 7.0.0 -interface IgnoreRule { - // The original pattern - pattern: string - // Whether the pattern is a negative pattern - negative: boolean - // Which is used for other packages to build things upon `node-ignore` - mark?: string -} -``` - -- `{ignored: true, unignored: false}`: the `pathname` is ignored -- `{ignored: false, unignored: true}`: the `pathname` is unignored -- `{ignored: false, unignored: false}`: the `pathname` is never matched by any ignore rules. - -## .checkIgnore(target: string): TestResult - -> new in 7.0.0 - -Debugs gitignore / exclude files, which is equivalent to `git check-ignore -v`. Usually this method is used for other packages to implement the function of `git check-ignore -v` upon `node-ignore` - -- **target** `string` the target to test. - -Returns `TestResult` - -```js -ig.add({ - pattern: 'foo/*', - mark: '60' -}) - -const { - ignored, - rule -} = checkIgnore('foo/') - -if (ignored) { - console.log(`.gitignore:${result}:${rule.mark}:${rule.pattern} foo/`) -} - -// .gitignore:60:foo/* foo/ -``` - -Please pay attention that this method does not have a strong built-in cache mechanism. - -The purpose of introducing this method is to make it possible to implement the `git check-ignore` command in JavaScript based on `node-ignore`. - -So do not use this method in those situations where performance is extremely important. - -## static `isPathValid(pathname): boolean` since 5.0.0 - -Check whether the `pathname` is an valid `path.relative()`d path according to the [convention](#1-pathname-should-be-a-pathrelatived-pathname). - -This method is **NOT** used to check if an ignore pattern is valid. - -```js -import {isPathValid} from 'ignore' - -isPathValid('./foo') // false -``` - -## .addIgnoreFile(path) - -REMOVED in `3.x` for now. - -To upgrade `ignore@2.x` up to `3.x`, use - -```js -import fs from 'fs' - -if (fs.existsSync(filename)) { - ignore().add(fs.readFileSync(filename).toString()) -} -``` - -instead. - -## ignore(options) - -### `options.ignorecase` since 4.0.0 - -Similar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (the default value), otherwise case sensitive. - -```js -const ig = ignore({ - ignorecase: false -}) - -ig.add('*.png') - -ig.ignores('*.PNG') // false -``` - -### `options.ignoreCase?: boolean` since 5.2.0 - -Which is alternative to `options.ignoreCase` - -### `options.allowRelativePaths?: boolean` since 5.2.0 - -This option brings backward compatibility with projects which based on `ignore@4.x`. If `options.allowRelativePaths` is `true`, `ignore` will not check whether the given path to be tested is [`path.relative()`d](#pathname-conventions). - -However, passing a relative path, such as `'./foo'` or `'../foo'`, to test if it is ignored or not is not a good practise, which might lead to unexpected behavior - -```js -ignore({ - allowRelativePaths: true -}).ignores('../foo/bar.js') // And it will not throw -``` - -**** - -# Upgrade Guide - -## Upgrade 4.x -> 5.x - -Since `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, unless `options.allowRelative = true` is passed to the `Ignore` factory. - -While `ignore < 5.0.0` did not make sure what the return value was, as well as - -```ts -.ignores(pathname: Pathname): boolean - -.filter(pathnames: Array): Array - -.createFilter(): (pathname: Pathname) => boolean - -.test(pathname: Pathname): {ignored: boolean, unignored: boolean} -``` - -See the convention [here](#1-pathname-should-be-a-pathrelatived-pathname) for details. - -If there are invalid pathnames, the conversion and filtration should be done by users. - -```js -import {isPathValid} from 'ignore' // introduced in 5.0.0 - -const paths = [ - // invalid - ////////////////// - '', - false, - '../foo', - '.', - ////////////////// - - // valid - 'foo' -] -.filter(isPathValid) - -ig.filter(paths) -``` - -## Upgrade 3.x -> 4.x - -Since `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6: - -```js -var ignore = require('ignore/legacy') -``` - -## Upgrade 2.x -> 3.x - -- All `options` of 2.x are unnecessary and removed, so just remove them. -- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed. -- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details. - -**** - -# Collaborators - -- [@whitecolor](https://github.com/whitecolor) *Alex* -- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé* -- [@azproduction](https://github.com/azproduction) *Mikhail Davydov* -- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin* -- [@JanMattner](https://github.com/JanMattner) *Jan Mattner* -- [@ntwb](https://github.com/ntwb) *Stephen Edgar* -- [@kasperisager](https://github.com/kasperisager) *Kasper Isager* -- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders* diff --git a/node_modules/ignore/index.d.ts b/node_modules/ignore/index.d.ts deleted file mode 100644 index f6912595a3..0000000000 --- a/node_modules/ignore/index.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -type Pathname = string - -interface IgnoreRule { - pattern: string - mark?: string - negative: boolean -} - -interface TestResult { - ignored: boolean - unignored: boolean - rule?: IgnoreRule -} - -interface PatternParams { - pattern: string - mark?: string -} - -/** - * Creates new ignore manager. - */ -declare function ignore(options?: ignore.Options): ignore.Ignore -declare namespace ignore { - interface Ignore { - /** - * Adds one or several rules to the current manager. - * @param {string[]} patterns - * @returns IgnoreBase - */ - add( - patterns: string | Ignore | readonly (string | Ignore)[] | PatternParams - ): this - - /** - * Filters the given array of pathnames, and returns the filtered array. - * NOTICE that each path here should be a relative path to the root of your repository. - * @param paths the array of paths to be filtered. - * @returns The filtered array of paths - */ - filter(pathnames: readonly Pathname[]): Pathname[] - - /** - * Creates a filter function which could filter - * an array of paths with Array.prototype.filter. - */ - createFilter(): (pathname: Pathname) => boolean - - /** - * Returns Boolean whether pathname should be ignored. - * @param {string} pathname a path to check - * @returns boolean - */ - ignores(pathname: Pathname): boolean - - /** - * Returns whether pathname should be ignored or unignored - * @param {string} pathname a path to check - * @returns TestResult - */ - test(pathname: Pathname): TestResult - - /** - * Debugs ignore rules and returns the checking result, which is - * equivalent to `git check-ignore -v`. - * @returns TestResult - */ - checkIgnore(pathname: Pathname): TestResult - } - - interface Options { - ignorecase?: boolean - // For compatibility - ignoreCase?: boolean - allowRelativePaths?: boolean - } - - function isPathValid(pathname: string): boolean -} - -export = ignore diff --git a/node_modules/ignore/index.js b/node_modules/ignore/index.js deleted file mode 100644 index 99aacbde04..0000000000 --- a/node_modules/ignore/index.js +++ /dev/null @@ -1,779 +0,0 @@ -// A simple implementation of make-array -function makeArray (subject) { - return Array.isArray(subject) - ? subject - : [subject] -} - -const UNDEFINED = undefined -const EMPTY = '' -const SPACE = ' ' -const ESCAPE = '\\' -const REGEX_TEST_BLANK_LINE = /^\s+$/ -const REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/ -const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ -const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ -const REGEX_SPLITALL_CRLF = /\r?\n/g - -// Invalid: -// - /foo, -// - ./foo, -// - ../foo, -// - . -// - .. -// Valid: -// - .foo -const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ - -const REGEX_TEST_TRAILING_SLASH = /\/$/ - -const SLASH = '/' - -// Do not use ternary expression here, since "istanbul ignore next" is buggy -let TMP_KEY_IGNORE = 'node-ignore' -/* istanbul ignore else */ -if (typeof Symbol !== 'undefined') { - TMP_KEY_IGNORE = Symbol.for('node-ignore') -} -const KEY_IGNORE = TMP_KEY_IGNORE - -const define = (object, key, value) => { - Object.defineProperty(object, key, {value}) - return value -} - -const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g - -const RETURN_FALSE = () => false - -// Sanitize the range of a regular expression -// The cases are complicated, see test cases for details -const sanitizeRange = range => range.replace( - REGEX_REGEXP_RANGE, - (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) - ? match - // Invalid range (out of order) which is ok for gitignore rules but - // fatal for JavaScript regular expression, so eliminate it. - : EMPTY -) - -// See fixtures #59 -const cleanRangeBackSlash = slashes => { - const {length} = slashes - return slashes.slice(0, length - length % 2) -} - -// > If the pattern ends with a slash, -// > it is removed for the purpose of the following description, -// > but it would only find a match with a directory. -// > In other words, foo/ will match a directory foo and paths underneath it, -// > but will not match a regular file or a symbolic link foo -// > (this is consistent with the way how pathspec works in general in Git). -// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' -// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call -// you could use option `mark: true` with `glob` - -// '`foo/`' should not continue with the '`..`' -const REPLACERS = [ - - [ - // Remove BOM - // TODO: - // Other similar zero-width characters? - /^\uFEFF/, - () => EMPTY - ], - - // > Trailing spaces are ignored unless they are quoted with backslash ("\") - [ - // (a\ ) -> (a ) - // (a ) -> (a) - // (a ) -> (a) - // (a \ ) -> (a ) - /((?:\\\\)*?)(\\?\s+)$/, - (_, m1, m2) => m1 + ( - m2.indexOf('\\') === 0 - ? SPACE - : EMPTY - ) - ], - - // Replace (\ ) with ' ' - // (\ ) -> ' ' - // (\\ ) -> '\\ ' - // (\\\ ) -> '\\ ' - [ - /(\\+?)\s/g, - (_, m1) => { - const {length} = m1 - return m1.slice(0, length - length % 2) + SPACE - } - ], - - // Escape metacharacters - // which is written down by users but means special for regular expressions. - - // > There are 12 characters with special meanings: - // > - the backslash \, - // > - the caret ^, - // > - the dollar sign $, - // > - the period or dot ., - // > - the vertical bar or pipe symbol |, - // > - the question mark ?, - // > - the asterisk or star *, - // > - the plus sign +, - // > - the opening parenthesis (, - // > - the closing parenthesis ), - // > - and the opening square bracket [, - // > - the opening curly brace {, - // > These special characters are often called "metacharacters". - [ - /[\\$.|*+(){^]/g, - match => `\\${match}` - ], - - [ - // > a question mark (?) matches a single character - /(?!\\)\?/g, - () => '[^/]' - ], - - // leading slash - [ - - // > A leading slash matches the beginning of the pathname. - // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". - // A leading slash matches the beginning of the pathname - /^\//, - () => '^' - ], - - // replace special metacharacter slash after the leading slash - [ - /\//g, - () => '\\/' - ], - - [ - // > A leading "**" followed by a slash means match in all directories. - // > For example, "**/foo" matches file or directory "foo" anywhere, - // > the same as pattern "foo". - // > "**/foo/bar" matches file or directory "bar" anywhere that is directly - // > under directory "foo". - // Notice that the '*'s have been replaced as '\\*' - /^\^*\\\*\\\*\\\//, - - // '**/foo' <-> 'foo' - () => '^(?:.*\\/)?' - ], - - // starting - [ - // there will be no leading '/' - // (which has been replaced by section "leading slash") - // If starts with '**', adding a '^' to the regular expression also works - /^(?=[^^])/, - function startingReplacer () { - // If has a slash `/` at the beginning or middle - return !/\/(?!$)/.test(this) - // > Prior to 2.22.1 - // > If the pattern does not contain a slash /, - // > Git treats it as a shell glob pattern - // Actually, if there is only a trailing slash, - // git also treats it as a shell glob pattern - - // After 2.22.1 (compatible but clearer) - // > If there is a separator at the beginning or middle (or both) - // > of the pattern, then the pattern is relative to the directory - // > level of the particular .gitignore file itself. - // > Otherwise the pattern may also match at any level below - // > the .gitignore level. - ? '(?:^|\\/)' - - // > Otherwise, Git treats the pattern as a shell glob suitable for - // > consumption by fnmatch(3) - : '^' - } - ], - - // two globstars - [ - // Use lookahead assertions so that we could match more than one `'/**'` - /\\\/\\\*\\\*(?=\\\/|$)/g, - - // Zero, one or several directories - // should not use '*', or it will be replaced by the next replacer - - // Check if it is not the last `'/**'` - (_, index, str) => index + 6 < str.length - - // case: /**/ - // > A slash followed by two consecutive asterisks then a slash matches - // > zero or more directories. - // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. - // '/**/' - ? '(?:\\/[^\\/]+)*' - - // case: /** - // > A trailing `"/**"` matches everything inside. - - // #21: everything inside but it should not include the current folder - : '\\/.+' - ], - - // normal intermediate wildcards - [ - // Never replace escaped '*' - // ignore rule '\*' will match the path '*' - - // 'abc.*/' -> go - // 'abc.*' -> skip this rule, - // coz trailing single wildcard will be handed by [trailing wildcard] - /(^|[^\\]+)(\\\*)+(?=.+)/g, - - // '*.js' matches '.js' - // '*.js' doesn't match 'abc' - (_, p1, p2) => { - // 1. - // > An asterisk "*" matches anything except a slash. - // 2. - // > Other consecutive asterisks are considered regular asterisks - // > and will match according to the previous rules. - const unescaped = p2.replace(/\\\*/g, '[^\\/]*') - return p1 + unescaped - } - ], - - [ - // unescape, revert step 3 except for back slash - // For example, if a user escape a '\\*', - // after step 3, the result will be '\\\\\\*' - /\\\\\\(?=[$.|*+(){^])/g, - () => ESCAPE - ], - - [ - // '\\\\' -> '\\' - /\\\\/g, - () => ESCAPE - ], - - [ - // > The range notation, e.g. [a-zA-Z], - // > can be used to match one of the characters in a range. - - // `\` is escaped by step 3 - /(\\)?\[([^\]/]*?)(\\*)($|\])/g, - (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE - // '\\[bar]' -> '\\\\[bar\\]' - ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` - : close === ']' - ? endEscape.length % 2 === 0 - // A normal case, and it is a range notation - // '[bar]' - // '[bar\\\\]' - ? `[${sanitizeRange(range)}${endEscape}]` - // Invalid range notaton - // '[bar\\]' -> '[bar\\\\]' - : '[]' - : '[]' - ], - - // ending - [ - // 'js' will not match 'js.' - // 'ab' will not match 'abc' - /(?:[^*])$/, - - // WTF! - // https://git-scm.com/docs/gitignore - // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) - // which re-fixes #24, #38 - - // > If there is a separator at the end of the pattern then the pattern - // > will only match directories, otherwise the pattern can match both - // > files and directories. - - // 'js*' will not match 'a.js' - // 'js/' will not match 'a.js' - // 'js' will match 'a.js' and 'a.js/' - match => /\/$/.test(match) - // foo/ will not match 'foo' - ? `${match}$` - // foo matches 'foo' and 'foo/' - : `${match}(?=$|\\/$)` - ] -] - -const REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/ -const MODE_IGNORE = 'regex' -const MODE_CHECK_IGNORE = 'checkRegex' -const UNDERSCORE = '_' - -const TRAILING_WILD_CARD_REPLACERS = { - [MODE_IGNORE] (_, p1) { - const prefix = p1 - // '\^': - // '/*' does not match EMPTY - // '/*' does not match everything - - // '\\\/': - // 'abc/*' does not match 'abc/' - ? `${p1}[^/]+` - - // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*' - - return `${prefix}(?=$|\\/$)` - }, - - [MODE_CHECK_IGNORE] (_, p1) { - // When doing `git check-ignore` - const prefix = p1 - // '\\\/': - // 'abc/*' DOES match 'abc/' ! - ? `${p1}[^/]*` - - // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*' - - return `${prefix}(?=$|\\/$)` - } -} - -// @param {pattern} -const makeRegexPrefix = pattern => REPLACERS.reduce( - (prev, [matcher, replacer]) => - prev.replace(matcher, replacer.bind(pattern)), - pattern -) - -const isString = subject => typeof subject === 'string' - -// > A blank line matches no files, so it can serve as a separator for readability. -const checkPattern = pattern => pattern - && isString(pattern) - && !REGEX_TEST_BLANK_LINE.test(pattern) - && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) - - // > A line starting with # serves as a comment. - && pattern.indexOf('#') !== 0 - -const splitPattern = pattern => pattern -.split(REGEX_SPLITALL_CRLF) -.filter(Boolean) - -class IgnoreRule { - constructor ( - pattern, - mark, - body, - ignoreCase, - negative, - prefix - ) { - this.pattern = pattern - this.mark = mark - this.negative = negative - - define(this, 'body', body) - define(this, 'ignoreCase', ignoreCase) - define(this, 'regexPrefix', prefix) - } - - get regex () { - const key = UNDERSCORE + MODE_IGNORE - - if (this[key]) { - return this[key] - } - - return this._make(MODE_IGNORE, key) - } - - get checkRegex () { - const key = UNDERSCORE + MODE_CHECK_IGNORE - - if (this[key]) { - return this[key] - } - - return this._make(MODE_CHECK_IGNORE, key) - } - - _make (mode, key) { - const str = this.regexPrefix.replace( - REGEX_REPLACE_TRAILING_WILDCARD, - - // It does not need to bind pattern - TRAILING_WILD_CARD_REPLACERS[mode] - ) - - const regex = this.ignoreCase - ? new RegExp(str, 'i') - : new RegExp(str) - - return define(this, key, regex) - } -} - -const createRule = ({ - pattern, - mark -}, ignoreCase) => { - let negative = false - let body = pattern - - // > An optional prefix "!" which negates the pattern; - if (body.indexOf('!') === 0) { - negative = true - body = body.substr(1) - } - - body = body - // > Put a backslash ("\") in front of the first "!" for patterns that - // > begin with a literal "!", for example, `"\!important!.txt"`. - .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') - // > Put a backslash ("\") in front of the first hash for patterns that - // > begin with a hash. - .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#') - - const regexPrefix = makeRegexPrefix(body) - - return new IgnoreRule( - pattern, - mark, - body, - ignoreCase, - negative, - regexPrefix - ) -} - -class RuleManager { - constructor (ignoreCase) { - this._ignoreCase = ignoreCase - this._rules = [] - } - - _add (pattern) { - // #32 - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules._rules) - this._added = true - return - } - - if (isString(pattern)) { - pattern = { - pattern - } - } - - if (checkPattern(pattern.pattern)) { - const rule = createRule(pattern, this._ignoreCase) - this._added = true - this._rules.push(rule) - } - } - - // @param {Array | string | Ignore} pattern - add (pattern) { - this._added = false - - makeArray( - isString(pattern) - ? splitPattern(pattern) - : pattern - ).forEach(this._add, this) - - return this._added - } - - // Test one single path without recursively checking parent directories - // - // - checkUnignored `boolean` whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. - // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` - - // @returns {TestResult} true if a file is ignored - test (path, checkUnignored, mode) { - let ignored = false - let unignored = false - let matchedRule - - this._rules.forEach(rule => { - const {negative} = rule - - // | ignored : unignored - // -------- | --------------------------------------- - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X - - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - if ( - unignored === negative && ignored !== unignored - || negative && !ignored && !unignored && !checkUnignored - ) { - return - } - - const matched = rule[mode].test(path) - - if (!matched) { - return - } - - ignored = !negative - unignored = negative - - matchedRule = negative - ? UNDEFINED - : rule - }) - - const ret = { - ignored, - unignored - } - - if (matchedRule) { - ret.rule = matchedRule - } - - return ret - } -} - -const throwError = (message, Ctor) => { - throw new Ctor(message) -} - -const checkPath = (path, originalPath, doThrow) => { - if (!isString(path)) { - return doThrow( - `path must be a string, but got \`${originalPath}\``, - TypeError - ) - } - - // We don't know if we should ignore EMPTY, so throw - if (!path) { - return doThrow(`path must not be empty`, TypeError) - } - - // Check if it is a relative path - if (checkPath.isNotRelative(path)) { - const r = '`path.relative()`d' - return doThrow( - `path should be a ${r} string, but got "${originalPath}"`, - RangeError - ) - } - - return true -} - -const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path) - -checkPath.isNotRelative = isNotRelative - -// On windows, the following function will be replaced -/* istanbul ignore next */ -checkPath.convert = p => p - - -class Ignore { - constructor ({ - ignorecase = true, - ignoreCase = ignorecase, - allowRelativePaths = false - } = {}) { - define(this, KEY_IGNORE, true) - - this._rules = new RuleManager(ignoreCase) - this._strictPathCheck = !allowRelativePaths - this._initCache() - } - - _initCache () { - // A cache for the result of `.ignores()` - this._ignoreCache = Object.create(null) - - // A cache for the result of `.test()` - this._testCache = Object.create(null) - } - - add (pattern) { - if (this._rules.add(pattern)) { - // Some rules have just added to the ignore, - // making the behavior changed, - // so we need to re-initialize the result cache - this._initCache() - } - - return this - } - - // legacy - addPattern (pattern) { - return this.add(pattern) - } - - // @returns {TestResult} - _test (originalPath, cache, checkUnignored, slices) { - const path = originalPath - // Supports nullable path - && checkPath.convert(originalPath) - - checkPath( - path, - originalPath, - this._strictPathCheck - ? throwError - : RETURN_FALSE - ) - - return this._t(path, cache, checkUnignored, slices) - } - - checkIgnore (path) { - // If the path doest not end with a slash, `.ignores()` is much equivalent - // to `git check-ignore` - if (!REGEX_TEST_TRAILING_SLASH.test(path)) { - return this.test(path) - } - - const slices = path.split(SLASH).filter(Boolean) - slices.pop() - - if (slices.length) { - const parent = this._t( - slices.join(SLASH) + SLASH, - this._testCache, - true, - slices - ) - - if (parent.ignored) { - return parent - } - } - - return this._rules.test(path, false, MODE_CHECK_IGNORE) - } - - _t ( - // The path to be tested - path, - - // The cache for the result of a certain checking - cache, - - // Whether should check if the path is unignored - checkUnignored, - - // The path slices - slices - ) { - if (path in cache) { - return cache[path] - } - - if (!slices) { - // path/to/a.js - // ['path', 'to', 'a.js'] - slices = path.split(SLASH).filter(Boolean) - } - - slices.pop() - - // If the path has no parent directory, just test it - if (!slices.length) { - return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE) - } - - const parent = this._t( - slices.join(SLASH) + SLASH, - cache, - checkUnignored, - slices - ) - - // If the path contains a parent directory, check the parent first - return cache[path] = parent.ignored - // > It is not possible to re-include a file if a parent directory of - // > that file is excluded. - ? parent - : this._rules.test(path, checkUnignored, MODE_IGNORE) - } - - ignores (path) { - return this._test(path, this._ignoreCache, false).ignored - } - - createFilter () { - return path => !this.ignores(path) - } - - filter (paths) { - return makeArray(paths).filter(this.createFilter()) - } - - // @returns {TestResult} - test (path) { - return this._test(path, this._testCache, true) - } -} - -const factory = options => new Ignore(options) - -const isPathValid = path => - checkPath(path && checkPath.convert(path), path, RETURN_FALSE) - - -// Windows -// -------------------------------------------------------------- -/* istanbul ignore next */ -if ( - // Detect `process` so that it can run in browsers. - typeof process !== 'undefined' - && ( - process.env && process.env.IGNORE_TEST_WIN32 - || process.platform === 'win32' - ) -) { - /* eslint no-control-regex: "off" */ - const makePosix = str => /^\\\\\?\\/.test(str) - || /["<>|\u0000-\u001F]+/u.test(str) - ? str - : str.replace(/\\/g, '/') - - checkPath.convert = makePosix - - // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' - // 'd:\\foo' - const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i - checkPath.isNotRelative = path => - REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) - || isNotRelative(path) -} - -// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// - -module.exports = factory - -// Although it is an anti-pattern, -// it is still widely misused by a lot of libraries in github -// Ref: https://github.com/search?q=ignore.default%28%29&type=code -factory.default = factory - -module.exports.isPathValid = isPathValid diff --git a/node_modules/ignore/legacy.js b/node_modules/ignore/legacy.js deleted file mode 100644 index fe9d3a242b..0000000000 --- a/node_modules/ignore/legacy.js +++ /dev/null @@ -1,673 +0,0 @@ -"use strict"; - -var _TRAILING_WILD_CARD_R; -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } -function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -// A simple implementation of make-array -function makeArray(subject) { - return Array.isArray(subject) ? subject : [subject]; -} -var UNDEFINED = undefined; -var EMPTY = ''; -var SPACE = ' '; -var ESCAPE = '\\'; -var REGEX_TEST_BLANK_LINE = /^\s+$/; -var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/; -var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; -var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; -var REGEX_SPLITALL_CRLF = /\r?\n/g; - -// Invalid: -// - /foo, -// - ./foo, -// - ../foo, -// - . -// - .. -// Valid: -// - .foo -var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; -var REGEX_TEST_TRAILING_SLASH = /\/$/; -var SLASH = '/'; - -// Do not use ternary expression here, since "istanbul ignore next" is buggy -var TMP_KEY_IGNORE = 'node-ignore'; -/* istanbul ignore else */ -if (typeof Symbol !== 'undefined') { - TMP_KEY_IGNORE = Symbol["for"]('node-ignore'); -} -var KEY_IGNORE = TMP_KEY_IGNORE; -var define = function define(object, key, value) { - Object.defineProperty(object, key, { - value: value - }); - return value; -}; -var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; -var RETURN_FALSE = function RETURN_FALSE() { - return false; -}; - -// Sanitize the range of a regular expression -// The cases are complicated, see test cases for details -var sanitizeRange = function sanitizeRange(range) { - return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) { - return from.charCodeAt(0) <= to.charCodeAt(0) ? match - // Invalid range (out of order) which is ok for gitignore rules but - // fatal for JavaScript regular expression, so eliminate it. - : EMPTY; - }); -}; - -// See fixtures #59 -var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) { - var length = slashes.length; - return slashes.slice(0, length - length % 2); -}; - -// > If the pattern ends with a slash, -// > it is removed for the purpose of the following description, -// > but it would only find a match with a directory. -// > In other words, foo/ will match a directory foo and paths underneath it, -// > but will not match a regular file or a symbolic link foo -// > (this is consistent with the way how pathspec works in general in Git). -// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' -// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call -// you could use option `mark: true` with `glob` - -// '`foo/`' should not continue with the '`..`' -var REPLACERS = [[ -// Remove BOM -// TODO: -// Other similar zero-width characters? -/^\uFEFF/, function () { - return EMPTY; -}], -// > Trailing spaces are ignored unless they are quoted with backslash ("\") -[ -// (a\ ) -> (a ) -// (a ) -> (a) -// (a ) -> (a) -// (a \ ) -> (a ) -/((?:\\\\)*?)(\\?\s+)$/, function (_, m1, m2) { - return m1 + (m2.indexOf('\\') === 0 ? SPACE : EMPTY); -}], -// Replace (\ ) with ' ' -// (\ ) -> ' ' -// (\\ ) -> '\\ ' -// (\\\ ) -> '\\ ' -[/(\\+?)\s/g, function (_, m1) { - var length = m1.length; - return m1.slice(0, length - length % 2) + SPACE; -}], -// Escape metacharacters -// which is written down by users but means special for regular expressions. - -// > There are 12 characters with special meanings: -// > - the backslash \, -// > - the caret ^, -// > - the dollar sign $, -// > - the period or dot ., -// > - the vertical bar or pipe symbol |, -// > - the question mark ?, -// > - the asterisk or star *, -// > - the plus sign +, -// > - the opening parenthesis (, -// > - the closing parenthesis ), -// > - and the opening square bracket [, -// > - the opening curly brace {, -// > These special characters are often called "metacharacters". -[/[\\$.|*+(){^]/g, function (match) { - return "\\".concat(match); -}], [ -// > a question mark (?) matches a single character -/(?!\\)\?/g, function () { - return '[^/]'; -}], -// leading slash -[ -// > A leading slash matches the beginning of the pathname. -// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". -// A leading slash matches the beginning of the pathname -/^\//, function () { - return '^'; -}], -// replace special metacharacter slash after the leading slash -[/\//g, function () { - return '\\/'; -}], [ -// > A leading "**" followed by a slash means match in all directories. -// > For example, "**/foo" matches file or directory "foo" anywhere, -// > the same as pattern "foo". -// > "**/foo/bar" matches file or directory "bar" anywhere that is directly -// > under directory "foo". -// Notice that the '*'s have been replaced as '\\*' -/^\^*\\\*\\\*\\\//, -// '**/foo' <-> 'foo' -function () { - return '^(?:.*\\/)?'; -}], -// starting -[ -// there will be no leading '/' -// (which has been replaced by section "leading slash") -// If starts with '**', adding a '^' to the regular expression also works -/^(?=[^^])/, function startingReplacer() { - // If has a slash `/` at the beginning or middle - return !/\/(?!$)/.test(this) - // > Prior to 2.22.1 - // > If the pattern does not contain a slash /, - // > Git treats it as a shell glob pattern - // Actually, if there is only a trailing slash, - // git also treats it as a shell glob pattern - - // After 2.22.1 (compatible but clearer) - // > If there is a separator at the beginning or middle (or both) - // > of the pattern, then the pattern is relative to the directory - // > level of the particular .gitignore file itself. - // > Otherwise the pattern may also match at any level below - // > the .gitignore level. - ? '(?:^|\\/)' - - // > Otherwise, Git treats the pattern as a shell glob suitable for - // > consumption by fnmatch(3) - : '^'; -}], -// two globstars -[ -// Use lookahead assertions so that we could match more than one `'/**'` -/\\\/\\\*\\\*(?=\\\/|$)/g, -// Zero, one or several directories -// should not use '*', or it will be replaced by the next replacer - -// Check if it is not the last `'/**'` -function (_, index, str) { - return index + 6 < str.length - - // case: /**/ - // > A slash followed by two consecutive asterisks then a slash matches - // > zero or more directories. - // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. - // '/**/' - ? '(?:\\/[^\\/]+)*' - - // case: /** - // > A trailing `"/**"` matches everything inside. - - // #21: everything inside but it should not include the current folder - : '\\/.+'; -}], -// normal intermediate wildcards -[ -// Never replace escaped '*' -// ignore rule '\*' will match the path '*' - -// 'abc.*/' -> go -// 'abc.*' -> skip this rule, -// coz trailing single wildcard will be handed by [trailing wildcard] -/(^|[^\\]+)(\\\*)+(?=.+)/g, -// '*.js' matches '.js' -// '*.js' doesn't match 'abc' -function (_, p1, p2) { - // 1. - // > An asterisk "*" matches anything except a slash. - // 2. - // > Other consecutive asterisks are considered regular asterisks - // > and will match according to the previous rules. - var unescaped = p2.replace(/\\\*/g, '[^\\/]*'); - return p1 + unescaped; -}], [ -// unescape, revert step 3 except for back slash -// For example, if a user escape a '\\*', -// after step 3, the result will be '\\\\\\*' -/\\\\\\(?=[$.|*+(){^])/g, function () { - return ESCAPE; -}], [ -// '\\\\' -> '\\' -/\\\\/g, function () { - return ESCAPE; -}], [ -// > The range notation, e.g. [a-zA-Z], -// > can be used to match one of the characters in a range. - -// `\` is escaped by step 3 -/(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) { - return leadEscape === ESCAPE - // '\\[bar]' -> '\\\\[bar\\]' - ? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0 - // A normal case, and it is a range notation - // '[bar]' - // '[bar\\\\]' - ? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton - // '[bar\\]' -> '[bar\\\\]' - : '[]' : '[]'; -}], -// ending -[ -// 'js' will not match 'js.' -// 'ab' will not match 'abc' -/(?:[^*])$/, -// WTF! -// https://git-scm.com/docs/gitignore -// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) -// which re-fixes #24, #38 - -// > If there is a separator at the end of the pattern then the pattern -// > will only match directories, otherwise the pattern can match both -// > files and directories. - -// 'js*' will not match 'a.js' -// 'js/' will not match 'a.js' -// 'js' will match 'a.js' and 'a.js/' -function (match) { - return /\/$/.test(match) - // foo/ will not match 'foo' - ? "".concat(match, "$") // foo matches 'foo' and 'foo/' - : "".concat(match, "(?=$|\\/$)"); -}]]; -var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/; -var MODE_IGNORE = 'regex'; -var MODE_CHECK_IGNORE = 'checkRegex'; -var UNDERSCORE = '_'; -var TRAILING_WILD_CARD_REPLACERS = (_TRAILING_WILD_CARD_R = {}, _defineProperty(_TRAILING_WILD_CARD_R, MODE_IGNORE, function (_, p1) { - var prefix = p1 - // '\^': - // '/*' does not match EMPTY - // '/*' does not match everything - - // '\\\/': - // 'abc/*' does not match 'abc/' - ? "".concat(p1, "[^/]+") // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*'; - return "".concat(prefix, "(?=$|\\/$)"); -}), _defineProperty(_TRAILING_WILD_CARD_R, MODE_CHECK_IGNORE, function (_, p1) { - // When doing `git check-ignore` - var prefix = p1 - // '\\\/': - // 'abc/*' DOES match 'abc/' ! - ? "".concat(p1, "[^/]*") // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*'; - return "".concat(prefix, "(?=$|\\/$)"); -}), _TRAILING_WILD_CARD_R); - -// @param {pattern} -var makeRegexPrefix = function makeRegexPrefix(pattern) { - return REPLACERS.reduce(function (prev, _ref) { - var _ref2 = _slicedToArray(_ref, 2), - matcher = _ref2[0], - replacer = _ref2[1]; - return prev.replace(matcher, replacer.bind(pattern)); - }, pattern); -}; -var isString = function isString(subject) { - return typeof subject === 'string'; -}; - -// > A blank line matches no files, so it can serve as a separator for readability. -var checkPattern = function checkPattern(pattern) { - return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) - - // > A line starting with # serves as a comment. - && pattern.indexOf('#') !== 0; -}; -var splitPattern = function splitPattern(pattern) { - return pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean); -}; -var IgnoreRule = /*#__PURE__*/function () { - function IgnoreRule(pattern, mark, body, ignoreCase, negative, prefix) { - _classCallCheck(this, IgnoreRule); - this.pattern = pattern; - this.mark = mark; - this.negative = negative; - define(this, 'body', body); - define(this, 'ignoreCase', ignoreCase); - define(this, 'regexPrefix', prefix); - } - _createClass(IgnoreRule, [{ - key: "regex", - get: function get() { - var key = UNDERSCORE + MODE_IGNORE; - if (this[key]) { - return this[key]; - } - return this._make(MODE_IGNORE, key); - } - }, { - key: "checkRegex", - get: function get() { - var key = UNDERSCORE + MODE_CHECK_IGNORE; - if (this[key]) { - return this[key]; - } - return this._make(MODE_CHECK_IGNORE, key); - } - }, { - key: "_make", - value: function _make(mode, key) { - var str = this.regexPrefix.replace(REGEX_REPLACE_TRAILING_WILDCARD, - // It does not need to bind pattern - TRAILING_WILD_CARD_REPLACERS[mode]); - var regex = this.ignoreCase ? new RegExp(str, 'i') : new RegExp(str); - return define(this, key, regex); - } - }]); - return IgnoreRule; -}(); -var createRule = function createRule(_ref3, ignoreCase) { - var pattern = _ref3.pattern, - mark = _ref3.mark; - var negative = false; - var body = pattern; - - // > An optional prefix "!" which negates the pattern; - if (body.indexOf('!') === 0) { - negative = true; - body = body.substr(1); - } - body = body - // > Put a backslash ("\") in front of the first "!" for patterns that - // > begin with a literal "!", for example, `"\!important!.txt"`. - .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') - // > Put a backslash ("\") in front of the first hash for patterns that - // > begin with a hash. - .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); - var regexPrefix = makeRegexPrefix(body); - return new IgnoreRule(pattern, mark, body, ignoreCase, negative, regexPrefix); -}; -var RuleManager = /*#__PURE__*/function () { - function RuleManager(ignoreCase) { - _classCallCheck(this, RuleManager); - this._ignoreCase = ignoreCase; - this._rules = []; - } - _createClass(RuleManager, [{ - key: "_add", - value: function _add(pattern) { - // #32 - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules._rules); - this._added = true; - return; - } - if (isString(pattern)) { - pattern = { - pattern: pattern - }; - } - if (checkPattern(pattern.pattern)) { - var rule = createRule(pattern, this._ignoreCase); - this._added = true; - this._rules.push(rule); - } - } - - // @param {Array | string | Ignore} pattern - }, { - key: "add", - value: function add(pattern) { - this._added = false; - makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._add, this); - return this._added; - } - - // Test one single path without recursively checking parent directories - // - // - checkUnignored `boolean` whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. - // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE` - - // @returns {TestResult} true if a file is ignored - }, { - key: "test", - value: function test(path, checkUnignored, mode) { - var ignored = false; - var unignored = false; - var matchedRule; - this._rules.forEach(function (rule) { - var negative = rule.negative; - - // | ignored : unignored - // -------- | --------------------------------------- - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X - - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { - return; - } - var matched = rule[mode].test(path); - if (!matched) { - return; - } - ignored = !negative; - unignored = negative; - matchedRule = negative ? UNDEFINED : rule; - }); - var ret = { - ignored: ignored, - unignored: unignored - }; - if (matchedRule) { - ret.rule = matchedRule; - } - return ret; - } - }]); - return RuleManager; -}(); -var throwError = function throwError(message, Ctor) { - throw new Ctor(message); -}; -var checkPath = function checkPath(path, originalPath, doThrow) { - if (!isString(path)) { - return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError); - } - - // We don't know if we should ignore EMPTY, so throw - if (!path) { - return doThrow("path must not be empty", TypeError); - } - - // Check if it is a relative path - if (checkPath.isNotRelative(path)) { - var r = '`path.relative()`d'; - return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError); - } - return true; -}; -var isNotRelative = function isNotRelative(path) { - return REGEX_TEST_INVALID_PATH.test(path); -}; -checkPath.isNotRelative = isNotRelative; - -// On windows, the following function will be replaced -/* istanbul ignore next */ -checkPath.convert = function (p) { - return p; -}; -var Ignore = /*#__PURE__*/function () { - function Ignore() { - var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref4$ignorecase = _ref4.ignorecase, - ignorecase = _ref4$ignorecase === void 0 ? true : _ref4$ignorecase, - _ref4$ignoreCase = _ref4.ignoreCase, - ignoreCase = _ref4$ignoreCase === void 0 ? ignorecase : _ref4$ignoreCase, - _ref4$allowRelativePa = _ref4.allowRelativePaths, - allowRelativePaths = _ref4$allowRelativePa === void 0 ? false : _ref4$allowRelativePa; - _classCallCheck(this, Ignore); - define(this, KEY_IGNORE, true); - this._rules = new RuleManager(ignoreCase); - this._strictPathCheck = !allowRelativePaths; - this._initCache(); - } - _createClass(Ignore, [{ - key: "_initCache", - value: function _initCache() { - // A cache for the result of `.ignores()` - this._ignoreCache = Object.create(null); - - // A cache for the result of `.test()` - this._testCache = Object.create(null); - } - }, { - key: "add", - value: function add(pattern) { - if (this._rules.add(pattern)) { - // Some rules have just added to the ignore, - // making the behavior changed, - // so we need to re-initialize the result cache - this._initCache(); - } - return this; - } - - // legacy - }, { - key: "addPattern", - value: function addPattern(pattern) { - return this.add(pattern); - } - - // @returns {TestResult} - }, { - key: "_test", - value: function _test(originalPath, cache, checkUnignored, slices) { - var path = originalPath - // Supports nullable path - && checkPath.convert(originalPath); - checkPath(path, originalPath, this._strictPathCheck ? throwError : RETURN_FALSE); - return this._t(path, cache, checkUnignored, slices); - } - }, { - key: "checkIgnore", - value: function checkIgnore(path) { - // If the path doest not end with a slash, `.ignores()` is much equivalent - // to `git check-ignore` - if (!REGEX_TEST_TRAILING_SLASH.test(path)) { - return this.test(path); - } - var slices = path.split(SLASH).filter(Boolean); - slices.pop(); - if (slices.length) { - var parent = this._t(slices.join(SLASH) + SLASH, this._testCache, true, slices); - if (parent.ignored) { - return parent; - } - } - return this._rules.test(path, false, MODE_CHECK_IGNORE); - } - }, { - key: "_t", - value: function _t( - // The path to be tested - path, - // The cache for the result of a certain checking - cache, - // Whether should check if the path is unignored - checkUnignored, - // The path slices - slices) { - if (path in cache) { - return cache[path]; - } - if (!slices) { - // path/to/a.js - // ['path', 'to', 'a.js'] - slices = path.split(SLASH).filter(Boolean); - } - slices.pop(); - - // If the path has no parent directory, just test it - if (!slices.length) { - return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE); - } - var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices); - - // If the path contains a parent directory, check the parent first - return cache[path] = parent.ignored - // > It is not possible to re-include a file if a parent directory of - // > that file is excluded. - ? parent : this._rules.test(path, checkUnignored, MODE_IGNORE); - } - }, { - key: "ignores", - value: function ignores(path) { - return this._test(path, this._ignoreCache, false).ignored; - } - }, { - key: "createFilter", - value: function createFilter() { - var _this = this; - return function (path) { - return !_this.ignores(path); - }; - } - }, { - key: "filter", - value: function filter(paths) { - return makeArray(paths).filter(this.createFilter()); - } - - // @returns {TestResult} - }, { - key: "test", - value: function test(path) { - return this._test(path, this._testCache, true); - } - }]); - return Ignore; -}(); -var factory = function factory(options) { - return new Ignore(options); -}; -var isPathValid = function isPathValid(path) { - return checkPath(path && checkPath.convert(path), path, RETURN_FALSE); -}; - -// Windows -// -------------------------------------------------------------- -/* istanbul ignore next */ -if ( -// Detect `process` so that it can run in browsers. -typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) { - /* eslint no-control-regex: "off" */ - var makePosix = function makePosix(str) { - return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/'); - }; - checkPath.convert = makePosix; - - // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' - // 'd:\\foo' - var REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; - checkPath.isNotRelative = function (path) { - return REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path); - }; -} - -// COMMONJS_EXPORTS //////////////////////////////////////////////////////////// - -module.exports = factory; - -// Although it is an anti-pattern, -// it is still widely misused by a lot of libraries in github -// Ref: https://github.com/search?q=ignore.default%28%29&type=code -factory["default"] = factory; -module.exports.isPathValid = isPathValid; diff --git a/node_modules/ignore/package.json b/node_modules/ignore/package.json deleted file mode 100644 index b0608c32e8..0000000000 --- a/node_modules/ignore/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "ignore", - "version": "7.0.3", - "description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.", - "types": "index.d.ts", - "files": [ - "legacy.js", - "index.js", - "index.d.ts", - "LICENSE-MIT" - ], - "scripts": { - "prepublishOnly": "npm run build", - "build": "babel -o legacy.js index.js", - - "==================== linting ======================": "", - "lint": "eslint .", - - "===================== import ======================": "", - "ts": "npm run test:ts && npm run test:16", - "test:ts": "ts-node ./test/import/simple.ts", - "test:16": "npm run test:ts:16 && npm run test:cjs:16 && npm run test:mjs:16", - "test:ts:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.ts && tsc ./test/import/simple.ts --lib ES6 --moduleResolution Node16 --module Node16 && node ./test/import/simple.js", - "test:cjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.cjs", - "test:mjs:16": "ts-node --compilerOptions '{\"moduleResolution\": \"Node16\", \"module\": \"Node16\"}' ./test/import/simple.mjs && babel -o ./test/import/simple-mjs.js ./test/import/simple.mjs && node ./test/import/simple-mjs.js", - - "===================== cases =======================": "", - "test:cases": "npm run tap test/*.test.js -- --coverage", - "tap": "tap --reporter classic", - - "===================== debug =======================": "", - "test:git": "npm run tap test/git-check-ignore.test.js", - "test:ignore": "npm run tap test/ignore.test.js", - "test:ignore:only": "IGNORE_ONLY_IGNORES=1 npm run tap test/ignore.test.js", - "test:others": "npm run tap test/others.test.js", - "test:no-coverage": "npm run tap test/*.test.js -- --no-check-coverage", - - "test": "npm run lint && npm run ts && npm run build && npm run test:cases", - "test:win32": "IGNORE_TEST_WIN32=1 npm run test", - "report": "tap --coverage-report=html" - }, - "repository": { - "type": "git", - "url": "git@github.com:kaelzhang/node-ignore.git" - }, - "keywords": [ - "ignore", - ".gitignore", - "gitignore", - "npmignore", - "rules", - "manager", - "filter", - "regexp", - "regex", - "fnmatch", - "glob", - "asterisks", - "regular-expression" - ], - "author": "kael", - "license": "MIT", - "bugs": { - "url": "https://github.com/kaelzhang/node-ignore/issues" - }, - "devDependencies": { - "@babel/cli": "^7.22.9", - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@typescript-eslint/eslint-plugin": "^8.19.1", - "codecov": "^3.8.3", - "debug": "^4.3.4", - "eslint": "^8.46.0", - "eslint-config-ostai": "^3.0.0", - "eslint-plugin-import": "^2.28.0", - "mkdirp": "^3.0.1", - "pre-suf": "^1.1.1", - "rimraf": "^6.0.1", - "spawn-sync": "^2.0.0", - "tap": "^16.3.9", - "tmp": "0.2.3", - "ts-node": "^10.9.2", - "typescript": "^5.6.2" - }, - "engines": { - "node": ">= 4" - } -} diff --git a/node_modules/ini/LICENSE b/node_modules/ini/LICENSE deleted file mode 100644 index 19129e315f..0000000000 --- a/node_modules/ini/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/ini/README.md b/node_modules/ini/README.md deleted file mode 100644 index c6eee0052a..0000000000 --- a/node_modules/ini/README.md +++ /dev/null @@ -1,180 +0,0 @@ - -An INI format parser & serializer. - -## Note - -- Sections are treated as nested objects. - -- Section-less items are treated as globals. - -## Usage - -Consider an INI file such as the following: - -```ini -; This comment is being ignored -scope = global - -[database] -user = dbuser -password = dbpassword -database = use_this_database - -[paths.default] -datadir = /var/lib/data -array[] = first value -array[] = second value -array[] = third value -``` - -You can **read**, **modify** and **write** it like so: - -```js -import { writeFile , readFile } from 'node:fs/promises' -import { stringify , parse } from 'ini' - -// Read INI file as text - -let text = await readFile(`./Original.ini`,{ - encoding : 'utf-8' -}) - -// Parse text data to object - -const config = parse(text) - -// Modify data object - -config.scope = 'local' -config.database.database = 'use_another_database' -config.paths.default.tmpdir = '/tmp' -delete config.paths.default.datadir -config.paths.default.array.push('fourth value') - -// Stringify data object - -text = stringify(config,{ - section : 'section' -}) - -// Write INI file as text - -await writeFile(`./Modified.ini`,text) -``` - -The written file will contain the following: - -```ini -[section] -scope=local -[section.database] -user=dbuser -password=dbpassword -database=use_another_database -[section.paths.default] -tmpdir=/tmp -array[]=first value -array[]=second value -array[]=third value -array[]=fourth value -``` - -## API - -### Parse - -Attempts to turn the given INI string into a nested data object. - -```js -// You can also use `decode` -const object = parse(``) -``` - -### Stringify - -Encodes the given data object as an INI formatted string. - -```js -// You can also use `encode` -stringify(object,{ - - /** - * Whether to insert spaces before & after `=` - * - * Disabled by default to have better - * compatibility with old picky parsers. - */ - - whitespace : false , - - /** - * Whether to align the `=` character for each section. - * -> Also enables the `whitespace` option - */ - - align : false , - - /** - * Identifier to use for global items - * and to prepend to all other sections. - */ - - section , - - /** - * Whether to sort all sections & their keys alphabetically. - */ - - sort : false , - - /** - * Whether to insert a newline after each section header. - * - * The TOSHIBA & FlashAir parser require this format. - */ - - newline : false , - - /** - * Which platforms line-endings should be used. - * - * win32 -> CR+LF - * other -> LF - * - * Default is the current platform - */ - - platform , - - /** - * Whether to append `[]` to array keys. - * - * Some parsers treat duplicate names by themselves as arrays - */ - - bracketedArray : true - -}) -``` - -*For backwards compatibility any string passed as the* -*options parameter is treated as the `section` option.* - -```js -stringify(object,'section') -``` - -### Un / Escape - -Turn the given string into a safe to -use key or value in your INI file. - -```js -safe(`"unsafe string"`) // -> \"unsafe string\" -``` - -Or reverse the process with: - -```js -unsafe(`\\"safe string\\"`) // -> "safe string" -``` diff --git a/node_modules/ini/package.json b/node_modules/ini/package.json deleted file mode 100644 index 67aa927825..0000000000 --- a/node_modules/ini/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "author": "GitHub Inc.", - "name": "ini", - "description": "An ini encoder/decoder for node", - "version": "4.1.3", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/ini.git" - }, - "main": "lib/ini.js", - "scripts": { - "eslint": "eslint", - "lint": "eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"", - "lintfix": "npm run lint -- --fix", - "test": "tap", - "snap": "tap", - "posttest": "npm run lint", - "postlint": "template-oss-check", - "template-oss-apply": "template-oss-apply --force" - }, - "devDependencies": { - "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.22.0", - "tap": "^16.0.1" - }, - "license": "ISC", - "files": [ - "bin/", - "lib/" - ], - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "templateOSS": { - "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.22.0", - "publish": "true" - }, - "tap": { - "nyc-arg": [ - "--exclude", - "tap-snapshots/**" - ] - } -} diff --git a/node_modules/is-alphabetical/index.d.ts b/node_modules/is-alphabetical/index.d.ts deleted file mode 100644 index ceee1c6113..0000000000 --- a/node_modules/is-alphabetical/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is alphabetical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphabetical. - */ -export function isAlphabetical(character: string | number): boolean diff --git a/node_modules/is-alphabetical/index.js b/node_modules/is-alphabetical/index.js deleted file mode 100644 index f71156a48b..0000000000 --- a/node_modules/is-alphabetical/index.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is alphabetical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphabetical. - */ -export function isAlphabetical(character) { - const code = - typeof character === 'string' ? character.charCodeAt(0) : character - - return ( - (code >= 97 && code <= 122) /* a-z */ || - (code >= 65 && code <= 90) /* A-Z */ - ) -} diff --git a/node_modules/is-alphabetical/license b/node_modules/is-alphabetical/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-alphabetical/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphabetical/package.json b/node_modules/is-alphabetical/package.json deleted file mode 100644 index c274f30d20..0000000000 --- a/node_modules/is-alphabetical/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "is-alphabetical", - "version": "2.0.1", - "description": "Check if a character is alphabetical", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "alphabetical" - ], - "repository": "wooorm/is-alphabetical", - "bugs": "https://github.com/wooorm/is-alphabetical/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-alphabetical/readme.md b/node_modules/is-alphabetical/readme.md deleted file mode 100644 index 8c83eb6016..0000000000 --- a/node_modules/is-alphabetical/readme.md +++ /dev/null @@ -1,141 +0,0 @@ -# is-alphabetical - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is alphabetical. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isAlphabetical(character|code)`](#isalphabeticalcharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is ASCII alphabetical: -matching `[a-z]`, case insensitive. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-alphabetical -``` - -In Deno with [Skypack][]: - -```js -import {isAlphabetical} from 'https://cdn.skypack.dev/is-alphabetical@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isAlphabetical} from 'is-alphabetical' - -isAlphabetical('a') // => true -isAlphabetical('B') // => true -isAlphabetical('0') // => false -isAlphabetical('💩') // => false -``` - -## API - -This package exports the following identifier: `isAlphabetical`. -There is no default export. - -### `isAlphabetical(character|code)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is alphabetical. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) -* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) -* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphanumerical) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-alphabetical/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-alphabetical/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphabetical.svg - -[coverage]: https://codecov.io/github/wooorm/is-alphabetical - -[downloads-badge]: https://img.shields.io/npm/dm/is-alphabetical.svg - -[downloads]: https://www.npmjs.com/package/is-alphabetical - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphabetical.svg - -[size]: https://bundlephobia.com/result?p=is-alphabetical - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-alphanumerical/index.d.ts b/node_modules/is-alphanumerical/index.d.ts deleted file mode 100644 index 3fed2bd3fa..0000000000 --- a/node_modules/is-alphanumerical/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is alphanumerical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphanumerical. - */ -export function isAlphanumerical(character: string | number): boolean diff --git a/node_modules/is-alphanumerical/index.js b/node_modules/is-alphanumerical/index.js deleted file mode 100644 index 10188f360d..0000000000 --- a/node_modules/is-alphanumerical/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import {isAlphabetical} from 'is-alphabetical' -import {isDecimal} from 'is-decimal' - -/** - * Check if the given character code, or the character code at the first - * character, is alphanumerical. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is alphanumerical. - */ -export function isAlphanumerical(character) { - return isAlphabetical(character) || isDecimal(character) -} diff --git a/node_modules/is-alphanumerical/license b/node_modules/is-alphanumerical/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-alphanumerical/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-alphanumerical/package.json b/node_modules/is-alphanumerical/package.json deleted file mode 100644 index 2689af5d07..0000000000 --- a/node_modules/is-alphanumerical/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "is-alphanumerical", - "version": "2.0.1", - "description": "Check if a character is alphanumerical", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "alphabetical", - "numerical", - "alphanumerical" - ], - "repository": "wooorm/is-alphanumerical", - "bugs": "https://github.com/wooorm/is-alphanumerical/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-alphanumerical/readme.md b/node_modules/is-alphanumerical/readme.md deleted file mode 100644 index cacd9a6422..0000000000 --- a/node_modules/is-alphanumerical/readme.md +++ /dev/null @@ -1,142 +0,0 @@ -# is-alphanumerical - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is alphanumerical. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isAlphanumerical(character)`](#isalphanumericalcharacter) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is ASCII alphanumerical: -it matches `[a-zA-Z0-9]`. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-alphanumerical -``` - -In Deno with [Skypack][]: - -```js -import {isAlphanumerical} from 'https://cdn.skypack.dev/is-alphanumerical@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isAlphanumerical} from 'is-alphanumerical' - -isAlphanumerical('a') // => true -isAlphanumerical('Z') // => true -isAlphanumerical('0') // => true -isAlphanumerical(' ') // => false -isAlphanumerical('💩') // => false -``` - -## API - -This package exports the following identifier: `isAlphanumerical`. -There is no default export. - -### `isAlphanumerical(character)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is alphanumerical. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) -* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-alphanumerical/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-alphanumerical/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-alphanumerical.svg - -[coverage]: https://codecov.io/github/wooorm/is-alphanumerical - -[downloads-badge]: https://img.shields.io/npm/dm/is-alphanumerical.svg - -[downloads]: https://www.npmjs.com/package/is-alphanumerical - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-alphanumerical.svg - -[size]: https://bundlephobia.com/result?p=is-alphanumerical - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-decimal/index.d.ts b/node_modules/is-decimal/index.d.ts deleted file mode 100644 index 5f162a7145..0000000000 --- a/node_modules/is-decimal/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is decimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is a decimal - */ -export function isDecimal(character: string | number): boolean diff --git a/node_modules/is-decimal/index.js b/node_modules/is-decimal/index.js deleted file mode 100644 index 4fe00ff751..0000000000 --- a/node_modules/is-decimal/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is decimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is a decimal - */ -export function isDecimal(character) { - const code = - typeof character === 'string' ? character.charCodeAt(0) : character - - return code >= 48 && code <= 57 /* 0-9 */ -} diff --git a/node_modules/is-decimal/license b/node_modules/is-decimal/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-decimal/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-decimal/package.json b/node_modules/is-decimal/package.json deleted file mode 100644 index c0a593994b..0000000000 --- a/node_modules/is-decimal/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "is-decimal", - "version": "2.0.1", - "description": "Check if a character is decimal", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "decimal" - ], - "repository": "wooorm/is-decimal", - "bugs": "https://github.com/wooorm/is-decimal/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-decimal/readme.md b/node_modules/is-decimal/readme.md deleted file mode 100644 index 1595537c08..0000000000 --- a/node_modules/is-decimal/readme.md +++ /dev/null @@ -1,139 +0,0 @@ -# is-decimal - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is a decimal. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isDecimal(character|code)`](#isdecimalcharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is an ASCII decimal. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-decimal -``` - -In Deno with [Skypack][]: - -```js -import {isDecimal} from 'https://cdn.skypack.dev/is-decimal@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isDecimal} from 'is-decimal' - -isDecimal('0') // => true -isDecimal('9') // => true -isDecimal('a') // => false -isDecimal('💩') // => false -``` - -## API - -This package exports the following identifiers: `isDecimal`. -There is no default export. - -### `isDecimal(character|code)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is decimal. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-hexadecimal`](https://github.com/wooorm/is-hexadecimal) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-decimal/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-decimal/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-decimal.svg - -[coverage]: https://codecov.io/github/wooorm/is-decimal - -[downloads-badge]: https://img.shields.io/npm/dm/is-decimal.svg - -[downloads]: https://www.npmjs.com/package/is-decimal - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-decimal.svg - -[size]: https://bundlephobia.com/result?p=is-decimal - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/is-fullwidth-code-point/index.d.ts b/node_modules/is-fullwidth-code-point/index.d.ts deleted file mode 100644 index 729d202051..0000000000 --- a/node_modules/is-fullwidth-code-point/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms). - -@param codePoint - The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. - -@example -``` -import isFullwidthCodePoint from 'is-fullwidth-code-point'; - -isFullwidthCodePoint('谢'.codePointAt(0)); -//=> true - -isFullwidthCodePoint('a'.codePointAt(0)); -//=> false -``` -*/ -export default function isFullwidthCodePoint(codePoint: number): boolean; diff --git a/node_modules/is-fullwidth-code-point/index.js b/node_modules/is-fullwidth-code-point/index.js deleted file mode 100644 index 671f97f760..0000000000 --- a/node_modules/is-fullwidth-code-point/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-disable yoda */ -'use strict'; - -const isFullwidthCodePoint = codePoint => { - if (Number.isNaN(codePoint)) { - return false; - } - - // Code points are derived from: - // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt - if ( - codePoint >= 0x1100 && ( - codePoint <= 0x115F || // Hangul Jamo - codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET - codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET - // CJK Radicals Supplement .. Enclosed CJK Letters and Months - (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || - // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A - (0x3250 <= codePoint && codePoint <= 0x4DBF) || - // CJK Unified Ideographs .. Yi Radicals - (0x4E00 <= codePoint && codePoint <= 0xA4C6) || - // Hangul Jamo Extended-A - (0xA960 <= codePoint && codePoint <= 0xA97C) || - // Hangul Syllables - (0xAC00 <= codePoint && codePoint <= 0xD7A3) || - // CJK Compatibility Ideographs - (0xF900 <= codePoint && codePoint <= 0xFAFF) || - // Vertical Forms - (0xFE10 <= codePoint && codePoint <= 0xFE19) || - // CJK Compatibility Forms .. Small Form Variants - (0xFE30 <= codePoint && codePoint <= 0xFE6B) || - // Halfwidth and Fullwidth Forms - (0xFF01 <= codePoint && codePoint <= 0xFF60) || - (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || - // Kana Supplement - (0x1B000 <= codePoint && codePoint <= 0x1B001) || - // Enclosed Ideographic Supplement - (0x1F200 <= codePoint && codePoint <= 0x1F251) || - // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane - (0x20000 <= codePoint && codePoint <= 0x3FFFD) - ) - ) { - return true; - } - - return false; -}; - -module.exports = isFullwidthCodePoint; -module.exports.default = isFullwidthCodePoint; diff --git a/node_modules/is-fullwidth-code-point/license b/node_modules/is-fullwidth-code-point/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/is-fullwidth-code-point/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-fullwidth-code-point/package.json b/node_modules/is-fullwidth-code-point/package.json deleted file mode 100644 index 2137e888fa..0000000000 --- a/node_modules/is-fullwidth-code-point/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "is-fullwidth-code-point", - "version": "3.0.0", - "description": "Check if the character represented by a given Unicode code point is fullwidth", - "license": "MIT", - "repository": "sindresorhus/is-fullwidth-code-point", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd-check" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "fullwidth", - "full-width", - "full", - "width", - "unicode", - "character", - "string", - "codepoint", - "code", - "point", - "is", - "detect", - "check" - ], - "devDependencies": { - "ava": "^1.3.1", - "tsd-check": "^0.5.0", - "xo": "^0.24.0" - } -} diff --git a/node_modules/is-fullwidth-code-point/readme.md b/node_modules/is-fullwidth-code-point/readme.md deleted file mode 100644 index 4236bba980..0000000000 --- a/node_modules/is-fullwidth-code-point/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) - -> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) - - -## Install - -``` -$ npm install is-fullwidth-code-point -``` - - -## Usage - -```js -const isFullwidthCodePoint = require('is-fullwidth-code-point'); - -isFullwidthCodePoint('谢'.codePointAt(0)); -//=> true - -isFullwidthCodePoint('a'.codePointAt(0)); -//=> false -``` - - -## API - -### isFullwidthCodePoint(codePoint) - -#### codePoint - -Type: `number` - -The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/is-hexadecimal/index.d.ts b/node_modules/is-hexadecimal/index.d.ts deleted file mode 100644 index 1199b32aa8..0000000000 --- a/node_modules/is-hexadecimal/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is hexadecimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is hexadecimal - */ -export function isHexadecimal(character: string | number): boolean diff --git a/node_modules/is-hexadecimal/index.js b/node_modules/is-hexadecimal/index.js deleted file mode 100644 index 2eda39fbef..0000000000 --- a/node_modules/is-hexadecimal/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Check if the given character code, or the character code at the first - * character, is hexadecimal. - * - * @param {string|number} character - * @returns {boolean} Whether `character` is hexadecimal - */ -export function isHexadecimal(character) { - const code = - typeof character === 'string' ? character.charCodeAt(0) : character - - return ( - (code >= 97 /* a */ && code <= 102) /* z */ || - (code >= 65 /* A */ && code <= 70) /* Z */ || - (code >= 48 /* A */ && code <= 57) /* Z */ - ) -} diff --git a/node_modules/is-hexadecimal/license b/node_modules/is-hexadecimal/license deleted file mode 100644 index 8d8660d36e..0000000000 --- a/node_modules/is-hexadecimal/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-hexadecimal/package.json b/node_modules/is-hexadecimal/package.json deleted file mode 100644 index e88ab44727..0000000000 --- a/node_modules/is-hexadecimal/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "is-hexadecimal", - "version": "2.0.1", - "description": "Check if a character is hexadecimal", - "license": "MIT", - "keywords": [ - "string", - "character", - "char", - "code", - "hexadecimal" - ], - "repository": "wooorm/is-hexadecimal", - "bugs": "https://github.com/wooorm/is-hexadecimal/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.d.ts", - "index.js" - ], - "devDependencies": { - "@types/tape": "^4.0.0", - "c8": "^7.0.0", - "prettier": "^2.0.0", - "remark-cli": "^10.0.0", - "remark-preset-wooorm": "^9.0.0", - "rimraf": "^3.0.0", - "tape": "^5.0.0", - "type-coverage": "^2.0.0", - "typescript": "^4.0.0", - "xo": "^0.46.0" - }, - "scripts": { - "prepublishOnly": "npm run build && npm run format", - "build": "rimraf \"*.d.ts\" && tsc && type-coverage", - "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true - }, - "remarkConfig": { - "plugins": [ - "preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/is-hexadecimal/readme.md b/node_modules/is-hexadecimal/readme.md deleted file mode 100644 index a857ecd909..0000000000 --- a/node_modules/is-hexadecimal/readme.md +++ /dev/null @@ -1,141 +0,0 @@ -# is-hexadecimal - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Check if a character is hexadecimal. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`isHexadecimal(character|code)`](#ishexadecimalcharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a function that checks if a given character is a white space character: -whether it matches `[a-f0-9]`, case insensitive. - -## When should I use this? - -Not often, as it’s relatively simple to do yourself. -This package exists because it’s needed in several related packages, at which -point it becomes useful to defer to one shared function. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: - -```sh -npm install is-hexadecimal -``` - -In Deno with [Skypack][]: - -```js -import {isHexadecimal} from 'https://cdn.skypack.dev/is-hexadecimal@2?dts' -``` - -In browsers with [Skypack][]: - -```html - -``` - -## Use - -```js -import {isHexadecimal} from 'is-hexadecimal' - -isHexadecimal('a') // => true -isHexadecimal('0') // => true -isHexadecimal('G') // => false -isHexadecimal('💩') // => false -``` - -## API - -This package exports the following identifier: `isHexadecimal`. -There is no default export. - -### `isHexadecimal(character|code)` - -Check whether the given character code (`number`), or the character code at the -first position (`string`), is isHexadecimal. - -## Types - -This package is fully typed with [TypeScript][]. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 12.20+, 14.14+, and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe. - -## Related - -* [`wooorm/is-alphabetical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-alphanumerical`](https://github.com/wooorm/is-alphabetical) -* [`wooorm/is-decimal`](https://github.com/wooorm/is-decimal) -* [`wooorm/is-whitespace-character`](https://github.com/wooorm/is-whitespace-character) -* [`wooorm/is-word-character`](https://github.com/wooorm/is-word-character) - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/is-hexadecimal/workflows/main/badge.svg - -[build]: https://github.com/wooorm/is-hexadecimal/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/is-hexadecimal.svg - -[coverage]: https://codecov.io/github/wooorm/is-hexadecimal - -[downloads-badge]: https://img.shields.io/npm/dm/is-hexadecimal.svg - -[downloads]: https://www.npmjs.com/package/is-hexadecimal - -[size-badge]: https://img.shields.io/bundlephobia/minzip/is-hexadecimal.svg - -[size]: https://bundlephobia.com/result?p=is-hexadecimal - -[npm]: https://docs.npmjs.com/cli/install - -[skypack]: https://www.skypack.dev - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/isexe/.npmignore b/node_modules/isexe/.npmignore deleted file mode 100644 index c1cb757acf..0000000000 --- a/node_modules/isexe/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.nyc_output/ -coverage/ diff --git a/node_modules/isexe/LICENSE b/node_modules/isexe/LICENSE deleted file mode 100644 index 19129e315f..0000000000 --- a/node_modules/isexe/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/isexe/README.md b/node_modules/isexe/README.md deleted file mode 100644 index 35769e8440..0000000000 --- a/node_modules/isexe/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# isexe - -Minimal module to check if a file is executable, and a normal file. - -Uses `fs.stat` and tests against the `PATHEXT` environment variable on -Windows. - -## USAGE - -```javascript -var isexe = require('isexe') -isexe('some-file-name', function (err, isExe) { - if (err) { - console.error('probably file does not exist or something', err) - } else if (isExe) { - console.error('this thing can be run') - } else { - console.error('cannot be run') - } -}) - -// same thing but synchronous, throws errors -var isExe = isexe.sync('some-file-name') - -// treat errors as just "not executable" -isexe('maybe-missing-file', { ignoreErrors: true }, callback) -var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) -``` - -## API - -### `isexe(path, [options], [callback])` - -Check if the path is executable. If no callback provided, and a -global `Promise` object is available, then a Promise will be returned. - -Will raise whatever errors may be raised by `fs.stat`, unless -`options.ignoreErrors` is set to true. - -### `isexe.sync(path, [options])` - -Same as `isexe` but returns the value and throws any errors raised. - -### Options - -* `ignoreErrors` Treat all errors as "no, this is not executable", but - don't raise them. -* `uid` Number to use as the user id -* `gid` Number to use as the group id -* `pathExt` List of path extensions to use instead of `PATHEXT` - environment variable on Windows. diff --git a/node_modules/isexe/index.js b/node_modules/isexe/index.js deleted file mode 100644 index 553fb32b11..0000000000 --- a/node_modules/isexe/index.js +++ /dev/null @@ -1,57 +0,0 @@ -var fs = require('fs') -var core -if (process.platform === 'win32' || global.TESTING_WINDOWS) { - core = require('./windows.js') -} else { - core = require('./mode.js') -} - -module.exports = isexe -isexe.sync = sync - -function isexe (path, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} - } - - if (!cb) { - if (typeof Promise !== 'function') { - throw new TypeError('callback not provided') - } - - return new Promise(function (resolve, reject) { - isexe(path, options || {}, function (er, is) { - if (er) { - reject(er) - } else { - resolve(is) - } - }) - }) - } - - core(path, options || {}, function (er, is) { - // ignore EACCES because that just means we aren't allowed to run it - if (er) { - if (er.code === 'EACCES' || options && options.ignoreErrors) { - er = null - is = false - } - } - cb(er, is) - }) -} - -function sync (path, options) { - // my kingdom for a filtered catch - try { - return core.sync(path, options || {}) - } catch (er) { - if (options && options.ignoreErrors || er.code === 'EACCES') { - return false - } else { - throw er - } - } -} diff --git a/node_modules/isexe/mode.js b/node_modules/isexe/mode.js deleted file mode 100644 index 1995ea4a06..0000000000 --- a/node_modules/isexe/mode.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = isexe -isexe.sync = sync - -var fs = require('fs') - -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, options)) - }) -} - -function sync (path, options) { - return checkStat(fs.statSync(path), options) -} - -function checkStat (stat, options) { - return stat.isFile() && checkMode(stat, options) -} - -function checkMode (stat, options) { - var mod = stat.mode - var uid = stat.uid - var gid = stat.gid - - var myUid = options.uid !== undefined ? - options.uid : process.getuid && process.getuid() - var myGid = options.gid !== undefined ? - options.gid : process.getgid && process.getgid() - - var u = parseInt('100', 8) - var g = parseInt('010', 8) - var o = parseInt('001', 8) - var ug = u | g - - var ret = (mod & o) || - (mod & g) && gid === myGid || - (mod & u) && uid === myUid || - (mod & ug) && myUid === 0 - - return ret -} diff --git a/node_modules/isexe/package.json b/node_modules/isexe/package.json deleted file mode 100644 index e452689442..0000000000 --- a/node_modules/isexe/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "isexe", - "version": "2.0.0", - "description": "Minimal module to check if a file is executable.", - "main": "index.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "mkdirp": "^0.5.1", - "rimraf": "^2.5.0", - "tap": "^10.3.0" - }, - "scripts": { - "test": "tap test/*.js --100", - "preversion": "npm test", - "postversion": "npm publish", - "postpublish": "git push origin --all; git push origin --tags" - }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/isexe.git" - }, - "keywords": [], - "bugs": { - "url": "https://github.com/isaacs/isexe/issues" - }, - "homepage": "https://github.com/isaacs/isexe#readme" -} diff --git a/node_modules/isexe/test/basic.js b/node_modules/isexe/test/basic.js deleted file mode 100644 index d926df64b9..0000000000 --- a/node_modules/isexe/test/basic.js +++ /dev/null @@ -1,221 +0,0 @@ -var t = require('tap') -var fs = require('fs') -var path = require('path') -var fixture = path.resolve(__dirname, 'fixtures') -var meow = fixture + '/meow.cat' -var mine = fixture + '/mine.cat' -var ours = fixture + '/ours.cat' -var fail = fixture + '/fail.false' -var noent = fixture + '/enoent.exe' -var mkdirp = require('mkdirp') -var rimraf = require('rimraf') - -var isWindows = process.platform === 'win32' -var hasAccess = typeof fs.access === 'function' -var winSkip = isWindows && 'windows' -var accessSkip = !hasAccess && 'no fs.access function' -var hasPromise = typeof Promise === 'function' -var promiseSkip = !hasPromise && 'no global Promise' - -function reset () { - delete require.cache[require.resolve('../')] - return require('../') -} - -t.test('setup fixtures', function (t) { - rimraf.sync(fixture) - mkdirp.sync(fixture) - fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') - fs.chmodSync(meow, parseInt('0755', 8)) - fs.writeFileSync(fail, '#!/usr/bin/env false\n') - fs.chmodSync(fail, parseInt('0644', 8)) - fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') - fs.chmodSync(mine, parseInt('0744', 8)) - fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') - fs.chmodSync(ours, parseInt('0754', 8)) - t.end() -}) - -t.test('promise', { skip: promiseSkip }, function (t) { - var isexe = reset() - t.test('meow async', function (t) { - isexe(meow).then(function (is) { - t.ok(is) - t.end() - }) - }) - t.test('fail async', function (t) { - isexe(fail).then(function (is) { - t.notOk(is) - t.end() - }) - }) - t.test('noent async', function (t) { - isexe(noent).catch(function (er) { - t.ok(er) - t.end() - }) - }) - t.test('noent ignore async', function (t) { - isexe(noent, { ignoreErrors: true }).then(function (is) { - t.notOk(is) - t.end() - }) - }) - t.end() -}) - -t.test('no promise', function (t) { - global.Promise = null - var isexe = reset() - t.throws('try to meow a promise', function () { - isexe(meow) - }) - t.end() -}) - -t.test('access', { skip: accessSkip || winSkip }, function (t) { - runTest(t) -}) - -t.test('mode', { skip: winSkip }, function (t) { - delete fs.access - delete fs.accessSync - var isexe = reset() - t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) - t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) - runTest(t) -}) - -t.test('windows', function (t) { - global.TESTING_WINDOWS = true - var pathExt = '.EXE;.CAT;.CMD;.COM' - t.test('pathExt option', function (t) { - runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) - }) - t.test('pathExt env', function (t) { - process.env.PATHEXT = pathExt - runTest(t) - }) - t.test('no pathExt', function (t) { - // with a pathExt of '', any filename is fine. - // so the "fail" one would still pass. - runTest(t, { pathExt: '', skipFail: true }) - }) - t.test('pathext with empty entry', function (t) { - // with a pathExt of '', any filename is fine. - // so the "fail" one would still pass. - runTest(t, { pathExt: ';' + pathExt, skipFail: true }) - }) - t.end() -}) - -t.test('cleanup', function (t) { - rimraf.sync(fixture) - t.end() -}) - -function runTest (t, options) { - var isexe = reset() - - var optionsIgnore = Object.create(options || {}) - optionsIgnore.ignoreErrors = true - - if (!options || !options.skipFail) { - t.notOk(isexe.sync(fail, options)) - } - t.notOk(isexe.sync(noent, optionsIgnore)) - if (!options) { - t.ok(isexe.sync(meow)) - } else { - t.ok(isexe.sync(meow, options)) - } - - t.ok(isexe.sync(mine, options)) - t.ok(isexe.sync(ours, options)) - t.throws(function () { - isexe.sync(noent, options) - }) - - t.test('meow async', function (t) { - if (!options) { - isexe(meow, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - } else { - isexe(meow, options, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - } - }) - - t.test('mine async', function (t) { - isexe(mine, options, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - }) - - t.test('ours async', function (t) { - isexe(ours, options, function (er, is) { - if (er) { - throw er - } - t.ok(is) - t.end() - }) - }) - - if (!options || !options.skipFail) { - t.test('fail async', function (t) { - isexe(fail, options, function (er, is) { - if (er) { - throw er - } - t.notOk(is) - t.end() - }) - }) - } - - t.test('noent async', function (t) { - isexe(noent, options, function (er, is) { - t.ok(er) - t.notOk(is) - t.end() - }) - }) - - t.test('noent ignore async', function (t) { - isexe(noent, optionsIgnore, function (er, is) { - if (er) { - throw er - } - t.notOk(is) - t.end() - }) - }) - - t.test('directory is not executable', function (t) { - isexe(__dirname, options, function (er, is) { - if (er) { - throw er - } - t.notOk(is) - t.end() - }) - }) - - t.end() -} diff --git a/node_modules/isexe/windows.js b/node_modules/isexe/windows.js deleted file mode 100644 index 34996734d8..0000000000 --- a/node_modules/isexe/windows.js +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = isexe -isexe.sync = sync - -var fs = require('fs') - -function checkPathExt (path, options) { - var pathext = options.pathExt !== undefined ? - options.pathExt : process.env.PATHEXT - - if (!pathext) { - return true - } - - pathext = pathext.split(';') - if (pathext.indexOf('') !== -1) { - return true - } - for (var i = 0; i < pathext.length; i++) { - var p = pathext[i].toLowerCase() - if (p && path.substr(-p.length).toLowerCase() === p) { - return true - } - } - return false -} - -function checkStat (stat, path, options) { - if (!stat.isSymbolicLink() && !stat.isFile()) { - return false - } - return checkPathExt(path, options) -} - -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, path, options)) - }) -} - -function sync (path, options) { - return checkStat(fs.statSync(path), path, options) -} diff --git a/node_modules/jackspeak/LICENSE.md b/node_modules/jackspeak/LICENSE.md deleted file mode 100644 index 8cb5cc6e61..0000000000 --- a/node_modules/jackspeak/LICENSE.md +++ /dev/null @@ -1,55 +0,0 @@ -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. - -## Notices - -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. - -## Excuse - -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. - -## Patent - -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. - -## Reliability - -No contributor can revoke this license. - -## No Liability - -**_As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim._** diff --git a/node_modules/jackspeak/README.md b/node_modules/jackspeak/README.md deleted file mode 100644 index 4ffea4b321..0000000000 --- a/node_modules/jackspeak/README.md +++ /dev/null @@ -1,357 +0,0 @@ -# jackspeak - -A very strict and proper argument parser. - -Validate string, boolean, and number options, from the command -line and the environment. - -Call the `jack` method with a config object, and then chain -methods off of it. - -At the end, call the `.parse()` method, and you'll get an object -with `positionals` and `values` members. - -Any unrecognized configs or invalid values will throw an error. - -As long as you define configs using object literals, types will -be properly inferred and TypeScript will know what kinds of -things you got. - -If you give it a prefix for environment variables, then defaults -will be read from the environment, and parsed values written back -to it, so you can easily pass configs through to child processes. - -Automatically generates a `usage`/`help` banner by calling the -`.usage()` method. - -Unless otherwise noted, all methods return the object itself. - -## USAGE - -```js -import { jack } from 'jackspeak' -// this works too: -// const { jack } = require('jackspeak') - -const { positionals, values } = jack({ envPrefix: 'FOO' }) - .flag({ - asdf: { description: 'sets the asfd flag', short: 'a', default: true }, - 'no-asdf': { description: 'unsets the asdf flag', short: 'A' }, - foo: { description: 'another boolean', short: 'f' }, - }) - .optList({ - 'ip-addrs': { - description: 'addresses to ip things', - delim: ',', // defaults to '\n' - default: ['127.0.0.1'], - }, - }) - .parse([ - 'some', - 'positional', - '--ip-addrs', - '192.168.0.1', - '--ip-addrs', - '1.1.1.1', - 'args', - '--foo', // sets the foo flag - '-A', // short for --no-asdf, sets asdf flag to false - ]) - -console.log(process.env.FOO_ASDF) // '0' -console.log(process.env.FOO_FOO) // '1' -console.log(values) // { -// 'ip-addrs': ['192.168.0.1', '1.1.1.1'], -// foo: true, -// asdf: false, -// } -console.log(process.env.FOO_IP_ADDRS) // '192.168.0.1,1.1.1.1' -console.log(positionals) // ['some', 'positional', 'args'] -``` - -## `jack(options: JackOptions = {}) => Jack` - -Returns a `Jack` object that can be used to chain and add -field definitions. The other methods (apart from `validate()`, -`parse()`, and `usage()` obviously) return the same Jack object, -updated with the new types, so they can be chained together as -shown in the code examples. - -Options: - -- `allowPositionals` Defaults to true. Set to `false` to not - allow any positional arguments. - -- `envPrefix` Set to a string to write configs to and read - configs from the environment. For example, if set to `MY_APP` - then the `foo-bar` config will default based on the value of - `env.MY_APP_FOO_BAR` and will write back to that when parsed. - - Boolean values are written as `'1'` and `'0'`, and will be - treated as `true` if they're `'1'` or false otherwise. - - Number values are written with their `toString()` - representation. - - Strings are just strings. - - Any value with `multiple: true` will be represented in the - environment split by a delimiter, which defaults to `\n`. - -- `env` The place to read/write environment variables. Defaults - to `process.env`. - -- `usage` A short usage string to print at the top of the help - banner. - -- `stopAtPositional` Boolean, default false. Stop parsing opts - and flags at the first positional argument. This is useful if - you want to pass certain options to subcommands, like some - programs do, so you can stop parsing and pass the positionals - to the subcommand to parse. - -- `stopAtPositionalTest` Conditional `stopAtPositional`. Provide - a function that takes a positional argument string and returns - boolean. If it returns `true`, then parsing will stop. Useful - when _some_ subcommands should parse the rest of the command - line options, and others should not. - -### `Jack.heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6)` - -Define a short string heading, used in the `usage()` output. - -Indentation of the heading and subsequent description/config -usage entries (up until the next heading) is set by the heading -level. - -If the first usage item defined is a heading, it is always -treated as level 1, regardless of the argument provided. - -Headings level 1 and 2 will have a line of padding underneath -them. Headings level 3 through 6 will not. - -### `Jack.description(text: string, { pre?: boolean } = {})` - -Define a long string description, used in the `usage()` output. - -If the `pre` option is set to `true`, then whitespace will not be -normalized. However, if any line is too long for the width -allotted, it will still be wrapped. - -## Option Definitions - -Configs are defined by calling the appropriate field definition -method with an object where the keys are the long option name, -and the value defines the config. - -Options: - -- `type` Only needed for the `addFields` method, as the others - set it implicitly. Can be `'string'`, `'boolean'`, or - `'number'`. -- `multiple` Only needed for the `addFields` method, as the - others set it implicitly. Set to `true` to define an array - type. This means that it can be set on the CLI multiple times, - set as an array in the `values` - and it is represented in the environment as a delimited string. -- `short` A one-character shorthand for the option. -- `description` Some words to describe what this option is and - why you'd set it. -- `hint` (Only relevant for non-boolean types) The thing to show - in the usage output, like `--option=` -- `validate` A function that returns false (or throws) if an - option value is invalid. -- `validOptions` An array of strings or numbers that define the - valid values that can be set. This is not allowed on `boolean` - (flag) options. May be used along with a `validate()` method. -- `default` A default value for the field. Note that this may be - overridden by an environment variable, if present. - -### `Jack.flag({ [option: string]: definition, ... })` - -Define one or more boolean fields. - -Boolean options may be set to `false` by using a -`--no-${optionName}` argument, which will be implicitly created -if it's not defined to be something else. - -If a boolean option named `no-${optionName}` with the same -`multiple` setting is in the configuration, then that will be -treated as a negating flag. - -### `Jack.flagList({ [option: string]: definition, ... })` - -Define one or more boolean array fields. - -### `Jack.num({ [option: string]: definition, ... })` - -Define one or more number fields. These will be set in the -environment as a stringified number, and included in the `values` -object as a number. - -### `Jack.numList({ [option: string]: definition, ... })` - -Define one or more number list fields. These will be set in the -environment as a delimited set of stringified numbers, and -included in the `values` as a number array. - -### `Jack.opt({ [option: string]: definition, ... })` - -Define one or more string option fields. - -### `Jack.optList({ [option: string]: definition, ... })` - -Define one or more string list fields. - -### `Jack.addFields({ [option: string]: definition, ... })` - -Define one or more fields of any type. Note that `type` and -`multiple` must be set explicitly on each definition when using -this method. - -## Actions - -Use these methods on a Jack object that's already had its config -fields defined. - -### `Jack.parse(args: string[] = process.argv): { positionals: string[], values: OptionsResults }` - -Parse the arguments list, write to the environment if `envPrefix` -is set, and returned the parsed values and remaining positional -arguments. - -### `Jack.validate(o: any): asserts o is OptionsResults` - -Throws an error if the object provided is not a valid result set, -for the configurations defined thusfar. - -### `Jack.usage(): string` - -Returns the compiled `usage` string, with all option descriptions -and heading/description text, wrapped to the appropriate width -for the terminal. - -### `Jack.setConfigValues(options: OptionsResults, src?: string)` - -Validate the `options` argument, and set the default value for -each field that appears in the options. - -Values provided will be overridden by environment variables or -command line arguments. - -### `Jack.usageMarkdown(): string` - -Returns the compiled `usage` string, with all option descriptions -and heading/description text, but as markdown instead of -formatted for a terminal, for generating HTML documentation for -your CLI. - -## Some Example Code - -Also see [the examples -folder](https://github.com/isaacs/jackspeak/tree/master/examples) - -```js -import { jack } from 'jackspeak' - -const j = jack({ - // Optional - // This will be auto-generated from the descriptions if not supplied - // top level usage line, printed by -h - // will be auto-generated if not specified - usage: 'foo [options] ', -}) - .heading('The best Foo that ever Fooed') - .description( - ` - Executes all the files and interprets their output as - TAP formatted test result data. - - To parse TAP data from stdin, specify "-" as a filename. - `, - ) - - // flags don't take a value, they're boolean on or off, and can be - // turned off by prefixing with `--no-` - // so this adds support for -b to mean --bail, or -B to mean --no-bail - .flag({ - flag: { - // specify a short value if you like. this must be a single char - short: 'f', - // description is optional as well. - description: `Make the flags wave`, - // default value for flags is 'false', unless you change it - default: true, - }, - 'no-flag': { - // you can can always negate a flag with `--no-flag` - // specifying a negate option will let you define a short - // single-char option for negation. - short: 'F', - description: `Do not wave the flags`, - }, - }) - - // Options that take a value are specified with `opt()` - .opt({ - reporter: { - short: 'R', - description: 'the style of report to display', - }, - }) - - // if you want a number, say so, and jackspeak will enforce it - .num({ - jobs: { - short: 'j', - description: 'how many jobs to run in parallel', - default: 1, - }, - }) - - // A list is an option that can be specified multiple times, - // to expand into an array of all the settings. Normal opts - // will just give you the last value specified. - .optList({ - 'node-arg': {}, - }) - - // a flagList is an array of booleans, so `-ddd` is [true, true, true] - // count the `true` values to treat it as a counter. - .flagList({ - debug: { short: 'd' }, - }) - - // opts take a value, and is set to the string in the results - // you can combine multiple short-form flags together, but - // an opt will end the combine chain, posix-style. So, - // -bofilename would be like --bail --output-file=filename - .opt({ - 'output-file': { - short: 'o', - // optional: make it -o in the help output insead of -o - hint: 'file', - description: `Send the raw output to the specified file.`, - }, - }) - -// now we can parse argv like this: -const { values, positionals } = j.parse(process.argv) - -// or decide to show the usage banner -console.log(j.usage()) - -// or validate an object config we got from somewhere else -try { - j.validate(someConfig) -} catch (er) { - console.error('someConfig is not valid!', er) -} -``` - -## Name - -The inspiration for this module is [yargs](http://npm.im/yargs), which -is pirate talk themed. Yargs has all the features, and is infinitely -flexible. "Jackspeak" is the slang of the royal navy. This module -does not have all the features. It is declarative and rigid by design. diff --git a/node_modules/jackspeak/package.json b/node_modules/jackspeak/package.json deleted file mode 100644 index 51eaabdf35..0000000000 --- a/node_modules/jackspeak/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "name": "jackspeak", - "publishConfig": { - "tag": "v3-legacy" - }, - "version": "3.4.3", - "description": "A very strict and proper argument parser.", - "tshy": { - "main": true, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.js" - } - }, - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "type": "module", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "build-examples": "for i in examples/*.js ; do node $i -h > ${i/.js/.txt}; done", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" - }, - "license": "BlueOak-1.0.0", - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "devDependencies": { - "@types/node": "^20.7.0", - "@types/pkgjs__parseargs": "^0.10.1", - "prettier": "^3.2.5", - "tap": "^18.8.0", - "tshy": "^1.14.0", - "typedoc": "^0.25.1", - "typescript": "^5.2.2" - }, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/jackspeak.git" - }, - "keywords": [ - "argument", - "parser", - "args", - "option", - "flag", - "cli", - "command", - "line", - "parse", - "parsing" - ], - "author": "Isaac Z. Schlueter ", - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } -} diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md deleted file mode 100644 index ff2375e055..0000000000 --- a/node_modules/js-yaml/CHANGELOG.md +++ /dev/null @@ -1,616 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - - -## [4.1.0] - 2021-04-15 -### Added -- Types are now exported as `yaml.types.XXX`. -- Every type now has `options` property with original arguments kept as they were - (see `yaml.types.int.options` as an example). - -### Changed -- `Schema.extend()` now keeps old type order in case of conflicts - (e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`). - - -## [4.0.0] - 2021-01-03 -### Changed -- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes. -- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are - moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package. -- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump` - instead which are all now safe by default. -- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use - `yaml.DEFAULT_SCHEMA` instead. -- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead. -- `!!binary` now always mapped to `Uint8Array` on load. -- Reduced nesting of `/lib` folder. -- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal, - `0o1234` is octal, `1:23` is parsed as string instead of base60). -- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557. -- Line and column in exceptions are now formatted as `(X:Y)` instead of - `at line X, column Y` (also present in compact format), #332. -- Code snippet created in exceptions now contains multiple lines with line numbers. -- `dump()` now serializes `undefined` as `null` in collections and removes keys with - `undefined` in mappings, #571. -- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null. -- Custom tags starting with `!` are now dumped as `!tag` instead of `!`, #576. -- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258. - -### Added -- Added `.mjs` (es modules) support. -- Added `quotingType` and `forceQuotes` options for dumper to configure - string literal style, #290, #529. -- Added `styles: { '!!null': 'empty' }` option for dumper - (serializes `{ foo: null }` as "`foo: `"), #570. -- Added `replacer` option (similar to option in JSON.stringify), #339. -- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385. - -### Fixed -- Astral characters are no longer encoded by `dump()`, #587. -- "duplicate mapping key" exception now points at the correct column, #452. -- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception - instead of producing null, #321. -- `__proto__` key no longer overrides object prototype, #164. -- Removed `bower.json`. -- Tags are now url-decoded in `load()` and url-encoded in `dump()` - (previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed). -- Anchors now work correctly with empty nodes, #301. -- Fix incorrect parsing of invalid block mapping syntax, #418. -- Throw an error if block sequence/mapping indent contains a tab, #80. - - -## [3.14.1] - 2020-12-07 -### Security -- Fix possible code execution in (already unsafe) `.load()` (in &anchor). - - -## [3.14.0] - 2020-05-22 -### Changed -- Support `safe/loadAll(input, options)` variant of call. -- CI: drop outdated nodejs versions. -- Dev deps bump. - -### Fixed -- Quote `=` in plain scalars #519. -- Check the node type for `!` tag in case user manually specifies it. -- Verify that there are no null-bytes in input. -- Fix wrong quote position when writing condensed flow, #526. - - -## [3.13.1] - 2019-04-05 -### Security -- Fix possible code execution in (already unsafe) `.load()`, #480. - - -## [3.13.0] - 2019-03-20 -### Security -- Security fix: `safeLoad()` can hang when arrays with nested refs - used as key. Now throws exception for nested arrays. #475. - - -## [3.12.2] - 2019-02-26 -### Fixed -- Fix `noArrayIndent` option for root level, #468. - - -## [3.12.1] - 2019-01-05 -### Added -- Added `noArrayIndent` option, #432. - - -## [3.12.0] - 2018-06-02 -### Changed -- Support arrow functions without a block statement, #421. - - -## [3.11.0] - 2018-03-05 -### Added -- Add arrow functions suport for `!!js/function`. - -### Fixed -- Fix dump in bin/octal/hex formats for negative integers, #399. - - -## [3.10.0] - 2017-09-10 -### Fixed -- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. -- Dump astrals as codepoints instead of surrogate pair, #368. - - -## [3.9.1] - 2017-07-08 -### Fixed -- Ensure stack is present for custom errors in node 7.+, #351. - - -## [3.9.0] - 2017-07-08 -### Added -- Add `condenseFlow` option (to create pretty URL query params), #346. - -### Fixed -- Support array return from safeLoadAll/loadAll, #350. - - -## [3.8.4] - 2017-05-08 -### Fixed -- Dumper: prevent space after dash for arrays that wrap, #343. - - -## [3.8.3] - 2017-04-05 -### Fixed -- Should not allow numbers to begin and end with underscore, #335. - - -## [3.8.2] - 2017-03-02 -### Fixed -- Fix `!!float 123` (integers) parse, #333. -- Don't allow leading zeros in floats (except 0, 0.xxx). -- Allow positive exponent without sign in floats. - - -## [3.8.1] - 2017-02-07 -### Changed -- Maintenance: update browserified build. - - -## [3.8.0] - 2017-02-07 -### Fixed -- Fix reported position for `duplicated mapping key` errors. - Now points to block start instead of block end. - (#243, thanks to @shockey). - - -## [3.7.0] - 2016-11-12 -### Added -- Support polymorphism for tags (#300, thanks to @monken). - -### Fixed -- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). - - -## [3.6.1] - 2016-05-11 -### Fixed -- Fix output cut on a pipe, #286. - - -## [3.6.0] - 2016-04-16 -### Fixed -- Dumper rewrite, fix multiple bugs with trailing `\n`. - Big thanks to @aepsilon! -- Loader: fix leading/trailing newlines in block scalars, @aepsilon. - - -## [3.5.5] - 2016-03-17 -### Fixed -- Date parse fix: don't allow dates with on digit in month and day, #268. - - -## [3.5.4] - 2016-03-09 -### Added -- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. - - -## [3.5.3] - 2016-02-11 -### Changed -- Maintenance release. - - -## [3.5.2] - 2016-01-11 -### Changed -- Maintenance: missed comma in bower config. - - -## [3.5.1] - 2016-01-11 -### Changed -- Removed `inherit` dependency, #239. -- Better browserify workaround for esprima load. -- Demo rewrite. - - -## [3.5.0] - 2016-01-10 -### Fixed -- Dumper. Fold strings only, #217. -- Dumper. `norefs` option, to clone linked objects, #229. -- Loader. Throw a warning for duplicate keys, #166. -- Improved browserify support (mark `esprima` & `Buffer` excluded). - - -## [3.4.6] - 2015-11-26 -### Changed -- Use standalone `inherit` to keep browserified files clear. - - -## [3.4.5] - 2015-11-23 -### Added -- Added `lineWidth` option to dumper. - - -## [3.4.4] - 2015-11-21 -### Fixed -- Fixed floats dump (missed dot for scientific format), #220. -- Allow non-printable characters inside quoted scalars, #192. - - -## [3.4.3] - 2015-10-10 -### Changed -- Maintenance release - deps bump (esprima, argparse). - - -## [3.4.2] - 2015-09-09 -### Fixed -- Fixed serialization of duplicated entries in sequences, #205. - Thanks to @vogelsgesang. - - -## [3.4.1] - 2015-09-05 -### Fixed -- Fixed stacktrace handling in generated errors, for browsers (FF/IE). - - -## [3.4.0] - 2015-08-23 -### Changed -- Don't throw on warnings anymore. Use `onWarning` option to catch. -- Throw error on unknown tags (was warning before). -- Reworked internals of error class. - -### Fixed -- Fixed multiline keys dump, #197. Thanks to @tcr. -- Fixed heading line breaks in some scalars (regression). - - -## [3.3.1] - 2015-05-13 -### Added -- Added `.sortKeys` dumper option, thanks to @rjmunro. - -### Fixed -- Fixed astral characters support, #191. - - -## [3.3.0] - 2015-04-26 -### Changed -- Significantly improved long strings formatting in dumper, thanks to @isaacs. -- Strip BOM if exists. - - -## [3.2.7] - 2015-02-19 -### Changed -- Maintenance release. -- Updated dependencies. -- HISTORY.md -> CHANGELOG.md - - -## [3.2.6] - 2015-02-07 -### Fixed -- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). -- Fixed demo dates dump (#113, thanks to @Hypercubed). - - -## [3.2.5] - 2014-12-28 -### Fixed -- Fixed resolving of all built-in types on empty nodes. -- Fixed invalid warning on empty lines within quoted scalars and flow collections. -- Fixed bug: Tag on an empty node didn't resolve in some cases. - - -## [3.2.4] - 2014-12-19 -### Fixed -- Fixed resolving of !!null tag on an empty node. - - -## [3.2.3] - 2014-11-08 -### Fixed -- Implemented dumping of objects with circular and cross references. -- Partially fixed aliasing of constructed objects. (see issue #141 for details) - - -## [3.2.2] - 2014-09-07 -### Fixed -- Fixed infinite loop on unindented block scalars. -- Rewritten base64 encode/decode in binary type, to keep code licence clear. - - -## [3.2.1] - 2014-08-24 -### Fixed -- Nothig new. Just fix npm publish error. - - -## [3.2.0] - 2014-08-24 -### Added -- Added input piping support to CLI. - -### Fixed -- Fixed typo, that could cause hand on initial indent (#139). - - -## [3.1.0] - 2014-07-07 -### Changed -- 1.5x-2x speed boost. -- Removed deprecated `require('xxx.yml')` support. -- Significant code cleanup and refactoring. -- Internal API changed. If you used custom types - see updated examples. - Others are not affected. -- Even if the input string has no trailing line break character, - it will be parsed as if it has one. -- Added benchmark scripts. -- Moved bower files to /dist folder -- Bugfixes. - - -## [3.0.2] - 2014-02-27 -### Fixed -- Fixed bug: "constructor" string parsed as `null`. - - -## [3.0.1] - 2013-12-22 -### Fixed -- Fixed parsing of literal scalars. (issue #108) -- Prevented adding unnecessary spaces in object dumps. (issue #68) -- Fixed dumping of objects with very long (> 1024 in length) keys. - - -## [3.0.0] - 2013-12-16 -### Changed -- Refactored code. Changed API for custom types. -- Removed output colors in CLI, dump json by default. -- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser -- AMD support. -- Don't quote dumped strings because of `-` & `?` (if not first char). -- __Deprecated__ loading yaml files via `require()`, as not recommended - behaviour for node. - - -## [2.1.3] - 2013-10-16 -### Fixed -- Fix wrong loading of empty block scalars. - - -## [2.1.2] - 2013-10-07 -### Fixed -- Fix unwanted line breaks in folded scalars. - - -## [2.1.1] - 2013-10-02 -### Fixed -- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 -- Fixed reader bug in JSON-like sequences/mappings. - - -## [2.1.0] - 2013-06-05 -### Added -- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), - JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). -- Add `skipInvalid` dumper option. - -### Changed -- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` - and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. -- Use `safeLoad` for `require` extension. - -### Fixed -- Bug fix: export `NIL` constant from the public interface. - - -## [2.0.5] - 2013-04-26 -### Security -- Close security issue in !!js/function constructor. - Big thanks to @nealpoole for security audit. - - -## [2.0.4] - 2013-04-08 -### Changed -- Updated .npmignore to reduce package size - - -## [2.0.3] - 2013-02-26 -### Fixed -- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) - - -## [2.0.2] - 2013-02-15 -### Fixed -- Fixed input validation: tabs are printable characters. - - -## [2.0.1] - 2013-02-09 -### Fixed -- Fixed error, when options not passed to function cass - - -## [2.0.0] - 2013-02-09 -### Changed -- Full rewrite. New architecture. Fast one-stage parsing. -- Changed custom types API. -- Added YAML dumper. - - -## [1.0.3] - 2012-11-05 -### Fixed -- Fixed utf-8 files loading. - - -## [1.0.2] - 2012-08-02 -### Fixed -- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. -- Fix timstamps incorectly parsed in local time when no time part specified. - - -## [1.0.1] - 2012-07-07 -### Fixed -- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. -- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. - - -## [1.0.0] - 2012-07-01 -### Changed -- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. - Fixes #42. -- `require(filename)` now returns a single document and throws an Error if - file contains more than one document. -- CLI was merged back from js-yaml.bin - - -## [0.3.7] - 2012-02-28 -### Fixed -- Fix export of `addConstructor()`. Closes #39. - - -## [0.3.6] - 2012-02-22 -### Changed -- Removed AMD parts - too buggy to use. Need help to rewrite from scratch - -### Fixed -- Removed YUI compressor warning (renamed `double` variable). Closes #40. - - -## [0.3.5] - 2012-01-10 -### Fixed -- Workagound for .npmignore fuckup under windows. Thanks to airportyh. - - -## [0.3.4] - 2011-12-24 -### Fixed -- Fixes str[] for oldIEs support. -- Adds better has change support for browserified demo. -- improves compact output of Error. Closes #33. - - -## [0.3.3] - 2011-12-20 -### Added -- adds `compact` stringification of Errors. - -### Changed -- jsyaml executable moved to separate module. - - -## [0.3.2] - 2011-12-16 -### Added -- Added jsyaml executable. -- Added !!js/function support. Closes #12. - -### Fixed -- Fixes ug with block style scalars. Closes #26. -- All sources are passing JSLint now. -- Fixes bug in Safari. Closes #28. -- Fixes bug in Opers. Closes #29. -- Improves browser support. Closes #20. - - -## [0.3.1] - 2011-11-18 -### Added -- Added AMD support for browserified version. -- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. -- Added !!js/regexp and !!js/undefined types. Partially solves #12. - -### Changed -- Wrapped browserified js-yaml into closure. - -### Fixed -- Fixed the resolvement of non-specific tags. Closes #17. -- Fixed !!set mapping. -- Fixed month parse in dates. Closes #19. - - -## [0.3.0] - 2011-11-09 -### Added -- Added browserified version. Closes #13. -- Added live demo of browserified version. -- Ported some of the PyYAML tests. See #14. - -### Fixed -- Removed JS.Class dependency. Closes #3. -- Fixed timestamp bug when fraction was given. - - -## [0.2.2] - 2011-11-06 -### Fixed -- Fixed crash on docs without ---. Closes #8. -- Fixed multiline string parse -- Fixed tests/comments for using array as key - - -## [0.2.1] - 2011-11-02 -### Fixed -- Fixed short file read (<4k). Closes #9. - - -## [0.2.0] - 2011-11-02 -### Changed -- First public release - - -[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0 -[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0 -[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 -[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 -[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 -[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 -[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 -[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 -[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 -[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 -[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 -[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 -[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 -[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 -[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 -[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 -[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 -[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 -[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 -[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 -[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 -[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 -[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 -[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 -[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 -[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 -[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 -[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 -[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 -[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 -[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 -[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 -[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 -[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 -[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 -[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 -[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 -[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 -[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 -[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 -[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 -[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 -[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 -[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 -[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 -[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 -[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 -[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 -[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 -[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 -[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 -[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 -[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 -[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 -[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 -[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 -[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 -[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 -[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 -[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 -[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 -[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 -[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 -[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 -[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 -[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 -[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 -[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 -[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 -[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 -[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE deleted file mode 100644 index 09d3a29e93..0000000000 --- a/node_modules/js-yaml/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/js-yaml/README.md b/node_modules/js-yaml/README.md deleted file mode 100644 index 3cbc4bd2dd..0000000000 --- a/node_modules/js-yaml/README.md +++ /dev/null @@ -1,246 +0,0 @@ -JS-YAML - YAML 1.2 parser / writer for JavaScript -================================================= - -[![CI](https://github.com/nodeca/js-yaml/workflows/CI/badge.svg?branch=master)](https://github.com/nodeca/js-yaml/actions) -[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) - -__[Online Demo](http://nodeca.github.com/js-yaml/)__ - - -This is an implementation of [YAML](http://yaml.org/), a human-friendly data -serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was -completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. - - -Installation ------------- - -### YAML module for node.js - -``` -npm install js-yaml -``` - - -### CLI executable - -If you want to inspect your YAML files from CLI, install js-yaml globally: - -``` -npm install -g js-yaml -``` - -#### Usage - -``` -usage: js-yaml [-h] [-v] [-c] [-t] file - -Positional arguments: - file File with YAML document(s) - -Optional arguments: - -h, --help Show this help message and exit. - -v, --version Show program's version number and exit. - -c, --compact Display errors in compact mode - -t, --trace Show stack trace on error -``` - - -API ---- - -Here we cover the most 'useful' methods. If you need advanced details (creating -your own tags), see [examples](https://github.com/nodeca/js-yaml/tree/master/examples) -for more info. - -``` javascript -const yaml = require('js-yaml'); -const fs = require('fs'); - -// Get document, or throw exception on error -try { - const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8')); - console.log(doc); -} catch (e) { - console.log(e); -} -``` - - -### load (string [ , options ]) - -Parses `string` as single YAML document. Returns either a -plain object, a string, a number, `null` or `undefined`, or throws `YAMLException` on error. By default, does -not support regexps, functions and undefined. - -options: - -- `filename` _(default: null)_ - string to be used as a file path in - error/warning messages. -- `onWarning` _(default: null)_ - function to call on warning messages. - Loader will call this function with an instance of `YAMLException` for each warning. -- `schema` _(default: `DEFAULT_SCHEMA`)_ - specifies a schema to use. - - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: - http://www.yaml.org/spec/1.2/spec.html#id2802346 - - `JSON_SCHEMA` - all JSON-supported types: - http://www.yaml.org/spec/1.2/spec.html#id2803231 - - `CORE_SCHEMA` - same as `JSON_SCHEMA`: - http://www.yaml.org/spec/1.2/spec.html#id2804923 - - `DEFAULT_SCHEMA` - all supported YAML types. -- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. - -NOTE: This function **does not** understand multi-document sources, it throws -exception on those. - -NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. -So, the JSON schema is not as strictly defined in the YAML specification. -It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. -The core schema also has no such restrictions. It allows binary notation for integers. - - -### loadAll (string [, iterator] [, options ]) - -Same as `load()`, but understands multi-document sources. Applies -`iterator` to each document if specified, or returns array of documents. - -``` javascript -const yaml = require('js-yaml'); - -yaml.loadAll(data, function (doc) { - console.log(doc); -}); -``` - - -### dump (object [ , options ]) - -Serializes `object` as a YAML document. Uses `DEFAULT_SCHEMA`, so it will -throw an exception if you try to dump regexps or functions. However, you can -disable exceptions by setting the `skipInvalid` option to `true`. - -options: - -- `indent` _(default: 2)_ - indentation width to use (in spaces). -- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements -- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function - in the safe schema) and skip pairs and single values with such types. -- `flowLevel` _(default: -1)_ - specifies level of nesting, when to switch from - block to flow style for collections. -1 means block style everwhere -- `styles` - "tag" => "style" map. Each tag may have own set of styles. -- `schema` _(default: `DEFAULT_SCHEMA`)_ specifies a schema to use. -- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a - function, use the function to sort the keys. -- `lineWidth` _(default: `80`)_ - set max line width. Set `-1` for unlimited width. -- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references -- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older - yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 -- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. -- `quotingType` _(`'` or `"`, default: `'`)_ - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. -- `forceQuotes` _(default: `false`)_ - if `true`, all non-key strings will be quoted even if they normally don't need to. -- `replacer` - callback `function (key, value)` called recursively on each key/value in source object (see `replacer` docs for `JSON.stringify`). - -The following table show availlable styles (e.g. "canonical", -"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml -output is shown on the right side after `=>` (default setting) or `->`: - -``` none -!!null - "canonical" -> "~" - "lowercase" => "null" - "uppercase" -> "NULL" - "camelcase" -> "Null" - -!!int - "binary" -> "0b1", "0b101010", "0b1110001111010" - "octal" -> "0o1", "0o52", "0o16172" - "decimal" => "1", "42", "7290" - "hexadecimal" -> "0x1", "0x2A", "0x1C7A" - -!!bool - "lowercase" => "true", "false" - "uppercase" -> "TRUE", "FALSE" - "camelcase" -> "True", "False" - -!!float - "lowercase" => ".nan", '.inf' - "uppercase" -> ".NAN", '.INF' - "camelcase" -> ".NaN", '.Inf' -``` - -Example: - -``` javascript -dump(object, { - 'styles': { - '!!null': 'canonical' // dump null as ~ - }, - 'sortKeys': true // sort object keys -}); -``` - -Supported YAML types --------------------- - -The list of standard YAML tags and corresponding JavaScript types. See also -[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and -[YAML types repository](http://yaml.org/type/). - -``` -!!null '' # null -!!bool 'yes' # bool -!!int '3...' # number -!!float '3.14...' # number -!!binary '...base64...' # buffer -!!timestamp 'YYYY-...' # date -!!omap [ ... ] # array of key-value pairs -!!pairs [ ... ] # array or array pairs -!!set { ... } # array of objects with given keys and null values -!!str '...' # string -!!seq [ ... ] # array -!!map { ... } # object -``` - -**JavaScript-specific tags** - -See [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) for -extra types. - - -Caveats -------- - -Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects -or arrays as keys, and stringifies (by calling `toString()` method) them at the -moment of adding them. - -``` yaml ---- -? [ foo, bar ] -: - baz -? { foo: bar } -: - baz - - baz -``` - -``` javascript -{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } -``` - -Also, reading of properties on implicit block mapping keys is not supported yet. -So, the following YAML document cannot be loaded. - -``` yaml -&anchor foo: - foo: bar - *anchor: duplicate key - baz: bat - *anchor: duplicate key -``` - - -js-yaml for enterprise ----------------------- - -Available as part of the Tidelift Subscription - -The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/js-yaml/index.js b/node_modules/js-yaml/index.js deleted file mode 100644 index bcb7eba7ad..0000000000 --- a/node_modules/js-yaml/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - - -var loader = require('./lib/loader'); -var dumper = require('./lib/dumper'); - - -function renamed(from, to) { - return function () { - throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + - 'Use yaml.' + to + ' instead, which is now safe by default.'); - }; -} - - -module.exports.Type = require('./lib/type'); -module.exports.Schema = require('./lib/schema'); -module.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe'); -module.exports.JSON_SCHEMA = require('./lib/schema/json'); -module.exports.CORE_SCHEMA = require('./lib/schema/core'); -module.exports.DEFAULT_SCHEMA = require('./lib/schema/default'); -module.exports.load = loader.load; -module.exports.loadAll = loader.loadAll; -module.exports.dump = dumper.dump; -module.exports.YAMLException = require('./lib/exception'); - -// Re-export all types in case user wants to create custom schema -module.exports.types = { - binary: require('./lib/type/binary'), - float: require('./lib/type/float'), - map: require('./lib/type/map'), - null: require('./lib/type/null'), - pairs: require('./lib/type/pairs'), - set: require('./lib/type/set'), - timestamp: require('./lib/type/timestamp'), - bool: require('./lib/type/bool'), - int: require('./lib/type/int'), - merge: require('./lib/type/merge'), - omap: require('./lib/type/omap'), - seq: require('./lib/type/seq'), - str: require('./lib/type/str') -}; - -// Removed functions from JS-YAML 3.0.x -module.exports.safeLoad = renamed('safeLoad', 'load'); -module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); -module.exports.safeDump = renamed('safeDump', 'dump'); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json deleted file mode 100644 index 17574da805..0000000000 --- a/node_modules/js-yaml/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "js-yaml", - "version": "4.1.0", - "description": "YAML 1.2 parser and serializer", - "keywords": [ - "yaml", - "parser", - "serializer", - "pyyaml" - ], - "author": "Vladimir Zapparov ", - "contributors": [ - "Aleksey V Zapparov (http://www.ixti.net/)", - "Vitaly Puzrin (https://github.com/puzrin)", - "Martin Grenfell (http://got-ravings.blogspot.com)" - ], - "license": "MIT", - "repository": "nodeca/js-yaml", - "files": [ - "index.js", - "lib/", - "bin/", - "dist/" - ], - "bin": { - "js-yaml": "bin/js-yaml.js" - }, - "module": "./dist/js-yaml.mjs", - "exports": { - ".": { - "import": "./dist/js-yaml.mjs", - "require": "./index.js" - }, - "./package.json": "./package.json" - }, - "scripts": { - "lint": "eslint .", - "test": "npm run lint && mocha", - "coverage": "npm run lint && nyc mocha && nyc report --reporter html", - "demo": "npm run lint && node support/build_demo.js", - "gh-demo": "npm run demo && gh-pages -d demo -f", - "browserify": "rollup -c support/rollup.config.js", - "prepublishOnly": "npm run gh-demo" - }, - "unpkg": "dist/js-yaml.min.js", - "jsdelivr": "dist/js-yaml.min.js", - "dependencies": { - "argparse": "^2.0.1" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.0.0", - "ansi": "^0.3.1", - "benchmark": "^2.1.4", - "codemirror": "^5.13.4", - "eslint": "^7.0.0", - "fast-check": "^2.8.0", - "gh-pages": "^3.1.0", - "mocha": "^8.2.1", - "nyc": "^15.1.0", - "rollup": "^2.34.1", - "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-terser": "^7.0.2", - "shelljs": "^0.8.4" - } -} diff --git a/node_modules/jsonc-parser/CHANGELOG.md b/node_modules/jsonc-parser/CHANGELOG.md deleted file mode 100644 index 3414a3f1ff..0000000000 --- a/node_modules/jsonc-parser/CHANGELOG.md +++ /dev/null @@ -1,76 +0,0 @@ -3.3.0 2022-06-24 -================= -- `JSONVisitor.onObjectBegin` and `JSONVisitor.onArrayBegin` can now return `false` to instruct the visitor that no children should be visited. - - -3.2.0 2022-08-30 -================= -- update the version of the bundled Javascript files to `es2020`. -- include all `const enum` values in the bundled JavaScript files (`ScanError`, `SyntaxKind`, `ParseErrorCode`). - -3.1.0 2022-07-07 -================== - * added new API `FormattingOptions.keepLines` : It leaves the initial line positions in the formatting. - -3.0.0 2020-11-13 -================== - * fixed API spec for `parseTree`. Can return `undefine` for empty input. - * added new API `FormattingOptions.insertFinalNewline`. - - -2.3.0 2020-07-03 -================== - * new API `ModificationOptions.isArrayInsertion`: If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then `modify` will insert a new item at that location instead of overwriting its contents. - * `ModificationOptions.formattingOptions` is now optional. If not set, newly inserted content will not be formatted. - - -2.2.0 2019-10-25 -================== - * added `ParseOptions.allowEmptyContent`. Default is `false`. - * new API `getNodeType`: Returns the type of a value returned by parse. - * `parse`: Fix issue with empty property name - -2.1.0 2019-03-29 -================== - * `JSONScanner` and `JSONVisitor` return lineNumber / character. - -2.0.0 2018-04-12 -================== - * renamed `Node.columnOffset` to `Node.colonOffset` - * new API `getNodePath`: Gets the JSON path of the given JSON DOM node - * new API `findNodeAtOffset`: Finds the most inner node at the given offset. If `includeRightBound` is set, also finds nodes that end at the given offset. - -1.0.3 2018-03-07 -================== - * provide ems modules - -1.0.2 2018-03-05 -================== - * added the `visit.onComment` API, reported when comments are allowed. - * added the `ParseErrorCode.InvalidCommentToken` enum value, reported when comments are disallowed. - -1.0.1 -================== - * added the `format` API: computes edits to format a JSON document. - * added the `modify` API: computes edits to insert, remove or replace a property or value in a JSON document. - * added the `allyEdits` API: applies edits to a document - -1.0.0 -================== - * remove nls dependency (remove `getParseErrorMessage`) - -0.4.2 / 2017-05-05 -================== - * added `ParseError.offset` & `ParseError.length` - -0.4.1 / 2017-04-02 -================== - * added `ParseOptions.allowTrailingComma` - -0.4.0 / 2017-02-23 -================== - * fix for `getLocation`. Now `getLocation` inside an object will always return a property from inside that property. Can be empty string if the object has no properties or if the offset is before a actual property `{ "a": { | }} will return location ['a', ' ']` - -0.3.0 / 2017-01-17 -================== - * Updating to typescript 2.0 \ No newline at end of file diff --git a/node_modules/jsonc-parser/LICENSE.md b/node_modules/jsonc-parser/LICENSE.md deleted file mode 100644 index 1c65de1db3..0000000000 --- a/node_modules/jsonc-parser/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Microsoft - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/jsonc-parser/README.md b/node_modules/jsonc-parser/README.md deleted file mode 100644 index d569b7064f..0000000000 --- a/node_modules/jsonc-parser/README.md +++ /dev/null @@ -1,364 +0,0 @@ -# jsonc-parser -Scanner and parser for JSON with comments. - -[![npm Package](https://img.shields.io/npm/v/jsonc-parser.svg?style=flat-square)](https://www.npmjs.org/package/jsonc-parser) -[![NPM Downloads](https://img.shields.io/npm/dm/jsonc-parser.svg)](https://npmjs.org/package/jsonc-parser) -[![Build Status](https://github.com/microsoft/node-jsonc-parser/workflows/Tests/badge.svg)](https://github.com/microsoft/node-jsonc-parser/workflows/Tests) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) - -Why? ----- -JSONC is JSON with JavaScript style comments. This node module provides a scanner and fault tolerant parser that can process JSONC but is also useful for standard JSON. - - the *scanner* tokenizes the input string into tokens and token offsets - - the *visit* function implements a 'SAX' style parser with callbacks for the encountered properties and values. - - the *parseTree* function computes a hierarchical DOM with offsets representing the encountered properties and values. - - the *parse* function evaluates the JavaScript object represented by JSON string in a fault tolerant fashion. - - the *getLocation* API returns a location object that describes the property or value located at a given offset in a JSON document. - - the *findNodeAtLocation* API finds the node at a given location path in a JSON DOM. - - the *format* API computes edits to format a JSON document. - - the *modify* API computes edits to insert, remove or replace a property or value in a JSON document. - - the *applyEdits* API applies edits to a document. - -Installation ------------- - -``` -npm install --save jsonc-parser -``` - -API ---- - -### Scanner: -```typescript - -/** - * Creates a JSON scanner on the given text. - * If ignoreTrivia is set, whitespaces or comments are ignored. - */ -export function createScanner(text: string, ignoreTrivia: boolean = false): JSONScanner; - -/** - * The scanner object, representing a JSON scanner at a position in the input string. - */ -export interface JSONScanner { - /** - * Sets the scan position to a new offset. A call to 'scan' is needed to get the first token. - */ - setPosition(pos: number): any; - /** - * Read the next token. Returns the token code. - */ - scan(): SyntaxKind; - /** - * Returns the zero-based current scan position, which is after the last read token. - */ - getPosition(): number; - /** - * Returns the last read token. - */ - getToken(): SyntaxKind; - /** - * Returns the last read token value. The value for strings is the decoded string content. For numbers it's of type number, for boolean it's true or false. - */ - getTokenValue(): string; - /** - * The zero-based start offset of the last read token. - */ - getTokenOffset(): number; - /** - * The length of the last read token. - */ - getTokenLength(): number; - /** - * The zero-based start line number of the last read token. - */ - getTokenStartLine(): number; - /** - * The zero-based start character (column) of the last read token. - */ - getTokenStartCharacter(): number; - /** - * An error code of the last scan. - */ - getTokenError(): ScanError; -} -``` - -### Parser: -```typescript - -export interface ParseOptions { - disallowComments?: boolean; - allowTrailingComma?: boolean; - allowEmptyContent?: boolean; -} -/** - * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. - * Therefore always check the errors list to find out if the input was valid. - */ -export declare function parse(text: string, errors?: {error: ParseErrorCode;}[], options?: ParseOptions): any; - -/** - * Parses the given text and invokes the visitor functions for each object, array and literal reached. - */ -export declare function visit(text: string, visitor: JSONVisitor, options?: ParseOptions): any; - -/** - * Visitor called by {@linkcode visit} when parsing JSON. - * - * The visitor functions have the following common parameters: - * - `offset`: Global offset within the JSON document, starting at 0 - * - `startLine`: Line number, starting at 0 - * - `startCharacter`: Start character (column) within the current line, starting at 0 - * - * Additionally some functions have a `pathSupplier` parameter which can be used to obtain the - * current `JSONPath` within the document. - */ -export interface JSONVisitor { - /** - * Invoked when an open brace is encountered and an object is started. The offset and length represent the location of the open brace. - * When `false` is returned, the array items will not be visited. - */ - onObjectBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; - - /** - * Invoked when a property is encountered. The offset and length represent the location of the property name. - * The `JSONPath` created by the `pathSupplier` refers to the enclosing JSON object, it does not include the - * property name yet. - */ - onObjectProperty?: (property: string, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; - /** - * Invoked when a closing brace is encountered and an object is completed. The offset and length represent the location of the closing brace. - */ - onObjectEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * Invoked when an open bracket is encountered. The offset and length represent the location of the open bracket. - * When `false` is returned, the array items will not be visited.* - */ - onArrayBegin?: (offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void | boolean; - /** - * Invoked when a closing bracket is encountered. The offset and length represent the location of the closing bracket. - */ - onArrayEnd?: (offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * Invoked when a literal value is encountered. The offset and length represent the location of the literal value. - */ - onLiteralValue?: (value: any, offset: number, length: number, startLine: number, startCharacter: number, pathSupplier: () => JSONPath) => void; - /** - * Invoked when a comma or colon separator is encountered. The offset and length represent the location of the separator. - */ - onSeparator?: (character: string, offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * When comments are allowed, invoked when a line or block comment is encountered. The offset and length represent the location of the comment. - */ - onComment?: (offset: number, length: number, startLine: number, startCharacter: number) => void; - /** - * Invoked on an error. - */ - onError?: (error: ParseErrorCode, offset: number, length: number, startLine: number, startCharacter: number) => void; -} - -/** - * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result. - */ -export declare function parseTree(text: string, errors?: ParseError[], options?: ParseOptions): Node | undefined; - -export declare type NodeType = "object" | "array" | "property" | "string" | "number" | "boolean" | "null"; -export interface Node { - type: NodeType; - value?: any; - offset: number; - length: number; - colonOffset?: number; - parent?: Node; - children?: Node[]; -} - -``` - -### Utilities: -```typescript -/** - * Takes JSON with JavaScript-style comments and remove - * them. Optionally replaces every none-newline character - * of comments with a replaceCharacter - */ -export declare function stripComments(text: string, replaceCh?: string): string; - -/** - * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index. - */ -export declare function getLocation(text: string, position: number): Location; - -/** - * A {@linkcode JSONPath} segment. Either a string representing an object property name - * or a number (starting at 0) for array indices. - */ -export declare type Segment = string | number; -export declare type JSONPath = Segment[]; -export interface Location { - /** - * The previous property key or literal value (string, number, boolean or null) or undefined. - */ - previousNode?: Node; - /** - * The path describing the location in the JSON document. The path consists of a sequence strings - * representing an object property or numbers for array indices. - */ - path: JSONPath; - /** - * Matches the locations path against a pattern consisting of strings (for properties) and numbers (for array indices). - * '*' will match a single segment, of any property name or index. - * '**' will match a sequence of segments or no segment, of any property name or index. - */ - matches: (patterns: JSONPath) => boolean; - /** - * If set, the location's offset is at a property key. - */ - isAtPropertyKey: boolean; -} - -/** - * Finds the node at the given path in a JSON DOM. - */ -export function findNodeAtLocation(root: Node, path: JSONPath): Node | undefined; - -/** - * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset. - */ -export function findNodeAtOffset(root: Node, offset: number, includeRightBound?: boolean) : Node | undefined; - -/** - * Gets the JSON path of the given JSON DOM node - */ -export function getNodePath(node: Node): JSONPath; - -/** - * Evaluates the JavaScript object of the given JSON DOM node - */ -export function getNodeValue(node: Node): any; - -/** - * Computes the edit operations needed to format a JSON document. - * - * @param documentText The input text - * @param range The range to format or `undefined` to format the full content - * @param options The formatting options - * @returns The edit operations describing the formatting changes to the original document following the format described in {@linkcode EditResult}. - * To apply the edit operations to the input, use {@linkcode applyEdits}. - */ -export function format(documentText: string, range: Range, options: FormattingOptions): EditResult; - -/** - * Computes the edit operations needed to modify a value in the JSON document. - * - * @param documentText The input text - * @param path The path of the value to change. The path represents either to the document root, a property or an array item. - * If the path points to an non-existing property or item, it will be created. - * @param value The new value for the specified property or item. If the value is undefined, - * the property or item will be removed. - * @param options Options - * @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}. - * To apply the edit operations to the input, use {@linkcode applyEdits}. - */ -export function modify(text: string, path: JSONPath, value: any, options: ModificationOptions): EditResult; - -/** - * Applies edits to an input string. - * @param text The input text - * @param edits Edit operations following the format described in {@linkcode EditResult}. - * @returns The text with the applied edits. - * @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}. - */ -export function applyEdits(text: string, edits: EditResult): string; - -/** - * An edit result describes a textual edit operation. It is the result of a {@linkcode format} and {@linkcode modify} operation. - * It consist of one or more edits describing insertions, replacements or removals of text segments. - * * The offsets of the edits refer to the original state of the document. - * * No two edits change or remove the same range of text in the original document. - * * Multiple edits can have the same offset if they are multiple inserts, or an insert followed by a remove or replace. - * * The order in the array defines which edit is applied first. - * To apply an edit result use {@linkcode applyEdits}. - * In general multiple EditResults must not be concatenated because they might impact each other, producing incorrect or malformed JSON data. - */ -export type EditResult = Edit[]; - -/** - * Represents a text modification - */ -export interface Edit { - /** - * The start offset of the modification. - */ - offset: number; - /** - * The length of the modification. Must not be negative. Empty length represents an *insert*. - */ - length: number; - /** - * The new content. Empty content represents a *remove*. - */ - content: string; -} - -/** - * A text range in the document -*/ -export interface Range { - /** - * The start offset of the range. - */ - offset: number; - /** - * The length of the range. Must not be negative. - */ - length: number; -} - -/** - * Options used by {@linkcode format} when computing the formatting edit operations - */ -export interface FormattingOptions { - /** - * If indentation is based on spaces (`insertSpaces` = true), then what is the number of spaces that make an indent? - */ - tabSize: number; - /** - * Is indentation based on spaces? - */ - insertSpaces: boolean; - /** - * The default 'end of line' character - */ - eol: string; -} - -/** - * Options used by {@linkcode modify} when computing the modification edit operations - */ -export interface ModificationOptions { - /** - * Formatting options. If undefined, the newly inserted code will be inserted unformatted. - */ - formattingOptions?: FormattingOptions; - /** - * Default false. If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then - * {@linkcode modify} will insert a new item at that location instead of overwriting its contents. - */ - isArrayInsertion?: boolean; - /** - * Optional function to define the insertion index given an existing list of properties. - */ - getInsertionIndex?: (properties: string[]) => number; -} -``` - - -License -------- - -(MIT License) - -Copyright 2018, Microsoft diff --git a/node_modules/jsonc-parser/SECURITY.md b/node_modules/jsonc-parser/SECURITY.md deleted file mode 100644 index f7b89984f0..0000000000 --- a/node_modules/jsonc-parser/SECURITY.md +++ /dev/null @@ -1,41 +0,0 @@ - - -## Security - -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). - -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). - -If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). - -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). - -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: - - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) - * Full paths of source file(s) related to the manifestation of the issue - * The location of the affected source code (tag/branch/commit or direct URL) - * Any special configuration required to reproduce the issue - * Step-by-step instructions to reproduce the issue - * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. - -## Preferred Languages - -We prefer all communications to be in English. - -## Policy - -Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). - - \ No newline at end of file diff --git a/node_modules/jsonc-parser/package.json b/node_modules/jsonc-parser/package.json deleted file mode 100644 index 6536a20b66..0000000000 --- a/node_modules/jsonc-parser/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "jsonc-parser", - "version": "3.3.1", - "description": "Scanner and parser for JSON with comments.", - "main": "./lib/umd/main.js", - "typings": "./lib/umd/main.d.ts", - "module": "./lib/esm/main.js", - "author": "Microsoft Corporation", - "repository": { - "type": "git", - "url": "https://github.com/microsoft/node-jsonc-parser" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/microsoft/node-jsonc-parser/issues" - }, - "devDependencies": { - "@types/mocha": "^10.0.7", - "@types/node": "^18.x", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", - "eslint": "^8.57.0", - "mocha": "^10.4.0", - "rimraf": "^5.0.7", - "typescript": "^5.4.2" - }, - "scripts": { - "prepack": "npm run clean && npm run compile-esm && npm run test && npm run remove-sourcemap-refs", - "compile": "tsc -p ./src && npm run lint", - "compile-esm": "tsc -p ./src/tsconfig.esm.json", - "remove-sourcemap-refs": "node ./build/remove-sourcemap-refs.js", - "clean": "rimraf lib", - "watch": "tsc -w -p ./src", - "test": "npm run compile && mocha ./lib/umd/test", - "lint": "eslint src/**/*.ts" - } -} diff --git a/node_modules/jsonpointer/LICENSE.md b/node_modules/jsonpointer/LICENSE.md deleted file mode 100644 index ac32f5dfdd..0000000000 --- a/node_modules/jsonpointer/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/jsonpointer/README.md b/node_modules/jsonpointer/README.md deleted file mode 100644 index 81c1c3960d..0000000000 --- a/node_modules/jsonpointer/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# JSON Pointer for Node.js - -This is an implementation of [JSON Pointer](https://tools.ietf.org/html/rfc6901). - -## CLI - -Looking to filter JSON from the command line? Check out [jsonpointer-cli](https://github.com/joeyespo/jsonpointer-cli). - -## Usage -```javascript -var jsonpointer = require('jsonpointer'); -var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]}; - -jsonpointer.get(obj, '/foo'); // returns 1 -jsonpointer.get(obj, '/bar/baz'); // returns 2 -jsonpointer.get(obj, '/qux/0'); // returns 3 -jsonpointer.get(obj, '/qux/1'); // returns 4 -jsonpointer.get(obj, '/qux/2'); // returns 5 -jsonpointer.get(obj, '/quo'); // returns undefined - -jsonpointer.set(obj, '/foo', 6); // sets obj.foo = 6; -jsonpointer.set(obj, '/qux/-', 6) // sets obj.qux = [3, 4, 5, 6] - -var pointer = jsonpointer.compile('/foo') -pointer.get(obj) // returns 1 -pointer.set(obj, 1) // sets obj.foo = 1 -``` - -## Testing - - $ npm test - All tests pass. - $ - -[![Node.js CI](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml/badge.svg)](https://github.com/janl/node-jsonpointer/actions/workflows/node.js.yml) - -## Author - -(c) 2011-2021 Jan Lehnardt & Marc Bachmann - -Thanks to all contributors. - -## License - -MIT License. diff --git a/node_modules/jsonpointer/jsonpointer.d.ts b/node_modules/jsonpointer/jsonpointer.d.ts deleted file mode 100644 index 705bebca0a..0000000000 --- a/node_modules/jsonpointer/jsonpointer.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -interface JSONPointer { - /** - * Looks up a JSON pointer in an object - */ - get(object: Object): any; - - - /** - * Set a value for a JSON pointer on object - */ - set(object: Object, value: any): void; -} - - -declare namespace JSONPointer { - /** - * Looks up a JSON pointer in an object - */ - function get(object: Object, pointer: string): any; - - - /** - * Set a value for a JSON pointer on object - */ - function set(object: Object, pointer: string, value: any): void; - - - /** - * Builds a JSONPointer instance from a pointer value. - */ - function compile(pointer: string): JSONPointer; -} - - -export = JSONPointer; diff --git a/node_modules/jsonpointer/jsonpointer.js b/node_modules/jsonpointer/jsonpointer.js deleted file mode 100644 index dad907d763..0000000000 --- a/node_modules/jsonpointer/jsonpointer.js +++ /dev/null @@ -1,100 +0,0 @@ -var hasExcape = /~/ -var escapeMatcher = /~[01]/g -function escapeReplacer (m) { - switch (m) { - case '~1': return '/' - case '~0': return '~' - } - throw new Error('Invalid tilde escape: ' + m) -} - -function untilde (str) { - if (!hasExcape.test(str)) return str - return str.replace(escapeMatcher, escapeReplacer) -} - -function setter (obj, pointer, value) { - var part - var hasNextPart - - for (var p = 1, len = pointer.length; p < len;) { - if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj - - part = untilde(pointer[p++]) - hasNextPart = len > p - - if (typeof obj[part] === 'undefined') { - // support setting of /- - if (Array.isArray(obj) && part === '-') { - part = obj.length - } - - // support nested objects/array when setting values - if (hasNextPart) { - if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] - else obj[part] = {} - } - } - - if (!hasNextPart) break - obj = obj[part] - } - - var oldValue = obj[part] - if (value === undefined) delete obj[part] - else obj[part] = value - return oldValue -} - -function compilePointer (pointer) { - if (typeof pointer === 'string') { - pointer = pointer.split('/') - if (pointer[0] === '') return pointer - throw new Error('Invalid JSON pointer.') - } else if (Array.isArray(pointer)) { - for (const part of pointer) { - if (typeof part !== 'string' && typeof part !== 'number') { - throw new Error('Invalid JSON pointer. Must be of type string or number.') - } - } - return pointer - } - - throw new Error('Invalid JSON pointer.') -} - -function get (obj, pointer) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - var len = pointer.length - if (len === 1) return obj - - for (var p = 1; p < len;) { - obj = obj[untilde(pointer[p++])] - if (len === p) return obj - if (typeof obj !== 'object' || obj === null) return undefined - } -} - -function set (obj, pointer, value) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') - return setter(obj, pointer, value) -} - -function compile (pointer) { - var compiled = compilePointer(pointer) - return { - get: function (object) { - return get(object, compiled) - }, - set: function (object, value) { - return set(object, compiled, value) - } - } -} - -exports.get = get -exports.set = set -exports.compile = compile diff --git a/node_modules/jsonpointer/package.json b/node_modules/jsonpointer/package.json deleted file mode 100644 index a832ba9fc4..0000000000 --- a/node_modules/jsonpointer/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "jsonpointer", - "description": "Simple JSON Addressing.", - "tags": [ - "util", - "simple", - "util", - "utility" - ], - "version": "5.0.1", - "author": "Jan Lehnardt ", - "contributors": [ - "Joe Hildebrand ", - "Marc Bachmann " - ], - "repository": { - "type": "git", - "url": "https://github.com/janl/node-jsonpointer.git" - }, - "bugs": { - "url": "http://github.com/janl/node-jsonpointer/issues" - }, - "engines": { - "node": ">=0.10.0" - }, - "main": "./jsonpointer", - "typings": "jsonpointer.d.ts", - "files": [ - "jsonpointer.js", - "jsonpointer.d.ts" - ], - "scripts": { - "test": "npm run test:standard && npm run test:all", - "test:standard": "standard", - "test:all": "node test.js", - "semantic-release": "semantic-release pre && npm publish && semantic-release post" - }, - "license": "MIT", - "devDependencies": { - "semantic-release": "^18.0.0", - "standard": "^16.0.4" - }, - "standard": { - "ignore": [ - "test.js" - ] - } -} diff --git a/node_modules/katex/LICENSE b/node_modules/katex/LICENSE deleted file mode 100644 index 37c6433e3b..0000000000 --- a/node_modules/katex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2020 Khan Academy and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/katex/README.md b/node_modules/katex/README.md deleted file mode 100644 index 09e86f575a..0000000000 --- a/node_modules/katex/README.md +++ /dev/null @@ -1,125 +0,0 @@ -

              - - - KaTeX - -

              - -[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) -[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) -[![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI) -[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/main/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) -[![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions) -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) -![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip) -[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX) -[![Financial Contributors on Open Collective](https://opencollective.com/katex/all/badge.svg?label=financial+contributors)](https://opencollective.com/katex) - -KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. - - * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](https://www.intmath.com/cg5/katex-mathjax-comparison.php). - * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. - * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. - * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. - -KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 11. - -KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). - -Try out KaTeX [on the demo page](https://katex.org/#demo)! - -## Getting started - -### Starter template - -```html - - - - - - - - - - - - - ... - -``` - -You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. - -For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). - -### API - -Call `katex.render` to render a TeX expression directly into a DOM element. -For example: - -```js -katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { - throwOnError: false -}); -``` - -Call `katex.renderToString` to generate an HTML string of the rendered math, -e.g., for server-side rendering. For example: - -```js -var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { - throwOnError: false -}); -// '...' -``` - -Make sure to include the CSS and font files in both cases. -If you are doing all rendering on the server, there is no need to include the -JavaScript on the client. - -The examples above use the `throwOnError: false` option, which renders invalid -inputs as the TeX source code in red (by default), with the error message as -hover text. For other available options, see the -[API documentation](https://katex.org/docs/api.html), -[options documentation](https://katex.org/docs/options.html), and -[handling errors documentation](https://katex.org/docs/error.html). - -## Demo and Documentation - -Learn more about using KaTeX [on the website](https://katex.org)! - -## Contributors - -### Code Contributors - -This project exists thanks to all the people who contribute code. If you'd like to help, see [our guide to contributing code](CONTRIBUTING.md). -Code contributors - -### Financial Contributors - -Become a financial contributor and help us sustain our community. - -#### Individuals - -Contribute on Open Collective - -#### Organizations - -Support this project with your organization. Your logo will show up here with a link to your website. - -Organization 1 -Organization 2 -Organization 3 -Organization 4 -Organization 5 -Organization 6 -Organization 7 -Organization 8 -Organization 9 -Organization 10 - -## License - -KaTeX is licensed under the [MIT License](https://opensource.org/licenses/MIT). diff --git a/node_modules/katex/cli.js b/node_modules/katex/cli.js deleted file mode 100755 index 20f6237b32..0000000000 --- a/node_modules/katex/cli.js +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env node -// Simple CLI for KaTeX. -// Reads TeX from stdin, outputs HTML to stdout. -// To run this from the repository, you must first build KaTeX by running -// `yarn` and `yarn build`. - -/* eslint no-console:0 */ - -let katex; -try { - katex = require("./"); -} catch (e) { - console.error( - "KaTeX could not import, likely because dist/katex.js is missing."); - console.error("Please run 'yarn' and 'yarn build' before running"); - console.error("cli.js from the KaTeX repository."); - console.error(); - throw e; -} -const {version} = require("./package.json"); -const fs = require("fs"); - -const program = require("commander").version(version); -for (const prop in katex.SETTINGS_SCHEMA) { - if (katex.SETTINGS_SCHEMA.hasOwnProperty(prop)) { - const opt = katex.SETTINGS_SCHEMA[prop]; - if (opt.cli !== false) { - program.option(opt.cli || "--" + prop, opt.cliDescription || - opt.description, opt.cliProcessor, opt.cliDefault); - } - } -} -program.option("-f, --macro-file ", - "Read macro definitions, one per line, from the given file.") - .option("-i, --input ", "Read LaTeX input from the given file.") - .option("-o, --output ", "Write html output to the given file."); - -let options; - -function readMacros() { - if (options.macroFile) { - fs.readFile(options.macroFile, "utf-8", function(err, data) { - if (err) {throw err;} - splitMacros(data.toString().split('\n')); - }); - } else { - splitMacros([]); - } -} - -function splitMacros(macroStrings) { - // Override macros from macro file (if any) - // with macros from command line (if any) - macroStrings = macroStrings.concat(options.macro); - - const macros = {}; - - for (const m of macroStrings) { - const i = m.search(":"); - if (i !== -1) { - macros[m.substring(0, i).trim()] = m.substring(i + 1).trim(); - } - } - - options.macros = macros; - readInput(); -} - -function readInput() { - let input = ""; - - if (options.input) { - fs.readFile(options.input, "utf-8", function(err, data) { - if (err) {throw err;} - input = data.toString(); - writeOutput(input); - }); - } else { - process.stdin.on("data", function(chunk) { - input += chunk.toString(); - }); - - process.stdin.on("end", function() { - writeOutput(input); - }); - } -} - -function writeOutput(input) { - // --format specifies the KaTeX output - const outputFile = options.output; - options.output = options.format; - - const output = katex.renderToString(input, options) + "\n"; - - if (outputFile) { - fs.writeFile(outputFile, output, function(err) { - if (err) { - return console.log(err); - } - }); - } else { - console.log(output); - } -} - -if (require.main !== module) { - module.exports = program; -} else { - options = program.parse(process.argv).opts(); - readMacros(); -} diff --git a/node_modules/katex/contrib/auto-render/README.md b/node_modules/katex/contrib/auto-render/README.md deleted file mode 100644 index ea793f1c09..0000000000 --- a/node_modules/katex/contrib/auto-render/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Auto-render extension - -This is an extension to automatically render all of the math inside of text. It -searches all of the text nodes in a given element for the given delimiters, and -renders the math in place. - -See [Auto-render extension documentation](https://katex.org/docs/autorender.html) -for more information. diff --git a/node_modules/katex/contrib/auto-render/auto-render.js b/node_modules/katex/contrib/auto-render/auto-render.js deleted file mode 100644 index eceee5b980..0000000000 --- a/node_modules/katex/contrib/auto-render/auto-render.js +++ /dev/null @@ -1,142 +0,0 @@ -/* eslint no-console:0 */ - -import katex from "katex"; -import splitAtDelimiters from "./splitAtDelimiters"; - -/* Note: optionsCopy is mutated by this method. If it is ever exposed in the - * API, we should copy it before mutating. - */ -const renderMathInText = function(text, optionsCopy) { - const data = splitAtDelimiters(text, optionsCopy.delimiters); - if (data.length === 1 && data[0].type === 'text') { - // There is no formula in the text. - // Let's return null which means there is no need to replace - // the current text node with a new one. - return null; - } - - const fragment = document.createDocumentFragment(); - - for (let i = 0; i < data.length; i++) { - if (data[i].type === "text") { - fragment.appendChild(document.createTextNode(data[i].data)); - } else { - const span = document.createElement("span"); - let math = data[i].data; - // Override any display mode defined in the settings with that - // defined by the text itself - optionsCopy.displayMode = data[i].display; - try { - if (optionsCopy.preProcess) { - math = optionsCopy.preProcess(math); - } - katex.render(math, span, optionsCopy); - } catch (e) { - if (!(e instanceof katex.ParseError)) { - throw e; - } - optionsCopy.errorCallback( - "KaTeX auto-render: Failed to parse `" + data[i].data + - "` with ", - e - ); - fragment.appendChild(document.createTextNode(data[i].rawData)); - continue; - } - fragment.appendChild(span); - } - } - - return fragment; -}; - -const renderElem = function(elem, optionsCopy) { - for (let i = 0; i < elem.childNodes.length; i++) { - const childNode = elem.childNodes[i]; - if (childNode.nodeType === 3) { - // Text node - // Concatenate all sibling text nodes. - // Webkit browsers split very large text nodes into smaller ones, - // so the delimiters may be split across different nodes. - let textContentConcat = childNode.textContent; - let sibling = childNode.nextSibling; - let nSiblings = 0; - while (sibling && (sibling.nodeType === Node.TEXT_NODE)) { - textContentConcat += sibling.textContent; - sibling = sibling.nextSibling; - nSiblings++; - } - const frag = renderMathInText(textContentConcat, optionsCopy); - if (frag) { - // Remove extra text nodes - for (let j = 0; j < nSiblings; j++) { - childNode.nextSibling.remove(); - } - i += frag.childNodes.length - 1; - elem.replaceChild(frag, childNode); - } else { - // If the concatenated text does not contain math - // the siblings will not either - i += nSiblings; - } - } else if (childNode.nodeType === 1) { - // Element node - const className = ' ' + childNode.className + ' '; - const shouldRender = optionsCopy.ignoredTags.indexOf( - childNode.nodeName.toLowerCase()) === -1 && - optionsCopy.ignoredClasses.every( - x => className.indexOf(' ' + x + ' ') === -1); - - if (shouldRender) { - renderElem(childNode, optionsCopy); - } - } - // Otherwise, it's something else, and ignore it. - } -}; - -const renderMathInElement = function(elem, options) { - if (!elem) { - throw new Error("No element provided to render"); - } - - const optionsCopy = {}; - - // Object.assign(optionsCopy, option) - for (const option in options) { - if (options.hasOwnProperty(option)) { - optionsCopy[option] = options[option]; - } - } - - // default options - optionsCopy.delimiters = optionsCopy.delimiters || [ - {left: "$$", right: "$$", display: true}, - {left: "\\(", right: "\\)", display: false}, - // LaTeX uses $…$, but it ruins the display of normal `$` in text: - // {left: "$", right: "$", display: false}, - // $ must come after $$ - - // Render AMS environments even if outside $$…$$ delimiters. - {left: "\\begin{equation}", right: "\\end{equation}", display: true}, - {left: "\\begin{align}", right: "\\end{align}", display: true}, - {left: "\\begin{alignat}", right: "\\end{alignat}", display: true}, - {left: "\\begin{gather}", right: "\\end{gather}", display: true}, - {left: "\\begin{CD}", right: "\\end{CD}", display: true}, - - {left: "\\[", right: "\\]", display: true}, - ]; - optionsCopy.ignoredTags = optionsCopy.ignoredTags || [ - "script", "noscript", "style", "textarea", "pre", "code", "option", - ]; - optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; - optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; - - // Enable sharing of global macros defined via `\gdef` between different - // math elements within a single call to `renderMathInElement`. - optionsCopy.macros = optionsCopy.macros || {}; - - renderElem(elem, optionsCopy); -}; - -export default renderMathInElement; diff --git a/node_modules/katex/contrib/auto-render/index.html b/node_modules/katex/contrib/auto-render/index.html deleted file mode 100644 index d0849b5c45..0000000000 --- a/node_modules/katex/contrib/auto-render/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Auto-render test - - - - - -
              - This is some text $math \frac12$ other text $\unsupported$ - - Other node \[ \text{displaymath} \frac{1}{2} \] blah $$ \int_2^3 $$ - - and some more text \(and math\) blah. And $math with a - \$ sign$. -
              -        Stuff in a $pre tag$
              -      
              -

              An AMS environment without $$…$$ delimiters.

              -

              \begin{equation} \begin{split} a &=b+c\\ &=e+f \end{split} \end{equation}

              -
              - - - diff --git a/node_modules/katex/contrib/auto-render/splitAtDelimiters.js b/node_modules/katex/contrib/auto-render/splitAtDelimiters.js deleted file mode 100644 index 21b59030a5..0000000000 --- a/node_modules/katex/contrib/auto-render/splitAtDelimiters.js +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint no-constant-condition:0 */ -const findEndOfMath = function(delimiter, text, startIndex) { - // Adapted from - // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx - let index = startIndex; - let braceLevel = 0; - - const delimLength = delimiter.length; - - while (index < text.length) { - const character = text[index]; - - if (braceLevel <= 0 && - text.slice(index, index + delimLength) === delimiter) { - return index; - } else if (character === "\\") { - index++; - } else if (character === "{") { - braceLevel++; - } else if (character === "}") { - braceLevel--; - } - - index++; - } - - return -1; -}; - -const escapeRegex = function(string) { - return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -const amsRegex = /^\\begin{/; - -const splitAtDelimiters = function(text, delimiters) { - let index; - const data = []; - - const regexLeft = new RegExp( - "(" + delimiters.map((x) => escapeRegex(x.left)).join("|") + ")" - ); - - while (true) { - index = text.search(regexLeft); - if (index === -1) { - break; - } - if (index > 0) { - data.push({ - type: "text", - data: text.slice(0, index), - }); - text = text.slice(index); // now text starts with delimiter - } - // ... so this always succeeds: - const i = delimiters.findIndex((delim) => text.startsWith(delim.left)); - index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length); - if (index === -1) { - break; - } - const rawData = text.slice(0, index + delimiters[i].right.length); - const math = amsRegex.test(rawData) - ? rawData - : text.slice(delimiters[i].left.length, index); - data.push({ - type: "math", - data: math, - rawData, - display: delimiters[i].display, - }); - text = text.slice(index + delimiters[i].right.length); - } - - if (text !== "") { - data.push({ - type: "text", - data: text, - }); - } - - return data; -}; - -export default splitAtDelimiters; diff --git a/node_modules/katex/contrib/auto-render/test/auto-render-spec.js b/node_modules/katex/contrib/auto-render/test/auto-render-spec.js deleted file mode 100644 index e4038b59aa..0000000000 --- a/node_modules/katex/contrib/auto-render/test/auto-render-spec.js +++ /dev/null @@ -1,363 +0,0 @@ -/** - * @jest-environment jsdom - */ -import splitAtDelimiters from "../splitAtDelimiters"; -import renderMathInElement from "../auto-render"; - -beforeEach(function() { - expect.extend({ - toSplitInto: function(actual, result, delimiters) { - const message = { - pass: true, - message: () => "'" + actual + "' split correctly", - }; - - const split = - splitAtDelimiters(actual, delimiters); - - if (split.length !== result.length) { - message.pass = false; - message.message = () => "Different number of splits: " + - split.length + " vs. " + result.length + " (" + - JSON.stringify(split) + " vs. " + - JSON.stringify(result) + ")"; - return message; - } - - for (let i = 0; i < split.length; i++) { - const real = split[i]; - const correct = result[i]; - - let good = true; - let diff; - - if (real.type !== correct.type) { - good = false; - diff = "type"; - } else if (real.data !== correct.data) { - good = false; - diff = "data"; - } else if (real.display !== correct.display) { - good = false; - diff = "display"; - } - - if (!good) { - message.pass = false; - message.message = () => "Difference at split " + - (i + 1) + ": " + JSON.stringify(real) + - " vs. " + JSON.stringify(correct) + - " (" + diff + " differs)"; - break; - } - } - - return message; - }, - }); -}); - -describe("A delimiter splitter", function() { - it("doesn't split when there are no delimiters", function() { - expect("hello").toSplitInto( - [ - {type: "text", data: "hello"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("doesn't create a math node with only one left delimiter", function() { - expect("hello ( world").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "text", data: "( world"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("doesn't split when there's only a right delimiter", function() { - expect("hello ) world").toSplitInto( - [ - {type: "text", data: "hello ) world"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("splits when there are both delimiters", function() { - expect("hello ( world ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("splits on multi-character delimiters", function() { - expect("hello [[ world ]] boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "[[ world ]]", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "[[", right: "]]", display: false}, - ]); - expect("hello \\begin{equation} world \\end{equation} boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: "\\begin{equation} world \\end{equation}", - rawData: "\\begin{equation} world \\end{equation}", - display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "\\begin{equation}", right: "\\end{equation}", - display: false}, - ]); - }); - - it("splits multiple times", function() { - expect("hello ( world ) boo ( more ) stuff").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo "}, - {type: "math", data: " more ", - rawData: "( more )", display: false}, - {type: "text", data: " stuff"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("leaves the ending when there's only a left delimiter", function() { - expect("hello ( world ) boo ( left").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo "}, - {type: "text", data: "( left"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("doesn't split when close delimiters are in {}s", function() { - expect("hello ( world { ) } ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world { ) } ", - rawData: "( world { ) } )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - - expect("hello ( world { { } ) } ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world { { } ) } ", - rawData: "( world { { } ) } )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - }); - - it("correctly processes sequences of $..$", function() { - expect("$hello$$world$$boo$").toSplitInto( - [ - {type: "math", data: "hello", - rawData: "$hello$", display: false}, - {type: "math", data: "world", - rawData: "$world$", display: false}, - {type: "math", data: "boo", - rawData: "$boo$", display: false}, - ], - [ - {left: "$", right: "$", display: false}, - ]); - }); - - it("doesn't split at escaped delimiters", function() { - expect("hello ( world \\) ) boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world \\) ", - rawData: "( world \\) )", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "(", right: ")", display: false}, - ]); - - /* TODO(emily): make this work maybe? - expect("hello \\( ( world ) boo").toSplitInto( - "(", ")", - [ - {type: "text", data: "hello \\( "}, - {type: "math", data: " world ", - rawData: "( world )", display: false}, - {type: "text", data: " boo"}, - ]); - */ - }); - - it("splits when the right and left delimiters are the same", function() { - expect("hello $ world $ boo").toSplitInto( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "$ world $", display: false}, - {type: "text", data: " boo"}, - ], - [ - {left: "$", right: "$", display: false}, - ]); - }); - - it("ignores \\$", function() { - expect("$x = \\$5$").toSplitInto( - [ - {type: "math", data: "x = \\$5", - rawData: "$x = \\$5$", display: false}, - ], - [ - {left: "$", right: "$", display: false}, - ]); - }); - - it("remembers which delimiters are display-mode", function() { - const startData = "hello ( world ) boo"; - - expect(splitAtDelimiters(startData, - [{left:"(", right:")", display:true}])).toEqual( - [ - {type: "text", data: "hello "}, - {type: "math", data: " world ", - rawData: "( world )", display: true}, - {type: "text", data: " boo"}, - ]); - }); - - it("handles nested delimiters irrespective of order", function() { - expect(splitAtDelimiters("$\\fbox{\\(hi\\)}$", - [ - {left:"\\(", right:"\\)", display:false}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "\\fbox{\\(hi\\)}", - rawData: "$\\fbox{\\(hi\\)}$", display: false}, - ]); - expect(splitAtDelimiters("\\(\\fbox{$hi$}\\)", - [ - {left:"\\(", right:"\\)", display:false}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "\\fbox{$hi$}", - rawData: "\\(\\fbox{$hi$}\\)", display: false}, - ]); - }); - - it("handles a mix of $ and $$", function() { - expect(splitAtDelimiters("$hello$world$$boo$$", - [ - {left:"$$", right:"$$", display:true}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "hello", - rawData: "$hello$", display: false}, - {type: "text", data: "world"}, - {type: "math", data: "boo", - rawData: "$$boo$$", display: true}, - ]); - expect(splitAtDelimiters("$hello$$world$$$boo$$", - [ - {left:"$$", right:"$$", display:true}, - {left:"$", right:"$", display:false}, - ])).toEqual( - [ - {type: "math", data: "hello", - rawData: "$hello$", display: false}, - {type: "math", data: "world", - rawData: "$world$", display: false}, - {type: "math", data: "boo", - rawData: "$$boo$$", display: true}, - ]); - }); -}); - -describe("Pre-process callback", function() { - it("replace `-squared` with `^2 `", function() { - const el1 = document.createElement('div'); - el1.textContent = 'Circle equation: $x-squared + y-squared = r-squared$.'; - const el2 = document.createElement('div'); - el2.textContent = 'Circle equation: $x^2 + y^2 = r^2$.'; - const delimiters = [{left: "$", right: "$", display: false}]; - renderMathInElement(el1, { - delimiters, - preProcess: math => math.replace(/-squared/g, '^2'), - }); - renderMathInElement(el2, {delimiters}); - expect(el1.innerHTML).toEqual(el2.innerHTML); - }); -}); - -describe("Parse adjacent text nodes", function() { - it("parse adjacent text nodes with math", function() { - const textNodes = ['\\[', - 'x^2 + y^2 = r^2', - '\\]']; - const el = document.createElement('div'); - for (let i = 0; i < textNodes.length; i++) { - const txt = document.createTextNode(textNodes[i]); - el.appendChild(txt); - } - const el2 = document.createElement('div'); - const txt = document.createTextNode(textNodes.join('')); - el2.appendChild(txt); - const delimiters = [{left: "\\[", right: "\\]", display: true}]; - renderMathInElement(el, {delimiters}); - renderMathInElement(el2, {delimiters}); - expect(el).toStrictEqual(el2); - }); - - it("parse adjacent text nodes without math", function() { - const textNodes = ['Lorem ipsum dolor', - 'sit amet', - 'consectetur adipiscing elit']; - const el = document.createElement('div'); - for (let i = 0; i < textNodes.length; i++) { - const txt = document.createTextNode(textNodes[i]); - el.appendChild(txt); - } - const el2 = document.createElement('div'); - for (let i = 0; i < textNodes.length; i++) { - const txt = document.createTextNode(textNodes[i]); - el2.appendChild(txt); - } - const delimiters = [{left: "\\[", right: "\\]", display: true}]; - renderMathInElement(el, {delimiters}); - expect(el).toStrictEqual(el2); - }); -}); diff --git a/node_modules/katex/contrib/copy-tex/README.md b/node_modules/katex/contrib/copy-tex/README.md deleted file mode 100644 index 614c796f0d..0000000000 --- a/node_modules/katex/contrib/copy-tex/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Copy-tex extension - -This extension modifies the copy/paste behavior in any browser supporting the -[Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent) -so that, when selecting and copying KaTeX-rendered elements, the text -content of the resulting clipboard renders KaTeX elements as their LaTeX source -surrounded by specified delimiters. (The HTML content of the resulting -clipboard remains the selected HTML content, as it normally would.) -The default delimiters are `$...$` for inline math and `$$...$$` for display -math, but you can easy switch them to e.g. `\(...\)` and `\[...\]` by -modifying `copyDelimiters` in [the source code](copy-tex.js). -Note that a selection containing part of a KaTeX formula gets extended to -include the entire KaTeX formula. - -## Usage - -This extension isn't part of KaTeX proper, so the script should be separately -included in the page. - -```html - -``` - -(Note that, as of KaTeX 0.16.0, there is no longer a corresponding CSS file.) - -See [index.html](index.html) for an example. -(To run this example from a clone of the repository, run `yarn start` -in the root KaTeX directory, and then visit -http://localhost:7936/contrib/copy-tex/index.html -with your web browser.) - -If you want to build your own custom copy handler based on this one, -copy the `copy-tex.js` into your codebase and replace the `require` -statement with `require('katex/contrib/copy-tex/katex2tex.js')`. - -ECMAScript module is also available: -```html - -``` diff --git a/node_modules/katex/contrib/copy-tex/copy-tex.js b/node_modules/katex/contrib/copy-tex/copy-tex.js deleted file mode 100644 index 79c91d5953..0000000000 --- a/node_modules/katex/contrib/copy-tex/copy-tex.js +++ /dev/null @@ -1,51 +0,0 @@ -// @flow - -import katexReplaceWithTex from './katex2tex'; - -// Return
              element containing node, or null if not found. -function closestKatex(node: Node): ?Element { - // If node is a Text Node, for example, go up to containing Element, - // where we can apply the `closest` method. - const element: ?Element = - (node instanceof Element ? node : node.parentElement); - return element && element.closest('.katex'); -} - -// Global copy handler to modify behavior on/within .katex elements. -document.addEventListener('copy', function(event: ClipboardEvent) { - const selection = window.getSelection(); - if (selection.isCollapsed || !event.clipboardData) { - return; // default action OK if selection is empty or unchangeable - } - const clipboardData = event.clipboardData; - const range = selection.getRangeAt(0); - - // When start point is within a formula, expand to entire formula. - const startKatex = closestKatex(range.startContainer); - if (startKatex) { - range.setStartBefore(startKatex); - } - - // Similarly, when end point is within a formula, expand to entire formula. - const endKatex = closestKatex(range.endContainer); - if (endKatex) { - range.setEndAfter(endKatex); - } - - const fragment = range.cloneContents(); - if (!fragment.querySelector('.katex-mathml')) { - return; // default action OK if no .katex-mathml elements - } - - const htmlContents = Array.prototype.map.call(fragment.childNodes, - (el) => (el instanceof Text ? el.textContent : el.outerHTML) - ).join(''); - - // Preserve usual HTML copy/paste behavior. - clipboardData.setData('text/html', htmlContents); - // Rewrite plain-text version. - clipboardData.setData('text/plain', - katexReplaceWithTex(fragment).textContent); - // Prevent normal copy handling. - event.preventDefault(); -}); diff --git a/node_modules/katex/contrib/copy-tex/index.html b/node_modules/katex/contrib/copy-tex/index.html deleted file mode 100644 index fa59d27326..0000000000 --- a/node_modules/katex/contrib/copy-tex/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - Copy-tex test - - - - - - -

              Copy-tex test

              -

              Try copy/pasting some of the text below!

              -

              - Here is some \(\KaTeX\) math: $$ x^2+y^2=z^2 $$ - The variables are \(x\), \(y\), and \(z\), - which are all in \(\mathbb{R}^+\). - Q.E.D. -

              - - - diff --git a/node_modules/katex/contrib/copy-tex/katex2tex.js b/node_modules/katex/contrib/copy-tex/katex2tex.js deleted file mode 100644 index 927003ca30..0000000000 --- a/node_modules/katex/contrib/copy-tex/katex2tex.js +++ /dev/null @@ -1,61 +0,0 @@ -// @flow - -export interface CopyDelimiters { - inline: [string, string], - display: [string, string], -} - -// Set these to how you want inline and display math to be delimited. -export const defaultCopyDelimiters: CopyDelimiters = { - inline: ['$', '$'], // alternative: ['\(', '\)'] - display: ['$$', '$$'], // alternative: ['\[', '\]'] -}; - -// Replace .katex elements with their TeX source ( element). -// Modifies fragment in-place. Useful for writing your own 'copy' handler, -// as in copy-tex.js. -export function katexReplaceWithTex( - fragment: DocumentFragment, - copyDelimiters: CopyDelimiters = defaultCopyDelimiters -): DocumentFragment { - // Remove .katex-html blocks that are preceded by .katex-mathml blocks - // (which will get replaced below). - const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); - for (let i = 0; i < katexHtml.length; i++) { - const element = katexHtml[i]; - if (element.remove) { - element.remove(); - } else if (element.parentNode) { - element.parentNode.removeChild(element); - } - } - // Replace .katex-mathml elements with their annotation (TeX source) - // descendant, with inline delimiters. - const katexMathml = fragment.querySelectorAll('.katex-mathml'); - for (let i = 0; i < katexMathml.length; i++) { - const element = katexMathml[i]; - const texSource = element.querySelector('annotation'); - if (texSource) { - if (element.replaceWith) { - element.replaceWith(texSource); - } else if (element.parentNode) { - element.parentNode.replaceChild(texSource, element); - } - texSource.innerHTML = copyDelimiters.inline[0] + - texSource.innerHTML + copyDelimiters.inline[1]; - } - } - // Switch display math to display delimiters. - const displays = fragment.querySelectorAll('.katex-display annotation'); - for (let i = 0; i < displays.length; i++) { - const element = displays[i]; - element.innerHTML = copyDelimiters.display[0] + - element.innerHTML.substr(copyDelimiters.inline[0].length, - element.innerHTML.length - copyDelimiters.inline[0].length - - copyDelimiters.inline[1].length) - + copyDelimiters.display[1]; - } - return fragment; -} - -export default katexReplaceWithTex; diff --git a/node_modules/katex/contrib/mathtex-script-type/README.md b/node_modules/katex/contrib/mathtex-script-type/README.md deleted file mode 100644 index 39b6dfc064..0000000000 --- a/node_modules/katex/contrib/mathtex-script-type/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# `math/tex` Custom Script Type Extension - -This is an extension to automatically display code inside `script` tags with `type=math/tex` using KaTeX. -This script type is commonly used by MathJax, so this can be used to support compatibility with MathJax. - -### Usage - -This extension isn't part of KaTeX proper, so the script should be separately -included in the page, in addition to KaTeX. - -Load the extension by adding the following line to your HTML file. - -```html - -``` -You can download the script and use it locally, or from a local KaTeX installation instead. - -For example, in the following simple page, we first load KaTeX as usual. -Then, in the body, we use a `math/tex` script to typeset the equation `x+\sqrt{1-x^2}`. - - -```html - - - - - - - - - - - -``` - -ECMAScript module is also available: -```html - diff --git a/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js b/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js deleted file mode 100644 index 592b201952..0000000000 --- a/node_modules/katex/contrib/mathtex-script-type/mathtex-script-type.js +++ /dev/null @@ -1,22 +0,0 @@ -import katex from "katex"; - -let scripts = document.body.getElementsByTagName("script"); -scripts = Array.prototype.slice.call(scripts); -scripts.forEach(function(script) { - if (!script.type || !script.type.match(/math\/tex/i)) { - return -1; - } - const display = - (script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null); - - const katexElement = document.createElement(display ? "div" : "span"); - katexElement.setAttribute("class", - display ? "equation" : "inline-equation"); - try { - katex.render(script.text, katexElement, {displayMode: display}); - } catch (err) { - //console.error(err); linter doesn't like this - katexElement.textContent = script.text; - } - script.parentNode.replaceChild(katexElement, script); -}); diff --git a/node_modules/katex/contrib/mhchem/README.md b/node_modules/katex/contrib/mhchem/README.md deleted file mode 100644 index 515e5ce7e9..0000000000 --- a/node_modules/katex/contrib/mhchem/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# mhchem extension - -This extension adds to KaTeX the `\ce` and `\pu` functions from the [mhchem](https://mhchem.github.io/MathJax-mhchem/) package. - -### Usage - -This extension isn't part of core KaTeX, so the script should be separately included. Write the following line into the HTML page's ``. Place it *after* the line that calls `katex.js`, and if you make use of the [auto-render](https://katex.org/docs/autorender.html) extension, place it *before* the line that calls `auto-render.js`. - -```html - -``` - -If you remove the `defer` attribute from this tag, then you must also remove the `defer` attribute from the ` -``` - -And call it like so: - -```javascript -const options = { - "strings": { - "content": "Some Markdown to lint." - } -}; - -const results = globalThis.markdownlint.lintSync(options).toString(); -``` - -## Examples - -For ideas how to integrate `markdownlint` into your workflow, refer to the -following projects or one of the tools in the [Related section](#related): - -- [.NET Documentation][dot-net-doc] ([Search repository][dot-net-doc-search]) -- [ally.js][ally-js] ([Search repository][ally-js-search]) -- [Apache Airflow][airflow] ([Search repository][airflow-search]) -- [Boostnote][boostnote] ([Search repository][boostnote-search]) -- [CodiMD][codimd] ([Search repository][codimd-search]) -- [Electron][electron] ([Search repository][electron-search]) -- [ESLint][eslint] ([Search repository][eslint-search]) -- [Garden React Components][garden] ([Search repository][garden-search]) -- [MDN Web Docs][mdn] ([Search repository][mdn-search]) -- [MkDocs][mkdocs] ([Search repository][mkdocs-search]) -- [Mocha][mocha] ([Search repository][mocha-search]) -- [Pi-hole documentation][pi-hole] ([Search repository][pi-hole-search]) -- [Reactable][reactable] ([Search repository][reactable-search]) -- [V8][v8] ([Search repository][v8-search]) -- [webhint][webhint] ([Search repository][webhint-search]) -- [webpack][webpack] ([Search repository][webpack-search]) -- [WordPress][wordpress] ([Search repository][wordpress-search]) - -For more advanced integration scenarios: - -- [GitHub Docs content linter][content-linter] -- [GitHub's `markdownlint-github` repository][markdownlint-github] - -[ally-js]: https://allyjs.io/ -[ally-js-search]: https://github.com/medialize/ally.js/search?q=markdownlint -[airflow]: https://airflow.apache.org -[airflow-search]: https://github.com/apache/airflow/search?q=markdownlint -[boostnote]: https://boostnote.io/ -[boostnote-search]: https://github.com/BoostIO/Boostnote/search?q=markdownlint -[codimd]: https://github.com/hackmdio/codimd -[codimd-search]: https://github.com/hackmdio/codimd/search?q=markdownlint -[content-linter]: https://docs.github.com/en/contributing/collaborating-on-github-docs/using-the-content-linter -[dot-net-doc]: https://docs.microsoft.com/en-us/dotnet/ -[dot-net-doc-search]: https://github.com/dotnet/docs/search?q=markdownlint -[electron]: https://www.electronjs.org -[electron-search]: https://github.com/electron/electron/search?q=markdownlint -[eslint]: https://eslint.org/ -[eslint-search]: https://github.com/eslint/eslint/search?q=markdownlint -[garden]: https://zendeskgarden.github.io/react-components/ -[garden-search]: https://github.com/zendeskgarden/react-components/search?q=markdownlint -[markdownlint-github]: https://github.com/github/markdownlint-github -[mdn]: https://developer.mozilla.org/ -[mdn-search]: https://github.com/mdn/content/search?q=markdownlint -[mkdocs]: https://www.mkdocs.org/ -[mkdocs-search]: https://github.com/mkdocs/mkdocs/search?q=markdownlint -[mocha]: https://mochajs.org/ -[mocha-search]: https://github.com/mochajs/mocha/search?q=markdownlint -[pi-hole]: https://docs.pi-hole.net -[pi-hole-search]: https://github.com/pi-hole/docs/search?q=markdownlint -[reactable]: https://glittershark.github.io/reactable/ -[reactable-search]: https://github.com/glittershark/reactable/search?q=markdownlint -[v8]: https://v8.dev/ -[v8-search]: https://github.com/v8/v8.dev/search?q=markdownlint -[webhint]: https://webhint.io/ -[webhint-search]: https://github.com/webhintio/hint/search?q=markdownlint -[webpack]: https://webpack.js.org/ -[webpack-search]: https://github.com/webpack/webpack.js.org/search?q=markdownlint -[wordpress]: https://wordpress.org/gutenberg/ -[wordpress-search]: https://github.com/WordPress/gutenberg/search?q=markdownlint - -## Contributing - -See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. - -## Releasing - -See [ReleaseProcess.md](doc/ReleaseProcess.md) for more information. - -## History - -See [CHANGELOG.md](CHANGELOG.md). - -[npm-image]: https://img.shields.io/npm/v/markdownlint.svg -[npm-url]: https://www.npmjs.com/package/markdownlint -[license-image]: https://img.shields.io/npm/l/markdownlint.svg -[license-url]: https://opensource.org/licenses/MIT diff --git a/node_modules/markdownlint/doc/CustomRules.md b/node_modules/markdownlint/doc/CustomRules.md deleted file mode 100644 index 8f696ac47e..0000000000 --- a/node_modules/markdownlint/doc/CustomRules.md +++ /dev/null @@ -1,194 +0,0 @@ -# Custom Rules - -In addition to its built-in rules, `markdownlint` lets you enhance the linting -experience by passing an array of custom rules using the [`options.customRules` -property][options-custom-rules]. Custom rules can do everything the built-in -rules can and are defined inline or imported from another package ([keyword -`markdownlint-rule` on npm][markdownlint-rule]). When defined by a file or -package, the export can be a single rule object (see below) or an array of them. -Custom rules can be disabled, enabled, and customized using the same syntax as -built-in rules. - -## Implementing Simple Rules - -For simple requirements like disallowing certain characters or patterns, -the community-developed -[markdownlint-rule-search-replace][markdownlint-rule-search-replace] -plug-in can be used. This plug-in allows anyone to create a set of simple -text-replacement rules without needing to write code. - -[markdownlint-rule-search-replace]: https://www.npmjs.com/package/markdownlint-rule-search-replace - -## Authoring - -Rules are defined by a name (or multiple names), a description, an optional link -to more information, one or more tags, and a function that implements the rule's -behavior. That function is called once for each file/string input and is passed -the parsed input and a function to log any violations. - -Custom rules can (should) operate on a structured set of tokens based on the -[`micromark`][micromark] `parser` (this is preferred). Alternatively, custom -rules can operate on a structured set of tokens based on the -[`markdown-it`][markdown-it] `parser` (legacy support). Finally, custom rules -can operate directly on text with the `none` `parser`. - -A simple rule implementation using the `micromark` parser to report a violation -for any use of blockquotes might look like: - -```javascript -/** @type {import("markdownlint").Rule} */ -module.exports = { - "names": [ "any-blockquote-micromark" ], - "description": "Rule that reports an error for any blockquote", - "information": new URL("https://example.com/rules/any-blockquote"), - "tags": [ "test" ], - "parser": "micromark", - "function": (params, onError) => { - const blockquotes = params.parsers.micromark.tokens - .filter((token) => token.type === "blockQuote"); - for (const blockquote of blockquotes) { - const lines = blockquote.endLine - blockquote.startLine + 1; - onError({ - "lineNumber": blockquote.startLine, - "detail": "Blockquote spans " + lines + " line(s).", - "context": params.lines[blockquote.startLine - 1] - }); - } - } -} -``` - -That same rule implemented using the `markdown-it` parser might look like: - -```javascript -/** @type {import("markdownlint").Rule} */ -module.exports = { - "names": [ "any-blockquote-markdown-it" ], - "description": "Rule that reports an error for any blockquote", - "information": new URL("https://example.com/rules/any-blockquote"), - "tags": [ "test" ], - "parser": "markdownit", - "function": (params, onError) => { - const blockquotes = params.parsers.markdownit.tokens - .filter((token) => token.type === "blockquote_open"); - for (const blockquote of blockquotes) { - const [ startIndex, endIndex ] = blockquote.map; - const lines = endIndex - startIndex; - onError({ - "lineNumber": blockquote.lineNumber, - "detail": "Blockquote spans " + lines + " line(s).", - "context": blockquote.line - }); - } - } -} -``` - -A rule is implemented as an `Object`: - -- `names` is a required `Array` of `String` values that identify the rule in - output messages and config. -- `description` is a required `String` value that describes the rule in output - messages. -- `information` is an optional (absolute) `URL` of a link to more information - about the rule. -- `tags` is a required `Array` of `String` values that groups related rules for - easier customization. -- `parser` is a required `String` value `"markdownit" | "micromark" | "none"` - that specifies the parser data used via `params.parsers` (see below). -- `asynchronous` is an optional `Boolean` value that indicates whether the rule - returns a `Promise` and runs asynchronously. -- `function` is a required `Function` that implements the rule and is passed two - parameters: - - `params` is an `Object` with properties that describe the content being - analyzed: - - `name` is a `String` that identifies the input file/string. - - `parsers` is an `Object` with properties corresponding to the value of - `parser` in the rule definition (see above). - - `markdownit` is an `Object` that provides access to output from the - [`markdown-it`][markdown-it] parser. - - `tokens` is an `Array` of [`markdown-it` `Token`s][markdown-it-token] - with added `line` and `lineNumber` properties. (This property was - previously on the `params` object.) - - `micromark` is an `Object` that provides access to output from the - [`micromark`][micromark] parser. - - `tokens` is an `Array` of [`MicromarkToken`][micromark-token] objects. - - Samples for both `tokens` are available via [test snapshots][tokens]. - - `lines` is an `Array` of `String` values corresponding to the lines of the - input file/string. - - `frontMatterLines` is an `Array` of `String` values corresponding to any - front matter (not present in `lines`). - - `config` is an `Object` corresponding to the rule's entry in - `options.config` (if present). - - `version` is a `String` that corresponds to the version of `markdownlint` - - `onError` is a function that takes a single `Object` parameter with one - required and four optional properties: - - `lineNumber` is a required `Number` specifying the 1-based line number of - the error. - - `detail` is an optional `String` with information about what caused the - error. - - `context` is an optional `String` with relevant text surrounding the error - location. - - `information` is an optional (absolute) `URL` of a link to override the - same-named value provided by the rule definition. (Uncommon) - - `range` is an optional `Array` with two `Number` values identifying the - 1-based column and length of the error. - - `fixInfo` is an optional `Object` with information about how to fix the - error (all properties are optional, but at least one of `deleteCount` and - `insertText` should be present; when applying a fix, the delete should be - performed before the insert): - - `lineNumber` is an optional `Number` specifying the 1-based line number - of the edit. - - `editColumn` is an optional `Number` specifying the 1-based column - number of the edit. - - `deleteCount` is an optional `Number` specifying the number of - characters to delete (the value `-1` is used to delete the line). - - `insertText` is an optional `String` specifying the text to insert. `\n` - is the platform-independent way to add a line break; line breaks should - be added at the beginning of a line instead of at the end. - -The collection of helper functions shared by the built-in rules is available for -use by custom rules in the [markdownlint-rule-helpers package][rule-helpers]. - -### Asynchronous Rules - -If a rule needs to perform asynchronous operations (such as fetching a network -resource), it can specify the value `true` for its `asynchronous` property. -Asynchronous rules should return a `Promise` from their `function` -implementation that is resolved when the rule completes. (The value passed to -`resolve(...)` is ignored.) Linting violations from asynchronous rules are -reported via the `onError` function just like for synchronous rules. - -**Note**: Asynchronous rules cannot be referenced in a synchronous calling -context (i.e., `import { lint } from "markdownlint/sync"`). Attempting to do so -throws an exception. - -## Examples - -- [Simple rules used by the project's test cases][test-rules] -- [Code for all `markdownlint` built-in rules][lib] -- [Complete example rule including npm configuration][extended-ascii] -- [Custom rules from the github/docs repository][github-docs] -- [Custom rules from the electron/lint-roller repository][electron] -- [Custom rules from the webhintio/hint repository][hint] - -## References - -- [CommonMark documentation and specification][commonmark] -- [`markdown-it` Markdown parser project page][markdown-it] - -[commonmark]: https://commonmark.org/ -[electron]: https://github.com/electron/lint-roller/tree/main/markdownlint-rules -[extended-ascii]: https://github.com/DavidAnson/markdownlint-rule-extended-ascii -[github-docs]: https://github.com/github/docs/tree/main/src/content-linter/lib/linting-rules -[hint]: https://github.com/webhintio/hint/blob/main/scripts/lint-markdown.js -[lib]: ../lib -[markdown-it]: https://github.com/markdown-it/markdown-it -[markdown-it-token]: https://markdown-it.github.io/markdown-it/#Token -[markdownlint-rule]: https://www.npmjs.com/search?q=keywords:markdownlint-rule -[micromark]: https://github.com/micromark/micromark -[micromark-token]: ../lib/markdownlint.d.mts -[rule-helpers]: https://www.npmjs.com/package/markdownlint-rule-helpers -[options-custom-rules]: ../README.md#optionscustomrules -[test-rules]: ../test/rules -[tokens]: ../test/snapshots/markdownlint-test-custom-rules.mjs.md diff --git a/node_modules/markdownlint/doc/Prettier.md b/node_modules/markdownlint/doc/Prettier.md deleted file mode 100644 index 0ebde95d38..0000000000 --- a/node_modules/markdownlint/doc/Prettier.md +++ /dev/null @@ -1,27 +0,0 @@ -# Using `markdownlint` with Prettier - -[`Prettier`](https://prettier.io) is a popular code formatter. -For the most part, Prettier works seamlessly with `markdownlint`. - -You can `extend` the [`prettier.json`](../style/prettier.json) style to disable -all `markdownlint` rules that overlap with Prettier. - -Other scenarios are documented below. - -## List item indentation - -The default settings of `markdownlint` and `Prettier` are compatible and don't -result in any linting violations. If `Prettier` is used with `--tab-width` set -to `4` (vs. `2`), the following `markdownlint` configuration can be used: - -```json -{ - "list-marker-space": { - "ul_multi": 3, - "ul_single": 3 - }, - "ul-indent": { - "indent": 4 - } -} -``` diff --git a/node_modules/markdownlint/doc/ReleaseProcess.md b/node_modules/markdownlint/doc/ReleaseProcess.md deleted file mode 100644 index 05c7b70027..0000000000 --- a/node_modules/markdownlint/doc/ReleaseProcess.md +++ /dev/null @@ -1,20 +0,0 @@ -# Release Process - -The `markdownlint` library has some related dependencies that are updated along -with it. To prevent possible regressions from having a widespread impact, these -releases are separated by a few days to provide an opportunity to find issues. - -1. [`markdownlint`][markdownlint] -2. [`markdownlint-cli2`][markdownlint-cli2] -3. [`markdownlint-cli2-action`][markdownlint-cli2-action] -4. [`vscode-markdownlint`][vscode-markdownlint] -5. [`markdownlint-cli`][markdownlint-cli] - -This sequence is not strict and may be adjusted based on the content of the -release and the scope of feature work in each dependency. - -[markdownlint]: https://github.com/DavidAnson/markdownlint -[markdownlint-cli2]: https://github.com/DavidAnson/markdownlint-cli2 -[markdownlint-cli2-action]: https://github.com/marketplace/actions/markdownlint-cli2-action -[vscode-markdownlint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint -[markdownlint-cli]: https://github.com/igorshubovych/markdownlint-cli diff --git a/node_modules/markdownlint/doc/Rules.md b/node_modules/markdownlint/doc/Rules.md deleted file mode 100644 index ded40d8aa3..0000000000 --- a/node_modules/markdownlint/doc/Rules.md +++ /dev/null @@ -1,2535 +0,0 @@ -# Rules - -This document contains a description of all rules, what they are checking for, -as well as examples of documents that break the rule and corrected -versions of the examples. - - - -## `MD001` - Heading levels should only increment by one level at a time - -Tags: `headings` - -Aliases: `heading-increment` - -This rule is triggered when you skip heading levels in a Markdown document, for -example: - -```markdown -# Heading 1 - -### Heading 3 - -We skipped out a 2nd level heading in this document -``` - -When using multiple heading levels, nested headings should increase by only one -level at a time: - -```markdown -# Heading 1 - -## Heading 2 - -### Heading 3 - -#### Heading 4 - -## Another Heading 2 - -### Another Heading 3 -``` - -Rationale: Headings represent the structure of a document and can be confusing -when skipped - especially for accessibility scenarios. More information: -. - - - -## `MD003` - Heading style - -Tags: `headings` - -Aliases: `heading-style` - -Parameters: - -- `style`: Heading style (`string`, default `consistent`, values `atx` / - `atx_closed` / `consistent` / `setext` / `setext_with_atx` / - `setext_with_atx_closed`) - -This rule is triggered when different heading styles are used in the same -document: - -```markdown -# ATX style H1 - -## Closed ATX style H2 ## - -Setext style H1 -=============== -``` - -To fix the issue, use consistent heading styles throughout the document: - -```markdown -# ATX style H1 - -## ATX style H2 -``` - -The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style -headings of level 3 or more in documents with setext-style headings (which only -support level 1 and 2 headings): - -```markdown -Setext style H1 -=============== - -Setext style H2 ---------------- - -### ATX style H3 -``` - -Note: The configured heading style can be a specific style to require (`atx`, -`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can -require that all heading styles match the first heading style via `consistent`. - -Note: The placement of a horizontal rule directly below a line of text can -trigger this rule by turning that text into a level 2 setext-style heading: - -```markdown -A line of text followed by a horizontal rule becomes a heading ---- -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD004` - Unordered list style - -Tags: `bullet`, `ul` - -Aliases: `ul-style` - -Parameters: - -- `style`: List style (`string`, default `consistent`, values `asterisk` / - `consistent` / `dash` / `plus` / `sublist`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for unordered -list items do not match the configured unordered list style: - -```markdown -* Item 1 -+ Item 2 -- Item 3 -``` - -To fix this issue, use the configured style for list items throughout the -document: - -```markdown -* Item 1 -* Item 2 -* Item 3 -``` - -The configured list style can ensure all list styling is a specific symbol -(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that -differs from its parent list (`sublist`), or ensure all list styles match the -first list style (`consistent`). - -For example, the following is valid for the `sublist` style because the -outer-most indent uses asterisk, the middle indent uses plus, and the inner-most -indent uses dash: - -```markdown -* Item 1 - + Item 2 - - Item 3 - + Item 4 -* Item 4 - + Item 5 -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD005` - Inconsistent indentation for list items at the same level - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `list-indent` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are parsed as being at the same level, -but don't have the same indentation: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * A misaligned item -``` - -Usually, this rule will be triggered because of a typo. Correct the indentation -for the list to fix it: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * Nested Item 3 -``` - -Sequentially-ordered list markers are usually left-aligned such that all items -have the same starting column: - -```markdown -... -8. Item -9. Item -10. Item -11. Item -... -``` - -This rule also supports right-alignment of list markers such that all items have -the same ending column: - -```markdown -... - 8. Item - 9. Item -10. Item -11. Item -... -``` - -Rationale: Violations of this rule can lead to improperly rendered content. - - - -## `MD007` - Unordered list indentation - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `ul-indent` - -Parameters: - -- `indent`: Spaces for indent (`integer`, default `2`) -- `start_indent`: Spaces for first level indent (when start_indented is set) - (`integer`, default `2`) -- `start_indented`: Whether to indent the first level of the list (`boolean`, - default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are not indented by the configured -number of spaces (default: 2). - -Example: - -```markdown -* List item - * Nested list item indented by 3 spaces -``` - -Corrected Example: - -```markdown -* List item - * Nested list item indented by 2 spaces -``` - -Note: This rule applies to a sublist only if its parent lists are all also -unordered (otherwise, extra indentation of ordered lists interferes with the -rule). - -The `start_indented` parameter allows the first level of lists to be indented by -the configured number of spaces rather than starting at zero. The `start_indent` -parameter allows the first level of lists to be indented by a different number -of spaces than the rest (ignored when `start_indented` is not set). - -Rationale: Indenting by 2 spaces allows the content of a nested list to be in -line with the start of the content of the parent list when a single space is -used after the list marker. Indenting by 4 spaces is consistent with code blocks -and simpler for editors to implement. Additionally, this can be a compatibility -issue for other Markdown parsers, which require 4-space indents. More -information: [Markdown Style Guide][markdown-style-guide]. - -Note: See [Prettier.md](Prettier.md) for compatibility information. - -[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists - - - -## `MD009` - Trailing spaces - -Tags: `whitespace` - -Aliases: `no-trailing-spaces` - -Parameters: - -- `br_spaces`: Spaces for line break (`integer`, default `2`) -- `list_item_empty_lines`: Allow spaces for empty lines in list items - (`boolean`, default `false`) -- `strict`: Include unnecessary breaks (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any lines that end with unexpected whitespace. To fix -this, remove the trailing space from the end of the line. - -Note: Trailing space is allowed in indented and fenced code blocks because some -languages require it. - -The `br_spaces` parameter allows an exception to this rule for a specific number -of trailing spaces, typically used to insert an explicit line break. The default -value allows 2 spaces to indicate a hard break (\
              element). - -Note: You must set `br_spaces` to a value >= 2 for this parameter to take -effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing -spaces. - -By default, this rule will not trigger when the allowed number of spaces is -used, even when it doesn't create a hard break (for example, at the end of a -paragraph). To report such instances as well, set the `strict` parameter to -`true`. - -```markdown -Text text text -text[2 spaces] -``` - -Using spaces to indent blank lines inside a list item is usually not necessary, -but some parsers require it. Set the `list_item_empty_lines` parameter to `true` -to allow this (even when `strict` is `true`): - -```markdown -- list item text - [2 spaces] - list item text -``` - -Rationale: Except when being used to create a line break, trailing whitespace -has no purpose and does not affect the rendering of content. - - - -## `MD010` - Hard tabs - -Tags: `hard_tab`, `whitespace` - -Aliases: `no-hard-tabs` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default - `[]`) -- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered by any lines that contain hard tab characters instead -of using spaces for indentation. To fix this, replace any hard tab characters -with spaces instead. - -Example: - - - -```markdown -Some text - - * hard tab character used to indent the list item -``` - - - -Corrected example: - -```markdown -Some text - - * Spaces used to indent the list item instead -``` - -You have the option to exclude this rule for code blocks and spans. To do so, -set the `code_blocks` parameter to `false`. Code blocks and spans are included -by default since handling of tabs by Markdown tools can be inconsistent (e.g., -using 4 vs. 8 spaces). - -When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), -the `ignore_code_languages` parameter can be set to a list of languages that -should be ignored (i.e., hard tabs will be allowed, though not required). This -makes it easier for documents to include code for languages that require hard -tabs. - -By default, violations of this rule are fixed by replacing the tab with 1 space -character. To use a different number of spaces, set the `spaces_per_tab` -parameter to the desired value. - -Rationale: Hard tabs are often rendered inconsistently by different editors and -can be harder to work with than spaces. - - - -## `MD011` - Reversed link syntax - -Tags: `links` - -Aliases: `no-reversed-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when text that appears to be a link is encountered, but -where the syntax appears to have been reversed (the `[]` and `()` are -reversed): - -```markdown -(Incorrect link syntax)[https://www.example.com/] -``` - -To fix this, swap the `[]` and `()` around: - -```markdown -[Correct link syntax](https://www.example.com/) -``` - -Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style -footnotes do not trigger this rule: - -```markdown -For (example)[^1] -``` - -Rationale: Reversed links are not rendered as usable links. - - - -## `MD012` - Multiple consecutive blank lines - -Tags: `blank_lines`, `whitespace` - -Aliases: `no-multiple-blanks` - -Parameters: - -- `maximum`: Consecutive blank lines (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are multiple consecutive blank lines in the -document: - -```markdown -Some text here - - -Some more text here -``` - -To fix this, delete the offending lines: - -```markdown -Some text here - -Some more text here -``` - -Note: this rule will not be triggered if there are multiple consecutive blank -lines inside code blocks. - -Note: The `maximum` parameter can be used to configure the maximum number of -consecutive blank lines. - -Rationale: Except in a code block, blank lines serve no purpose and do not -affect the rendering of content. - - - -## `MD013` - Line length - -Tags: `line_length` - -Aliases: `line-length` - -Parameters: - -- `code_block_line_length`: Number of characters for code blocks (`integer`, - default `80`) -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `heading_line_length`: Number of characters for headings (`integer`, default - `80`) -- `headings`: Include headings (`boolean`, default `true`) -- `line_length`: Number of characters (`integer`, default `80`) -- `stern`: Stern length checking (`boolean`, default `false`) -- `strict`: Strict length checking (`boolean`, default `false`) -- `tables`: Include tables (`boolean`, default `true`) - -This rule is triggered when there are lines that are longer than the -configured `line_length` (default: 80 characters). To fix this, split the line -up into multiple lines. To set a different maximum length for headings, use -`heading_line_length`. To set a different maximum length for code blocks, use -`code_block_line_length` - -This rule has an exception when there is no whitespace beyond the configured -line length. This allows you to include items such as long URLs without being -forced to break them in the middle. To disable this exception, set the `strict` -parameter to `true` and an issue will be reported when any line is too long. To -warn for lines that are too long and could be fixed but allow long lines -without spaces, set the `stern` parameter to `true`. - -For example (assuming normal behavior): - -```markdown -IF THIS LINE IS THE MAXIMUM LENGTH -This line is okay because there are-no-spaces-beyond-that-length -This line is a violation because there are spaces beyond that length -This-line-is-okay-because-there-are-no-spaces-anywhere-within -``` - -In `strict` mode, the last three lines above are all violations. In `stern` -mode, the middle two lines above are both violations, but the last is okay. - -You have the option to exclude this rule for code blocks, tables, or headings. -To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. - -Code blocks are included in this rule by default since it is often a -requirement for document readability, and tentatively compatible with code -rules. Still, some languages do not lend themselves to short lines. - -Lines with link/image reference definitions and standalone lines (i.e., not part -of a paragraph) with only a link/image (possibly using (strong) emphasis) are -always exempted from this rule (even in `strict` mode) because there is often no -way to split such lines without breaking the URL. - -Rationale: Extremely long lines can be difficult to work with in some editors. -More information: . - - - -## `MD014` - Dollar signs used before commands without showing output - -Tags: `code` - -Aliases: `commands-show-output` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are code blocks showing shell commands to be -typed, and *all* of the shell commands are preceded by dollar signs ($): - - - -```markdown -$ ls -$ cat foo -$ less bar -``` - - - -The dollar signs are unnecessary in this situation, and should not be -included: - -```markdown -ls -cat foo -less bar -``` - -Showing output for commands preceded by dollar signs does not trigger this rule: - -```markdown -$ ls -foo bar -$ cat foo -Hello world -$ cat bar -baz -``` - -Because some commands do not produce output, it is not a violation if *some* -commands do not have output: - -```markdown -$ mkdir test -mkdir: created directory 'test' -$ ls test -``` - -Rationale: It is easier to copy/paste and less noisy if the dollar signs -are omitted when they are not needed. See - -for more information. - - - -## `MD018` - No space after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-missing-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing after the hash characters -in an atx style heading: - -```markdown -#Heading 1 - -##Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Violations of this rule can lead to improperly rendered content. - - - -## `MD019` - Multiple spaces after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-multiple-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in an atx style heading: - -```markdown -# Heading 1 - -## Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Extra space has no purpose and does not affect the rendering of -content. - - - -## `MD020` - No space inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-missing-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing inside the hash characters -in a closed atx style heading: - -```markdown -#Heading 1# - -##Heading 2## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading is missing spaces. - -Rationale: Violations of this rule can lead to improperly rendered content. - - - -## `MD021` - Multiple spaces inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-multiple-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in a closed atx style heading: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading contains multiple -spaces. - -Rationale: Extra space has no purpose and does not affect the rendering of -content. - - - -## `MD022` - Headings should be surrounded by blank lines - -Tags: `blank_lines`, `headings` - -Aliases: `blanks-around-headings` - -Parameters: - -- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) -- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when headings (any style) are either not preceded or not -followed by at least one blank line: - -```markdown -# Heading 1 -Some text - -Some more text -## Heading 2 -``` - -To fix this, ensure that all headings have a blank line both before and after -(except where the heading is at the beginning or end of the document): - -```markdown -# Heading 1 - -Some text - -Some more text - -## Heading 2 -``` - -The `lines_above` and `lines_below` parameters can be used to specify a -different number of blank lines (including `0`) above or below each heading. -If the value `-1` is used for either parameter, any number of blank lines is -allowed. To customize the number of lines above or below each heading level -individually, specify a `number[]` where values correspond to heading levels -1-6 (in order). - -Notes: If `lines_above` or `lines_below` are configured to require more than one -blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This -rule checks for *at least* as many blank lines as specified; any extra blank -lines are ignored. - -Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, -will not parse headings that don't have a blank line before, and will parse them -as regular text. - - - -## `MD023` - Headings must start at the beginning of the line - -Tags: `headings`, `spaces` - -Aliases: `heading-start-left` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a heading is indented by one or more spaces: - -```markdown -Some text - - # Indented heading -``` - -To fix this, ensure that all headings start at the beginning of the line: - -```markdown -Some text - -# Heading -``` - -Note that scenarios like block quotes "indent" the start of the line, so the -following is also correct: - -```markdown -> # Heading in Block Quote -``` - -Rationale: Headings that don't start at the beginning of the line will not be -parsed as headings, and will instead appear as regular text. - - - -## `MD024` - Multiple headings with the same content - -Tags: `headings` - -Aliases: `no-duplicate-heading` - -Parameters: - -- `siblings_only`: Only check sibling headings (`boolean`, default `false`) - -This rule is triggered if there are multiple headings in the document that have -the same text: - -```markdown -# Some text - -## Some text -``` - -To fix this, ensure that the content of each heading is different: - -```markdown -# Some text - -## Some more text -``` - -If the parameter `siblings_only` is set to `true`, duplication is allowed for -headings with different parents (as is common in changelogs): - -```markdown -# Change log - -## 1.0.0 - -### Features - -## 2.0.0 - -### Features -``` - -Rationale: Some Markdown parsers generate anchors for headings based on the -heading name; headings with the same content can cause problems with that. - - - -## `MD025` - Multiple top-level headings in the same document - -Tags: `headings` - -Aliases: `single-h1`, `single-title` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is triggered when a top-level heading is in use (the first line of -the file is an h1 heading), and more than one h1 heading is in use in the -document: - -```markdown -# Top level heading - -# Another top-level heading -``` - -To fix, structure your document so there is a single h1 heading that is -the title for the document. Subsequent headings must be -lower-level headings (h2, h3, etc.): - -```markdown -# Title - -## Heading - -## Another heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule treats -that as a top level heading and will report a violation for any subsequent -top-level headings. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: A top-level heading is an h1 on the first line of the file, and -serves as the title for the document. If this convention is in use, then there -can not be more than one title for the document, and the entire document should -be contained within this heading. - - - -## `MD026` - Trailing punctuation in heading - -Tags: `headings` - -Aliases: `no-trailing-punctuation` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any heading that has one of the specified normal or -full-width punctuation characters as the last character in the line: - -```markdown -# This is a heading. -``` - -To fix this, remove the trailing punctuation: - -```markdown -# This is a heading -``` - -Note: The `punctuation` parameter can be used to specify what characters count -as punctuation at the end of a heading. For example, you can change it to -`".,;:"` to allow headings that end with an exclamation point. `?` is -allowed by default because of how common it is in headings of FAQ-style -documents. Setting the `punctuation` parameter to `""` allows all characters - -and is equivalent to disabling the rule. - -Note: The trailing semicolon of [HTML entity references][html-entity-references] -like `©`, `©`, and `©` is ignored by this rule. - -Rationale: Headings are not meant to be full sentences. More information: -[Punctuation at the end of headers][end-punctuation]. - -[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers -[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references - - - -## `MD027` - Multiple spaces after blockquote symbol - -Tags: `blockquote`, `indentation`, `whitespace` - -Aliases: `no-multiple-space-blockquote` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when blockquotes have more than one space after the -blockquote (`>`) symbol: - -```markdown -> This is a blockquote with bad indentation -> there should only be one. -``` - -To fix, remove any extraneous space: - -```markdown -> This is a blockquote with correct -> indentation. -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD028` - Blank line inside blockquote - -Tags: `blockquote`, `whitespace` - -Aliases: `no-blanks-blockquote` - -This rule is triggered when two blockquote blocks are separated by nothing -except for a blank line: - -```markdown -> This is a blockquote -> which is immediately followed by - -> this blockquote. Unfortunately -> In some parsers, these are treated as the same blockquote. -``` - -To fix this, ensure that any blockquotes that are right next to each other -have some text in between: - -```markdown -> This is a blockquote. - -And Jimmy also said: - -> This too is a blockquote. -``` - -Alternatively, if they are supposed to be the same quote, then add the -blockquote symbol at the beginning of the blank line: - -```markdown -> This is a blockquote. -> -> This is the same blockquote. -``` - -Rationale: Some Markdown parsers will treat two blockquotes separated by one -or more blank lines as the same blockquote, while others will treat them as -separate blockquotes. - - - -## `MD029` - Ordered list item prefix - -Tags: `ol` - -Aliases: `ol-prefix` - -Parameters: - -- `style`: List style (`string`, default `one_or_ordered`, values `one` / - `one_or_ordered` / `ordered` / `zero`) - -This rule is triggered for ordered lists that do not either start with '1.' or -do not have a prefix that increases in numerical order (depending on the -configured style). The less-common pattern of using '0.' as a first prefix or -for all prefixes is also supported. - -Example valid list if the style is configured as 'one': - -```markdown -1. Do this. -1. Do that. -1. Done. -``` - -Examples of valid lists if the style is configured as 'ordered': - -```markdown -1. Do this. -2. Do that. -3. Done. -``` - -```markdown -0. Do this. -1. Do that. -2. Done. -``` - -All three examples are valid when the style is configured as 'one_or_ordered'. - -Example valid list if the style is configured as 'zero': - -```markdown -0. Do this. -0. Do that. -0. Done. -``` - -Example invalid list for all styles: - -```markdown -1. Do this. -3. Done. -``` - -This rule supports 0-prefixing ordered list items for uniform indentation: - -```markdown -... -08. Item -09. Item -10. Item -11. Item -... -``` - -Note: This rule will report violations for cases like the following where an -improperly-indented code block (or similar) appears between two list items and -"breaks" the list in two: - - - -~~~markdown -1. First list - -```text -Code block -``` - -1. Second list -~~~ - -The fix is to indent the code block so it becomes part of the preceding list -item as intended: - -~~~markdown -1. First list - - ```text - Code block - ``` - -2. Still first list -~~~ - - - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD030` - Spaces after list markers - -Tags: `ol`, `ul`, `whitespace` - -Aliases: `list-marker-space` - -Parameters: - -- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) -- `ol_single`: Spaces for single-line ordered list items (`integer`, default - `1`) -- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default - `1`) -- `ul_single`: Spaces for single-line unordered list items (`integer`, default - `1`) - -Fixable: Some violations can be fixed by tooling - -This rule checks for the number of spaces between a list marker (e.g. '`-`', -'`*`', '`+`' or '`1.`') and the text of the list item. - -The number of spaces checked for depends on the document style in use, but the -default is 1 space after any list marker: - -```markdown -* Foo -* Bar -* Baz - -1. Foo -1. Bar -1. Baz - -1. Foo - * Bar -1. Baz -``` - -A document style may change the number of spaces after unordered list items -and ordered list items independently, as well as based on whether the content -of every item in the list consists of a single paragraph or multiple -paragraphs (including sub-lists and code blocks). - -For example, the style guide at - -specifies that 1 space after the list marker should be used if every item in -the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered -and unordered lists respectively) if there are multiple paragraphs of content -inside the list: - -```markdown -* Foo -* Bar -* Baz -``` - -vs. - -```markdown -* Foo - - Second paragraph - -* Bar -``` - -or - -```markdown -1. Foo - - Second paragraph - -1. Bar -``` - -To fix this, ensure the correct number of spaces are used after the list marker -for your selected document style. - -Rationale: Violations of this rule can lead to improperly rendered content. - -Note: See [Prettier.md](Prettier.md) for compatibility information. - - - -## `MD031` - Fenced code blocks should be surrounded by blank lines - -Tags: `blank_lines`, `code` - -Aliases: `blanks-around-fences` - -Parameters: - -- `list_items`: Include list items (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when fenced code blocks are either not preceded or not -followed by a blank line: - -````markdown -Some text -``` -Code block -``` - -``` -Another code block -``` -Some more text -```` - -To fix this, ensure that all fenced code blocks have a blank line both before -and after (except where the block is at the beginning or end of the document): - -````markdown -Some text - -``` -Code block -``` - -``` -Another code block -``` - -Some more text -```` - -Set the `list_items` parameter to `false` to disable this rule for list items. -Disabling this behavior for lists can be useful if it is necessary to create a -[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. - -Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will -not parse fenced code blocks that don't have blank lines before and after them. - - - -## `MD032` - Lists should be surrounded by blank lines - -Tags: `blank_lines`, `bullet`, `ol`, `ul` - -Aliases: `blanks-around-lists` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when lists (of any kind) are either not preceded or not -followed by a blank line: - -```markdown -Some text -* List item -* List item - -1. List item -2. List item -*** -``` - -In the first case above, text immediately precedes the unordered list. In the -second case above, a thematic break immediately follows the ordered list. To fix -violations of this rule, ensure that all lists have a blank line both before and -after (except when the list is at the very beginning or end of the document): - -```markdown -Some text - -* List item -* List item - -1. List item -2. List item - -*** -``` - -Note that the following case is **not** a violation of this rule: - -```markdown -1. List item - More item 1 -2. List item -More item 2 -``` - -Although it is not indented, the text "More item 2" is referred to as a -[lazy continuation line][lazy-continuation] and considered part of the second -list item. - -Rationale: In addition to aesthetic reasons, some parsers, including kramdown, -will not parse lists that don't have blank lines before and after them. - -[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line - - - -## `MD033` - Inline HTML - -Tags: `html` - -Aliases: `no-inline-html` - -Parameters: - -- `allowed_elements`: Allowed elements (`string[]`, default `[]`) - -This rule is triggered whenever raw HTML is used in a Markdown document: - -```markdown -

              Inline HTML heading

              -``` - -To fix this, use 'pure' Markdown instead of including raw HTML: - -```markdown -# Markdown heading -``` - -Note: To allow specific HTML elements, use the `allowed_elements` parameter. - -Rationale: Raw HTML is allowed in Markdown, but this rule is included for -those who want their documents to only include "pure" Markdown, or for those -who are rendering Markdown documents into something other than HTML. - - - -## `MD034` - Bare URL used - -Tags: `links`, `url` - -Aliases: `no-bare-urls` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered whenever a URL or email address appears without -surrounding angle brackets: - -```markdown -For more info, visit https://www.example.com/ or email user@example.com. -``` - -To fix this, add angle brackets around the URL or email address: - -```markdown -For more info, visit or email . -``` - -If a URL or email address contains non-ASCII characters, it may be not be -handled as intended even when angle brackets are present. In such cases, -[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used -to comply with the required syntax for URL and email. - -Note: To include a bare URL or email without it being converted into a link, -wrap it in a code span: - -```markdown -Not a clickable link: `https://www.example.com` -``` - -Note: The following scenario does not trigger this rule because it could be a -shortcut link: - -```markdown -[https://www.example.com] -``` - -Note: The following syntax triggers this rule because the nested link could be -a shortcut link (which takes precedence): - -```markdown -[text [shortcut] text](https://example.com) -``` - -To avoid this, escape both inner brackets: - -```markdown -[link \[text\] link](https://example.com) -``` - -Rationale: Without angle brackets, a bare URL or email isn't converted into a -link by some Markdown parsers. - - - -## `MD035` - Horizontal rule style - -Tags: `hr` - -Aliases: `hr-style` - -Parameters: - -- `style`: Horizontal rule style (`string`, default `consistent`) - -This rule is triggered when inconsistent styles of horizontal rules are used -in the document: - -```markdown ---- - -- - - - -*** - -* * * - -**** -``` - -To fix this, use the same horizontal rule everywhere: - -```markdown ---- - ---- -``` - -The configured style can ensure all horizontal rules use a specific string or it -can ensure all horizontal rules match the first horizontal rule (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD036` - Emphasis used instead of a heading - -Tags: `emphasis`, `headings` - -Aliases: `no-emphasis-as-heading` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) - -This check looks for instances where emphasized (i.e. bold or italic) text is -used to separate sections, where a heading should be used instead: - -```markdown -**My document** - -Lorem ipsum dolor sit amet... - -_Another section_ - -Consectetur adipiscing elit, sed do eiusmod. -``` - -To fix this, use Markdown headings instead of emphasized text to denote -sections: - -```markdown -# My document - -Lorem ipsum dolor sit amet... - -## Another section - -Consectetur adipiscing elit, sed do eiusmod. -``` - -Note: This rule looks for single-line paragraphs that consist entirely -of emphasized text. It won't fire on emphasis used within regular text, -multi-line emphasized paragraphs, or paragraphs ending in punctuation -(normal or full-width). Similarly to rule MD026, you can configure what -characters are recognized as punctuation. - -Rationale: Using emphasis instead of a heading prevents tools from inferring -the structure of a document. More information: -. - - - -## `MD037` - Spaces inside emphasis markers - -Tags: `emphasis`, `whitespace` - -Aliases: `no-space-in-emphasis` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when emphasis markers (bold, italic) are used, but they -have spaces between the markers and the text: - -```markdown -Here is some ** bold ** text. - -Here is some * italic * text. - -Here is some more __ bold __ text. - -Here is some more _ italic _ text. -``` - -To fix this, remove the spaces around the emphasis markers: - -```markdown -Here is some **bold** text. - -Here is some *italic* text. - -Here is some more __bold__ text. - -Here is some more _italic_ text. -``` - -Rationale: Emphasis is only parsed as such when the asterisks/underscores -aren't surrounded by spaces. This rule attempts to detect where -they were surrounded by spaces, but it appears that emphasized text was -intended by the author. - - - -## `MD038` - Spaces inside code span elements - -Tags: `code`, `whitespace` - -Aliases: `no-space-in-code` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered for code span elements that have spaces adjacent to the -backticks: - -```markdown -`some text ` - -` some text` -``` - -To fix this, remove any spaces adjacent to the backticks: - -```markdown -`some text` -``` - -Note: A single leading and trailing space is allowed by the specification and -automatically trimmed (in order to allow for code spans that embed backticks): - -```markdown -`` `backticks` `` -``` - -Note: A single leading or trailing space is allowed if used to separate code -span markers from an embedded backtick (though the space is not trimmed): - -```markdown -`` ` embedded backtick`` -``` - -Rationale: Violations of this rule are usually unintentional and may lead to -improperly-rendered content. If spaces beside backticks are intentional, this -rule can be disabled for that line or file. - - - -## `MD039` - Spaces inside link text - -Tags: `links`, `whitespace` - -Aliases: `no-space-in-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on links that have spaces surrounding the link text: - -```markdown -[ a link ](https://www.example.com/) -``` - -To fix this, remove the spaces surrounding the link text: - -```markdown -[a link](https://www.example.com/) -``` - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD040` - Fenced code blocks should have a language specified - -Tags: `code`, `language` - -Aliases: `fenced-code-language` - -Parameters: - -- `allowed_languages`: List of languages (`string[]`, default `[]`) -- `language_only`: Require language only (`boolean`, default `false`) - -This rule is triggered when fenced code blocks are used, but a language isn't -specified: - -````markdown -``` -#!/bin/bash -echo Hello world -``` -```` - -To fix this, add a language specifier to the code block: - -````markdown -```bash -#!/bin/bash -echo Hello world -``` -```` - -To display a code block without syntax highlighting, use: - -````markdown -```text -Plain text in a code block -``` -```` - -You can configure the `allowed_languages` parameter to specify a list of -languages code blocks could use. Languages are case sensitive. The default value -is `[]` which means any language specifier is valid. - -You can prevent extra data from being present in the info string of fenced code -blocks. To do so, set the `language_only` parameter to `true`. - - -Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: -`ruby startline=3`) will trigger this rule. - -Rationale: Specifying a language improves content rendering by using the -correct syntax highlighting for code. More information: -. - - - -## `MD041` - First line in a file should be a top-level heading - -Tags: `headings` - -Aliases: `first-line-h1`, `first-line-heading` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is intended to ensure documents have a title and is triggered when -the first line in the file isn't a top-level (h1) heading: - -```markdown -This is a file without a heading -``` - -To fix this, add a top-level heading to the beginning of the file: - -```markdown -# File with heading - -This is a file with a top-level heading -``` - -Because it is common for projects on GitHub to use an image for the heading of -`README.md` and that is not well-supported by Markdown, HTML headings are also -permitted by this rule. For example: - -```markdown -

              - -This is a file with a top-level HTML heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule will not -report a violation. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: The top-level heading often acts as the title of a document. More -information: . - - - -## `MD042` - No empty links - -Tags: `links` - -Aliases: `no-empty-links` - -This rule is triggered when an empty link is encountered: - -```markdown -[an empty link]() -``` - -To fix the violation, provide a destination for the link: - -```markdown -[a valid link](https://example.com/) -``` - -Empty fragments will trigger this rule: - -```markdown -[an empty fragment](#) -``` - -But non-empty fragments will not: - -```markdown -[a valid fragment](#fragment) -``` - -Rationale: Empty links do not lead anywhere and therefore don't function as -links. - - - -## `MD043` - Required heading structure - -Tags: `headings` - -Aliases: `required-headings` - -Parameters: - -- `headings`: List of headings (`string[]`, default `[]`) -- `match_case`: Match case of headings (`boolean`, default `false`) - -This rule is triggered when the headings in a file do not match the array of -headings passed to the rule. It can be used to enforce a standard heading -structure for a set of files. - -To require exactly the following structure: - -```markdown -# Head -## Item -### Detail -``` - -Set the `headings` parameter to: - -```json -[ - "# Head", - "## Item", - "### Detail" -] -``` - -To allow optional headings as with the following structure: - -```markdown -# Head -## Item -### Detail (optional) -## Foot -### Notes (optional) -``` - -Use the special value `"*"` meaning "zero or more unspecified headings" or the -special value `"+"` meaning "one or more unspecified headings" and set the -`headings` parameter to: - -```json -[ - "# Head", - "## Item", - "*", - "## Foot", - "*" -] -``` - -When an error is detected, this rule outputs the line number of the first -problematic heading (otherwise, it outputs the last line number of the file). - -Note that while the `headings` parameter uses the "## Text" ATX heading style -for simplicity, a file may use any supported heading style. - -By default, the case of headings in the document is not required to match that -of `headings`. To require that case match exactly, set the `match_case` -parameter to `true`. - -Rationale: Projects may wish to enforce a consistent document structure across -a set of similar content. - - - -## `MD044` - Proper names should have the correct capitalization - -Tags: `spelling` - -Aliases: `proper-names` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `html_elements`: Include HTML elements (`boolean`, default `true`) -- `names`: List of proper names (`string[]`, default `[]`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when any of the strings in the `names` array do not have -the specified capitalization. It can be used to enforce a standard letter case -for the names of projects and products. - -For example, the language "JavaScript" is usually written with both the 'J' and -'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To -enforce the proper capitalization, specify the desired letter case in the -`names` array: - -```json -[ - "JavaScript" -] -``` - -Sometimes a proper name is capitalized differently in certain contexts. In such -cases, add both forms to the `names` array: - -```json -[ - "GitHub", - "github.com" -] -``` - -Set the `code_blocks` parameter to `false` to disable this rule for code blocks -and spans. Set the `html_elements` parameter to `false` to disable this rule -for HTML elements and attributes (such as when using a proper name as part of -a path for `a`/`href` or `img`/`src`). - -Rationale: Incorrect capitalization of proper names is usually a mistake. - - - -## `MD045` - Images should have alternate text (alt text) - -Tags: `accessibility`, `images` - -Aliases: `no-alt-text` - -This rule is triggered when an image is missing alternate text (alt text) -information. - -Alternate text is commonly specified inline as: - -```markdown -![Alternate text](image.jpg) -``` - -Or with reference syntax as: - -```markdown -![Alternate text][ref] - -... - -[ref]: image.jpg "Optional title" -``` - -Or with HTML as: - -```html -Alternate text -``` - -Guidance for writing alternate text is available from the [W3C][w3c], -[Wikipedia][wikipedia], and [other locations][phase2technology]. - -Rationale: Alternate text is important for accessibility and describes the -content of an image for people who may not be able to see it. - -[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses -[w3c]: https://www.w3.org/WAI/alt/ -[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute - - - -## `MD046` - Code block style - -Tags: `code` - -Aliases: `code-block-style` - -Parameters: - -- `style`: Block style (`string`, default `consistent`, values `consistent` / - `fenced` / `indented`) - -This rule is triggered when unwanted or different code block styles are used in -the same document. - -In the default configuration this rule reports a violation for the following -document: - - - - Some text. - - # Indented code - - More text. - - ```ruby - # Fenced code - ``` - - More text. - - - -To fix violations of this rule, use a consistent style (either indenting or code -fences). - -The configured code block style can be specific (`fenced`, `indented`) or can -require all code blocks match the first code block (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD047` - Files should end with a single newline character - -Tags: `blank_lines` - -Aliases: `single-trailing-newline` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there is not a single newline character at the end -of a file. - -An example that triggers the rule: - -```markdown -# Heading - -This file ends without a newline.[EOF] -``` - -To fix the violation, add a newline character to the end of the file: - -```markdown -# Heading - -This file ends with a newline. -[EOF] -``` - -Rationale: Some programs have trouble with files that do not end with a newline. - -More information: [What's the point in adding a new line to the end of a -file?][stack-exchange] - -[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file - - - -## `MD048` - Code fence style - -Tags: `code` - -Aliases: `code-fence-style` - -Parameters: - -- `style`: Code fence style (`string`, default `consistent`, values `backtick` - / `consistent` / `tilde`) - -This rule is triggered when the symbols used in the document for fenced code -blocks do not match the configured code fence style: - -````markdown -```ruby -# Fenced code -``` - -~~~ruby -# Fenced code -~~~ -```` - -To fix this issue, use the configured code fence style throughout the -document: - -````markdown -```ruby -# Fenced code -``` - -```ruby -# Fenced code -``` -```` - -The configured code fence style can be a specific symbol to use (`backtick`, -`tilde`) or it can require all code fences match the first code fence -(`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD049` - Emphasis style - -Tags: `emphasis` - -Aliases: `emphasis-style` - -Parameters: - -- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for emphasis do not -match the configured emphasis style: - -```markdown -*Text* -_Text_ -``` - -To fix this issue, use the configured emphasis style throughout the document: - -```markdown -*Text* -*Text* -``` - -The configured emphasis style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all emphasis matches the first emphasis -(`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like_this_one. - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD050` - Strong style - -Tags: `emphasis` - -Aliases: `strong-style` - -Parameters: - -- `style`: Strong style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for strong do not -match the configured strong style: - -```markdown -**Text** -__Text__ -``` - -To fix this issue, use the configured strong style throughout the document: - -```markdown -**Text** -**Text** -``` - -The configured strong style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all strong matches the first strong (`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like__this__one. - -Rationale: Consistent formatting makes it easier to understand a document. - - - -## `MD051` - Link fragments should be valid - -Tags: `links` - -Aliases: `link-fragments` - -Parameters: - -- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a link fragment does not match any of the fragments -that are automatically generated for headings in a document: - -```markdown -# Heading Name - -[Link](#fragment) -``` - -To fix this issue, change the link fragment to reference an existing heading's -generated name (see below): - -```markdown -# Heading Name - -[Link](#heading-name) -``` - -For consistency, this rule requires fragments to exactly match the [GitHub -heading algorithm][github-heading-algorithm] which converts letters to -lowercase. Therefore, the following example is reported as a violation: - -```markdown -# Heading Name - -[Link](#Heading-Name) -``` - -To ignore case when comparing fragments with heading names, the `ignore_case` -parameter can be set to `true`. In this configuration, the previous example is -not reported as a violation. - -Alternatively, some platforms allow the syntax `{#named-anchor}` to be used -within a heading to provide a specific name (consisting of only lower-case -letters, numbers, `-`, and `_`): - -```markdown -# Heading Name {#custom-name} - -[Link](#custom-name) -``` - -Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` -attribute can be used to define a fragment: - -```markdown - - -[Link](#bookmark) -``` - -An `a` tag can be useful in scenarios where a heading is not appropriate or for -control over the text of the fragment identifier. - -This rule also recognizes the custom fragment syntax used by GitHub to highlight -[specific content in a document][github-linking-to-content]. - -For example, this link to line 20: - -```markdown -[Link](#L20) -``` - -And this link to content starting within line 19 running into line 21: - -```markdown -[Link](#L19C5-L21C11) -``` - -Rationale: [GitHub section links][github-section-links] are created -automatically for every heading when Markdown content is displayed on GitHub. -This makes it easy to link directly to different sections within a document. -However, section links change if headings are renamed or removed. This rule -helps identify broken section links within a document. - -Section links are **not** part of the CommonMark specification. This rule -enforces the [GitHub heading algorithm][github-heading-algorithm] which is: -convert heading to lowercase, remove punctuation, convert spaces to dashes, -append an incrementing integer as needed for uniqueness. - -[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links -[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb -[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown - - - -## `MD052` - Reference links and images should use a label that is defined - -Tags: `images`, `links` - -Aliases: `reference-links-images` - -Parameters: - -- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) - -Links and images in Markdown can provide the link destination or image source -at the time of use or can define it elsewhere and use a label for reference. -The reference format is convenient for keeping paragraph text clutter-free -and makes it easy to reuse the same URL in multiple places. - -There are three kinds of reference links and images: - -```markdown -Full: [text][label] -Collapsed: [label][] -Shortcut: [label] - -Full: ![text][image] -Collapsed: ![image][] -Shortcut: ![image] - -[label]: https://example.com/label -[image]: https://example.com/image -``` - -A link or image renders correctly when the corresponding label is defined, but -displays as text with brackets when the label is not present. By default, this -rule warns of undefined labels for "full" and "collapsed" reference syntax but -not for "shortcut" syntax because it is ambiguous. - -The text `[example]` could be a shortcut link or the text "example" in brackets, -so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set -the `include_shortcut` parameter to `true`. Note that doing so produces warnings -for *all* text in the document that *could* be a shortcut. If bracketed text is -intentional, brackets can be escaped with the `\` character: `\[example\]`. - - - -## `MD053` - Link and image reference definitions should be needed - -Tags: `images`, `links` - -Aliases: `link-image-reference-definitions` - -Parameters: - -- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source -at the time of use or can use a label to reference a definition elsewhere in -the document. The latter reference format is convenient for keeping paragraph -text clutter-free and makes it easy to reuse the same URL in multiple places. - -Because link and image reference definitions are located separately from -where they are used, there are two scenarios where a definition can be -unnecessary: - -1. If a label is not referenced by any link or image in a document, that - definition is unused and can be deleted. -2. If a label is defined multiple times in a document, the first definition is - used and the others can be deleted. - -This rule considers a reference definition to be used if any link or image -reference has the corresponding label. The "full", "collapsed", and "shortcut" -formats are all supported. - -If there are reference definitions that are deliberately unreferenced, they can -be ignored by setting the `ignored_definitions` parameter. The default value of -this parameter ignores the following convention for adding non-HTML comments to -Markdown: - -```markdown -[//]: # (This behaves like a comment) -``` - - - -## `MD054` - Link and image style - -Tags: `images`, `links` - -Aliases: `link-image-style` - -Parameters: - -- `autolink`: Allow autolinks (`boolean`, default `true`) -- `collapsed`: Allow collapsed reference links and images (`boolean`, default - `true`) -- `full`: Allow full reference links and images (`boolean`, default `true`) -- `inline`: Allow inline links and images (`boolean`, default `true`) -- `shortcut`: Allow shortcut reference links and images (`boolean`, default - `true`) -- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source at -the time of use or can use a label to reference a definition elsewhere in the -document. The three reference formats are convenient for keeping paragraph text -clutter-free and make it easy to reuse the same URL in multiple places. - -By default, this rule allows all link/image styles. - -Setting the `autolink` parameter to `false` disables autolinks: - -```markdown - -``` - -Setting the `inline` parameter to `false` disables inline links and images: - -```markdown -[link](https://example.com) - -![image](https://example.com) -``` - -Setting the `full` parameter to `false` disables full reference links and -images: - -```markdown -[link][url] - -![image][url] - -[url]: https://example.com -``` - -Setting the `collapsed` parameter to `false` disables collapsed reference links -and images: - -```markdown -[url][] - -![url][] - -[url]: https://example.com -``` - -Setting the `shortcut` parameter to `false` disables shortcut reference links -and images: - -```markdown -[url] - -![url] - -[url]: https://example.com -``` - -To fix violations of this rule, change the link or image to use an allowed -style. This rule can automatically fix violations when a link or image can be -converted to the `inline` style (preferred) or a link can be converted to the -`autolink` style (which does not support images and must be an absolute URL). -This rule does *not* fix scenarios that require converting a link or image to -the `full`, `collapsed`, or `shortcut` reference styles because that involves -naming the reference and determining where to insert it in the document. - -Setting the `url_inline` parameter to `false` prevents the use of inline links -with the same absolute URL text/destination and no title because such links can -be converted to autolinks: - -```markdown -[https://example.com](https://example.com) -``` - -To fix `url_inline` violations, use the simpler autolink syntax instead: - -```markdown - -``` - -Rationale: Consistent formatting makes it easier to understand a document. -Autolinks are concise, but appear as URLs which can be long and confusing. -Inline links and images can include descriptive text, but take up more space in -Markdown form. Reference links and images can be easier to read and manipulate -in Markdown form, but require a separate link reference definition. - - - -## `MD055` - Table pipe style - -Tags: `table` - -Aliases: `table-pipe-style` - -Parameters: - -- `style`: Table pipe style (`string`, default `consistent`, values - `consistent` / `leading_and_trailing` / `leading_only` / - `no_leading_or_trailing` / `trailing_only`) - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] -is inconsistent about its use of leading and trailing pipe characters (`|`). - -By default (`consistent` style), the header row of the first table in a document -is used to determine the style that is enforced for every table in the document. -A specific style can be used instead (`leading_and_trailing`, `leading_only`, -`no_leading_or_trailing`, `trailing_only`). - -This table's header row has leading and trailing pipes, but its delimiter row is -missing the trailing pipe and its first row of cells is missing the leading -pipe: - -```markdown -| Header | Header | -| ------ | ------ - Cell | Cell | -``` - -To fix these issues, make sure there is a pipe character at the beginning and -end of every row: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and may also -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table -``` - -Rationale: Some parsers have difficulty with tables that are missing their -leading or trailing pipe characters. The use of leading/trailing pipes can also -help provide visual clarity. - -[gfm-table-055]: https://github.github.com/gfm/#tables-extension- - - - -## `MD056` - Table column count - -Tags: `table` - -Aliases: `table-column-count` - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] -does not have the same number of cells in every row. - -This table's second data row has too few cells and its third data row has too -many cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | -| Cell | Cell | Cell | -``` - -To fix these issues, ensure every row has the same number of cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | Cell | -| Cell | Cell | -``` - -Note that a table's header row and its delimiter row must have the same number -of cells or it will not be recognized as a table (per specification). - -Rationale: Extra cells in a row are usually not shown, so their data is lost. -Missing cells in a row create holes in the table and suggest an omission. - -[gfm-table-056]: https://github.github.com/gfm/#tables-extension- - - - -## `MD058` - Tables should be surrounded by blank lines - -Tags: `table` - -Aliases: `blanks-around-tables` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when tables are either not preceded or not followed by a -blank line: - -```markdown -Some text -| Header | Header | -| ------ | ------ | -| Cell | Cell | -> Blockquote -``` - -To fix violations of this rule, ensure that all tables have a blank line both -before and after (except when the table is at the very beginning or end of the -document): - -```markdown -Some text - -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -> Blockquote -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and will not -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table and the next line is blank - -Some text -``` - -Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse -tables that don't have blank lines before and after them. - - diff --git a/node_modules/markdownlint/doc/md001.md b/node_modules/markdownlint/doc/md001.md deleted file mode 100644 index 72eff27136..0000000000 --- a/node_modules/markdownlint/doc/md001.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD001` - Heading levels should only increment by one level at a time - -Tags: `headings` - -Aliases: `heading-increment` - -This rule is triggered when you skip heading levels in a Markdown document, for -example: - -```markdown -# Heading 1 - -### Heading 3 - -We skipped out a 2nd level heading in this document -``` - -When using multiple heading levels, nested headings should increase by only one -level at a time: - -```markdown -# Heading 1 - -## Heading 2 - -### Heading 3 - -#### Heading 4 - -## Another Heading 2 - -### Another Heading 3 -``` - -Rationale: Headings represent the structure of a document and can be confusing -when skipped - especially for accessibility scenarios. More information: -. diff --git a/node_modules/markdownlint/doc/md003.md b/node_modules/markdownlint/doc/md003.md deleted file mode 100644 index 82da87755a..0000000000 --- a/node_modules/markdownlint/doc/md003.md +++ /dev/null @@ -1,59 +0,0 @@ -# `MD003` - Heading style - -Tags: `headings` - -Aliases: `heading-style` - -Parameters: - -- `style`: Heading style (`string`, default `consistent`, values `atx` / - `atx_closed` / `consistent` / `setext` / `setext_with_atx` / - `setext_with_atx_closed`) - -This rule is triggered when different heading styles are used in the same -document: - -```markdown -# ATX style H1 - -## Closed ATX style H2 ## - -Setext style H1 -=============== -``` - -To fix the issue, use consistent heading styles throughout the document: - -```markdown -# ATX style H1 - -## ATX style H2 -``` - -The `setext_with_atx` and `setext_with_atx_closed` settings allow ATX-style -headings of level 3 or more in documents with setext-style headings (which only -support level 1 and 2 headings): - -```markdown -Setext style H1 -=============== - -Setext style H2 ---------------- - -### ATX style H3 -``` - -Note: The configured heading style can be a specific style to require (`atx`, -`atx_closed`, `setext`, `setext_with_atx`, `setext_with_atx_closed`), or can -require that all heading styles match the first heading style via `consistent`. - -Note: The placement of a horizontal rule directly below a line of text can -trigger this rule by turning that text into a level 2 setext-style heading: - -```markdown -A line of text followed by a horizontal rule becomes a heading ---- -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md004.md b/node_modules/markdownlint/doc/md004.md deleted file mode 100644 index fa1576b5ac..0000000000 --- a/node_modules/markdownlint/doc/md004.md +++ /dev/null @@ -1,50 +0,0 @@ -# `MD004` - Unordered list style - -Tags: `bullet`, `ul` - -Aliases: `ul-style` - -Parameters: - -- `style`: List style (`string`, default `consistent`, values `asterisk` / - `consistent` / `dash` / `plus` / `sublist`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for unordered -list items do not match the configured unordered list style: - -```markdown -* Item 1 -+ Item 2 -- Item 3 -``` - -To fix this issue, use the configured style for list items throughout the -document: - -```markdown -* Item 1 -* Item 2 -* Item 3 -``` - -The configured list style can ensure all list styling is a specific symbol -(`asterisk`, `plus`, `dash`), ensure each sublist has a consistent symbol that -differs from its parent list (`sublist`), or ensure all list styles match the -first list style (`consistent`). - -For example, the following is valid for the `sublist` style because the -outer-most indent uses asterisk, the middle indent uses plus, and the inner-most -indent uses dash: - -```markdown -* Item 1 - + Item 2 - - Item 3 - + Item 4 -* Item 4 - + Item 5 -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md005.md b/node_modules/markdownlint/doc/md005.md deleted file mode 100644 index 375b643886..0000000000 --- a/node_modules/markdownlint/doc/md005.md +++ /dev/null @@ -1,53 +0,0 @@ -# `MD005` - Inconsistent indentation for list items at the same level - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `list-indent` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are parsed as being at the same level, -but don't have the same indentation: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * A misaligned item -``` - -Usually, this rule will be triggered because of a typo. Correct the indentation -for the list to fix it: - -```markdown -* Item 1 - * Nested Item 1 - * Nested Item 2 - * Nested Item 3 -``` - -Sequentially-ordered list markers are usually left-aligned such that all items -have the same starting column: - -```markdown -... -8. Item -9. Item -10. Item -11. Item -... -``` - -This rule also supports right-alignment of list markers such that all items have -the same ending column: - -```markdown -... - 8. Item - 9. Item -10. Item -11. Item -... -``` - -Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md007.md b/node_modules/markdownlint/doc/md007.md deleted file mode 100644 index 7dd7ed7165..0000000000 --- a/node_modules/markdownlint/doc/md007.md +++ /dev/null @@ -1,52 +0,0 @@ -# `MD007` - Unordered list indentation - -Tags: `bullet`, `indentation`, `ul` - -Aliases: `ul-indent` - -Parameters: - -- `indent`: Spaces for indent (`integer`, default `2`) -- `start_indent`: Spaces for first level indent (when start_indented is set) - (`integer`, default `2`) -- `start_indented`: Whether to indent the first level of the list (`boolean`, - default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when list items are not indented by the configured -number of spaces (default: 2). - -Example: - -```markdown -* List item - * Nested list item indented by 3 spaces -``` - -Corrected Example: - -```markdown -* List item - * Nested list item indented by 2 spaces -``` - -Note: This rule applies to a sublist only if its parent lists are all also -unordered (otherwise, extra indentation of ordered lists interferes with the -rule). - -The `start_indented` parameter allows the first level of lists to be indented by -the configured number of spaces rather than starting at zero. The `start_indent` -parameter allows the first level of lists to be indented by a different number -of spaces than the rest (ignored when `start_indented` is not set). - -Rationale: Indenting by 2 spaces allows the content of a nested list to be in -line with the start of the content of the parent list when a single space is -used after the list marker. Indenting by 4 spaces is consistent with code blocks -and simpler for editors to implement. Additionally, this can be a compatibility -issue for other Markdown parsers, which require 4-space indents. More -information: [Markdown Style Guide][markdown-style-guide]. - -Note: See [Prettier.md](Prettier.md) for compatibility information. - -[markdown-style-guide]: https://cirosantilli.com/markdown-style-guide#indentation-of-content-inside-lists diff --git a/node_modules/markdownlint/doc/md009.md b/node_modules/markdownlint/doc/md009.md deleted file mode 100644 index 180008bc71..0000000000 --- a/node_modules/markdownlint/doc/md009.md +++ /dev/null @@ -1,51 +0,0 @@ -# `MD009` - Trailing spaces - -Tags: `whitespace` - -Aliases: `no-trailing-spaces` - -Parameters: - -- `br_spaces`: Spaces for line break (`integer`, default `2`) -- `list_item_empty_lines`: Allow spaces for empty lines in list items - (`boolean`, default `false`) -- `strict`: Include unnecessary breaks (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any lines that end with unexpected whitespace. To fix -this, remove the trailing space from the end of the line. - -Note: Trailing space is allowed in indented and fenced code blocks because some -languages require it. - -The `br_spaces` parameter allows an exception to this rule for a specific number -of trailing spaces, typically used to insert an explicit line break. The default -value allows 2 spaces to indicate a hard break (\
              element). - -Note: You must set `br_spaces` to a value >= 2 for this parameter to take -effect. Setting `br_spaces` to 1 behaves the same as 0, disallowing any trailing -spaces. - -By default, this rule will not trigger when the allowed number of spaces is -used, even when it doesn't create a hard break (for example, at the end of a -paragraph). To report such instances as well, set the `strict` parameter to -`true`. - -```markdown -Text text text -text[2 spaces] -``` - -Using spaces to indent blank lines inside a list item is usually not necessary, -but some parsers require it. Set the `list_item_empty_lines` parameter to `true` -to allow this (even when `strict` is `true`): - -```markdown -- list item text - [2 spaces] - list item text -``` - -Rationale: Except when being used to create a line break, trailing whitespace -has no purpose and does not affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md010.md b/node_modules/markdownlint/doc/md010.md deleted file mode 100644 index 95c0ce29f8..0000000000 --- a/node_modules/markdownlint/doc/md010.md +++ /dev/null @@ -1,56 +0,0 @@ -# `MD010` - Hard tabs - -Tags: `hard_tab`, `whitespace` - -Aliases: `no-hard-tabs` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `ignore_code_languages`: Fenced code languages to ignore (`string[]`, default - `[]`) -- `spaces_per_tab`: Number of spaces for each hard tab (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered by any lines that contain hard tab characters instead -of using spaces for indentation. To fix this, replace any hard tab characters -with spaces instead. - -Example: - - - -```markdown -Some text - - * hard tab character used to indent the list item -``` - - - -Corrected example: - -```markdown -Some text - - * Spaces used to indent the list item instead -``` - -You have the option to exclude this rule for code blocks and spans. To do so, -set the `code_blocks` parameter to `false`. Code blocks and spans are included -by default since handling of tabs by Markdown tools can be inconsistent (e.g., -using 4 vs. 8 spaces). - -When code blocks are scanned (e.g., by default or if `code_blocks` is `true`), -the `ignore_code_languages` parameter can be set to a list of languages that -should be ignored (i.e., hard tabs will be allowed, though not required). This -makes it easier for documents to include code for languages that require hard -tabs. - -By default, violations of this rule are fixed by replacing the tab with 1 space -character. To use a different number of spaces, set the `spaces_per_tab` -parameter to the desired value. - -Rationale: Hard tabs are often rendered inconsistently by different editors and -can be harder to work with than spaces. diff --git a/node_modules/markdownlint/doc/md011.md b/node_modules/markdownlint/doc/md011.md deleted file mode 100644 index d574b34aa3..0000000000 --- a/node_modules/markdownlint/doc/md011.md +++ /dev/null @@ -1,30 +0,0 @@ -# `MD011` - Reversed link syntax - -Tags: `links` - -Aliases: `no-reversed-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when text that appears to be a link is encountered, but -where the syntax appears to have been reversed (the `[]` and `()` are -reversed): - -```markdown -(Incorrect link syntax)[https://www.example.com/] -``` - -To fix this, swap the `[]` and `()` around: - -```markdown -[Correct link syntax](https://www.example.com/) -``` - -Note: [Markdown Extra](https://en.wikipedia.org/wiki/Markdown_Extra)-style -footnotes do not trigger this rule: - -```markdown -For (example)[^1] -``` - -Rationale: Reversed links are not rendered as usable links. diff --git a/node_modules/markdownlint/doc/md012.md b/node_modules/markdownlint/doc/md012.md deleted file mode 100644 index 438c9fa643..0000000000 --- a/node_modules/markdownlint/doc/md012.md +++ /dev/null @@ -1,38 +0,0 @@ -# `MD012` - Multiple consecutive blank lines - -Tags: `blank_lines`, `whitespace` - -Aliases: `no-multiple-blanks` - -Parameters: - -- `maximum`: Consecutive blank lines (`integer`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are multiple consecutive blank lines in the -document: - -```markdown -Some text here - - -Some more text here -``` - -To fix this, delete the offending lines: - -```markdown -Some text here - -Some more text here -``` - -Note: this rule will not be triggered if there are multiple consecutive blank -lines inside code blocks. - -Note: The `maximum` parameter can be used to configure the maximum number of -consecutive blank lines. - -Rationale: Except in a code block, blank lines serve no purpose and do not -affect the rendering of content. diff --git a/node_modules/markdownlint/doc/md013.md b/node_modules/markdownlint/doc/md013.md deleted file mode 100644 index e4ac8ac123..0000000000 --- a/node_modules/markdownlint/doc/md013.md +++ /dev/null @@ -1,58 +0,0 @@ -# `MD013` - Line length - -Tags: `line_length` - -Aliases: `line-length` - -Parameters: - -- `code_block_line_length`: Number of characters for code blocks (`integer`, - default `80`) -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `heading_line_length`: Number of characters for headings (`integer`, default - `80`) -- `headings`: Include headings (`boolean`, default `true`) -- `line_length`: Number of characters (`integer`, default `80`) -- `stern`: Stern length checking (`boolean`, default `false`) -- `strict`: Strict length checking (`boolean`, default `false`) -- `tables`: Include tables (`boolean`, default `true`) - -This rule is triggered when there are lines that are longer than the -configured `line_length` (default: 80 characters). To fix this, split the line -up into multiple lines. To set a different maximum length for headings, use -`heading_line_length`. To set a different maximum length for code blocks, use -`code_block_line_length` - -This rule has an exception when there is no whitespace beyond the configured -line length. This allows you to include items such as long URLs without being -forced to break them in the middle. To disable this exception, set the `strict` -parameter to `true` and an issue will be reported when any line is too long. To -warn for lines that are too long and could be fixed but allow long lines -without spaces, set the `stern` parameter to `true`. - -For example (assuming normal behavior): - -```markdown -IF THIS LINE IS THE MAXIMUM LENGTH -This line is okay because there are-no-spaces-beyond-that-length -This line is a violation because there are spaces beyond that length -This-line-is-okay-because-there-are-no-spaces-anywhere-within -``` - -In `strict` mode, the last three lines above are all violations. In `stern` -mode, the middle two lines above are both violations, but the last is okay. - -You have the option to exclude this rule for code blocks, tables, or headings. -To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. - -Code blocks are included in this rule by default since it is often a -requirement for document readability, and tentatively compatible with code -rules. Still, some languages do not lend themselves to short lines. - -Lines with link/image reference definitions and standalone lines (i.e., not part -of a paragraph) with only a link/image (possibly using (strong) emphasis) are -always exempted from this rule (even in `strict` mode) because there is often no -way to split such lines without breaking the URL. - -Rationale: Extremely long lines can be difficult to work with in some editors. -More information: . diff --git a/node_modules/markdownlint/doc/md014.md b/node_modules/markdownlint/doc/md014.md deleted file mode 100644 index 0786dfa343..0000000000 --- a/node_modules/markdownlint/doc/md014.md +++ /dev/null @@ -1,54 +0,0 @@ -# `MD014` - Dollar signs used before commands without showing output - -Tags: `code` - -Aliases: `commands-show-output` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there are code blocks showing shell commands to be -typed, and *all* of the shell commands are preceded by dollar signs ($): - - - -```markdown -$ ls -$ cat foo -$ less bar -``` - - - -The dollar signs are unnecessary in this situation, and should not be -included: - -```markdown -ls -cat foo -less bar -``` - -Showing output for commands preceded by dollar signs does not trigger this rule: - -```markdown -$ ls -foo bar -$ cat foo -Hello world -$ cat bar -baz -``` - -Because some commands do not produce output, it is not a violation if *some* -commands do not have output: - -```markdown -$ mkdir test -mkdir: created directory 'test' -$ ls test -``` - -Rationale: It is easier to copy/paste and less noisy if the dollar signs -are omitted when they are not needed. See - -for more information. diff --git a/node_modules/markdownlint/doc/md018.md b/node_modules/markdownlint/doc/md018.md deleted file mode 100644 index 870297a8aa..0000000000 --- a/node_modules/markdownlint/doc/md018.md +++ /dev/null @@ -1,27 +0,0 @@ -# `MD018` - No space after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-missing-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing after the hash characters -in an atx style heading: - -```markdown -#Heading 1 - -##Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md019.md b/node_modules/markdownlint/doc/md019.md deleted file mode 100644 index 4bcb44f643..0000000000 --- a/node_modules/markdownlint/doc/md019.md +++ /dev/null @@ -1,28 +0,0 @@ -# `MD019` - Multiple spaces after hash on atx style heading - -Tags: `atx`, `headings`, `spaces` - -Aliases: `no-multiple-space-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in an atx style heading: - -```markdown -# Heading 1 - -## Heading 2 -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 - -## Heading 2 -``` - -Rationale: Extra space has no purpose and does not affect the rendering of -content. diff --git a/node_modules/markdownlint/doc/md020.md b/node_modules/markdownlint/doc/md020.md deleted file mode 100644 index f711b26036..0000000000 --- a/node_modules/markdownlint/doc/md020.md +++ /dev/null @@ -1,29 +0,0 @@ -# `MD020` - No space inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-missing-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when spaces are missing inside the hash characters -in a closed atx style heading: - -```markdown -#Heading 1# - -##Heading 2## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading is missing spaces. - -Rationale: Violations of this rule can lead to improperly rendered content. diff --git a/node_modules/markdownlint/doc/md021.md b/node_modules/markdownlint/doc/md021.md deleted file mode 100644 index 5aa99a615f..0000000000 --- a/node_modules/markdownlint/doc/md021.md +++ /dev/null @@ -1,31 +0,0 @@ -# `MD021` - Multiple spaces inside hashes on closed atx style heading - -Tags: `atx_closed`, `headings`, `spaces` - -Aliases: `no-multiple-space-closed-atx` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when more than one space is used to separate the -heading text from the hash characters in a closed atx style heading: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -To fix this, separate the heading text from the hash character by a single -space: - -```markdown -# Heading 1 # - -## Heading 2 ## -``` - -Note: this rule will fire if either side of the heading contains multiple -spaces. - -Rationale: Extra space has no purpose and does not affect the rendering of -content. diff --git a/node_modules/markdownlint/doc/md022.md b/node_modules/markdownlint/doc/md022.md deleted file mode 100644 index c05edcc05c..0000000000 --- a/node_modules/markdownlint/doc/md022.md +++ /dev/null @@ -1,52 +0,0 @@ -# `MD022` - Headings should be surrounded by blank lines - -Tags: `blank_lines`, `headings` - -Aliases: `blanks-around-headings` - -Parameters: - -- `lines_above`: Blank lines above heading (`integer|integer[]`, default `1`) -- `lines_below`: Blank lines below heading (`integer|integer[]`, default `1`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when headings (any style) are either not preceded or not -followed by at least one blank line: - -```markdown -# Heading 1 -Some text - -Some more text -## Heading 2 -``` - -To fix this, ensure that all headings have a blank line both before and after -(except where the heading is at the beginning or end of the document): - -```markdown -# Heading 1 - -Some text - -Some more text - -## Heading 2 -``` - -The `lines_above` and `lines_below` parameters can be used to specify a -different number of blank lines (including `0`) above or below each heading. -If the value `-1` is used for either parameter, any number of blank lines is -allowed. To customize the number of lines above or below each heading level -individually, specify a `number[]` where values correspond to heading levels -1-6 (in order). - -Notes: If `lines_above` or `lines_below` are configured to require more than one -blank line, [MD012/no-multiple-blanks](md012.md) should also be customized. This -rule checks for *at least* as many blank lines as specified; any extra blank -lines are ignored. - -Rationale: Aside from aesthetic reasons, some parsers, including `kramdown`, -will not parse headings that don't have a blank line before, and will parse them -as regular text. diff --git a/node_modules/markdownlint/doc/md023.md b/node_modules/markdownlint/doc/md023.md deleted file mode 100644 index 1644451b49..0000000000 --- a/node_modules/markdownlint/doc/md023.md +++ /dev/null @@ -1,33 +0,0 @@ -# `MD023` - Headings must start at the beginning of the line - -Tags: `headings`, `spaces` - -Aliases: `heading-start-left` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a heading is indented by one or more spaces: - -```markdown -Some text - - # Indented heading -``` - -To fix this, ensure that all headings start at the beginning of the line: - -```markdown -Some text - -# Heading -``` - -Note that scenarios like block quotes "indent" the start of the line, so the -following is also correct: - -```markdown -> # Heading in Block Quote -``` - -Rationale: Headings that don't start at the beginning of the line will not be -parsed as headings, and will instead appear as regular text. diff --git a/node_modules/markdownlint/doc/md024.md b/node_modules/markdownlint/doc/md024.md deleted file mode 100644 index 5c26c71201..0000000000 --- a/node_modules/markdownlint/doc/md024.md +++ /dev/null @@ -1,44 +0,0 @@ -# `MD024` - Multiple headings with the same content - -Tags: `headings` - -Aliases: `no-duplicate-heading` - -Parameters: - -- `siblings_only`: Only check sibling headings (`boolean`, default `false`) - -This rule is triggered if there are multiple headings in the document that have -the same text: - -```markdown -# Some text - -## Some text -``` - -To fix this, ensure that the content of each heading is different: - -```markdown -# Some text - -## Some more text -``` - -If the parameter `siblings_only` is set to `true`, duplication is allowed for -headings with different parents (as is common in changelogs): - -```markdown -# Change log - -## 1.0.0 - -### Features - -## 2.0.0 - -### Features -``` - -Rationale: Some Markdown parsers generate anchors for headings based on the -heading name; headings with the same content can cause problems with that. diff --git a/node_modules/markdownlint/doc/md025.md b/node_modules/markdownlint/doc/md025.md deleted file mode 100644 index 7c764b33d5..0000000000 --- a/node_modules/markdownlint/doc/md025.md +++ /dev/null @@ -1,49 +0,0 @@ -# `MD025` - Multiple top-level headings in the same document - -Tags: `headings` - -Aliases: `single-h1`, `single-title` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is triggered when a top-level heading is in use (the first line of -the file is an h1 heading), and more than one h1 heading is in use in the -document: - -```markdown -# Top level heading - -# Another top-level heading -``` - -To fix, structure your document so there is a single h1 heading that is -the title for the document. Subsequent headings must be -lower-level headings (h2, h3, etc.): - -```markdown -# Title - -## Heading - -## Another heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule treats -that as a top level heading and will report a violation for any subsequent -top-level headings. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: A top-level heading is an h1 on the first line of the file, and -serves as the title for the document. If this convention is in use, then there -can not be more than one title for the document, and the entire document should -be contained within this heading. diff --git a/node_modules/markdownlint/doc/md026.md b/node_modules/markdownlint/doc/md026.md deleted file mode 100644 index cf7161cda7..0000000000 --- a/node_modules/markdownlint/doc/md026.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD026` - Trailing punctuation in heading - -Tags: `headings` - -Aliases: `no-trailing-punctuation` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!。,;:!`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on any heading that has one of the specified normal or -full-width punctuation characters as the last character in the line: - -```markdown -# This is a heading. -``` - -To fix this, remove the trailing punctuation: - -```markdown -# This is a heading -``` - -Note: The `punctuation` parameter can be used to specify what characters count -as punctuation at the end of a heading. For example, you can change it to -`".,;:"` to allow headings that end with an exclamation point. `?` is -allowed by default because of how common it is in headings of FAQ-style -documents. Setting the `punctuation` parameter to `""` allows all characters - -and is equivalent to disabling the rule. - -Note: The trailing semicolon of [HTML entity references][html-entity-references] -like `©`, `©`, and `©` is ignored by this rule. - -Rationale: Headings are not meant to be full sentences. More information: -[Punctuation at the end of headers][end-punctuation]. - -[end-punctuation]: https://cirosantilli.com/markdown-style-guide#punctuation-at-the-end-of-headers -[html-entity-references]: https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references diff --git a/node_modules/markdownlint/doc/md027.md b/node_modules/markdownlint/doc/md027.md deleted file mode 100644 index 0b910992f4..0000000000 --- a/node_modules/markdownlint/doc/md027.md +++ /dev/null @@ -1,24 +0,0 @@ -# `MD027` - Multiple spaces after blockquote symbol - -Tags: `blockquote`, `indentation`, `whitespace` - -Aliases: `no-multiple-space-blockquote` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when blockquotes have more than one space after the -blockquote (`>`) symbol: - -```markdown -> This is a blockquote with bad indentation -> there should only be one. -``` - -To fix, remove any extraneous space: - -```markdown -> This is a blockquote with correct -> indentation. -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md028.md b/node_modules/markdownlint/doc/md028.md deleted file mode 100644 index 94972ed275..0000000000 --- a/node_modules/markdownlint/doc/md028.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD028` - Blank line inside blockquote - -Tags: `blockquote`, `whitespace` - -Aliases: `no-blanks-blockquote` - -This rule is triggered when two blockquote blocks are separated by nothing -except for a blank line: - -```markdown -> This is a blockquote -> which is immediately followed by - -> this blockquote. Unfortunately -> In some parsers, these are treated as the same blockquote. -``` - -To fix this, ensure that any blockquotes that are right next to each other -have some text in between: - -```markdown -> This is a blockquote. - -And Jimmy also said: - -> This too is a blockquote. -``` - -Alternatively, if they are supposed to be the same quote, then add the -blockquote symbol at the beginning of the blank line: - -```markdown -> This is a blockquote. -> -> This is the same blockquote. -``` - -Rationale: Some Markdown parsers will treat two blockquotes separated by one -or more blank lines as the same blockquote, while others will treat them as -separate blockquotes. diff --git a/node_modules/markdownlint/doc/md029.md b/node_modules/markdownlint/doc/md029.md deleted file mode 100644 index 1f00e7761c..0000000000 --- a/node_modules/markdownlint/doc/md029.md +++ /dev/null @@ -1,98 +0,0 @@ -# `MD029` - Ordered list item prefix - -Tags: `ol` - -Aliases: `ol-prefix` - -Parameters: - -- `style`: List style (`string`, default `one_or_ordered`, values `one` / - `one_or_ordered` / `ordered` / `zero`) - -This rule is triggered for ordered lists that do not either start with '1.' or -do not have a prefix that increases in numerical order (depending on the -configured style). The less-common pattern of using '0.' as a first prefix or -for all prefixes is also supported. - -Example valid list if the style is configured as 'one': - -```markdown -1. Do this. -1. Do that. -1. Done. -``` - -Examples of valid lists if the style is configured as 'ordered': - -```markdown -1. Do this. -2. Do that. -3. Done. -``` - -```markdown -0. Do this. -1. Do that. -2. Done. -``` - -All three examples are valid when the style is configured as 'one_or_ordered'. - -Example valid list if the style is configured as 'zero': - -```markdown -0. Do this. -0. Do that. -0. Done. -``` - -Example invalid list for all styles: - -```markdown -1. Do this. -3. Done. -``` - -This rule supports 0-prefixing ordered list items for uniform indentation: - -```markdown -... -08. Item -09. Item -10. Item -11. Item -... -``` - -Note: This rule will report violations for cases like the following where an -improperly-indented code block (or similar) appears between two list items and -"breaks" the list in two: - - - -~~~markdown -1. First list - -```text -Code block -``` - -1. Second list -~~~ - -The fix is to indent the code block so it becomes part of the preceding list -item as intended: - -~~~markdown -1. First list - - ```text - Code block - ``` - -2. Still first list -~~~ - - - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md030.md b/node_modules/markdownlint/doc/md030.md deleted file mode 100644 index 59454d2983..0000000000 --- a/node_modules/markdownlint/doc/md030.md +++ /dev/null @@ -1,82 +0,0 @@ -# `MD030` - Spaces after list markers - -Tags: `ol`, `ul`, `whitespace` - -Aliases: `list-marker-space` - -Parameters: - -- `ol_multi`: Spaces for multi-line ordered list items (`integer`, default `1`) -- `ol_single`: Spaces for single-line ordered list items (`integer`, default - `1`) -- `ul_multi`: Spaces for multi-line unordered list items (`integer`, default - `1`) -- `ul_single`: Spaces for single-line unordered list items (`integer`, default - `1`) - -Fixable: Some violations can be fixed by tooling - -This rule checks for the number of spaces between a list marker (e.g. '`-`', -'`*`', '`+`' or '`1.`') and the text of the list item. - -The number of spaces checked for depends on the document style in use, but the -default is 1 space after any list marker: - -```markdown -* Foo -* Bar -* Baz - -1. Foo -1. Bar -1. Baz - -1. Foo - * Bar -1. Baz -``` - -A document style may change the number of spaces after unordered list items -and ordered list items independently, as well as based on whether the content -of every item in the list consists of a single paragraph or multiple -paragraphs (including sub-lists and code blocks). - -For example, the style guide at - -specifies that 1 space after the list marker should be used if every item in -the list fits within a single paragraph, but to use 2 or 3 spaces (for ordered -and unordered lists respectively) if there are multiple paragraphs of content -inside the list: - -```markdown -* Foo -* Bar -* Baz -``` - -vs. - -```markdown -* Foo - - Second paragraph - -* Bar -``` - -or - -```markdown -1. Foo - - Second paragraph - -1. Bar -``` - -To fix this, ensure the correct number of spaces are used after the list marker -for your selected document style. - -Rationale: Violations of this rule can lead to improperly rendered content. - -Note: See [Prettier.md](Prettier.md) for compatibility information. diff --git a/node_modules/markdownlint/doc/md031.md b/node_modules/markdownlint/doc/md031.md deleted file mode 100644 index 9663e5da04..0000000000 --- a/node_modules/markdownlint/doc/md031.md +++ /dev/null @@ -1,50 +0,0 @@ -# `MD031` - Fenced code blocks should be surrounded by blank lines - -Tags: `blank_lines`, `code` - -Aliases: `blanks-around-fences` - -Parameters: - -- `list_items`: Include list items (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when fenced code blocks are either not preceded or not -followed by a blank line: - -````markdown -Some text -``` -Code block -``` - -``` -Another code block -``` -Some more text -```` - -To fix this, ensure that all fenced code blocks have a blank line both before -and after (except where the block is at the beginning or end of the document): - -````markdown -Some text - -``` -Code block -``` - -``` -Another code block -``` - -Some more text -```` - -Set the `list_items` parameter to `false` to disable this rule for list items. -Disabling this behavior for lists can be useful if it is necessary to create a -[tight](https://spec.commonmark.org/0.29/#tight) list containing a code fence. - -Rationale: Aside from aesthetic reasons, some parsers, including kramdown, will -not parse fenced code blocks that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/doc/md032.md b/node_modules/markdownlint/doc/md032.md deleted file mode 100644 index 41c8b41115..0000000000 --- a/node_modules/markdownlint/doc/md032.md +++ /dev/null @@ -1,55 +0,0 @@ -# `MD032` - Lists should be surrounded by blank lines - -Tags: `blank_lines`, `bullet`, `ol`, `ul` - -Aliases: `blanks-around-lists` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when lists (of any kind) are either not preceded or not -followed by a blank line: - -```markdown -Some text -* List item -* List item - -1. List item -2. List item -*** -``` - -In the first case above, text immediately precedes the unordered list. In the -second case above, a thematic break immediately follows the ordered list. To fix -violations of this rule, ensure that all lists have a blank line both before and -after (except when the list is at the very beginning or end of the document): - -```markdown -Some text - -* List item -* List item - -1. List item -2. List item - -*** -``` - -Note that the following case is **not** a violation of this rule: - -```markdown -1. List item - More item 1 -2. List item -More item 2 -``` - -Although it is not indented, the text "More item 2" is referred to as a -[lazy continuation line][lazy-continuation] and considered part of the second -list item. - -Rationale: In addition to aesthetic reasons, some parsers, including kramdown, -will not parse lists that don't have blank lines before and after them. - -[lazy-continuation]: https://spec.commonmark.org/0.30/#lazy-continuation-line diff --git a/node_modules/markdownlint/doc/md033.md b/node_modules/markdownlint/doc/md033.md deleted file mode 100644 index d2f5ddecb2..0000000000 --- a/node_modules/markdownlint/doc/md033.md +++ /dev/null @@ -1,27 +0,0 @@ -# `MD033` - Inline HTML - -Tags: `html` - -Aliases: `no-inline-html` - -Parameters: - -- `allowed_elements`: Allowed elements (`string[]`, default `[]`) - -This rule is triggered whenever raw HTML is used in a Markdown document: - -```markdown -

              Inline HTML heading

              -``` - -To fix this, use 'pure' Markdown instead of including raw HTML: - -```markdown -# Markdown heading -``` - -Note: To allow specific HTML elements, use the `allowed_elements` parameter. - -Rationale: Raw HTML is allowed in Markdown, but this rule is included for -those who want their documents to only include "pure" Markdown, or for those -who are rendering Markdown documents into something other than HTML. diff --git a/node_modules/markdownlint/doc/md034.md b/node_modules/markdownlint/doc/md034.md deleted file mode 100644 index dc9c3cf618..0000000000 --- a/node_modules/markdownlint/doc/md034.md +++ /dev/null @@ -1,55 +0,0 @@ -# `MD034` - Bare URL used - -Tags: `links`, `url` - -Aliases: `no-bare-urls` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered whenever a URL or email address appears without -surrounding angle brackets: - -```markdown -For more info, visit https://www.example.com/ or email user@example.com. -``` - -To fix this, add angle brackets around the URL or email address: - -```markdown -For more info, visit or email . -``` - -If a URL or email address contains non-ASCII characters, it may be not be -handled as intended even when angle brackets are present. In such cases, -[percent-encoding](https://en.m.wikipedia.org/wiki/Percent-encoding) can be used -to comply with the required syntax for URL and email. - -Note: To include a bare URL or email without it being converted into a link, -wrap it in a code span: - -```markdown -Not a clickable link: `https://www.example.com` -``` - -Note: The following scenario does not trigger this rule because it could be a -shortcut link: - -```markdown -[https://www.example.com] -``` - -Note: The following syntax triggers this rule because the nested link could be -a shortcut link (which takes precedence): - -```markdown -[text [shortcut] text](https://example.com) -``` - -To avoid this, escape both inner brackets: - -```markdown -[link \[text\] link](https://example.com) -``` - -Rationale: Without angle brackets, a bare URL or email isn't converted into a -link by some Markdown parsers. diff --git a/node_modules/markdownlint/doc/md035.md b/node_modules/markdownlint/doc/md035.md deleted file mode 100644 index ee74516cbc..0000000000 --- a/node_modules/markdownlint/doc/md035.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD035` - Horizontal rule style - -Tags: `hr` - -Aliases: `hr-style` - -Parameters: - -- `style`: Horizontal rule style (`string`, default `consistent`) - -This rule is triggered when inconsistent styles of horizontal rules are used -in the document: - -```markdown ---- - -- - - - -*** - -* * * - -**** -``` - -To fix this, use the same horizontal rule everywhere: - -```markdown ---- - ---- -``` - -The configured style can ensure all horizontal rules use a specific string or it -can ensure all horizontal rules match the first horizontal rule (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md036.md b/node_modules/markdownlint/doc/md036.md deleted file mode 100644 index 1518904f79..0000000000 --- a/node_modules/markdownlint/doc/md036.md +++ /dev/null @@ -1,45 +0,0 @@ -# `MD036` - Emphasis used instead of a heading - -Tags: `emphasis`, `headings` - -Aliases: `no-emphasis-as-heading` - -Parameters: - -- `punctuation`: Punctuation characters (`string`, default `.,;:!?。,;:!?`) - -This check looks for instances where emphasized (i.e. bold or italic) text is -used to separate sections, where a heading should be used instead: - -```markdown -**My document** - -Lorem ipsum dolor sit amet... - -_Another section_ - -Consectetur adipiscing elit, sed do eiusmod. -``` - -To fix this, use Markdown headings instead of emphasized text to denote -sections: - -```markdown -# My document - -Lorem ipsum dolor sit amet... - -## Another section - -Consectetur adipiscing elit, sed do eiusmod. -``` - -Note: This rule looks for single-line paragraphs that consist entirely -of emphasized text. It won't fire on emphasis used within regular text, -multi-line emphasized paragraphs, or paragraphs ending in punctuation -(normal or full-width). Similarly to rule MD026, you can configure what -characters are recognized as punctuation. - -Rationale: Using emphasis instead of a heading prevents tools from inferring -the structure of a document. More information: -. diff --git a/node_modules/markdownlint/doc/md037.md b/node_modules/markdownlint/doc/md037.md deleted file mode 100644 index c96ba3caf6..0000000000 --- a/node_modules/markdownlint/doc/md037.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD037` - Spaces inside emphasis markers - -Tags: `emphasis`, `whitespace` - -Aliases: `no-space-in-emphasis` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when emphasis markers (bold, italic) are used, but they -have spaces between the markers and the text: - -```markdown -Here is some ** bold ** text. - -Here is some * italic * text. - -Here is some more __ bold __ text. - -Here is some more _ italic _ text. -``` - -To fix this, remove the spaces around the emphasis markers: - -```markdown -Here is some **bold** text. - -Here is some *italic* text. - -Here is some more __bold__ text. - -Here is some more _italic_ text. -``` - -Rationale: Emphasis is only parsed as such when the asterisks/underscores -aren't surrounded by spaces. This rule attempts to detect where -they were surrounded by spaces, but it appears that emphasized text was -intended by the author. diff --git a/node_modules/markdownlint/doc/md038.md b/node_modules/markdownlint/doc/md038.md deleted file mode 100644 index 86cf525961..0000000000 --- a/node_modules/markdownlint/doc/md038.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD038` - Spaces inside code span elements - -Tags: `code`, `whitespace` - -Aliases: `no-space-in-code` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered for code span elements that have spaces adjacent to the -backticks: - -```markdown -`some text ` - -` some text` -``` - -To fix this, remove any spaces adjacent to the backticks: - -```markdown -`some text` -``` - -Note: A single leading and trailing space is allowed by the specification and -automatically trimmed (in order to allow for code spans that embed backticks): - -```markdown -`` `backticks` `` -``` - -Note: A single leading or trailing space is allowed if used to separate code -span markers from an embedded backtick (though the space is not trimmed): - -```markdown -`` ` embedded backtick`` -``` - -Rationale: Violations of this rule are usually unintentional and may lead to -improperly-rendered content. If spaces beside backticks are intentional, this -rule can be disabled for that line or file. diff --git a/node_modules/markdownlint/doc/md039.md b/node_modules/markdownlint/doc/md039.md deleted file mode 100644 index 8e854cde2f..0000000000 --- a/node_modules/markdownlint/doc/md039.md +++ /dev/null @@ -1,21 +0,0 @@ -# `MD039` - Spaces inside link text - -Tags: `links`, `whitespace` - -Aliases: `no-space-in-links` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered on links that have spaces surrounding the link text: - -```markdown -[ a link ](https://www.example.com/) -``` - -To fix this, remove the spaces surrounding the link text: - -```markdown -[a link](https://www.example.com/) -``` - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md040.md b/node_modules/markdownlint/doc/md040.md deleted file mode 100644 index 5272fc0986..0000000000 --- a/node_modules/markdownlint/doc/md040.md +++ /dev/null @@ -1,52 +0,0 @@ -# `MD040` - Fenced code blocks should have a language specified - -Tags: `code`, `language` - -Aliases: `fenced-code-language` - -Parameters: - -- `allowed_languages`: List of languages (`string[]`, default `[]`) -- `language_only`: Require language only (`boolean`, default `false`) - -This rule is triggered when fenced code blocks are used, but a language isn't -specified: - -````markdown -``` -#!/bin/bash -echo Hello world -``` -```` - -To fix this, add a language specifier to the code block: - -````markdown -```bash -#!/bin/bash -echo Hello world -``` -```` - -To display a code block without syntax highlighting, use: - -````markdown -```text -Plain text in a code block -``` -```` - -You can configure the `allowed_languages` parameter to specify a list of -languages code blocks could use. Languages are case sensitive. The default value -is `[]` which means any language specifier is valid. - -You can prevent extra data from being present in the info string of fenced code -blocks. To do so, set the `language_only` parameter to `true`. - - -Info strings with leading/trailing whitespace (ex: `js `) or other content (ex: -`ruby startline=3`) will trigger this rule. - -Rationale: Specifying a language improves content rendering by using the -correct syntax highlighting for code. More information: -. diff --git a/node_modules/markdownlint/doc/md041.md b/node_modules/markdownlint/doc/md041.md deleted file mode 100644 index 5dfeee130e..0000000000 --- a/node_modules/markdownlint/doc/md041.md +++ /dev/null @@ -1,49 +0,0 @@ -# `MD041` - First line in a file should be a top-level heading - -Tags: `headings` - -Aliases: `first-line-h1`, `first-line-heading` - -Parameters: - -- `front_matter_title`: RegExp for matching title in front matter (`string`, - default `^\s*title\s*[:=]`) -- `level`: Heading level (`integer`, default `1`) - -This rule is intended to ensure documents have a title and is triggered when -the first line in the file isn't a top-level (h1) heading: - -```markdown -This is a file without a heading -``` - -To fix this, add a top-level heading to the beginning of the file: - -```markdown -# File with heading - -This is a file with a top-level heading -``` - -Because it is common for projects on GitHub to use an image for the heading of -`README.md` and that is not well-supported by Markdown, HTML headings are also -permitted by this rule. For example: - -```markdown -

              - -This is a file with a top-level HTML heading -``` - -Note: The `level` parameter can be used to change the top-level (ex: to h2) in -cases where an h1 is added externally. - -If [YAML](https://en.wikipedia.org/wiki/YAML) front matter is present and -contains a `title` property (commonly used with blog posts), this rule will not -report a violation. To use a different property name in the front matter, -specify the text of a regular expression via the `front_matter_title` parameter. -To disable the use of front matter by this rule, specify `""` for -`front_matter_title`. - -Rationale: The top-level heading often acts as the title of a document. More -information: . diff --git a/node_modules/markdownlint/doc/md042.md b/node_modules/markdownlint/doc/md042.md deleted file mode 100644 index df2026a3ce..0000000000 --- a/node_modules/markdownlint/doc/md042.md +++ /dev/null @@ -1,32 +0,0 @@ -# `MD042` - No empty links - -Tags: `links` - -Aliases: `no-empty-links` - -This rule is triggered when an empty link is encountered: - -```markdown -[an empty link]() -``` - -To fix the violation, provide a destination for the link: - -```markdown -[a valid link](https://example.com/) -``` - -Empty fragments will trigger this rule: - -```markdown -[an empty fragment](#) -``` - -But non-empty fragments will not: - -```markdown -[a valid fragment](#fragment) -``` - -Rationale: Empty links do not lead anywhere and therefore don't function as -links. diff --git a/node_modules/markdownlint/doc/md043.md b/node_modules/markdownlint/doc/md043.md deleted file mode 100644 index 8d6267016a..0000000000 --- a/node_modules/markdownlint/doc/md043.md +++ /dev/null @@ -1,69 +0,0 @@ -# `MD043` - Required heading structure - -Tags: `headings` - -Aliases: `required-headings` - -Parameters: - -- `headings`: List of headings (`string[]`, default `[]`) -- `match_case`: Match case of headings (`boolean`, default `false`) - -This rule is triggered when the headings in a file do not match the array of -headings passed to the rule. It can be used to enforce a standard heading -structure for a set of files. - -To require exactly the following structure: - -```markdown -# Head -## Item -### Detail -``` - -Set the `headings` parameter to: - -```json -[ - "# Head", - "## Item", - "### Detail" -] -``` - -To allow optional headings as with the following structure: - -```markdown -# Head -## Item -### Detail (optional) -## Foot -### Notes (optional) -``` - -Use the special value `"*"` meaning "zero or more unspecified headings" or the -special value `"+"` meaning "one or more unspecified headings" and set the -`headings` parameter to: - -```json -[ - "# Head", - "## Item", - "*", - "## Foot", - "*" -] -``` - -When an error is detected, this rule outputs the line number of the first -problematic heading (otherwise, it outputs the last line number of the file). - -Note that while the `headings` parameter uses the "## Text" ATX heading style -for simplicity, a file may use any supported heading style. - -By default, the case of headings in the document is not required to match that -of `headings`. To require that case match exactly, set the `match_case` -parameter to `true`. - -Rationale: Projects may wish to enforce a consistent document structure across -a set of similar content. diff --git a/node_modules/markdownlint/doc/md044.md b/node_modules/markdownlint/doc/md044.md deleted file mode 100644 index e8f34e4804..0000000000 --- a/node_modules/markdownlint/doc/md044.md +++ /dev/null @@ -1,45 +0,0 @@ -# `MD044` - Proper names should have the correct capitalization - -Tags: `spelling` - -Aliases: `proper-names` - -Parameters: - -- `code_blocks`: Include code blocks (`boolean`, default `true`) -- `html_elements`: Include HTML elements (`boolean`, default `true`) -- `names`: List of proper names (`string[]`, default `[]`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when any of the strings in the `names` array do not have -the specified capitalization. It can be used to enforce a standard letter case -for the names of projects and products. - -For example, the language "JavaScript" is usually written with both the 'J' and -'S' capitalized - though sometimes the 's' or 'j' appear in lower-case. To -enforce the proper capitalization, specify the desired letter case in the -`names` array: - -```json -[ - "JavaScript" -] -``` - -Sometimes a proper name is capitalized differently in certain contexts. In such -cases, add both forms to the `names` array: - -```json -[ - "GitHub", - "github.com" -] -``` - -Set the `code_blocks` parameter to `false` to disable this rule for code blocks -and spans. Set the `html_elements` parameter to `false` to disable this rule -for HTML elements and attributes (such as when using a proper name as part of -a path for `a`/`href` or `img`/`src`). - -Rationale: Incorrect capitalization of proper names is usually a mistake. diff --git a/node_modules/markdownlint/doc/md045.md b/node_modules/markdownlint/doc/md045.md deleted file mode 100644 index 5d214f6f29..0000000000 --- a/node_modules/markdownlint/doc/md045.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD045` - Images should have alternate text (alt text) - -Tags: `accessibility`, `images` - -Aliases: `no-alt-text` - -This rule is triggered when an image is missing alternate text (alt text) -information. - -Alternate text is commonly specified inline as: - -```markdown -![Alternate text](image.jpg) -``` - -Or with reference syntax as: - -```markdown -![Alternate text][ref] - -... - -[ref]: image.jpg "Optional title" -``` - -Or with HTML as: - -```html -Alternate text -``` - -Guidance for writing alternate text is available from the [W3C][w3c], -[Wikipedia][wikipedia], and [other locations][phase2technology]. - -Rationale: Alternate text is important for accessibility and describes the -content of an image for people who may not be able to see it. - -[phase2technology]: https://www.phase2technology.com/blog/no-more-excuses -[w3c]: https://www.w3.org/WAI/alt/ -[wikipedia]: https://en.wikipedia.org/wiki/Alt_attribute diff --git a/node_modules/markdownlint/doc/md046.md b/node_modules/markdownlint/doc/md046.md deleted file mode 100644 index 25c9611b68..0000000000 --- a/node_modules/markdownlint/doc/md046.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD046` - Code block style - -Tags: `code` - -Aliases: `code-block-style` - -Parameters: - -- `style`: Block style (`string`, default `consistent`, values `consistent` / - `fenced` / `indented`) - -This rule is triggered when unwanted or different code block styles are used in -the same document. - -In the default configuration this rule reports a violation for the following -document: - - - - Some text. - - # Indented code - - More text. - - ```ruby - # Fenced code - ``` - - More text. - - - -To fix violations of this rule, use a consistent style (either indenting or code -fences). - -The configured code block style can be specific (`fenced`, `indented`) or can -require all code blocks match the first code block (`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md047.md b/node_modules/markdownlint/doc/md047.md deleted file mode 100644 index 494937d057..0000000000 --- a/node_modules/markdownlint/doc/md047.md +++ /dev/null @@ -1,34 +0,0 @@ -# `MD047` - Files should end with a single newline character - -Tags: `blank_lines` - -Aliases: `single-trailing-newline` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when there is not a single newline character at the end -of a file. - -An example that triggers the rule: - -```markdown -# Heading - -This file ends without a newline.[EOF] -``` - -To fix the violation, add a newline character to the end of the file: - -```markdown -# Heading - -This file ends with a newline. -[EOF] -``` - -Rationale: Some programs have trouble with files that do not end with a newline. - -More information: [What's the point in adding a new line to the end of a -file?][stack-exchange] - -[stack-exchange]: https://unix.stackexchange.com/questions/18743/whats-the-point-in-adding-a-new-line-to-the-end-of-a-file diff --git a/node_modules/markdownlint/doc/md048.md b/node_modules/markdownlint/doc/md048.md deleted file mode 100644 index 3776576019..0000000000 --- a/node_modules/markdownlint/doc/md048.md +++ /dev/null @@ -1,42 +0,0 @@ -# `MD048` - Code fence style - -Tags: `code` - -Aliases: `code-fence-style` - -Parameters: - -- `style`: Code fence style (`string`, default `consistent`, values `backtick` - / `consistent` / `tilde`) - -This rule is triggered when the symbols used in the document for fenced code -blocks do not match the configured code fence style: - -````markdown -```ruby -# Fenced code -``` - -~~~ruby -# Fenced code -~~~ -```` - -To fix this issue, use the configured code fence style throughout the -document: - -````markdown -```ruby -# Fenced code -``` - -```ruby -# Fenced code -``` -```` - -The configured code fence style can be a specific symbol to use (`backtick`, -`tilde`) or it can require all code fences match the first code fence -(`consistent`). - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md049.md b/node_modules/markdownlint/doc/md049.md deleted file mode 100644 index e16316d3bb..0000000000 --- a/node_modules/markdownlint/doc/md049.md +++ /dev/null @@ -1,36 +0,0 @@ -# `MD049` - Emphasis style - -Tags: `emphasis` - -Aliases: `emphasis-style` - -Parameters: - -- `style`: Emphasis style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for emphasis do not -match the configured emphasis style: - -```markdown -*Text* -_Text_ -``` - -To fix this issue, use the configured emphasis style throughout the document: - -```markdown -*Text* -*Text* -``` - -The configured emphasis style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all emphasis matches the first emphasis -(`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like_this_one. - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md050.md b/node_modules/markdownlint/doc/md050.md deleted file mode 100644 index 2f249c2c6c..0000000000 --- a/node_modules/markdownlint/doc/md050.md +++ /dev/null @@ -1,35 +0,0 @@ -# `MD050` - Strong style - -Tags: `emphasis` - -Aliases: `strong-style` - -Parameters: - -- `style`: Strong style (`string`, default `consistent`, values `asterisk` / - `consistent` / `underscore`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when the symbols used in the document for strong do not -match the configured strong style: - -```markdown -**Text** -__Text__ -``` - -To fix this issue, use the configured strong style throughout the document: - -```markdown -**Text** -**Text** -``` - -The configured strong style can be a specific symbol to use (`asterisk`, -`underscore`) or can require all strong matches the first strong (`consistent`). - -Note: Emphasis within a word is restricted to `asterisk` in order to avoid -unwanted emphasis for words containing internal underscores like__this__one. - -Rationale: Consistent formatting makes it easier to understand a document. diff --git a/node_modules/markdownlint/doc/md051.md b/node_modules/markdownlint/doc/md051.md deleted file mode 100644 index 947aba330f..0000000000 --- a/node_modules/markdownlint/doc/md051.md +++ /dev/null @@ -1,95 +0,0 @@ -# `MD051` - Link fragments should be valid - -Tags: `links` - -Aliases: `link-fragments` - -Parameters: - -- `ignore_case`: Ignore case of fragments (`boolean`, default `false`) - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when a link fragment does not match any of the fragments -that are automatically generated for headings in a document: - -```markdown -# Heading Name - -[Link](#fragment) -``` - -To fix this issue, change the link fragment to reference an existing heading's -generated name (see below): - -```markdown -# Heading Name - -[Link](#heading-name) -``` - -For consistency, this rule requires fragments to exactly match the [GitHub -heading algorithm][github-heading-algorithm] which converts letters to -lowercase. Therefore, the following example is reported as a violation: - -```markdown -# Heading Name - -[Link](#Heading-Name) -``` - -To ignore case when comparing fragments with heading names, the `ignore_case` -parameter can be set to `true`. In this configuration, the previous example is -not reported as a violation. - -Alternatively, some platforms allow the syntax `{#named-anchor}` to be used -within a heading to provide a specific name (consisting of only lower-case -letters, numbers, `-`, and `_`): - -```markdown -# Heading Name {#custom-name} - -[Link](#custom-name) -``` - -Alternatively, any HTML tag with an `id` attribute or an `a` tag with a `name` -attribute can be used to define a fragment: - -```markdown - - -[Link](#bookmark) -``` - -An `a` tag can be useful in scenarios where a heading is not appropriate or for -control over the text of the fragment identifier. - -This rule also recognizes the custom fragment syntax used by GitHub to highlight -[specific content in a document][github-linking-to-content]. - -For example, this link to line 20: - -```markdown -[Link](#L20) -``` - -And this link to content starting within line 19 running into line 21: - -```markdown -[Link](#L19C5-L21C11) -``` - -Rationale: [GitHub section links][github-section-links] are created -automatically for every heading when Markdown content is displayed on GitHub. -This makes it easy to link directly to different sections within a document. -However, section links change if headings are renamed or removed. This rule -helps identify broken section links within a document. - -Section links are **not** part of the CommonMark specification. This rule -enforces the [GitHub heading algorithm][github-heading-algorithm] which is: -convert heading to lowercase, remove punctuation, convert spaces to dashes, -append an incrementing integer as needed for uniqueness. - -[github-section-links]: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#section-links -[github-heading-algorithm]: https://github.com/gjtorikian/html-pipeline/blob/f13a1534cb650ba17af400d1acd3a22c28004c09/lib/html/pipeline/toc_filter.rb -[github-linking-to-content]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-a-permanent-link-to-a-code-snippet#linking-to-markdown#linking-to-markdown diff --git a/node_modules/markdownlint/doc/md052.md b/node_modules/markdownlint/doc/md052.md deleted file mode 100644 index 994d98eefa..0000000000 --- a/node_modules/markdownlint/doc/md052.md +++ /dev/null @@ -1,40 +0,0 @@ -# `MD052` - Reference links and images should use a label that is defined - -Tags: `images`, `links` - -Aliases: `reference-links-images` - -Parameters: - -- `shortcut_syntax`: Include shortcut syntax (`boolean`, default `false`) - -Links and images in Markdown can provide the link destination or image source -at the time of use or can define it elsewhere and use a label for reference. -The reference format is convenient for keeping paragraph text clutter-free -and makes it easy to reuse the same URL in multiple places. - -There are three kinds of reference links and images: - -```markdown -Full: [text][label] -Collapsed: [label][] -Shortcut: [label] - -Full: ![text][image] -Collapsed: ![image][] -Shortcut: ![image] - -[label]: https://example.com/label -[image]: https://example.com/image -``` - -A link or image renders correctly when the corresponding label is defined, but -displays as text with brackets when the label is not present. By default, this -rule warns of undefined labels for "full" and "collapsed" reference syntax but -not for "shortcut" syntax because it is ambiguous. - -The text `[example]` could be a shortcut link or the text "example" in brackets, -so "shortcut" syntax is ignored by default. To include "shortcut" syntax, set -the `include_shortcut` parameter to `true`. Note that doing so produces warnings -for *all* text in the document that *could* be a shortcut. If bracketed text is -intentional, brackets can be escaped with the `\` character: `\[example\]`. diff --git a/node_modules/markdownlint/doc/md053.md b/node_modules/markdownlint/doc/md053.md deleted file mode 100644 index 7caf0290ce..0000000000 --- a/node_modules/markdownlint/doc/md053.md +++ /dev/null @@ -1,38 +0,0 @@ -# `MD053` - Link and image reference definitions should be needed - -Tags: `images`, `links` - -Aliases: `link-image-reference-definitions` - -Parameters: - -- `ignored_definitions`: Ignored definitions (`string[]`, default `["//"]`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source -at the time of use or can use a label to reference a definition elsewhere in -the document. The latter reference format is convenient for keeping paragraph -text clutter-free and makes it easy to reuse the same URL in multiple places. - -Because link and image reference definitions are located separately from -where they are used, there are two scenarios where a definition can be -unnecessary: - -1. If a label is not referenced by any link or image in a document, that - definition is unused and can be deleted. -2. If a label is defined multiple times in a document, the first definition is - used and the others can be deleted. - -This rule considers a reference definition to be used if any link or image -reference has the corresponding label. The "full", "collapsed", and "shortcut" -formats are all supported. - -If there are reference definitions that are deliberately unreferenced, they can -be ignored by setting the `ignored_definitions` parameter. The default value of -this parameter ignores the following convention for adding non-HTML comments to -Markdown: - -```markdown -[//]: # (This behaves like a comment) -``` diff --git a/node_modules/markdownlint/doc/md054.md b/node_modules/markdownlint/doc/md054.md deleted file mode 100644 index 01d661cd5e..0000000000 --- a/node_modules/markdownlint/doc/md054.md +++ /dev/null @@ -1,100 +0,0 @@ -# `MD054` - Link and image style - -Tags: `images`, `links` - -Aliases: `link-image-style` - -Parameters: - -- `autolink`: Allow autolinks (`boolean`, default `true`) -- `collapsed`: Allow collapsed reference links and images (`boolean`, default - `true`) -- `full`: Allow full reference links and images (`boolean`, default `true`) -- `inline`: Allow inline links and images (`boolean`, default `true`) -- `shortcut`: Allow shortcut reference links and images (`boolean`, default - `true`) -- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) - -Fixable: Some violations can be fixed by tooling - -Links and images in Markdown can provide the link destination or image source at -the time of use or can use a label to reference a definition elsewhere in the -document. The three reference formats are convenient for keeping paragraph text -clutter-free and make it easy to reuse the same URL in multiple places. - -By default, this rule allows all link/image styles. - -Setting the `autolink` parameter to `false` disables autolinks: - -```markdown - -``` - -Setting the `inline` parameter to `false` disables inline links and images: - -```markdown -[link](https://example.com) - -![image](https://example.com) -``` - -Setting the `full` parameter to `false` disables full reference links and -images: - -```markdown -[link][url] - -![image][url] - -[url]: https://example.com -``` - -Setting the `collapsed` parameter to `false` disables collapsed reference links -and images: - -```markdown -[url][] - -![url][] - -[url]: https://example.com -``` - -Setting the `shortcut` parameter to `false` disables shortcut reference links -and images: - -```markdown -[url] - -![url] - -[url]: https://example.com -``` - -To fix violations of this rule, change the link or image to use an allowed -style. This rule can automatically fix violations when a link or image can be -converted to the `inline` style (preferred) or a link can be converted to the -`autolink` style (which does not support images and must be an absolute URL). -This rule does *not* fix scenarios that require converting a link or image to -the `full`, `collapsed`, or `shortcut` reference styles because that involves -naming the reference and determining where to insert it in the document. - -Setting the `url_inline` parameter to `false` prevents the use of inline links -with the same absolute URL text/destination and no title because such links can -be converted to autolinks: - -```markdown -[https://example.com](https://example.com) -``` - -To fix `url_inline` violations, use the simpler autolink syntax instead: - -```markdown - -``` - -Rationale: Consistent formatting makes it easier to understand a document. -Autolinks are concise, but appear as URLs which can be long and confusing. -Inline links and images can include descriptive text, but take up more space in -Markdown form. Reference links and images can be easier to read and manipulate -in Markdown form, but require a separate link reference definition. diff --git a/node_modules/markdownlint/doc/md055.md b/node_modules/markdownlint/doc/md055.md deleted file mode 100644 index 9b6f7f086a..0000000000 --- a/node_modules/markdownlint/doc/md055.md +++ /dev/null @@ -1,55 +0,0 @@ -# `MD055` - Table pipe style - -Tags: `table` - -Aliases: `table-pipe-style` - -Parameters: - -- `style`: Table pipe style (`string`, default `consistent`, values - `consistent` / `leading_and_trailing` / `leading_only` / - `no_leading_or_trailing` / `trailing_only`) - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-055] -is inconsistent about its use of leading and trailing pipe characters (`|`). - -By default (`consistent` style), the header row of the first table in a document -is used to determine the style that is enforced for every table in the document. -A specific style can be used instead (`leading_and_trailing`, `leading_only`, -`no_leading_or_trailing`, `trailing_only`). - -This table's header row has leading and trailing pipes, but its delimiter row is -missing the trailing pipe and its first row of cells is missing the leading -pipe: - -```markdown -| Header | Header | -| ------ | ------ - Cell | Cell | -``` - -To fix these issues, make sure there is a pipe character at the beginning and -end of every row: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and may also -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table -``` - -Rationale: Some parsers have difficulty with tables that are missing their -leading or trailing pipe characters. The use of leading/trailing pipes can also -help provide visual clarity. - -[gfm-table-055]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md056.md b/node_modules/markdownlint/doc/md056.md deleted file mode 100644 index 0fe87b522d..0000000000 --- a/node_modules/markdownlint/doc/md056.md +++ /dev/null @@ -1,37 +0,0 @@ -# `MD056` - Table column count - -Tags: `table` - -Aliases: `table-column-count` - -This rule is triggered when a [GitHub Flavored Markdown table][gfm-table-056] -does not have the same number of cells in every row. - -This table's second data row has too few cells and its third data row has too -many cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | -| Cell | Cell | Cell | -``` - -To fix these issues, ensure every row has the same number of cells: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -| Cell | Cell | -| Cell | Cell | -``` - -Note that a table's header row and its delimiter row must have the same number -of cells or it will not be recognized as a table (per specification). - -Rationale: Extra cells in a row are usually not shown, so their data is lost. -Missing cells in a row create holes in the table and suggest an omission. - -[gfm-table-056]: https://github.github.com/gfm/#tables-extension- diff --git a/node_modules/markdownlint/doc/md058.md b/node_modules/markdownlint/doc/md058.md deleted file mode 100644 index 8600751242..0000000000 --- a/node_modules/markdownlint/doc/md058.md +++ /dev/null @@ -1,48 +0,0 @@ -# `MD058` - Tables should be surrounded by blank lines - -Tags: `table` - -Aliases: `blanks-around-tables` - -Fixable: Some violations can be fixed by tooling - -This rule is triggered when tables are either not preceded or not followed by a -blank line: - -```markdown -Some text -| Header | Header | -| ------ | ------ | -| Cell | Cell | -> Blockquote -``` - -To fix violations of this rule, ensure that all tables have a blank line both -before and after (except when the table is at the very beginning or end of the -document): - -```markdown -Some text - -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -> Blockquote -``` - -Note that text immediately following a table (i.e., not separated by an empty -line) is treated as part of the table (per the specification) and will not -trigger this rule: - -```markdown -| Header | Header | -| ------ | ------ | -| Cell | Cell | -This text is part of the table and the next line is blank - -Some text -``` - -Rationale: In addition to aesthetic reasons, some parsers will incorrectly parse -tables that don't have blank lines before and after them. diff --git a/node_modules/markdownlint/helpers/LICENSE b/node_modules/markdownlint/helpers/LICENSE deleted file mode 100644 index 71ff07a3e3..0000000000 --- a/node_modules/markdownlint/helpers/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) David Anson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/markdownlint/helpers/README.md b/node_modules/markdownlint/helpers/README.md deleted file mode 100644 index 605df84a94..0000000000 --- a/node_modules/markdownlint/helpers/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# markdownlint-rule-helpers - -> A collection of `markdownlint` helper functions for custom rules - -## Overview - -The [Markdown][markdown] linter [`markdownlint`][markdownlint] offers a variety -of built-in validation [rules][rules] and supports the creation of [custom -rules][custom-rules]. The internal rules share various helper functions; this -package exposes those for reuse by custom rules. - -## API - -*Undocumented* - This package exports the internal functions as-is. The APIs -were not originally meant to be public, are not officially supported, and may -change from release to release. There are brief descriptive comments above each -function, but no [JSDoc][jsdoc] annotations. That said, some of what's here will -be useful to custom rule authors and may avoid duplicating code. - -## Tests - -*None* - The entire body of code is tested to 100% coverage by the core -`markdownlint` project, so there are no additional tests here. - -[custom-rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/CustomRules.md -[jsdoc]: https://en.m.wikipedia.org/wiki/JSDoc -[markdown]: https://en.wikipedia.org/wiki/Markdown -[markdownlint]: https://github.com/DavidAnson/markdownlint -[rules]: https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/Rules.md diff --git a/node_modules/markdownlint/helpers/helpers.cjs b/node_modules/markdownlint/helpers/helpers.cjs deleted file mode 100644 index 6b42f0ab65..0000000000 --- a/node_modules/markdownlint/helpers/helpers.cjs +++ /dev/null @@ -1,542 +0,0 @@ -// @ts-check - -"use strict"; - -const micromark = require("./micromark-helpers.cjs"); - -const { newLineRe, nextLinesRe } = require("./shared.cjs"); - -module.exports.newLineRe = newLineRe; -module.exports.nextLinesRe = nextLinesRe; - -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").RuleOnError} RuleOnError */ -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").RuleOnErrorFixInfo} RuleOnErrorFixInfo */ -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").MicromarkToken} MicromarkToken */ -// eslint-disable-next-line jsdoc/valid-types -/** @typedef {import("micromark-extension-gfm-footnote", { with: { "resolution-mode": "import" } })} */ -// eslint-disable-next-line jsdoc/valid-types -/** @typedef {import("../lib/micromark-types.d.mts", { with: { "resolution-mode": "import" } })} */ - -// Regular expression for matching common front matter (YAML and TOML) -// @ts-ignore -module.exports.frontMatterRe = - /((^---[^\S\r\n\u2028\u2029]*$[\s\S]+?^---\s*)|(^\+\+\+[^\S\r\n\u2028\u2029]*$[\s\S]+?^(\+\+\+|\.\.\.)\s*)|(^\{[^\S\r\n\u2028\u2029]*$[\s\S]+?^\}\s*))(\r\n|\r|\n|$)/m; - -// Regular expression for matching the start of inline disable/enable comments -const inlineCommentStartRe = - /()/gi; -module.exports.inlineCommentStartRe = inlineCommentStartRe; - -// Regular expression for identifying an HTML entity at the end of a line -module.exports.endOfLineHtmlEntityRe = - /&(?:#\d+|#[xX][\da-fA-F]+|[a-zA-Z]{2,31}|blk\d{2}|emsp1[34]|frac\d{2}|sup\d|there4);$/; - -// Regular expression for identifying a GitHub emoji code at the end of a line -module.exports.endOfLineGemojiCodeRe = - /:(?:[abmovx]|[-+]1|100|1234|(?:1st|2nd|3rd)_place_medal|8ball|clock\d{1,4}|e-mail|non-potable_water|o2|t-rex|u5272|u5408|u55b6|u6307|u6708|u6709|u6e80|u7121|u7533|u7981|u7a7a|[a-z]{2,15}2?|[a-z]{1,14}(?:_[a-z\d]{1,16})+):$/; - -// All punctuation characters (normal and full-width) -const allPunctuation = ".,;:!?。,;:!?"; -module.exports.allPunctuation = allPunctuation; - -// All punctuation characters without question mark (normal and full-width) -module.exports.allPunctuationNoQuestion = allPunctuation.replace(/[??]/gu, ""); - -/** - * Returns true iff the input is a Number. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is a Number. - */ -function isNumber(obj) { - return typeof obj === "number"; -} -module.exports.isNumber = isNumber; - -/** - * Returns true iff the input is a String. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is a String. - */ -function isString(obj) { - return typeof obj === "string"; -} -module.exports.isString = isString; - -/** - * Returns true iff the input String is empty. - * - * @param {string} str String of unknown length. - * @returns {boolean} True iff the input String is empty. - */ -function isEmptyString(str) { - return str.length === 0; -} -module.exports.isEmptyString = isEmptyString; - -/** - * Returns true iff the input is an Object. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is an Object. - */ -function isObject(obj) { - return !!obj && (typeof obj === "object") && !Array.isArray(obj); -} -module.exports.isObject = isObject; - -/** - * Returns true iff the input is a URL. - * - * @param {Object} obj Object of unknown type. - * @returns {boolean} True iff obj is a URL. - */ -function isUrl(obj) { - return !!obj && (Object.getPrototypeOf(obj) === URL.prototype); -} -module.exports.isUrl = isUrl; - -/** - * Clones the input if it is an Array. - * - * @param {Object} arr Object of unknown type. - * @returns {Object} Clone of obj iff obj is an Array. - */ -function cloneIfArray(arr) { - return Array.isArray(arr) ? [ ...arr ] : arr; -} -module.exports.cloneIfArray = cloneIfArray; - -/** - * Clones the input if it is a URL. - * - * @param {Object} url Object of unknown type. - * @returns {Object} Clone of obj iff obj is a URL. - */ -function cloneIfUrl(url) { - return isUrl(url) ? new URL(url) : url; -} -module.exports.cloneIfUrl = cloneIfUrl; - -/** - * Gets a Regular Expression for matching the specified HTML attribute. - * - * @param {string} name HTML attribute name. - * @returns {RegExp} Regular Expression for matching. - */ -module.exports.getHtmlAttributeRe = function getHtmlAttributeRe(name) { - return new RegExp(`\\s${name}\\s*=\\s*['"]?([^'"\\s>]*)`, "iu"); -}; - -/** - * Returns true iff the input line is blank (contains nothing, whitespace, or - * comments (unclosed start/end comments allowed)). - * - * @param {string} line Input line. - * @returns {boolean} True iff line is blank. - */ -function isBlankLine(line) { - const startComment = ""; - const removeComments = (s) => { - while (true) { - const start = s.indexOf(startComment); - const end = s.indexOf(endComment); - if ((end !== -1) && ((start === -1) || (end < start))) { - // Unmatched end comment is first - s = s.slice(end + endComment.length); - } else if ((start !== -1) && (end !== -1)) { - // Start comment is before end comment - s = s.slice(0, start) + s.slice(end + endComment.length); - } else if ((start !== -1) && (end === -1)) { - // Unmatched start comment is last - s = s.slice(0, start); - } else { - // No more comments to remove - return s; - } - } - }; - return ( - !line || - !line.trim() || - !removeComments(line).replace(/>/g, "").trim() - ); -} -module.exports.isBlankLine = isBlankLine; - -// Replaces the content of properly-formatted CommonMark comments with "." -// This preserves the line/column information for the rest of the document -// https://spec.commonmark.org/0.29/#html-blocks -// https://spec.commonmark.org/0.29/#html-comment -const htmlCommentBegin = ""; -const safeCommentCharacter = "."; -const startsWithPipeRe = /^ *\|/; -const notCrLfRe = /[^\r\n]/g; -const notSpaceCrLfRe = /[^ \r\n]/g; -const trailingSpaceRe = / +[\r\n]/g; -const replaceTrailingSpace = (s) => s.replace(notCrLfRe, safeCommentCharacter); -module.exports.clearHtmlCommentText = function clearHtmlCommentText(text) { - let i = 0; - while ((i = text.indexOf(htmlCommentBegin, i)) !== -1) { - const j = text.indexOf(htmlCommentEnd, i + 2); - if (j === -1) { - // Un-terminated comments are treated as text - break; - } - // If the comment has content... - if (j > i + htmlCommentBegin.length) { - const content = text.slice(i + htmlCommentBegin.length, j); - const lastLf = text.lastIndexOf("\n", i) + 1; - const preText = text.slice(lastLf, i); - const isBlock = preText.trim().length === 0; - const couldBeTable = startsWithPipeRe.test(preText); - const spansTableCells = couldBeTable && content.includes("\n"); - const isValid = - isBlock || - !( - spansTableCells || - content.startsWith(">") || - content.startsWith("->") || - content.endsWith("-") || - content.includes("--") - ); - // If a valid block/inline comment... - if (isValid) { - const clearedContent = content - .replace(notSpaceCrLfRe, safeCommentCharacter) - .replace(trailingSpaceRe, replaceTrailingSpace); - text = - text.slice(0, i + htmlCommentBegin.length) + - clearedContent + - text.slice(j); - } - } - i = j + htmlCommentEnd.length; - } - return text; -}; - -// Escapes a string for use in a RegExp -module.exports.escapeForRegExp = function escapeForRegExp(str) { - return str.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); -}; - -/** - * Adds ellipsis to the left/right/middle of the specified text. - * - * @param {string} text Text to ellipsify. - * @param {boolean} [start] True iff the start of the text is important. - * @param {boolean} [end] True iff the end of the text is important. - * @returns {string} Ellipsified text. - */ -function ellipsify(text, start, end) { - if (text.length <= 30) { - // Nothing to do - } else if (start && end) { - text = text.slice(0, 15) + "..." + text.slice(-15); - } else if (end) { - text = "..." + text.slice(-30); - } else { - text = text.slice(0, 30) + "..."; - } - return text; -} -module.exports.ellipsify = ellipsify; - -/** - * Adds a generic error object via the onError callback. - * - * @param {RuleOnError} onError RuleOnError instance. - * @param {number} lineNumber Line number. - * @param {string} [detail] Error details. - * @param {string} [context] Error context. - * @param {number[]} [range] Column and length of error. - * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. - * @returns {void} - */ -function addError(onError, lineNumber, detail, context, range, fixInfo) { - onError({ - lineNumber, - detail, - context, - range, - fixInfo - }); -} -module.exports.addError = addError; - -/** - * Adds an error object with details conditionally via the onError callback. - * - * @param {RuleOnError} onError RuleOnError instance. - * @param {number} lineNumber Line number. - * @param {Object} expected Expected value. - * @param {Object} actual Actual value. - * @param {string} [detail] Error details. - * @param {string} [context] Error context. - * @param {number[]} [range] Column and length of error. - * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. - * @returns {void} - */ -function addErrorDetailIf( - onError, lineNumber, expected, actual, detail, context, range, fixInfo) { - if (expected !== actual) { - addError( - onError, - lineNumber, - "Expected: " + expected + "; Actual: " + actual + - (detail ? "; " + detail : ""), - context, - range, - fixInfo); - } -} -module.exports.addErrorDetailIf = addErrorDetailIf; - -/** - * Adds an error object with context via the onError callback. - * - * @param {RuleOnError} onError RuleOnError instance. - * @param {number} lineNumber Line number. - * @param {string} context Error context. - * @param {boolean} [start] True iff the start of the text is important. - * @param {boolean} [end] True iff the end of the text is important. - * @param {number[]} [range] Column and length of error. - * @param {RuleOnErrorFixInfo} [fixInfo] RuleOnErrorFixInfo instance. - * @returns {void} - */ -function addErrorContext( - onError, lineNumber, context, start, end, range, fixInfo) { - context = ellipsify(context, start, end); - addError(onError, lineNumber, undefined, context, range, fixInfo); -} -module.exports.addErrorContext = addErrorContext; - -/** - * Defines a range within a file (start line/column to end line/column, subset of MicromarkToken). - * - * @typedef {Object} FileRange - * @property {number} startLine Start line (1-based). - * @property {number} startColumn Start column (1-based). - * @property {number} endLine End line (1-based). - * @property {number} endColumn End column (1-based). - */ - -/** - * Returns whether line/column A is less than or equal to line/column B. - * - * @param {number} lineA Line A. - * @param {number} columnA Column A. - * @param {number} lineB Line B. - * @param {number} columnB Column B. - * @returns {boolean} True iff A is less than or equal to B. - */ -const positionLessThanOrEqual = (lineA, columnA, lineB, columnB) => ( - (lineA < lineB) || - ((lineA === lineB) && (columnA <= columnB)) -); - -/** - * Returns whether two ranges (or MicromarkTokens) overlap anywhere. - * - * @param {FileRange|MicromarkToken} rangeA Range A. - * @param {FileRange|MicromarkToken} rangeB Range B. - * @returns {boolean} True iff the two ranges overlap. - */ -module.exports.hasOverlap = function hasOverlap(rangeA, rangeB) { - const lte = positionLessThanOrEqual(rangeA.startLine, rangeA.startColumn, rangeB.startLine, rangeB.startColumn); - const first = lte ? rangeA : rangeB; - const second = lte ? rangeB : rangeA; - return positionLessThanOrEqual(second.startLine, second.startColumn, first.endLine, first.endColumn); -}; - -// Determines if the front matter includes a title -module.exports.frontMatterHasTitle = - function frontMatterHasTitle(frontMatterLines, frontMatterTitlePattern) { - const ignoreFrontMatter = - (frontMatterTitlePattern !== undefined) && !frontMatterTitlePattern; - const frontMatterTitleRe = - new RegExp( - String(frontMatterTitlePattern || "^\\s*\"?title\"?\\s*[:=]"), - "i" - ); - return !ignoreFrontMatter && - frontMatterLines.some((line) => frontMatterTitleRe.test(line)); - }; - -/** - * Returns an object with information about reference links and images. - * - * @param {MicromarkToken[]} tokens Micromark tokens. - * @returns {Object} Reference link/image data. - */ -function getReferenceLinkImageData(tokens) { - const normalizeReference = (s) => s.toLowerCase().trim().replace(/\s+/g, " "); - const references = new Map(); - const shortcuts = new Map(); - const addReferenceToDictionary = (token, label, isShortcut) => { - const referenceDatum = [ - token.startLine - 1, - token.startColumn - 1, - token.text.length - ]; - const reference = normalizeReference(label); - const dictionary = isShortcut ? shortcuts : references; - const referenceData = dictionary.get(reference) || []; - referenceData.push(referenceDatum); - dictionary.set(reference, referenceData); - }; - const definitions = new Map(); - const definitionLineIndices = []; - const duplicateDefinitions = []; - const filteredTokens = - micromark.filterByTypes( - tokens, - [ - // definitionLineIndices - "definition", "gfmFootnoteDefinition", - // definitions and definitionLineIndices - "definitionLabelString", "gfmFootnoteDefinitionLabelString", - // references and shortcuts - "gfmFootnoteCall", "image", "link", - // undefined link labels - "undefinedReferenceCollapsed", "undefinedReferenceFull", "undefinedReferenceShortcut" - ] - ); - for (const token of filteredTokens) { - let labelPrefix = ""; - // eslint-disable-next-line default-case - switch (token.type) { - case "definition": - case "gfmFootnoteDefinition": - // definitionLineIndices - for (let i = token.startLine; i <= token.endLine; i++) { - definitionLineIndices.push(i - 1); - } - break; - case "gfmFootnoteDefinitionLabelString": - labelPrefix = "^"; - case "definitionLabelString": // eslint-disable-line no-fallthrough - { - // definitions and definitionLineIndices - const reference = normalizeReference(`${labelPrefix}${token.text}`); - if (definitions.has(reference)) { - duplicateDefinitions.push([ reference, token.startLine - 1 ]); - } else { - const parent = - micromark.getParentOfType(token, [ "definition" ]); - const destinationString = parent && - micromark.getDescendantsByType(parent, [ "definitionDestination", "definitionDestinationRaw", "definitionDestinationString" ])[0]?.text; - definitions.set( - reference, - [ token.startLine - 1, destinationString ] - ); - } - } - break; - case "gfmFootnoteCall": - case "image": - case "link": - { - // Identify if shortcut or full/collapsed - let isShortcut = (token.children.length === 1); - const isFullOrCollapsed = (token.children.length === 2) && !token.children.some((t) => t.type === "resource"); - const [ labelText ] = micromark.getDescendantsByType(token, [ "label", "labelText" ]); - const [ referenceString ] = micromark.getDescendantsByType(token, [ "reference", "referenceString" ]); - let label = labelText?.text; - // Identify if footnote - if (!isShortcut && !isFullOrCollapsed) { - const [ footnoteCallMarker, footnoteCallString ] = token.children.filter( - (t) => [ "gfmFootnoteCallMarker", "gfmFootnoteCallString" ].includes(t.type) - ); - if (footnoteCallMarker && footnoteCallString) { - label = `${footnoteCallMarker.text}${footnoteCallString.text}`; - isShortcut = true; - } - } - // Track link (handle shortcuts separately due to ambiguity in "text [text] text") - if (isShortcut || isFullOrCollapsed) { - addReferenceToDictionary(token, referenceString?.text || label, isShortcut); - } - } - break; - case "undefinedReferenceCollapsed": - case "undefinedReferenceFull": - case "undefinedReferenceShortcut": - { - const undefinedReference = micromark.getDescendantsByType(token, [ "undefinedReference" ])[0]; - const label = undefinedReference.children.map((t) => t.text).join(""); - const isShortcut = (token.type === "undefinedReferenceShortcut"); - addReferenceToDictionary(token, label, isShortcut); - } - break; - } - } - return { - references, - shortcuts, - definitions, - duplicateDefinitions, - definitionLineIndices - }; -} -module.exports.getReferenceLinkImageData = getReferenceLinkImageData; - -/** - * Gets the most common line ending, falling back to the platform default. - * - * @param {string} input Markdown content to analyze. - * @param {Object} [os] Node.js "os" module. - * @returns {string} Preferred line ending. - */ -function getPreferredLineEnding(input, os) { - let cr = 0; - let lf = 0; - let crlf = 0; - const endings = input.match(newLineRe) || []; - for (const ending of endings) { - // eslint-disable-next-line default-case - switch (ending) { - case "\r": - cr++; - break; - case "\n": - lf++; - break; - case "\r\n": - crlf++; - break; - } - } - let preferredLineEnding = null; - if (!cr && !lf && !crlf) { - preferredLineEnding = (os && os.EOL) || "\n"; - } else if ((lf >= crlf) && (lf >= cr)) { - preferredLineEnding = "\n"; - } else if (crlf >= cr) { - preferredLineEnding = "\r\n"; - } else { - preferredLineEnding = "\r"; - } - return preferredLineEnding; -} -module.exports.getPreferredLineEnding = getPreferredLineEnding; - -/** - * Expands a path with a tilde to an absolute path. - * - * @param {string} file Path that may begin with a tilde. - * @param {Object} os Node.js "os" module. - * @returns {string} Absolute path (or original path). - */ -function expandTildePath(file, os) { - const homedir = os && os.homedir && os.homedir(); - return homedir ? file.replace(/^~($|\/|\\)/, `${homedir}$1`) : file; -} -module.exports.expandTildePath = expandTildePath; diff --git a/node_modules/markdownlint/helpers/micromark-helpers.cjs b/node_modules/markdownlint/helpers/micromark-helpers.cjs deleted file mode 100644 index 87e75cbe63..0000000000 --- a/node_modules/markdownlint/helpers/micromark-helpers.cjs +++ /dev/null @@ -1,301 +0,0 @@ -// @ts-check - -"use strict"; - -const { flatTokensSymbol, htmlFlowSymbol } = require("./shared.cjs"); - -// eslint-disable-next-line jsdoc/valid-types -/** @typedef {import("micromark-util-types", { with: { "resolution-mode": "import" } }).TokenType} TokenType */ -// @ts-expect-error https://github.com/microsoft/TypeScript/issues/52529 -/** @typedef {import("../lib/exports.mjs").MicromarkToken} Token */ - -/** - * Determines if a Micromark token is within an htmlFlow type. - * - * @param {Token} token Micromark token. - * @returns {boolean} True iff the token is within an htmlFlow type. - */ -function inHtmlFlow(token) { - return Boolean(token[htmlFlowSymbol]); -} - -/** - * Returns whether a token is an htmlFlow type containing an HTML comment. - * - * @param {Token} token Micromark token. - * @returns {boolean} True iff token is htmlFlow containing a comment. - */ -function isHtmlFlowComment(token) { - const { text, type } = token; - if ( - (type === "htmlFlow") && - text.startsWith("") - ) { - const comment = text.slice(4, -3); - return ( - !comment.startsWith(">") && - !comment.startsWith("->") && - !comment.endsWith("-") - // The following condition from the CommonMark specification is commented - // to avoid parsing HTML comments that include "--" because that is NOT a - // condition of the HTML specification. - // https://spec.commonmark.org/0.30/#raw-html - // https://html.spec.whatwg.org/multipage/syntax.html#comments - // && !comment.includes("--") - ); - } - return false; -} - -/** - * Adds a range of numbers to a set. - * - * @param {Set} set Set of numbers. - * @param {number} start Starting number. - * @param {number} end Ending number. - * @returns {void} - */ -function addRangeToSet(set, start, end) { - for (let i = start; i <= end; i++) { - set.add(i); - } -} - -/** - * @callback AllowedPredicate - * @param {Token} token Micromark token. - * @returns {boolean} True iff allowed. - */ - -/** - * @callback TransformPredicate - * @param {Token} token Micromark token. - * @returns {Token[]} Child tokens. - */ - -/** - * Filter a list of Micromark tokens by predicate. - * - * @param {Token[]} tokens Micromark tokens. - * @param {AllowedPredicate} allowed Allowed token predicate. - * @param {TransformPredicate} [transformChildren] Transform predicate. - * @returns {Token[]} Filtered tokens. - */ -function filterByPredicate(tokens, allowed, transformChildren) { - const result = []; - const queue = [ - { - "array": tokens, - "index": 0 - } - ]; - while (queue.length > 0) { - const current = queue[queue.length - 1]; - const { array, index } = current; - if (index < array.length) { - const token = array[current.index++]; - if (allowed(token)) { - result.push(token); - } - const { children } = token; - if (children.length > 0) { - const transformed = - transformChildren ? transformChildren(token) : children; - queue.push( - { - "array": transformed, - "index": 0 - } - ); - } - } else { - queue.pop(); - } - } - return result; -} - -/** - * Filter a list of Micromark tokens by type. - * - * @param {Token[]} tokens Micromark tokens. - * @param {TokenType[]} types Types to allow. - * @param {boolean} [htmlFlow] Whether to include htmlFlow content. - * @returns {Token[]} Filtered tokens. - */ -function filterByTypes(tokens, types, htmlFlow) { - const predicate = (token) => types.includes(token.type) && (htmlFlow || !inHtmlFlow(token)); - const flatTokens = tokens[flatTokensSymbol]; - if (flatTokens) { - return flatTokens.filter(predicate); - } - return filterByPredicate(tokens, predicate); -} - -/** - * Gets the blockquote prefix text (if any) for the specified line number. - * - * @param {Token[]} tokens Micromark tokens. - * @param {number} lineNumber Line number to examine. - * @param {number} [count] Number of times to repeat. - * @returns {string} Blockquote prefix text. - */ -function getBlockQuotePrefixText(tokens, lineNumber, count = 1) { - return filterByTypes(tokens, [ "blockQuotePrefix", "linePrefix" ]) - .filter((prefix) => prefix.startLine === lineNumber) - .map((prefix) => prefix.text) - .join("") - .trimEnd() - // eslint-disable-next-line unicorn/prefer-spread - .concat("\n") - .repeat(count); -}; - -/** - * Gets a list of nested Micromark token descendants by type path. - * - * @param {Token|Token[]} parent Micromark token parent or parents. - * @param {(TokenType|TokenType[])[]} typePath Micromark token type path. - * @returns {Token[]} Micromark token descendants. - */ -function getDescendantsByType(parent, typePath) { - let tokens = Array.isArray(parent) ? parent : [ parent ]; - for (const type of typePath) { - const predicate = (token) => Array.isArray(type) ? type.includes(token.type) : (type === token.type); - tokens = tokens.flatMap((t) => t.children.filter(predicate)); - } - return tokens; -} - -/** - * Gets the heading level of a Micromark heading tokan. - * - * @param {Token} heading Micromark heading token. - * @returns {number} Heading level. - */ -function getHeadingLevel(heading) { - let level = 1; - const headingSequence = heading.children.find( - (child) => [ "atxHeadingSequence", "setextHeadingLine" ].includes(child.type) - ); - // @ts-ignore - const { text } = headingSequence; - if (text[0] === "#") { - level = Math.min(text.length, 6); - } else if (text[0] === "-") { - level = 2; - } - return level; -} - -/** - * Gets the heading style of a Micromark heading tokan. - * - * @param {Token} heading Micromark heading token. - * @returns {"atx" | "atx_closed" | "setext"} Heading style. - */ -function getHeadingStyle(heading) { - if (heading.type === "setextHeading") { - return "setext"; - } - const atxHeadingSequenceLength = heading.children.filter( - (child) => child.type === "atxHeadingSequence" - ).length; - if (atxHeadingSequenceLength === 1) { - return "atx"; - } - return "atx_closed"; -} - -/** - * Gets the heading text of a Micromark heading token. - * - * @param {Token} heading Micromark heading token. - * @returns {string} Heading text. - */ -function getHeadingText(heading) { - const headingTexts = getDescendantsByType(heading, [ [ "atxHeadingText", "setextHeadingText" ] ]); - return headingTexts[0]?.text.replace(/[\r\n]+/g, " ") || ""; -} - -/** - * HTML tag information. - * - * @typedef {Object} HtmlTagInfo - * @property {boolean} close True iff close tag. - * @property {string} name Tag name. - */ - -/** - * Gets information about the tag in an HTML token. - * - * @param {Token} token Micromark token. - * @returns {HtmlTagInfo | null} HTML tag information. - */ -function getHtmlTagInfo(token) { - const htmlTagNameRe = /^<([^!>][^/\s>]*)/; - if (token.type === "htmlText") { - const match = htmlTagNameRe.exec(token.text); - if (match) { - const name = match[1]; - const close = name.startsWith("/"); - return { - close, - "name": close ? name.slice(1) : name - }; - } - } - return null; -} - -/** - * Gets the nearest parent of the specified type for a Micromark token. - * - * @param {Token} token Micromark token. - * @param {TokenType[]} types Types to allow. - * @returns {Token | null} Parent token. - */ -function getParentOfType(token, types) { - /** @type {Token | null} */ - let current = token; - while ((current = current.parent) && !types.includes(current.type)) { - // Empty - } - return current; -} - -/** - * Set containing token types that do not contain content. - * - * @type {Set} - */ -const nonContentTokens = new Set([ - "blockQuoteMarker", - "blockQuotePrefix", - "blockQuotePrefixWhitespace", - "lineEnding", - "lineEndingBlank", - "linePrefix", - "listItemIndent", - "undefinedReference", - "undefinedReferenceCollapsed", - "undefinedReferenceFull", - "undefinedReferenceShortcut" -]); - -module.exports = { - addRangeToSet, - filterByPredicate, - filterByTypes, - getBlockQuotePrefixText, - getDescendantsByType, - getHeadingLevel, - getHeadingStyle, - getHeadingText, - getHtmlTagInfo, - getParentOfType, - inHtmlFlow, - isHtmlFlowComment, - nonContentTokens -}; diff --git a/node_modules/markdownlint/helpers/package.json b/node_modules/markdownlint/helpers/package.json deleted file mode 100644 index a5ef55520a..0000000000 --- a/node_modules/markdownlint/helpers/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "markdownlint-rule-helpers", - "version": "0.28.0", - "description": "A collection of markdownlint helper functions for custom rules", - "main": "./helpers.cjs", - "exports": { - ".": "./helpers.cjs", - "./micromark": "./micromark-helpers.cjs" - }, - "author": "David Anson (https://dlaa.me/)", - "license": "MIT", - "homepage": "https://github.com/DavidAnson/markdownlint", - "repository": { - "type": "git", - "url": "git+https://github.com/DavidAnson/markdownlint.git" - }, - "bugs": "https://github.com/DavidAnson/markdownlint/issues", - "funding": "https://github.com/sponsors/DavidAnson", - "engines": { - "node": ">=18" - }, - "keywords": [ - "markdownlint", - "markdownlint-rule" - ] -} diff --git a/node_modules/markdownlint/helpers/shared.cjs b/node_modules/markdownlint/helpers/shared.cjs deleted file mode 100644 index dfb38c313d..0000000000 --- a/node_modules/markdownlint/helpers/shared.cjs +++ /dev/null @@ -1,16 +0,0 @@ -// @ts-check - -"use strict"; - -// Symbol for identifing the flat tokens array from micromark parse -module.exports.flatTokensSymbol = Symbol("flat-tokens"); - -// Symbol for identifying the htmlFlow token from micromark parse -module.exports.htmlFlowSymbol = Symbol("html-flow"); - -// Regular expression for matching common newline characters -// See NEWLINES_RE in markdown-it/lib/rules_core/normalize.js -module.exports.newLineRe = /\r\n?|\n/g; - -// Regular expression for matching next lines -module.exports.nextLinesRe = /[\r\n][\s\S]*$/; diff --git a/node_modules/markdownlint/package.json b/node_modules/markdownlint/package.json deleted file mode 100644 index cee17b2634..0000000000 --- a/node_modules/markdownlint/package.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "name": "markdownlint", - "version": "0.37.4", - "description": "A Node.js style checker and lint tool for Markdown/CommonMark files.", - "type": "module", - "exports": { - ".": "./lib/exports.mjs", - "./async": "./lib/exports-async.mjs", - "./promise": "./lib/exports-promise.mjs", - "./sync": "./lib/exports-sync.mjs", - "./helpers": "./helpers/helpers.cjs", - "./style/all": "./style/all.json", - "./style/cirosantilli": "./style/cirosantilli.json", - "./style/prettier": "./style/prettier.json", - "./style/relaxed": "./style/relaxed.json" - }, - "imports": { - "#node-imports": { - "markdownlint-imports-browser": "./lib/node-imports-browser.mjs", - "markdownlint-imports-node": "./lib/node-imports-node.mjs", - "browser": "./lib/node-imports-browser.mjs", - "default": "./lib/node-imports-node.mjs" - } - }, - "types": "./lib/types.d.mts", - "author": "David Anson (https://dlaa.me/)", - "license": "MIT", - "homepage": "https://github.com/DavidAnson/markdownlint", - "repository": { - "type": "git", - "url": "git+https://github.com/DavidAnson/markdownlint.git" - }, - "bugs": "https://github.com/DavidAnson/markdownlint/issues", - "funding": "https://github.com/sponsors/DavidAnson", - "scripts": { - "build-config": "npm run build-config-schema && npm run build-config-example", - "build-config-example": "node schema/build-config-example.mjs", - "build-config-schema": "node schema/build-config-schema.mjs", - "build-declaration": "tsc --allowJs --checkJs --declaration --emitDeclarationOnly --module nodenext --outDir dts --rootDir . --target es2015 lib/exports.mjs lib/exports-async.mjs lib/exports-promise.mjs lib/exports-sync.mjs lib/markdownlint.mjs lib/resolve-module.cjs && node scripts/index.mjs copy dts/lib/exports.d.mts lib/exports.d.mts && node scripts/index.mjs copy dts/lib/exports-async.d.mts lib/exports-async.d.mts && node scripts/index.mjs copy dts/lib/exports-promise.d.mts lib/exports-promise.d.mts && node scripts/index.mjs copy dts/lib/exports-sync.d.mts lib/exports-sync.d.mts && node scripts/index.mjs copy dts/lib/markdownlint.d.mts lib/markdownlint.d.mts && node scripts/index.mjs copy dts/lib/resolve-module.d.cts lib/resolve-module.d.cts && node scripts/index.mjs remove dts", - "build-demo": "node scripts/index.mjs copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && cd demo && webpack --no-stats", - "build-docs": "node doc-build/build-rules.mjs", - "build-example": "npm install --no-save --ignore-scripts grunt grunt-cli gulp through2", - "ci": "npm-run-all --continue-on-error --parallel lint serial-config-docs serial-declaration-demo test-cover && git diff --exit-code", - "clone-test-repos-apache-airflow": "cd test-repos && git clone https://github.com/apache/airflow apache-airflow --depth 1 --no-tags --quiet", - "clone-test-repos-dotnet-docs": "cd test-repos && git clone https://github.com/dotnet/docs dotnet-docs --depth 1 --no-tags --quiet", - "clone-test-repos-electron-electron": "cd test-repos && git clone https://github.com/electron/electron electron-electron --depth 1 --no-tags --quiet && cd electron-electron && npm install --ignore-scripts @electron/lint-roller typescript@4", - "clone-test-repos-eslint-eslint": "cd test-repos && git clone https://github.com/eslint/eslint eslint-eslint --depth 1 --no-tags --quiet", - "clone-test-repos-mdn-content": "cd test-repos && git clone https://github.com/mdn/content mdn-content --depth 1 --no-tags --quiet", - "clone-test-repos-mkdocs-mkdocs": "cd test-repos && git clone https://github.com/mkdocs/mkdocs mkdocs-mkdocs --depth 1 --no-tags --quiet", - "clone-test-repos-mochajs-mocha": "cd test-repos && git clone https://github.com/mochajs/mocha mochajs-mocha --depth 1 --no-tags --quiet", - "clone-test-repos-pi-hole-docs": "cd test-repos && git clone https://github.com/pi-hole/docs pi-hole-docs --depth 1 --no-tags --quiet", - "clone-test-repos-v8-v8-dev": "cd test-repos && git clone https://github.com/v8/v8.dev v8-v8-dev --depth 1 --no-tags --quiet", - "clone-test-repos-webhintio-hint": "cd test-repos && git clone https://github.com/webhintio/hint webhintio-hint --depth 1 --no-tags --quiet", - "clone-test-repos-webpack-webpack-js-org": "cd test-repos && git clone https://github.com/webpack/webpack.js.org webpack-webpack-js-org --depth 1 --no-tags --quiet", - "clone-test-repos": "mkdir test-repos && cd test-repos && npm run clone-test-repos-apache-airflow && npm run clone-test-repos-dotnet-docs && npm run clone-test-repos-electron-electron && npm run clone-test-repos-eslint-eslint && npm run clone-test-repos-mdn-content && npm run clone-test-repos-mkdocs-mkdocs && npm run clone-test-repos-mochajs-mocha && npm run clone-test-repos-pi-hole-docs && npm run clone-test-repos-v8-v8-dev && npm run clone-test-repos-webhintio-hint && npm run clone-test-repos-webpack-webpack-js-org", - "declaration": "npm run build-declaration && npm run test-declaration", - "example": "cd example && node standalone.mjs && grunt markdownlint --force && gulp markdownlint", - "lint": "eslint --max-warnings 0", - "lint-test-repos": "ava --timeout=10m test/markdownlint-test-repos-*.mjs", - "serial-config-docs": "npm run build-config && npm run build-docs", - "serial-declaration-demo": "npm run build-declaration && npm-run-all --continue-on-error --parallel build-demo test-declaration", - "test": "ava --timeout=30s test/markdownlint-test.mjs test/markdownlint-test-config.mjs test/markdownlint-test-custom-rules.mjs test/markdownlint-test-fixes.mjs test/markdownlint-test-helpers.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-result-object.mjs test/markdownlint-test-scenarios.mjs test/resolve-module-test.mjs helpers/test.cjs", - "test-cover": "c8 --100 npm test", - "test-declaration": "cd example/typescript && tsc --module commonjs && tsc --module nodenext && node type-check.js", - "test-extra": "ava --timeout=10m test/markdownlint-test-extra-parse.mjs test/markdownlint-test-extra-type.mjs", - "update-snapshots": "ava --update-snapshots test/markdownlint-test-custom-rules.mjs test/markdownlint-test-micromark.mjs test/markdownlint-test-scenarios.mjs", - "update-snapshots-test-repos": "ava --timeout=10m --update-snapshots test/markdownlint-test-repos-*.mjs", - "upgrade": "npx --yes npm-check-updates --upgrade" - }, - "engines": { - "node": ">=18" - }, - "dependencies": { - "markdown-it": "14.1.0", - "micromark": "4.0.1", - "micromark-core-commonmark": "2.0.2", - "micromark-extension-directive": "3.0.2", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.0", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.1" - }, - "devDependencies": { - "@eslint/js": "9.18.0", - "@stylistic/eslint-plugin": "2.13.0", - "ajv": "8.17.1", - "ava": "6.2.0", - "c8": "10.1.3", - "character-entities": "2.0.2", - "eslint": "9.18.0", - "eslint-plugin-jsdoc": "50.6.1", - "eslint-plugin-n": "17.15.1", - "eslint-plugin-regexp": "2.7.0", - "eslint-plugin-unicorn": "56.0.1", - "gemoji": "8.1.0", - "globby": "14.0.2", - "js-yaml": "4.1.0", - "json-schema-to-typescript": "15.0.4", - "jsonc-parser": "3.3.1", - "markdown-it-for-inline": "2.0.1", - "markdown-it-sub": "2.0.0", - "markdown-it-sup": "2.0.0", - "markdownlint-rule-extended-ascii": "0.1.0", - "nano-spawn": "0.2.0", - "npm-run-all": "4.1.5", - "terser-webpack-plugin": "5.3.11", - "toml": "3.0.0", - "typescript": "5.7.3", - "webpack": "5.97.1", - "webpack-cli": "6.0.1" - }, - "keywords": [ - "markdown", - "lint", - "md", - "CommonMark", - "markdownlint" - ] -} diff --git a/node_modules/markdownlint/schema/.markdownlint.jsonc b/node_modules/markdownlint/schema/.markdownlint.jsonc deleted file mode 100644 index f0f2f93cff..0000000000 --- a/node_modules/markdownlint/schema/.markdownlint.jsonc +++ /dev/null @@ -1,310 +0,0 @@ -// Example markdownlint configuration with all properties set to their default value -{ - - // Default state for all rules - "default": true, - - // Path to configuration file to extend - "extends": null, - - // MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md - "MD001": true, - - // MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md - "MD003": { - // Heading style - "style": "consistent" - }, - - // MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md - "MD004": { - // List style - "style": "consistent" - }, - - // MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md - "MD005": true, - - // MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md - "MD007": { - // Spaces for indent - "indent": 2, - // Whether to indent the first level of the list - "start_indented": false, - // Spaces for first level indent (when start_indented is set) - "start_indent": 2 - }, - - // MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md - "MD009": { - // Spaces for line break - "br_spaces": 2, - // Allow spaces for empty lines in list items - "list_item_empty_lines": false, - // Include unnecessary breaks - "strict": false - }, - - // MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md - "MD010": { - // Include code blocks - "code_blocks": true, - // Fenced code languages to ignore - "ignore_code_languages": [], - // Number of spaces for each hard tab - "spaces_per_tab": 1 - }, - - // MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md - "MD011": true, - - // MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md - "MD012": { - // Consecutive blank lines - "maximum": 1 - }, - - // MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md - "MD013": { - // Number of characters - "line_length": 80, - // Number of characters for headings - "heading_line_length": 80, - // Number of characters for code blocks - "code_block_line_length": 80, - // Include code blocks - "code_blocks": true, - // Include tables - "tables": true, - // Include headings - "headings": true, - // Strict length checking - "strict": false, - // Stern length checking - "stern": false - }, - - // MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md - "MD014": true, - - // MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md - "MD018": true, - - // MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md - "MD019": true, - - // MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md - "MD020": true, - - // MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md - "MD021": true, - - // MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md - "MD022": { - // Blank lines above heading - "lines_above": 1, - // Blank lines below heading - "lines_below": 1 - }, - - // MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md - "MD023": true, - - // MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md - "MD024": { - // Only check sibling headings - "siblings_only": false - }, - - // MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md - "MD025": { - // Heading level - "level": 1, - // RegExp for matching title in front matter - "front_matter_title": "^\\s*title\\s*[:=]" - }, - - // MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md - "MD026": { - // Punctuation characters - "punctuation": ".,;:!。,;:!" - }, - - // MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md - "MD027": true, - - // MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md - "MD028": true, - - // MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md - "MD029": { - // List style - "style": "one_or_ordered" - }, - - // MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md - "MD030": { - // Spaces for single-line unordered list items - "ul_single": 1, - // Spaces for single-line ordered list items - "ol_single": 1, - // Spaces for multi-line unordered list items - "ul_multi": 1, - // Spaces for multi-line ordered list items - "ol_multi": 1 - }, - - // MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md - "MD031": { - // Include list items - "list_items": true - }, - - // MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md - "MD032": true, - - // MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md - "MD033": { - // Allowed elements - "allowed_elements": [] - }, - - // MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md - "MD034": true, - - // MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md - "MD035": { - // Horizontal rule style - "style": "consistent" - }, - - // MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md - "MD036": { - // Punctuation characters - "punctuation": ".,;:!?。,;:!?" - }, - - // MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md - "MD037": true, - - // MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md - "MD038": true, - - // MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md - "MD039": true, - - // MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md - "MD040": { - // List of languages - "allowed_languages": [], - // Require language only - "language_only": false - }, - - // MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md - "MD041": { - // Heading level - "level": 1, - // RegExp for matching title in front matter - "front_matter_title": "^\\s*title\\s*[:=]" - }, - - // MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md - "MD042": true, - - // MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md - "MD043": { - // List of headings - "headings": [], - // Match case of headings - "match_case": false - }, - - // MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md - "MD044": { - // List of proper names - "names": [], - // Include code blocks - "code_blocks": true, - // Include HTML elements - "html_elements": true - }, - - // MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md - "MD045": true, - - // MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md - "MD046": { - // Block style - "style": "consistent" - }, - - // MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md - "MD047": true, - - // MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md - "MD048": { - // Code fence style - "style": "consistent" - }, - - // MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md - "MD049": { - // Emphasis style - "style": "consistent" - }, - - // MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md - "MD050": { - // Strong style - "style": "consistent" - }, - - // MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md - "MD051": { - // Ignore case of fragments - "ignore_case": false - }, - - // MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md - "MD052": { - // Include shortcut syntax - "shortcut_syntax": false - }, - - // MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md - "MD053": { - // Ignored definitions - "ignored_definitions": [ - "//" - ] - }, - - // MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md - "MD054": { - // Allow autolinks - "autolink": true, - // Allow inline links and images - "inline": true, - // Allow full reference links and images - "full": true, - // Allow collapsed reference links and images - "collapsed": true, - // Allow shortcut reference links and images - "shortcut": true, - // Allow URLs as inline links - "url_inline": true - }, - - // MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md - "MD055": { - // Table pipe style - "style": "consistent" - }, - - // MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md - "MD056": true, - - // MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md - "MD058": true -} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/.markdownlint.yaml b/node_modules/markdownlint/schema/.markdownlint.yaml deleted file mode 100644 index 6e71bfd133..0000000000 --- a/node_modules/markdownlint/schema/.markdownlint.yaml +++ /dev/null @@ -1,277 +0,0 @@ -# Example markdownlint configuration with all properties set to their default value - -# Default state for all rules -default: true - -# Path to configuration file to extend -extends: null - -# MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md -MD001: true - -# MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md -MD003: - # Heading style - style: "consistent" - -# MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md -MD004: - # List style - style: "consistent" - -# MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md -MD005: true - -# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md -MD007: - # Spaces for indent - indent: 2 - # Whether to indent the first level of the list - start_indented: false - # Spaces for first level indent (when start_indented is set) - start_indent: 2 - -# MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md -MD009: - # Spaces for line break - br_spaces: 2 - # Allow spaces for empty lines in list items - list_item_empty_lines: false - # Include unnecessary breaks - strict: false - -# MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md -MD010: - # Include code blocks - code_blocks: true - # Fenced code languages to ignore - ignore_code_languages: [] - # Number of spaces for each hard tab - spaces_per_tab: 1 - -# MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md -MD011: true - -# MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md -MD012: - # Consecutive blank lines - maximum: 1 - -# MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md -MD013: - # Number of characters - line_length: 80 - # Number of characters for headings - heading_line_length: 80 - # Number of characters for code blocks - code_block_line_length: 80 - # Include code blocks - code_blocks: true - # Include tables - tables: true - # Include headings - headings: true - # Strict length checking - strict: false - # Stern length checking - stern: false - -# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md -MD014: true - -# MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md -MD018: true - -# MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md -MD019: true - -# MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md -MD020: true - -# MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md -MD021: true - -# MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md -MD022: - # Blank lines above heading - lines_above: 1 - # Blank lines below heading - lines_below: 1 - -# MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md -MD023: true - -# MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md -MD024: - # Only check sibling headings - siblings_only: false - -# MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md -MD025: - # Heading level - level: 1 - # RegExp for matching title in front matter - front_matter_title: "^\\s*title\\s*[:=]" - -# MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md -MD026: - # Punctuation characters - punctuation: ".,;:!。,;:!" - -# MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md -MD027: true - -# MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md -MD028: true - -# MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md -MD029: - # List style - style: "one_or_ordered" - -# MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md -MD030: - # Spaces for single-line unordered list items - ul_single: 1 - # Spaces for single-line ordered list items - ol_single: 1 - # Spaces for multi-line unordered list items - ul_multi: 1 - # Spaces for multi-line ordered list items - ol_multi: 1 - -# MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md -MD031: - # Include list items - list_items: true - -# MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md -MD032: true - -# MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md -MD033: - # Allowed elements - allowed_elements: [] - -# MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md -MD034: true - -# MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md -MD035: - # Horizontal rule style - style: "consistent" - -# MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md -MD036: - # Punctuation characters - punctuation: ".,;:!?。,;:!?" - -# MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md -MD037: true - -# MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md -MD038: true - -# MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md -MD039: true - -# MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md -MD040: - # List of languages - allowed_languages: [] - # Require language only - language_only: false - -# MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md -MD041: - # Heading level - level: 1 - # RegExp for matching title in front matter - front_matter_title: "^\\s*title\\s*[:=]" - -# MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md -MD042: true - -# MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md -MD043: - # List of headings - headings: [] - # Match case of headings - match_case: false - -# MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md -MD044: - # List of proper names - names: [] - # Include code blocks - code_blocks: true - # Include HTML elements - html_elements: true - -# MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md -MD045: true - -# MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md -MD046: - # Block style - style: "consistent" - -# MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md -MD047: true - -# MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md -MD048: - # Code fence style - style: "consistent" - -# MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md -MD049: - # Emphasis style - style: "consistent" - -# MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md -MD050: - # Strong style - style: "consistent" - -# MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md -MD051: - # Ignore case of fragments - ignore_case: false - -# MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md -MD052: - # Include shortcut syntax - shortcut_syntax: false - -# MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md -MD053: - # Ignored definitions - ignored_definitions: - - "//" - -# MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md -MD054: - # Allow autolinks - autolink: true - # Allow inline links and images - inline: true - # Allow full reference links and images - full: true - # Allow collapsed reference links and images - collapsed: true - # Allow shortcut reference links and images - shortcut: true - # Allow URLs as inline links - url_inline: true - -# MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md -MD055: - # Table pipe style - style: "consistent" - -# MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md -MD056: true - -# MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md -MD058: true diff --git a/node_modules/markdownlint/schema/ValidatingConfiguration.md b/node_modules/markdownlint/schema/ValidatingConfiguration.md deleted file mode 100644 index 5d842c4981..0000000000 --- a/node_modules/markdownlint/schema/ValidatingConfiguration.md +++ /dev/null @@ -1,26 +0,0 @@ -# Validating Configuration - -A [JSON Schema][json-schema] is provided to enable validating configuration -objects: [`markdownlint-config-schema.json`][markdownlint-config-schema]. - -Some editors automatically use a JSON Schema with files that reference it. For -example, a `.markdownlint.json` file with: - -```json -"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json" -``` - -A JSON Schema validator can be used to check configuration files like so: - -```bash -npx ajv-cli validate -s ./markdownlint/schema/markdownlint-config-schema.json -d "**/.markdownlint.{json,yaml}" --strict=false -``` - -By default, any rule name is valid because of custom rules. To allow only -built-in rules, use the -[`markdownlint-config-schema-strict.json`][markdownlint-config-schema-strict] -JSON Schema instead. - -[json-schema]: https://json-schema.org -[markdownlint-config-schema]: markdownlint-config-schema.json -[markdownlint-config-schema-strict]: markdownlint-config-schema-strict.json diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json b/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json deleted file mode 100644 index fe1692651e..0000000000 --- a/node_modules/markdownlint/schema/markdownlint-config-schema-strict.json +++ /dev/null @@ -1,1841 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema-strict.json", - "title": "markdownlint configuration schema", - "type": "object", - "properties": { - "$schema": { - "description": "JSON Schema URI (expected by some editors)", - "type": "string", - "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" - }, - "default": { - "description": "Default state for all rules", - "type": "boolean", - "default": true - }, - "extends": { - "description": "Path to configuration file to extend", - "type": [ - "string", - "null" - ], - "default": null - }, - "MD001": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "heading-increment": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "MD003": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "heading-style": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD004": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "ul-style": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD005": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "list-indent": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "MD007": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "ul-indent": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "MD009": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-trailing-spaces": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD010": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-hard-tabs": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD011": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "no-reversed-links": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "MD012": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-multiple-blanks": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD013": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "line-length": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD014": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "commands-show-output": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "MD018": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "no-missing-space-atx": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "MD019": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-atx": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "MD020": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "no-missing-space-closed-atx": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "MD021": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-closed-atx": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "MD022": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "blanks-around-headings": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD023": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "heading-start-left": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "MD024": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-duplicate-heading": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD025": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-title": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-h1": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD026": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "no-trailing-punctuation": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "MD027": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-blockquote": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "MD028": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "no-blanks-blockquote": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "MD029": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "ol-prefix": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "MD030": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "list-marker-space": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD031": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "blanks-around-fences": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD032": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "blanks-around-lists": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "MD033": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "no-inline-html": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "MD034": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "no-bare-urls": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "MD035": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "hr-style": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD036": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "no-emphasis-as-heading": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "MD037": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "no-space-in-emphasis": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "MD038": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "no-space-in-code": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "MD039": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "no-space-in-links": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "MD040": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "fenced-code-language": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD041": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-heading": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-h1": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD042": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "no-empty-links": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "MD043": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "required-headings": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD044": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "proper-names": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD045": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "no-alt-text": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "MD046": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-block-style": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD047": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "single-trailing-newline": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "MD048": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-fence-style": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD049": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "emphasis-style": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD050": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "strong-style": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD051": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "link-fragments": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD052": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "reference-links-images": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD053": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "link-image-reference-definitions": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "MD054": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "link-image-style": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD055": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "table-pipe-style": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD056": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "table-column-count": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "MD058": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "blanks-around-tables": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "headings": { - "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", - "type": "boolean", - "default": true - }, - "bullet": { - "description": "bullet : MD004, MD005, MD007, MD032", - "type": "boolean", - "default": true - }, - "ul": { - "description": "ul : MD004, MD005, MD007, MD030, MD032", - "type": "boolean", - "default": true - }, - "indentation": { - "description": "indentation : MD005, MD007, MD027", - "type": "boolean", - "default": true - }, - "whitespace": { - "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", - "type": "boolean", - "default": true - }, - "hard_tab": { - "description": "hard_tab : MD010", - "type": "boolean", - "default": true - }, - "links": { - "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "blank_lines": { - "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", - "type": "boolean", - "default": true - }, - "line_length": { - "description": "line_length : MD013", - "type": "boolean", - "default": true - }, - "code": { - "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", - "type": "boolean", - "default": true - }, - "atx": { - "description": "atx : MD018, MD019", - "type": "boolean", - "default": true - }, - "spaces": { - "description": "spaces : MD018, MD019, MD020, MD021, MD023", - "type": "boolean", - "default": true - }, - "atx_closed": { - "description": "atx_closed : MD020, MD021", - "type": "boolean", - "default": true - }, - "blockquote": { - "description": "blockquote : MD027, MD028", - "type": "boolean", - "default": true - }, - "ol": { - "description": "ol : MD029, MD030, MD032", - "type": "boolean", - "default": true - }, - "html": { - "description": "html : MD033", - "type": "boolean", - "default": true - }, - "url": { - "description": "url : MD034", - "type": "boolean", - "default": true - }, - "hr": { - "description": "hr : MD035", - "type": "boolean", - "default": true - }, - "emphasis": { - "description": "emphasis : MD036, MD037, MD049, MD050", - "type": "boolean", - "default": true - }, - "language": { - "description": "language : MD040", - "type": "boolean", - "default": true - }, - "spelling": { - "description": "spelling : MD044", - "type": "boolean", - "default": true - }, - "accessibility": { - "description": "accessibility : MD045", - "type": "boolean", - "default": true - }, - "images": { - "description": "images : MD045, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "table": { - "description": "table : MD055, MD056, MD058", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false -} \ No newline at end of file diff --git a/node_modules/markdownlint/schema/markdownlint-config-schema.json b/node_modules/markdownlint/schema/markdownlint-config-schema.json deleted file mode 100644 index 58005e01c7..0000000000 --- a/node_modules/markdownlint/schema/markdownlint-config-schema.json +++ /dev/null @@ -1,1846 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json", - "title": "markdownlint configuration schema", - "type": "object", - "properties": { - "$schema": { - "description": "JSON Schema URI (expected by some editors)", - "type": "string", - "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.37.4/schema/markdownlint-config-schema.json" - }, - "default": { - "description": "Default state for all rules", - "type": "boolean", - "default": true - }, - "extends": { - "description": "Path to configuration file to extend", - "type": [ - "string", - "null" - ], - "default": null - }, - "MD001": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "heading-increment": { - "description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md001.md", - "type": "boolean", - "default": true - }, - "MD003": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "heading-style": { - "description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md003.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Heading style", - "type": "string", - "enum": [ - "consistent", - "atx", - "atx_closed", - "setext", - "setext_with_atx", - "setext_with_atx_closed" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD004": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "ul-style": { - "description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md004.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "plus", - "dash", - "sublist" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD005": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "list-indent": { - "description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md005.md", - "type": "boolean", - "default": true - }, - "MD007": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "ul-indent": { - "description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md007.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "indent": { - "description": "Spaces for indent", - "type": "integer", - "minimum": 1, - "default": 2 - }, - "start_indented": { - "description": "Whether to indent the first level of the list", - "type": "boolean", - "default": false - }, - "start_indent": { - "description": "Spaces for first level indent (when start_indented is set)", - "type": "integer", - "minimum": 1, - "default": 2 - } - }, - "additionalProperties": false - }, - "MD009": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-trailing-spaces": { - "description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md009.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "br_spaces": { - "description": "Spaces for line break", - "type": "integer", - "minimum": 0, - "default": 2 - }, - "list_item_empty_lines": { - "description": "Allow spaces for empty lines in list items", - "type": "boolean", - "default": false - }, - "strict": { - "description": "Include unnecessary breaks", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD010": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-hard-tabs": { - "description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md010.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "ignore_code_languages": { - "description": "Fenced code languages to ignore", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "spaces_per_tab": { - "description": "Number of spaces for each hard tab", - "type": "integer", - "minimum": 0, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD011": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "no-reversed-links": { - "description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md011.md", - "type": "boolean", - "default": true - }, - "MD012": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "no-multiple-blanks": { - "description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md012.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "maximum": { - "description": "Consecutive blank lines", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD013": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "line-length": { - "description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md013.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "line_length": { - "description": "Number of characters", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "heading_line_length": { - "description": "Number of characters for headings", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_block_line_length": { - "description": "Number of characters for code blocks", - "type": "integer", - "minimum": 1, - "default": 80 - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "tables": { - "description": "Include tables", - "type": "boolean", - "default": true - }, - "headings": { - "description": "Include headings", - "type": "boolean", - "default": true - }, - "strict": { - "description": "Strict length checking", - "type": "boolean", - "default": false - }, - "stern": { - "description": "Stern length checking", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD014": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "commands-show-output": { - "description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md014.md", - "type": "boolean", - "default": true - }, - "MD018": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "no-missing-space-atx": { - "description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md018.md", - "type": "boolean", - "default": true - }, - "MD019": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-atx": { - "description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md019.md", - "type": "boolean", - "default": true - }, - "MD020": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "no-missing-space-closed-atx": { - "description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md020.md", - "type": "boolean", - "default": true - }, - "MD021": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-closed-atx": { - "description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md021.md", - "type": "boolean", - "default": true - }, - "MD022": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "blanks-around-headings": { - "description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "lines_above": { - "description": "Blank lines above heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - }, - "lines_below": { - "description": "Blank lines below heading", - "type": [ - "integer", - "array" - ], - "items": { - "type": "integer" - }, - "minimum": -1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD023": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "heading-start-left": { - "description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md023.md", - "type": "boolean", - "default": true - }, - "MD024": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "no-duplicate-heading": { - "description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md024.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "siblings_only": { - "description": "Only check sibling headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD025": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-title": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "single-h1": { - "description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md025.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD026": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "no-trailing-punctuation": { - "description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!。,;:!" - } - }, - "additionalProperties": false - }, - "MD027": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "no-multiple-space-blockquote": { - "description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md027.md", - "type": "boolean", - "default": true - }, - "MD028": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "no-blanks-blockquote": { - "description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md028.md", - "type": "boolean", - "default": true - }, - "MD029": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "ol-prefix": { - "description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md029.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "List style", - "type": "string", - "enum": [ - "one", - "ordered", - "one_or_ordered", - "zero" - ], - "default": "one_or_ordered" - } - }, - "additionalProperties": false - }, - "MD030": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "list-marker-space": { - "description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md030.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ul_single": { - "description": "Spaces for single-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_single": { - "description": "Spaces for single-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ul_multi": { - "description": "Spaces for multi-line unordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - }, - "ol_multi": { - "description": "Spaces for multi-line ordered list items", - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "additionalProperties": false - }, - "MD031": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "blanks-around-fences": { - "description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md031.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "list_items": { - "description": "Include list items", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD032": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "blanks-around-lists": { - "description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md032.md", - "type": "boolean", - "default": true - }, - "MD033": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "no-inline-html": { - "description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md033.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_elements": { - "description": "Allowed elements", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "MD034": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "no-bare-urls": { - "description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md034.md", - "type": "boolean", - "default": true - }, - "MD035": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "hr-style": { - "description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md035.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Horizontal rule style", - "type": "string", - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD036": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "no-emphasis-as-heading": { - "description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md036.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "punctuation": { - "description": "Punctuation characters", - "type": "string", - "default": ".,;:!?。,;:!?" - } - }, - "additionalProperties": false - }, - "MD037": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "no-space-in-emphasis": { - "description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md037.md", - "type": "boolean", - "default": true - }, - "MD038": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "no-space-in-code": { - "description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md038.md", - "type": "boolean", - "default": true - }, - "MD039": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "no-space-in-links": { - "description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md039.md", - "type": "boolean", - "default": true - }, - "MD040": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "fenced-code-language": { - "description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md040.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "allowed_languages": { - "description": "List of languages", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "language_only": { - "description": "Require language only", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD041": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-heading": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "first-line-h1": { - "description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md041.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "level": { - "description": "Heading level", - "type": "integer", - "minimum": 1, - "maximum": 6, - "default": 1 - }, - "front_matter_title": { - "description": "RegExp for matching title in front matter", - "type": "string", - "default": "^\\s*title\\s*[:=]" - } - }, - "additionalProperties": false - }, - "MD042": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "no-empty-links": { - "description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md042.md", - "type": "boolean", - "default": true - }, - "MD043": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "required-headings": { - "description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md043.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "headings": { - "description": "List of headings", - "type": "array", - "items": { - "type": "string", - "pattern": "^(\\*|\\+|#{1,6} .*)$" - }, - "default": [] - }, - "match_case": { - "description": "Match case of headings", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD044": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "proper-names": { - "description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md044.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "names": { - "description": "List of proper names", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "code_blocks": { - "description": "Include code blocks", - "type": "boolean", - "default": true - }, - "html_elements": { - "description": "Include HTML elements", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD045": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "no-alt-text": { - "description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md045.md", - "type": "boolean", - "default": true - }, - "MD046": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-block-style": { - "description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md046.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Block style", - "type": "string", - "enum": [ - "consistent", - "fenced", - "indented" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD047": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "single-trailing-newline": { - "description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md", - "type": "boolean", - "default": true - }, - "MD048": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "code-fence-style": { - "description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md048.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Code fence style", - "type": "string", - "enum": [ - "consistent", - "backtick", - "tilde" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD049": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "emphasis-style": { - "description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md049.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Emphasis style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD050": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "strong-style": { - "description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md050.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Strong style", - "type": "string", - "enum": [ - "consistent", - "asterisk", - "underscore" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD051": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "link-fragments": { - "description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md051.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignore_case": { - "description": "Ignore case of fragments", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD052": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "reference-links-images": { - "description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md052.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "shortcut_syntax": { - "description": "Include shortcut syntax", - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "MD053": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "link-image-reference-definitions": { - "description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md053.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "ignored_definitions": { - "description": "Ignored definitions", - "type": "array", - "items": { - "type": "string" - }, - "default": [ - "//" - ] - } - }, - "additionalProperties": false - }, - "MD054": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "link-image-style": { - "description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md054.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "autolink": { - "description": "Allow autolinks", - "type": "boolean", - "default": true - }, - "inline": { - "description": "Allow inline links and images", - "type": "boolean", - "default": true - }, - "full": { - "description": "Allow full reference links and images", - "type": "boolean", - "default": true - }, - "collapsed": { - "description": "Allow collapsed reference links and images", - "type": "boolean", - "default": true - }, - "shortcut": { - "description": "Allow shortcut reference links and images", - "type": "boolean", - "default": true - }, - "url_inline": { - "description": "Allow URLs as inline links", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - }, - "MD055": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "table-pipe-style": { - "description": "MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md055.md", - "type": [ - "boolean", - "object" - ], - "default": true, - "properties": { - "style": { - "description": "Table pipe style", - "type": "string", - "enum": [ - "consistent", - "leading_only", - "trailing_only", - "leading_and_trailing", - "no_leading_or_trailing" - ], - "default": "consistent" - } - }, - "additionalProperties": false - }, - "MD056": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "table-column-count": { - "description": "MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md056.md", - "type": "boolean", - "default": true - }, - "MD058": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "blanks-around-tables": { - "description": "MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md058.md", - "type": "boolean", - "default": true - }, - "headings": { - "description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", - "type": "boolean", - "default": true - }, - "bullet": { - "description": "bullet : MD004, MD005, MD007, MD032", - "type": "boolean", - "default": true - }, - "ul": { - "description": "ul : MD004, MD005, MD007, MD030, MD032", - "type": "boolean", - "default": true - }, - "indentation": { - "description": "indentation : MD005, MD007, MD027", - "type": "boolean", - "default": true - }, - "whitespace": { - "description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", - "type": "boolean", - "default": true - }, - "hard_tab": { - "description": "hard_tab : MD010", - "type": "boolean", - "default": true - }, - "links": { - "description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "blank_lines": { - "description": "blank_lines : MD012, MD022, MD031, MD032, MD047", - "type": "boolean", - "default": true - }, - "line_length": { - "description": "line_length : MD013", - "type": "boolean", - "default": true - }, - "code": { - "description": "code : MD014, MD031, MD038, MD040, MD046, MD048", - "type": "boolean", - "default": true - }, - "atx": { - "description": "atx : MD018, MD019", - "type": "boolean", - "default": true - }, - "spaces": { - "description": "spaces : MD018, MD019, MD020, MD021, MD023", - "type": "boolean", - "default": true - }, - "atx_closed": { - "description": "atx_closed : MD020, MD021", - "type": "boolean", - "default": true - }, - "blockquote": { - "description": "blockquote : MD027, MD028", - "type": "boolean", - "default": true - }, - "ol": { - "description": "ol : MD029, MD030, MD032", - "type": "boolean", - "default": true - }, - "html": { - "description": "html : MD033", - "type": "boolean", - "default": true - }, - "url": { - "description": "url : MD034", - "type": "boolean", - "default": true - }, - "hr": { - "description": "hr : MD035", - "type": "boolean", - "default": true - }, - "emphasis": { - "description": "emphasis : MD036, MD037, MD049, MD050", - "type": "boolean", - "default": true - }, - "language": { - "description": "language : MD040", - "type": "boolean", - "default": true - }, - "spelling": { - "description": "spelling : MD044", - "type": "boolean", - "default": true - }, - "accessibility": { - "description": "accessibility : MD045", - "type": "boolean", - "default": true - }, - "images": { - "description": "images : MD045, MD052, MD053, MD054", - "type": "boolean", - "default": true - }, - "table": { - "description": "table : MD055, MD056, MD058", - "type": "boolean", - "default": true - } - }, - "additionalProperties": { - "type": [ - "boolean", - "object" - ] - } -} \ No newline at end of file diff --git a/node_modules/markdownlint/style/all.json b/node_modules/markdownlint/style/all.json deleted file mode 100644 index edfdd6d736..0000000000 --- a/node_modules/markdownlint/style/all.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "comment": "All rules", - - "default": true -} diff --git a/node_modules/markdownlint/style/cirosantilli.json b/node_modules/markdownlint/style/cirosantilli.json deleted file mode 100644 index 609a3bfe16..0000000000 --- a/node_modules/markdownlint/style/cirosantilli.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "comment": "Rules for the style guide at https://www.cirosantilli.com/markdown-style-guide/", - - "default": true, - "MD003": { - "style": "atx" - }, - "MD004": { - "style": "dash" - }, - "MD007": { - "indent": 4 - }, - "MD030": { - "ul_multi": 3, - "ol_multi": 2 - }, - "MD033": false, - "MD035": { - "style": "---" - } -} diff --git a/node_modules/markdownlint/style/prettier.json b/node_modules/markdownlint/style/prettier.json deleted file mode 100644 index 29a24e6279..0000000000 --- a/node_modules/markdownlint/style/prettier.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "comment": "Disables rules that may conflict with Prettier", - - "blanks-around-fences": false, - "blanks-around-headings": false, - "blanks-around-lists": false, - "code-fence-style": false, - "emphasis-style": false, - "heading-start-left": false, - "heading-style": false, - "hr-style": false, - "line-length": false, - "list-indent": false, - "list-marker-space": false, - "no-blanks-blockquote": false, - "no-hard-tabs": false, - "no-missing-space-atx": false, - "no-missing-space-closed-atx": false, - "no-multiple-blanks": false, - "no-multiple-space-atx": false, - "no-multiple-space-blockquote": false, - "no-multiple-space-closed-atx": false, - "no-trailing-spaces": false, - "ol-prefix": false, - "strong-style": false, - "ul-indent": false -} diff --git a/node_modules/markdownlint/style/relaxed.json b/node_modules/markdownlint/style/relaxed.json deleted file mode 100644 index 1070b5982a..0000000000 --- a/node_modules/markdownlint/style/relaxed.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "comment": "Relaxed rules", - - "default": true, - "whitespace": false, - "line_length": false, - "ul-indent": false, - "no-inline-html": false, - "no-bare-urls": false, - "fenced-code-language": false, - "first-line-h1": false -} diff --git a/node_modules/mdurl/LICENSE b/node_modules/mdurl/LICENSE deleted file mode 100644 index 3b2c7bfb15..0000000000 --- a/node_modules/mdurl/LICENSE +++ /dev/null @@ -1,45 +0,0 @@ -Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -.parse() is based on Joyent's node.js `url` code: - -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/mdurl/README.md b/node_modules/mdurl/README.md deleted file mode 100644 index c7f9e959a0..0000000000 --- a/node_modules/mdurl/README.md +++ /dev/null @@ -1,102 +0,0 @@ -# mdurl - -[![CI](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/mdurl/actions/workflows/ci.yml) -[![NPM version](https://img.shields.io/npm/v/mdurl.svg?style=flat)](https://www.npmjs.org/package/mdurl) - -> URL utilities for [markdown-it](https://github.com/markdown-it/markdown-it) parser. - - -## API - -### .encode(str [, exclude, keepEncoded]) -> String - -Percent-encode a string, avoiding double encoding. Don't touch `/a-zA-Z0-9/` + -excluded chars + `/%[a-fA-F0-9]{2}/` (if not disabled). Broken surrorates are -replaced with `U+FFFD`. - -Params: - -- __str__ - input string. -- __exclude__ - optional, `;/?:@&=+$,-_.!~*'()#`. Additional chars to keep intact - (except `/a-zA-Z0-9/`). -- __keepEncoded__ - optional, `true`. By default it skips already encoded sequences - (`/%[a-fA-F0-9]{2}/`). If set to `false`, `%` will be encoded. - - -### encode.defaultChars, encode.componentChars - -You can use these constants as second argument to `encode` function. - - - `encode.defaultChars` is the same exclude set as in the standard `encodeURI()` function - - `encode.componentChars` is the same exclude set as in the `encodeURIComponent()` function - -For example, `encode('something', encode.componentChars, true)` is roughly the equivalent of -the `encodeURIComponent()` function (except `encode()` doesn't throw). - - -### .decode(str [, exclude]) -> String - -Decode percent-encoded string. Invalid percent-encoded sequences (e.g. `%2G`) -are left as is. Invalid UTF-8 characters are replaced with `U+FFFD`. - - -Params: - -- __str__ - input string. -- __exclude__ - set of characters to leave encoded, optional, `;/?:@&=+$,#`. - - -### decode.defaultChars, decode.componentChars - -You can use these constants as second argument to `decode` function. - - - `decode.defaultChars` is the same exclude set as in the standard `decodeURI()` function - - `decode.componentChars` is the same exclude set as in the `decodeURIComponent()` function - -For example, `decode('something', decode.defaultChars)` has the same behavior as -`decodeURI('something')` on a correctly encoded input. - - -### .parse(url, slashesDenoteHost) -> urlObs - -Parse url string. Similar to node's [url.parse](http://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost), but without any -normalizations and query string parse. - - - __url__ - input url (string) - - __slashesDenoteHost__ - if url starts with `//`, expect a hostname after it. Optional, `false`. - -Result (hash): - -- protocol -- slashes -- auth -- port -- hostname -- hash -- search -- pathname - -Difference with node's `url`: - -1. No leading slash in paths, e.g. in `url.parse('http://foo?bar')` pathname is - ``, not `/` -2. Backslashes are not replaced with slashes, so `http:\\example.org\` is - treated like a relative path -3. Trailing colon is treated like a part of the path, i.e. in - `http://example.org:foo` pathname is `:foo` -4. Nothing is URL-encoded in the resulting object, (in joyent/node some chars - in auth and paths are encoded) -5. `url.parse()` does not have `parseQueryString` argument -6. Removed extraneous result properties: `host`, `path`, `query`, etc., - which can be constructed using other parts of the url. - - -### .format(urlObject) - -Format an object previously obtained with `.parse()` function. Similar to node's -[url.format](http://nodejs.org/api/url.html#url_url_format_urlobj). - - -## License - -[MIT](https://github.com/markdown-it/mdurl/blob/master/LICENSE) diff --git a/node_modules/mdurl/index.mjs b/node_modules/mdurl/index.mjs deleted file mode 100644 index fd78c377f5..0000000000 --- a/node_modules/mdurl/index.mjs +++ /dev/null @@ -1,11 +0,0 @@ -import decode from './lib/decode.mjs' -import encode from './lib/encode.mjs' -import format from './lib/format.mjs' -import parse from './lib/parse.mjs' - -export { - decode, - encode, - format, - parse -} diff --git a/node_modules/mdurl/package.json b/node_modules/mdurl/package.json deleted file mode 100644 index 6e89bebc93..0000000000 --- a/node_modules/mdurl/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "mdurl", - "version": "2.0.0", - "description": "URL utilities for markdown-it", - "repository": "markdown-it/mdurl", - "license": "MIT", - "main": "build/index.cjs.js", - "module": "index.mjs", - "exports": { - ".": { - "require": "./build/index.cjs.js", - "import": "./index.mjs" - }, - "./*": { - "require": "./*", - "import": "./*" - } - }, - "scripts": { - "lint": "eslint .", - "build": "rollup -c", - "test": "npm run lint && npm run build && c8 --exclude build --exclude test -r text -r html -r lcov mocha", - "prepublishOnly": "npm run lint && npm run build" - }, - "files": [ - "index.mjs", - "lib/", - "build/" - ], - "devDependencies": { - "c8": "^8.0.1", - "eslint": "^8.54.0", - "eslint-config-standard": "^17.1.0", - "mocha": "^10.2.0", - "rollup": "^4.6.1" - } -} diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts b/node_modules/micromark-core-commonmark/dev/index.d.ts deleted file mode 100644 index bd832f665c..0000000000 --- a/node_modules/micromark-core-commonmark/dev/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { attention } from "./lib/attention.js"; -export { autolink } from "./lib/autolink.js"; -export { blankLine } from "./lib/blank-line.js"; -export { blockQuote } from "./lib/block-quote.js"; -export { characterEscape } from "./lib/character-escape.js"; -export { characterReference } from "./lib/character-reference.js"; -export { codeFenced } from "./lib/code-fenced.js"; -export { codeIndented } from "./lib/code-indented.js"; -export { codeText } from "./lib/code-text.js"; -export { content } from "./lib/content.js"; -export { definition } from "./lib/definition.js"; -export { hardBreakEscape } from "./lib/hard-break-escape.js"; -export { headingAtx } from "./lib/heading-atx.js"; -export { htmlFlow } from "./lib/html-flow.js"; -export { htmlText } from "./lib/html-text.js"; -export { labelEnd } from "./lib/label-end.js"; -export { labelStartImage } from "./lib/label-start-image.js"; -export { labelStartLink } from "./lib/label-start-link.js"; -export { lineEnding } from "./lib/line-ending.js"; -export { list } from "./lib/list.js"; -export { setextUnderline } from "./lib/setext-underline.js"; -export { thematicBreak } from "./lib/thematic-break.js"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.d.ts.map b/node_modules/micromark-core-commonmark/dev/index.d.ts.map deleted file mode 100644 index ca7a93a9a2..0000000000 --- a/node_modules/micromark-core-commonmark/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/dev/index.js b/node_modules/micromark-core-commonmark/dev/index.js deleted file mode 100644 index f9143e0937..0000000000 --- a/node_modules/micromark-core-commonmark/dev/index.js +++ /dev/null @@ -1,22 +0,0 @@ -export {attention} from './lib/attention.js' -export {autolink} from './lib/autolink.js' -export {blankLine} from './lib/blank-line.js' -export {blockQuote} from './lib/block-quote.js' -export {characterEscape} from './lib/character-escape.js' -export {characterReference} from './lib/character-reference.js' -export {codeFenced} from './lib/code-fenced.js' -export {codeIndented} from './lib/code-indented.js' -export {codeText} from './lib/code-text.js' -export {content} from './lib/content.js' -export {definition} from './lib/definition.js' -export {hardBreakEscape} from './lib/hard-break-escape.js' -export {headingAtx} from './lib/heading-atx.js' -export {htmlFlow} from './lib/html-flow.js' -export {htmlText} from './lib/html-text.js' -export {labelEnd} from './lib/label-end.js' -export {labelStartImage} from './lib/label-start-image.js' -export {labelStartLink} from './lib/label-start-link.js' -export {lineEnding} from './lib/line-ending.js' -export {list} from './lib/list.js' -export {setextUnderline} from './lib/setext-underline.js' -export {thematicBreak} from './lib/thematic-break.js' diff --git a/node_modules/micromark-core-commonmark/index.d.ts b/node_modules/micromark-core-commonmark/index.d.ts deleted file mode 100644 index bd832f665c..0000000000 --- a/node_modules/micromark-core-commonmark/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export { attention } from "./lib/attention.js"; -export { autolink } from "./lib/autolink.js"; -export { blankLine } from "./lib/blank-line.js"; -export { blockQuote } from "./lib/block-quote.js"; -export { characterEscape } from "./lib/character-escape.js"; -export { characterReference } from "./lib/character-reference.js"; -export { codeFenced } from "./lib/code-fenced.js"; -export { codeIndented } from "./lib/code-indented.js"; -export { codeText } from "./lib/code-text.js"; -export { content } from "./lib/content.js"; -export { definition } from "./lib/definition.js"; -export { hardBreakEscape } from "./lib/hard-break-escape.js"; -export { headingAtx } from "./lib/heading-atx.js"; -export { htmlFlow } from "./lib/html-flow.js"; -export { htmlText } from "./lib/html-text.js"; -export { labelEnd } from "./lib/label-end.js"; -export { labelStartImage } from "./lib/label-start-image.js"; -export { labelStartLink } from "./lib/label-start-link.js"; -export { lineEnding } from "./lib/line-ending.js"; -export { list } from "./lib/list.js"; -export { setextUnderline } from "./lib/setext-underline.js"; -export { thematicBreak } from "./lib/thematic-break.js"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.d.ts.map b/node_modules/micromark-core-commonmark/index.d.ts.map deleted file mode 100644 index ca7a93a9a2..0000000000 --- a/node_modules/micromark-core-commonmark/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/index.js b/node_modules/micromark-core-commonmark/index.js deleted file mode 100644 index 969b1cdf12..0000000000 --- a/node_modules/micromark-core-commonmark/index.js +++ /dev/null @@ -1,22 +0,0 @@ -export { attention } from './lib/attention.js'; -export { autolink } from './lib/autolink.js'; -export { blankLine } from './lib/blank-line.js'; -export { blockQuote } from './lib/block-quote.js'; -export { characterEscape } from './lib/character-escape.js'; -export { characterReference } from './lib/character-reference.js'; -export { codeFenced } from './lib/code-fenced.js'; -export { codeIndented } from './lib/code-indented.js'; -export { codeText } from './lib/code-text.js'; -export { content } from './lib/content.js'; -export { definition } from './lib/definition.js'; -export { hardBreakEscape } from './lib/hard-break-escape.js'; -export { headingAtx } from './lib/heading-atx.js'; -export { htmlFlow } from './lib/html-flow.js'; -export { htmlText } from './lib/html-text.js'; -export { labelEnd } from './lib/label-end.js'; -export { labelStartImage } from './lib/label-start-image.js'; -export { labelStartLink } from './lib/label-start-link.js'; -export { lineEnding } from './lib/line-ending.js'; -export { list } from './lib/list.js'; -export { setextUnderline } from './lib/setext-underline.js'; -export { thematicBreak } from './lib/thematic-break.js'; \ No newline at end of file diff --git a/node_modules/micromark-core-commonmark/license b/node_modules/micromark-core-commonmark/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-core-commonmark/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-core-commonmark/package.json b/node_modules/micromark-core-commonmark/package.json deleted file mode 100644 index 6e158168cc..0000000000 --- a/node_modules/micromark-core-commonmark/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "micromark-core-commonmark", - "version": "2.0.2", - "description": "The CommonMark markdown constructs", - "license": "MIT", - "keywords": [ - "micromark", - "core", - "commonmark" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-core-commonmark", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "max-depth": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-core-commonmark/readme.md b/node_modules/micromark-core-commonmark/readme.md deleted file mode 100644 index 5a47520de9..0000000000 --- a/node_modules/micromark-core-commonmark/readme.md +++ /dev/null @@ -1,171 +0,0 @@ -# micromark-core-commonmark - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] constructs that make up the core of CommonMark. -Some of these can be [turned off][disable], but they are often essential to -markdown and weird things might happen. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes the default constructs. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-core-commonmark -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import * as core from 'https://esm.sh/micromark-core-commonmark@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {autolink} from 'micromark-core-commonmark' - -console.log(autolink) // Do things with `autolink`. -``` - -## API - -This module exports the following identifiers: `attention`, `autolink`, -`blankLine`, `blockQuote`, `characterEscape`, `characterReference`, -`codeFenced`, `codeIndented`, `codeText`, `content`, `definition`, -`hardBreakEscape`, `headingAtx`, `htmlFlow`, `htmlText`, `labelEnd`, -`labelStartImage`, `labelStartLink`, `lineEnding`, `list`, `setextUnderline`, -`thematicBreak`. -There is no default export. - -Each identifier refers to a [construct][]. - -See the code for more on the exported constructs. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-core-commonmark@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-core-commonmark.svg - -[downloads]: https://www.npmjs.com/package/micromark-core-commonmark - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-core-commonmark - -[bundle-size]: https://bundlejs.com/?q=micromark-core-commonmark - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[disable]: https://github.com/micromark/micromark#case-turn-off-constructs - -[construct]: https://github.com/micromark/micromark#constructs - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark diff --git a/node_modules/micromark-extension-directive/dev/index.d.ts b/node_modules/micromark-extension-directive/dev/index.d.ts deleted file mode 100644 index b5bac9fe47..0000000000 --- a/node_modules/micromark-extension-directive/dev/index.d.ts +++ /dev/null @@ -1,156 +0,0 @@ -import type {CompileContext} from 'micromark-util-types' - -export {directive} from './lib/syntax.js' -export {directiveHtml} from './lib/html.js' - -/** - * Internal tuple representing an attribute. - */ -type AttributeTuple = [key: string, value: string] - -/** - * Directive attribute. - */ -interface Attributes { - /** - * Key to value. - */ - [key: string]: string -} - -/** - * Structure representing a directive. - */ -export interface Directive { - /** - * Private :) - */ - _fenceCount?: number | undefined - /** - * Object w/ HTML attributes. - */ - attributes?: Attributes | undefined - /** - * Compiled HTML content inside container directive. - */ - content?: string | undefined - /** - * Compiled HTML content that was in `[brackets]`. - */ - label?: string | undefined - /** - * Name of directive. - */ - name: string - /** - * Kind. - */ - type: 'containerDirective' | 'leafDirective' | 'textDirective' -} - -/** - * Handle a directive. - * - * @param this - * Current context. - * @param directive - * Directive. - * @returns - * Signal whether the directive was handled. - * - * Yield `false` to let the fallback (a special handle for `'*'`) handle it. - */ -export type Handle = ( - this: CompileContext, - directive: Directive -) => boolean | undefined - -/** - * Configuration. - * - * > 👉 **Note**: the special field `'*'` can be used to specify a fallback - * > handle to handle all otherwise unhandled directives. - */ -export interface HtmlOptions { - [name: string]: Handle -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - directiveAttributes?: Array - directiveStack?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - directiveContainer: 'directiveContainer' - directiveContainerAttributes: 'directiveContainerAttributes' - directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' - directiveContainerAttribute: 'directiveContainerAttribute' - directiveContainerAttributeId: 'directiveContainerAttributeId' - directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' - directiveContainerAttributeClass: 'directiveContainerAttributeClass' - directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' - directiveContainerAttributeName: 'directiveContainerAttributeName' - directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' - directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' - directiveContainerAttributeValue: 'directiveContainerAttributeValue' - directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' - directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' - directiveContainerContent: 'directiveContainerContent' - directiveContainerFence: 'directiveContainerFence' - directiveContainerLabel: 'directiveContainerLabel' - directiveContainerLabelMarker: 'directiveContainerLabelMarker' - directiveContainerLabelString: 'directiveContainerLabelString' - directiveContainerName: 'directiveContainerName' - directiveContainerSequence: 'directiveContainerSequence' - - directiveLeaf: 'directiveLeaf' - directiveLeafAttributes: 'directiveLeafAttributes' - directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' - directiveLeafAttribute: 'directiveLeafAttribute' - directiveLeafAttributeId: 'directiveLeafAttributeId' - directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' - directiveLeafAttributeClass: 'directiveLeafAttributeClass' - directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' - directiveLeafAttributeName: 'directiveLeafAttributeName' - directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' - directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' - directiveLeafAttributeValue: 'directiveLeafAttributeValue' - directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' - directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' - directiveLeafLabel: 'directiveLeafLabel' - directiveLeafLabelMarker: 'directiveLeafLabelMarker' - directiveLeafLabelString: 'directiveLeafLabelString' - directiveLeafName: 'directiveLeafName' - directiveLeafSequence: 'directiveLeafSequence' - - directiveText: 'directiveText' - directiveTextAttributes: 'directiveTextAttributes' - directiveTextAttributesMarker: 'directiveTextAttributesMarker' - directiveTextAttribute: 'directiveTextAttribute' - directiveTextAttributeId: 'directiveTextAttributeId' - directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' - directiveTextAttributeClass: 'directiveTextAttributeClass' - directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' - directiveTextAttributeName: 'directiveTextAttributeName' - directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' - directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' - directiveTextAttributeValue: 'directiveTextAttributeValue' - directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' - directiveTextAttributeValueData: 'directiveTextAttributeValueData' - directiveTextLabel: 'directiveTextLabel' - directiveTextLabelMarker: 'directiveTextLabelMarker' - directiveTextLabelString: 'directiveTextLabelString' - directiveTextMarker: 'directiveTextMarker' - directiveTextName: 'directiveTextName' - } -} diff --git a/node_modules/micromark-extension-directive/dev/index.js b/node_modules/micromark-extension-directive/dev/index.js deleted file mode 100644 index f290efe57b..0000000000 --- a/node_modules/micromark-extension-directive/dev/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: more types exported from `index.d.ts`. -export {directive} from './lib/syntax.js' -export {directiveHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-directive/index.d.ts b/node_modules/micromark-extension-directive/index.d.ts deleted file mode 100644 index b5bac9fe47..0000000000 --- a/node_modules/micromark-extension-directive/index.d.ts +++ /dev/null @@ -1,156 +0,0 @@ -import type {CompileContext} from 'micromark-util-types' - -export {directive} from './lib/syntax.js' -export {directiveHtml} from './lib/html.js' - -/** - * Internal tuple representing an attribute. - */ -type AttributeTuple = [key: string, value: string] - -/** - * Directive attribute. - */ -interface Attributes { - /** - * Key to value. - */ - [key: string]: string -} - -/** - * Structure representing a directive. - */ -export interface Directive { - /** - * Private :) - */ - _fenceCount?: number | undefined - /** - * Object w/ HTML attributes. - */ - attributes?: Attributes | undefined - /** - * Compiled HTML content inside container directive. - */ - content?: string | undefined - /** - * Compiled HTML content that was in `[brackets]`. - */ - label?: string | undefined - /** - * Name of directive. - */ - name: string - /** - * Kind. - */ - type: 'containerDirective' | 'leafDirective' | 'textDirective' -} - -/** - * Handle a directive. - * - * @param this - * Current context. - * @param directive - * Directive. - * @returns - * Signal whether the directive was handled. - * - * Yield `false` to let the fallback (a special handle for `'*'`) handle it. - */ -export type Handle = ( - this: CompileContext, - directive: Directive -) => boolean | undefined - -/** - * Configuration. - * - * > 👉 **Note**: the special field `'*'` can be used to specify a fallback - * > handle to handle all otherwise unhandled directives. - */ -export interface HtmlOptions { - [name: string]: Handle -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - directiveAttributes?: Array - directiveStack?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - directiveContainer: 'directiveContainer' - directiveContainerAttributes: 'directiveContainerAttributes' - directiveContainerAttributesMarker: 'directiveContainerAttributesMarker' - directiveContainerAttribute: 'directiveContainerAttribute' - directiveContainerAttributeId: 'directiveContainerAttributeId' - directiveContainerAttributeIdValue: 'directiveContainerAttributeIdValue' - directiveContainerAttributeClass: 'directiveContainerAttributeClass' - directiveContainerAttributeClassValue: 'directiveContainerAttributeClassValue' - directiveContainerAttributeName: 'directiveContainerAttributeName' - directiveContainerAttributeInitializerMarker: 'directiveContainerAttributeInitializerMarker' - directiveContainerAttributeValueLiteral: 'directiveContainerAttributeValueLiteral' - directiveContainerAttributeValue: 'directiveContainerAttributeValue' - directiveContainerAttributeValueMarker: 'directiveContainerAttributeValueMarker' - directiveContainerAttributeValueData: 'directiveContainerAttributeValueData' - directiveContainerContent: 'directiveContainerContent' - directiveContainerFence: 'directiveContainerFence' - directiveContainerLabel: 'directiveContainerLabel' - directiveContainerLabelMarker: 'directiveContainerLabelMarker' - directiveContainerLabelString: 'directiveContainerLabelString' - directiveContainerName: 'directiveContainerName' - directiveContainerSequence: 'directiveContainerSequence' - - directiveLeaf: 'directiveLeaf' - directiveLeafAttributes: 'directiveLeafAttributes' - directiveLeafAttributesMarker: 'directiveLeafAttributesMarker' - directiveLeafAttribute: 'directiveLeafAttribute' - directiveLeafAttributeId: 'directiveLeafAttributeId' - directiveLeafAttributeIdValue: 'directiveLeafAttributeIdValue' - directiveLeafAttributeClass: 'directiveLeafAttributeClass' - directiveLeafAttributeClassValue: 'directiveLeafAttributeClassValue' - directiveLeafAttributeName: 'directiveLeafAttributeName' - directiveLeafAttributeInitializerMarker: 'directiveLeafAttributeInitializerMarker' - directiveLeafAttributeValueLiteral: 'directiveLeafAttributeValueLiteral' - directiveLeafAttributeValue: 'directiveLeafAttributeValue' - directiveLeafAttributeValueMarker: 'directiveLeafAttributeValueMarker' - directiveLeafAttributeValueData: 'directiveLeafAttributeValueData' - directiveLeafLabel: 'directiveLeafLabel' - directiveLeafLabelMarker: 'directiveLeafLabelMarker' - directiveLeafLabelString: 'directiveLeafLabelString' - directiveLeafName: 'directiveLeafName' - directiveLeafSequence: 'directiveLeafSequence' - - directiveText: 'directiveText' - directiveTextAttributes: 'directiveTextAttributes' - directiveTextAttributesMarker: 'directiveTextAttributesMarker' - directiveTextAttribute: 'directiveTextAttribute' - directiveTextAttributeId: 'directiveTextAttributeId' - directiveTextAttributeIdValue: 'directiveTextAttributeIdValue' - directiveTextAttributeClass: 'directiveTextAttributeClass' - directiveTextAttributeClassValue: 'directiveTextAttributeClassValue' - directiveTextAttributeName: 'directiveTextAttributeName' - directiveTextAttributeInitializerMarker: 'directiveTextAttributeInitializerMarker' - directiveTextAttributeValueLiteral: 'directiveTextAttributeValueLiteral' - directiveTextAttributeValue: 'directiveTextAttributeValue' - directiveTextAttributeValueMarker: 'directiveTextAttributeValueMarker' - directiveTextAttributeValueData: 'directiveTextAttributeValueData' - directiveTextLabel: 'directiveTextLabel' - directiveTextLabelMarker: 'directiveTextLabelMarker' - directiveTextLabelString: 'directiveTextLabelString' - directiveTextMarker: 'directiveTextMarker' - directiveTextName: 'directiveTextName' - } -} diff --git a/node_modules/micromark-extension-directive/index.js b/node_modules/micromark-extension-directive/index.js deleted file mode 100644 index 47666d68ef..0000000000 --- a/node_modules/micromark-extension-directive/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: more types exported from `index.d.ts`. -export { directive } from './lib/syntax.js'; -export { directiveHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-directive/license b/node_modules/micromark-extension-directive/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-directive/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-directive/package.json b/node_modules/micromark-extension-directive/package.json deleted file mode 100644 index 3e4b8ffdaf..0000000000 --- a/node_modules/micromark-extension-directive/package.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "name": "micromark-extension-directive", - "version": "3.0.2", - "description": "micromark extension to support generic directives (`:cite[smith04]`)", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "generic", - "directive", - "container", - "extension", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-directive", - "bugs": "https://github.com/micromark/micromark-extension-directive/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "c8": "^10.0.0", - "html-void-elements": "^3.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.59.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "overrides": [ - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": true - } - ], - "@typescript-eslint/consistent-indexed-object-style": [ - "error", - "index-signature" - ], - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface" - ] - } - } - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "max-params": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off" - } - } -} diff --git a/node_modules/micromark-extension-directive/readme.md b/node_modules/micromark-extension-directive/readme.md deleted file mode 100644 index f333822e26..0000000000 --- a/node_modules/micromark-extension-directive/readme.md +++ /dev/null @@ -1,424 +0,0 @@ -# micromark-extension-directive - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support [directives][prop] (`:cite[smith04]` and -such). - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`directive()`](#directive) - * [`directiveHtml(options?)`](#directivehtmloptions) - * [`Directive`](#directive-1) - * [`Handle`](#handle) - * [`HtmlOptions`](#htmloptions) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains two extensions that add support for directive syntax in -markdown to [`micromark`][micromark]. - -## When to use this - -This project is useful when you want to solve the need for an infinite number -of potential extensions to markdown in a single markdown-esque way. - -You can use these extensions when you are working with [`micromark`][micromark] -already. - -When you need a syntax tree, you can combine this package with -[`mdast-util-directive`][mdast-util-directive]. - -All these packages are used [`remark-directive`][remark-directive], which -focusses on making it easier to transform content by abstracting these -internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -[npm][]: - -```sh -npm install micromark-extension-directive -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {directive, directiveHtml} from 'https://esm.sh/micromark-extension-directive@3' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say our document `example.md` contains: - -```markdown -A lovely language know as :abbr[HTML]{title="HyperText Markup Language"}. -``` - -…and our module `example.js` looks as follows: - -```js -/** - * @import {Handle} from 'micromark-extension-directive' - * @import {CompileContext} from 'micromark-util-types' - */ - -import fs from 'node:fs/promises' -import {micromark} from 'micromark' -import {directive, directiveHtml} from 'micromark-extension-directive' - -const output = micromark(await fs.readFile('example.md'), { - extensions: [directive()], - htmlExtensions: [directiveHtml({abbr})] -}) - -console.log(output) - -/** - * @this {CompileContext} - * @type {Handle} - * @returns {undefined} - */ -function abbr(d) { - if (d.type !== 'textDirective') return false - - this.tag('') - this.raw(d.label || '') - this.tag('') -} -``` - -…now running `node example.js` yields: - -```html -

              A lovely language know as HTML.

              -``` - -## API - -This package exports the identifiers [`directive`][api-directive] and -[`directiveHtml`][api-directive-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `directive()` - -Create an extension for `micromark` to enable directive syntax. - -###### Returns - -Extension for `micromark` that can be passed in `extensions`, to enable -directive syntax ([`Extension`][micromark-extension]). - -### `directiveHtml(options?)` - -Create an extension for `micromark` to support directives when serializing to -HTML. - -> 👉 **Note**: this uses KaTeX to render math. - -###### Parameters - -* `options` ([`HtmlOptions`][api-html-options], default: `{}`) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions`, to -support directives when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -### `Directive` - -Structure representing a directive (TypeScript type). - -###### Fields - -* `type` (`'containerDirective'`, `'leafDirective'`, or `'textDirective'`) - — kind -* `name` (`string`) - — name of directive -* `label` (`string` or `undefined`) - — compiled HTML content that was in `[brackets]` -* `attributes` (`Record` or `undefined`) - — object w/ HTML attributes -* `content` (`string` or `undefined`) - — compiled HTML content inside container directive - -### `Handle` - -Handle a directive (TypeScript type). - -###### Parameters - -* `this` ([`CompileContext`][micromark-compile-context]) - — current context -* `directive` ([`Directive`][api-directive-type]) - — directive - -###### Returns - -Signal whether the directive was handled (`boolean`, default: `true`). -Yield `false` to let the fallback (a special handle for `'*'`) handle it. - -### `HtmlOptions` - -Configuration (TypeScript type). - -> 👉 **Note**: the special field `'*'` can be used to specify a fallback handle -> to handle all otherwise unhandled directives. - -###### Type - -```ts -type HtmlOptions = Record -``` - -## Authoring - -When authoring markdown with directives, keep in mind that they don’t work in -most places. -On your own site it can be great! - -## HTML - -You can define how directives are turned into HTML. -If directives are not handled, they do not emit anything. - -## CSS - -How to display directives is left as an exercise for the reader. - -## Syntax - -The syntax looks like this: - -```markdown -Directives in text can form with a single colon, such as :cite[smith04]. -Their syntax is `:name[label]{attributes}`. - -Leafs (block without content) can form by using two colons: - -::youtube[Video of a cat in a box]{vid=01ab2cd3efg} - -Their syntax is `::name[label]{attributes}` on its own line. - -Containers (blocks with content) can form by using three colons: - -:::spoiler -He dies. -::: - -The `name` part is required. The first character must be a letter, other -characters can be alphanumerical, `-`, and `_`. -`-` or `_` cannot end a name. - -The `[label]` part is optional (`:x` and `:x[]` are equivalent)†. -When used, it can include text constructs such as emphasis and so on: `x[a *b* -c]`. - -The `{attributes}` part is optional (`:x` and `:x{}` are equivalent)†. -When used, it is handled like HTML attributes, such as that `{a}`, `{a=""}`, -, `{a=''}` but also `{a=b}`, `{a="b"}`, and `{a='b'}` are equivalent. -Shortcuts are available for `id=` (`{#readme}` for `{id=readme}`) and -`class` (`{.big}` for `{class=big}`). -When multiple ids are found, the last is used; when multiple classes are found, -they are combined: `{.red class=green .blue}` is equivalent to -`{.red .green .blue}` and `{class="red green blue"}`. - -† there is one case where a name must be followed by an empty label or empty -attributes: a *text* directive that only has a name, cannot be followed by a -colon. So, `:red:` doesn’t work. Use either `:red[]` or `:red{}` instead. -The reason for this is to allow GitHub emoji (gemoji) and directives to coexist. - -Containers can be nested by using more colons outside: - -::::spoiler -He dies. - -:::spoiler -She is born. -::: -:::: - -The closing fence must include the same or more colons as the opening. -If no closing is found, the container runs to the end of its parent container -(block quote, list item, document, or other container). - -::::spoiler -These three are not enough to close -::: -So this line is also part of the container. -``` - -Note that while other implementations are sometimes loose in what they allow, -this implementation mimics CommonMark as closely as possible: - -* Whitespace is not allowed between colons and name (~~`: a`~~), name and - label (~~`:a []`~~), name and attributes (~~`:a {}`~~), or label and - attributes (~~`:a[] {}`~~) — because it’s not allowed in links either - (~~`[] ()`~~) -* No trailing colons allowed on the opening fence of a container - (~~`:::a:::`~~) — because it’s not allowed in fenced code either -* The label and attributes in a leaf or container cannot include line endings - (~~`::a[b\nc]`~~) — because it’s not allowed in fenced code either - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types [`Directive`][api-directive-type], -[`Handle`][api-handle], and [`HtmlOptions`][api-html-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-directive@^3`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe assuming that you write safe handlers. -Any vulnerability in your code could open you to a -[cross-site scripting (XSS)][xss] attack. - -## Related - -* [`remark-directive`][remark-directive] - — remark plugin to support directives -* [`mdast-util-directive`][mdast-util-directive] - — mdast utility to support directives - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-directive/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-directive/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-directive.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-directive - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-directive.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-directive - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-directive - -[size]: https://bundlejs.com/?q=micromark-extension-directive - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-compile-context]: https://github.com/micromark/micromark/blob/41e3c4c/packages/micromark-util-types/index.js#L457 - -[mdast-util-directive]: https://github.com/syntax-tree/mdast-util-directive - -[remark-directive]: https://github.com/remarkjs/remark-directive - -[prop]: https://talk.commonmark.org/t/generic-directives-plugins-syntax/444 - -[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting - -[api-directive]: #directive - -[api-directive-html]: #directivehtmloptions - -[api-directive-type]: #directive-1 - -[api-handle]: #handle - -[api-html-options]: #htmloptions diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts deleted file mode 100644 index 36f53b55bf..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export {gfmAutolinkLiteral} from './lib/syntax.js' -export {gfmAutolinkLiteralHtml} from './lib/html.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token with a field to improve performance. - */ - interface Token { - _gfmAutolinkLiteralWalkedInto?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - literalAutolink: 'literalAutolink' - literalAutolinkEmail: 'literalAutolinkEmail' - literalAutolinkHttp: 'literalAutolinkHttp' - literalAutolinkWww: 'literalAutolinkWww' - } -} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js b/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js deleted file mode 100644 index 928d4456ab..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/dev/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export {gfmAutolinkLiteral} from './lib/syntax.js' -export {gfmAutolinkLiteralHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts b/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts deleted file mode 100644 index 36f53b55bf..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/index.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export {gfmAutolinkLiteral} from './lib/syntax.js' -export {gfmAutolinkLiteralHtml} from './lib/html.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token with a field to improve performance. - */ - interface Token { - _gfmAutolinkLiteralWalkedInto?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - literalAutolink: 'literalAutolink' - literalAutolinkEmail: 'literalAutolinkEmail' - literalAutolinkHttp: 'literalAutolinkHttp' - literalAutolinkWww: 'literalAutolinkWww' - } -} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/index.js b/node_modules/micromark-extension-gfm-autolink-literal/index.js deleted file mode 100644 index 5194682ad9..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { gfmAutolinkLiteral } from './lib/syntax.js'; -export { gfmAutolinkLiteralHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-autolink-literal/license b/node_modules/micromark-extension-gfm-autolink-literal/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-autolink-literal/package.json b/node_modules/micromark-extension-gfm-autolink-literal/package.json deleted file mode 100644 index 2b1b6bd476..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "micromark-extension-gfm-autolink-literal", - "version": "2.1.0", - "description": "micromark extension to support GFM autolink literals", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "literal", - "url", - "autolink", - "auto", - "link", - "gfm", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-gfm-autolink-literal", - "bugs": "https://github.com/micromark/micromark-extension-gfm-autolink-literal/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "create-gfm-fixtures": "^1.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "rehype": "^13.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "prettier": true, - "rules": { - "complexity": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-string-replace-all": "off" - }, - "overrides": [ - { - "files": [ - "**/*.ts" - ], - "rules": { - "@typescript-eslint/consistent-type-definitions": 0 - } - }, - { - "files": [ - "test/**/*.js" - ], - "rules": { - "no-await-in-loop": 0 - } - } - ] - } -} diff --git a/node_modules/micromark-extension-gfm-autolink-literal/readme.md b/node_modules/micromark-extension-gfm-autolink-literal/readme.md deleted file mode 100644 index 61651de01a..0000000000 --- a/node_modules/micromark-extension-gfm-autolink-literal/readme.md +++ /dev/null @@ -1,422 +0,0 @@ -# micromark-extension-gfm-autolink-literal - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support GFM [literal autolinks][spec]. - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`gfmAutolinkLiteral()`](#gfmautolinkliteral) - * [`gfmAutolinkLiteralHtml()`](#gfmautolinkliteralhtml) -* [Bugs](#bugs) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains extensions that add support for the extra autolink syntax -enabled by GFM to [`micromark`][micromark]. - -GitHub employs different algorithms to autolink: one at parse time and one at -transform time (similar to how @mentions are done at transform time). -This difference can be observed because character references and escapes are -handled differently. -But also because issues/PRs/comments omit (perhaps by accident?) the second -algorithm for `www.`, `http://`, and `https://` links (but not for email links). - -As this is a syntax extension, it focuses on the first algorithm. -The second algorithm is performed by -[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. -The `html` part of this micromark extension does not operate on an AST and hence -can’t perform the second algorithm. - -The implementation of autolink literal on github.com is currently buggy. -The bugs have been reported on [`cmark-gfm`][cmark-gfm]. -This micromark extension matches github.com except for its bugs. - -## When to use this - -This project is useful when you want to support autolink literals in markdown. - -You can use these extensions when you are working with [`micromark`][micromark]. -To support all GFM features, use -[`micromark-extension-gfm`][micromark-extension-gfm] instead. - -When you need a syntax tree, combine this package with -[`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal]. - -All these packages are used in [`remark-gfm`][remark-gfm], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-extension-gfm-autolink-literal -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {gfmAutolinkLiteral, gfmAutolinkLiteralHtml} from 'https://esm.sh/micromark-extension-gfm-autolink-literal@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {micromark} from 'micromark' -import { - gfmAutolinkLiteral, - gfmAutolinkLiteralHtml -} from 'micromark-extension-gfm-autolink-literal' - -const output = micromark('Just a URL: www.example.com.', { - extensions: [gfmAutolinkLiteral()], - htmlExtensions: [gfmAutolinkLiteralHtml()] -}) - -console.log(output) -``` - -Yields: - -```html -

              Just a URL: www.example.com.

              -``` - -## API - -This package exports the identifiers -[`gfmAutolinkLiteral`][api-gfm-autolink-literal] and -[`gfmAutolinkLiteralHtml`][api-gfm-autolink-literal-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `gfmAutolinkLiteral()` - -Create an extension for `micromark` to support GitHub autolink literal -syntax. - -###### Parameters - -Extension for `micromark` that can be passed in `extensions` to enable GFM -autolink literal syntax ([`Extension`][micromark-extension]). - -### `gfmAutolinkLiteralHtml()` - -Create an HTML extension for `micromark` to support GitHub autolink literal -when serializing to HTML. - -###### Parameters - -Extension for `micromark` that can be passed in `htmlExtensions` to support -GitHub autolink literal when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -## Bugs - -GitHub’s own algorithm to parse autolink literals contains three bugs. -A smaller bug is left unfixed in this project for consistency. -Two main bugs are not present in this project. -The issues relating to autolink literals are: - -* [GFM autolink extension (`www.`, `https?://` parts): links don’t work when - after bracket](https://github.com/github/cmark-gfm/issues/278)\ - fixed here ✅ -* [GFM autolink extension (`www.` part): uppercase does not match on - issues/PRs/comments](https://github.com/github/cmark-gfm/issues/280)\ - fixed here ✅ -* [GFM autolink extension (`www.` part): the word `www` - matches](https://github.com/github/cmark-gfm/issues/279)\ - present here for consistency - -## Authoring - -It is recommended to use labels, either with a resource or a definition, -instead of autolink literals, as those allow relative URLs and descriptive -text to explain the URL in prose. - -## HTML - -GFM autolink literals relate to the `` element in HTML. -See [*§ 4.5.1 The `a` element*][html-a] in the HTML spec for more info. -When an email autolink is used, the string `mailto:` is prepended when -generating the `href` attribute of the hyperlink. -When a www autolink is used, the string `http://` is prepended. - -## CSS - -As hyperlinks are the fundamental thing that makes the web, you will most -definitely have CSS for `a` elements already. -The same CSS can be used for autolink literals, too. - -GitHub itself does not apply interesting CSS to autolink literals. -For any link, it currently (June 2022) [uses][css]: - -```css -a { - background-color: transparent; - color: #58a6ff; - text-decoration: none; -} - -a:active, -a:hover { - outline-width: 0; -} - -a:hover { - text-decoration: underline; -} - -a:not([href]) { - color: inherit; - text-decoration: none; -} -``` - -## Syntax - -Autolink literals form with, roughly, the following BNF: - -```bnf -gfm_autolink_literal ::= gfm_protocol_autolink | gfm_www_autolink | gfm_email_autolink - -; Restriction: the code before must be `www_autolink_before`. -; Restriction: the code after `.` must not be eof. -www_autolink ::= 3('w' | 'W') '.' [domain [path]] -www_autolink_before ::= eof | eol | space_or_tab | '(' | '*' | '_' | '[' | ']' | '~' - -; Restriction: the code before must be `http_autolink_before`. -; Restriction: the code after the protocol must be `http_autolink_protocol_after`. -http_autolink ::= ('h' | 'H') 2('t' | 'T') ('p' | 'P') ['s' | 'S'] ':' 2'/' domain [path] -http_autolink_before ::= byte - ascii_alpha -http_autolink_protocol_after ::= byte - eof - eol - ascii_control - unicode_whitespace - ode_punctuation - -; Restriction: the code before must be `email_autolink_before`. -; Restriction: `ascii_digit` may not occur in the last label part of the label. -email_autolink ::= 1*('+' | '-' | '.' | '_' | ascii_alphanumeric) '@' 1*(1*label_segment l_dot_cont) 1*label_segment -email_autolink_before ::= byte - ascii_alpha - '/' - -; Restriction: `_` may not occur in the last two domain parts. -domain ::= 1*(url_ampt_cont | domain_punct_cont | '-' | byte - eof - ascii_control - ode_whitespace - unicode_punctuation) -; Restriction: must not be followed by `punct`. -domain_punct_cont ::= '.' | '_' -; Restriction: must not be followed by `char-ref`. -url_ampt_cont ::= '&' - -; Restriction: a counter `balance = 0` is increased for every `(`, and decreased for every `)`. -; Restriction: `)` must not be `paren_at_end`. -path ::= 1*(url_ampt_cont | path_punctuation_cont | '(' | ')' | byte - eof - eol - space_or_tab) -; Restriction: must not be followed by `punct`. -path_punctuation_cont ::= trailing_punctuation - '<' -; Restriction: must be followed by `punct` and `balance` must be less than `0`. -paren_at_end ::= ')' - -label_segment ::= label_dash_underscore_cont | ascii_alpha | ascii_digit -; Restriction: if followed by `punct`, the whole email autolink is invalid. -label_dash_underscore_cont ::= '-' | '_' -; Restriction: must not be followed by `punct`. -label_dot_cont ::= '.' - -punct ::= *trailing_punctuation ( byte - eof - eol - space_or_tab - '<' ) -char_ref ::= *ascii_alpha ';' path_end -trailing_punctuation ::= '!' | '"' | '\'' | ')' | '*' | ',' | '.' | ':' | ';' | '<' | '?' | '_' | '~' -``` - -The grammar for GFM autolink literal is very relaxed: basically anything -except for whitespace is allowed after a prefix. -To use whitespace characters and otherwise impossible characters, in URLs, -you can use percent encoding: - -```markdown -https://example.com/alpha%20bravo -``` - -Yields: - -```html -

              https://example.com/alpha%20bravo

              -``` - -There are several cases where incorrect encoding of URLs would, in other -languages, result in a parse error. -In markdown, there are no errors, and URLs are normalized. -In addition, many characters are percent encoded -([`sanitizeUri`][micromark-util-sanitize-uri]). -For example: - -```markdown -www.a👍b% -``` - -Yields: - -```html -

              www.a👍b%

              -``` - -There is a big difference between how www and protocol literals work -compared to how email literals work. -The first two are done when parsing, and work like anything else in -markdown. -But email literals are handled afterwards: when everything is parsed, we -look back at the events to figure out if there were email addresses. -This particularly affects how they interleave with character escapes and -character references. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-gfm-autolink-literal@^2`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe. -Unlike other links in CommonMark, which allow arbitrary protocols, this -construct always produces safe links. - -## Related - -* [`micromark-extension-gfm`][micromark-extension-gfm] - — support all of GFM -* [`mdast-util-gfm-autolink-literal`][mdast-util-gfm-autolink-literal] - — support all of GFM in mdast -* [`mdast-util-gfm`][mdast-util-gfm] - — support all of GFM in mdast -* [`remark-gfm`][remark-gfm] - — support all of GFM in remark - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-gfm-autolink-literal/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-autolink-literal.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-autolink-literal - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-autolink-literal.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-autolink-literal - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-autolink-literal - -[size]: https://bundlejs.com/?q=micromark-extension-gfm-autolink-literal - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[micromark-util-sanitize-uri]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm - -[mdast-util-gfm-autolink-literal]: https://github.com/syntax-tree/mdast-util-gfm-autolink-literal - -[remark-gfm]: https://github.com/remarkjs/remark-gfm - -[spec]: https://github.github.com/gfm/#autolinks-extension- - -[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element - -[css]: https://github.com/sindresorhus/github-markdown-css - -[cmark-gfm]: https://github.com/github/cmark-gfm - -[api-gfm-autolink-literal]: #gfmautolinkliteral - -[api-gfm-autolink-literal-html]: #gfmautolinkliteralhtml diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts b/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts deleted file mode 100644 index 1be286871d..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/dev/index.d.ts +++ /dev/null @@ -1,164 +0,0 @@ -export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' -export {gfmFootnote} from './lib/syntax.js' - -/** - * Generate a back label dynamically. - * - * For the following markdown: - * - * ```markdown - * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. - * - * [^remark]: things about remark - * [^micromark]: things about micromark - * ``` - * - * This function will be called with: - * - * * `0` and `0` for the backreference from `things about micromark` to - * `alpha`, as it is the first used definition, and the first call to it - * * `0` and `1` for the backreference from `things about micromark` to - * `bravo`, as it is the first used definition, and the second call to it - * * `1` and `0` for the backreference from `things about remark` to - * `charlie`, as it is the second used definition - * - * @param referenceIndex - * Index of the definition in the order that they are first referenced, - * 0-indexed. - * @param rereferenceIndex - * Index of calls to the same definition, 0-indexed. - * @returns - * Back label to use when linking back from definitions to their reference. - */ -export type BackLabelTemplate = ( - referenceIndex: number, - rereferenceIndex: number -) => string - -/** - * Configuration. - */ -export interface HtmlOptions { - /** - * Prefix to use before the `id` attribute on footnotes to prevent them from - * *clobbering* (default: `'user-content-'`). - * - * Pass `''` for trusted markdown and when you are careful with - * polyfilling. - * You could pass a different prefix. - * - * DOM clobbering is this: - * - * ```html - *

              - * - * ``` - * - * The above example shows that elements are made available by browsers, by - * their ID, on the `window` object. - * This is a security risk because you might be expecting some other variable - * at that place. - * It can also break polyfills. - * Using a prefix solves these problems. - */ - clobberPrefix?: string | null | undefined - /** - * Textual label to use for the footnotes section (default: `'Footnotes'`). - * - * Change it when the markdown is not in English. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - label?: string | null | undefined - /** - * Attributes to use on the footnote label (default: `'class="sr-only"'`). - * - * Change it to show the label and add other attributes. - * - * This label is typically hidden visually (assuming an `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass an empty string. - * You can also add different attributes. - * - * > 👉 **Note**: `id="footnote-label"` is always added, because footnote - * > calls use it with `aria-describedby` to provide an accessible label. - */ - labelAttributes?: string | null | undefined - /** - * HTML tag name to use for the footnote label element (default: `'h2'`). - * - * Change it to match your document structure. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - labelTagName?: string | null | undefined - /** - * Textual label to describe the backreference back to references (default: - * `defaultBackLabel`). - * - * The default value is: - * - * ```js - * function defaultBackLabel(referenceIndex, rereferenceIndex) { - * return ( - * 'Back to reference ' + - * (referenceIndex + 1) + - * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') - * ) - * } - * ``` - * - * Change it when the markdown is not in English. - * - * This label is used in the `aria-label` attribute on each backreference - * (the `↩` links). - * It affects users of assistive technology. - */ - backLabel?: BackLabelTemplate | string | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - gfmFootnoteDefinitions?: Record - gfmFootnoteDefinitionStack?: Array - gfmFootnoteCallCounts?: Record - gfmFootnoteCallOrder?: Array - } - - /** - * Parse context. - */ - interface ParseContext { - gfmFootnotes?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - gfmFootnoteCall: 'gfmFootnoteCall' - gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' - gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' - gfmFootnoteCallString: 'gfmFootnoteCallString' - gfmFootnoteDefinition: 'gfmFootnoteDefinition' - gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' - gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' - gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' - gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' - gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' - gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' - } -} diff --git a/node_modules/micromark-extension-gfm-footnote/dev/index.js b/node_modules/micromark-extension-gfm-footnote/dev/index.js deleted file mode 100644 index a399a81f45..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/dev/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types are exported from `dev/index.d.ts`. -export {gfmFootnote} from './lib/syntax.js' -export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' diff --git a/node_modules/micromark-extension-gfm-footnote/index.d.ts b/node_modules/micromark-extension-gfm-footnote/index.d.ts deleted file mode 100644 index 1be286871d..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/index.d.ts +++ /dev/null @@ -1,164 +0,0 @@ -export {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js' -export {gfmFootnote} from './lib/syntax.js' - -/** - * Generate a back label dynamically. - * - * For the following markdown: - * - * ```markdown - * Alpha[^micromark], bravo[^micromark], and charlie[^remark]. - * - * [^remark]: things about remark - * [^micromark]: things about micromark - * ``` - * - * This function will be called with: - * - * * `0` and `0` for the backreference from `things about micromark` to - * `alpha`, as it is the first used definition, and the first call to it - * * `0` and `1` for the backreference from `things about micromark` to - * `bravo`, as it is the first used definition, and the second call to it - * * `1` and `0` for the backreference from `things about remark` to - * `charlie`, as it is the second used definition - * - * @param referenceIndex - * Index of the definition in the order that they are first referenced, - * 0-indexed. - * @param rereferenceIndex - * Index of calls to the same definition, 0-indexed. - * @returns - * Back label to use when linking back from definitions to their reference. - */ -export type BackLabelTemplate = ( - referenceIndex: number, - rereferenceIndex: number -) => string - -/** - * Configuration. - */ -export interface HtmlOptions { - /** - * Prefix to use before the `id` attribute on footnotes to prevent them from - * *clobbering* (default: `'user-content-'`). - * - * Pass `''` for trusted markdown and when you are careful with - * polyfilling. - * You could pass a different prefix. - * - * DOM clobbering is this: - * - * ```html - *

              - * - * ``` - * - * The above example shows that elements are made available by browsers, by - * their ID, on the `window` object. - * This is a security risk because you might be expecting some other variable - * at that place. - * It can also break polyfills. - * Using a prefix solves these problems. - */ - clobberPrefix?: string | null | undefined - /** - * Textual label to use for the footnotes section (default: `'Footnotes'`). - * - * Change it when the markdown is not in English. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - label?: string | null | undefined - /** - * Attributes to use on the footnote label (default: `'class="sr-only"'`). - * - * Change it to show the label and add other attributes. - * - * This label is typically hidden visually (assuming an `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass an empty string. - * You can also add different attributes. - * - * > 👉 **Note**: `id="footnote-label"` is always added, because footnote - * > calls use it with `aria-describedby` to provide an accessible label. - */ - labelAttributes?: string | null | undefined - /** - * HTML tag name to use for the footnote label element (default: `'h2'`). - * - * Change it to match your document structure. - * - * This label is typically hidden visually (assuming a `sr-only` CSS class - * is defined that does that) and so affects screen readers only. - * If you do have such a class, but want to show this section to everyone, - * pass different attributes with the `labelAttributes` option. - */ - labelTagName?: string | null | undefined - /** - * Textual label to describe the backreference back to references (default: - * `defaultBackLabel`). - * - * The default value is: - * - * ```js - * function defaultBackLabel(referenceIndex, rereferenceIndex) { - * return ( - * 'Back to reference ' + - * (referenceIndex + 1) + - * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '') - * ) - * } - * ``` - * - * Change it when the markdown is not in English. - * - * This label is used in the `aria-label` attribute on each backreference - * (the `↩` links). - * It affects users of assistive technology. - */ - backLabel?: BackLabelTemplate | string | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - gfmFootnoteDefinitions?: Record - gfmFootnoteDefinitionStack?: Array - gfmFootnoteCallCounts?: Record - gfmFootnoteCallOrder?: Array - } - - /** - * Parse context. - */ - interface ParseContext { - gfmFootnotes?: Array - } - - /** - * Token types. - */ - interface TokenTypeMap { - gfmFootnoteCall: 'gfmFootnoteCall' - gfmFootnoteCallLabelMarker: 'gfmFootnoteCallLabelMarker' - gfmFootnoteCallMarker: 'gfmFootnoteCallMarker' - gfmFootnoteCallString: 'gfmFootnoteCallString' - gfmFootnoteDefinition: 'gfmFootnoteDefinition' - gfmFootnoteDefinitionIndent: 'gfmFootnoteDefinitionIndent' - gfmFootnoteDefinitionLabel: 'gfmFootnoteDefinitionLabel' - gfmFootnoteDefinitionLabelMarker: 'gfmFootnoteDefinitionLabelMarker' - gfmFootnoteDefinitionLabelString: 'gfmFootnoteDefinitionLabelString' - gfmFootnoteDefinitionMarker: 'gfmFootnoteDefinitionMarker' - gfmFootnoteDefinitionWhitespace: 'gfmFootnoteDefinitionWhitespace' - } -} diff --git a/node_modules/micromark-extension-gfm-footnote/index.js b/node_modules/micromark-extension-gfm-footnote/index.js deleted file mode 100644 index b210cb3dae..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types are exported from `dev/index.d.ts`. -export { gfmFootnote } from './lib/syntax.js'; -export { gfmFootnoteHtml, defaultBackLabel } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-footnote/license b/node_modules/micromark-extension-gfm-footnote/license deleted file mode 100644 index f4fb31fe44..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2021 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-footnote/package.json b/node_modules/micromark-extension-gfm-footnote/package.json deleted file mode 100644 index bcbf3e6c46..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/package.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "name": "micromark-extension-gfm-footnote", - "version": "2.1.0", - "description": "micromark extension to support GFM footnotes", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "gfm", - "footnote", - "note", - "definition", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-gfm-footnote", - "bugs": "https://github.com/micromark/micromark-extension-gfm-footnote/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "create-gfm-fixtures": "^1.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-string-replace-all": "off" - }, - "overrides": [ - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": true - } - ], - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface" - ] - } - }, - { - "files": [ - "test/**/*.js" - ], - "rules": { - "no-await-in-loop": 0 - } - } - ] - } -} diff --git a/node_modules/micromark-extension-gfm-footnote/readme.md b/node_modules/micromark-extension-gfm-footnote/readme.md deleted file mode 100644 index 4c446ae20b..0000000000 --- a/node_modules/micromark-extension-gfm-footnote/readme.md +++ /dev/null @@ -1,656 +0,0 @@ -# micromark-extension-gfm-footnote - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support GFM [footnotes][post]. - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`defaultBackLabel(referenceIndex, rereferenceIndex)`](#defaultbacklabelreferenceindex-rereferenceindex) - * [`gfmFootnote()`](#gfmfootnote) - * [`gfmFootnoteHtml(options?)`](#gfmfootnotehtmloptions) - * [`BackLabelTemplate`](#backlabeltemplate) - * [`HtmlOptions`](#htmloptions) -* [Bugs](#bugs) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains extensions that add support for footnotes as enabled by -GFM to [`micromark`][micromark]. - -GitHub announced footnotes [on September 30, 2021][post] but did not specify -them in their GFM spec. -As they are implemented in their parser and supported in all places where -other GFM features work, they can be considered part of GFM. -GitHub employs several other features (such as mentions or frontmatter) that -are either not in their parser, or not in all places where GFM features work, -which should not be considered GFM. - -The implementation of footnotes on github.com is currently buggy. -The bugs have been reported on [`cmark-gfm`][cmark-gfm]. -This micromark extension matches github.com except for its bugs. - -## When to use this - -This project is useful when you want to support footnotes in markdown. - -You can use these extensions when you are working with [`micromark`][micromark]. -To support all GFM features, use -[`micromark-extension-gfm`][micromark-extension-gfm] instead. - -When you need a syntax tree, combine this package with -[`mdast-util-gfm-footnote`][mdast-util-gfm-footnote]. - -All these packages are used in [`remark-gfm`][remark-gfm], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-extension-gfm-footnote -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {gfmFootnote, gfmFootnoteHtml} from 'https://esm.sh/micromark-extension-gfm-footnote@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say our document `example.md` contains: - -````markdown -Using footnotes is fun![^1] They let you reference relevant information without disrupting the flow of what you’re trying to say.[^bignote] - -[^1]: This is the first footnote. -[^bignote]: Here’s one with multiple paragraphs and code. - - Indent paragraphs to include them in the footnote. - - ``` - my code - ``` - - Add as many paragraphs as you like. - -Text here and here and here. -[Learn more about markdown and footnotes in markdown](https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#footnotes) -```` - -…and our module `example.js` looks as follows: - -```js -import fs from 'node:fs/promises' -import {micromark} from 'micromark' -import {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote' - -const output = micromark(await fs.readFile('example.md'), { - extensions: [gfmFootnote()], - htmlExtensions: [gfmFootnoteHtml()] -}) - -console.log(output) -``` - -…now running `node example.js` yields: - -```html -

              Using footnotes is fun!1 They let you reference relevant information without disrupting the flow of what you’re trying to say.2

              -

              Text here and here and here. -Learn more about markdown and footnotes in markdown

              -

              Footnotes

              -
                -
              1. -

                This is the first footnote.

                -
              2. -
              3. -

                Here’s one with multiple paragraphs and code.

                -

                Indent paragraphs to include them in the footnote.

                -
                my code
                -
                -

                Add as many paragraphs as you like.

                -
              4. -
              -
              -``` - -## API - -This package exports the identifiers -[`defaultBackLabel`][api-default-back-label], -[`gfmFootnote`][api-gfm-footnote], and -[`gfmFootnoteHtml`][api-gfm-footnote-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `defaultBackLabel(referenceIndex, rereferenceIndex)` - -Generate the default label that GitHub uses on backreferences -([`BackLabelTemplate`][api-back-label-template]). - -### `gfmFootnote()` - -Create an extension for `micromark` to enable GFM footnote syntax. - -###### Returns - -Extension for `micromark` that can be passed in `extensions` to enable GFM -footnote syntax ([`Extension`][micromark-extension]). - -### `gfmFootnoteHtml(options?)` - -Create an extension for `micromark` to support GFM footnotes when serializing -to HTML. - -###### Parameters - -* `options` ([`HtmlOptions`][api-html-options], optional) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions` to support GFM -footnotes when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -### `BackLabelTemplate` - -Generate a back label dynamically (TypeScript type). - -For the following markdown: - -```markdown -Alpha[^micromark], bravo[^micromark], and charlie[^remark]. - -[^remark]: things about remark -[^micromark]: things about micromark -``` - -This function will be called with: - -* `0` and `0` for the backreference from `things about micromark` to - `alpha`, as it is the first used definition, and the first call to it -* `0` and `1` for the backreference from `things about micromark` to - `bravo`, as it is the first used definition, and the second call to it -* `1` and `0` for the backreference from `things about remark` to - `charlie`, as it is the second used definition - -###### Parameters - -* `referenceIndex` (`number`) - — index of the definition in the order that they are first referenced, - 0-indexed -* `rereferenceIndex` (`number`) - — index of calls to the same definition, 0-indexed - -###### Returns - -Back label to use when linking back from definitions to their reference -(`string`). - -### `HtmlOptions` - -Configuration (TypeScript type). - -##### Fields - -###### `clobberPrefix` - -Prefix to use before the `id` attribute on footnotes to prevent them from -*clobbering* (`string`, default: `'user-content-'`). - -Pass `''` for trusted markdown and when you are careful with polyfilling. -You could pass a different prefix. - -DOM clobbering is this: - -```html -

              - -``` - -The above example shows that elements are made available by browsers, by their -ID, on the `window` object. -This is a security risk because you might be expecting some other variable at -that place. -It can also break polyfills. -Using a prefix solves these problems. - -###### `label` - -Textual label to use for the footnotes section (`string`, default: -`'Footnotes'`). - -Change it when the markdown is not in English. - -This label is typically hidden visually (assuming a `sr-only` CSS class -is defined that does that) and so affects screen readers only. - -###### `labelAttributes` - -Attributes to use on the footnote label (`string`, default: -`'class="sr-only"'`). - -Change it to show the label and add other attributes. - -This label is typically hidden visually (assuming an `sr-only` CSS class -is defined that does that) and so affects screen readers only. -If you do have such a class, but want to show this section to everyone, -pass an empty string. -You can also add different attributes. - -> 👉 **Note**: `id="footnote-label"` is always added, because footnote -> calls use it with `aria-describedby` to provide an accessible label. - -###### `labelTagName` - -HTML tag name to use for the footnote label element (`string`, default: -`'h2'`). - -Change it to match your document structure. - -This label is typically hidden visually (assuming a `sr-only` CSS class -is defined that does that) and so affects screen readers only. - -###### `backLabel` - -Textual label to describe the backreference back to footnote calls -([`BackLabelTemplate`][api-back-label-template] or `string`, -default: [`defaultBackLabel`][api-default-back-label]). - -Change it when the markdown is not in English. - -This label is used in the [`aria-label`][aria-label] attribute on each -backreference (the `↩` links). -It affects users of assistive technology. - -## Bugs - -GitHub’s own algorithm to parse footnote definitions contains several bugs. -These are not present in this project. -The issues relating to footnote definitions are: - -* [Footnote reference call identifiers are trimmed, but definition - identifiers aren’t](https://github.com/github/cmark-gfm/issues/237)\ - — initial and final whitespace in labels causes them not to match -* [Footnotes are matched case-insensitive, but links keep their casing, - breaking them](https://github.com/github/cmark-gfm/issues/239)\ - — using uppercase (or any character that will be percent encoded) in - identifiers breaks links -* [Colons in footnotes generate links w/o - `href`](https://github.com/github/cmark-gfm/issues/250)\ - — colons in identifiers generate broken links -* [Character escape of `]` does not work in footnote - identifiers](https://github.com/github/cmark-gfm/issues/240)\ - — some character escapes don’t work -* [Footnotes in links are - broken](https://github.com/github/cmark-gfm/issues/249)\ - — while `CommonMark` prevents links in links, GitHub does not prevent - footnotes (which turn into links) in links -* [Footnote-like brackets around image, break that - image](https://github.com/github/cmark-gfm/issues/275)\ - — images can’t be used in what looks like a footnote call -* [GFM footnotes: line ending in footnote definition label causes text to - disappear](https://github.com/github/cmark-gfm/issues/282)\ - — line endings in footnote definitions cause text to disappear - -## Authoring - -When authoring markdown with footnotes it’s recommended to use words instead -of numbers (or letters or anything with an order) as identifiers. -That makes it easier to reuse and reorder footnotes. - -It’s recommended to place footnotes definitions at the bottom of the document. - -## HTML - -GFM footnotes do not, on their own, relate to anything in HTML. -When a footnote reference matches with a definition, they each relate to several -elements in HTML. - -The reference relates to `` and `` elements in HTML: - -```html -1

              -``` - -…where `x` is the identifier used in the markdown source and `1` the number of -corresponding, listed, definition. - -See [*§ 4.5.19 The `sub` and `sup` elements*][html-sup], -[*§ 4.5.1 The `a` element*][html-a], and -[*§ 3.2.6.6 Embedding custom non-visible data with the `data-*` -attributes*][html-data] -in the HTML spec, and -[*§ 6.8 `aria-describedby` property*][aria-describedby] -in WAI-ARIA, for more info. - -When one or more definitions are referenced, a footnote section is generated at -the end of the document, using `
              `, `

              `, and `
                ` elements: - -```html -

                Footnotes

                -
                -
                -``` - -Each definition is generated as a `
              1. ` in the `
                  ` in the order they were -first referenced: - -```html -
                1. -``` - -Backreferences are injected at the end of the first paragraph, or, when there -is no paragraph, at the end of the definition. -When a definition is referenced multiple times, multiple backreferences are -generated. -Further backreferences use an extra counter in the `href` attribute and -visually in a `` after `↩`. - -```html - 2 -``` - -See -[*§ 4.5.1 The `a` element*][html-a], -[*§ 4.3.6 The `h1`, `h2`, `h3`, `h4`, `h5`, and `h6` elements*][html-h], -[*§ 4.4.8 The `li` element*][html-li], -[*§ 4.4.5 The `ol` element*][html-ol], -[*§ 4.4.1 The `p` element*][html-p], -[*§ 4.3.3 The `section` element*][html-section], and -[*§ 4.5.19 The `sub` and `sup` elements*][html-sup] -in the HTML spec, and -[*§ 6.8 `aria-label` property*][aria-label] -in WAI-ARIA, for more info. - -## CSS - -The following CSS is needed to make footnotes look a bit like GitHub (and fixes -a bug). -For the complete actual CSS see -[`sindresorhus/github-markdown-css`](https://github.com/sindresorhus/github-markdown-css). - -```css -/* Style the footnotes section. */ -.footnotes { - font-size: smaller; - color: #8b949e; - border-top: 1px solid #30363d; -} - -/* Hide the section label for visual users. */ -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - word-wrap: normal; - border: 0; -} - -/* Place `[` and `]` around footnote references. */ -[data-footnote-ref]::before { - content: '['; -} - -[data-footnote-ref]::after { - content: ']'; -} -``` - -## Syntax - -Footnotes form with, roughly, the following BNF: - -```bnf -gfm_footnote_reference ::= gfm_footnote_label - -gfm_footnote_definition_start ::= gfm_footnote_label ':' *space_or_tab -; Restriction: blank line allowed. -gfm_footnote_definition_cont ::= 4(space_or_tab) - -; Restriction: maximum `999` codes between `^` and `]`. -gfm_footnote_label ::= '[' '^' 1*(gfm_footnote_label_byte | gfm_footnote_label_escape) ']' -gfm_footnote_label_byte ::= text - '[' - '\\' - ']' -gfm_footnote_label_escape ::= '\\' ['[' | '\\' | ']'] - -; Any byte (u8) -byte ::= 0x00..=0xFFFF -space_or_tab ::= '\t' | ' ' -eol ::= '\n' | '\r' | '\r\n' -line ::= byte - eol -text ::= line - space_or_tab -``` - -Further lines after `gfm_footnote_definition_start` that are not prefixed with -`gfm_footnote_definition_cont` cause the footnote definition to be exited, -except when those lines are lazy continuation or blank. -Like so many things in markdown, footnote definition too are complex. -See [*§ Phase 1: block structure* in `CommonMark`][commonmark-block] for more -on parsing details. - -The identifiers in the `label` parts are interpreted as the -[string][micromark-content-types] content type. -That means that character escapes and character references are allowed. - -Definitions match to references through identifiers. -To match, both labels must be equal after normalizing with -[`normalizeIdentifier`][micromark-normalize-identifier]. -One definition can match to multiple calls. -Multiple definitions with the same, normalized, identifier are ignored: the -first definition is preferred. -To illustrate, the definition with the content of `x` wins: - -```markdown -[^a]: x -[^a]: y - -[^a] -``` - -Importantly, while labels *can* include [string][micromark-content-types] -content (character escapes and character references), these are not considered -when matching. -To illustrate, neither definition matches the reference: - -```markdown -[^a&b]: x -[^a\&b]: y - -[^a&b] -``` - -Because footnote definitions are containers (like block quotes and list items), -they can contain more footnote definitions. -They can even include references to themselves. - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types [`BackLabelTemplate`][api-back-label-template] -and [`HtmlOptions`][api-html-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-gfm-footnote@^2`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe. -Setting `clobberPrefix = ''` is dangerous, it opens you up to DOM clobbering. -The `labelTagName` and `labelAttributes` options are unsafe when used with user -content, they allow defining arbitrary HTML. - -## Related - -* [`micromark-extension-gfm`][micromark-extension-gfm] - — support all of GFM -* [`mdast-util-gfm-footnote`][mdast-util-gfm-footnote] - — support all of GFM in mdast -* [`mdast-util-gfm`][mdast-util-gfm] - — support all of GFM in mdast -* [`remark-gfm`][remark-gfm] - — support all of GFM in remark - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-gfm-footnote/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-gfm-footnote/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-footnote.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-footnote - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-footnote.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-footnote - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-footnote - -[size]: https://bundlejs.com/?q=micromark-extension-gfm-footnote - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-content-types]: https://github.com/micromark/micromark#content-types - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-normalize-identifier]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[mdast-util-gfm-footnote]: https://github.com/syntax-tree/mdast-util-gfm-footnote - -[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm - -[remark-gfm]: https://github.com/remarkjs/remark-gfm - -[post]: https://github.blog/changelog/2021-09-30-footnotes-now-supported-in-markdown-fields/ - -[cmark-gfm]: https://github.com/github/cmark-gfm - -[commonmark-block]: https://spec.commonmark.org/0.30/#phase-1-block-structure - -[html-a]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element - -[html-data]: https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes - -[html-h]: https://html.spec.whatwg.org/multipage/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements - -[html-li]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-li-element - -[html-ol]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-ol-element - -[html-p]: https://html.spec.whatwg.org/multipage/grouping-content.html#the-p-element - -[html-section]: https://html.spec.whatwg.org/multipage/sections.html#the-section-element - -[html-sup]: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-sub-and-sup-elements - -[aria-describedby]: https://w3c.github.io/aria/#aria-describedby - -[aria-label]: https://w3c.github.io/aria/#aria-label - -[api-gfm-footnote]: #gfmfootnote - -[api-gfm-footnote-html]: #gfmfootnotehtmloptions - -[api-html-options]: #htmloptions - -[api-default-back-label]: #defaultbacklabelreferenceindex-rereferenceindex - -[api-back-label-template]: #backlabeltemplate diff --git a/node_modules/micromark-extension-gfm-table/dev/index.d.ts b/node_modules/micromark-extension-gfm-table/dev/index.d.ts deleted file mode 100644 index 1625d64dcb..0000000000 --- a/node_modules/micromark-extension-gfm-table/dev/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type {Align} from './lib/infer.js' - -export {gfmTableHtml} from './lib/html.js' -export {gfmTable} from './lib/syntax.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token; - * `align` is patched on `table` tokens. - */ - interface Token { - _align?: Align[] - } - - interface TokenTypeMap { - table: 'table' - tableBody: 'tableBody' - tableCellDivider: 'tableCellDivider' - tableContent: 'tableContent' - tableData: 'tableData' - tableDelimiter: 'tableDelimiter' - tableDelimiterFiller: 'tableDelimiterFiller' - tableDelimiterMarker: 'tableDelimiterMarker' - tableDelimiterRow: 'tableDelimiterRow' - tableHead: 'tableHead' - tableHeader: 'tableHeader' - tableRow: 'tableRow' - } - - interface CompileData { - tableAlign?: Align[] - tableColumn?: number - } -} diff --git a/node_modules/micromark-extension-gfm-table/dev/index.js b/node_modules/micromark-extension-gfm-table/dev/index.js deleted file mode 100644 index dcb556083f..0000000000 --- a/node_modules/micromark-extension-gfm-table/dev/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export {gfmTableHtml} from './lib/html.js' -export {gfmTable} from './lib/syntax.js' diff --git a/node_modules/micromark-extension-gfm-table/index.d.ts b/node_modules/micromark-extension-gfm-table/index.d.ts deleted file mode 100644 index 1625d64dcb..0000000000 --- a/node_modules/micromark-extension-gfm-table/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type {Align} from './lib/infer.js' - -export {gfmTableHtml} from './lib/html.js' -export {gfmTable} from './lib/syntax.js' - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Augment token; - * `align` is patched on `table` tokens. - */ - interface Token { - _align?: Align[] - } - - interface TokenTypeMap { - table: 'table' - tableBody: 'tableBody' - tableCellDivider: 'tableCellDivider' - tableContent: 'tableContent' - tableData: 'tableData' - tableDelimiter: 'tableDelimiter' - tableDelimiterFiller: 'tableDelimiterFiller' - tableDelimiterMarker: 'tableDelimiterMarker' - tableDelimiterRow: 'tableDelimiterRow' - tableHead: 'tableHead' - tableHeader: 'tableHeader' - tableRow: 'tableRow' - } - - interface CompileData { - tableAlign?: Align[] - tableColumn?: number - } -} diff --git a/node_modules/micromark-extension-gfm-table/index.js b/node_modules/micromark-extension-gfm-table/index.js deleted file mode 100644 index 8f9afc67d3..0000000000 --- a/node_modules/micromark-extension-gfm-table/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { gfmTableHtml } from './lib/html.js'; -export { gfmTable } from './lib/syntax.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-gfm-table/license b/node_modules/micromark-extension-gfm-table/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-gfm-table/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-gfm-table/package.json b/node_modules/micromark-extension-gfm-table/package.json deleted file mode 100644 index 49909daa90..0000000000 --- a/node_modules/micromark-extension-gfm-table/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "micromark-extension-gfm-table", - "version": "2.1.0", - "description": "micromark extension to support GFM tables", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "table", - "row", - "column", - "cell", - "tabular", - "gfm", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-gfm-table", - "bugs": "https://github.com/micromark/micromark-extension-gfm-table/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "create-gfm-fixtures": "^1.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "overrides": [ - { - "files": [ - "test/**/*.js" - ], - "rules": { - "no-await-in-loop": 0 - } - }, - { - "files": [ - "**/*.ts" - ], - "rules": { - "@typescript-eslint/consistent-type-definitions": 0 - } - } - ], - "prettier": true, - "rules": { - "complexity": "off", - "max-depth": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-string-replace-all": "off" - } - } -} diff --git a/node_modules/micromark-extension-gfm-table/readme.md b/node_modules/micromark-extension-gfm-table/readme.md deleted file mode 100644 index 35e1e1966d..0000000000 --- a/node_modules/micromark-extension-gfm-table/readme.md +++ /dev/null @@ -1,515 +0,0 @@ -# micromark-extension-gfm-table - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support GFM [tables][]. - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`gfmTable()`](#gfmtable) - * [`gfmTableHtml()`](#gfmtablehtml) -* [Bugs](#bugs) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains extensions that add support for the table syntax enabled -by GFM to [`micromark`][micromark]. -These extensions match github.com. - -## When to use this - -This project is useful when you want to support tables in markdown. - -You can use these extensions when you are working with [`micromark`][micromark]. -To support all GFM features, use -[`micromark-extension-gfm`][micromark-extension-gfm] instead. - -When you need a syntax tree, combine this package with -[`mdast-util-gfm-table`][mdast-util-gfm-table]. - -All these packages are used in [`remark-gfm`][remark-gfm], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-extension-gfm-table -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {gfmTable, gfmTableHtml} from 'https://esm.sh/micromark-extension-gfm-table@2' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {micromark} from 'micromark' -import {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table' - -const output = micromark('| a |\n| - |', { - extensions: [gfmTable()], - htmlExtensions: [gfmTableHtml()] -}) - -console.log(output) -``` - -Yields: - -```html - - - - - - -
                  a
                  -``` - -## API - -This package exports the identifiers [`gfmTable`][api-gfm-table] and -[`gfmTableHtml`][api-gfm-table-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `gfmTable()` - -Create an HTML extension for `micromark` to support GitHub tables syntax. - -###### Returns - -Extension for `micromark` that can be passed in `extensions` to enable GFM -table syntax ([`Extension`][micromark-extension]). - -### `gfmTableHtml()` - -Create an HTML extension for `micromark` to support GitHub tables when -serializing to HTML. - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions` to support -GFM tables when serializing to HTML -([`HtmlExtension`][micromark-html-extension]). - -## Bugs - -GitHub’s own algorithm to parse tables contains a bug. -This bug is not present in this project. -The issue relating to tables is: - -* [GFM tables: escaped escapes are incorrectly treated as - escapes](https://github.com/github/cmark-gfm/issues/277) - -## Authoring - -When authoring markdown with GFM tables, it’s recommended to *always* put -pipes around cells. -Without them, it can be hard to infer whether the table will work, how many -columns there are, and which column you are currently editing. - -It is recommended to not use many columns, as it results in very long lines, -making it hard to infer which column you are currently editing. - -For larger tables, particularly when cells vary in size, it is recommended -*not* to manually “pad” cell text. -While it can look better, it results in a lot of time spent realigning -everything when a new, longer cell is added or the longest cell removed, as -every row then must be changed. -Other than costing time, it also causes large diffs in Git. - -To illustrate, when authoring large tables, it is discouraged to pad cells -like this: - -```markdown -| Alpha bravo charlie | delta | -| ------------------- | -----------------: | -| Echo | Foxtrot golf hotel | -``` - -Instead, use single spaces (and single filler dashes): - -```markdown -| Alpha bravo charlie | delta | -| - | -: | -| Echo | Foxtrot golf hotel | -``` - -## HTML - -GFM tables relate to several HTML elements: ``, ``, ``, and ``. -See -[*§ 4.9.1 The `table` element*][html-table], -[*§ 4.9.5 The `tbody` element*][html-tbody], -[*§ 4.9.9 The `td` element*][html-td], -[*§ 4.9.10 The `th` element*][html-th], -[*§ 4.9.6 The `thead` element*][html-thead], and -[*§ 4.9.8 The `tr` element*][html-tr] -in the HTML spec for more info. - -If the alignment of a column is left, right, or center, a deprecated -`align` attribute is added to each `
                  `, -``, `
                  ` and `` element belonging to -that column. -That attribute is interpreted by browsers as if a CSS `text-align` property -was included, with its value set to that same keyword. - -## CSS - -The following CSS is needed to make tables look a bit like GitHub. -For the complete actual CSS see -[`sindresorhus/github-markdown-css`][github-markdown-css] - -```css -/* Light theme. */ -:root { - --color-canvas-default: #ffffff; - --color-canvas-subtle: #f6f8fa; - --color-border-default: #d0d7de; - --color-border-muted: hsla(210, 18%, 87%, 1); -} - -/* Dark theme. */ -@media (prefers-color-scheme: dark) { - :root { - --color-canvas-default: #0d1117; - --color-canvas-subtle: #161b22; - --color-border-default: #30363d; - --color-border-muted: #21262d; - } -} - -table { - border-spacing: 0; - border-collapse: collapse; - display: block; - margin-top: 0; - margin-bottom: 16px; - width: max-content; - max-width: 100%; - overflow: auto; -} - -tr { - background-color: var(--color-canvas-default); - border-top: 1px solid var(--color-border-muted); -} - -tr:nth-child(2n) { - background-color: var(--color-canvas-subtle); -} - -td, -th { - padding: 6px 13px; - border: 1px solid var(--color-border-default); -} - -th { - font-weight: 600; -} - -table img { - background-color: transparent; -} -``` - -## Syntax - -Tables form with the following BNF: - -```bnf -gfm_table ::= gfm_table_head 0*(eol gfm_table_body_row) - -; Restriction: both rows must have the same number of cells. -gfm_table_head ::= gfm_table_row eol gfm_table_delimiter_row - -gfm_table_row ::= ['|'] gfm_table_cell 0*('|' gfm_table_cell) ['|'] *space_or_tab -gfm_table_cell ::= *space_or_tab gfm_table_text *space_or_tab -gfm_table_text ::= 0*(line - '\\' - '|' | '\\' ['\\' | '|']) - -gfm_table_delimiter_row ::= ['|'] gfm_table_delimiter_cell 0*('|' gfm_table_delimiter_cell) ['|'] *space_or_tab -gfm_table_delimiter_cell ::= *space_or_tab gfm_table_delimiter_value *space_or_tab -gfm_table_delimiter_value ::= [':'] 1*'-' [':'] -``` - -As this construct occurs in flow, like all flow constructs, it must be -followed by an eol (line ending) or eof (end of file). - -The above grammar shows that basically anything can be a cell or a row. -The main thing that makes something a row, is that it occurs directly before -or after a delimiter row, or after another row. - -It is not required for a table to have a body: it can end right after the -delimiter row. - -Each column can be marked with an alignment. -The alignment marker is a colon (`:`) used before and/or after delimiter row -filler. -To illustrate: - -```markdown -| none | left | right | center | -| ---- | :--- | ----: | :----: | -``` - -The number of cells in the delimiter row, is the number of columns of the -table. -Only the head row is required to have the same number of cells. -Body rows are not required to have a certain number of cells. -For body rows that have less cells than the number of columns of the table, -empty cells are injected. -When a row has more cells than the number of columns of the table, the -superfluous cells are dropped. -To illustrate: - -```markdown -| a | b | -| - | - | -| c | -| d | e | f | -``` - -Yields: - -```html - - - - - - - - - - - - - - - - - -
                  ab
                  c
                  de
                  -``` - -Each cell’s text is interpreted as the [text][micromark-content-type] content -type. -That means that it can include constructs such as attention (emphasis, strong). - -The grammar for cells prohibits the use of `|` in them. -To use pipes in cells, encode them as a character reference or character -escape: `|` (or `|`, `|`, `|`, `|`) or -`\|`. - -Escapes will typically work, but they are not supported in -code (text) (and the math (text) extension). -To work around this, GitHub came up with a rather weird “trick”. -When inside a table cell *and* inside code, escaped pipes *are* decoded. -To illustrate: - -```markdown -| Name | Character | -| - | - | -| Left curly brace | `{` | -| Pipe | `\|` | -| Right curly brace | `}` | -``` - -Yields: - -```html - - - - - - - - - - - - - - - - - - - - - -
                  NameCharacter
                  Left curly brace{
                  Pipe|
                  Right curly brace}
                  -``` - -> 👉 **Note**: no other character can be escaped like this. -> Escaping pipes in code does not work when not inside a table, either. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-gfm-table@^2`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe. - -## Related - -* [`micromark-extension-gfm`][micromark-extension-gfm] - — support all of GFM -* [`mdast-util-gfm-table`][mdast-util-gfm-table] - — support all of GFM in mdast -* [`mdast-util-gfm`][mdast-util-gfm] - — support all of GFM in mdast -* [`remark-gfm`][remark-gfm] - — support all of GFM in remark - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-gfm-table/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-gfm-table/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-gfm-table.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-gfm-table - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-gfm-table.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-gfm-table - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-gfm-table - -[size]: https://bundlejs.com/?q=micromark-extension-gfm-table - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-content-type]: https://github.com/micromark/micromark#content-types - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm - -[mdast-util-gfm-table]: https://github.com/syntax-tree/mdast-util-gfm-table - -[remark-gfm]: https://github.com/remarkjs/remark-gfm - -[tables]: https://github.github.com/gfm/#tables-extension- - -[html-table]: https://html.spec.whatwg.org/multipage/tables.html#the-table-element - -[html-tbody]: https://html.spec.whatwg.org/multipage/tables.html#the-tbody-element - -[html-thead]: https://html.spec.whatwg.org/multipage/tables.html#the-thead-element - -[html-tr]: https://html.spec.whatwg.org/multipage/tables.html#the-tr-element - -[html-td]: https://html.spec.whatwg.org/multipage/tables.html#the-td-element - -[html-th]: https://html.spec.whatwg.org/multipage/tables.html#the-th-element - -[github-markdown-css]: https://github.com/sindresorhus/github-markdown-css - -[api-gfm-table]: #gfmtable - -[api-gfm-table-html]: #gfmtablehtml diff --git a/node_modules/micromark-extension-math/dev/index.d.ts b/node_modules/micromark-extension-math/dev/index.d.ts deleted file mode 100644 index d09f0e576d..0000000000 --- a/node_modules/micromark-extension-math/dev/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type {KatexOptions} from 'katex' - -export {mathHtml} from './lib/html.js' -export {math} from './lib/syntax.js' - -/** - * Configuration for HTML output. - * - * > 👉 **Note**: passed to `katex.renderToString`. - * > `displayMode` is overwritten by this plugin, to `false` for math in - * > text (inline), and `true` for math in flow (block). - */ -export interface HtmlOptions extends KatexOptions { - /** - * The field `displayMode` cannot be passed to `micromark-extension-math`. - * It is overwritten by it, - * to `false` for math in text (inline) and `true` for math in flow (block). - */ - displayMode?: never -} - -/** - * Configuration. - */ -export interface Options { - /** - * Whether to support math (text) with a single dollar (default: `true`). - * - * Single dollars work in Pandoc and many other places, but often interfere - * with “normal” dollars in text. - * If you turn this off, you can use two or more dollars for text math. - */ - singleDollarTextMath?: boolean | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - mathFlowOpen?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - mathFlow: 'mathFlow' - mathFlowFence: 'mathFlowFence' - mathFlowFenceMeta: 'mathFlowFenceMeta' - mathFlowFenceSequence: 'mathFlowFenceSequence' - mathFlowValue: 'mathFlowValue' - mathText: 'mathText' - mathTextData: 'mathTextData' - mathTextPadding: 'mathTextPadding' - mathTextSequence: 'mathTextSequence' - } -} diff --git a/node_modules/micromark-extension-math/dev/index.js b/node_modules/micromark-extension-math/dev/index.js deleted file mode 100644 index 120c39c7fc..0000000000 --- a/node_modules/micromark-extension-math/dev/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types exported from `index.d.ts`. -export {math} from './lib/syntax.js' -export {mathHtml} from './lib/html.js' diff --git a/node_modules/micromark-extension-math/index.d.ts b/node_modules/micromark-extension-math/index.d.ts deleted file mode 100644 index d09f0e576d..0000000000 --- a/node_modules/micromark-extension-math/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type {KatexOptions} from 'katex' - -export {mathHtml} from './lib/html.js' -export {math} from './lib/syntax.js' - -/** - * Configuration for HTML output. - * - * > 👉 **Note**: passed to `katex.renderToString`. - * > `displayMode` is overwritten by this plugin, to `false` for math in - * > text (inline), and `true` for math in flow (block). - */ -export interface HtmlOptions extends KatexOptions { - /** - * The field `displayMode` cannot be passed to `micromark-extension-math`. - * It is overwritten by it, - * to `false` for math in text (inline) and `true` for math in flow (block). - */ - displayMode?: never -} - -/** - * Configuration. - */ -export interface Options { - /** - * Whether to support math (text) with a single dollar (default: `true`). - * - * Single dollars work in Pandoc and many other places, but often interfere - * with “normal” dollars in text. - * If you turn this off, you can use two or more dollars for text math. - */ - singleDollarTextMath?: boolean | null | undefined -} - -/** - * Augment types. - */ -declare module 'micromark-util-types' { - /** - * Compile data. - */ - interface CompileData { - mathFlowOpen?: boolean - } - - /** - * Token types. - */ - interface TokenTypeMap { - mathFlow: 'mathFlow' - mathFlowFence: 'mathFlowFence' - mathFlowFenceMeta: 'mathFlowFenceMeta' - mathFlowFenceSequence: 'mathFlowFenceSequence' - mathFlowValue: 'mathFlowValue' - mathText: 'mathText' - mathTextData: 'mathTextData' - mathTextPadding: 'mathTextPadding' - mathTextSequence: 'mathTextSequence' - } -} diff --git a/node_modules/micromark-extension-math/index.js b/node_modules/micromark-extension-math/index.js deleted file mode 100644 index 59bed9f691..0000000000 --- a/node_modules/micromark-extension-math/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: types exported from `index.d.ts`. -export { math } from './lib/syntax.js'; -export { mathHtml } from './lib/html.js'; \ No newline at end of file diff --git a/node_modules/micromark-extension-math/license b/node_modules/micromark-extension-math/license deleted file mode 100644 index 39372356c4..0000000000 --- a/node_modules/micromark-extension-math/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2020 Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-extension-math/package.json b/node_modules/micromark-extension-math/package.json deleted file mode 100644 index 1f7c882e2e..0000000000 --- a/node_modules/micromark-extension-math/package.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "name": "micromark-extension-math", - "version": "3.1.0", - "description": "micromark extension to support math (`$C_L$`)", - "license": "MIT", - "keywords": [ - "micromark", - "micromark-extension", - "math", - "katex", - "latex", - "tex", - "markdown", - "unified" - ], - "repository": "micromark/micromark-extension-math", - "bugs": "https://github.com/micromark/micromark-extension-math/issues", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "files": [ - "dev/", - "lib/", - "index.d.ts", - "index.js" - ], - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "c8": "^10.0.0", - "micromark": "^4.0.0", - "micromark-build": "^2.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.58.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage && micromark-build", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api-prod": "node --conditions production test/index.js", - "test-api-dev": "node --conditions development test/index.js", - "test-api": "npm run test-api-dev && npm run test-api-prod", - "test-coverage": "c8 --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "bracketSpacing": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "ignoreCatch": true, - "strict": true - }, - "xo": { - "overrides": [ - { - "files": [ - "**/*.d.ts" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": true - } - ], - "@typescript-eslint/consistent-type-definitions": [ - "error", - "interface" - ] - } - } - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-at": "off" - } - } -} diff --git a/node_modules/micromark-extension-math/readme.md b/node_modules/micromark-extension-math/readme.md deleted file mode 100644 index 6b57c2ab8c..0000000000 --- a/node_modules/micromark-extension-math/readme.md +++ /dev/null @@ -1,429 +0,0 @@ -# micromark-extension-math - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] -[![Sponsors][sponsors-badge]][collective] -[![Backers][backers-badge]][collective] -[![Chat][chat-badge]][chat] - -[micromark][] extensions to support math (`$C_L$`). - -## Contents - -* [What is this?](#what-is-this) -* [When to use this](#when-to-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`math(options?)`](#mathoptions) - * [`mathHtml(options?)`](#mathhtmloptions) - * [`HtmlOptions`](#htmloptions) - * [`Options`](#options) -* [Authoring](#authoring) -* [HTML](#html) -* [CSS](#css) -* [Syntax](#syntax) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package contains two extensions that add support for math syntax -in markdown to [`micromark`][micromark]. - -As there is no spec for math in markdown, this extension follows how code -(fenced and text) works in Commonmark, but uses dollars. - -## When to use this - -This project is useful when you want to support math in markdown. -Extending markdown with a syntax extension makes the markdown less portable. -LaTeX equations are also quite hard. -But this mechanism works well when you want authors, that have some LaTeX -experience, to be able to embed rich diagrams of math in scientific text. - -You can use these extensions when you are working with [`micromark`][micromark] -already. - -When you need a syntax tree, you can combine this package with -[`mdast-util-math`][mdast-util-math]. - -All these packages are used [`remark-math`][remark-math], which focusses on -making it easier to transform content by abstracting these internals away. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -[npm][]: - -```sh -npm install micromark-extension-math -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {math, mathHtml} from 'https://esm.sh/micromark-extension-math@3' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -Say our document `example.md` contains: - -```markdown -Lift($L$) can be determined by Lift Coefficient ($C_L$) like the following equation. - -$$ -L = \frac{1}{2} \rho v^2 S C_L -$$ -``` - -…and our module `example.js` looks as follows: - -```js -import fs from 'node:fs/promises' -import {micromark} from 'micromark' -import {math, mathHtml} from 'micromark-extension-math' - -const output = micromark(await fs.readFile('example.md'), { - extensions: [math()], - htmlExtensions: [mathHtml()] -}) - -console.log(output) -``` - -…now running `node example.js` yields (abbreviated): - -```html -

                  Lift() can be determined by Lift Coefficient () like the following equation.

                  -
                  -``` - -## API - -This package exports the identifiers [`math`][api-math] and -[`mathHtml`][api-math-html]. -There is no default export. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. - -### `math(options?)` - -Create an extension for `micromark` to enable math syntax. - -###### Parameters - -* `options` ([`Options`][api-options], default: `{}`) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `extensions`, to enable math -syntax ([`Extension`][micromark-extension]). - -### `mathHtml(options?)` - -Create an extension for `micromark` to support math when serializing to HTML. - -> 👉 **Note**: this uses KaTeX to render math. - -###### Parameters - -* `options` ([`HtmlOptions`][api-html-options], default: `{}`) - — configuration - -###### Returns - -Extension for `micromark` that can be passed in `htmlExtensions`, to support -math when serializing to HTML ([`HtmlExtension`][micromark-html-extension]). - -### `HtmlOptions` - -Configuration for HTML output (optional). - -> 👉 **Note**: passed to [`katex.renderToString`][katex-options]. -> `displayMode` is overwritten by this plugin, to `false` for math in text -> (inline), and `true` for math in flow (block). - -###### Type - -```ts -type Options = Omit -``` - -### `Options` - -Configuration (TypeScript type). - -###### Fields - -* `singleDollarTextMath` (`boolean`, default: `true`) - — whether to support math (text, inline) with a single dollar. - Single dollars work in Pandoc and many other places, but often interfere - with “normal” dollars in text. - If you turn this off, you use two or more dollars for text math. - -## Authoring - -When authoring markdown with math, keep in mind that math doesn’t work in most -places. -Notably, GitHub currently has a really weird crappy client-side regex-based -thing. -But on your own (math-heavy?) site it can be great! -You can use code (fenced) with an info string of `math` to improve this, as -that works in many places. - -## HTML - -Math (flow) does not relate to HTML elements. -`MathML`, which is sort of like SVG but for math, exists but it doesn’t work -well and isn’t widely supported. -Instead, this uses [KaTeX][], which generates MathML as a fallback but also -generates a bunch of divs and spans so math look pretty. -The KaTeX result is wrapped in `
                  ` (for flow, block) and `` (for text, -inline) elements, with two classes: `math` and either `math-display` or -`math-inline`. - -When turning markdown into HTML, each line ending in math (text) is turned -into a space. - -## CSS - -The HTML produced by KaTeX requires CSS to render correctly. -You should use `katex.css` somewhere on the page where the math is shown to -style it properly. -At the time of writing, the last version is: - - - -```html - -``` - -## Syntax - -Math forms with the following BNF: - -```bnf -; Restriction: the number of markers in the closing sequence must be equal -; to the number of markers in the opening sequence. -math_text ::= sequence_text 1*byte sequence_text -math_flow ::= fence_open *( eol *line ) [ eol fence_close ] - -; Restriction: not preceded or followed by the marker. -sequence_text ::= 1*'$' - -fence_open ::= sequence_flow meta -; Restriction: the number of markers in the closing fence sequence must be -; equal to or greater than the number of markers in the opening fence -; sequence. -fence_close ::= sequence_flow *space_or_tab -sequence_flow ::= 2*'$' -; Restriction: the marker cannot occur in `meta` -meta ::= 1*line - -; Character groups for informational purposes. -byte ::= 0x00..=0xFFFF -eol ::= '\n' | '\r' | '\r\n' -line ::= byte - eol -``` - -The above grammar shows that it is not possible to create empty math (text). -It is possible to include the sequence marker (dollar) in math (text), by -wrapping it in bigger or smaller sequences: - -```markdown -Include more: $a$$b$ or include less: $$a$b$$. -``` - -It is also possible to include just one marker: - -```markdown -Include just one: $$ $ $$. -``` - -Sequences are “gready”, in that they cannot be preceded or followed by more -markers. -To illustrate: - -```markdown -Not math: $$x$. - -Not math: $x$$. - -Escapes work, this is math: \$$x$. - -Escapes work, this is math: $x$\$. -``` - -Yields: - -```html -

                  Not math: $$x$.

                  -

                  Not math: $x$$.

                  -

                  Escapes work, this is math: $.

                  -

                  Escapes work, this is math: $.

                  -``` - -That is because, when turning markdown into HTML, the first and last space, -if both exist and there is also a non-space in the math, are removed. -Line endings, at that stage, are considered as spaces. - -As the math (flow) construct occurs in flow, like all flow constructs, it must -be followed by an eol (line ending) or eof (end of file). - -The above grammar does not show how indentation of each line is handled. -To parse math (flow), let `x` be the number of `space_or_tab` characters -before the opening fence sequence, after interpreting tabs based on how many -virtual spaces they represent. -Each line of text is then allowed (not required) to be indented with up -to `x` spaces or tabs, which are then ignored as an indent instead of being -considered as part of the content. -This indent does not affect the closing fence. -It can be indented up to a separate 3 real or virtual spaces. -A bigger indent makes it part of the content instead of a fence. - -The `meta` part is interpreted as the [string][micromark-content-types] content -type. -That means that character escapes and character references are allowed. - -The optional `meta` part is ignored: it is not used when parsing or -rendering. - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types [`HtmlOptions`][api-html-options] -and [`Options`][api-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-extension-math@^3`, compatible with Node.js 16. - -This package works with `micromark` version `3` and later. - -## Security - -This package is safe assuming that you trust KaTeX. -Any vulnerability in it could open you to a [cross-site scripting (XSS)][xss] -attack. - -## Related - -* [`remark-math`][remark-math] - — remark (and rehype) plugins to support math -* [`mdast-util-math`][mdast-util-math] - — mdast utility to support math - -## Contribute - -See [`contributing.md` in `micromark/.github`][contributing] for ways to get -started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organization, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark-extension-math/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark-extension-math/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark-extension-math.svg - -[coverage]: https://codecov.io/github/micromark/micromark-extension-math - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-extension-math.svg - -[downloads]: https://www.npmjs.com/package/micromark-extension-math - -[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-extension-math - -[size]: https://bundlejs.com/?q=micromark-extension-math - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[collective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[micromark]: https://github.com/micromark/micromark - -[micromark-content-types]: https://github.com/micromark/micromark#content-types - -[micromark-html-extension]: https://github.com/micromark/micromark#htmlextension - -[micromark-extension]: https://github.com/micromark/micromark#syntaxextension - -[mdast-util-math]: https://github.com/syntax-tree/mdast-util-math - -[remark-math]: https://github.com/remarkjs/remark-math - -[katex]: https://katex.org - -[katex-options]: https://katex.org/docs/options.html - -[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting - -[api-math]: #mathoptions - -[api-math-html]: #mathhtmloptions - -[api-options]: #options - -[api-html-options]: #htmloptions diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts b/node_modules/micromark-factory-destination/dev/index.d.ts deleted file mode 100644 index 1d5e02a5d8..0000000000 --- a/node_modules/micromark-factory-destination/dev/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.d.ts.map b/node_modules/micromark-factory-destination/dev/index.d.ts.map deleted file mode 100644 index 84746ee217..0000000000 --- a/node_modules/micromark-factory-destination/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/dev/index.js b/node_modules/micromark-factory-destination/dev/index.js deleted file mode 100644 index a4816fdc0d..0000000000 --- a/node_modules/micromark-factory-destination/dev/index.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import { - asciiControl, - markdownLineEndingOrSpace, - markdownLineEnding -} from 'micromark-util-character' -import {codes, constants, types} from 'micromark-util-symbol' - -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination( - effects, - ok, - nok, - type, - literalType, - literalMarkerType, - rawType, - stringType, - max -) { - const limit = max || Number.POSITIVE_INFINITY - let balance = 0 - - return start - - /** - * Start of destination. - * - * ```markdown - * > | - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === codes.lessThan) { - effects.enter(type) - effects.enter(literalType) - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - return enclosedBefore - } - - // ASCII control, space, closing paren. - if ( - code === codes.eof || - code === codes.space || - code === codes.rightParenthesis || - asciiControl(code) - ) { - return nok(code) - } - - effects.enter(type) - effects.enter(rawType) - effects.enter(stringType) - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return raw(code) - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === codes.greaterThan) { - effects.enter(literalMarkerType) - effects.consume(code) - effects.exit(literalMarkerType) - effects.exit(literalType) - effects.exit(type) - return ok - } - - effects.enter(stringType) - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return enclosed(code) - } - - /** - * In enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === codes.greaterThan) { - effects.exit(types.chunkString) - effects.exit(stringType) - return enclosedBefore(code) - } - - if ( - code === codes.eof || - code === codes.lessThan || - markdownLineEnding(code) - ) { - return nok(code) - } - - effects.consume(code) - return code === codes.backslash ? enclosedEscape : enclosed - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if ( - code === codes.lessThan || - code === codes.greaterThan || - code === codes.backslash - ) { - effects.consume(code) - return enclosed - } - - return enclosed(code) - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if ( - !balance && - (code === codes.eof || - code === codes.rightParenthesis || - markdownLineEndingOrSpace(code)) - ) { - effects.exit(types.chunkString) - effects.exit(stringType) - effects.exit(rawType) - effects.exit(type) - return ok(code) - } - - if (balance < limit && code === codes.leftParenthesis) { - effects.consume(code) - balance++ - return raw - } - - if (code === codes.rightParenthesis) { - effects.consume(code) - balance-- - return raw - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if ( - code === codes.eof || - code === codes.space || - code === codes.leftParenthesis || - asciiControl(code) - ) { - return nok(code) - } - - effects.consume(code) - return code === codes.backslash ? rawEscape : raw - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if ( - code === codes.leftParenthesis || - code === codes.rightParenthesis || - code === codes.backslash - ) { - effects.consume(code) - return raw - } - - return raw(code) - } -} diff --git a/node_modules/micromark-factory-destination/index.d.ts b/node_modules/micromark-factory-destination/index.d.ts deleted file mode 100644 index 1d5e02a5d8..0000000000 --- a/node_modules/micromark-factory-destination/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination(effects: Effects, ok: State, nok: State, type: TokenType, literalType: TokenType, literalMarkerType: TokenType, rawType: TokenType, stringType: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.d.ts.map b/node_modules/micromark-factory-destination/index.d.ts.map deleted file mode 100644 index 84746ee217..0000000000 --- a/node_modules/micromark-factory-destination/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,4CArBW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,eAET,SAAS,qBAET,SAAS,WAET,SAAS,cAET,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CAiNjB;6BA7P2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/index.js b/node_modules/micromark-factory-destination/index.js deleted file mode 100644 index eeb60de6d7..0000000000 --- a/node_modules/micromark-factory-destination/index.js +++ /dev/null @@ -1,206 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character'; -/** - * Parse destinations. - * - * ###### Examples - * - * ```markdown - * - * b> - * - * - * a - * a\)b - * a(b)c - * a(b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type for whole (`` or `b`). - * @param {TokenType} literalType - * Type when enclosed (``). - * @param {TokenType} literalMarkerType - * Type for enclosing (`<` and `>`). - * @param {TokenType} rawType - * Type when not enclosed (`b`). - * @param {TokenType} stringType - * Type for the value (`a` or `b`). - * @param {number | undefined} [max=Infinity] - * Depth of nested parens (inclusive). - * @returns {State} - * Start state. - */ -export function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) { - const limit = max || Number.POSITIVE_INFINITY; - let balance = 0; - return start; - - /** - * Start of destination. - * - * ```markdown - * > | - * ^ - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 60) { - effects.enter(type); - effects.enter(literalType); - effects.enter(literalMarkerType); - effects.consume(code); - effects.exit(literalMarkerType); - return enclosedBefore; - } - - // ASCII control, space, closing paren. - if (code === null || code === 32 || code === 41 || asciiControl(code)) { - return nok(code); - } - effects.enter(type); - effects.enter(rawType); - effects.enter(stringType); - effects.enter("chunkString", { - contentType: "string" - }); - return raw(code); - } - - /** - * After `<`, at an enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedBefore(code) { - if (code === 62) { - effects.enter(literalMarkerType); - effects.consume(code); - effects.exit(literalMarkerType); - effects.exit(literalType); - effects.exit(type); - return ok; - } - effects.enter(stringType); - effects.enter("chunkString", { - contentType: "string" - }); - return enclosed(code); - } - - /** - * In enclosed destination. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosed(code) { - if (code === 62) { - effects.exit("chunkString"); - effects.exit(stringType); - return enclosedBefore(code); - } - if (code === null || code === 60 || markdownLineEnding(code)) { - return nok(code); - } - effects.consume(code); - return code === 92 ? enclosedEscape : enclosed; - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | - * ^ - * ``` - * - * @type {State} - */ - function enclosedEscape(code) { - if (code === 60 || code === 62 || code === 92) { - effects.consume(code); - return enclosed; - } - return enclosed(code); - } - - /** - * In raw destination. - * - * ```markdown - * > | aa - * ^ - * ``` - * - * @type {State} - */ - function raw(code) { - if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) { - effects.exit("chunkString"); - effects.exit(stringType); - effects.exit(rawType); - effects.exit(type); - return ok(code); - } - if (balance < limit && code === 40) { - effects.consume(code); - balance++; - return raw; - } - if (code === 41) { - effects.consume(code); - balance--; - return raw; - } - - // ASCII control (but *not* `\0`) and space and `(`. - // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it - // doesn’t. - if (code === null || code === 32 || code === 40 || asciiControl(code)) { - return nok(code); - } - effects.consume(code); - return code === 92 ? rawEscape : raw; - } - - /** - * After `\`, at special character. - * - * ```markdown - * > | a\*a - * ^ - * ``` - * - * @type {State} - */ - function rawEscape(code) { - if (code === 40 || code === 41 || code === 92) { - effects.consume(code); - return raw; - } - return raw(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-destination/license b/node_modules/micromark-factory-destination/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-destination/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-destination/package.json b/node_modules/micromark-factory-destination/package.json deleted file mode 100644 index 0863cb696d..0000000000 --- a/node_modules/micromark-factory-destination/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-factory-destination", - "version": "2.0.1", - "description": "micromark factory to parse destinations (found in resources, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "destination" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-destination", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "max-params": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-destination/readme.md b/node_modules/micromark-factory-destination/readme.md deleted file mode 100644 index f4899d74da..0000000000 --- a/node_modules/micromark-factory-destination/readme.md +++ /dev/null @@ -1,234 +0,0 @@ -# micromark-factory-destination - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse destinations (found in resources, definitions). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryDestination(…)`](#factorydestination) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse destinations. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-destination -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factoryDestination} from 'https://esm.sh/micromark-factory-destination@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factoryDestination} from 'micromark-factory-destination' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeResource(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function open(code) { - if (code === codes.rightParenthesis) { - return end(code) - } - - return factoryDestination( - effects, - destinationAfter, - nok, - types.resourceDestination, - types.resourceDestinationLiteral, - types.resourceDestinationLiteralMarker, - types.resourceDestinationRaw, - types.resourceDestinationString, - constants.linkResourceDestinationBalanceMax - )(code) - } - - // … -} -``` - -## API - -This module exports the identifier -[`factoryDestination`][api-factory-destination]. -There is no default export. - -### `factoryDestination(…)` - -Parse destinations. - -###### Examples - -```markdown - -b> - - -a -a\)b -a(b)c -a(b) -``` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `nok` (`State`) - — state switched to when unsuccessful -* `type` (`string`) - — type for whole (`` or `b`) -* `literalType` (`string`) - — type when enclosed (``) -* `literalMarkerType` (`string`) - — type for enclosing (`<` and `>`) -* `rawType` (`string`) - — type when not enclosed (`b`) -* `stringType` (`string`) - — type for the value (`a` or `b`) -* `max` (`number`, default: `Infinity`) - — depth of nested parens (inclusive) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-destination@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-destination.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-destination - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-destination - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-destination - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-destination]: #factorydestination diff --git a/node_modules/micromark-factory-label/dev/index.d.ts b/node_modules/micromark-factory-label/dev/index.d.ts deleted file mode 100644 index 99f5bdad42..0000000000 --- a/node_modules/micromark-factory-label/dev/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -import type { TokenizeContext } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.d.ts.map b/node_modules/micromark-factory-label/dev/index.d.ts.map deleted file mode 100644 index fe94eeea2d..0000000000 --- a/node_modules/micromark-factory-label/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/dev/index.js b/node_modules/micromark-factory-label/dev/index.js deleted file mode 100644 index 242f0ced9c..0000000000 --- a/node_modules/micromark-factory-label/dev/index.js +++ /dev/null @@ -1,172 +0,0 @@ -/** - * @import { - * Effects, - * State, - * TokenizeContext, - * TokenType - * } from 'micromark-util-types' - */ - -import {ok as assert} from 'devlop' -import {markdownLineEnding, markdownSpace} from 'micromark-util-character' -import {codes, constants, types} from 'micromark-util-symbol' - -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this - let size = 0 - /** @type {boolean} */ - let seen - - return start - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - assert(code === codes.leftSquareBracket, 'expected `[`') - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.enter(stringType) - return atBreak - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if ( - size > constants.linkReferenceSizeMax || - code === codes.eof || - code === codes.leftSquareBracket || - (code === codes.rightSquareBracket && !seen) || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - (code === codes.caret && - !size && - '_hiddenFootnoteSupport' in self.parser.constructs) - ) { - return nok(code) - } - - if (code === codes.rightSquareBracket) { - effects.exit(stringType) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter(types.lineEnding) - effects.consume(code) - effects.exit(types.lineEnding) - return atBreak - } - - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return labelInside(code) - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if ( - code === codes.eof || - code === codes.leftSquareBracket || - code === codes.rightSquareBracket || - markdownLineEnding(code) || - size++ > constants.linkReferenceSizeMax - ) { - effects.exit(types.chunkString) - return atBreak(code) - } - - effects.consume(code) - if (!seen) seen = !markdownSpace(code) - return code === codes.backslash ? labelEscape : labelInside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if ( - code === codes.leftSquareBracket || - code === codes.backslash || - code === codes.rightSquareBracket - ) { - effects.consume(code) - size++ - return labelInside - } - - return labelInside(code) - } -} diff --git a/node_modules/micromark-factory-label/index.d.ts b/node_modules/micromark-factory-label/index.d.ts deleted file mode 100644 index 99f5bdad42..0000000000 --- a/node_modules/micromark-factory-label/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(this: TokenizeContext, effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -import type { TokenizeContext } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.d.ts.map b/node_modules/micromark-factory-label/index.d.ts.map deleted file mode 100644 index fe94eeea2d..0000000000 --- a/node_modules/micromark-factory-label/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,6DAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CAkIjB;6BArKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/index.js b/node_modules/micromark-factory-label/index.js deleted file mode 100644 index 269340bb85..0000000000 --- a/node_modules/micromark-factory-label/index.js +++ /dev/null @@ -1,148 +0,0 @@ -/** - * @import { - * Effects, - * State, - * TokenizeContext, - * TokenType - * } from 'micromark-util-types' - */ - -import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; -/** - * Parse labels. - * - * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. - * - * ###### Examples - * - * ```markdown - * [a] - * [a - * b] - * [a\]b] - * ``` - * - * @this {TokenizeContext} - * Tokenize context. - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole label (`[a]`). - * @param {TokenType} markerType - * Type for the markers (`[` and `]`). - * @param {TokenType} stringType - * Type for the identifier (`a`). - * @returns {State} - * Start state. - */ -export function factoryLabel(effects, ok, nok, type, markerType, stringType) { - const self = this; - let size = 0; - /** @type {boolean} */ - let seen; - return start; - - /** - * Start of label. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - effects.enter(type); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.enter(stringType); - return atBreak; - } - - /** - * In label, at something, before something else. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (size > 999 || code === null || code === 91 || code === 93 && !seen || - // To do: remove in the future once we’ve switched from - // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, - // which doesn’t need this. - // Hidden footnotes hook. - /* c8 ignore next 3 */ - code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) { - return nok(code); - } - if (code === 93) { - effects.exit(stringType); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.exit(type); - return ok; - } - - // To do: indent? Link chunks and EOLs together? - if (markdownLineEnding(code)) { - effects.enter("lineEnding"); - effects.consume(code); - effects.exit("lineEnding"); - return atBreak; - } - effects.enter("chunkString", { - contentType: "string" - }); - return labelInside(code); - } - - /** - * In label, in text. - * - * ```markdown - * > | [a] - * ^ - * ``` - * - * @type {State} - */ - function labelInside(code) { - if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) { - effects.exit("chunkString"); - return atBreak(code); - } - effects.consume(code); - if (!seen) seen = !markdownSpace(code); - return code === 92 ? labelEscape : labelInside; - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | [a\*a] - * ^ - * ``` - * - * @type {State} - */ - function labelEscape(code) { - if (code === 91 || code === 92 || code === 93) { - effects.consume(code); - size++; - return labelInside; - } - return labelInside(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-label/license b/node_modules/micromark-factory-label/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-label/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-label/package.json b/node_modules/micromark-factory-label/package.json deleted file mode 100644 index db6dca2650..0000000000 --- a/node_modules/micromark-factory-label/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "micromark-factory-label", - "version": "2.0.1", - "description": "micromark factory to parse labels (found in media, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "label" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-label", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "logical-assignment-operators": "off", - "max-params": "off", - "unicorn/no-this-assignment": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-label/readme.md b/node_modules/micromark-factory-label/readme.md deleted file mode 100644 index f4b4eab835..0000000000 --- a/node_modules/micromark-factory-label/readme.md +++ /dev/null @@ -1,224 +0,0 @@ -# micromark-factory-label - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse labels (found in media, definitions). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryLabel(…)`](#factorylabel) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse labels. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-label -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factoryLabel} from 'https://esm.sh/micromark-factory-label@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {ok as assert} from 'devlop' -import {factoryLabel} from 'micromark-factory-label' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function start(code) { - assert(code === codes.leftSquareBracket, 'expected `[`') - effects.enter(types.definition) - return factoryLabel.call( - self, - effects, - labelAfter, - nok, - types.definitionLabel, - types.definitionLabelMarker, - types.definitionLabelString - )(code) - } - - // … -} -``` - -## API - -This module exports the identifier [`factoryLabel`][api-factory-label]. -There is no default export. - -### `factoryLabel(…)` - -Parse labels. - -> 👉 **Note**: labels in markdown are capped at 999 characters in the string. - -###### Examples - -```markdown -[a] -[a -b] -[a\]b] -``` - -###### Parameters - -* `this` (`TokenizeContext`) - — tokenize context -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `nok` (`State`) - — state switched to when unsuccessful -* `type` (`string`) - — type of the whole label (`[a]`) -* `markerType` (`string`) - — type for the markers (`[` and `]`) -* `stringType` (`string`) - — type for the identifier (`a`) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-label@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-label.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-label - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-label - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-label - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-label]: #factorylabel diff --git a/node_modules/micromark-factory-space/dev/index.d.ts b/node_modules/micromark-factory-space/dev/index.d.ts deleted file mode 100644 index d9a30cab17..0000000000 --- a/node_modules/micromark-factory-space/dev/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.d.ts.map b/node_modules/micromark-factory-space/dev/index.d.ts.map deleted file mode 100644 index 42d1279235..0000000000 --- a/node_modules/micromark-factory-space/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/dev/index.js b/node_modules/micromark-factory-space/dev/index.js deleted file mode 100644 index 5cead758c1..0000000000 --- a/node_modules/micromark-factory-space/dev/index.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import {markdownSpace} from 'micromark-util-character' - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY - let size = 0 - - return start - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type) - return prefix(code) - } - - return ok(code) - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code) - return prefix - } - - effects.exit(type) - return ok(code) - } -} diff --git a/node_modules/micromark-factory-space/index.d.ts b/node_modules/micromark-factory-space/index.d.ts deleted file mode 100644 index d9a30cab17..0000000000 --- a/node_modules/micromark-factory-space/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects: Effects, ok: State, type: TokenType, max?: number | undefined): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.d.ts.map b/node_modules/micromark-factory-space/index.d.ts.map deleted file mode 100644 index 42d1279235..0000000000 --- a/node_modules/micromark-factory-space/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,sCAXW,OAAO,MAEP,KAAK,QAEL,SAAS,QAET,MAAM,GAAG,SAAS,GAEhB,KAAK,CA6BjB;6BAjE2C,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/index.js b/node_modules/micromark-factory-space/index.js deleted file mode 100644 index 646117df2d..0000000000 --- a/node_modules/micromark-factory-space/index.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @import {Effects, State, TokenType} from 'micromark-util-types' - */ - -import { markdownSpace } from 'micromark-util-character'; - -// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * spaces in markdown are often optional, in which case this factory can be - * used and `ok` will be switched to whether spaces were found or not - * * one line ending or space can be detected with `markdownSpace(code)` right - * before using `factorySpace` - * - * ###### Examples - * - * Where `␉` represents a tab (plus how much it expands) and `␠` represents a - * single space. - * - * ```markdown - * ␉ - * ␠␠␠␠ - * ␉␠ - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {TokenType} type - * Type (`' \t'`). - * @param {number | undefined} [max=Infinity] - * Max (exclusive). - * @returns {State} - * Start state. - */ -export function factorySpace(effects, ok, type, max) { - const limit = max ? max - 1 : Number.POSITIVE_INFINITY; - let size = 0; - return start; - - /** @type {State} */ - function start(code) { - if (markdownSpace(code)) { - effects.enter(type); - return prefix(code); - } - return ok(code); - } - - /** @type {State} */ - function prefix(code) { - if (markdownSpace(code) && size++ < limit) { - effects.consume(code); - return prefix; - } - effects.exit(type); - return ok(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-space/license b/node_modules/micromark-factory-space/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-space/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-space/package.json b/node_modules/micromark-factory-space/package.json deleted file mode 100644 index 45828c493e..0000000000 --- a/node_modules/micromark-factory-space/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "micromark-factory-space", - "version": "2.0.1", - "description": "micromark factory to parse markdown space (found in lots of places)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "space" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-space", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-space/readme.md b/node_modules/micromark-factory-space/readme.md deleted file mode 100644 index b9c01776d8..0000000000 --- a/node_modules/micromark-factory-space/readme.md +++ /dev/null @@ -1,225 +0,0 @@ -# micromark-factory-space - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse [markdown space][markdown-space] (found in lots -of places). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factorySpace(…)`](#factoryspace) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse spaces and/or tabs. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-space -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factorySpace} from 'https://esm.sh/micromark-factory-space@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factorySpace} from 'micromark-factory-space' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeCodeFenced(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function info(code) { - if (code === codes.eof || markdownLineEndingOrSpace(code)) { - effects.exit(types.chunkString) - effects.exit(types.codeFencedFenceInfo) - return factorySpace(effects, infoAfter, types.whitespace)(code) - } - - if (code === codes.graveAccent && code === marker) return nok(code) - effects.consume(code) - return info - } - - // … -} -``` - -## API - -This module exports the identifier [`factorySpace`][api-factory-space]. -There is no default export. - -### `factorySpace(…)` - -Parse spaces and tabs. - -There is no `nok` parameter: - -* spaces in markdown are often optional, in which case this factory can be - used and `ok` will be switched to whether spaces were found or not -* one line ending or space can be detected with `markdownSpace(code)` right - before using `factorySpace` - -###### Examples - -Where `␉` represents a tab (plus how much it expands) and `␠` represents a -single space. - -```markdown -␉ -␠␠␠␠ -␉␠ -``` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `type` (`string`) - — type (`' \t'`) -* `max` (`number`, default: `Infinity`) - — max (exclusive) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-space@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-space.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-space - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-space - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-space - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[markdown-space]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownspacecode - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-space]: #factoryspace diff --git a/node_modules/micromark-factory-title/dev/index.d.ts b/node_modules/micromark-factory-title/dev/index.d.ts deleted file mode 100644 index 6d4b4be203..0000000000 --- a/node_modules/micromark-factory-title/dev/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.d.ts.map b/node_modules/micromark-factory-title/dev/index.d.ts.map deleted file mode 100644 index 0108e7c976..0000000000 --- a/node_modules/micromark-factory-title/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/dev/index.js b/node_modules/micromark-factory-title/dev/index.js deleted file mode 100644 index 4774214cbb..0000000000 --- a/node_modules/micromark-factory-title/dev/index.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * @import { - * Code, - * Effects, - * State, - * TokenType - * } from 'micromark-util-types' - */ - -import {factorySpace} from 'micromark-factory-space' -import {markdownLineEnding} from 'micromark-util-character' -import {codes, constants, types} from 'micromark-util-symbol' - -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable} */ - let marker - - return start - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if ( - code === codes.quotationMark || - code === codes.apostrophe || - code === codes.leftParenthesis - ) { - effects.enter(type) - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - marker = code === codes.leftParenthesis ? codes.rightParenthesis : code - return begin - } - - return nok(code) - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType) - effects.consume(code) - effects.exit(markerType) - effects.exit(type) - return ok - } - - effects.enter(stringType) - return atBreak(code) - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType) - return begin(marker) - } - - if (code === codes.eof) { - return nok(code) - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter(types.lineEnding) - effects.consume(code) - effects.exit(types.lineEnding) - return factorySpace(effects, atBreak, types.linePrefix) - } - - effects.enter(types.chunkString, {contentType: constants.contentTypeString}) - return inside(code) - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === codes.eof || markdownLineEnding(code)) { - effects.exit(types.chunkString) - return atBreak(code) - } - - effects.consume(code) - return code === codes.backslash ? escape : inside - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === codes.backslash) { - effects.consume(code) - return inside - } - - return inside(code) - } -} diff --git a/node_modules/micromark-factory-title/index.d.ts b/node_modules/micromark-factory-title/index.d.ts deleted file mode 100644 index 6d4b4be203..0000000000 --- a/node_modules/micromark-factory-title/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects: Effects, ok: State, nok: State, type: TokenType, markerType: TokenType, stringType: TokenType): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -import type { TokenType } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.d.ts.map b/node_modules/micromark-factory-title/index.d.ts.map deleted file mode 100644 index 0108e7c976..0000000000 --- a/node_modules/micromark-factory-title/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,sCAfW,OAAO,MAEP,KAAK,OAEL,KAAK,QAEL,SAAS,cAET,SAAS,cAET,SAAS,GAEP,KAAK,CA+HjB;6BAlKS,sBAAsB;2BAAtB,sBAAsB;+BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/index.js b/node_modules/micromark-factory-title/index.js deleted file mode 100644 index 02c8026c1e..0000000000 --- a/node_modules/micromark-factory-title/index.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * @import { - * Code, - * Effects, - * State, - * TokenType - * } from 'micromark-util-types' - */ - -import { factorySpace } from 'micromark-factory-space'; -import { markdownLineEnding } from 'micromark-util-character'; -/** - * Parse titles. - * - * ###### Examples - * - * ```markdown - * "a" - * 'b' - * (c) - * "a - * b" - * 'a - * b' - * (a\)b) - * ``` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @param {State} nok - * State switched to when unsuccessful. - * @param {TokenType} type - * Type of the whole title (`"a"`, `'b'`, `(c)`). - * @param {TokenType} markerType - * Type for the markers (`"`, `'`, `(`, and `)`). - * @param {TokenType} stringType - * Type for the value (`a`). - * @returns {State} - * Start state. - */ -export function factoryTitle(effects, ok, nok, type, markerType, stringType) { - /** @type {NonNullable} */ - let marker; - return start; - - /** - * Start of title. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function start(code) { - if (code === 34 || code === 39 || code === 40) { - effects.enter(type); - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - marker = code === 40 ? 41 : code; - return begin; - } - return nok(code); - } - - /** - * After opening marker. - * - * This is also used at the closing marker. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function begin(code) { - if (code === marker) { - effects.enter(markerType); - effects.consume(code); - effects.exit(markerType); - effects.exit(type); - return ok; - } - effects.enter(stringType); - return atBreak(code); - } - - /** - * At something, before something else. - * - * ```markdown - * > | "a" - * ^ - * ``` - * - * @type {State} - */ - function atBreak(code) { - if (code === marker) { - effects.exit(stringType); - return begin(marker); - } - if (code === null) { - return nok(code); - } - - // Note: blank lines can’t exist in content. - if (markdownLineEnding(code)) { - // To do: use `space_or_tab_eol_with_options`, connect. - effects.enter("lineEnding"); - effects.consume(code); - effects.exit("lineEnding"); - return factorySpace(effects, atBreak, "linePrefix"); - } - effects.enter("chunkString", { - contentType: "string" - }); - return inside(code); - } - - /** - * - * - * @type {State} - */ - function inside(code) { - if (code === marker || code === null || markdownLineEnding(code)) { - effects.exit("chunkString"); - return atBreak(code); - } - effects.consume(code); - return code === 92 ? escape : inside; - } - - /** - * After `\`, at a special character. - * - * ```markdown - * > | "a\*b" - * ^ - * ``` - * - * @type {State} - */ - function escape(code) { - if (code === marker || code === 92) { - effects.consume(code); - return inside; - } - return inside(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-title/license b/node_modules/micromark-factory-title/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-title/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-title/package.json b/node_modules/micromark-factory-title/package.json deleted file mode 100644 index f643a5dea3..0000000000 --- a/node_modules/micromark-factory-title/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "micromark-factory-title", - "version": "2.0.1", - "description": "micromark factory to parse markdown titles (found in resources, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "title" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-title", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "max-params": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-title/readme.md b/node_modules/micromark-factory-title/readme.md deleted file mode 100644 index ff51cbdebe..0000000000 --- a/node_modules/micromark-factory-title/readme.md +++ /dev/null @@ -1,229 +0,0 @@ -# micromark-factory-title - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse markdown titles (found in resources, -definitions). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryTitle(…)`](#factorytitle) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse titles. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-title -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factorySpace} from 'https://esm.sh/micromark-factory-title@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factoryTitle} from 'micromark-factory-title' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeDefinition(effects, ok, nok) { - return start - - // … - - /** @type {State} */ - function before(code) { - if ( - code === codes.quotationMark || - code === codes.apostrophe || - code === codes.leftParenthesis - ) { - return factoryTitle( - effects, - factorySpace(effects, after, types.whitespace), - nok, - types.definitionTitle, - types.definitionTitleMarker, - types.definitionTitleString - )(code) - } - - return nok(code) - } - - // … -} -``` - -## API - -This module exports the identifier [`factoryTitle`][api-factory-title]. -There is no default export. - -### `factoryTitle(…)` - -Parse titles. - -###### Examples - -```markdown -"a" -'b' -(c) -"a -b" -'a - b' -(a\)b) -``` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful -* `nok` (`State`) - — state switched to when unsuccessful -* `type` (`string`) - — type of the whole title (`"a"`, `'b'`, `(c)`) -* `markerType` (`string`) - — type for the markers (`"`, `'`, `(`, and `)`) -* `stringType` (`string`) - — type for the value (`a`) - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-title@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-title.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-title - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-title - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-title - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-title]: #factorytitle diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts b/node_modules/micromark-factory-whitespace/dev/index.d.ts deleted file mode 100644 index 52ca4b85bc..0000000000 --- a/node_modules/micromark-factory-whitespace/dev/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects: Effects, ok: State): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.d.ts.map b/node_modules/micromark-factory-whitespace/dev/index.d.ts.map deleted file mode 100644 index 5169dc46ad..0000000000 --- a/node_modules/micromark-factory-whitespace/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/dev/index.js b/node_modules/micromark-factory-whitespace/dev/index.js deleted file mode 100644 index 3aa9e37b2d..0000000000 --- a/node_modules/micromark-factory-whitespace/dev/index.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @import {Effects, State} from 'micromark-util-types' - */ - -import {factorySpace} from 'micromark-factory-space' -import {markdownLineEnding, markdownSpace} from 'micromark-util-character' -import {types} from 'micromark-util-symbol' - -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen - - return start - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter(types.lineEnding) - effects.consume(code) - effects.exit(types.lineEnding) - seen = true - return start - } - - if (markdownSpace(code)) { - return factorySpace( - effects, - start, - seen ? types.linePrefix : types.lineSuffix - )(code) - } - - return ok(code) - } -} diff --git a/node_modules/micromark-factory-whitespace/index.d.ts b/node_modules/micromark-factory-whitespace/index.d.ts deleted file mode 100644 index 52ca4b85bc..0000000000 --- a/node_modules/micromark-factory-whitespace/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects: Effects, ok: State): State; -import type { Effects } from 'micromark-util-types'; -import type { State } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.d.ts.map b/node_modules/micromark-factory-whitespace/index.d.ts.map deleted file mode 100644 index 5169dc46ad..0000000000 --- a/node_modules/micromark-factory-whitespace/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAPW,OAAO,MAEP,KAAK,GAEH,KAAK,CA6BjB;6BAnDgC,sBAAsB;2BAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/index.js b/node_modules/micromark-factory-whitespace/index.js deleted file mode 100644 index 02243add41..0000000000 --- a/node_modules/micromark-factory-whitespace/index.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @import {Effects, State} from 'micromark-util-types' - */ - -import { factorySpace } from 'micromark-factory-space'; -import { markdownLineEnding, markdownSpace } from 'micromark-util-character'; -/** - * Parse spaces and tabs. - * - * There is no `nok` parameter: - * - * * line endings or spaces in markdown are often optional, in which case this - * factory can be used and `ok` will be switched to whether spaces were found - * or not - * * one line ending or space can be detected with - * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` - * - * @param {Effects} effects - * Context. - * @param {State} ok - * State switched to when successful. - * @returns {State} - * Start state. - */ -export function factoryWhitespace(effects, ok) { - /** @type {boolean} */ - let seen; - return start; - - /** @type {State} */ - function start(code) { - if (markdownLineEnding(code)) { - effects.enter("lineEnding"); - effects.consume(code); - effects.exit("lineEnding"); - seen = true; - return start; - } - if (markdownSpace(code)) { - return factorySpace(effects, start, seen ? "linePrefix" : "lineSuffix")(code); - } - return ok(code); - } -} \ No newline at end of file diff --git a/node_modules/micromark-factory-whitespace/license b/node_modules/micromark-factory-whitespace/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-factory-whitespace/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-factory-whitespace/package.json b/node_modules/micromark-factory-whitespace/package.json deleted file mode 100644 index ce733bd06e..0000000000 --- a/node_modules/micromark-factory-whitespace/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-factory-whitespace", - "version": "2.0.1", - "description": "micromark factory to parse markdown whitespace (found in lots of places)", - "license": "MIT", - "keywords": [ - "micromark", - "factory", - "whitespace" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-factory-whitespace", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-factory-whitespace/readme.md b/node_modules/micromark-factory-whitespace/readme.md deleted file mode 100644 index a846406a52..0000000000 --- a/node_modules/micromark-factory-whitespace/readme.md +++ /dev/null @@ -1,205 +0,0 @@ -# micromark-factory-whitespace - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] factory to parse [markdown line endings or spaces][ws] (found in -lots of places). - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`factoryWhitespace(…)`](#factorywhitespace) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes states to parse whitespace. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-factory-whitespace -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {factoryWhitespace} from 'https://esm.sh/micromark-factory-whitespace@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {factoryWhitespace} from 'micromark-factory-whitespace' -import {codes, types} from 'micromark-util-symbol' - -// A micromark tokenizer that uses the factory: -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeTitle(effects, ok, nok) { - return start - - /** @type {State} */ - function start(code) { - return markdownLineEndingOrSpace(code) - ? factoryWhitespace(effects, before)(code) - : nok(code) - } - - // … -} -``` - -## API - -This module exports the identifier -[`factoryWhitespace`][api-factory-whitespace]. -There is no default export. - -### `factoryWhitespace(…)` - -Parse spaces and tabs. - -There is no `nok` parameter: - -* line endings or spaces in markdown are often optional, in which case this - factory can be used and `ok` will be switched to whether spaces were found - or not -* one line ending or space can be detected with - [`markdownLineEndingOrSpace(code)`][ws] right before using - `factoryWhitespace` - -###### Parameters - -* `effects` (`Effects`) - — context -* `ok` (`State`) - — state switched to when successful - -###### Returns - -Start state (`State`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-factory-whitespace@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-factory-whitespace.svg - -[downloads]: https://www.npmjs.com/package/micromark-factory-whitespace - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-factory-whitespace - -[bundle-size]: https://bundlejs.com/?q=micromark-factory-whitespace - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[ws]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-character#markdownlineendingorspacecode - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-factory-whitespace]: #factorywhitespace diff --git a/node_modules/micromark-util-character/dev/index.d.ts b/node_modules/micromark-util-character/dev/index.d.ts deleted file mode 100644 index fe5289573d..0000000000 --- a/node_modules/micromark-util-character/dev/index.d.ts +++ /dev/null @@ -1,195 +0,0 @@ -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code: Code): boolean; -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code: Code): boolean; -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit: (code: Code) => boolean; -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace: (code: Code) => boolean; -import type { Code } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.d.ts.map b/node_modules/micromark-util-character/dev/index.d.ts.map deleted file mode 100644 index 8ded3c1570..0000000000 --- a/node_modules/micromark-util-character/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/dev/index.js b/node_modules/micromark-util-character/dev/index.js deleted file mode 100644 index 123745e860..0000000000 --- a/node_modules/micromark-util-character/dev/index.js +++ /dev/null @@ -1,252 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -import {codes} from 'micromark-util-symbol' - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha = regexCheck(/[A-Za-z]/) - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < codes.space || code === codes.del) - ) -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit = regexCheck(/\d/) - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code) { - return code !== null && code < codes.horizontalTab -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code) { - return code !== null && (code < codes.nul || code === codes.space) -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code) { - return ( - code === codes.horizontalTab || - code === codes.virtualSpace || - code === codes.space - ) -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u) - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace = regexCheck(/\s/) - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * Expression. - * @returns {(code: Code) => boolean} - * Check. - */ -function regexCheck(regex) { - return check - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && code > -1 && regex.test(String.fromCharCode(code)) - } -} diff --git a/node_modules/micromark-util-character/index.d.ts b/node_modules/micromark-util-character/index.d.ts deleted file mode 100644 index fe5289573d..0000000000 --- a/node_modules/micromark-util-character/index.d.ts +++ /dev/null @@ -1,195 +0,0 @@ -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code: Code): boolean; -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code: Code): boolean; -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code: Code): boolean; -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit: (code: Code) => boolean; -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit: (code: Code) => boolean; -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation: (code: Code) => boolean; -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace: (code: Code) => boolean; -import type { Code } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.d.ts.map b/node_modules/micromark-util-character/index.d.ts.map deleted file mode 100644 index 8ded3c1570..0000000000 --- a/node_modules/micromark-util-character/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;GAUG;AACH,mCALW,IAAI,GAEF,OAAO,CASnB;AAkDD;;;;;;;;;;;;;;GAcG;AACH,yCALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;GAQG;AACH,gDALW,IAAI,GAEF,OAAO,CAKnB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCALW,IAAI,GAEF,OAAO,CASnB;AAhLD;;;;;;;;;;;;;;;;GAgBG;AACH,gCAmNoB,IAAI,KAAK,OAAO,CAnNY;AAEhD;;;;;;;;;;;GAWG;AACH,uCAqMoB,IAAI,KAAK,OAAO,CArMqB;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gCA8KoB,IAAI,KAAK,OAAO,CA9KuB;AAqB3D;;;;;;;;;;GAUG;AACH,gCA8IoB,IAAI,KAAK,OAAO,CA9IM;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,mCA0HoB,IAAI,KAAK,OAAO,CA1HiB;AAErD;;;;;;;;;;;;GAYG;AACH,sCA2GoB,IAAI,KAAK,OAAO,CA3GwB;AA2D5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCA6BoB,IAAI,KAAK,OAAO,CA7BwB;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAOoB,IAAI,KAAK,OAAO,CAPa;0BAlO1B,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-character/index.js b/node_modules/micromark-util-character/index.js deleted file mode 100644 index 13698f04f2..0000000000 --- a/node_modules/micromark-util-character/index.js +++ /dev/null @@ -1,246 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -/** - * Check whether the character code represents an ASCII alpha (`a` through `z`, - * case insensitive). - * - * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - * - * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) - * to U+005A (`Z`). - * - * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) - * to U+007A (`z`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlpha = regexCheck(/[A-Za-z]/); - -/** - * Check whether the character code represents an ASCII alphanumeric (`a` - * through `z`, case insensitive, or `0` through `9`). - * - * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha - * (see `asciiAlpha`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/); - -/** - * Check whether the character code represents an ASCII atext. - * - * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in - * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), - * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F - * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E - * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE - * (`{`) to U+007E TILDE (`~`). - * - * See: - * **\[RFC5322]**: - * [Internet Message Format](https://tools.ietf.org/html/rfc5322). - * P. Resnick. - * IETF. - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/); - -/** - * Check whether a character code is an ASCII control character. - * - * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) - * to U+001F (US), or U+007F (DEL). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function asciiControl(code) { - return ( - // Special whitespace codes (which have negative values), C0 and Control - // character DEL - code !== null && (code < 32 || code === 127) - ); -} - -/** - * Check whether the character code represents an ASCII digit (`0` through `9`). - * - * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to - * U+0039 (`9`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiDigit = regexCheck(/\d/); - -/** - * Check whether the character code represents an ASCII hex digit (`a` through - * `f`, case insensitive, or `0` through `9`). - * - * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex - * digit, or an ASCII lower hex digit. - * - * An **ASCII upper hex digit** is a character in the inclusive range U+0041 - * (`A`) to U+0046 (`F`). - * - * An **ASCII lower hex digit** is a character in the inclusive range U+0061 - * (`a`) to U+0066 (`f`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiHexDigit = regexCheck(/[\dA-Fa-f]/); - -/** - * Check whether the character code represents ASCII punctuation. - * - * An **ASCII punctuation** is a character in the inclusive ranges U+0021 - * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT - * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT - * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - * - * @param code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/); - -/** - * Check whether a character code is a markdown line ending. - * - * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN - * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - * - * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE - * RETURN (CR) are replaced by these virtual characters depending on whether - * they occurred together. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEnding(code) { - return code !== null && code < -2; -} - -/** - * Check whether a character code is a markdown line ending (see - * `markdownLineEnding`) or markdown space (see `markdownSpace`). - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownLineEndingOrSpace(code) { - return code !== null && (code < 0 || code === 32); -} - -/** - * Check whether a character code is a markdown space. - * - * A **markdown space** is the concrete character U+0020 SPACE (SP) and the - * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - * - * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is - * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL - * SPACE (VS) characters, depending on the column at which the tab occurred. - * - * @param {Code} code - * Code. - * @returns {boolean} - * Whether it matches. - */ -export function markdownSpace(code) { - return code === -2 || code === -1 || code === 32; -} - -// Size note: removing ASCII from the regex and using `asciiPunctuation` here -// In fact adds to the bundle size. -/** - * Check whether the character code represents Unicode punctuation. - * - * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, - * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` - * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` - * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII - * punctuation (see `asciiPunctuation`). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u); - -/** - * Check whether the character code represents Unicode whitespace. - * - * Note that this does handle micromark specific markdown whitespace characters. - * See `markdownLineEndingOrSpace` to check that. - * - * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, - * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), - * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - * - * See: - * **\[UNICODE]**: - * [The Unicode Standard](https://www.unicode.org/versions/). - * Unicode Consortium. - * - * @param code - * Code. - * @returns - * Whether it matches. - */ -export const unicodeWhitespace = regexCheck(/\s/); - -/** - * Create a code check from a regex. - * - * @param {RegExp} regex - * Expression. - * @returns {(code: Code) => boolean} - * Check. - */ -function regexCheck(regex) { - return check; - - /** - * Check whether a code matches the bound regex. - * - * @param {Code} code - * Character code. - * @returns {boolean} - * Whether the character code matches the bound regex. - */ - function check(code) { - return code !== null && code > -1 && regex.test(String.fromCharCode(code)); - } -} \ No newline at end of file diff --git a/node_modules/micromark-util-character/license b/node_modules/micromark-util-character/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-character/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-character/package.json b/node_modules/micromark-util-character/package.json deleted file mode 100644 index 8af57e3999..0000000000 --- a/node_modules/micromark-util-character/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-util-character", - "version": "2.1.1", - "description": "micromark utility to handle character codes", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "character" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-character", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-character/readme.md b/node_modules/micromark-util-character/readme.md deleted file mode 100644 index 2356e4720f..0000000000 --- a/node_modules/micromark-util-character/readme.md +++ /dev/null @@ -1,446 +0,0 @@ -# micromark-util-character - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to handle [character codes][code]. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`asciiAlpha(code)`](#asciialphacode) - * [`asciiAlphanumeric(code)`](#asciialphanumericcode) - * [`asciiAtext(code)`](#asciiatextcode) - * [`asciiControl(code)`](#asciicontrolcode) - * [`asciiDigit(code)`](#asciidigitcode) - * [`asciiHexDigit(code)`](#asciihexdigitcode) - * [`asciiPunctuation(code)`](#asciipunctuationcode) - * [`markdownLineEnding(code)`](#markdownlineendingcode) - * [`markdownLineEndingOrSpace(code)`](#markdownlineendingorspacecode) - * [`markdownSpace(code)`](#markdownspacecode) - * [`unicodePunctuation(code)`](#unicodepunctuationcode) - * [`unicodeWhitespace(code)`](#unicodewhitespacecode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes algorithms to check whether characters match groups. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-character -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import * as character from 'https://esm.sh/micromark-util-character@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {asciiAlpha} from 'micromark-util-character' - -console.log(asciiAlpha(64)) // false -console.log(asciiAlpha(65)) // true -``` - -## API - -This module exports the identifiers -[`asciiAlpha`][api-ascii-alpha], -[`asciiAlphanumeric`][api-ascii-alphanumeric], -[`asciiAtext`][api-ascii-atext], -[`asciiControl`][api-ascii-control], -[`asciiDigit`][api-ascii-digit], -[`asciiHexDigit`][api-ascii-hex-digit], -[`asciiPunctuation`][api-ascii-punctuation], -[`markdownLineEnding`][api-markdown-line-ending], -[`markdownLineEndingOrSpace`][api-markdown-line-ending-or-space], -[`markdownSpace`][api-markdown-space], -[`unicodePunctuation`][api-unicode-punctuation], -[`unicodeWhitespace`][api-unicode-whitespace]. -There is no default export. - -### `asciiAlpha(code)` - -Check whether the [character code][code] represents an ASCII alpha (`a` through -`z`, case insensitive). - -An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. - -An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) -to U+005A (`Z`). - -An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) -to U+007A (`z`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiAlphanumeric(code)` - -Check whether the [character code][code] represents an ASCII alphanumeric (`a` -through `z`, case insensitive, or `0` through `9`). - -An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha -(see `asciiAlpha`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiAtext(code)` - -Check whether the [character code][code] represents an ASCII atext. - -atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in -the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), -U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F -SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E -CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE -(`{`) to U+007E TILDE (`~`) (**\[RFC5322]**). - -See **\[RFC5322]**:\ -[Internet Message Format](https://tools.ietf.org/html/rfc5322).\ -P. Resnick.\ -IETF. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiControl(code)` - -Check whether a [character code][code] is an ASCII control character. - -An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) -to U+001F (US), or U+007F (DEL). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiDigit(code)` - -Check whether the [character code][code] represents an ASCII digit (`0` through -`9`). - -An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to -U+0039 (`9`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiHexDigit(code)` - -Check whether the [character code][code] represents an ASCII hex digit (`a` -through `f`, case insensitive, or `0` through `9`). - -An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex -digit, or an ASCII lower hex digit. - -An **ASCII upper hex digit** is a character in the inclusive range U+0041 -(`A`) to U+0046 (`F`). - -An **ASCII lower hex digit** is a character in the inclusive range U+0061 -(`a`) to U+0066 (`f`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `asciiPunctuation(code)` - -Check whether the [character code][code] represents ASCII punctuation. - -An **ASCII punctuation** is a character in the inclusive ranges U+0021 -EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT -SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT -(`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `markdownLineEnding(code)` - -Check whether a [character code][code] is a markdown line ending. - -A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN -LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). - -In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE -RETURN (CR) are replaced by these virtual characters depending on whether -they occurred together. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `markdownLineEndingOrSpace(code)` - -Check whether a [character code][code] is a markdown line ending (see -`markdownLineEnding`) or markdown space (see `markdownSpace`). - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `markdownSpace(code)` - -Check whether a [character code][code] is a markdown space. - -A **markdown space** is the concrete character U+0020 SPACE (SP) and the -virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). - -In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is -replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL -SPACE (VS) characters, depending on the column at which the tab occurred. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `unicodePunctuation(code)` - -Check whether the [character code][code] represents Unicode punctuation. - -A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, -Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` -(Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` -(Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII -punctuation (see `asciiPunctuation`) (**\[UNICODE]**). - -See **\[UNICODE]**:\ -[The Unicode Standard](https://www.unicode.org/versions/).\ -Unicode Consortium. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -### `unicodeWhitespace(code)` - -Check whether the [character code][code] represents Unicode whitespace. - -Note that this does handle micromark specific markdown whitespace characters. -See `markdownLineEndingOrSpace` to check that. - -A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, -Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), -U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). - -See **\[UNICODE]**:\ -[The Unicode Standard](https://www.unicode.org/versions/).\ -Unicode Consortium. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Whether it matches (`boolean`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-character@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-character.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-character - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-character - -[bundle-size]: https://bundlejs.com/?q=micromark-util-character - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[code]: https://github.com/micromark/micromark#preprocess - -[api-ascii-alpha]: #asciialphacode - -[api-ascii-alphanumeric]: #asciialphanumericcode - -[api-ascii-atext]: #asciiatextcode - -[api-ascii-control]: #asciicontrolcode - -[api-ascii-digit]: #asciidigitcode - -[api-ascii-hex-digit]: #asciihexdigitcode - -[api-ascii-punctuation]: #asciipunctuationcode - -[api-markdown-line-ending]: #markdownlineendingcode - -[api-markdown-line-ending-or-space]: #markdownlineendingorspacecode - -[api-markdown-space]: #markdownspacecode - -[api-unicode-punctuation]: #unicodepunctuationcode - -[api-unicode-whitespace]: #unicodewhitespacecode diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts b/node_modules/micromark-util-chunked/dev/index.d.ts deleted file mode 100644 index ed04ba20d0..0000000000 --- a/node_modules/micromark-util-chunked/dev/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list: Array, start: number, remove: number, items: Array): undefined; -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list: Array, items: Array): Array; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.d.ts.map b/node_modules/micromark-util-chunked/dev/index.d.ts.map deleted file mode 100644 index 432125397d..0000000000 --- a/node_modules/micromark-util-chunked/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/dev/index.js b/node_modules/micromark-util-chunked/dev/index.js deleted file mode 100644 index 7b6a18f871..0000000000 --- a/node_modules/micromark-util-chunked/dev/index.js +++ /dev/null @@ -1,89 +0,0 @@ -import {constants} from 'micromark-util-symbol' - -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list, start, remove, items) { - const end = list.length - let chunkStart = 0 - /** @type {Array} */ - let parameters - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start - } else { - start = start > end ? end : start - } - - remove = remove > 0 ? remove : 0 - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < constants.v8MaxSafeChunkSize) { - parameters = Array.from(items) - parameters.unshift(start, remove) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove) - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice( - chunkStart, - chunkStart + constants.v8MaxSafeChunkSize - ) - parameters.unshift(start, 0) - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters) - - chunkStart += constants.v8MaxSafeChunkSize - start += constants.v8MaxSafeChunkSize - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items) - return list - } - - return items -} diff --git a/node_modules/micromark-util-chunked/index.d.ts b/node_modules/micromark-util-chunked/index.d.ts deleted file mode 100644 index ed04ba20d0..0000000000 --- a/node_modules/micromark-util-chunked/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list: Array, start: number, remove: number, items: Array): undefined; -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list: Array, items: Array): Array; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.d.ts.map b/node_modules/micromark-util-chunked/index.d.ts.map deleted file mode 100644 index 432125397d..0000000000 --- a/node_modules/micromark-util-chunked/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,uBAbuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,MAAM,UAEN,MAAM,SAEN,KAAK,CAAC,CAAC,CAAC,GAEN,SAAS,CA0CrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBATuB,CAAC,SAAX,OAAS,QAEX,KAAK,CAAC,CAAC,CAAC,SAER,KAAK,CAAC,CAAC,CAAC,GAEN,KAAK,CAAC,CAAC,CAAC,CAUpB"} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/index.js b/node_modules/micromark-util-chunked/index.js deleted file mode 100644 index 3a4b262400..0000000000 --- a/node_modules/micromark-util-chunked/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Like `Array#splice`, but smarter for giant arrays. - * - * `Array#splice` takes all items to be inserted as individual argument which - * causes a stack overflow in V8 when trying to insert 100k items for instance. - * - * Otherwise, this does not return the removed items, and takes `items` as an - * array instead of rest parameters. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {number} start - * Index to remove/insert at (can be negative). - * @param {number} remove - * Number of items to remove. - * @param {Array} items - * Items to inject into `list`. - * @returns {undefined} - * Nothing. - */ -export function splice(list, start, remove, items) { - const end = list.length; - let chunkStart = 0; - /** @type {Array} */ - let parameters; - - // Make start between zero and `end` (included). - if (start < 0) { - start = -start > end ? 0 : end + start; - } else { - start = start > end ? end : start; - } - remove = remove > 0 ? remove : 0; - - // No need to chunk the items if there’s only a couple (10k) items. - if (items.length < 10000) { - parameters = Array.from(items); - parameters.unshift(start, remove); - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters); - } else { - // Delete `remove` items starting from `start` - if (remove) list.splice(start, remove); - - // Insert the items in chunks to not cause stack overflows. - while (chunkStart < items.length) { - parameters = items.slice(chunkStart, chunkStart + 10000); - parameters.unshift(start, 0); - // @ts-expect-error Hush, it’s fine. - list.splice(...parameters); - chunkStart += 10000; - start += 10000; - } - } -} - -/** - * Append `items` (an array) at the end of `list` (another array). - * When `list` was empty, returns `items` instead. - * - * This prevents a potentially expensive operation when `list` is empty, - * and adds items in batches to prevent V8 from hanging. - * - * @template {unknown} T - * Item type. - * @param {Array} list - * List to operate on. - * @param {Array} items - * Items to add to `list`. - * @returns {Array} - * Either `list` or `items`. - */ -export function push(list, items) { - if (list.length > 0) { - splice(list, list.length, 0, items); - return list; - } - return items; -} \ No newline at end of file diff --git a/node_modules/micromark-util-chunked/license b/node_modules/micromark-util-chunked/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-chunked/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-chunked/package.json b/node_modules/micromark-util-chunked/package.json deleted file mode 100644 index 8a5c91d395..0000000000 --- a/node_modules/micromark-util-chunked/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "micromark-util-chunked", - "version": "2.0.1", - "description": "micromark utility to splice and push with giant arrays", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "chunk", - "splice", - "push" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-chunked", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-chunked/readme.md b/node_modules/micromark-util-chunked/readme.md deleted file mode 100644 index 6628fad732..0000000000 --- a/node_modules/micromark-util-chunked/readme.md +++ /dev/null @@ -1,219 +0,0 @@ -# micromark-util-chunked - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to splice and push with giant arrays. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`push(list, items)`](#pushlist-items) - * [`splice(list, start, remove, items)`](#splicelist-start-remove-items) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to splice for giant arrays, which V8 bugs -out on. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-chunked -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {push, splice} from 'https://esm.sh/micromark-util-chunked@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {push, splice} from 'micromark-util-chunked' - -// … - -nextEvents = push(nextEvents, [ - ['enter', events[open][1], context], - ['exit', events[open][1], context] -]) - -// … - -splice(events, open - 1, index - open + 3, nextEvents) - -// … -``` - -## API - -This module exports the identifiers [`push`][api-push] -and [`splice`][api-splice]. -There is no default export. - -### `push(list, items)` - -Append `items` (an array) at the end of `list` (another array). -When `list` was empty, returns `items` instead. - -This prevents a potentially expensive operation when `list` is empty, -and adds items in batches to prevent V8 from hanging. - -###### Parameters - -* `list` (`Array`) - — list to operate on -* `items` (`Array`) - — items to add to `list` - -###### Returns - -Either `list` or `items` (`Array`). - -### `splice(list, start, remove, items)` - -Like `Array#splice`, but smarter for giant arrays. - -`Array#splice` takes all items to be inserted as individual argument which -causes a stack overflow in V8 when trying to insert 100k items for instance. - -Otherwise, this does not return the removed items, and takes `items` as an -array instead of rest parameters. - -###### Parameters - -* `list` (`Array`) - — list to operate on -* `start` (`number`) - — index to remove/insert at (can be negative) -* `remove` (`number`) - — number of items to remove -* `items` (`Array`) - — items to inject into `list` - -###### Returns - -Nothing (`undefined`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-chunked@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-chunked.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-chunked - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-chunked - -[bundle-size]: https://bundlejs.com/?q=micromark-util-chunked - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-push]: #pushlist-items - -[api-splice]: #splicelist-start-remove-items diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts b/node_modules/micromark-util-classify-character/dev/index.d.ts deleted file mode 100644 index db98cd1fe9..0000000000 --- a/node_modules/micromark-util-classify-character/dev/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; -import type { Code } from 'micromark-util-types'; -import { constants } from 'micromark-util-symbol'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.d.ts.map b/node_modules/micromark-util-classify-character/dev/index.d.ts.map deleted file mode 100644 index 9b63a5bedd..0000000000 --- a/node_modules/micromark-util-classify-character/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/dev/index.js b/node_modules/micromark-util-classify-character/dev/index.js deleted file mode 100644 index 0d82474555..0000000000 --- a/node_modules/micromark-util-classify-character/dev/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -import { - markdownLineEndingOrSpace, - unicodePunctuation, - unicodeWhitespace -} from 'micromark-util-character' -import {codes, constants} from 'micromark-util-symbol' - -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code) { - if ( - code === codes.eof || - markdownLineEndingOrSpace(code) || - unicodeWhitespace(code) - ) { - return constants.characterGroupWhitespace - } - - if (unicodePunctuation(code)) { - return constants.characterGroupPunctuation - } -} diff --git a/node_modules/micromark-util-classify-character/index.d.ts b/node_modules/micromark-util-classify-character/index.d.ts deleted file mode 100644 index db98cd1fe9..0000000000 --- a/node_modules/micromark-util-classify-character/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code: Code): typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined; -import type { Code } from 'micromark-util-types'; -import { constants } from 'micromark-util-symbol'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.d.ts.map b/node_modules/micromark-util-classify-character/index.d.ts.map deleted file mode 100644 index 9b63a5bedd..0000000000 --- a/node_modules/micromark-util-classify-character/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,wCALW,IAAI,GAEF,OAAO,SAAS,CAAC,wBAAwB,GAAG,OAAO,SAAS,CAAC,yBAAyB,GAAG,SAAS,CAe9G;0BApCsB,sBAAsB;0BAQd,uBAAuB"} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/index.js b/node_modules/micromark-util-classify-character/index.js deleted file mode 100644 index a9aebc6cb8..0000000000 --- a/node_modules/micromark-util-classify-character/index.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @import {Code} from 'micromark-util-types' - */ - -import { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character'; -/** - * Classify whether a code represents whitespace, punctuation, or something - * else. - * - * Used for attention (emphasis, strong), whose sequences can open or close - * based on the class of surrounding characters. - * - * > 👉 **Note**: eof (`null`) is seen as whitespace. - * - * @param {Code} code - * Code. - * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} - * Group. - */ -export function classifyCharacter(code) { - if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) { - return 1; - } - if (unicodePunctuation(code)) { - return 2; - } -} \ No newline at end of file diff --git a/node_modules/micromark-util-classify-character/license b/node_modules/micromark-util-classify-character/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-classify-character/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-classify-character/package.json b/node_modules/micromark-util-classify-character/package.json deleted file mode 100644 index f424ff97e6..0000000000 --- a/node_modules/micromark-util-classify-character/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "micromark-util-classify-character", - "version": "2.0.1", - "description": "micromark utility to classify whether a character is whitespace or punctuation", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "attention", - "classify", - "character" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-classify-character", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-classify-character/readme.md b/node_modules/micromark-util-classify-character/readme.md deleted file mode 100644 index f0b3ee78dc..0000000000 --- a/node_modules/micromark-util-classify-character/readme.md +++ /dev/null @@ -1,205 +0,0 @@ -# micromark-util-classify-character - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to classify whether a character is whitespace or -punctuation. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`classifyCharacter(code)`](#classifycharactercode) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to classify characters into 3 categories. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-classify-character -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {classifyCharacter} from 'https://esm.sh/micromark-util-classify-character@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -/** - * @this {TokenizeContext} - * Context. - * @type {Tokenizer} - */ -function tokenizeAttention(effects, ok) { - return start - - // … - - /** @type {State} */ - function sequence(code) { - if (code === marker) { - // … - } - - const token = effects.exit('attentionSequence') - const after = classifyCharacter(code) - const open = - !after || (after === constants.characterGroupPunctuation && before) - const close = - !before || (before === constants.characterGroupPunctuation && after) - // … - } - - // … -} -``` - -## API - -This module exports the identifier -[`classifyCharacter`][api-classify-character]. -There is no default export. - -### `classifyCharacter(code)` - -Classify whether a code represents whitespace, punctuation, or something -else. - -Used for attention (emphasis, strong), whose sequences can open or close -based on the class of surrounding characters. - -> 👉 **Note**: eof (`null`) is seen as whitespace. - -###### Parameters - -* `code` (`Code`) - — code - -###### Returns - -Group (`constants.characterGroupWhitespace`, -`constants.characterGroupPunctuation`, or `undefined`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-classify-character@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-classify-character.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-classify-character - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-classify-character - -[bundle-size]: https://bundlejs.com/?q=micromark-util-classify-character - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-classify-character]: #classifycharactercode diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts b/node_modules/micromark-util-combine-extensions/index.d.ts deleted file mode 100644 index dbd674cb8b..0000000000 --- a/node_modules/micromark-util-combine-extensions/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Combine multiple syntax extensions into one. - * - * @param {ReadonlyArray} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -export function combineExtensions(extensions: ReadonlyArray): NormalizedExtension; -/** - * Combine multiple HTML extensions into one. - * - * @param {ReadonlyArray} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * Single combined HTML extension. - */ -export function combineHtmlExtensions(htmlExtensions: ReadonlyArray): HtmlExtension; -import type { Extension } from 'micromark-util-types'; -import type { NormalizedExtension } from 'micromark-util-types'; -import type { HtmlExtension } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.d.ts.map b/node_modules/micromark-util-combine-extensions/index.d.ts.map deleted file mode 100644 index e0ea7bf1ee..0000000000 --- a/node_modules/micromark-util-combine-extensions/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,8CALW,aAAa,CAAC,SAAS,CAAC,GAEtB,mBAAmB,CAa/B;AA+DD;;;;;;;GAOG;AACH,sDALW,aAAa,CAAC,aAAa,CAAC,GAE1B,aAAa,CAazB;+BA1GS,sBAAsB;yCAAtB,sBAAsB;mCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-combine-extensions/index.js b/node_modules/micromark-util-combine-extensions/index.js deleted file mode 100644 index bc28f6d9c3..0000000000 --- a/node_modules/micromark-util-combine-extensions/index.js +++ /dev/null @@ -1,143 +0,0 @@ -/** - * @import { - * Extension, - * Handles, - * HtmlExtension, - * NormalizedExtension - * } from 'micromark-util-types' - */ - -import {splice} from 'micromark-util-chunked' - -const hasOwnProperty = {}.hasOwnProperty - -/** - * Combine multiple syntax extensions into one. - * - * @param {ReadonlyArray} extensions - * List of syntax extensions. - * @returns {NormalizedExtension} - * A single combined extension. - */ -export function combineExtensions(extensions) { - /** @type {NormalizedExtension} */ - const all = {} - let index = -1 - - while (++index < extensions.length) { - syntaxExtension(all, extensions[index]) - } - - return all -} - -/** - * Merge `extension` into `all`. - * - * @param {NormalizedExtension} all - * Extension to merge into. - * @param {Extension} extension - * Extension to merge. - * @returns {undefined} - * Nothing. - */ -function syntaxExtension(all, extension) { - /** @type {keyof Extension} */ - let hook - - for (hook in extension) { - const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined - /** @type {Record} */ - const left = maybe || (all[hook] = {}) - /** @type {Record | undefined} */ - const right = extension[hook] - /** @type {string} */ - let code - - if (right) { - for (code in right) { - if (!hasOwnProperty.call(left, code)) left[code] = [] - const value = right[code] - constructs( - // @ts-expect-error Looks like a list. - left[code], - Array.isArray(value) ? value : value ? [value] : [] - ) - } - } - } -} - -/** - * Merge `list` into `existing` (both lists of constructs). - * Mutates `existing`. - * - * @param {Array} existing - * List of constructs to merge into. - * @param {Array} list - * List of constructs to merge. - * @returns {undefined} - * Nothing. - */ -function constructs(existing, list) { - let index = -1 - /** @type {Array} */ - const before = [] - - while (++index < list.length) { - // @ts-expect-error Looks like an object. - ;(list[index].add === 'after' ? existing : before).push(list[index]) - } - - splice(existing, 0, 0, before) -} - -/** - * Combine multiple HTML extensions into one. - * - * @param {ReadonlyArray} htmlExtensions - * List of HTML extensions. - * @returns {HtmlExtension} - * Single combined HTML extension. - */ -export function combineHtmlExtensions(htmlExtensions) { - /** @type {HtmlExtension} */ - const handlers = {} - let index = -1 - - while (++index < htmlExtensions.length) { - htmlExtension(handlers, htmlExtensions[index]) - } - - return handlers -} - -/** - * Merge `extension` into `all`. - * - * @param {HtmlExtension} all - * Extension to merge into. - * @param {HtmlExtension} extension - * Extension to merge. - * @returns {undefined} - * Nothing. - */ -function htmlExtension(all, extension) { - /** @type {keyof HtmlExtension} */ - let hook - - for (hook in extension) { - const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined - const left = maybe || (all[hook] = {}) - const right = extension[hook] - /** @type {keyof Handles} */ - let type - - if (right) { - for (type in right) { - // @ts-expect-error assume document vs regular handler are managed correctly. - left[type] = right[type] - } - } - } -} diff --git a/node_modules/micromark-util-combine-extensions/license b/node_modules/micromark-util-combine-extensions/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-combine-extensions/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-combine-extensions/package.json b/node_modules/micromark-util-combine-extensions/package.json deleted file mode 100644 index f46ff4099f..0000000000 --- a/node_modules/micromark-util-combine-extensions/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "micromark-util-combine-extensions", - "version": "2.0.1", - "description": "micromark utility to combine syntax or html extensions", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "extension", - "combine", - "merge" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-combine-extensions", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "guard-for-in": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-combine-extensions/readme.md b/node_modules/micromark-util-combine-extensions/readme.md deleted file mode 100644 index b9b6fc13e9..0000000000 --- a/node_modules/micromark-util-combine-extensions/readme.md +++ /dev/null @@ -1,201 +0,0 @@ -# micromark-util-combine-extensions - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to combine [syntax][] or [html][] extensions. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`combineExtensions(extensions)`](#combineextensionsextensions) - * [`combineHtmlExtensions(htmlExtensions)`](#combinehtmlextensionshtmlextensions) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package can merge multiple extensions into one. - -## When should I use this? - -This package might be useful when you are making “presets”, such as -[`micromark-extension-gfm`][micromark-extension-gfm]. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-combine-extensions -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {combineExtensions} from 'https://esm.sh/micromark-util-combine-extensions@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {gfmAutolinkLiteral} from 'micromark-extension-gfm-autolink-literal' -import {gfmStrikethrough} from 'micromark-extension-gfm-strikethrough' -import {gfmTable} from 'micromark-extension-gfm-table' -import {gfmTaskListItem} from 'micromark-extension-gfm-task-list-item' -import {combineExtensions} from 'micromark-util-combine-extensions' - -const gfm = combineExtensions([gfmAutolinkLiteral, gfmStrikethrough(), gfmTable, gfmTaskListItem]) -``` - -## API - -This module exports the identifiers -[`combineExtensions`][api-combine-extensions] and -[`combineHtmlExtensions`][api-combine-html-extensions]. -There is no default export. - -### `combineExtensions(extensions)` - -Combine multiple syntax extensions into one. - -###### Parameters - -* `extensions` (`Array`) - — list of syntax extensions - -###### Returns - -A single combined extension (`Extension`). - -### `combineHtmlExtensions(htmlExtensions)` - -Combine multiple html extensions into one. - -###### Parameters - -* `htmlExtensions` (`Array`) - — list of HTML extensions - -###### Returns - -A single combined HTML extension (`HtmlExtension`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-combine-extensions@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-combine-extensions.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-combine-extensions - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-combine-extensions - -[bundle-size]: https://bundlejs.com/?q=micromark-util-combine-extensions - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[syntax]: https://github.com/micromark/micromark#syntaxextension - -[html]: https://github.com/micromark/micromark#htmlextension - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[micromark-extension-gfm]: https://github.com/micromark/micromark-extension-gfm - -[api-combine-extensions]: #combineextensionsextensions - -[api-combine-html-extensions]: #combinehtmlextensionshtmlextensions diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts deleted file mode 100644 index 333bdbbd0e..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value: string, base: number): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map deleted file mode 100644 index 17f668f104..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js b/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js deleted file mode 100644 index a96c423833..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js +++ /dev/null @@ -1,42 +0,0 @@ -import {codes, values} from 'micromark-util-symbol' - -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base) - - if ( - // C0 except for HT, LF, FF, CR, space. - code < codes.ht || - code === codes.vt || - (code > codes.cr && code < codes.space) || - // Control character (DEL) of C0, and C1 controls. - (code > codes.tilde && code < 160) || - // Lone high surrogates and low surrogates. - (code > 55_295 && code < 57_344) || - // Noncharacters. - (code > 64_975 && code < 65_008) || - /* eslint-disable no-bitwise */ - (code & 65_535) === 65_535 || - (code & 65_535) === 65_534 || - /* eslint-enable no-bitwise */ - // Out of range - code > 1_114_111 - ) { - return values.replacementCharacter - } - - return String.fromCodePoint(code) -} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts deleted file mode 100644 index 333bdbbd0e..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value: string, base: number): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map b/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map deleted file mode 100644 index 17f668f104..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,uDAPW,MAAM,QAEN,MAAM,GAEJ,MAAM,CA4BlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/index.js b/node_modules/micromark-util-decode-numeric-character-reference/index.js deleted file mode 100644 index 1d75d7ba5c..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Turn the number (in string form as either hexa- or plain decimal) coming from - * a numeric character reference into a character. - * - * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes - * non-characters and control characters safe. - * - * @param {string} value - * Value to decode. - * @param {number} base - * Numeric base. - * @returns {string} - * Character. - */ -export function decodeNumericCharacterReference(value, base) { - const code = Number.parseInt(value, base); - if ( - // C0 except for HT, LF, FF, CR, space. - code < 9 || code === 11 || code > 13 && code < 32 || - // Control character (DEL) of C0, and C1 controls. - code > 126 && code < 160 || - // Lone high surrogates and low surrogates. - code > 55_295 && code < 57_344 || - // Noncharacters. - code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */ - (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */ - // Out of range - code > 1_114_111) { - return "\uFFFD"; - } - return String.fromCodePoint(code); -} \ No newline at end of file diff --git a/node_modules/micromark-util-decode-numeric-character-reference/license b/node_modules/micromark-util-decode-numeric-character-reference/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-decode-numeric-character-reference/package.json b/node_modules/micromark-util-decode-numeric-character-reference/package.json deleted file mode 100644 index 759e989b07..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "micromark-util-decode-numeric-character-reference", - "version": "2.0.2", - "description": "micromark utility to decode numeric character references", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "decode", - "numeric", - "number", - "character", - "reference" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-decode-numeric-character-reference", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-decode-numeric-character-reference/readme.md b/node_modules/micromark-util-decode-numeric-character-reference/readme.md deleted file mode 100644 index 4610c59bc9..0000000000 --- a/node_modules/micromark-util-decode-numeric-character-reference/readme.md +++ /dev/null @@ -1,184 +0,0 @@ -# micromark-util-decode-numeric-character-reference - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to decode numeric character references. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`decodeNumericCharacterReference(value, base)`](#decodenumericcharacterreferencevalue-base) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to decode numeric character references. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-decode-numeric-character-reference -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {decodeNumericCharacterReference} from 'https://esm.sh/micromark-util-decode-numeric-character-reference@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference' - -decodeNumericCharacterReference('41', 16) // 'A' -decodeNumericCharacterReference('65', 10) // 'A' -decodeNumericCharacterReference('A', 16) // '\n' -decodeNumericCharacterReference('7F', 16) // '�' - Control -decodeNumericCharacterReference('110000', 16) // '�' - Out of range -``` - -## API - -This module exports the identifier: -[`decodeNumericCharacterReference`][api-decode-numeric-character-reference]. -There is no default export. - -### `decodeNumericCharacterReference(value, base)` - -Turn the number (in string form as either hexa- or plain decimal) coming from -a numeric character reference into a character. - -Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes -non-characters and control characters safe. - -###### Parameters - -* `value` (`string`) - — value to decode -* `base` (`number`, probably `10` or `16`) - — numeric base - -###### Returns - -Character (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-decode-numeric-character-reference@2`, compatible with -Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier - -[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-decode-numeric-character-reference]: #decodenumericcharacterreferencevalue-base diff --git a/node_modules/micromark-util-encode/index.d.ts b/node_modules/micromark-util-encode/index.d.ts deleted file mode 100644 index 760226f618..0000000000 --- a/node_modules/micromark-util-encode/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Encode only the dangerous HTML characters. - * - * This ensures that certain characters which have special meaning in HTML are - * dealt with. - * Technically, we can skip `>` and `"` in many cases, but CM includes them. - * - * @param {string} value - * Value to encode. - * @returns {string} - * Encoded value. - */ -export function encode(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.d.ts.map b/node_modules/micromark-util-encode/index.d.ts.map deleted file mode 100644 index 16eebb1cc4..0000000000 --- a/node_modules/micromark-util-encode/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,8BALW,MAAM,GAEJ,MAAM,CAqBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-encode/index.js b/node_modules/micromark-util-encode/index.js deleted file mode 100644 index 397f1d4041..0000000000 --- a/node_modules/micromark-util-encode/index.js +++ /dev/null @@ -1,33 +0,0 @@ -const characterReferences = {'"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'} - -/** - * Encode only the dangerous HTML characters. - * - * This ensures that certain characters which have special meaning in HTML are - * dealt with. - * Technically, we can skip `>` and `"` in many cases, but CM includes them. - * - * @param {string} value - * Value to encode. - * @returns {string} - * Encoded value. - */ -export function encode(value) { - return value.replace(/["&<>]/g, replace) - - /** - * @param {string} value - * Value to replace. - * @returns {string} - * Encoded value. - */ - function replace(value) { - return ( - '&' + - characterReferences[ - /** @type {keyof typeof characterReferences} */ (value) - ] + - ';' - ) - } -} diff --git a/node_modules/micromark-util-encode/license b/node_modules/micromark-util-encode/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-encode/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-encode/package.json b/node_modules/micromark-util-encode/package.json deleted file mode 100644 index a56c6b3b04..0000000000 --- a/node_modules/micromark-util-encode/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "micromark-util-encode", - "version": "2.0.1", - "description": "micromark utility to encode dangerous html characters", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "html", - "encode" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-string-replace-all": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-encode/readme.md b/node_modules/micromark-util-encode/readme.md deleted file mode 100644 index cd27292fe1..0000000000 --- a/node_modules/micromark-util-encode/readme.md +++ /dev/null @@ -1,176 +0,0 @@ -# micromark-util-encode - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to encode dangerous html characters. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`encode(value)`](#encodevalue) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to make text safe for embedding in HTML. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-encode -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {encode} from 'https://esm.sh/micromark-util-encode@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {encode} from 'micromark-util-encode' - -encode('<3') // '<3' -``` - -## API - -This module exports the identifier [`encode`][api-encode]. -There is no default export. - -### `encode(value)` - -Encode only the dangerous HTML characters. - -This ensures that certain characters which have special meaning in HTML are -dealt with. -Technically, we can skip `>` and `"` in many cases, but CM includes them. - -###### Parameters - -* `value` (`string`) - — value to encode - -###### Returns - -Encoded value (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-encode@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-encode.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-encode - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-encode - -[bundle-size]: https://bundlejs.com/?q=micromark-util-encode - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-encode]: #encodevalue diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts b/node_modules/micromark-util-html-tag-name/index.d.ts deleted file mode 100644 index cd5ef317cd..0000000000 --- a/node_modules/micromark-util-html-tag-name/index.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * . - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -export const htmlBlockNames: string[]; -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * . - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -export const htmlRawNames: string[]; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.d.ts.map b/node_modules/micromark-util-html-tag-name/index.d.ts.map deleted file mode 100644 index 56f2fc0f2e..0000000000 --- a/node_modules/micromark-util-html-tag-name/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,sCA+DC;AAED;;;;;;;;;;;GAWG;AACH,oCAAkE"} \ No newline at end of file diff --git a/node_modules/micromark-util-html-tag-name/index.js b/node_modules/micromark-util-html-tag-name/index.js deleted file mode 100644 index fa0a0fd950..0000000000 --- a/node_modules/micromark-util-html-tag-name/index.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * List of lowercase HTML “block” tag names. - * - * The list, when parsing HTML (flow), results in more relaxed rules (condition - * 6). - * Because they are known blocks, the HTML-like syntax doesn’t have to be - * strictly parsed. - * For tag names not in this list, a more strict algorithm (condition 7) is used - * to detect whether the HTML-like syntax is seen as HTML (flow) or not. - * - * This is copied from: - * . - * - * > 👉 **Note**: `search` was added in `CommonMark@0.31`. - */ -export const htmlBlockNames = [ - 'address', - 'article', - 'aside', - 'base', - 'basefont', - 'blockquote', - 'body', - 'caption', - 'center', - 'col', - 'colgroup', - 'dd', - 'details', - 'dialog', - 'dir', - 'div', - 'dl', - 'dt', - 'fieldset', - 'figcaption', - 'figure', - 'footer', - 'form', - 'frame', - 'frameset', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'head', - 'header', - 'hr', - 'html', - 'iframe', - 'legend', - 'li', - 'link', - 'main', - 'menu', - 'menuitem', - 'nav', - 'noframes', - 'ol', - 'optgroup', - 'option', - 'p', - 'param', - 'search', - 'section', - 'summary', - 'table', - 'tbody', - 'td', - 'tfoot', - 'th', - 'thead', - 'title', - 'tr', - 'track', - 'ul' -] - -/** - * List of lowercase HTML “raw” tag names. - * - * The list, when parsing HTML (flow), results in HTML that can include lines - * without exiting, until a closing tag also in this list is found (condition - * 1). - * - * This module is copied from: - * . - * - * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - */ -export const htmlRawNames = ['pre', 'script', 'style', 'textarea'] diff --git a/node_modules/micromark-util-html-tag-name/license b/node_modules/micromark-util-html-tag-name/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-html-tag-name/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-html-tag-name/package.json b/node_modules/micromark-util-html-tag-name/package.json deleted file mode 100644 index 9015e128c8..0000000000 --- a/node_modules/micromark-util-html-tag-name/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "micromark-util-html-tag-name", - "version": "2.0.1", - "description": "micromark utility with list of html tag names", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "html", - "tag", - "name" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-html-tag-name", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-html-tag-name/readme.md b/node_modules/micromark-util-html-tag-name/readme.md deleted file mode 100644 index ff16f68e74..0000000000 --- a/node_modules/micromark-util-html-tag-name/readme.md +++ /dev/null @@ -1,193 +0,0 @@ -# micromark-util-html-tag-name - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility with list of html tag names. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`htmlBlockNames`](#htmlblocknames) - * [`htmlRawNames`](#htmlrawnames) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes a list of known tag names to markdown. - -## When should I use this? - -This package is only useful if you want to build an alternative to micromark. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-html-tag-name -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {htmlBlockNames, htmlRawNames} from 'https://esm.sh/micromark-util-html-tag-name@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name' - -console.log(htmlBlockNames) // ['address', 'article', …] -console.log(htmlRawNames) // ['pre', 'script', …] -``` - -## API - -This module exports the identifiers [`htmlBlockNames`][api-html-block-names] -and [`htmlRawNames`][api-html-raw-names]. -There is no default export. - -### `htmlBlockNames` - -List of lowercase HTML “block” tag names (`Array`). - -The list, when parsing HTML (flow), results in more relaxed rules (condition -6\). -Because they are known blocks, the HTML-like syntax doesn’t have to be strictly -parsed. -For tag names not in this list, a more strict algorithm (condition 7) is used -to detect whether the HTML-like syntax is seen as HTML (flow) or not. - -This is copied from: -. - -> 👉 **Note**: `search` was added in `CommonMark@0.31`. - -### `htmlRawNames` - -List of lowercase HTML “raw” tag names (`Array`). - -The list, when parsing HTML (flow), results in HTML that can include lines -without exiting, until a closing tag also in this list is found (condition -1\). - -This module is copied from: -. - -> 👉 **Note**: `textarea` was added in `CommonMark@0.30`. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-html-tag-name@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-html-tag-name.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-html-tag-name - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-html-tag-name - -[bundle-size]: https://bundlejs.com/?q=micromark-util-html-tag-name - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-html-block-names]: #htmlblocknames - -[api-html-raw-names]: #htmlrawnames diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts deleted file mode 100644 index 96074f6031..0000000000 --- a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map deleted file mode 100644 index 684ad8d872..0000000000 --- a/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/dev/index.js b/node_modules/micromark-util-normalize-identifier/dev/index.js deleted file mode 100644 index ce4ce9b61c..0000000000 --- a/node_modules/micromark-util-normalize-identifier/dev/index.js +++ /dev/null @@ -1,38 +0,0 @@ -import {values} from 'micromark-util-symbol' - -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value) { - return ( - value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, values.space) - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase() - .toUpperCase() - ) -} diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts b/node_modules/micromark-util-normalize-identifier/index.d.ts deleted file mode 100644 index 96074f6031..0000000000 --- a/node_modules/micromark-util-normalize-identifier/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.d.ts.map b/node_modules/micromark-util-normalize-identifier/index.d.ts.map deleted file mode 100644 index 684ad8d872..0000000000 --- a/node_modules/micromark-util-normalize-identifier/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,MAAM,GAEJ,MAAM,CAmBlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/index.js b/node_modules/micromark-util-normalize-identifier/index.js deleted file mode 100644 index f206021427..0000000000 --- a/node_modules/micromark-util-normalize-identifier/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Normalize an identifier (as found in references, definitions). - * - * Collapses markdown whitespace, trim, and then lower- and uppercase. - * - * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their - * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different - * uppercase character (U+0398 (`Θ`)). - * So, to get a canonical form, we perform both lower- and uppercase. - * - * Using uppercase last makes sure keys will never interact with default - * prototypal values (such as `constructor`): nothing in the prototype of - * `Object` is uppercase. - * - * @param {string} value - * Identifier to normalize. - * @returns {string} - * Normalized identifier. - */ -export function normalizeIdentifier(value) { - return value - // Collapse markdown whitespace. - .replace(/[\t\n\r ]+/g, " ") - // Trim. - .replace(/^ | $/g, '') - // Some characters are considered “uppercase”, but if their lowercase - // counterpart is uppercased will result in a different uppercase - // character. - // Hence, to get that form, we perform both lower- and uppercase. - // Upper case makes sure keys will not interact with default prototypal - // methods: no method is uppercase. - .toLowerCase().toUpperCase(); -} \ No newline at end of file diff --git a/node_modules/micromark-util-normalize-identifier/license b/node_modules/micromark-util-normalize-identifier/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-normalize-identifier/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-normalize-identifier/package.json b/node_modules/micromark-util-normalize-identifier/package.json deleted file mode 100644 index 4fb1982df2..0000000000 --- a/node_modules/micromark-util-normalize-identifier/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "micromark-util-normalize-identifier", - "version": "2.0.1", - "description": "micromark utility normalize identifiers (as found in references, definitions)", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "normalize", - "id", - "identifier" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-normalize-identifier", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off", - "unicorn/prefer-string-replace-all": "off" - } - } -} diff --git a/node_modules/micromark-util-normalize-identifier/readme.md b/node_modules/micromark-util-normalize-identifier/readme.md deleted file mode 100644 index 97e2383a1e..0000000000 --- a/node_modules/micromark-util-normalize-identifier/readme.md +++ /dev/null @@ -1,187 +0,0 @@ -# micromark-util-normalize-identifier - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility normalize identifiers. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`normalizeIdentifier(value)`](#normalizeidentifiervalue) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to normalize identifiers found in markdown. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-normalize-identifier -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {normalizeIdentifier} from 'https://esm.sh/micromark-util-normalize-identifier@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {normalizeIdentifier} from 'micromark-util-normalize-identifier' - -normalizeIdentifier(' a ') // 'A' -normalizeIdentifier('a\t\r\nb') // 'A B' -normalizeIdentifier('ТОЛПОЙ') // 'ТОЛПОЙ' -normalizeIdentifier('Толпой') // 'ТОЛПОЙ' -``` - -## API - -This module exports the identifier -[`normalizeIdentifier`][api-normalize-identifier]. -There is no default export. - -### `normalizeIdentifier(value)` - -Normalize an identifier (as found in references, definitions). - -Collapses markdown whitespace, trim, and then lower- and uppercase. - -Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their -lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different -uppercase character (U+0398 (`Θ`)). -So, to get a canonical form, we perform both lower- and uppercase. - -Using uppercase last makes sure keys will never interact with default -prototypal values (such as `constructor`): nothing in the prototype of `Object` -is uppercase. - -###### Parameters - -* `value` (`string`) - — identifier to normalize - -###### Returns - -Normalized identifier (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-normalize-identifier@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-normalize-identifier.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-normalize-identifier - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-normalize-identifier - -[bundle-size]: https://bundlejs.com/?q=micromark-util-normalize-identifier - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-normalize-identifier]: #normalizeidentifiervalue diff --git a/node_modules/micromark-util-resolve-all/index.d.ts b/node_modules/micromark-util-resolve-all/index.d.ts deleted file mode 100644 index c9cbe16b64..0000000000 --- a/node_modules/micromark-util-resolve-all/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' - */ -/** - * Call all `resolveAll`s. - * - * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array} - * Changed events. - */ -export function resolveAll(constructs: ReadonlyArray<{ - resolveAll?: Resolver | undefined; -}>, events: Array, context: TokenizeContext): Array; -import type { Resolver } from 'micromark-util-types'; -import type { Event } from 'micromark-util-types'; -import type { TokenizeContext } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.d.ts.map b/node_modules/micromark-util-resolve-all/index.d.ts.map deleted file mode 100644 index 8ba707e732..0000000000 --- a/node_modules/micromark-util-resolve-all/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,uCATW,aAAa,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAC,CAAC,UAElD,KAAK,CAAC,KAAK,CAAC,WAEZ,eAAe,GAEb,KAAK,CAAC,KAAK,CAAC,CAkBxB;8BA9BkD,sBAAsB;2BAAtB,sBAAsB;qCAAtB,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-resolve-all/index.js b/node_modules/micromark-util-resolve-all/index.js deleted file mode 100644 index 69eb32b604..0000000000 --- a/node_modules/micromark-util-resolve-all/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types' - */ - -/** - * Call all `resolveAll`s. - * - * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs - * List of constructs, optionally with `resolveAll`s. - * @param {Array} events - * List of events. - * @param {TokenizeContext} context - * Context used by `tokenize`. - * @returns {Array} - * Changed events. - */ -export function resolveAll(constructs, events, context) { - /** @type {Array} */ - const called = [] - let index = -1 - - while (++index < constructs.length) { - const resolve = constructs[index].resolveAll - - if (resolve && !called.includes(resolve)) { - events = resolve(events, context) - called.push(resolve) - } - } - - return events -} diff --git a/node_modules/micromark-util-resolve-all/license b/node_modules/micromark-util-resolve-all/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-resolve-all/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-resolve-all/package.json b/node_modules/micromark-util-resolve-all/package.json deleted file mode 100644 index f1d7c2b2af..0000000000 --- a/node_modules/micromark-util-resolve-all/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "micromark-util-resolve-all", - "version": "2.0.1", - "description": "micromark utility to resolve subtokens", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "resolve" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-resolve-all", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": "./index.js", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-resolve-all/readme.md b/node_modules/micromark-util-resolve-all/readme.md deleted file mode 100644 index 11eefd47ae..0000000000 --- a/node_modules/micromark-util-resolve-all/readme.md +++ /dev/null @@ -1,238 +0,0 @@ -# micromark-util-resolve-all - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to resolve subtokens. - -[Resolvers][resolver] are functions that take events and manipulate them. -This is needed for example because media (links, images) and attention (strong, -italic) aren’t parsed left-to-right. -Instead, their openings and closings are parsed, and when done, their openings -and closings are matched, and left overs are turned into plain text. -Because media and attention can’t overlap, we need to perform that operation -when one closing matches an opening, too. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`resolveAll(constructs, events, context)`](#resolveallconstructs-events-context) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes a micromark internal that you probably don’t need. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-resolve-all -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {resolveAll} from 'https://esm.sh/micromark-util-resolve-all@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {push} from 'micromark-util-chunked' -import {resolveAll} from 'micromark-util-resolve-all' - -/** - * @type {Resolver} - */ -function resolveAllAttention(events, context) { - // … - - // Walk through all events. - while (++index < events.length) { - // Find a token that can close. - if ( - events[index][0] === 'enter' && - events[index][1].type === 'attentionSequence' && - events[index][1]._close - ) { - open = index - - // Now walk back to find an opener. - while (open--) { - // Find a token that can open the closer. - if ( - // … - ) { - // … - - // Opening. - nextEvents = push(nextEvents, [ - // … - ]) - - // Between. - nextEvents = push( - nextEvents, - resolveAll( - context.parser.constructs.insideSpan.null, - events.slice(open + 1, index), - context - ) - ) - - // Closing. - nextEvents = push(nextEvents, [ - // … - ]) - - // … - } - } - } - } - - // … -} -``` - -## API - -This module exports the identifier [`resolveAll`][api-resolve-all]. -There is no default export. - -### `resolveAll(constructs, events, context)` - -Call all `resolveAll`s in `constructs`. - -###### Parameters - -* `constructs` (`Array`) - — list of constructs, optionally with `resolveAll`s -* `events` (`Array`) - — list of events -* `context` (`TokenizeContext`) - — context used by `tokenize` - -###### Returns - -Changed events (`Array`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-resolve-all@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-resolve-all.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-resolve-all - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-resolve-all - -[bundle-size]: https://bundlejs.com/?q=micromark-util-resolve-all - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[resolver]: https://github.com/micromark/micromark/blob/a571c09/packages/micromark-util-types/index.js#L219 - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-resolve-all]: #resolveallconstructs-events-context diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts deleted file mode 100644 index a105f230e8..0000000000 --- a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map deleted file mode 100644 index cab9483524..0000000000 --- a/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/dev/index.js b/node_modules/micromark-util-sanitize-uri/dev/index.js deleted file mode 100644 index cc454b5e02..0000000000 --- a/node_modules/micromark-util-sanitize-uri/dev/index.js +++ /dev/null @@ -1,124 +0,0 @@ -import {asciiAlphanumeric} from 'micromark-util-character' -import {encode} from 'micromark-util-encode' -import {codes, values} from 'micromark-util-symbol' - -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url, protocol) { - const value = encode(normalizeUri(url || '')) - - if (!protocol) { - return value - } - - const colon = value.indexOf(':') - const questionMark = value.indexOf('?') - const numberSign = value.indexOf('#') - const slash = value.indexOf('/') - - if ( - // If there is no protocol, it’s relative. - colon < 0 || - // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. - (slash > -1 && colon > slash) || - (questionMark > -1 && colon > questionMark) || - (numberSign > -1 && colon > numberSign) || - // It is a protocol, it should be allowed. - protocol.test(value.slice(0, colon)) - ) { - return value - } - - return '' -} - -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value) { - /** @type {Array} */ - const result = [] - let index = -1 - let start = 0 - let skip = 0 - - while (++index < value.length) { - const code = value.charCodeAt(index) - /** @type {string} */ - let replace = '' - - // A correct percent encoded value. - if ( - code === codes.percentSign && - asciiAlphanumeric(value.charCodeAt(index + 1)) && - asciiAlphanumeric(value.charCodeAt(index + 2)) - ) { - skip = 2 - } - // ASCII. - else if (code < 128) { - if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { - replace = String.fromCharCode(code) - } - } - // Astral. - else if (code > 55_295 && code < 57_344) { - const next = value.charCodeAt(index + 1) - - // A correct surrogate pair. - if (code < 56_320 && next > 56_319 && next < 57_344) { - replace = String.fromCharCode(code, next) - skip = 1 - } - // Lone surrogate. - else { - replace = values.replacementCharacter - } - } - // Unicode. - else { - replace = String.fromCharCode(code) - } - - if (replace) { - result.push(value.slice(start, index), encodeURIComponent(replace)) - start = index + skip + 1 - replace = '' - } - - if (skip) { - index += skip - skip = 0 - } - } - - return result.join('') + value.slice(start) -} diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts b/node_modules/micromark-util-sanitize-uri/index.d.ts deleted file mode 100644 index a105f230e8..0000000000 --- a/node_modules/micromark-util-sanitize-uri/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url: string | null | undefined, protocol?: RegExp | null | undefined): string; -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value: string): string; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.d.ts.map b/node_modules/micromark-util-sanitize-uri/index.d.ts.map deleted file mode 100644 index cab9483524..0000000000 --- a/node_modules/micromark-util-sanitize-uri/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iCAPW,MAAM,GAAG,IAAI,GAAG,SAAS,aAEzB,MAAM,GAAG,IAAI,GAAG,SAAS,GAEvB,MAAM,CA6BlB;AAED;;;;;;;;;;GAUG;AACH,oCALW,MAAM,GAEJ,MAAM,CA6DlB"} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/index.js b/node_modules/micromark-util-sanitize-uri/index.js deleted file mode 100644 index fb6fe6fbb8..0000000000 --- a/node_modules/micromark-util-sanitize-uri/index.js +++ /dev/null @@ -1,107 +0,0 @@ -import { asciiAlphanumeric } from 'micromark-util-character'; -import { encode } from 'micromark-util-encode'; -/** - * Make a value safe for injection as a URL. - * - * This encodes unsafe characters with percent-encoding and skips already - * encoded sequences (see `normalizeUri`). - * Further unsafe characters are encoded as character references (see - * `micromark-util-encode`). - * - * A regex of allowed protocols can be given, in which case the URL is - * sanitized. - * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or - * `/^https?$/i` for `img[src]` (this is what `github.com` allows). - * If the URL includes an unknown protocol (one not matched by `protocol`, such - * as a dangerous example, `javascript:`), the value is ignored. - * - * @param {string | null | undefined} url - * URI to sanitize. - * @param {RegExp | null | undefined} [protocol] - * Allowed protocols. - * @returns {string} - * Sanitized URI. - */ -export function sanitizeUri(url, protocol) { - const value = encode(normalizeUri(url || '')); - if (!protocol) { - return value; - } - const colon = value.indexOf(':'); - const questionMark = value.indexOf('?'); - const numberSign = value.indexOf('#'); - const slash = value.indexOf('/'); - if ( - // If there is no protocol, it’s relative. - colon < 0 || - // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol. - slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign || - // It is a protocol, it should be allowed. - protocol.test(value.slice(0, colon))) { - return value; - } - return ''; -} - -/** - * Normalize a URL. - * - * Encode unsafe characters with percent-encoding, skipping already encoded - * sequences. - * - * @param {string} value - * URI to normalize. - * @returns {string} - * Normalized URI. - */ -export function normalizeUri(value) { - /** @type {Array} */ - const result = []; - let index = -1; - let start = 0; - let skip = 0; - while (++index < value.length) { - const code = value.charCodeAt(index); - /** @type {string} */ - let replace = ''; - - // A correct percent encoded value. - if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) { - skip = 2; - } - // ASCII. - else if (code < 128) { - if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) { - replace = String.fromCharCode(code); - } - } - // Astral. - else if (code > 55_295 && code < 57_344) { - const next = value.charCodeAt(index + 1); - - // A correct surrogate pair. - if (code < 56_320 && next > 56_319 && next < 57_344) { - replace = String.fromCharCode(code, next); - skip = 1; - } - // Lone surrogate. - else { - replace = "\uFFFD"; - } - } - // Unicode. - else { - replace = String.fromCharCode(code); - } - if (replace) { - result.push(value.slice(start, index), encodeURIComponent(replace)); - start = index + skip + 1; - replace = ''; - } - if (skip) { - index += skip; - skip = 0; - } - } - return result.join('') + value.slice(start); -} \ No newline at end of file diff --git a/node_modules/micromark-util-sanitize-uri/license b/node_modules/micromark-util-sanitize-uri/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-sanitize-uri/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-sanitize-uri/package.json b/node_modules/micromark-util-sanitize-uri/package.json deleted file mode 100644 index 068ecbc7a4..0000000000 --- a/node_modules/micromark-util-sanitize-uri/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "micromark-util-sanitize-uri", - "version": "2.0.1", - "description": "micromark utility to sanitize urls", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "sanitize", - "clear", - "url" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-sanitize-uri", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-sanitize-uri/readme.md b/node_modules/micromark-util-sanitize-uri/readme.md deleted file mode 100644 index 2d08fc51fb..0000000000 --- a/node_modules/micromark-util-sanitize-uri/readme.md +++ /dev/null @@ -1,214 +0,0 @@ -# micromark-util-sanitize-uri - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to sanitize urls. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`normalizeUri(value)`](#normalizeurivalue) - * [`sanitizeUri(url[, pattern])`](#sanitizeuriurl-pattern) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes an algorithm to make URLs safe. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-sanitize-uri -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {sanitizeUri} from 'https://esm.sh/micromark-util-sanitize-uri@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {sanitizeUri} from 'micromark-util-sanitize-uri' - -sanitizeUri('https://example.com/a&b') // 'https://example.com/a&amp;b' -sanitizeUri('https://example.com/a%b') // 'https://example.com/a%25b' -sanitizeUri('https://example.com/a%20b') // 'https://example.com/a%20b' -sanitizeUri('https://example.com/👍') // 'https://example.com/%F0%9F%91%8D' -sanitizeUri('https://example.com/', /^https?$/i) // 'https://example.com/' -sanitizeUri('javascript:alert(1)', /^https?$/i) // '' -sanitizeUri('./example.jpg', /^https?$/i) // './example.jpg' -sanitizeUri('#a', /^https?$/i) // '#a' -``` - -## API - -This module exports the identifiers [`normalizeUri`][api-normalize-uri] and -[`sanitizeUri`][api-sanitize-uri]. -There is no default export. - -### `normalizeUri(value)` - -Normalize a URL. - -Encode unsafe characters with percent-encoding, skipping already encoded -sequences. - -###### Parameters - -* `value` (`string`) - — URI to normalize - -###### Returns - -Normalized URI (`string`). - -### `sanitizeUri(url[, pattern])` - -Make a value safe for injection as a URL. - -This encodes unsafe characters with percent-encoding and skips already -encoded sequences (see [`normalizeUri`][api-normalize-uri]). -Further unsafe characters are encoded as character references (see -[`micromark-util-encode`][micromark-util-encode]). - -A regex of allowed protocols can be given, in which case the URL is sanitized. -For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or -`/^https?$/i` for `img[src]` (this is what `github.com` allows). -If the URL includes an unknown protocol (one not matched by `protocol`, such -as a dangerous example, `javascript:`), the value is ignored. - -###### Parameters - -* `url` (`string`) - — URI to sanitize -* `pattern` (`RegExp`, optional) - — allowed protocols - -###### Returns - -Sanitized URI (`string`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-sanitize-uri@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-sanitize-uri.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-sanitize-uri - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-sanitize-uri - -[bundle-size]: https://bundlejs.com/?q=micromark-util-sanitize-uri - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[micromark-util-encode]: https://github.com/micromark/micromark/tree/main/packages/micromark-util-encode - -[api-normalize-uri]: #normalizeurivalue - -[api-sanitize-uri]: #sanitizeuriurl-pattern diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts b/node_modules/micromark-util-subtokenize/dev/index.d.ts deleted file mode 100644 index b252238a88..0000000000 --- a/node_modules/micromark-util-subtokenize/dev/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -export function subtokenize(eventsArray: Array): boolean; -export { SpliceBuffer } from "./lib/splice-buffer.js"; -import type { Event } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.d.ts.map b/node_modules/micromark-util-subtokenize/dev/index.d.ts.map deleted file mode 100644 index 1738691d8e..0000000000 --- a/node_modules/micromark-util-subtokenize/dev/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/dev/index.js b/node_modules/micromark-util-subtokenize/dev/index.js deleted file mode 100644 index f506fd9a12..0000000000 --- a/node_modules/micromark-util-subtokenize/dev/index.js +++ /dev/null @@ -1,272 +0,0 @@ -/** - * @import {Chunk, Event, Token} from 'micromark-util-types' - */ - -import {ok as assert} from 'devlop' -import {splice} from 'micromark-util-chunked' -import {codes, types} from 'micromark-util-symbol' -import {SpliceBuffer} from './lib/splice-buffer.js' - -// Hidden API exposed for testing. -export {SpliceBuffer} from './lib/splice-buffer.js' - -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -// eslint-disable-next-line complexity -export function subtokenize(eventsArray) { - /** @type {Record} */ - const jumps = {} - let index = -1 - /** @type {Event} */ - let event - /** @type {number | undefined} */ - let lineIndex - /** @type {number} */ - let otherIndex - /** @type {Event} */ - let otherEvent - /** @type {Array} */ - let parameters - /** @type {Array} */ - let subevents - /** @type {boolean | undefined} */ - let more - const events = new SpliceBuffer(eventsArray) - - while (++index < events.length) { - while (index in jumps) { - index = jumps[index] - } - - event = events.get(index) - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if ( - index && - event[1].type === types.chunkFlow && - events.get(index - 1)[1].type === types.listItemPrefix - ) { - assert(event[1]._tokenizer, 'expected `_tokenizer` on subtokens') - subevents = event[1]._tokenizer.events - otherIndex = 0 - - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === types.lineEndingBlank - ) { - otherIndex += 2 - } - - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === types.content - ) { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === types.content) { - break - } - - if (subevents[otherIndex][1].type === types.chunkText) { - subevents[otherIndex][1]._isInFirstContentOfListItem = true - otherIndex++ - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)) - index = jumps[index] - more = true - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index - lineIndex = undefined - - while (otherIndex--) { - otherEvent = events.get(otherIndex) - - if ( - otherEvent[1].type === types.lineEnding || - otherEvent[1].type === types.lineEndingBlank - ) { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events.get(lineIndex)[1].type = types.lineEndingBlank - } - - otherEvent[1].type = types.lineEnding - lineIndex = otherIndex - } - } else if (otherEvent[1].type === types.linePrefix) { - // Move past. - } else { - break - } - } - - if (lineIndex) { - // Fix position. - event[1].end = {...events.get(lineIndex)[1].start} - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index) - parameters.unshift(event) - events.splice(lineIndex, index - lineIndex + 1, parameters) - } - } - } - - // The changes to the `events` buffer must be copied back into the eventsArray - splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)) - return !more -} - -/** - * Tokenize embedded tokens. - * - * @param {SpliceBuffer} events - * Events. - * @param {number} eventIndex - * Index. - * @returns {Record} - * Gaps. - */ -function subcontent(events, eventIndex) { - const token = events.get(eventIndex)[1] - const context = events.get(eventIndex)[2] - let startPosition = eventIndex - 1 - /** @type {Array} */ - const startPositions = [] - assert(token.contentType, 'expected `contentType` on subtokens') - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start) - const childEvents = tokenizer.events - /** @type {Array<[number, number]>} */ - const jumps = [] - /** @type {Record} */ - const gaps = {} - /** @type {Array} */ - let stream - /** @type {Token | undefined} */ - let previous - let index = -1 - /** @type {Token | undefined} */ - let current = token - let adjust = 0 - let start = 0 - const breaks = [start] - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events.get(++startPosition)[1] !== current) { - // Empty. - } - - assert( - !previous || current.previous === previous, - 'expected previous to match' - ) - assert(!previous || previous.next === current, 'expected next to match') - - startPositions.push(startPosition) - - if (!current._tokenizer) { - stream = context.sliceStream(current) - - if (!current.next) { - stream.push(codes.eof) - } - - if (previous) { - tokenizer.defineSkip(current.start) - } - - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true - } - - tokenizer.write(stream) - - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined - } - } - - // Unravel the next token. - previous = current - current = current.next - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token - - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { - assert(current, 'expected a current token') - start = index + 1 - breaks.push(start) - // Help GC. - current._tokenizer = undefined - current.previous = undefined - current = current.next - } - } - - // Help GC. - tokenizer.events = [] - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined - current.previous = undefined - assert(!current.next, 'expected no next token') - } else { - breaks.pop() - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length - - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]) - const start = startPositions.pop() - assert(start !== undefined, 'expected a start position when splicing') - jumps.push([start, start + slice.length - 1]) - events.splice(start, 2, slice) - } - - jumps.reverse() - index = -1 - - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] - adjust += jumps[index][1] - jumps[index][0] - 1 - } - - return gaps -} diff --git a/node_modules/micromark-util-subtokenize/index.d.ts b/node_modules/micromark-util-subtokenize/index.d.ts deleted file mode 100644 index b252238a88..0000000000 --- a/node_modules/micromark-util-subtokenize/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -export function subtokenize(eventsArray: Array): boolean; -export { SpliceBuffer } from "./lib/splice-buffer.js"; -import type { Event } from 'micromark-util-types'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.d.ts.map b/node_modules/micromark-util-subtokenize/index.d.ts.map deleted file mode 100644 index 1738691d8e..0000000000 --- a/node_modules/micromark-util-subtokenize/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AAEH,yCANW,KAAK,CAAC,KAAK,CAAC,GAEV,OAAO,CAoHnB;;2BApIqC,sBAAsB"} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/index.js b/node_modules/micromark-util-subtokenize/index.js deleted file mode 100644 index de77c382c2..0000000000 --- a/node_modules/micromark-util-subtokenize/index.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * @import {Chunk, Event, Token} from 'micromark-util-types' - */ - -import { splice } from 'micromark-util-chunked'; -import { SpliceBuffer } from './lib/splice-buffer.js'; - -// Hidden API exposed for testing. -export { SpliceBuffer } from './lib/splice-buffer.js'; - -/** - * Tokenize subcontent. - * - * @param {Array} eventsArray - * List of events. - * @returns {boolean} - * Whether subtokens were found. - */ -// eslint-disable-next-line complexity -export function subtokenize(eventsArray) { - /** @type {Record} */ - const jumps = {}; - let index = -1; - /** @type {Event} */ - let event; - /** @type {number | undefined} */ - let lineIndex; - /** @type {number} */ - let otherIndex; - /** @type {Event} */ - let otherEvent; - /** @type {Array} */ - let parameters; - /** @type {Array} */ - let subevents; - /** @type {boolean | undefined} */ - let more; - const events = new SpliceBuffer(eventsArray); - while (++index < events.length) { - while (index in jumps) { - index = jumps[index]; - } - event = events.get(index); - - // Add a hook for the GFM tasklist extension, which needs to know if text - // is in the first content of a list item. - if (index && event[1].type === "chunkFlow" && events.get(index - 1)[1].type === "listItemPrefix") { - subevents = event[1]._tokenizer.events; - otherIndex = 0; - if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { - otherIndex += 2; - } - if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { - while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === "content") { - break; - } - if (subevents[otherIndex][1].type === "chunkText") { - subevents[otherIndex][1]._isInFirstContentOfListItem = true; - otherIndex++; - } - } - } - } - - // Enter. - if (event[0] === 'enter') { - if (event[1].contentType) { - Object.assign(jumps, subcontent(events, index)); - index = jumps[index]; - more = true; - } - } - // Exit. - else if (event[1]._container) { - otherIndex = index; - lineIndex = undefined; - while (otherIndex--) { - otherEvent = events.get(otherIndex); - if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { - if (otherEvent[0] === 'enter') { - if (lineIndex) { - events.get(lineIndex)[1].type = "lineEndingBlank"; - } - otherEvent[1].type = "lineEnding"; - lineIndex = otherIndex; - } - } else if (otherEvent[1].type === "linePrefix") { - // Move past. - } else { - break; - } - } - if (lineIndex) { - // Fix position. - event[1].end = { - ...events.get(lineIndex)[1].start - }; - - // Switch container exit w/ line endings. - parameters = events.slice(lineIndex, index); - parameters.unshift(event); - events.splice(lineIndex, index - lineIndex + 1, parameters); - } - } - } - - // The changes to the `events` buffer must be copied back into the eventsArray - splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)); - return !more; -} - -/** - * Tokenize embedded tokens. - * - * @param {SpliceBuffer} events - * Events. - * @param {number} eventIndex - * Index. - * @returns {Record} - * Gaps. - */ -function subcontent(events, eventIndex) { - const token = events.get(eventIndex)[1]; - const context = events.get(eventIndex)[2]; - let startPosition = eventIndex - 1; - /** @type {Array} */ - const startPositions = []; - const tokenizer = token._tokenizer || context.parser[token.contentType](token.start); - const childEvents = tokenizer.events; - /** @type {Array<[number, number]>} */ - const jumps = []; - /** @type {Record} */ - const gaps = {}; - /** @type {Array} */ - let stream; - /** @type {Token | undefined} */ - let previous; - let index = -1; - /** @type {Token | undefined} */ - let current = token; - let adjust = 0; - let start = 0; - const breaks = [start]; - - // Loop forward through the linked tokens to pass them in order to the - // subtokenizer. - while (current) { - // Find the position of the event for this token. - while (events.get(++startPosition)[1] !== current) { - // Empty. - } - startPositions.push(startPosition); - if (!current._tokenizer) { - stream = context.sliceStream(current); - if (!current.next) { - stream.push(null); - } - if (previous) { - tokenizer.defineSkip(current.start); - } - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = true; - } - tokenizer.write(stream); - if (current._isInFirstContentOfListItem) { - tokenizer._gfmTasklistFirstContentOfListItem = undefined; - } - } - - // Unravel the next token. - previous = current; - current = current.next; - } - - // Now, loop back through all events (and linked tokens), to figure out which - // parts belong where. - current = token; - while (++index < childEvents.length) { - if ( - // Find a void token that includes a break. - childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) { - start = index + 1; - breaks.push(start); - // Help GC. - current._tokenizer = undefined; - current.previous = undefined; - current = current.next; - } - } - - // Help GC. - tokenizer.events = []; - - // If there’s one more token (which is the cases for lines that end in an - // EOF), that’s perfect: the last point we found starts it. - // If there isn’t then make sure any remaining content is added to it. - if (current) { - // Help GC. - current._tokenizer = undefined; - current.previous = undefined; - } else { - breaks.pop(); - } - - // Now splice the events from the subtokenizer into the current events, - // moving back to front so that splice indices aren’t affected. - index = breaks.length; - while (index--) { - const slice = childEvents.slice(breaks[index], breaks[index + 1]); - const start = startPositions.pop(); - jumps.push([start, start + slice.length - 1]); - events.splice(start, 2, slice); - } - jumps.reverse(); - index = -1; - while (++index < jumps.length) { - gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; - adjust += jumps[index][1] - jumps[index][0] - 1; - } - return gaps; -} \ No newline at end of file diff --git a/node_modules/micromark-util-subtokenize/license b/node_modules/micromark-util-subtokenize/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-subtokenize/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-subtokenize/package.json b/node_modules/micromark-util-subtokenize/package.json deleted file mode 100644 index f68102cc5a..0000000000 --- a/node_modules/micromark-util-subtokenize/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "micromark-util-subtokenize", - "version": "2.0.4", - "description": "micromark utility to tokenize subtokens", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "tokenize" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-subtokenize", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "dev/", - "lib/", - "index.d.ts.map", - "index.d.ts", - "index.js" - ], - "exports": { - "development": "./dev/index.js", - "default": "./index.js" - }, - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "scripts": { - "build": "micromark-build" - }, - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "max-depth": "off", - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-subtokenize/readme.md b/node_modules/micromark-util-subtokenize/readme.md deleted file mode 100644 index 388e423542..0000000000 --- a/node_modules/micromark-util-subtokenize/readme.md +++ /dev/null @@ -1,181 +0,0 @@ -# micromark-util-subtokenize - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility to tokenize subtokens. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`subtokenize(events)`](#subtokenizeevents) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes a micromark internal that you probably don’t need. - -## When should I use this? - -This package might be useful when you are making your own micromark extensions. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-subtokenize -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {subtokenize} from 'https://esm.sh/micromark-util-subtokenize@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {subtokenize} from 'micromark-util-subtokenize' - -/** - * Content is transparent: it’s parsed right now. That way, definitions are also - * parsed right now: before text in paragraphs (specifically, media) are parsed. - * - * @type {Resolver} - */ -function resolveContent(events) { - subtokenize(events) - return events -} -``` - -## API - -This module exports the identifiers [`subtokenize`][api-subtokenize]. -There is no default export. - -### `subtokenize(events)` - -Tokenize subcontent. - -###### Parameters - -* `events` (`Array`) - — list of events - -###### Returns - -Whether subtokens were found (`boolean`). - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-subtokenize@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-subtokenize.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-subtokenize - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-subtokenize - -[bundle-size]: https://bundlejs.com/?q=micromark-util-subtokenize - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[api-subtokenize]: #subtokenizeevents diff --git a/node_modules/micromark-util-symbol/license b/node_modules/micromark-util-symbol/license deleted file mode 100644 index bc8f165a62..0000000000 --- a/node_modules/micromark-util-symbol/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/micromark-util-symbol/package.json b/node_modules/micromark-util-symbol/package.json deleted file mode 100644 index b557140a60..0000000000 --- a/node_modules/micromark-util-symbol/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "micromark-util-symbol", - "version": "2.0.1", - "description": "micromark utility with symbols", - "license": "MIT", - "keywords": [ - "micromark", - "util", - "utility", - "symbol" - ], - "repository": "https://github.com/micromark/micromark/tree/main/packages/micromark-util-symbol", - "bugs": "https://github.com/micromark/micromark/issues", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "files": [ - "lib/" - ], - "exports": "./lib/default.js", - "xo": { - "envs": [ - "shared-node-browser" - ], - "prettier": true, - "rules": { - "unicorn/prefer-code-point": "off" - } - } -} diff --git a/node_modules/micromark-util-symbol/readme.md b/node_modules/micromark-util-symbol/readme.md deleted file mode 100644 index 4bad177259..0000000000 --- a/node_modules/micromark-util-symbol/readme.md +++ /dev/null @@ -1,168 +0,0 @@ -# micromark-util-symbol - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][bundle-size-badge]][bundle-size] -[![Sponsors][sponsors-badge]][opencollective] -[![Backers][backers-badge]][opencollective] -[![Chat][chat-badge]][chat] - -[micromark][] utility with symbols. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This package exposes constants used throughout the micromark ecosystem. - -## When should I use this? - -This package is useful when you are making your own micromark extensions. -It’s useful to reference these constants by name instead of value while -developing. -[`micromark-build`][micromark-build] compiles them away for production code. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 16+), install with [npm][]: - -```sh -npm install micromark-util-symbol -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import * as symbol from 'https://esm.sh/micromark-util-symbol@1' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {codes, constants, types, values} from 'micromark-util-symbol' - -console.log(codes.atSign) // 64 -console.log(constants.characterReferenceNamedSizeMax) // 31 -console.log(types.definitionDestinationRaw) // 'definitionDestinationRaw' -console.log(values.atSign) // '@' -``` - -## API - -This package exports the identifiers `codes`, `constants`, `types`, and -`values`. -There is no default export. - -Each identifier is an object mapping strings to values. -See the code for the exposed data. - -## Types - -This package is fully typed with [TypeScript][]. -It exports no additional types. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, -`micromark-util-symbol@2`, compatible with Node.js 16. -This package works with `micromark@3`. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark-util-symbol.svg - -[downloads]: https://www.npmjs.com/package/micromark-util-symbol - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark-util-symbol - -[bundle-size]: https://bundlejs.com/?q=micromark-util-symbol - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[typescript]: https://www.typescriptlang.org - -[micromark]: https://github.com/micromark/micromark - -[micromark-build]: https://github.com/micromark/micromark/tree/main/packages/micromark-build diff --git a/node_modules/micromark-util-types/index.d.ts b/node_modules/micromark-util-types/index.d.ts deleted file mode 100644 index 3da4c708ee..0000000000 --- a/node_modules/micromark-util-types/index.d.ts +++ /dev/null @@ -1,1294 +0,0 @@ -// Note: this file is authored manually, not generated from `index.js`. - -/** - * A character code. - * - * This is often the same as what `String#charCodeAt()` yields but micromark - * adds meaning to certain other values. - * - * `null` represents the end of the input stream (called eof). - * Negative integers are used instead of certain sequences of characters (such - * as line endings and tabs). - */ -export type Code = number | null - -/** - * A chunk is either a character code or a slice of a buffer in the form of a - * string. - * - * Chunks are used because strings are more efficient storage that character - * codes, but limited in what they can represent. - */ -export type Chunk = Code | string - -/** - * Enumeration of the content types. - * - * Technically `document` is also a content type, which includes containers - * (lists, block quotes) and flow. - * As `ContentType` is used on tokens to define the type of subcontent but - * `document` is the highest level of content, so it’s not listed here. - * - * Containers in markdown come from the margin and include more constructs - * on the lines that define them. - * Take for example a block quote with a paragraph inside it (such as - * `> asd`). - * - * `flow` represents the sections, such as headings, code, and content, which - * is also parsed per line - * An example is HTML, which has a certain starting condition (such as - * ` -``` - -## Use - - - -Typical use (buffering): - -```js -import {micromark} from 'micromark' - -console.log(micromark('## Hello, *world*!')) -``` - -Yields: - -```html -

                  Hello, world!

                  -``` - -You can pass extensions (in this case [`micromark-extension-gfm`][gfm]): - -```js -import {micromark} from 'micromark' -import {gfmHtml, gfm} from 'micromark-extension-gfm' - -const value = '* [x] contact@example.com ~~strikethrough~~' - -const result = micromark(value, { - extensions: [gfm()], - htmlExtensions: [gfmHtml()] -}) - -console.log(result) -``` - -Yields: - -```html -
                  -``` - -Streaming interface: - -```js -import {createReadStream} from 'node:fs' -import {stream} from 'micromark/stream' - -createReadStream('example.md') - .on('error', handleError) - .pipe(stream()) - .pipe(process.stdout) - -function handleError(error) { - // Handle your error here! - throw error -} -``` - -## API - -`micromark` core has two entries in its export map: `micromark` and -`micromark/stream`. - -`micromark` exports the identifier [`micromark`][api-micromark]. -`micromark/stream` exports the identifier [`stream`][api-stream]. -There are no default exports. - -The export map supports the [`development` condition][development]. -Run `node --conditions development module.js` to get instrumented dev code. -Without this condition, production code is loaded. -See [§ Size & debug][size-debug] for more info. - -### `micromark(value[, encoding][, options])` - -Compile markdown to HTML. - -> Note: which encodings are supported depends on the engine. -> For info on Node.js, see *[WHATWG supported encodings][encoding]*. - -###### Parameters - -* `value` (`string` or [`Uint8Array`][uint8-array]) - — markdown to parse -* `encoding` (`string`, default: `'utf8'`) - — [character encoding][encoding] to understand `value` as when it’s a - [`Uint8Array`][uint8-array] -* `options` ([`Options`][api-options], optional) - — configuration - -###### Returns - -Compiled HTML (`string`). - -### `stream(options?)` - -Create a duplex (readable and writable) stream. - -Some of the work to parse markdown can be done streaming, but in the -end buffering is required. - -micromark does not handle errors for you, so you must handle errors on whatever -streams you pipe into it. -As markdown does not know errors, `micromark` itself does not emit errors. - -###### Parameters - -* `options` ([`Options`][api-options], optional) - — configuration - -###### Returns - -Duplex stream. - -### `Options` - -Configuration (TypeScript type). - -##### Fields - -###### `allowDangerousHtml` - -Whether to allow (dangerous) HTML (`boolean`, default: `false`). - -The default is `false`, which still parses the HTML according to `CommonMark` -but shows the HTML as text instead of as elements. - -Pass `true` for trusted content to get actual HTML elements. -See [§ Security][security]. - -###### `allowDangerousProtocol` - -Whether to allow dangerous protocols in links and images (`boolean`, default: -`false`). - -The default is `false`, which drops URLs in links and images that use dangerous -protocols. - -Pass `true` for trusted content to support all protocols. - -URLs that have no protocol (which means it’s relative to the current page, such -as `./some/page.html`) and URLs that have a safe protocol (for images: `http`, -`https`; for links: `http`, `https`, `irc`, `ircs`, `mailto`, `xmpp`), are -safe. -All other URLs are dangerous and dropped. -See [§ Security][security]. - -###### `defaultLineEnding` - -Default line ending to use when compiling to HTML, for line endings not in -`value` (`'\r'`, `'\n'`, or `'\r\n'`; default: first line ending or `'\n'`). - -Generally, `micromark` copies line endings (`\r`, `\n`, `\r\n`) in the markdown -document over to the compiled HTML. -In some cases, such as `> a`, CommonMark requires that extra line endings are -added: `
                  \n

                  a

                  \n
                  `. - -To create that line ending, the document is checked for the first line ending -that is used. -If there is no line ending, `defaultLineEnding` is used. -If that isn’t configured, `\n` is used. - -###### `extensions` - -Array of syntax extensions (`Array`, default: `[]`). -See [§ Extensions][extensions]. - -###### `htmlExtensions` - -Array of syntax extensions (`Array`, default: `[]`). -See [§ Extensions][extensions]. - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional type [`Options`][api-options]. - -## Compatibility - -Projects maintained by the unified collective are compatible with maintained -versions of Node.js. - -When we cut a new major release, we drop support for unmaintained versions of -Node. -This means we try to keep the current release line, `micromark@4`, compatible -with Node.js 16. - -## Security - -This package is safe. -See [`security.md`][securitymd] in [`micromark/.github`][health] for how to -submit a security report. - -## Contribute - -See [`contributing.md`][contributing] in [`micromark/.github`][health] for ways -to get started. -See [`support.md`][support] for ways to get help. - -This project has a [code of conduct][coc]. -By interacting with this repository, organisation, or community you agree to -abide by its terms. - -## Sponsor - - - -Support this effort and give back by sponsoring on [OpenCollective][]! - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  -
                  - Salesforce 🏅

                  - -
                  - Vercel

                  - -
                  - Motif

                  - -
                  - HashiCorp

                  - -
                  - GitBook

                  - -
                  - Gatsby

                  - -
                  - Netlify

                  - - -
                  - Coinbase

                  - -
                  - ThemeIsle

                  - -
                  - Expo

                  - -
                  - Boost Note

                  - -
                  - Markdown Space

                  - -
                  - Holloway

                  - -
                  -
                  - You? -

                  -
                  - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/micromark/micromark/workflows/main/badge.svg - -[build]: https://github.com/micromark/micromark/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/micromark/micromark.svg - -[coverage]: https://codecov.io/github/micromark/micromark - -[downloads-badge]: https://img.shields.io/npm/dm/micromark.svg - -[downloads]: https://www.npmjs.com/package/micromark - -[bundle-size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=micromark - -[bundle-size]: https://bundlejs.com/?q=micromark - -[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg - -[backers-badge]: https://opencollective.com/unified/backers/badge.svg - -[opencollective]: https://opencollective.com/unified - -[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg - -[chat]: https://github.com/micromark/micromark/discussions - -[npm]: https://docs.npmjs.com/cli/install - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[esmsh]: https://esm.sh - -[typescript]: https://www.typescriptlang.org - -[development]: https://nodejs.org/api/packages.html#packages_resolving_user_conditions - -[license]: https://github.com/micromark/micromark/blob/main/license - -[author]: https://wooorm.com - -[health]: https://github.com/micromark/.github - -[securitymd]: https://github.com/micromark/.github/blob/main/security.md - -[contributing]: https://github.com/micromark/.github/blob/main/contributing.md - -[support]: https://github.com/micromark/.github/blob/main/support.md - -[coc]: https://github.com/micromark/.github/blob/main/code-of-conduct.md - -[cheat]: https://commonmark.org/help/ - -[twitter]: https://twitter.com/unifiedjs - -[site]: https://unifiedjs.com - -[contribute]: #contribute - -[uint8-array]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array - -[encoding]: https://nodejs.org/api/util.html#whatwg-supported-encodings - -[commonmark]: https://commonmark.org - -[directives]: https://github.com/micromark/micromark-extension-directive - -[frontmatter]: https://github.com/micromark/micromark-extension-frontmatter - -[gfm]: https://github.com/micromark/micromark-extension-gfm - -[math]: https://github.com/micromark/micromark-extension-math - -[mdxjs]: https://github.com/micromark/micromark-extension-mdxjs - -[security]: #security - -[sponsor]: #sponsor - -[micromark]: https://github.com/micromark/micromark - -[extensions]: https://github.com/micromark/micromark#extensions - -[test]: https://github.com/micromark/micromark#test - -[size-debug]: https://github.com/micromark/micromark#size--debug - -[comparison]: https://github.com/micromark/micromark#comparison - -[markdown-rs]: https://github.com/wooorm/markdown-rs - -[mdast-util-to-markdown]: https://github.com/syntax-tree/mdast-util-to-markdown - -[api-micromark]: #micromarkvalue-encoding-options - -[api-stream]: #streamoptions - -[api-options]: #options diff --git a/node_modules/micromark/stream.d.ts b/node_modules/micromark/stream.d.ts deleted file mode 100644 index 2b05447e81..0000000000 --- a/node_modules/micromark/stream.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Create a duplex (readable and writable) stream. - * - * Some of the work to parse markdown can be done streaming, but in the - * end buffering is required. - * - * micromark does not handle errors for you, so you must handle errors on whatever - * streams you pipe into it. - * As markdown does not know errors, `micromark` itself does not emit errors. - * - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {MinimalDuplex} - * Duplex stream. - */ -export function stream(options?: Options | null | undefined): MinimalDuplex; -export type Options = import("micromark-util-types").Options; -/** - * Function called when write was successful. - */ -export type Callback = () => undefined; -/** - * Configuration for piping. - */ -export type PipeOptions = { - /** - * Whether to end the destination stream when the source stream ends. - */ - end?: boolean | null | undefined; -}; -/** - * Duplex stream. - */ -export type MinimalDuplex = Omit; -//# sourceMappingURL=stream.d.ts.map \ No newline at end of file diff --git a/node_modules/micromark/stream.d.ts.map b/node_modules/micromark/stream.d.ts.map deleted file mode 100644 index f89c748fa5..0000000000 --- a/node_modules/micromark/stream.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["stream.js"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;;;GAcG;AACH,iCALW,OAAO,GAAG,IAAI,GAAG,SAAS,GAExB,aAAa,CAoOzB;sBAxQY,OAAO,sBAAsB,EAAE,OAAO;;;;6BAMtC,SAAS;;;;;;;;UAKR,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;4BAG3B,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC"} \ No newline at end of file diff --git a/node_modules/micromark/stream.js b/node_modules/micromark/stream.js deleted file mode 100644 index 7561620013..0000000000 --- a/node_modules/micromark/stream.js +++ /dev/null @@ -1,256 +0,0 @@ -/** - * @import {Encoding, Value} from 'micromark-util-types' - */ - -/** - * @typedef {import('micromark-util-types').Options} Options - */ - -/** - * @callback Callback - * Function called when write was successful. - * @returns {undefined} - * Nothing. - * - * @typedef PipeOptions - * Configuration for piping. - * @property {boolean | null | undefined} [end] - * Whether to end the destination stream when the source stream ends. - * - * @typedef {Omit} MinimalDuplex - * Duplex stream. - */ - -import { EventEmitter } from 'node:events'; -import { compile } from './lib/compile.js'; -import { parse } from './lib/parse.js'; -import { postprocess } from './lib/postprocess.js'; -import { preprocess } from './lib/preprocess.js'; - -/** - * Create a duplex (readable and writable) stream. - * - * Some of the work to parse markdown can be done streaming, but in the - * end buffering is required. - * - * micromark does not handle errors for you, so you must handle errors on whatever - * streams you pipe into it. - * As markdown does not know errors, `micromark` itself does not emit errors. - * - * @param {Options | null | undefined} [options] - * Configuration (optional). - * @returns {MinimalDuplex} - * Duplex stream. - */ -export function stream(options) { - const prep = preprocess(); - const tokenize = parse(options).document().write; - const comp = compile(options); - /** @type {boolean} */ - let ended; - const emitter = /** @type {MinimalDuplex} */new EventEmitter(); - // @ts-expect-error: fine. - emitter.end = end; - emitter.pipe = pipe; - emitter.readable = true; - emitter.writable = true; - // @ts-expect-error: fine. - emitter.write = write; - return emitter; - - /** - * Write a chunk into memory. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - */ - function write(chunk, encoding, callback) { - if (typeof encoding === 'function') { - callback = encoding; - encoding = undefined; - } - if (ended) { - throw new Error('Did not expect `write` after `end`'); - } - tokenize(prep(chunk || '', encoding)); - if (callback) { - callback(); - } - - // Signal successful write. - return true; - } - - /** - * End the writing. - * - * Passes all arguments as a final `write`. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @overload - * @param {Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @overload - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - * - * @param {Callback | Value | null | undefined} [chunk] - * Slice of markdown to parse (`string` or `Uint8Array`). - * @param {Callback | Encoding | null | undefined} [encoding] - * Character encoding to understand `chunk` as when it’s a `Uint8Array` - * (`string`, default: `'utf8'`). - * @param {Callback | null | undefined} [callback] - * Function called when write was successful. - * @returns {boolean} - * Whether write was successful. - */ - function end(chunk, encoding, callback) { - if (typeof chunk === 'function') { - encoding = chunk; - chunk = undefined; - } - if (typeof encoding === 'function') { - callback = encoding; - encoding = undefined; - } - write(chunk, encoding, callback); - emitter.emit('data', comp(postprocess(tokenize(prep('', encoding, true))))); - emitter.emit('end'); - ended = true; - return true; - } - - /** - * Pipe the processor into a writable stream. - * - * Basically `Stream#pipe`, but inlined and simplified to keep the bundled - * size down. - * See: . - * - * @template {NodeJS.WritableStream} Stream - * Writable stream. - * @param {Stream} destination - * Stream to pipe into. - * @param {PipeOptions | null | undefined} [options] - * Configuration. - * @returns {Stream} - * Destination stream. - */ - function pipe(destination, options) { - emitter.on('data', ondata); - emitter.on('error', onerror); - emitter.on('end', cleanup); - emitter.on('close', cleanup); - - // If the `end` option is not supplied, `destination.end()` will be - // called when the `end` or `close` events are received. - // @ts-expect-error `_isStdio` is available on `std{err,out}` - if (!destination._isStdio && (!options || options.end !== false)) { - emitter.on('end', onend); - } - destination.on('error', onerror); - destination.on('close', cleanup); - destination.emit('pipe', emitter); - return destination; - - /** - * End destination stream. - * - * @returns {undefined} - * Nothing. - */ - function onend() { - if (destination.end) { - destination.end(); - } - } - - /** - * Handle data. - * - * @param {string} chunk - * Data. - * @returns {undefined} - * Nothing. - */ - function ondata(chunk) { - if (destination.writable) { - destination.write(chunk); - } - } - - /** - * Clean listeners. - * - * @returns {undefined} - * Nothing. - */ - function cleanup() { - emitter.removeListener('data', ondata); - emitter.removeListener('end', onend); - emitter.removeListener('error', onerror); - emitter.removeListener('end', cleanup); - emitter.removeListener('close', cleanup); - destination.removeListener('error', onerror); - destination.removeListener('close', cleanup); - } - - /** - * Close dangling pipes and handle unheard errors. - * - * @param {Error | null | undefined} [error] - * Error, if any. - * @returns {undefined} - * Nothing. - */ - function onerror(error) { - cleanup(); - if (!emitter.listenerCount('error')) { - throw error; // Unhandled stream error in pipe. - } - } - } -} \ No newline at end of file diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE deleted file mode 100644 index 1493534e60..0000000000 --- a/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md deleted file mode 100644 index 3c97a02fbe..0000000000 --- a/node_modules/minimatch/README.md +++ /dev/null @@ -1,454 +0,0 @@ -# minimatch - -A minimal matching utility. - -This is the matching library used internally by npm. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```js -// hybrid module, load with require() or import -import { minimatch } from 'minimatch' -// or: -const { minimatch } = require('minimatch') - -minimatch('bar.foo', '*.foo') // true! -minimatch('bar.foo', '*.bar') // false! -minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -- Brace Expansion -- Extended glob matching -- "Globstar" `**` matching -- [Posix character - classes](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html), - like `[[:alpha:]]`, supporting the full range of Unicode - characters. For example, `[[:alpha:]]` will match against - `'é'`, though `[a-zA-Z]` will not. Collating symbol and set - matching is not supported, so `[[=e=]]` will _not_ match `'é'` - and `[[.ch.]]` will not match `'ch'` in locales where `ch` is - considered a single character. - -See: - -- `man sh` -- `man bash` [Pattern - Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) -- `man 3 fnmatch` -- `man 5 gitignore` - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes in patterns -will always be interpreted as escape characters, not path separators. - -Note that `\` or `/` _will_ be interpreted as path separators in paths on -Windows, and will match against `/` in glob expressions. - -So just always use `/` in patterns. - -### UNC Paths - -On Windows, UNC paths like `//?/c:/...` or -`//ComputerName/Share/...` are handled specially. - -- Patterns starting with a double-slash followed by some - non-slash characters will preserve their double-slash. As a - result, a pattern like `//*` will match `//x`, but not `/x`. -- Patterns staring with `//?/:` will _not_ treat - the `?` as a wildcard character. Instead, it will be treated - as a normal string. -- Patterns starting with `//?/:/...` will match - file paths starting with `:/...`, and vice versa, - as if the `//?/` was not present. This behavior only is - present when the drive letters are a case-insensitive match to - one another. The remaining portions of the path/pattern are - compared case sensitively, unless `nocase:true` is set. - -Note that specifying a UNC path using `\` characters as path -separators is always allowed in the file path argument, but only -allowed in the pattern argument when `windowsPathsNoEscape: true` -is set in the options. - -## Minimatch Class - -Create a minimatch object by instantiating the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require('minimatch').Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -- `pattern` The original pattern the minimatch object represents. -- `options` The options supplied to the constructor. -- `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -- `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -- `negate` True if the pattern is negated. -- `comment` True if the pattern is a comment. -- `empty` True if the pattern is `""`. - -### Methods - -- `makeRe()` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -- `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -- `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. -- `hasMagic()` Returns true if the parsed pattern contains any - magic characters. Returns false if all comparator parts are - string literals. If the `magicalBraces` option is set on the - constructor, then it will consider brace expansions which are - not otherwise magical to be magic. If not set, then a pattern - like `a{b,c}d` will return `false`, because neither `abd` nor - `acd` contain any special glob characters. - - This does **not** mean that the pattern string can be used as a - literal filename, as it may contain magic glob characters that - are escaped. For example, the pattern `\\*` or `[*]` would not - be considered to have magic, as the matching portion parses to - the literal string `'*'` and would match a path named `'*'`, - not `'\\*'` or `'[*]'`. The `minimatch.unescape()` method may - be used to remove escape characters. - -All other methods are internal, and will be called as necessary. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, '*.js', { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true })) -``` - -### minimatch.escape(pattern, options = {}) - -Escape all magic characters in a glob pattern, so that it will -only ever match literal strings - -If the `windowsPathsNoEscape` option is used, then characters are -escaped by wrapping in `[]`, because a magic character wrapped in -a character class can only be satisfied by that exact character. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -### minimatch.unescape(pattern, options = {}) - -Un-escape a glob string that may contain some escaped characters. - -If the `windowsPathsNoEscape` option is used, then square-brace -escapes are removed, but not backslash escapes. For example, it -will turn the string `'[*]'` into `*`, but it will not turn -`'\\*'` into `'*'`, because `\` is a path separator in -`windowsPathsNoEscape` mode. - -When `windowsPathsNoEscape` is not set, then both brace escapes -and backslash escapes are removed. - -Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot -be escaped or unescaped. - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, '*.js', { matchBase: true }) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nocaseMagicOnly - -When used with `{nocase: true}`, create regular expressions that -are case-insensitive, but leave string match portions untouched. -Has no effect when used without `{nocase: true}` - -Useful when some other form of case-insensitive matching is used, -or if the original string representation is useful in some other -way. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself if this option is set. When not set, an empty list -is returned if there are no matches. - -### magicalBraces - -This only affects the results of the `Minimatch.hasMagic` method. - -If the pattern contains brace expansions, such as `a{b,c}d`, but -no other magic characters, then the `Minimatch.hasMagic()` method -will return `false` by default. When this option set, it will -return `true` for brace expansion as well as other magic glob -characters. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - -### partial - -Compare a partial path to a pattern. As long as the parts of the path that -are present are not contradicted by the pattern, it will be treated as a -match. This is useful in applications where you're walking through a -folder structure, and don't yet have the full path, but want to ensure that -you do not walk down paths that can never be a match. - -For example, - -```js -minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d -minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d -minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a -``` - -### windowsPathsNoEscape - -Use `\\` as a path separator _only_, and _never_ as an escape -character. If set, all `\\` characters are replaced with `/` in -the pattern. Note that this makes it **impossible** to match -against paths containing literal glob pattern characters, but -allows matching with patterns constructed using `path.join()` and -`path.resolve()` on Windows platforms, mimicking the (buggy!) -behavior of earlier versions on Windows. Please use with -caution, and be mindful of [the caveat about Windows -paths](#windows). - -For legacy reasons, this is also set if -`options.allowWindowsEscape` is set to the exact value `false`. - -### windowsNoMagicRoot - -When a pattern starts with a UNC path or drive letter, and in -`nocase:true` mode, do not convert the root portions of the -pattern into a case-insensitive regular expression, and instead -leave them as strings. - -This is the default when the platform is `win32` and -`nocase:true` is set. - -### preserveMultipleSlashes - -By default, multiple `/` characters (other than the leading `//` -in a UNC path, see "UNC Paths" above) are treated as a single -`/`. - -That is, a pattern like `a///b` will match the file path `a/b`. - -Set `preserveMultipleSlashes: true` to suppress this behavior. - -### optimizationLevel - -A number indicating the level of optimization that should be done -to the pattern prior to parsing and using it for matches. - -Globstar parts `**` are always converted to `*` when `noglobstar` -is set, and multiple adjacent `**` parts are converted into a -single `**` (ie, `a/**/**/b` will be treated as `a/**/b`, as this -is equivalent in all cases). - -- `0` - Make no further changes. In this mode, `.` and `..` are - maintained in the pattern, meaning that they must also appear - in the same position in the test path string. Eg, a pattern - like `a/*/../c` will match the string `a/b/../c` but not the - string `a/c`. -- `1` - (default) Remove cases where a double-dot `..` follows a - pattern portion that is not `**`, `.`, `..`, or empty `''`. For - example, the pattern `./a/b/../*` is converted to `./a/*`, and - so it will match the path string `./a/c`, but not the path - string `./a/b/../c`. Dots and empty path portions in the - pattern are preserved. -- `2` (or higher) - Much more aggressive optimizations, suitable - for use with file-walking cases: - - - Remove cases where a double-dot `..` follows a pattern - portion that is not `**`, `.`, or empty `''`. Remove empty - and `.` portions of the pattern, where safe to do so (ie, - anywhere other than the last position, the first position, or - the second position in a pattern starting with `/`, as this - may indicate a UNC path on Windows). - - Convert patterns containing `
                  /**/../

                  /` into the - equivalent `

                  /{..,**}/

                  /`, where `

                  ` is a - a pattern portion other than `.`, `..`, `**`, or empty - `''`. - - Dedupe patterns where a `**` portion is present in one and - omitted in another, and it is not the final path portion, and - they are otherwise equivalent. So `{a/**/b,a/b}` becomes - `a/**/b`, because `**` matches against an empty path portion. - - Dedupe patterns where a `*` portion is present in one, and a - non-dot pattern other than `**`, `.`, `..`, or `''` is in the - same position in the other. So `a/{*,x}/b` becomes `a/*/b`, - because `*` can match against `x`. - - While these optimizations improve the performance of - file-walking use cases such as [glob](http://npm.im/glob) (ie, - the reason this module exists), there are cases where it will - fail to match a literal string that would have been matched in - optimization level 1 or 0. - - Specifically, while the `Minimatch.match()` method will - optimize the file path string in the same ways, resulting in - the same matches, it will fail when tested with the regular - expression provided by `Minimatch.makeRe()`, unless the path - string is first processed with - `minimatch.levelTwoFileOptimize()` or similar. - -### platform - -When set to `win32`, this will trigger all windows-specific -behaviors (special handling for UNC paths, and treating `\` as -separators in file paths for comparison.) - -Defaults to the value of `process.platform`. - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a -worthwhile goal, some discrepancies exist between minimatch and -other implementations. Some are intentional, and some are -unavoidable. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -Negated extglob patterns are handled as closely as possible to -Bash semantics, but there are some cases with negative extglobs -which are exceedingly difficult to express in a JavaScript -regular expression. In particular the negated pattern -`!(*|)*` will in bash match anything that does -not start with ``. However, -`!(*)*` _will_ match paths starting with -``, because the empty string can match against -the negated portion. In this library, `!(*|)*` -will _not_ match any pattern starting with ``, due to a -difference in precisely which patterns are considered "greedy" in -Regular Expressions vs bash path expansion. This may be fixable, -but not without incurring some complexity and performance costs, -and the trade-off seems to not be worth pursuing. - -Note that `fnmatch(3)` in libc is an extremely naive string comparison -matcher, which does not do anything special for slashes. This library is -designed to be used in glob searching and file walkers, and so it does do -special things with `/`. Thus, `foo*` will not match `foo/bar` in this -library, even though it would in `fnmatch(3)`. diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json deleted file mode 100644 index 01fc48ecfd..0000000000 --- a/node_modules/minimatch/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "9.0.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --loglevel warn", - "benchmark": "node benchmark/index.js", - "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" - }, - "prettier": { - "semi": false, - "printWidth": 80, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "devDependencies": { - "@types/brace-expansion": "^1.1.0", - "@types/node": "^18.15.11", - "@types/tap": "^15.0.8", - "eslint-config-prettier": "^8.6.0", - "mkdirp": "1", - "prettier": "^2.8.2", - "tap": "^18.7.2", - "ts-node": "^10.9.1", - "tshy": "^1.12.0", - "typedoc": "^0.23.21", - "typescript": "^4.9.3" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "license": "ISC", - "tshy": { - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "type": "module" -} diff --git a/node_modules/minimist/.eslintrc b/node_modules/minimist/.eslintrc deleted file mode 100644 index bd1a5e046b..0000000000 --- a/node_modules/minimist/.eslintrc +++ /dev/null @@ -1,29 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb/eslint-config/node/0.4", - - "rules": { - "array-element-newline": 0, - "complexity": 0, - "func-style": [2, "declaration"], - "max-lines-per-function": 0, - "max-nested-callbacks": 1, - "max-statements-per-line": 1, - "max-statements": 0, - "multiline-comment-style": 0, - "no-continue": 1, - "no-param-reassign": 1, - "no-restricted-syntax": 1, - "object-curly-newline": 0, - }, - - "overrides": [ - { - "files": "test/**", - "rules": { - "camelcase": 0, - }, - }, - ] -} diff --git a/node_modules/minimist/.github/FUNDING.yml b/node_modules/minimist/.github/FUNDING.yml deleted file mode 100644 index a9366222e9..0000000000 --- a/node_modules/minimist/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/minimist -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/minimist/.nycrc b/node_modules/minimist/.nycrc deleted file mode 100644 index 55c3d29367..0000000000 --- a/node_modules/minimist/.nycrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "example", - "test" - ] -} diff --git a/node_modules/minimist/CHANGELOG.md b/node_modules/minimist/CHANGELOG.md deleted file mode 100644 index c9a1e15e6c..0000000000 --- a/node_modules/minimist/CHANGELOG.md +++ /dev/null @@ -1,298 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 - -### Merged - -- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) -- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) -- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) - -### Fixed - -- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) -- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) -- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) -- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) -- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) -- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) -- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) - -### Commits - -- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) -- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) -- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) -- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) -- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) -- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) -- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) -- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) -- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) -- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) -- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) -- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) -- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) -- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) -- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) -- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) -- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) -- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) -- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) -- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) -- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) -- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) -- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) -- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) -- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) - -## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 - -### Commits - -- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) -- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) -- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) -- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) -- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) -- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) -- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) -- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) -- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) -- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) -- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) -- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) - -## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 - -### Commits - -- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) -- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) -- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) - -## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 - -## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 - -### Commits - -- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) -- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) - -## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 - -### Commits - -- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) -- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) - -## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 - -### Commits - -- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) -- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) -- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) -- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) - -## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 - -### Merged - -- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) - -### Commits - -- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) -- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) - -## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 - -### Commits - -- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) -- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) -- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) -- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) -- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) - -## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 - -### Commits - -- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) -- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) - -## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 - -### Commits - -- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) -- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) -- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) - -## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 - -### Commits - -- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) -- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) -- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) -- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) - -## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 - -### Commits - -- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) -- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) -- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) -- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) - -## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 - -### Commits - -- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) -- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) - -## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 - -### Merged - -- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) -- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) -- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) - -### Fixed - -- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) -- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) -- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) - -### Commits - -- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) -- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) -- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) -- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) -- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) -- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) - -## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 - -### Commits - -- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) -- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) -- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) -- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) -- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) -- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) -- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) -- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) -- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) -- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) -- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) -- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) - -## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 - -## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 - -### Commits - -- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) - -## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 - -### Commits - -- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) -- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) -- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) - -## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 - -### Commits - -- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) -- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) -- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) -- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) -- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) - -## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 - -### Commits - -- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) - -## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 - -### Commits - -- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) -- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) - -## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 - -### Commits - -- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) - -## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 - -### Commits - -- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) - -## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 - -### Commits - -- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) - -## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 - -## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 - -### Commits - -- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) -- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) - -## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 - -### Commits - -- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) -- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) - -## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 - -### Commits - -- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) - -## v0.0.0 - 2013-06-25 - -### Commits - -- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) -- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) -- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) -- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) -- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) -- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) -- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) -- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) -- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) -- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) -- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/node_modules/minimist/LICENSE b/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b44..0000000000 --- a/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/minimist/README.md b/node_modules/minimist/README.md deleted file mode 100644 index 74da3234b4..0000000000 --- a/node_modules/minimist/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# minimist [![Version Badge][npm-version-svg]][package-url] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.log(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ - _: ['foo', 'bar', 'baz'], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' -} -``` - -# security - -Previous versions had a prototype pollution bug that could cause privilege -escalation in some circumstances when handling untrusted user input. - -Please use version 1.2.6 or later: - -* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) -* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: - - ``` - > require('./')('one two three -- four five --six'.split(' '), { '--': true }) - { - _: ['one', 'two', 'three'], - '--': ['four', 'five', '--six'] - } - ``` - - Note that with `opts['--']` set, parsing for arguments still stops after the - `--`. - -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT - -[package-url]: https://npmjs.org/package/minimist -[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg -[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/minimist.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/minimist.svg -[downloads-url]: https://npm-stat.com/charts.html?package=minimist -[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist -[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/node_modules/minimist/example/parse.js b/node_modules/minimist/example/parse.js deleted file mode 100644 index 9d90ffb264..0000000000 --- a/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -var argv = require('../')(process.argv.slice(2)); -console.log(argv); diff --git a/node_modules/minimist/index.js b/node_modules/minimist/index.js deleted file mode 100644 index f020f3940e..0000000000 --- a/node_modules/minimist/index.js +++ /dev/null @@ -1,263 +0,0 @@ -'use strict'; - -function hasKey(obj, keys) { - var o = obj; - keys.slice(0, -1).forEach(function (key) { - o = o[key] || {}; - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber(x) { - if (typeof x === 'number') { return true; } - if ((/^0x[0-9a-f]+$/i).test(x)) { return true; } - return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x); -} - -function isConstructorOrProto(obj, key) { - return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__'; -} - -module.exports = function (args, opts) { - if (!opts) { opts = {}; } - - var flags = { - bools: {}, - strings: {}, - unknownFn: null, - }; - - if (typeof opts.unknown === 'function') { - flags.unknownFn = opts.unknown; - } - - if (typeof opts.boolean === 'boolean' && opts.boolean) { - flags.allBools = true; - } else { - [].concat(opts.boolean).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - [].concat(aliases[key]).forEach(function (k) { - flags.strings[k] = true; - }); - } - }); - - var defaults = opts.default || {}; - - var argv = { _: [] }; - - function argDefined(key, arg) { - return (flags.allBools && (/^--[^=]+$/).test(arg)) - || flags.strings[key] - || flags.bools[key] - || aliases[key]; - } - - function setKey(obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length - 1; i++) { - var key = keys[i]; - if (isConstructorOrProto(o, key)) { return; } - if (o[key] === undefined) { o[key] = {}; } - if ( - o[key] === Object.prototype - || o[key] === Number.prototype - || o[key] === String.prototype - ) { - o[key] = {}; - } - if (o[key] === Array.prototype) { o[key] = []; } - o = o[key]; - } - - var lastKey = keys[keys.length - 1]; - if (isConstructorOrProto(o, lastKey)) { return; } - if ( - o === Object.prototype - || o === Number.prototype - || o === String.prototype - ) { - o = {}; - } - if (o === Array.prototype) { o = []; } - if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') { - o[lastKey] = value; - } else if (Array.isArray(o[lastKey])) { - o[lastKey].push(value); - } else { - o[lastKey] = [o[lastKey], value]; - } - } - - function setArg(key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) { return; } - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) - : val; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--') + 1); - args = args.slice(0, args.indexOf('--')); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - var key; - var next; - - if ((/^--.+=/).test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } else if ((/^--no-.+/).test(arg)) { - key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } else if ((/^--.+/).test(arg)) { - key = arg.match(/^--(.+)/)[1]; - next = args[i + 1]; - if ( - next !== undefined - && !(/^(-|--)[^-]/).test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true) - ) { - setArg(key, next, arg); - i += 1; - } else if ((/^(true|false)$/).test(next)) { - setArg(key, next === 'true', arg); - i += 1; - } else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } else if ((/^-[^-]+/).test(arg)) { - var letters = arg.slice(1, -1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - next = arg.slice(j + 2); - - if (next === '-') { - setArg(letters[j], next, arg); - continue; - } - - if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') { - setArg(letters[j], next.slice(1), arg); - broken = true; - break; - } - - if ( - (/[A-Za-z]/).test(letters[j]) - && (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next) - ) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j + 1] && letters[j + 1].match(/\W/)) { - setArg(letters[j], arg.slice(j + 2), arg); - broken = true; - break; - } else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if ( - args[i + 1] - && !(/^(-|--)[^-]/).test(args[i + 1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true) - ) { - setArg(key, args[i + 1], arg); - i += 1; - } else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) { - setArg(key, args[i + 1] === 'true', arg); - i += 1; - } else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg)); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (k) { - if (!hasKey(argv, k.split('.'))) { - setKey(argv, k.split('.'), defaults[k]); - - (aliases[k] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[k]); - }); - } - }); - - if (opts['--']) { - argv['--'] = notFlags.slice(); - } else { - notFlags.forEach(function (k) { - argv._.push(k); - }); - } - - return argv; -}; diff --git a/node_modules/minimist/package.json b/node_modules/minimist/package.json deleted file mode 100644 index c10a334441..0000000000 --- a/node_modules/minimist/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "minimist", - "version": "1.2.8", - "description": "parse argument options", - "main": "index.js", - "devDependencies": { - "@ljharb/eslint-config": "^21.0.1", - "aud": "^2.0.2", - "auto-changelog": "^2.4.0", - "eslint": "=8.8.0", - "in-publish": "^2.0.1", - "npmignore": "^0.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^2.0.0", - "tape": "^5.6.3" - }, - "scripts": { - "prepack": "npmignore --auto --commentLines=auto", - "prepublishOnly": "safe-publish-latest", - "prepublish": "not-in-publish || npm run prepublishOnly", - "lint": "eslint --ext=js,mjs .", - "pretest": "npm run lint", - "tests-only": "nyc tape 'test/**/*.js'", - "test": "npm run tests-only", - "posttest": "aud --production", - "version": "auto-changelog && git add CHANGELOG.md", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/minimistjs/minimist.git" - }, - "homepage": "https://github.com/minimistjs/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "license": "MIT", - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "publishConfig": { - "ignore": [ - ".github/workflows" - ] - } -} diff --git a/node_modules/minimist/test/all_bool.js b/node_modules/minimist/test/all_bool.js deleted file mode 100644 index befa0c9976..0000000000 --- a/node_modules/minimist/test/all_bool.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('flag boolean true (default all --args to boolean)', function (t) { - var argv = parse(['moo', '--honk', 'cow'], { - boolean: true, - }); - - t.deepEqual(argv, { - honk: true, - _: ['moo', 'cow'], - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); - -test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { - var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { - boolean: true, - }); - - t.deepEqual(argv, { - honk: true, - tacos: 'good', - p: 55, - _: ['moo', 'cow'], - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); diff --git a/node_modules/minimist/test/bool.js b/node_modules/minimist/test/bool.js deleted file mode 100644 index e58d47e442..0000000000 --- a/node_modules/minimist/test/bool.js +++ /dev/null @@ -1,177 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false }, - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'], - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse(['-x', '-z', 'one', 'two', 'three'], { - boolean: ['x', 'y', 'z'], - }); - - t.deepEqual(argv, { - x: true, - y: false, - z: true, - _: ['one', 'two', 'three'], - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); -test('boolean and alias with chainable api', function (t) { - var aliased = ['-h', 'derp']; - var regular = ['--herp', 'derp']; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' }, - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' }, - }); - var expected = { - herp: true, - h: true, - _: ['derp'], - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = ['-h', 'derp']; - var regular = ['--herp', 'derp']; - var opts = { - alias: { h: 'herp' }, - boolean: 'herp', - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - _: ['derp'], - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias array with options hash', function (t) { - var aliased = ['-h', 'derp']; - var regular = ['--herp', 'derp']; - var alt = ['--harp', 'derp']; - var opts = { - alias: { h: ['herp', 'harp'] }, - boolean: 'h', - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var altPropertyArgv = parse(alt, opts); - var expected = { - harp: true, - herp: true, - h: true, - _: ['derp'], - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.same(altPropertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = ['-h', 'true']; - var regular = ['--herp', 'true']; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - _: [], - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function (t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool', - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool', - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); - -test('boolean --boool=true', function (t) { - var parsed = parse(['--boool=true'], { - default: { - boool: false, - }, - boolean: ['boool'], - }); - - t.same(parsed.boool, true); - t.end(); -}); - -test('boolean --boool=false', function (t) { - var parsed = parse(['--boool=false'], { - default: { - boool: true, - }, - boolean: ['boool'], - }); - - t.same(parsed.boool, false); - t.end(); -}); - -test('boolean using something similar to true', function (t) { - var opts = { boolean: 'h' }; - var result = parse(['-h', 'true.txt'], opts); - var expected = { - h: true, - _: ['true.txt'], - }; - - t.same(result, expected); - t.end(); -}); diff --git a/node_modules/minimist/test/dash.js b/node_modules/minimist/test/dash.js deleted file mode 100644 index 707881771e..0000000000 --- a/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(6); - t.deepEqual(parse(['-n', '-']), { n: '-', _: [] }); - t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] }); - t.deepEqual(parse(['-']), { _: ['-'] }); - t.deepEqual(parse(['-f-']), { f: '-', _: [] }); - t.deepEqual( - parse(['-b', '-'], { boolean: 'b' }), - { b: true, _: ['-'] } - ); - t.deepEqual( - parse(['-s', '-'], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(2); - t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] }); - t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] }); -}); - -test('move arguments after the -- into their own `--` array', function (t) { - t.plan(1); - t.deepEqual( - parse(['--name', 'John', 'before', '--', 'after'], { '--': true }), - { name: 'John', _: ['before'], '--': ['after'] } - ); -}); - -test('--- option value', function (t) { - // A multi-dash value is largely an edge case, but check the behaviour is as expected, - // and in particular the same for short option and long option (as made consistent in Jan 2023). - t.plan(2); - t.deepEqual(parse(['-n', '---']), { n: '---', _: [] }); - t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] }); -}); - diff --git a/node_modules/minimist/test/default_bool.js b/node_modules/minimist/test/default_bool.js deleted file mode 100644 index 4e9f6250f0..0000000000 --- a/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true }, - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false }, - }); - t.equal(argv.somefalse, false); - t.end(); -}); - -test('boolean default to null', function (t) { - var argv = parse([], { - boolean: 'maybe', - default: { maybe: null }, - }); - t.equal(argv.maybe, null); - - var argvLong = parse(['--maybe'], { - boolean: 'maybe', - default: { maybe: null }, - }); - t.equal(argvLong.maybe, true); - t.end(); -}); diff --git a/node_modules/minimist/test/dotted.js b/node_modules/minimist/test/dotted.js deleted file mode 100644 index 126ff033b4..0000000000 --- a/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); - -test('dotted default with no alias', function (t) { - var argv = parse('', { default: { 'a.b': 11 } }); - t.equal(argv.a.b, 11); - t.end(); -}); diff --git a/node_modules/minimist/test/kv_short.js b/node_modules/minimist/test/kv_short.js deleted file mode 100644 index 6d1b53a7a7..0000000000 --- a/node_modules/minimist/test/kv_short.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('short -k=v', function (t) { - t.plan(1); - - var argv = parse(['-b=123']); - t.deepEqual(argv, { b: 123, _: [] }); -}); - -test('multi short -k=v', function (t) { - t.plan(1); - - var argv = parse(['-a=whatever', '-b=robots']); - t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); -}); - -test('short with embedded equals -k=a=b', function (t) { - t.plan(1); - - var argv = parse(['-k=a=b']); - t.deepEqual(argv, { k: 'a=b', _: [] }); -}); - -test('short with later equals like -ab=c', function (t) { - t.plan(1); - - var argv = parse(['-ab=c']); - t.deepEqual(argv, { a: true, b: 'c', _: [] }); -}); diff --git a/node_modules/minimist/test/long.js b/node_modules/minimist/test/long.js deleted file mode 100644 index 9fef51f1fa..0000000000 --- a/node_modules/minimist/test/long.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse(['--bool']), - { bool: true, _: [] }, - 'long boolean' - ); - t.deepEqual( - parse(['--pow', 'xixxle']), - { pow: 'xixxle', _: [] }, - 'long capture sp' - ); - t.deepEqual( - parse(['--pow=xixxle']), - { pow: 'xixxle', _: [] }, - 'long capture eq' - ); - t.deepEqual( - parse(['--host', 'localhost', '--port', '555']), - { host: 'localhost', port: 555, _: [] }, - 'long captures sp' - ); - t.deepEqual( - parse(['--host=localhost', '--port=555']), - { host: 'localhost', port: 555, _: [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/node_modules/minimist/test/num.js b/node_modules/minimist/test/num.js deleted file mode 100644 index 074393ecaf..0000000000 --- a/node_modules/minimist/test/num.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789', - ]); - t.deepEqual(argv, { - x: 1234, - y: 5.67, - z: 1e7, - w: '10f', - hex: 0xdeadbeef, - _: [789], - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('already a number', function (t) { - var argv = parse(['-x', 1234, 789]); - t.deepEqual(argv, { x: 1234, _: [789] }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); diff --git a/node_modules/minimist/test/parse.js b/node_modules/minimist/test/parse.js deleted file mode 100644 index 65d9d90927..0000000000 --- a/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,209 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse(['--no-moo']), - { moo: false, _: [] }, - 'no' - ); - t.deepEqual( - parse(['-v', 'a', '-v', 'b', '-v', 'c']), - { v: ['a', 'b', 'c'], _: [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek', - ]), - { - c: true, - a: true, - t: true, - s: 'woo', - h: 'awesome', - b: true, - bool: true, - key: 'value', - multi: ['quux', 'baz'], - meep: false, - name: 'meowmers', - _: ['bare', '--not-a-flag', 'eek'], - } - ); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse(['-t', 'moo'], { boolean: 't' }); - t.deepEqual(argv, { t: true, _: ['moo'] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: ['t', 'verbose'], - default: { verbose: true }, - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'], - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('newlines in params', function (t) { - var args = parse(['-s', 'X\nX']); - t.deepEqual(args, { _: [], s: 'X\nX' }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse(['--s=X\nX']); - t.deepEqual(args, { _: [], s: 'X\nX' }); - t.end(); -}); - -test('strings', function (t) { - var s = parse(['-s', '0001234'], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse(['-x', '56'], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([' ', ' '], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function (t) { - var s = parse(['-s'], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse(['--str'], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse(['-art'], { - string: ['a', 't'], - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - -test('string and alias', function (t) { - var x = parse(['--str', '000123'], { - string: 's', - alias: { s: 'str' }, - }); - - t.equal(x.str, '000123'); - t.equal(typeof x.str, 'string'); - t.equal(x.s, '000123'); - t.equal(typeof x.s, 'string'); - - var y = parse(['-s', '000123'], { - string: 'str', - alias: { str: 's' }, - }); - - t.equal(y.str, '000123'); - t.equal(typeof y.str, 'string'); - t.equal(y.s, '000123'); - t.equal(typeof y.s, 'string'); - - var z = parse(['-s123'], { - alias: { str: ['s', 'S'] }, - string: ['str'], - }); - - t.deepEqual( - z, - { _: [], s: '123', S: '123', str: '123' }, - 'opt.string works with multiple aliases' - ); - t.end(); -}); - -test('slashBreak', function (t) { - t.same( - parse(['-I/foo/bar/baz']), - { I: '/foo/bar/baz', _: [] } - ); - t.same( - parse(['-xyz/foo/bar/baz']), - { x: true, y: true, z: '/foo/bar/baz', _: [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse(['-f', '11', '--zoom', '55'], { - alias: { z: 'zoom' }, - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse(['-f', '11', '--zoom', '55'], { - alias: { z: ['zm', 'zoom'] }, - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop', - ]); - - t.same(argv.foo, { - bar: 3, - baz: 4, - quux: { - quibble: 5, - o_O: true, - }, - }); - t.same(argv.beep, { boop: true }); - t.end(); -}); diff --git a/node_modules/minimist/test/parse_modified.js b/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 32965d130f..0000000000 --- a/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions', function (t) { - t.plan(1); - - var argv = parse(['-b', '123'], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: [123] }); -}); diff --git a/node_modules/minimist/test/proto.js b/node_modules/minimist/test/proto.js deleted file mode 100644 index 6e629dd34e..0000000000 --- a/node_modules/minimist/test/proto.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -/* eslint no-proto: 0 */ - -var parse = require('../'); -var test = require('tape'); - -test('proto pollution', function (t) { - var argv = parse(['--__proto__.x', '123']); - t.equal({}.x, undefined); - t.equal(argv.__proto__.x, undefined); - t.equal(argv.x, undefined); - t.end(); -}); - -test('proto pollution (array)', function (t) { - var argv = parse(['--x', '4', '--x', '5', '--x.__proto__.z', '789']); - t.equal({}.z, undefined); - t.deepEqual(argv.x, [4, 5]); - t.equal(argv.x.z, undefined); - t.equal(argv.x.__proto__.z, undefined); - t.end(); -}); - -test('proto pollution (number)', function (t) { - var argv = parse(['--x', '5', '--x.__proto__.z', '100']); - t.equal({}.z, undefined); - t.equal((4).z, undefined); - t.equal(argv.x, 5); - t.equal(argv.x.z, undefined); - t.end(); -}); - -test('proto pollution (string)', function (t) { - var argv = parse(['--x', 'abc', '--x.__proto__.z', 'def']); - t.equal({}.z, undefined); - t.equal('...'.z, undefined); - t.equal(argv.x, 'abc'); - t.equal(argv.x.z, undefined); - t.end(); -}); - -test('proto pollution (constructor)', function (t) { - var argv = parse(['--constructor.prototype.y', '123']); - t.equal({}.y, undefined); - t.equal(argv.y, undefined); - t.end(); -}); - -test('proto pollution (constructor function)', function (t) { - var argv = parse(['--_.concat.constructor.prototype.y', '123']); - function fnToBeTested() {} - t.equal(fnToBeTested.y, undefined); - t.equal(argv.y, undefined); - t.end(); -}); - -// powered by snyk - https://github.com/backstage/backstage/issues/10343 -test('proto pollution (constructor function) snyk', function (t) { - var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); - t.equal(function () {}.foo, undefined); - t.equal(argv.y, undefined); - t.end(); -}); diff --git a/node_modules/minimist/test/short.js b/node_modules/minimist/test/short.js deleted file mode 100644 index 4a7b84385b..0000000000 --- a/node_modules/minimist/test/short.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse(['-n123']), { n: 123, _: [] }); - t.deepEqual( - parse(['-123', '456']), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse(['-b']), - { b: true, _: [] }, - 'short boolean' - ); - t.deepEqual( - parse(['foo', 'bar', 'baz']), - { _: ['foo', 'bar', 'baz'] }, - 'bare' - ); - t.deepEqual( - parse(['-cats']), - { c: true, a: true, t: true, s: true, _: [] }, - 'group' - ); - t.deepEqual( - parse(['-cats', 'meow']), - { c: true, a: true, t: true, s: 'meow', _: [] }, - 'short group next' - ); - t.deepEqual( - parse(['-h', 'localhost']), - { h: 'localhost', _: [] }, - 'short capture' - ); - t.deepEqual( - parse(['-h', 'localhost', '-p', '555']), - { h: 'localhost', p: 555, _: [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse(['-h', 'localhost', '-fp', '555', 'script.js']), - { - f: true, p: 555, h: 'localhost', - _: ['script.js'], - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse(['-h', 'localhost', '-fp', '555', 'script.js']), - { - f: true, p: 555, h: 'localhost', - _: ['script.js'], - } - ); - t.end(); -}); diff --git a/node_modules/minimist/test/stop_early.js b/node_modules/minimist/test/stop_early.js deleted file mode 100644 index 52a6a91903..0000000000 --- a/node_modules/minimist/test/stop_early.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('stops parsing on the first non-option when stopEarly is set', function (t) { - var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { - stopEarly: true, - }); - - t.deepEqual(argv, { - aaa: 'bbb', - _: ['ccc', '--ddd'], - }); - - t.end(); -}); diff --git a/node_modules/minimist/test/unknown.js b/node_modules/minimist/test/unknown.js deleted file mode 100644 index 4f2e0ca447..0000000000 --- a/node_modules/minimist/test/unknown.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('boolean and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['-h', 'true', '--derp', 'true']; - var regular = ['--herp', 'true', '-d', 'true']; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - unknown: unknownFn, - }; - parse(aliased, opts); - parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('flag boolean true any double hyphen argument is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { - boolean: true, - unknown: unknownFn, - }); - t.same(unknown, ['--tacos=good', 'cow', '-p']); - t.same(argv, { - honk: true, - _: [], - }); - t.end(); -}); - -test('string and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['-h', 'hello', '--derp', 'goodbye']; - var regular = ['--herp', 'hello', '-d', 'moon']; - var opts = { - alias: { h: 'herp' }, - string: 'h', - unknown: unknownFn, - }; - parse(aliased, opts); - parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('default and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['-h', 'hello']; - var regular = ['--herp', 'hello']; - var opts = { - default: { h: 'bar' }, - alias: { h: 'herp' }, - unknown: unknownFn, - }; - parse(aliased, opts); - parse(regular, opts); - - t.same(unknown, []); - t.end(); - unknownFn(); // exercise fn for 100% coverage -}); - -test('value following -- is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = ['--bad', '--', 'good', 'arg']; - var opts = { - '--': true, - unknown: unknownFn, - }; - var argv = parse(aliased, opts); - - t.same(unknown, ['--bad']); - t.same(argv, { - '--': ['good', 'arg'], - _: [], - }); - t.end(); -}); diff --git a/node_modules/minimist/test/whitespace.js b/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 4fdaf1d394..0000000000 --- a/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace', function (t) { - t.plan(1); - var x = parse(['-x', '\t']).x; - t.equal(x, '\t'); -}); diff --git a/node_modules/minipass/LICENSE b/node_modules/minipass/LICENSE deleted file mode 100644 index 97f8e32ed8..0000000000 --- a/node_modules/minipass/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minipass/README.md b/node_modules/minipass/README.md deleted file mode 100644 index 1126330582..0000000000 --- a/node_modules/minipass/README.md +++ /dev/null @@ -1,825 +0,0 @@ -# minipass - -A _very_ minimal implementation of a [PassThrough -stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough) - -[It's very -fast](https://docs.google.com/spreadsheets/d/1K_HR5oh3r80b8WVMWCPPjfuWXUgfkmhlX7FGI6JJ8tY/edit?usp=sharing) -for objects, strings, and buffers. - -Supports `pipe()`ing (including multi-`pipe()` and backpressure -transmission), buffering data until either a `data` event handler -or `pipe()` is added (so you don't lose the first chunk), and -most other cases where PassThrough is a good idea. - -There is a `read()` method, but it's much more efficient to -consume data from this stream via `'data'` events or by calling -`pipe()` into some other stream. Calling `read()` requires the -buffer to be flattened in some cases, which requires copying -memory. - -If you set `objectMode: true` in the options, then whatever is -written will be emitted. Otherwise, it'll do a minimal amount of -Buffer copying to ensure proper Streams semantics when `read(n)` -is called. - -`objectMode` can only be set at instantiation. Attempting to -write something other than a String or Buffer without having set -`objectMode` in the options will throw an error. - -This is not a `through` or `through2` stream. It doesn't -transform the data, it just passes it right through. If you want -to transform the data, extend the class, and override the -`write()` method. Once you're done transforming the data however -you want, call `super.write()` with the transform output. - -For some examples of streams that extend Minipass in various -ways, check out: - -- [minizlib](http://npm.im/minizlib) -- [fs-minipass](http://npm.im/fs-minipass) -- [tar](http://npm.im/tar) -- [minipass-collect](http://npm.im/minipass-collect) -- [minipass-flush](http://npm.im/minipass-flush) -- [minipass-pipeline](http://npm.im/minipass-pipeline) -- [tap](http://npm.im/tap) -- [tap-parser](http://npm.im/tap-parser) -- [treport](http://npm.im/treport) -- [minipass-fetch](http://npm.im/minipass-fetch) -- [pacote](http://npm.im/pacote) -- [make-fetch-happen](http://npm.im/make-fetch-happen) -- [cacache](http://npm.im/cacache) -- [ssri](http://npm.im/ssri) -- [npm-registry-fetch](http://npm.im/npm-registry-fetch) -- [minipass-json-stream](http://npm.im/minipass-json-stream) -- [minipass-sized](http://npm.im/minipass-sized) - -## Usage in TypeScript - -The `Minipass` class takes three type template definitions: - -- `RType` the type being read, which defaults to `Buffer`. If - `RType` is `string`, then the constructor _must_ get an options - object specifying either an `encoding` or `objectMode: true`. - If it's anything other than `string` or `Buffer`, then it - _must_ get an options object specifying `objectMode: true`. -- `WType` the type being written. If `RType` is `Buffer` or - `string`, then this defaults to `ContiguousData` (Buffer, - string, ArrayBuffer, or ArrayBufferView). Otherwise, it - defaults to `RType`. -- `Events` type mapping event names to the arguments emitted - with that event, which extends `Minipass.Events`. - -To declare types for custom events in subclasses, extend the -third parameter with your own event signatures. For example: - -```js -import { Minipass } from 'minipass' - -// a NDJSON stream that emits 'jsonError' when it can't stringify -export interface Events extends Minipass.Events { - jsonError: [e: Error] -} - -export class NDJSONStream extends Minipass { - constructor() { - super({ objectMode: true }) - } - - // data is type `any` because that's WType - write(data, encoding, cb) { - try { - const json = JSON.stringify(data) - return super.write(json + '\n', encoding, cb) - } catch (er) { - if (!er instanceof Error) { - er = Object.assign(new Error('json stringify failed'), { - cause: er, - }) - } - // trying to emit with something OTHER than an error will - // fail, because we declared the event arguments type. - this.emit('jsonError', er) - } - } -} - -const s = new NDJSONStream() -s.on('jsonError', e => { - // here, TS knows that e is an Error -}) -``` - -Emitting/handling events that aren't declared in this way is -fine, but the arguments will be typed as `unknown`. - -## Differences from Node.js Streams - -There are several things that make Minipass streams different -from (and in some ways superior to) Node.js core streams. - -Please read these caveats if you are familiar with node-core -streams and intend to use Minipass streams in your programs. - -You can avoid most of these differences entirely (for a very -small performance penalty) by setting `{async: true}` in the -constructor options. - -### Timing - -Minipass streams are designed to support synchronous use-cases. -Thus, data is emitted as soon as it is available, always. It is -buffered until read, but no longer. Another way to look at it is -that Minipass streams are exactly as synchronous as the logic -that writes into them. - -This can be surprising if your code relies on -`PassThrough.write()` always providing data on the next tick -rather than the current one, or being able to call `resume()` and -not have the entire buffer disappear immediately. - -However, without this synchronicity guarantee, there would be no -way for Minipass to achieve the speeds it does, or support the -synchronous use cases that it does. Simply put, waiting takes -time. - -This non-deferring approach makes Minipass streams much easier to -reason about, especially in the context of Promises and other -flow-control mechanisms. - -Example: - -```js -// hybrid module, either works -import { Minipass } from 'minipass' -// or: -const { Minipass } = require('minipass') - -const stream = new Minipass() -stream.on('data', () => console.log('data event')) -console.log('before write') -stream.write('hello') -console.log('after write') -// output: -// before write -// data event -// after write -``` - -### Exception: Async Opt-In - -If you wish to have a Minipass stream with behavior that more -closely mimics Node.js core streams, you can set the stream in -async mode either by setting `async: true` in the constructor -options, or by setting `stream.async = true` later on. - -```js -// hybrid module, either works -import { Minipass } from 'minipass' -// or: -const { Minipass } = require('minipass') - -const asyncStream = new Minipass({ async: true }) -asyncStream.on('data', () => console.log('data event')) -console.log('before write') -asyncStream.write('hello') -console.log('after write') -// output: -// before write -// after write -// data event <-- this is deferred until the next tick -``` - -Switching _out_ of async mode is unsafe, as it could cause data -corruption, and so is not enabled. Example: - -```js -import { Minipass } from 'minipass' -const stream = new Minipass({ encoding: 'utf8' }) -stream.on('data', chunk => console.log(chunk)) -stream.async = true -console.log('before writes') -stream.write('hello') -setStreamSyncAgainSomehow(stream) // <-- this doesn't actually exist! -stream.write('world') -console.log('after writes') -// hypothetical output would be: -// before writes -// world -// after writes -// hello -// NOT GOOD! -``` - -To avoid this problem, once set into async mode, any attempt to -make the stream sync again will be ignored. - -```js -const { Minipass } = require('minipass') -const stream = new Minipass({ encoding: 'utf8' }) -stream.on('data', chunk => console.log(chunk)) -stream.async = true -console.log('before writes') -stream.write('hello') -stream.async = false // <-- no-op, stream already async -stream.write('world') -console.log('after writes') -// actual output: -// before writes -// after writes -// hello -// world -``` - -### No High/Low Water Marks - -Node.js core streams will optimistically fill up a buffer, -returning `true` on all writes until the limit is hit, even if -the data has nowhere to go. Then, they will not attempt to draw -more data in until the buffer size dips below a minimum value. - -Minipass streams are much simpler. The `write()` method will -return `true` if the data has somewhere to go (which is to say, -given the timing guarantees, that the data is already there by -the time `write()` returns). - -If the data has nowhere to go, then `write()` returns false, and -the data sits in a buffer, to be drained out immediately as soon -as anyone consumes it. - -Since nothing is ever buffered unnecessarily, there is much less -copying data, and less bookkeeping about buffer capacity levels. - -### Hazards of Buffering (or: Why Minipass Is So Fast) - -Since data written to a Minipass stream is immediately written -all the way through the pipeline, and `write()` always returns -true/false based on whether the data was fully flushed, -backpressure is communicated immediately to the upstream caller. -This minimizes buffering. - -Consider this case: - -```js -const { PassThrough } = require('stream') -const p1 = new PassThrough({ highWaterMark: 1024 }) -const p2 = new PassThrough({ highWaterMark: 1024 }) -const p3 = new PassThrough({ highWaterMark: 1024 }) -const p4 = new PassThrough({ highWaterMark: 1024 }) - -p1.pipe(p2).pipe(p3).pipe(p4) -p4.on('data', () => console.log('made it through')) - -// this returns false and buffers, then writes to p2 on next tick (1) -// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2) -// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3) -// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain' -// on next tick (4) -// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and -// 'drain' on next tick (5) -// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6) -// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next -// tick (7) - -p1.write(Buffer.alloc(2048)) // returns false -``` - -Along the way, the data was buffered and deferred at each stage, -and multiple event deferrals happened, for an unblocked pipeline -where it was perfectly safe to write all the way through! - -Furthermore, setting a `highWaterMark` of `1024` might lead -someone reading the code to think an advisory maximum of 1KiB is -being set for the pipeline. However, the actual advisory -buffering level is the _sum_ of `highWaterMark` values, since -each one has its own bucket. - -Consider the Minipass case: - -```js -const m1 = new Minipass() -const m2 = new Minipass() -const m3 = new Minipass() -const m4 = new Minipass() - -m1.pipe(m2).pipe(m3).pipe(m4) -m4.on('data', () => console.log('made it through')) - -// m1 is flowing, so it writes the data to m2 immediately -// m2 is flowing, so it writes the data to m3 immediately -// m3 is flowing, so it writes the data to m4 immediately -// m4 is flowing, so it fires the 'data' event immediately, returns true -// m4's write returned true, so m3 is still flowing, returns true -// m3's write returned true, so m2 is still flowing, returns true -// m2's write returned true, so m1 is still flowing, returns true -// No event deferrals or buffering along the way! - -m1.write(Buffer.alloc(2048)) // returns true -``` - -It is extremely unlikely that you _don't_ want to buffer any data -written, or _ever_ buffer data that can be flushed all the way -through. Neither node-core streams nor Minipass ever fail to -buffer written data, but node-core streams do a lot of -unnecessary buffering and pausing. - -As always, the faster implementation is the one that does less -stuff and waits less time to do it. - -### Immediately emit `end` for empty streams (when not paused) - -If a stream is not paused, and `end()` is called before writing -any data into it, then it will emit `end` immediately. - -If you have logic that occurs on the `end` event which you don't -want to potentially happen immediately (for example, closing file -descriptors, moving on to the next entry in an archive parse -stream, etc.) then be sure to call `stream.pause()` on creation, -and then `stream.resume()` once you are ready to respond to the -`end` event. - -However, this is _usually_ not a problem because: - -### Emit `end` When Asked - -One hazard of immediately emitting `'end'` is that you may not -yet have had a chance to add a listener. In order to avoid this -hazard, Minipass streams safely re-emit the `'end'` event if a -new listener is added after `'end'` has been emitted. - -Ie, if you do `stream.on('end', someFunction)`, and the stream -has already emitted `end`, then it will call the handler right -away. (You can think of this somewhat like attaching a new -`.then(fn)` to a previously-resolved Promise.) - -To prevent calling handlers multiple times who would not expect -multiple ends to occur, all listeners are removed from the -`'end'` event whenever it is emitted. - -### Emit `error` When Asked - -The most recent error object passed to the `'error'` event is -stored on the stream. If a new `'error'` event handler is added, -and an error was previously emitted, then the event handler will -be called immediately (or on `process.nextTick` in the case of -async streams). - -This makes it much more difficult to end up trying to interact -with a broken stream, if the error handler is added after an -error was previously emitted. - -### Impact of "immediate flow" on Tee-streams - -A "tee stream" is a stream piping to multiple destinations: - -```js -const tee = new Minipass() -t.pipe(dest1) -t.pipe(dest2) -t.write('foo') // goes to both destinations -``` - -Since Minipass streams _immediately_ process any pending data -through the pipeline when a new pipe destination is added, this -can have surprising effects, especially when a stream comes in -from some other function and may or may not have data in its -buffer. - -```js -// WARNING! WILL LOSE DATA! -const src = new Minipass() -src.write('foo') -src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone -src.pipe(dest2) // gets nothing! -``` - -One solution is to create a dedicated tee-stream junction that -pipes to both locations, and then pipe to _that_ instead. - -```js -// Safe example: tee to both places -const src = new Minipass() -src.write('foo') -const tee = new Minipass() -tee.pipe(dest1) -tee.pipe(dest2) -src.pipe(tee) // tee gets 'foo', pipes to both locations -``` - -The same caveat applies to `on('data')` event listeners. The -first one added will _immediately_ receive all of the data, -leaving nothing for the second: - -```js -// WARNING! WILL LOSE DATA! -const src = new Minipass() -src.write('foo') -src.on('data', handler1) // receives 'foo' right away -src.on('data', handler2) // nothing to see here! -``` - -Using a dedicated tee-stream can be used in this case as well: - -```js -// Safe example: tee to both data handlers -const src = new Minipass() -src.write('foo') -const tee = new Minipass() -tee.on('data', handler1) -tee.on('data', handler2) -src.pipe(tee) -``` - -All of the hazards in this section are avoided by setting `{ -async: true }` in the Minipass constructor, or by setting -`stream.async = true` afterwards. Note that this does add some -overhead, so should only be done in cases where you are willing -to lose a bit of performance in order to avoid having to refactor -program logic. - -## USAGE - -It's a stream! Use it like a stream and it'll most likely do what -you want. - -```js -import { Minipass } from 'minipass' -const mp = new Minipass(options) // options is optional -mp.write('foo') -mp.pipe(someOtherStream) -mp.end('bar') -``` - -### OPTIONS - -- `encoding` How would you like the data coming _out_ of the - stream to be encoded? Accepts any values that can be passed to - `Buffer.toString()`. -- `objectMode` Emit data exactly as it comes in. This will be - flipped on by default if you write() something other than a - string or Buffer at any point. Setting `objectMode: true` will - prevent setting any encoding value. -- `async` Defaults to `false`. Set to `true` to defer data - emission until next tick. This reduces performance slightly, - but makes Minipass streams use timing behavior closer to Node - core streams. See [Timing](#timing) for more details. -- `signal` An `AbortSignal` that will cause the stream to unhook - itself from everything and become as inert as possible. Note - that providing a `signal` parameter will make `'error'` events - no longer throw if they are unhandled, but they will still be - emitted to handlers if any are attached. - -### API - -Implements the user-facing portions of Node.js's `Readable` and -`Writable` streams. - -### Methods - -- `write(chunk, [encoding], [callback])` - Put data in. (Note - that, in the base Minipass class, the same data will come out.) - Returns `false` if the stream will buffer the next write, or - true if it's still in "flowing" mode. -- `end([chunk, [encoding]], [callback])` - Signal that you have - no more data to write. This will queue an `end` event to be - fired when all the data has been consumed. -- `pause()` - No more data for a while, please. This also - prevents `end` from being emitted for empty streams until the - stream is resumed. -- `resume()` - Resume the stream. If there's data in the buffer, - it is all discarded. Any buffered events are immediately - emitted. -- `pipe(dest)` - Send all output to the stream provided. When - data is emitted, it is immediately written to any and all pipe - destinations. (Or written on next tick in `async` mode.) -- `unpipe(dest)` - Stop piping to the destination stream. This is - immediate, meaning that any asynchronously queued data will - _not_ make it to the destination when running in `async` mode. - - `options.end` - Boolean, end the destination stream when the - source stream ends. Default `true`. - - `options.proxyErrors` - Boolean, proxy `error` events from - the source stream to the destination stream. Note that errors - are _not_ proxied after the pipeline terminates, either due - to the source emitting `'end'` or manually unpiping with - `src.unpipe(dest)`. Default `false`. -- `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are - EventEmitters. Some events are given special treatment, - however. (See below under "events".) -- `promise()` - Returns a Promise that resolves when the stream - emits `end`, or rejects if the stream emits `error`. -- `collect()` - Return a Promise that resolves on `end` with an - array containing each chunk of data that was emitted, or - rejects if the stream emits `error`. Note that this consumes - the stream data. -- `concat()` - Same as `collect()`, but concatenates the data - into a single Buffer object. Will reject the returned promise - if the stream is in objectMode, or if it goes into objectMode - by the end of the data. -- `read(n)` - Consume `n` bytes of data out of the buffer. If `n` - is not provided, then consume all of it. If `n` bytes are not - available, then it returns null. **Note** consuming streams in - this way is less efficient, and can lead to unnecessary Buffer - copying. -- `destroy([er])` - Destroy the stream. If an error is provided, - then an `'error'` event is emitted. If the stream has a - `close()` method, and has not emitted a `'close'` event yet, - then `stream.close()` will be called. Any Promises returned by - `.promise()`, `.collect()` or `.concat()` will be rejected. - After being destroyed, writing to the stream will emit an - error. No more data will be emitted if the stream is destroyed, - even if it was previously buffered. - -### Properties - -- `bufferLength` Read-only. Total number of bytes buffered, or in - the case of objectMode, the total number of objects. -- `encoding` Read-only. The encoding that has been set. -- `flowing` Read-only. Boolean indicating whether a chunk written - to the stream will be immediately emitted. -- `emittedEnd` Read-only. Boolean indicating whether the end-ish - events (ie, `end`, `prefinish`, `finish`) have been emitted. - Note that listening on any end-ish event will immediateyl - re-emit it if it has already been emitted. -- `writable` Whether the stream is writable. Default `true`. Set - to `false` when `end()` -- `readable` Whether the stream is readable. Default `true`. -- `pipes` An array of Pipe objects referencing streams that this - stream is piping into. -- `destroyed` A getter that indicates whether the stream was - destroyed. -- `paused` True if the stream has been explicitly paused, - otherwise false. -- `objectMode` Indicates whether the stream is in `objectMode`. -- `aborted` Readonly property set when the `AbortSignal` - dispatches an `abort` event. - -### Events - -- `data` Emitted when there's data to read. Argument is the data - to read. This is never emitted while not flowing. If a listener - is attached, that will resume the stream. -- `end` Emitted when there's no more data to read. This will be - emitted immediately for empty streams when `end()` is called. - If a listener is attached, and `end` was already emitted, then - it will be emitted again. All listeners are removed when `end` - is emitted. -- `prefinish` An end-ish event that follows the same logic as - `end` and is emitted in the same conditions where `end` is - emitted. Emitted after `'end'`. -- `finish` An end-ish event that follows the same logic as `end` - and is emitted in the same conditions where `end` is emitted. - Emitted after `'prefinish'`. -- `close` An indication that an underlying resource has been - released. Minipass does not emit this event, but will defer it - until after `end` has been emitted, since it throws off some - stream libraries otherwise. -- `drain` Emitted when the internal buffer empties, and it is - again suitable to `write()` into the stream. -- `readable` Emitted when data is buffered and ready to be read - by a consumer. -- `resume` Emitted when stream changes state from buffering to - flowing mode. (Ie, when `resume` is called, `pipe` is called, - or a `data` event listener is added.) - -### Static Methods - -- `Minipass.isStream(stream)` Returns `true` if the argument is a - stream, and false otherwise. To be considered a stream, the - object must be either an instance of Minipass, or an - EventEmitter that has either a `pipe()` method, or both - `write()` and `end()` methods. (Pretty much any stream in - node-land will return `true` for this.) - -## EXAMPLES - -Here are some examples of things you can do with Minipass -streams. - -### simple "are you done yet" promise - -```js -mp.promise().then( - () => { - // stream is finished - }, - er => { - // stream emitted an error - } -) -``` - -### collecting - -```js -mp.collect().then(all => { - // all is an array of all the data emitted - // encoding is supported in this case, so - // so the result will be a collection of strings if - // an encoding is specified, or buffers/objects if not. - // - // In an async function, you may do - // const data = await stream.collect() -}) -``` - -### collecting into a single blob - -This is a bit slower because it concatenates the data into one -chunk for you, but if you're going to do it yourself anyway, it's -convenient this way: - -```js -mp.concat().then(onebigchunk => { - // onebigchunk is a string if the stream - // had an encoding set, or a buffer otherwise. -}) -``` - -### iteration - -You can iterate over streams synchronously or asynchronously in -platforms that support it. - -Synchronous iteration will end when the currently available data -is consumed, even if the `end` event has not been reached. In -string and buffer mode, the data is concatenated, so unless -multiple writes are occurring in the same tick as the `read()`, -sync iteration loops will generally only have a single iteration. - -To consume chunks in this way exactly as they have been written, -with no flattening, create the stream with the `{ objectMode: -true }` option. - -```js -const mp = new Minipass({ objectMode: true }) -mp.write('a') -mp.write('b') -for (let letter of mp) { - console.log(letter) // a, b -} -mp.write('c') -mp.write('d') -for (let letter of mp) { - console.log(letter) // c, d -} -mp.write('e') -mp.end() -for (let letter of mp) { - console.log(letter) // e -} -for (let letter of mp) { - console.log(letter) // nothing -} -``` - -Asynchronous iteration will continue until the end event is reached, -consuming all of the data. - -```js -const mp = new Minipass({ encoding: 'utf8' }) - -// some source of some data -let i = 5 -const inter = setInterval(() => { - if (i-- > 0) mp.write(Buffer.from('foo\n', 'utf8')) - else { - mp.end() - clearInterval(inter) - } -}, 100) - -// consume the data with asynchronous iteration -async function consume() { - for await (let chunk of mp) { - console.log(chunk) - } - return 'ok' -} - -consume().then(res => console.log(res)) -// logs `foo\n` 5 times, and then `ok` -``` - -### subclass that `console.log()`s everything written into it - -```js -class Logger extends Minipass { - write(chunk, encoding, callback) { - console.log('WRITE', chunk, encoding) - return super.write(chunk, encoding, callback) - } - end(chunk, encoding, callback) { - console.log('END', chunk, encoding) - return super.end(chunk, encoding, callback) - } -} - -someSource.pipe(new Logger()).pipe(someDest) -``` - -### same thing, but using an inline anonymous class - -```js -// js classes are fun -someSource - .pipe( - new (class extends Minipass { - emit(ev, ...data) { - // let's also log events, because debugging some weird thing - console.log('EMIT', ev) - return super.emit(ev, ...data) - } - write(chunk, encoding, callback) { - console.log('WRITE', chunk, encoding) - return super.write(chunk, encoding, callback) - } - end(chunk, encoding, callback) { - console.log('END', chunk, encoding) - return super.end(chunk, encoding, callback) - } - })() - ) - .pipe(someDest) -``` - -### subclass that defers 'end' for some reason - -```js -class SlowEnd extends Minipass { - emit(ev, ...args) { - if (ev === 'end') { - console.log('going to end, hold on a sec') - setTimeout(() => { - console.log('ok, ready to end now') - super.emit('end', ...args) - }, 100) - return true - } else { - return super.emit(ev, ...args) - } - } -} -``` - -### transform that creates newline-delimited JSON - -```js -class NDJSONEncode extends Minipass { - write(obj, cb) { - try { - // JSON.stringify can throw, emit an error on that - return super.write(JSON.stringify(obj) + '\n', 'utf8', cb) - } catch (er) { - this.emit('error', er) - } - } - end(obj, cb) { - if (typeof obj === 'function') { - cb = obj - obj = undefined - } - if (obj !== undefined) { - this.write(obj) - } - return super.end(cb) - } -} -``` - -### transform that parses newline-delimited JSON - -```js -class NDJSONDecode extends Minipass { - constructor(options) { - // always be in object mode, as far as Minipass is concerned - super({ objectMode: true }) - this._jsonBuffer = '' - } - write(chunk, encoding, cb) { - if ( - typeof chunk === 'string' && - typeof encoding === 'string' && - encoding !== 'utf8' - ) { - chunk = Buffer.from(chunk, encoding).toString() - } else if (Buffer.isBuffer(chunk)) { - chunk = chunk.toString() - } - if (typeof encoding === 'function') { - cb = encoding - } - const jsonData = (this._jsonBuffer + chunk).split('\n') - this._jsonBuffer = jsonData.pop() - for (let i = 0; i < jsonData.length; i++) { - try { - // JSON.parse can throw, emit an error on that - super.write(JSON.parse(jsonData[i])) - } catch (er) { - this.emit('error', er) - continue - } - } - if (cb) cb() - } -} -``` diff --git a/node_modules/minipass/package.json b/node_modules/minipass/package.json deleted file mode 100644 index 771969b028..0000000000 --- a/node_modules/minipass/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "minipass", - "version": "7.1.2", - "description": "minimal implementation of a PassThrough stream", - "main": "./dist/commonjs/index.js", - "types": "./dist/commonjs/index.d.ts", - "type": "module", - "tshy": { - "selfLink": false, - "main": true, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --loglevel warn", - "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" - }, - "prettier": { - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "devDependencies": { - "@types/end-of-stream": "^1.4.2", - "@types/node": "^20.1.2", - "end-of-stream": "^1.4.0", - "node-abort-controller": "^3.1.1", - "prettier": "^2.6.2", - "tap": "^19.0.0", - "through2": "^2.0.3", - "tshy": "^1.14.0", - "typedoc": "^0.25.1" - }, - "repository": "https://github.com/isaacs/minipass", - "keywords": [ - "passthrough", - "stream" - ], - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "tap": { - "typecheck": true, - "include": [ - "test/*.ts" - ] - } -} diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js deleted file mode 100644 index ea734fb738..0000000000 --- a/node_modules/ms/index.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function (val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - return ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); -} diff --git a/node_modules/ms/license.md b/node_modules/ms/license.md deleted file mode 100644 index fa5d39b621..0000000000 --- a/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2020 Vercel, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json deleted file mode 100644 index 49971890df..0000000000 --- a/node_modules/ms/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "ms", - "version": "2.1.3", - "description": "Tiny millisecond conversion utility", - "repository": "vercel/ms", - "main": "./index", - "files": [ - "index.js" - ], - "scripts": { - "precommit": "lint-staged", - "lint": "eslint lib/* bin/*", - "test": "mocha tests.js" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "license": "MIT", - "devDependencies": { - "eslint": "4.18.2", - "expect.js": "0.3.1", - "husky": "0.14.3", - "lint-staged": "5.0.0", - "mocha": "4.0.1", - "prettier": "2.0.5" - } -} diff --git a/node_modules/ms/readme.md b/node_modules/ms/readme.md deleted file mode 100644 index 0fc1abb3b8..0000000000 --- a/node_modules/ms/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# ms - -![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -ms('-3 days') // -259200000 -ms('-1h') // -3600000 -ms('-200') // -200 -``` - -### Convert from Milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(-3 * 60000) // "-3m" -ms(ms('10 hours')) // "10h" -``` - -### Time Format Written-Out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(-3 * 60000, { long: true }) // "-3 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [Node.js](https://nodejs.org) and in the browser -- If a number is supplied to `ms`, a string with a unit is returned -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) -- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned - -## Related Packages - -- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. - -## Caught a Bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/node_modules/package-json-from-dist/LICENSE.md b/node_modules/package-json-from-dist/LICENSE.md deleted file mode 100644 index 881248b6d7..0000000000 --- a/node_modules/package-json-from-dist/LICENSE.md +++ /dev/null @@ -1,63 +0,0 @@ -All packages under `src/` are licensed according to the terms in -their respective `LICENSE` or `LICENSE.md` files. - -The remainder of this project is licensed under the Blue Oak -Model License, as follows: - ------ - -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. - -## Notices - -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. - -## Excuse - -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. - -## Patent - -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. - -## Reliability - -No contributor can revoke this license. - -## No Liability - -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.*** diff --git a/node_modules/package-json-from-dist/README.md b/node_modules/package-json-from-dist/README.md deleted file mode 100644 index a9e1344851..0000000000 --- a/node_modules/package-json-from-dist/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# package-json-from-dist - -Sometimes you want to load the `package.json` into your -TypeScript program, and it's tempting to just `import -'../package.json'`, since that seems to work. - -However, this requires `tsc` to make an entire copy of your -`package.json` file into the `dist` folder, which is a problem if -you're using something like -[tshy](https://github.com/isaacs/tshy), which uses the -`package.json` file in dist for another purpose. Even when that -does work, it's asking the module system to do a bunch of extra -fs system calls, just to load a version number or something. (See -[this issue](https://github.com/isaacs/tshy/issues/61).) - -This module helps by just finding the package.json file -appropriately, and reading and parsing it in the most normal -fashion. - -## Caveats - -This _only_ works if your code builds into a target folder called -`dist`, which is in the root of the package. It also requires -that you do not have a folder named `node_modules` anywhere -within your dev environment, or else it'll get the wrong answers -there. (But, at least, that'll be in dev, so you're pretty likely -to notice.) - -If you build to some other location, then you'll need a different -approach. (Feel free to fork this module and make it your own, or -just put the code right inline, there's not much of it.) - -## USAGE - -```js -// src/index.ts -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' - -const pj = findPackageJson(import.meta.url) -console.log(`package.json found at ${pj}`) - -const pkg = loadPackageJson(import.meta.url) -console.log(`Hello from ${pkg.name}@${pkg.version}`) -``` - -If your module is not directly in the `./src` folder, then you need -to specify the path that you would expect to find the -`package.json` when it's _not_ built to the `dist` folder. - -```js -// src/components/something.ts -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' - -const pj = findPackageJson(import.meta.url, '../../package.json') -console.log(`package.json found at ${pj}`) - -const pkg = loadPackageJson(import.meta.url, '../../package.json') -console.log(`Hello from ${pkg.name}@${pkg.version}`) -``` - -When running from CommmonJS, use `__filename` instead of -`import.meta.url`. - -```js -// src/index.cts -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' - -const pj = findPackageJson(__filename) -console.log(`package.json found at ${pj}`) - -const pkg = loadPackageJson(__filename) -console.log(`Hello from ${pkg.name}@${pkg.version}`) -``` - -Since [tshy](https://github.com/isaacs/tshy) builds _both_ -CommonJS and ESM by default, you may find that you need a -CommonJS override and some `//@ts-ignore` magic to make it work. - -`src/pkg.ts`: - -```js -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' -//@ts-ignore -export const pkg = loadPackageJson(import.meta.url) -//@ts-ignore -export const pj = findPackageJson(import.meta.url) -``` - -`src/pkg-cjs.cts`: - -```js -import { - findPackageJson, - loadPackageJson, -} from 'package-json-from-dist' -export const pkg = loadPackageJson(__filename) -export const pj = findPackageJson(__filename) -``` diff --git a/node_modules/package-json-from-dist/package.json b/node_modules/package-json-from-dist/package.json deleted file mode 100644 index a2d03c3269..0000000000 --- a/node_modules/package-json-from-dist/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "package-json-from-dist", - "version": "1.0.1", - "description": "Load the local package.json from either src or dist folder", - "main": "./dist/commonjs/index.js", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --log-level warn", - "typedoc": "typedoc" - }, - "author": "Isaac Z. Schlueter (https://izs.me)", - "license": "BlueOak-1.0.0", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/package-json-from-dist.git" - }, - "devDependencies": { - "@types/node": "^20.12.12", - "prettier": "^3.2.5", - "tap": "^18.5.3", - "typedoc": "^0.24.8", - "typescript": "^5.1.6", - "tshy": "^1.14.0" - }, - "prettier": { - "semi": false, - "printWidth": 70, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf", - "experimentalTernaries": true - }, - "tshy": { - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "types": "./dist/commonjs/index.d.ts", - "type": "module" -} diff --git a/node_modules/parse-entities/index.d.ts b/node_modules/parse-entities/index.d.ts deleted file mode 100644 index 4e94341887..0000000000 --- a/node_modules/parse-entities/index.d.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type {Point, Position} from 'unist' - -// To do: next major: remove `void` from allowed return types. - -/** - * @typeParam Context - * Value used as `this`. - * @this - * The `warningContext` given to `parseEntities` - * @param reason - * Human readable reason for emitting a parse error. - * @param point - * Place where the error occurred. - * @param code - * Machine readable code the error. - */ -export type WarningHandler = ( - this: Context, - reason: string, - point: Point, - code: number -) => undefined | void - -/** - * @typeParam Context - * Value used as `this`. - * @this - * The `referenceContext` given to `parseEntities` - * @param value - * Decoded character reference. - * @param position - * Place where `value` starts and ends. - * @param source - * Raw source of character reference. - */ -export type ReferenceHandler = ( - this: Context, - value: string, - position: Position, - source: string -) => undefined | void - -/** - * @typeParam Context - * Value used as `this`. - * @this - * The `textContext` given to `parseEntities`. - * @param value - * String of content. - * @param position - * Place where `value` starts and ends. - */ -export type TextHandler = ( - this: Context, - value: string, - position: Position -) => undefined | void - -/** - * Configuration. - * - * @typeParam WarningContext - * Value used as `this` in the `warning` handler. - * @typeParam ReferenceContext - * Value used as `this` in the `reference` handler. - * @typeParam TextContext - * Value used as `this` in the `text` handler. - */ -export interface Options< - WarningContext = undefined, - ReferenceContext = undefined, - TextContext = undefined -> { - /** - * Additional character to accept. - * This allows other characters, without error, when following an ampersand. - * - * @default '' - */ - additional?: string | null | undefined - /** - * Whether to parse `value` as an attribute value. - * This results in slightly different behavior. - * - * @default false - */ - attribute?: boolean | null | undefined - /** - * Whether to allow nonterminated character references. - * For example, `©cat` for `©cat`. - * This behavior is compliant to the spec but can lead to unexpected results. - * - * @default true - */ - nonTerminated?: boolean | null | undefined - /** - * Starting `position` of `value` (`Point` or `Position`). Useful when dealing with values nested in some sort of syntax tree. - */ - position?: Readonly | Readonly | null | undefined - /** - * Context used when calling `warning`. - */ - warningContext?: WarningContext | null | undefined - /** - * Context used when calling `reference`. - */ - referenceContext?: ReferenceContext | null | undefined - /** - * Context used when calling `text`. - */ - textContext?: TextContext | null | undefined - /** - * Warning handler. - */ - warning?: WarningHandler | null | undefined - /** - * Reference handler. - */ - reference?: ReferenceHandler | null | undefined - /** - * Text handler. - */ - text?: TextHandler | null | undefined -} - -export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/index.js b/node_modules/parse-entities/index.js deleted file mode 100644 index 60157967c0..0000000000 --- a/node_modules/parse-entities/index.js +++ /dev/null @@ -1,3 +0,0 @@ -// Note: more types exposed from `index.d.ts`. -// To do: refactor to include type parameters in JS. -export {parseEntities} from './lib/index.js' diff --git a/node_modules/parse-entities/license b/node_modules/parse-entities/license deleted file mode 100644 index 8fbc47ddb9..0000000000 --- a/node_modules/parse-entities/license +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) Titus Wormer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/parse-entities/package.json b/node_modules/parse-entities/package.json deleted file mode 100644 index cb3820aa91..0000000000 --- a/node_modules/parse-entities/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "parse-entities", - "version": "4.0.2", - "description": "Parse HTML character references", - "license": "MIT", - "keywords": [ - "parse", - "html", - "character", - "reference", - "entity", - "entities" - ], - "repository": "wooorm/parse-entities", - "bugs": "https://github.com/wooorm/parse-entities/issues", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "author": "Titus Wormer (https://wooorm.com)", - "contributors": [ - "Titus Wormer (https://wooorm.com)" - ], - "sideEffects": false, - "type": "module", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "lib/", - "index.d.ts", - "index.js" - ], - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "c8": "^10.0.0", - "prettier": "^3.0.0", - "remark-cli": "^12.0.0", - "remark-preset-wooorm": "^10.0.0", - "type-coverage": "^2.0.0", - "typescript": "^5.0.0", - "xo": "^0.60.0" - }, - "scripts": { - "prepack": "npm run build && npm run format", - "build": "tsc --build --clean && tsc --build && type-coverage", - "format": "remark . -qfo && prettier . -w --log-level warn && xo --fix", - "test-api": "node --conditions development test.js", - "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", - "test": "npm run build && npm run format && npm run test-coverage" - }, - "prettier": { - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "bracketSpacing": false, - "semi": false, - "trailingComma": "none" - }, - "xo": { - "prettier": true, - "rules": { - "@typescript-eslint/consistent-type-definitions": "off", - "@typescript-eslint/ban-types": "off", - "complexity": "off", - "max-depth": "off", - "no-bitwise": "off", - "unicorn/numeric-separators-style": "off", - "unicorn/prefer-code-point": "off" - } - }, - "remarkConfig": { - "plugins": [ - "remark-preset-wooorm" - ] - }, - "typeCoverage": { - "atLeast": 100, - "detail": true, - "strict": true, - "ignoreCatch": true - } -} diff --git a/node_modules/parse-entities/readme.md b/node_modules/parse-entities/readme.md deleted file mode 100644 index cdc8c3279f..0000000000 --- a/node_modules/parse-entities/readme.md +++ /dev/null @@ -1,266 +0,0 @@ -# parse-entities - -[![Build][build-badge]][build] -[![Coverage][coverage-badge]][coverage] -[![Downloads][downloads-badge]][downloads] -[![Size][size-badge]][size] - -Parse HTML character references. - -## Contents - -* [What is this?](#what-is-this) -* [When should I use this?](#when-should-i-use-this) -* [Install](#install) -* [Use](#use) -* [API](#api) - * [`parseEntities(value[, options])`](#parseentitiesvalue-options) -* [Types](#types) -* [Compatibility](#compatibility) -* [Security](#security) -* [Related](#related) -* [Contribute](#contribute) -* [License](#license) - -## What is this? - -This is a small and powerful decoder of HTML character references (often called -entities). - -## When should I use this? - -You can use this for spec-compliant decoding of character references. -It’s small and fast enough to do that well. -You can also use this when making a linter, because there are different warnings -emitted with reasons for why and positional info on where they happened. - -## Install - -This package is [ESM only][esm]. -In Node.js (version 14.14+, 16.0+), install with [npm][]: - -```sh -npm install parse-entities -``` - -In Deno with [`esm.sh`][esmsh]: - -```js -import {parseEntities} from 'https://esm.sh/parse-entities@3' -``` - -In browsers with [`esm.sh`][esmsh]: - -```html - -``` - -## Use - -```js -import {parseEntities} from 'parse-entities' - -console.log(parseEntities('alpha & bravo'))) -// => alpha & bravo - -console.log(parseEntities('charlie ©cat; delta')) -// => charlie ©cat; delta - -console.log(parseEntities('echo © foxtrot ≠ golf 𝌆 hotel')) -// => echo © foxtrot ≠ golf 𝌆 hotel -``` - -## API - -This package exports the identifier `parseEntities`. -There is no default export. - -### `parseEntities(value[, options])` - -Parse HTML character references. - -##### `options` - -Configuration (optional). - -###### `options.additional` - -Additional character to accept (`string?`, default: `''`). -This allows other characters, without error, when following an ampersand. - -###### `options.attribute` - -Whether to parse `value` as an attribute value (`boolean?`, default: `false`). -This results in slightly different behavior. - -###### `options.nonTerminated` - -Whether to allow nonterminated references (`boolean`, default: `true`). -For example, `©cat` for `©cat`. -This behavior is compliant to the spec but can lead to unexpected results. - -###### `options.position` - -Starting `position` of `value` (`Position` or `Point`, optional). -Useful when dealing with values nested in some sort of syntax tree. -The default is: - -```js -{line: 1, column: 1, offset: 0} -``` - -###### `options.warning` - -Error handler ([`Function?`][warning]). - -###### `options.text` - -Text handler ([`Function?`][text]). - -###### `options.reference` - -Reference handler ([`Function?`][reference]). - -###### `options.warningContext` - -Context used when calling `warning` (`'*'`, optional). - -###### `options.textContext` - -Context used when calling `text` (`'*'`, optional). - -###### `options.referenceContext` - -Context used when calling `reference` (`'*'`, optional) - -##### Returns - -`string` — decoded `value`. - -#### `function warning(reason, point, code)` - -Error handler. - -###### Parameters - -* `this` (`*`) — refers to `warningContext` when given to `parseEntities` -* `reason` (`string`) — human readable reason for emitting a parse error -* `point` ([`Point`][point]) — place where the error occurred -* `code` (`number`) — machine readable code the error - -The following codes are used: - -| Code | Example | Note | -| ---- | ------------------ | --------------------------------------------- | -| `1` | `foo & bar` | Missing semicolon (named) | -| `2` | `foo { bar` | Missing semicolon (numeric) | -| `3` | `Foo &bar baz` | Empty (named) | -| `4` | `Foo &#` | Empty (numeric) | -| `5` | `Foo &bar; baz` | Unknown (named) | -| `6` | `Foo € baz` | [Disallowed reference][invalid] | -| `7` | `Foo � baz` | Prohibited: outside permissible unicode range | - -#### `function text(value, position)` - -Text handler. - -###### Parameters - -* `this` (`*`) — refers to `textContext` when given to `parseEntities` -* `value` (`string`) — string of content -* `position` ([`Position`][position]) — place where `value` starts and ends - -#### `function reference(value, position, source)` - -Character reference handler. - -###### Parameters - -* `this` (`*`) — refers to `referenceContext` when given to `parseEntities` -* `value` (`string`) — decoded character reference -* `position` ([`Position`][position]) — place where `source` starts and ends -* `source` (`string`) — raw source of character reference - -## Types - -This package is fully typed with [TypeScript][]. -It exports the additional types `Options`, `WarningHandler`, -`ReferenceHandler`, and `TextHandler`. - -## Compatibility - -This package is at least compatible with all maintained versions of Node.js. -As of now, that is Node.js 14.14+ and 16.0+. -It also works in Deno and modern browsers. - -## Security - -This package is safe: it matches the HTML spec to parse character references. - -## Related - -* [`wooorm/stringify-entities`](https://github.com/wooorm/stringify-entities) - — encode HTML character references -* [`wooorm/character-entities`](https://github.com/wooorm/character-entities) - — info on character references -* [`wooorm/character-entities-html4`](https://github.com/wooorm/character-entities-html4) - — info on HTML4 character references -* [`wooorm/character-entities-legacy`](https://github.com/wooorm/character-entities-legacy) - — info on legacy character references -* [`wooorm/character-reference-invalid`](https://github.com/wooorm/character-reference-invalid) - — info on invalid numeric character references - -## Contribute - -Yes please! -See [How to Contribute to Open Source][contribute]. - -## License - -[MIT][license] © [Titus Wormer][author] - - - -[build-badge]: https://github.com/wooorm/parse-entities/workflows/main/badge.svg - -[build]: https://github.com/wooorm/parse-entities/actions - -[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/parse-entities.svg - -[coverage]: https://codecov.io/github/wooorm/parse-entities - -[downloads-badge]: https://img.shields.io/npm/dm/parse-entities.svg - -[downloads]: https://www.npmjs.com/package/parse-entities - -[size-badge]: https://img.shields.io/bundlephobia/minzip/parse-entities.svg - -[size]: https://bundlephobia.com/result?p=parse-entities - -[npm]: https://docs.npmjs.com/cli/install - -[esmsh]: https://esm.sh - -[license]: license - -[author]: https://wooorm.com - -[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c - -[typescript]: https://www.typescriptlang.org - -[warning]: #function-warningreason-point-code - -[text]: #function-textvalue-position - -[reference]: #function-referencevalue-position-source - -[invalid]: https://github.com/wooorm/character-reference-invalid - -[point]: https://github.com/syntax-tree/unist#point - -[position]: https://github.com/syntax-tree/unist#position - -[contribute]: https://opensource.guide/how-to-contribute/ diff --git a/node_modules/path-key/index.d.ts b/node_modules/path-key/index.d.ts deleted file mode 100644 index 7c575d1975..0000000000 --- a/node_modules/path-key/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -/// - -declare namespace pathKey { - interface Options { - /** - Use a custom environment variables object. Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env). - */ - readonly env?: {[key: string]: string | undefined}; - - /** - Get the PATH key for a specific platform. Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform). - */ - readonly platform?: NodeJS.Platform; - } -} - -declare const pathKey: { - /** - Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform. - - @example - ``` - import pathKey = require('path-key'); - - const key = pathKey(); - //=> 'PATH' - - const PATH = process.env[key]; - //=> '/usr/local/bin:/usr/bin:/bin' - ``` - */ - (options?: pathKey.Options): string; - - // TODO: Remove this for the next major release, refactor the whole definition to: - // declare function pathKey(options?: pathKey.Options): string; - // export = pathKey; - default: typeof pathKey; -}; - -export = pathKey; diff --git a/node_modules/path-key/index.js b/node_modules/path-key/index.js deleted file mode 100644 index 0cf6415d60..0000000000 --- a/node_modules/path-key/index.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const pathKey = (options = {}) => { - const environment = options.env || process.env; - const platform = options.platform || process.platform; - - if (platform !== 'win32') { - return 'PATH'; - } - - return Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path'; -}; - -module.exports = pathKey; -// TODO: Remove this for the next major release -module.exports.default = pathKey; diff --git a/node_modules/path-key/license b/node_modules/path-key/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/path-key/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/path-key/package.json b/node_modules/path-key/package.json deleted file mode 100644 index c8cbd383af..0000000000 --- a/node_modules/path-key/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "path-key", - "version": "3.1.1", - "description": "Get the PATH environment variable key cross-platform", - "license": "MIT", - "repository": "sindresorhus/path-key", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "path", - "key", - "environment", - "env", - "variable", - "var", - "get", - "cross-platform", - "windows" - ], - "devDependencies": { - "@types/node": "^11.13.0", - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - } -} diff --git a/node_modules/path-key/readme.md b/node_modules/path-key/readme.md deleted file mode 100644 index a9052d7a69..0000000000 --- a/node_modules/path-key/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key) - -> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform - -It's usually `PATH`, but on Windows it can be any casing like `Path`... - - -## Install - -``` -$ npm install path-key -``` - - -## Usage - -```js -const pathKey = require('path-key'); - -const key = pathKey(); -//=> 'PATH' - -const PATH = process.env[key]; -//=> '/usr/local/bin:/usr/bin:/bin' -``` - - -## API - -### pathKey(options?) - -#### options - -Type: `object` - -##### env - -Type: `object`
                  -Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env) - -Use a custom environment variables object. - -#### platform - -Type: `string`
                  -Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform) - -Get the PATH key for a specific platform. - - ---- - -

                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/path-scurry/LICENSE.md b/node_modules/path-scurry/LICENSE.md deleted file mode 100644 index c5402b9577..0000000000 --- a/node_modules/path-scurry/LICENSE.md +++ /dev/null @@ -1,55 +0,0 @@ -# Blue Oak Model License - -Version 1.0.0 - -## Purpose - -This license gives everyone as much permission to work with -this software as possible, while protecting contributors -from liability. - -## Acceptance - -In order to receive this license, you must agree to its -rules. The rules of this license are both obligations -under that agreement and conditions to your license. -You must not do anything with this software that triggers -a rule that you cannot or will not follow. - -## Copyright - -Each contributor licenses you to do everything with this -software that would otherwise infringe that contributor's -copyright in it. - -## Notices - -You must ensure that everyone who gets a copy of -any part of this software from you, with or without -changes, also gets the text of this license or a link to -. - -## Excuse - -If anyone notifies you in writing that you have not -complied with [Notices](#notices), you can keep your -license by taking all practical steps to comply within 30 -days after the notice. If you do not do so, your license -ends immediately. - -## Patent - -Each contributor licenses you to do everything with this -software that would otherwise infringe any patent claims -they can license or become able to license. - -## Reliability - -No contributor can revoke this license. - -## No Liability - -***As far as the law allows, this software comes as is, -without any warranty or condition, and no contributor -will be liable to anyone for any damages related to this -software or this license, under any kind of legal claim.*** diff --git a/node_modules/path-scurry/README.md b/node_modules/path-scurry/README.md deleted file mode 100644 index b5cb495c0b..0000000000 --- a/node_modules/path-scurry/README.md +++ /dev/null @@ -1,636 +0,0 @@ -# path-scurry - -Extremely high performant utility for building tools that read -the file system, minimizing filesystem and path string munging -operations to the greatest degree possible. - -## Ugh, yet another file traversal thing on npm? - -Yes. None of the existing ones gave me exactly what I wanted. - -## Well what is it you wanted? - -While working on [glob](http://npm.im/glob), I found that I -needed a module to very efficiently manage the traversal over a -folder tree, such that: - -1. No `readdir()` or `stat()` would ever be called on the same - file or directory more than one time. -2. No `readdir()` calls would be made if we can be reasonably - sure that the path is not a directory. (Ie, a previous - `readdir()` or `stat()` covered the path, and - `ent.isDirectory()` is false.) -3. `path.resolve()`, `dirname()`, `basename()`, and other - string-parsing/munging operations are be minimized. This means - it has to track "provisional" child nodes that may not exist - (and if we find that they _don't_ exist, store that - information as well, so we don't have to ever check again). -4. The API is not limited to use as a stream/iterator/etc. There - are many cases where an API like node's `fs` is preferrable. -5. It's more important to prevent excess syscalls than to be up - to date, but it should be smart enough to know what it - _doesn't_ know, and go get it seamlessly when requested. -6. Do not blow up the JS heap allocation if operating on a - directory with a huge number of entries. -7. Handle all the weird aspects of Windows paths, like UNC paths - and drive letters and wrongway slashes, so that the consumer - can return canonical platform-specific paths without having to - parse or join or do any error-prone string munging. - -## PERFORMANCE - -JavaScript people throw around the word "blazing" a lot. I hope -that this module doesn't blaze anyone. But it does go very fast, -in the cases it's optimized for, if used properly. - -PathScurry provides ample opportunities to get extremely good -performance, as well as several options to trade performance for -convenience. - -Benchmarks can be run by executing `npm run bench`. - -As is always the case, doing more means going slower, doing less -means going faster, and there are trade offs between speed and -memory usage. - -PathScurry makes heavy use of [LRUCache](http://npm.im/lru-cache) -to efficiently cache whatever it can, and `Path` objects remain -in the graph for the lifetime of the walker, so repeated calls -with a single PathScurry object will be extremely fast. However, -adding items to a cold cache means "doing more", so in those -cases, we pay a price. Nothing is free, but every effort has been -made to reduce costs wherever possible. - -Also, note that a "cache as long as possible" approach means that -changes to the filesystem may not be reflected in the results of -repeated PathScurry operations. - -For resolving string paths, `PathScurry` ranges from 5-50 times -faster than `path.resolve` on repeated resolutions, but around -100 to 1000 times _slower_ on the first resolution. If your -program is spending a lot of time resolving the _same_ paths -repeatedly (like, thousands or millions of times), then this can -be beneficial. But both implementations are pretty fast, and -speeding up an infrequent operation from 4µs to 400ns is not -going to move the needle on your app's performance. - -For walking file system directory trees, a lot depends on how -often a given PathScurry object will be used, and also on the -walk method used. - -With default settings on a folder tree of 100,000 items, -consisting of around a 10-to-1 ratio of normal files to -directories, PathScurry performs comparably to -[@nodelib/fs.walk](http://npm.im/@nodelib/fs.walk), which is the -fastest and most reliable file system walker I could find. As far -as I can tell, it's almost impossible to go much faster in a -Node.js program, just based on how fast you can push syscalls out -to the fs thread pool. - -On my machine, that is about 1000-1200 completed walks per second -for async or stream walks, and around 500-600 walks per second -synchronously. - -In the warm cache state, PathScurry's performance increases -around 4x for async `for await` iteration, 10-15x faster for -streams and synchronous `for of` iteration, and anywhere from 30x -to 80x faster for the rest. - -``` -# walk 100,000 fs entries, 10/1 file/dir ratio -# operations / ms - New PathScurry object | Reuse PathScurry object - stream: 1112.589 | 13974.917 -sync stream: 492.718 | 15028.343 - async walk: 1095.648 | 32706.395 - sync walk: 527.632 | 46129.772 - async iter: 1288.821 | 5045.510 - sync iter: 498.496 | 17920.746 -``` - -A hand-rolled walk calling `entry.readdir()` and recursing -through the entries can benefit even more from caching, with -greater flexibility and without the overhead of streams or -generators. - -The cold cache state is still limited by the costs of file system -operations, but with a warm cache, the only bottleneck is CPU -speed and VM optimizations. Of course, in that case, some care -must be taken to ensure that you don't lose performance as a -result of silly mistakes, like calling `readdir()` on entries -that you know are not directories. - -``` -# manual recursive iteration functions - cold cache | warm cache -async: 1164.901 | 17923.320 - cb: 1101.127 | 40999.344 -zalgo: 1082.240 | 66689.936 - sync: 526.935 | 87097.591 -``` - -In this case, the speed improves by around 10-20x in the async -case, 40x in the case of using `entry.readdirCB` with protections -against synchronous callbacks, and 50-100x with callback -deferrals disabled, and _several hundred times faster_ for -synchronous iteration. - -If you can think of a case that is not covered in these -benchmarks, or an implementation that performs significantly -better than PathScurry, please [let me -know](https://github.com/isaacs/path-scurry/issues). - -## USAGE - -```ts -// hybrid module, load with either method -import { PathScurry, Path } from 'path-scurry' -// or: -const { PathScurry, Path } = require('path-scurry') - -// very simple example, say we want to find and -// delete all the .DS_Store files in a given path -// note that the API is very similar to just a -// naive walk with fs.readdir() -import { unlink } from 'fs/promises' - -// easy way, iterate over the directory and do the thing -const pw = new PathScurry(process.cwd()) -for await (const entry of pw) { - if (entry.isFile() && entry.name === '.DS_Store') { - unlink(entry.fullpath()) - } -} - -// here it is as a manual recursive method -const walk = async (entry: Path) => { - const promises: Promise = [] - // readdir doesn't throw on non-directories, it just doesn't - // return any entries, to save stack trace costs. - // Items are returned in arbitrary unsorted order - for (const child of await pw.readdir(entry)) { - // each child is a Path object - if (child.name === '.DS_Store' && child.isFile()) { - // could also do pw.resolve(entry, child.name), - // just like fs.readdir walking, but .fullpath is - // a *slightly* more efficient shorthand. - promises.push(unlink(child.fullpath())) - } else if (child.isDirectory()) { - promises.push(walk(child)) - } - } - return Promise.all(promises) -} - -walk(pw.cwd).then(() => { - console.log('all .DS_Store files removed') -}) - -const pw2 = new PathScurry('/a/b/c') // pw2.cwd is the Path for /a/b/c -const relativeDir = pw2.cwd.resolve('../x') // Path entry for '/a/b/x' -const relative2 = pw2.cwd.resolve('/a/b/d/../x') // same path, same entry -assert.equal(relativeDir, relative2) -``` - -## API - -[Full TypeDoc API](https://isaacs.github.io/path-scurry) - -There are platform-specific classes exported, but for the most -part, the default `PathScurry` and `Path` exports are what you -most likely need, unless you are testing behavior for other -platforms. - -Intended public API is documented here, but the full -documentation does include internal types, which should not be -accessed directly. - -### Interface `PathScurryOpts` - -The type of the `options` argument passed to the `PathScurry` -constructor. - -- `nocase`: Boolean indicating that file names should be compared - case-insensitively. Defaults to `true` on darwin and win32 - implementations, `false` elsewhere. - - **Warning** Performing case-insensitive matching on a - case-sensitive filesystem will result in occasionally very - bizarre behavior. Performing case-sensitive matching on a - case-insensitive filesystem may negatively impact performance. - -- `childrenCacheSize`: Number of child entries to cache, in order - to speed up `resolve()` and `readdir()` calls. Defaults to - `16 * 1024` (ie, `16384`). - - Setting it to a higher value will run the risk of JS heap - allocation errors on large directory trees. Setting it to `256` - or smaller will significantly reduce the construction time and - data consumption overhead, but with the downside of operations - being slower on large directory trees. Setting it to `0` will - mean that effectively no operations are cached, and this module - will be roughly the same speed as `fs` for file system - operations, and _much_ slower than `path.resolve()` for - repeated path resolution. - -- `fs` An object that will be used to override the default `fs` - methods. Any methods that are not overridden will use Node's - built-in implementations. - - - lstatSync - - readdir (callback `withFileTypes` Dirent variant, used for - readdirCB and most walks) - - readdirSync - - readlinkSync - - realpathSync - - promises: Object containing the following async methods: - - lstat - - readdir (Dirent variant only) - - readlink - - realpath - -### Interface `WalkOptions` - -The options object that may be passed to all walk methods. - -- `withFileTypes`: Boolean, default true. Indicates that `Path` - objects should be returned. Set to `false` to get string paths - instead. -- `follow`: Boolean, default false. Attempt to read directory - entries from symbolic links. Otherwise, only actual directories - are traversed. Regardless of this setting, a given target path - will only ever be walked once, meaning that a symbolic link to - a previously traversed directory will never be followed. - - Setting this imposes a slight performance penalty, because - `readlink` must be called on all symbolic links encountered, in - order to avoid infinite cycles. - -- `filter`: Function `(entry: Path) => boolean`. If provided, - will prevent the inclusion of any entry for which it returns a - falsey value. This will not prevent directories from being - traversed if they do not pass the filter, though it will - prevent the directories themselves from being included in the - results. By default, if no filter is provided, then all entries - are included in the results. -- `walkFilter`: Function `(entry: Path) => boolean`. If provided, - will prevent the traversal of any directory (or in the case of - `follow:true` symbolic links to directories) for which the - function returns false. This will not prevent the directories - themselves from being included in the result set. Use `filter` - for that. - -Note that TypeScript return types will only be inferred properly -from static analysis if the `withFileTypes` option is omitted, or -a constant `true` or `false` value. - -### Class `PathScurry` - -The main interface. Defaults to an appropriate class based on the -current platform. - -Use `PathScurryWin32`, `PathScurryDarwin`, or `PathScurryPosix` -if implementation-specific behavior is desired. - -All walk methods may be called with a `WalkOptions` argument to -walk over the object's current working directory with the -supplied options. - -#### `async pw.walk(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Walk the directory tree according to the options provided, -resolving to an array of all entries found. - -#### `pw.walkSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Walk the directory tree according to the options provided, -returning an array of all entries found. - -#### `pw.iterate(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Iterate over the directory asynchronously, for use with `for -await of`. This is also the default async iterator method. - -#### `pw.iterateSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Iterate over the directory synchronously, for use with `for of`. -This is also the default sync iterator method. - -#### `pw.stream(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Return a [Minipass](http://npm.im/minipass) stream that emits -each entry or path string in the walk. Results are made available -asynchronously. - -#### `pw.streamSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)` - -Return a [Minipass](http://npm.im/minipass) stream that emits -each entry or path string in the walk. Results are made available -synchronously, meaning that the walk will complete in a single -tick if the stream is fully consumed. - -#### `pw.cwd` - -Path object representing the current working directory for the -PathScurry. - -#### `pw.chdir(path: string)` - -Set the new effective current working directory for the scurry -object, so that `path.relative()` and `path.relativePosix()` -return values relative to the new cwd path. - -#### `pw.depth(path?: Path | string): number` - -Return the depth of the specified path (or the PathScurry cwd) -within the directory tree. - -Root entries have a depth of `0`. - -#### `pw.resolve(...paths: string[])` - -Caching `path.resolve()`. - -Significantly faster than `path.resolve()` if called repeatedly -with the same paths. Significantly slower otherwise, as it builds -out the cached Path entries. - -To get a `Path` object resolved from the `PathScurry`, use -`pw.cwd.resolve(path)`. Note that `Path.resolve` only takes a -single string argument, not multiple. - -#### `pw.resolvePosix(...paths: string[])` - -Caching `path.resolve()`, but always using posix style paths. - -This is identical to `pw.resolve(...paths)` on posix systems (ie, -everywhere except Windows). - -On Windows, it returns the full absolute UNC path using `/` -separators. Ie, instead of `'C:\\foo\\bar`, it would return -`//?/C:/foo/bar`. - -#### `pw.relative(path: string | Path): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -#### `pw.relativePosix(path: string | Path): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry, using `/` path separators. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -On posix platforms (ie, all platforms except Windows), this is -identical to `pw.relative(path)`. - -On Windows systems, it returns the resulting string as a -`/`-delimited path. If an absolute path is returned (because the -target does not share a common ancestor with `pw.cwd`), then a -full absolute UNC path will be returned. Ie, instead of -`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. - -#### `pw.basename(path: string | Path): string` - -Return the basename of the provided string or Path. - -#### `pw.dirname(path: string | Path): string` - -Return the parent directory of the supplied string or Path. - -#### `async pw.readdir(dir = pw.cwd, opts = { withFileTypes: true })` - -Read the directory and resolve to an array of strings if -`withFileTypes` is explicitly set to `false` or Path objects -otherwise. - -Can be called as `pw.readdir({ withFileTypes: boolean })` as -well. - -Returns `[]` if no entries are found, or if any error occurs. - -Note that TypeScript return types will only be inferred properly -from static analysis if the `withFileTypes` option is omitted, or -a constant `true` or `false` value. - -#### `pw.readdirSync(dir = pw.cwd, opts = { withFileTypes: true })` - -Synchronous `pw.readdir()` - -#### `async pw.readlink(link = pw.cwd, opts = { withFileTypes: false })` - -Call `fs.readlink` on the supplied string or Path object, and -return the result. - -Can be called as `pw.readlink({ withFileTypes: boolean })` as -well. - -Returns `undefined` if any error occurs (for example, if the -argument is not a symbolic link), or a `Path` object if -`withFileTypes` is explicitly set to `true`, or a string -otherwise. - -Note that TypeScript return types will only be inferred properly -from static analysis if the `withFileTypes` option is omitted, or -a constant `true` or `false` value. - -#### `pw.readlinkSync(link = pw.cwd, opts = { withFileTypes: false })` - -Synchronous `pw.readlink()` - -#### `async pw.lstat(entry = pw.cwd)` - -Call `fs.lstat` on the supplied string or Path object, and fill -in as much information as possible, returning the updated `Path` -object. - -Returns `undefined` if the entry does not exist, or if any error -is encountered. - -Note that some `Stats` data (such as `ino`, `dev`, and `mode`) -will not be supplied. For those things, you'll need to call -`fs.lstat` yourself. - -#### `pw.lstatSync(entry = pw.cwd)` - -Synchronous `pw.lstat()` - -#### `pw.realpath(entry = pw.cwd, opts = { withFileTypes: false })` - -Call `fs.realpath` on the supplied string or Path object, and -return the realpath if available. - -Returns `undefined` if any error occurs. - -May be called as `pw.realpath({ withFileTypes: boolean })` to run -on `pw.cwd`. - -#### `pw.realpathSync(entry = pw.cwd, opts = { withFileTypes: false })` - -Synchronous `pw.realpath()` - -### Class `Path` implements [fs.Dirent](https://nodejs.org/docs/latest/api/fs.html#class-fsdirent) - -Object representing a given path on the filesystem, which may or -may not exist. - -Note that the actual class in use will be either `PathWin32` or -`PathPosix`, depending on the implementation of `PathScurry` in -use. They differ in the separators used to split and join path -strings, and the handling of root paths. - -In `PathPosix` implementations, paths are split and joined using -the `'/'` character, and `'/'` is the only root path ever in use. - -In `PathWin32` implementations, paths are split using either -`'/'` or `'\\'` and joined using `'\\'`, and multiple roots may -be in use based on the drives and UNC paths encountered. UNC -paths such as `//?/C:/` that identify a drive letter, will be -treated as an alias for the same root entry as their associated -drive letter (in this case `'C:\\'`). - -#### `path.name` - -Name of this file system entry. - -**Important**: _always_ test the path name against any test -string using the `isNamed` method, and not by directly comparing -this string. Otherwise, unicode path strings that the system sees -as identical will not be properly treated as the same path, -leading to incorrect behavior and possible security issues. - -#### `path.isNamed(name: string): boolean` - -Return true if the path is a match for the given path name. This -handles case sensitivity and unicode normalization. - -Note: even on case-sensitive systems, it is **not** safe to test -the equality of the `.name` property to determine whether a given -pathname matches, due to unicode normalization mismatches. - -Always use this method instead of testing the `path.name` -property directly. - -#### `path.isCWD` - -Set to true if this `Path` object is the current working -directory of the `PathScurry` collection that contains it. - -#### `path.getType()` - -Returns the type of the Path object, `'File'`, `'Directory'`, -etc. - -#### `path.isType(t: type)` - -Returns true if `is{t}()` returns true. - -For example, `path.isType('Directory')` is equivalent to -`path.isDirectory()`. - -#### `path.depth()` - -Return the depth of the Path entry within the directory tree. -Root paths have a depth of `0`. - -#### `path.fullpath()` - -The fully resolved path to the entry. - -#### `path.fullpathPosix()` - -The fully resolved path to the entry, using `/` separators. - -On posix systems, this is identical to `path.fullpath()`. On -windows, this will return a fully resolved absolute UNC path -using `/` separators. Eg, instead of `'C:\\foo\\bar'`, it will -return `'//?/C:/foo/bar'`. - -#### `path.isFile()`, `path.isDirectory()`, etc. - -Same as the identical `fs.Dirent.isX()` methods. - -#### `path.isUnknown()` - -Returns true if the path's type is unknown. Always returns true -when the path is known to not exist. - -#### `path.resolve(p: string)` - -Return a `Path` object associated with the provided path string -as resolved from the current Path object. - -#### `path.relative(): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -#### `path.relativePosix(): string` - -Return the relative path from the PathWalker cwd to the supplied -path string or entry, using `/` path separators. - -If the nearest common ancestor is the root, then an absolute path -is returned. - -On posix platforms (ie, all platforms except Windows), this is -identical to `pw.relative(path)`. - -On Windows systems, it returns the resulting string as a -`/`-delimited path. If an absolute path is returned (because the -target does not share a common ancestor with `pw.cwd`), then a -full absolute UNC path will be returned. Ie, instead of -`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`. - -#### `async path.readdir()` - -Return an array of `Path` objects found by reading the associated -path entry. - -If path is not a directory, or if any error occurs, returns `[]`, -and marks all children as provisional and non-existent. - -#### `path.readdirSync()` - -Synchronous `path.readdir()` - -#### `async path.readlink()` - -Return the `Path` object referenced by the `path` as a symbolic -link. - -If the `path` is not a symbolic link, or any error occurs, -returns `undefined`. - -#### `path.readlinkSync()` - -Synchronous `path.readlink()` - -#### `async path.lstat()` - -Call `lstat` on the path object, and fill it in with details -determined. - -If path does not exist, or any other error occurs, returns -`undefined`, and marks the path as "unknown" type. - -#### `path.lstatSync()` - -Synchronous `path.lstat()` - -#### `async path.realpath()` - -Call `realpath` on the path, and return a Path object -corresponding to the result, or `undefined` if any error occurs. - -#### `path.realpathSync()` - -Synchornous `path.realpath()` diff --git a/node_modules/path-scurry/package.json b/node_modules/path-scurry/package.json deleted file mode 100644 index e176615789..0000000000 --- a/node_modules/path-scurry/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "path-scurry", - "version": "1.11.1", - "description": "walk paths fast and efficiently", - "author": "Isaac Z. Schlueter (https://blog.izs.me)", - "main": "./dist/commonjs/index.js", - "type": "module", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "types": "./dist/esm/index.d.ts", - "default": "./dist/esm/index.js" - }, - "require": { - "types": "./dist/commonjs/index.d.ts", - "default": "./dist/commonjs/index.js" - } - } - }, - "files": [ - "dist" - ], - "license": "BlueOak-1.0.0", - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "prepare": "tshy", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "tap", - "snap": "tap", - "format": "prettier --write . --loglevel warn", - "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts", - "bench": "bash ./scripts/bench.sh" - }, - "prettier": { - "experimentalTernaries": true, - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "devDependencies": { - "@nodelib/fs.walk": "^1.2.8", - "@types/node": "^20.12.11", - "c8": "^7.12.0", - "eslint-config-prettier": "^8.6.0", - "mkdirp": "^3.0.0", - "prettier": "^3.2.5", - "rimraf": "^5.0.1", - "tap": "^18.7.2", - "ts-node": "^10.9.2", - "tshy": "^1.14.0", - "typedoc": "^0.25.12", - "typescript": "^5.4.3" - }, - "tap": { - "typecheck": true - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/path-scurry" - }, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "tshy": { - "selfLink": false, - "exports": { - "./package.json": "./package.json", - ".": "./src/index.ts" - } - }, - "types": "./dist/commonjs/index.d.ts" -} diff --git a/node_modules/punycode.js/LICENSE-MIT.txt b/node_modules/punycode.js/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/punycode.js/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/punycode.js/README.md b/node_modules/punycode.js/README.md deleted file mode 100644 index f611016b01..0000000000 --- a/node_modules/punycode.js/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Punycode.js [![punycode on npm](https://img.shields.io/npm/v/punycode)](https://www.npmjs.com/package/punycode) [![](https://data.jsdelivr.com/v1/package/npm/punycode/badge)](https://www.jsdelivr.com/package/npm/punycode) - -Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). - -This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: - -* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) -* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) -* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) -* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) -* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) - -This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). - -This project provides a CommonJS module that uses ES2015+ features and JavaScript module, which work in modern Node.js versions and browsers. For the old Punycode.js version that offers the same functionality in a UMD build with support for older pre-ES2015 runtimes, including Rhino, Ringo, and Narwhal, see [v1.4.1](https://github.com/mathiasbynens/punycode.js/releases/tag/v1.4.1). - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install punycode --save -``` - -In [Node.js](https://nodejs.org/): - -> ⚠️ Note that userland modules don't hide core modules. -> For example, `require('punycode')` still imports the deprecated core module even if you executed `npm install punycode`. -> Use `require('punycode/')` to import userland modules rather than core modules. - -```js -const punycode = require('punycode/'); -``` - -## API - -### `punycode.decode(string)` - -Converts a Punycode string of ASCII symbols to a string of Unicode symbols. - -```js -// decode domain name parts -punycode.decode('maana-pta'); // 'mañana' -punycode.decode('--dqo34k'); // '☃-⌘' -``` - -### `punycode.encode(string)` - -Converts a string of Unicode symbols to a Punycode string of ASCII symbols. - -```js -// encode domain name parts -punycode.encode('mañana'); // 'maana-pta' -punycode.encode('☃-⌘'); // '--dqo34k' -``` - -### `punycode.toUnicode(input)` - -Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. - -```js -// decode domain names -punycode.toUnicode('xn--maana-pta.com'); -// → 'mañana.com' -punycode.toUnicode('xn----dqo34k.com'); -// → '☃-⌘.com' - -// decode email addresses -punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); -// → 'джумла@джpумлатест.bрфa' -``` - -### `punycode.toASCII(input)` - -Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. - -```js -// encode domain names -punycode.toASCII('mañana.com'); -// → 'xn--maana-pta.com' -punycode.toASCII('☃-⌘.com'); -// → 'xn----dqo34k.com' - -// encode email addresses -punycode.toASCII('джумла@джpумлатест.bрфa'); -// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' -``` - -### `punycode.ucs2` - -#### `punycode.ucs2.decode(string)` - -Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. - -```js -punycode.ucs2.decode('abc'); -// → [0x61, 0x62, 0x63] -// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: -punycode.ucs2.decode('\uD834\uDF06'); -// → [0x1D306] -``` - -#### `punycode.ucs2.encode(codePoints)` - -Creates a string based on an array of numeric code point values. - -```js -punycode.ucs2.encode([0x61, 0x62, 0x63]); -// → 'abc' -punycode.ucs2.encode([0x1D306]); -// → '\uD834\uDF06' -``` - -### `punycode.version` - -A string representing the current Punycode.js version number. - -## For maintainers - -### How to publish a new release - -1. On the `main` branch, bump the version number in `package.json`: - - ```sh - npm version patch -m 'Release v%s' - ``` - - Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). - - Note that this produces a Git commit + tag. - -1. Push the release commit and tag: - - ```sh - git push && git push --tags - ``` - - Our CI then automatically publishes the new release to npm, under both the [`punycode`](https://www.npmjs.com/package/punycode) and [`punycode.js`](https://www.npmjs.com/package/punycode.js) names. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/punycode.js/package.json b/node_modules/punycode.js/package.json deleted file mode 100644 index 7794798516..0000000000 --- a/node_modules/punycode.js/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "punycode.js", - "version": "2.3.1", - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "homepage": "https://mths.be/punycode", - "main": "punycode.js", - "jsnext:main": "punycode.es6.js", - "module": "punycode.es6.js", - "engines": { - "node": ">=6" - }, - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "contributors": [ - { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/punycode.js.git" - }, - "bugs": "https://github.com/mathiasbynens/punycode.js/issues", - "files": [ - "LICENSE-MIT.txt", - "punycode.js", - "punycode.es6.js" - ], - "scripts": { - "test": "mocha tests", - "build": "node scripts/prepublish.js" - }, - "devDependencies": { - "codecov": "^3.8.3", - "nyc": "^15.1.0", - "mocha": "^10.2.0" - }, - "jspm": { - "map": { - "./punycode.js": { - "node": "@node/punycode" - } - } - } -} diff --git a/node_modules/punycode.js/punycode.es6.js b/node_modules/punycode.js/punycode.es6.js deleted file mode 100644 index dadece25b3..0000000000 --- a/node_modules/punycode.js/punycode.es6.js +++ /dev/null @@ -1,444 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, callback) { - const result = []; - let length = array.length; - while (length--) { - result[length] = callback(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {String} A new string of characters returned by the callback - * function. - */ -function mapDomain(domain, callback) { - const parts = domain.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - domain = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - domain = domain.replace(regexSeparators, '\x2E'); - const labels = domain.split('.'); - const encoded = map(labels, callback).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = codePoints => String.fromCodePoint(...codePoints); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint >= 0x30 && codePoint < 0x3A) { - return 26 + (codePoint - 0x30); - } - if (codePoint >= 0x41 && codePoint < 0x5B) { - return codePoint - 0x41; - } - if (codePoint >= 0x61 && codePoint < 0x7B) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - const oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base) { - error('invalid-input'); - } - if (digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - const inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - const basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue === n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.3.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; -export default punycode; diff --git a/node_modules/punycode.js/punycode.js b/node_modules/punycode.js/punycode.js deleted file mode 100644 index a1ef251924..0000000000 --- a/node_modules/punycode.js/punycode.js +++ /dev/null @@ -1,443 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7F]/; // Note: U+007F DEL is excluded too. -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, callback) { - const result = []; - let length = array.length; - while (length--) { - result[length] = callback(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {String} A new string of characters returned by the callback - * function. - */ -function mapDomain(domain, callback) { - const parts = domain.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - domain = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - domain = domain.replace(regexSeparators, '\x2E'); - const labels = domain.split('.'); - const encoded = map(labels, callback).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = codePoints => String.fromCodePoint(...codePoints); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint >= 0x30 && codePoint < 0x3A) { - return 26 + (codePoint - 0x30); - } - if (codePoint >= 0x41 && codePoint < 0x5B) { - return codePoint - 0x41; - } - if (codePoint >= 0x61 && codePoint < 0x7B) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - const oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base) { - error('invalid-input'); - } - if (digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - const inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - const basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue === n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.3.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -module.exports = punycode; diff --git a/node_modules/run-con/.circleci/config.yml b/node_modules/run-con/.circleci/config.yml deleted file mode 100644 index 6eaa0c8e10..0000000000 --- a/node_modules/run-con/.circleci/config.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: 2.1 -orbs: - node: circleci/node@5.1.0 -workflows: - node-tests: - jobs: - - node/test diff --git a/node_modules/run-con/.github/FUNDING.yml b/node_modules/run-con/.github/FUNDING.yml deleted file mode 100644 index f9d9ce5cb8..0000000000 --- a/node_modules/run-con/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -# These are supported funding model platforms - -issuehunt: goatandsheep/rc diff --git a/node_modules/run-con/.github/dependabot.yml b/node_modules/run-con/.github/dependabot.yml deleted file mode 100644 index f45b33e280..0000000000 --- a/node_modules/run-con/.github/dependabot.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: 2 -updates: -- package-ecosystem: npm - directory: "/" - schedule: - interval: daily - time: "10:00" - open-pull-requests-limit: 10 - versioning-strategy: increase diff --git a/node_modules/run-con/.github/workflows/coverage.yml b/node_modules/run-con/.github/workflows/coverage.yml deleted file mode 100644 index 0e6653cd91..0000000000 --- a/node_modules/run-con/.github/workflows/coverage.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Running Code Coverage - -on: [push, pull_request] - -permissions: read-all - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x, 16.x, 18.x, 20.x] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 2 - - - name: Set up Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - name: Install dependencies - run: npm install - - - name: Run the tests - run: npm test -- --coverage - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - verbose: true diff --git a/node_modules/run-con/.github/workflows/dependabot.yml b/node_modules/run-con/.github/workflows/dependabot.yml deleted file mode 100644 index a4679eb58e..0000000000 --- a/node_modules/run-con/.github/workflows/dependabot.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: CreateDependabotIssue -on: - workflow_dispatch: - pull_request: - types: [opened, reopened] - -permissions: - actions: none - checks: none - contents: read - deployments: none - id-token: write - issues: write - discussions: none - packages: none - pages: none - pull-requests: none - repository-projects: none - security-events: none - statuses: none - -jobs: - issue: - runs-on: ubuntu-latest - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - steps: - - name: Checks if Dependabot PR - if: ${{github.event_name != 'pull_request'}} - run: echo "no dependabot" - - uses: actions/checkout@v3 - if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} - - - name: Open issue if Dependabot PR - if: ${{github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'app/dependabot'}} - env: - pr_title: ${{github.event.pull_request.title}} - pr_number: ${{github.event.pull_request.number}} - pr_url: ${{github.event.pull_request.url}} - run: | - title="Dependabot PR $pr_title opened" - body="Dependabot has opened PR #$pr_number - Link: $pr_url" - gh issue create --title "$title" --body "$body" diff --git a/node_modules/run-con/.github/workflows/issuehunt.yml b/node_modules/run-con/.github/workflows/issuehunt.yml deleted file mode 100644 index 67881e8ae7..0000000000 --- a/node_modules/run-con/.github/workflows/issuehunt.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Auto message for Issues -on: - issues: - types: [opened, reopened] - -permissions: - actions: none - checks: none - contents: read - deployments: none - id-token: write - issues: write - discussions: none - packages: none - pages: none - pull-requests: none - repository-projects: none - security-events: none - statuses: none - -jobs: - comment: - name: Hello new contributor - runs-on: ubuntu-latest - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v3 - - name: Posts comment - env: - issue_num: ${{github.event.issue.number}} - comment_message: "Hey, thank you for opening this issue! 🙂 To boost priority on this issue and support open source please tip the team at https://issuehunt.io/r/${{github.repository}}/issues/${{github.event.issue.number }}" - run: gh issue comment $issue_num --body "$comment_message" diff --git a/node_modules/run-con/LICENSE.APACHE2 b/node_modules/run-con/LICENSE.APACHE2 deleted file mode 100644 index c65fbe9d29..0000000000 --- a/node_modules/run-con/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/run-con/LICENSE.BSD b/node_modules/run-con/LICENSE.BSD deleted file mode 100644 index dd83f1731c..0000000000 --- a/node_modules/run-con/LICENSE.BSD +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2013, Dominic Tarr -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. diff --git a/node_modules/run-con/LICENSE.MIT b/node_modules/run-con/LICENSE.MIT deleted file mode 100644 index 2cb7d7e207..0000000000 --- a/node_modules/run-con/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/run-con/README.md b/node_modules/run-con/README.md deleted file mode 100644 index f3d146441c..0000000000 --- a/node_modules/run-con/README.md +++ /dev/null @@ -1,239 +0,0 @@ -# run-con - -Based on -[RC ![npm downloads](https://img.shields.io/npm/dt/rc.svg?style=flat-square)](https://www.npmjs.com/package/rc) - -> The non-configurable runtime configuration loader for lazy people. - -[![npm version](https://badgen.net/npm/v/run-con)](https://www.npmjs.com/package/run-con) -![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/npm/run-con) -[![codecov](https://codecov.io/gh/goatandsheep/rc/branch/main/graph/badge.svg?token=8XbycgIgai)](https://codecov.io/gh/goatandsheep/rc) -[![npm downloads](https://img.shields.io/npm/dt/run-con.svg?style=flat-square)](https://www.npmjs.com/package/run-con) -[![Known Vulnerabilities](https://snyk.io/test/github/goatandsheep/rc/badge.svg)](https://snyk.io/test/github/goatandsheep/rc) - -## Usage - -The only option is to pass run-con the name of your app, and your default configuration. - -```javascript -var conf = require('run-con')(appname, { - //defaults go here. - port: 2468, - - //defaults which are objects will be merged, not replaced - views: { - engine: 'jade' - } -}); -``` - -`run-con` will return your configuration options merged with the defaults you specify. -If you pass in a predefined defaults object, it will be mutated: - -```javascript -var conf = {}; -require('run-con')(appname, conf); -``` - -If `run-con` finds any config files for your app, the returned config object will have -a `configs` array containing their paths: - -```javascript -var appCfg = require('run-con')(appname, conf); -appCfg.configs[0] // /etc/appnamerc -appCfg.configs[1] // /home/dominictarr/.config/appname -appCfg.config // same as appCfg.configs[appCfg.configs.length - 1] -``` - -## Standards - -Given your application name (`appname`), run-con will look in all the obvious places for configuration. - - * command line arguments, parsed by minimist _(e.g. `--foo baz`, also nested: `--foo.bar=baz`)_ - * environment variables prefixed with `${appname}_` - * or use "\_\_" to indicate nested properties
                  _(e.g. `appname_foo__bar__baz` => `foo.bar.baz`)_ - * if you passed an option `--config file` then from that file - * a local `.${appname}rc` or the first found looking in `./ ../ ../../ ../../../` etc. - * `$HOME/.${appname}rc` - * `$HOME/.${appname}/config` - * `$HOME/.config/${appname}` - * `$HOME/.config/${appname}/config` - * `/etc/${appname}rc` - * `/etc/${appname}/config` - * the defaults object you passed in. - -All configuration sources that were found will be flattened into one object, -so that sources **earlier** in this list override later ones. - - -## Configuration File Formats - -Configuration files (e.g. `.appnamerc`) may be in either [json](http://json.org/example) or [ini](http://en.wikipedia.org/wiki/INI_file) format. **No** file extension (`.json` or `.ini`) should be used. The example configurations below are equivalent: - - -#### Formatted as `ini` - -``` -; You can include comments in `ini` format if you want. - -dependsOn=0.10.0 - - -; `run-con` has built-in support for ini sections, see? - -[commands] - www = ./commands/www - console = ./commands/repl - - -; You can even do nested sections - -[generators.options] - engine = ejs - -[generators.modules] - new = generate-new - engine = generate-backend - -``` - -#### Formatted as `json` - -```javascript -{ - // You can even comment your JSON, if you want - "dependsOn": "0.10.0", - "commands": { - "www": "./commands/www", - "console": "./commands/repl" - }, - "generators": { - "options": { - "engine": "ejs" - }, - "modules": { - "new": "generate-new", - "backend": "generate-backend" - } - } -} -``` - -Comments are stripped from JSON config via [strip-json-comments](https://github.com/sindresorhus/strip-json-comments). - -> Since ini, and env variables do not have a standard for types, your application needs be prepared for strings. - -To ensure that string representations of booleans and numbers are always converted into their proper types (especially useful if you intend to do strict `===` comparisons), consider using a module such as [parse-strings-in-object](https://github.com/anselanza/parse-strings-in-object) to wrap the config object returned from run-con. - - -## Simple example demonstrating precedence -Assume you have an application like this (notice the hard-coded defaults passed to run-con): -``` -const conf = require('run-con')('myapp', { - port: 12345, - mode: 'test' -}); - -console.log(JSON.stringify(conf, null, 2)); -``` -You also have a file `config.json`, with these contents: -``` -{ - "port": 9000, - "foo": "from config json", - "something": "else" -} -``` -And a file `.myapprc` in the same folder, with these contents: -``` -{ - "port": "3001", - "foo": "bar" -} -``` -Here is the expected output from various commands: - -`node .` -``` -{ - "port": "3001", - "mode": "test", - "foo": "bar", - "_": [], - "configs": [ - "/Users/stephen/repos/conftest/.myapprc" - ], - "config": "/Users/stephen/repos/conftest/.myapprc" -} -``` -*Default `mode` from hard-coded object is retained, but port is overridden by `.myapprc` file (automatically found based on appname match), and `foo` is added.* - - -`node . --foo baz` -``` -{ - "port": "3001", - "mode": "test", - "foo": "baz", - "_": [], - "configs": [ - "/Users/stephen/repos/conftest/.myapprc" - ], - "config": "/Users/stephen/repos/conftest/.myapprc" -} -``` -*Same result as above but `foo` is overridden because command-line arguments take precedence over `.myapprc` file.* - -`node . --foo barbar --config config.json` -``` -{ - "port": 9000, - "mode": "test", - "foo": "barbar", - "something": "else", - "_": [], - "config": "config.json", - "configs": [ - "/Users/stephen/repos/conftest/.myapprc", - "config.json" - ] -} -``` -*Now the `port` comes from the `config.json` file specified (overriding the value from `.myapprc`), and `foo` value is overridden by command-line despite also being specified in the `config.json` file.* - - - -## Advanced Usage - -#### Pass in your own `argv` - -You may pass in your own `argv` as the third argument to `run-con`. This is in case you want to [use your own command-line opts parser](https://github.com/dominictarr/rc/pull/12). - -```javascript -require('run-con')(appname, defaults, customArgvParser); -``` - -## Pass in your own parser - -If you have a special need to use a non-standard parser, -you can do so by passing in the parser as the 4th argument. -(leave the 3rd as null to get the default args parser) - -```javascript -require('run-con')(appname, defaults, null, parser); -``` - -This may also be used to force a more strict format, -such as strict, valid JSON only. - -## Note on Performance - -`run-con` is running `fs.statSync`-- so make sure you don't use it in a hot code path (e.g. a request handler) - -## Credit - -Original author is @dominictarr - -## License - -Multi-licensed under the two-clause BSD License, MIT License, or Apache License, version 2.0 diff --git a/node_modules/run-con/browser.js b/node_modules/run-con/browser.js deleted file mode 100644 index 2a9767c9a3..0000000000 --- a/node_modules/run-con/browser.js +++ /dev/null @@ -1,7 +0,0 @@ - -// when this is loaded into the browser, -// just use the defaults... - -module.exports = function (name, defaults) { - return defaults -} diff --git a/node_modules/run-con/cli.js b/node_modules/run-con/cli.js deleted file mode 100755 index 34f1c04e6a..0000000000 --- a/node_modules/run-con/cli.js +++ /dev/null @@ -1,4 +0,0 @@ -#! /usr/bin/env node -var rc = require('./index') - -console.log(JSON.stringify(rc(process.argv[2]), false, 2)) diff --git a/node_modules/run-con/index.js b/node_modules/run-con/index.js deleted file mode 100644 index ef1c31987e..0000000000 --- a/node_modules/run-con/index.js +++ /dev/null @@ -1,53 +0,0 @@ -var cc = require('./lib/utils') -var join = require('path').join -var deepExtend = require('deep-extend') -var etc = '/etc' -var win = process.platform === "win32" -var home = win - ? process.env.USERPROFILE - : process.env.HOME - -module.exports = function (name, defaults, argv, parse) { - if('string' !== typeof name) - throw new Error('rc(name): name *must* be string') - if(!argv) - argv = require('minimist')(process.argv.slice(2)) - defaults = ( - 'string' === typeof defaults - ? cc.json(defaults) : defaults - ) || {} - - parse = parse || cc.parse - - var env = cc.env(name + '_') - - var configs = [defaults] - var configFiles = [] - function addConfigFile (file) { - if (configFiles.indexOf(file) >= 0) return - var fileConfig = cc.file(file) - if (fileConfig) { - configs.push(parse(fileConfig)) - configFiles.push(file) - } - } - - // which files do we look at? - if (!win) - [join(etc, name, 'config'), - join(etc, name + 'rc')].forEach(addConfigFile) - if (home) - [join(home, '.config', name, 'config'), - join(home, '.config', name), - join(home, '.' + name, 'config'), - join(home, '.' + name + 'rc')].forEach(addConfigFile) - addConfigFile(cc.find('.'+name+'rc')) - if (env.config) addConfigFile(env.config) - if (argv.config) addConfigFile(argv.config) - - return deepExtend.apply(null, configs.concat([ - env, - argv, - configFiles.length ? {configs: configFiles, config: configFiles[configFiles.length - 1]} : undefined, - ])) -} diff --git a/node_modules/run-con/package.json b/node_modules/run-con/package.json deleted file mode 100644 index a9e6ee4405..0000000000 --- a/node_modules/run-con/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "run-con", - "version": "1.3.2", - "description": "hardwired configuration loader", - "main": "index.js", - "browser": "browser.js", - "scripts": { - "test": "node test/test.js && node test/ini.js && node test/nested-env-vars.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/goatandsheep/rc.git" - }, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "keywords": [ - "config", - "rc", - "unix", - "defaults" - ], - "bin": "./cli.js", - "author": "Kemal Ahmed ", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~4.1.0", - "minimist": "^1.2.8", - "strip-json-comments": "~3.1.1" - } -} diff --git a/node_modules/run-con/renovate.json b/node_modules/run-con/renovate.json deleted file mode 100644 index 8b1edd8cd3..0000000000 --- a/node_modules/run-con/renovate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" - ] -} diff --git a/node_modules/shebang-command/index.js b/node_modules/shebang-command/index.js deleted file mode 100644 index f35db30851..0000000000 --- a/node_modules/shebang-command/index.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; -const shebangRegex = require('shebang-regex'); - -module.exports = (string = '') => { - const match = string.match(shebangRegex); - - if (!match) { - return null; - } - - const [path, argument] = match[0].replace(/#! ?/, '').split(' '); - const binary = path.split('/').pop(); - - if (binary === 'env') { - return argument; - } - - return argument ? `${binary} ${argument}` : binary; -}; diff --git a/node_modules/shebang-command/license b/node_modules/shebang-command/license deleted file mode 100644 index db6bc32cc7..0000000000 --- a/node_modules/shebang-command/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Kevin Mårtensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-command/package.json b/node_modules/shebang-command/package.json deleted file mode 100644 index 18e3c04638..0000000000 --- a/node_modules/shebang-command/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "shebang-command", - "version": "2.0.0", - "description": "Get the command from a shebang", - "license": "MIT", - "repository": "kevva/shebang-command", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "github.com/kevva" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "cmd", - "command", - "parse", - "shebang" - ], - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "devDependencies": { - "ava": "^2.3.0", - "xo": "^0.24.0" - } -} diff --git a/node_modules/shebang-command/readme.md b/node_modules/shebang-command/readme.md deleted file mode 100644 index 84feb442d7..0000000000 --- a/node_modules/shebang-command/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command) - -> Get the command from a shebang - - -## Install - -``` -$ npm install shebang-command -``` - - -## Usage - -```js -const shebangCommand = require('shebang-command'); - -shebangCommand('#!/usr/bin/env node'); -//=> 'node' - -shebangCommand('#!/bin/bash'); -//=> 'bash' -``` - - -## API - -### shebangCommand(string) - -#### string - -Type: `string` - -String containing a shebang. diff --git a/node_modules/shebang-regex/index.d.ts b/node_modules/shebang-regex/index.d.ts deleted file mode 100644 index 61d034b31e..0000000000 --- a/node_modules/shebang-regex/index.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** -Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line. - -@example -``` -import shebangRegex = require('shebang-regex'); - -const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; - -shebangRegex.test(string); -//=> true - -shebangRegex.exec(string)[0]; -//=> '#!/usr/bin/env node' - -shebangRegex.exec(string)[1]; -//=> '/usr/bin/env node' -``` -*/ -declare const shebangRegex: RegExp; - -export = shebangRegex; diff --git a/node_modules/shebang-regex/index.js b/node_modules/shebang-regex/index.js deleted file mode 100644 index 63fc4a0b67..0000000000 --- a/node_modules/shebang-regex/index.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -module.exports = /^#!(.*)/; diff --git a/node_modules/shebang-regex/license b/node_modules/shebang-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/shebang-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/shebang-regex/package.json b/node_modules/shebang-regex/package.json deleted file mode 100644 index 00ab30feee..0000000000 --- a/node_modules/shebang-regex/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "shebang-regex", - "version": "3.0.0", - "description": "Regular expression for matching a shebang line", - "license": "MIT", - "repository": "sindresorhus/shebang-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "regex", - "regexp", - "shebang", - "match", - "test", - "line" - ], - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - } -} diff --git a/node_modules/shebang-regex/readme.md b/node_modules/shebang-regex/readme.md deleted file mode 100644 index 5ecf863aa3..0000000000 --- a/node_modules/shebang-regex/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex) - -> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line - - -## Install - -``` -$ npm install shebang-regex -``` - - -## Usage - -```js -const shebangRegex = require('shebang-regex'); - -const string = '#!/usr/bin/env node\nconsole.log("unicorns");'; - -shebangRegex.test(string); -//=> true - -shebangRegex.exec(string)[0]; -//=> '#!/usr/bin/env node' - -shebangRegex.exec(string)[1]; -//=> '/usr/bin/env node' -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt deleted file mode 100644 index 954f2fa823..0000000000 --- a/node_modules/signal-exit/LICENSE.txt +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md deleted file mode 100644 index c55cd45ee3..0000000000 --- a/node_modules/signal-exit/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# signal-exit - -When you want to fire an event no matter how a process exits: - -- reaching the end of execution. -- explicitly having `process.exit(code)` called. -- having `process.kill(pid, sig)` called. -- receiving a fatal signal from outside the process - -Use `signal-exit`. - -```js -// Hybrid module, either works -import { onExit } from 'signal-exit' -// or: -// const { onExit } = require('signal-exit') - -onExit((code, signal) => { - console.log('process exited!', code, signal) -}) -``` - -## API - -`remove = onExit((code, signal) => {}, options)` - -The return value of the function is a function that will remove -the handler. - -Note that the function _only_ fires for signals if the signal -would cause the process to exit. That is, there are no other -listeners, and it is a fatal signal. - -If the global `process` object is not suitable for this purpose -(ie, it's unset, or doesn't have an `emit` method, etc.) then the -`onExit` function is a no-op that returns a no-op `remove` method. - -### Options - -- `alwaysLast`: Run this handler after any other signal or exit - handlers. This causes `process.emit` to be monkeypatched. - -### Capturing Signal Exits - -If the handler returns an exact boolean `true`, and the exit is a -due to signal, then the signal will be considered handled, and -will _not_ trigger a synthetic `process.kill(process.pid, -signal)` after firing the `onExit` handlers. - -In this case, it your responsibility as the caller to exit with a -signal (for example, by calling `process.kill()`) if you wish to -preserve the same exit status that would otherwise have occurred. -If you do not, then the process will likely exit gracefully with -status 0 at some point, assuming that no other terminating signal -or other exit trigger occurs. - -Prior to calling handlers, the `onExit` machinery is unloaded, so -any subsequent exits or signals will not be handled, even if the -signal is captured and the exit is thus prevented. - -Note that numeric code exits may indicate that the process is -already committed to exiting, for example due to a fatal -exception or unhandled promise rejection, and so there is no way to -prevent it safely. - -### Browser Fallback - -The `'signal-exit/browser'` module is the same fallback shim that -just doesn't do anything, but presents the same function -interface. - -Patches welcome to add something that hooks onto -`window.onbeforeunload` or similar, but it might just not be a -thing that makes sense there. diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json deleted file mode 100644 index ac176cec74..0000000000 --- a/node_modules/signal-exit/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "signal-exit", - "version": "4.1.0", - "description": "when you want to fire an event no matter how a process exits.", - "main": "./dist/cjs/index.js", - "module": "./dist/mjs/index.js", - "browser": "./dist/mjs/browser.js", - "types": "./dist/mjs/index.d.ts", - "exports": { - ".": { - "import": { - "types": "./dist/mjs/index.d.ts", - "default": "./dist/mjs/index.js" - }, - "require": { - "types": "./dist/cjs/index.d.ts", - "default": "./dist/cjs/index.js" - } - }, - "./signals": { - "import": { - "types": "./dist/mjs/signals.d.ts", - "default": "./dist/mjs/signals.js" - }, - "require": { - "types": "./dist/cjs/signals.d.ts", - "default": "./dist/cjs/signals.js" - } - }, - "./browser": { - "import": { - "types": "./dist/mjs/browser.d.ts", - "default": "./dist/mjs/browser.js" - }, - "require": { - "types": "./dist/cjs/browser.d.ts", - "default": "./dist/cjs/browser.js" - } - } - }, - "files": [ - "dist" - ], - "engines": { - "node": ">=14" - }, - "repository": { - "type": "git", - "url": "https://github.com/tapjs/signal-exit.git" - }, - "keywords": [ - "signal", - "exit" - ], - "author": "Ben Coe ", - "license": "ISC", - "devDependencies": { - "@types/cross-spawn": "^6.0.2", - "@types/node": "^18.15.11", - "@types/signal-exit": "^3.0.1", - "@types/tap": "^15.0.8", - "c8": "^7.13.0", - "prettier": "^2.8.6", - "tap": "^16.3.4", - "ts-node": "^10.9.1", - "typedoc": "^0.23.28", - "typescript": "^5.0.2" - }, - "scripts": { - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags", - "preprepare": "rm -rf dist", - "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json && bash ./scripts/fixup.sh", - "pretest": "npm run prepare", - "presnap": "npm run prepare", - "test": "c8 tap", - "snap": "c8 tap", - "format": "prettier --write . --loglevel warn", - "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts" - }, - "prettier": { - "semi": false, - "printWidth": 75, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true, - "jsxSingleQuote": false, - "bracketSameLine": true, - "arrowParens": "avoid", - "endOfLine": "lf" - }, - "tap": { - "coverage": false, - "jobs": 1, - "node-arg": [ - "--no-warnings", - "--loader", - "ts-node/esm" - ], - "ts": false - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } -} diff --git a/node_modules/smol-toml/LICENSE b/node_modules/smol-toml/LICENSE deleted file mode 100644 index 1ed1c049b4..0000000000 --- a/node_modules/smol-toml/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) Squirrel Chat et al., All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/smol-toml/README.md b/node_modules/smol-toml/README.md deleted file mode 100644 index 0809b5e8c6..0000000000 --- a/node_modules/smol-toml/README.md +++ /dev/null @@ -1,192 +0,0 @@ -# smol-toml -[![TOML 1.0.0](https://img.shields.io/badge/TOML-1.0.0-9c4221?style=flat-square)](https://toml.io/en/v1.0.0) -[![License](https://img.shields.io/github/license/squirrelchat/smol-toml.svg?style=flat-square)](https://github.com/squirrelchat/smol-toml/blob/mistress/LICENSE) -[![npm](https://img.shields.io/npm/v/smol-toml?style=flat-square)](https://npm.im/smol-toml) -[![Build](https://img.shields.io/github/actions/workflow/status/squirrelchat/smol-toml/build.yml?style=flat-square&logo=github)](https://github.com/squirrelchat/smol-toml/actions/workflows/build.yml) - -A small, fast, and correct TOML parser and serializer. smol-toml is fully(ish) spec-compliant with TOML v1.0.0. - -Why yet another TOML parser? Well, the ecosystem of TOML parsers in JavaScript is quite underwhelming, most likely due -to a lack of interest. With most parsers being outdated, unmaintained, non-compliant, or a combination of these, a new -parser didn't feel too out of place. - -*[insert xkcd 927]* - -smol-toml passes most of the tests from the [`toml-test` suite](https://github.com/toml-lang/toml-test); use the -`run-toml-test.bash` script to run the tests. Due to the nature of JavaScript and the limits of the language, -it doesn't pass certain tests, namely: -- Invalid UTF-8 strings are not rejected -- Certain invalid UTF-8 codepoints are not rejected -- Certain invalid dates are not rejected - - For instance, `2023-02-30` would be accepted and parsed as `2023-03-02`. While additional checks could be performed - to reject these, they've not been added for performance reasons. -- smol-toml doesn't preserve type information between integers and floats (in JS, everything is a float) - -You can see a list of all tests smol-toml fails (and the reason why it fails these) in the list of skipped tests in -`run-toml-test.bash`. Note that some failures are *not* specification violations per-se. For instance, the TOML spec -does not require 64-bit integer range support or sub-millisecond time precision, but are included in the `toml-test` -suite. See https://github.com/toml-lang/toml-test/issues/154 and https://github.com/toml-lang/toml-test/issues/155 - -## Installation -``` -[pnpm | yarn | npm] i smol-toml -``` - -## Usage -```js -import { parse, stringify } from 'smol-toml' - -const doc = '...' -const parsed = parse(doc) -console.log(parsed) - -const toml = stringify(parsed) -console.log(toml) -``` - -Alternatively, if you prefer something similar to the JSON global, you can import the library as follows -```js -import TOML from 'smol-toml' - -TOML.stringify({ ... }) -``` - -A few notes on the `stringify` function: -- `undefined` and `null` values on objects are ignored (does not produce a key/value). -- `undefined` and `null` values in arrays are **rejected**. -- Functions, classes and symbols are **rejected**. -- floats will be serialized as integers if they don't have a decimal part. - - `stringify(parse('a = 1.0')) === 'a = 1'` -- JS `Date` will be serialized as Offset Date Time - - Use the [`TomlDate` object](#dates) for representing other types. - -### Dates -`smol-toml` uses an extended `Date` object to represent all types of TOML Dates. In the future, `smol-toml` will use -objects from the Temporal proposal, but for now we're stuck with the legacy Date object. - -```js -import { TomlDate } from 'smol-toml' - -// Offset Date Time -const date = new TomlDate('1979-05-27T07:32:00.000-08:00') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, false -console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000-08:00 - -// Local Date Time -const date = new TomlDate('1979-05-27T07:32:00.000') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> true, false, false, true -console.log(date.toISOString()) // ~> 1979-05-27T07:32:00.000 - -// Local Date -const date = new TomlDate('1979-05-27') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, true, false, true -console.log(date.toISOString()) // ~> 1979-05-27 - -// Local Time -const date = new TomlDate('07:32:00') -console.log(date.isDateTime(), date.isDate(), date.isTime(), date.isLocal()) // ~> false, false, true, true -console.log(date.toISOString()) // ~> 07:32:00.000 -``` - -You can also wrap a native `Date` object and specify using different methods depending on the type of date you wish -to represent: - -```js -import { TomlDate } from 'smol-toml' - -const jsDate = new Date() - -const offsetDateTime = TomlDate.wrapAsOffsetDateTime(jsDate) -const localDateTime = TomlDate.wrapAsLocalDateTime(jsDate) -const localDate = TomlDate.wrapAsLocalDate(jsDate) -const localTime = TomlDate.wrapAsLocalTime(jsDate) -``` - -## Performance -A note on these performance numbers: in some highly synthetic tests, other parsers such as `fast-toml` greatly -outperform other parsers, mostly due to their lack of compliance with the spec. For example, to parse a string, -`fast-toml` skips the entire string while `smol-toml` does validate the string, costing a fair share of performance. - -The ~5MB test file used for benchmark here is filled with random data which attempts to be close-ish to reality in -terms of structure. The idea is to have a file relatively close to a real-world application, with moderately sized -strings etc. - -The large TOML generator can be found [here](https://gist.github.com/cyyynthia/e77c744cb6494dabe37d0182506526b9) - -| **Parse** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | fast-toml | -|----------------|---------------------|-------------------|-----------------|-----------------| -| Spec example | **71,356.51 op/s** | 33,629.31 op/s | 16,433.86 op/s | 29,421.60 op/s | -| ~5MB test file | **3.8091 op/s** | *DNF* | 2.4369 op/s | 2.6078 op/s | - -| **Stringify** | smol-toml | @iarna/toml@3.0.0 | @ltd/j-toml | -|----------------|----------------------|-------------------|----------------| -| Spec example | **195,191.99 op/s** | 46,583.07 op/s | 5,670.12 op/s | -| ~5MB test file | **14.6709 op/s** | 3.5941 op/s | 0.7856 op/s | - -
                  -Detailed benchmark data - -Tests ran using Vitest v0.31.0 on commit f58cb6152e667e9cea09f31c93d90652e3b82bf5 - -CPU: Intel Core i7 7700K (4.2GHz) - -``` - RUN v0.31.0 - - ✓ bench/parseSpecExample.bench.ts (4) 2462ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 71,356.51 0.0132 0.2633 0.0140 0.0137 0.0219 0.0266 0.1135 ±0.37% 35679 fastest - · @iarna/toml 33,629.31 0.0272 0.2629 0.0297 0.0287 0.0571 0.0650 0.1593 ±0.45% 16815 - · @ltd/j-toml 16,433.86 0.0523 1.3088 0.0608 0.0550 0.1140 0.1525 0.7348 ±1.47% 8217 slowest - · fast-toml 29,421.60 0.0305 0.2995 0.0340 0.0312 0.0618 0.0640 0.1553 ±0.47% 14711 - ✓ bench/parseLargeMixed.bench.ts (3) 16062ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 3.8091 239.60 287.30 262.53 274.17 287.30 287.30 287.30 ±3.66% 10 fastest - · @ltd/j-toml 2.4369 376.73 493.49 410.35 442.58 493.49 493.49 493.49 ±7.08% 10 slowest - · fast-toml 2.6078 373.88 412.79 383.47 388.62 412.79 412.79 412.79 ±2.72% 10 - ✓ bench/stringifySpecExample.bench.ts (3) 1886ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 195,191.99 0.0047 0.2704 0.0051 0.0050 0.0099 0.0110 0.0152 ±0.41% 97596 fastest - · @iarna/toml 46,583.07 0.0197 0.2808 0.0215 0.0208 0.0448 0.0470 0.1704 ±0.47% 23292 - · @ltd/j-toml 5,670.12 0.1613 0.5768 0.1764 0.1726 0.3036 0.3129 0.4324 ±0.56% 2836 slowest - ✓ bench/stringifyLargeMixed.bench.ts (3) 24057ms - name hz min max mean p75 p99 p995 p999 rme samples - · smol-toml 14.6709 65.1071 79.2199 68.1623 67.1088 79.2199 79.2199 79.2199 ±5.25% 10 fastest - · @iarna/toml 3.5941 266.48 295.24 278.24 290.10 295.24 295.24 295.24 ±2.83% 10 - · @ltd/j-toml 0.7856 1,254.33 1,322.05 1,272.87 1,286.82 1,322.05 1,322.05 1,322.05 ±1.37% 10 slowest - - - BENCH Summary - - smol-toml - bench/parseLargeMixed.bench.ts > - 1.46x faster than fast-toml - 1.56x faster than @ltd/j-toml - - smol-toml - bench/parseSpecExample.bench.ts > - 2.12x faster than @iarna/toml - 2.43x faster than fast-toml - 4.34x faster than @ltd/j-toml - - smol-toml - bench/stringifyLargeMixed.bench.ts > - 4.00x faster than @iarna/toml - 18.33x faster than @ltd/j-toml - - smol-toml - bench/stringifySpecExample.bench.ts > - 4.19x faster than @iarna/toml - 34.42x faster than @ltd/j-toml -``` - ---- -Additional notes: - -I initially tried to benchmark `toml-nodejs`, but the 0.3.0 package is broken. -I initially reported this to the library author, but the author decided to -- a) advise to use a custom loader (via *experimental* flag) to circumvent the invalid imports. - - Said flag, `--experimental-specifier-resolution`, has been removed in Node v20. -- b) [delete the issue](https://github.com/huan231/toml-nodejs/issues/12) when pointed out links to the NodeJS -documentation about the flag removal and standard resolution algorithm. - -For the reference anyway, `toml-nodejs` (with proper imports) is ~8x slower on both parse benchmark with: -- spec example: 7,543.47 op/s -- 5mb mixed: 0.7006 op/s -
                  diff --git a/node_modules/smol-toml/package.json b/node_modules/smol-toml/package.json deleted file mode 100644 index b144aea9ce..0000000000 --- a/node_modules/smol-toml/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "smol-toml", - "license": "BSD-3-Clause", - "version": "1.3.1", - "description": "A small, fast, and correct TOML parser/serializer", - "author": "Cynthia ", - "repository": "github:squirrelchat/smol-toml", - "bugs": "https://github.com/squirrelchat/smol-toml/issues", - "funding": "https://github.com/sponsors/cyyynthia", - "keywords": [ - "toml", - "parser", - "serializer" - ], - "type": "module", - "packageManager": "pnpm@9.12.3", - "engines": { - "node": ">= 18" - }, - "scripts": { - "test": "vitest", - "test-ui": "vitest --ui", - "bench": "vitest bench", - "build": "pnpm run build:mjs && pnpm run build:cjs && node test/package/package-test.mjs", - "build:mjs": "tsc", - "build:cjs": "esbuild dist/index.js --bundle --platform=node --target=node18 --format=cjs --outfile=dist/index.cjs" - }, - "devDependencies": { - "@iarna/toml": "3.0.0", - "@ltd/j-toml": "^1.38.0", - "@tsconfig/node-lts": "^22.0.0", - "@tsconfig/strictest": "^2.0.5", - "@types/node": "^22.9.0", - "@vitest/ui": "^2.1.5", - "esbuild": "^0.24.0", - "fast-toml": "^0.5.4", - "typescript": "^5.6.3", - "vitest": "^2.1.5" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - "types": "./dist/index.d.ts", - "import": "./dist/index.js", - "require": "./dist/index.cjs" - }, - "files": [ - "README.md", - "LICENSE", - "dist" - ] -} diff --git a/node_modules/string-width-cjs/index.d.ts b/node_modules/string-width-cjs/index.d.ts deleted file mode 100644 index 12b5309751..0000000000 --- a/node_modules/string-width-cjs/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -declare const stringWidth: { - /** - Get the visual width of a string - the number of columns required to display it. - - Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - - @example - ``` - import stringWidth = require('string-width'); - - stringWidth('a'); - //=> 1 - - stringWidth('古'); - //=> 2 - - stringWidth('\u001B[1m古\u001B[22m'); - //=> 2 - ``` - */ - (string: string): number; - - // TODO: remove this in the next major version, refactor the whole definition to: - // declare function stringWidth(string: string): number; - // export = stringWidth; - default: typeof stringWidth; -} - -export = stringWidth; diff --git a/node_modules/string-width-cjs/index.js b/node_modules/string-width-cjs/index.js deleted file mode 100644 index f4d261a96a..0000000000 --- a/node_modules/string-width-cjs/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -const stripAnsi = require('strip-ansi'); -const isFullwidthCodePoint = require('is-fullwidth-code-point'); -const emojiRegex = require('emoji-regex'); - -const stringWidth = string => { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - string = stripAnsi(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - let width = 0; - - for (let i = 0; i < string.length; i++) { - const code = string.codePointAt(i); - - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } - - // Surrogates - if (code > 0xFFFF) { - i++; - } - - width += isFullwidthCodePoint(code) ? 2 : 1; - } - - return width; -}; - -module.exports = stringWidth; -// TODO: remove this in the next major version -module.exports.default = stringWidth; diff --git a/node_modules/string-width-cjs/license b/node_modules/string-width-cjs/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/string-width-cjs/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 2dbf6af2b6..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -declare namespace ansiRegex { - interface Options { - /** - Match only the first ANSI escape. - - @default false - */ - onlyFirst: boolean; - } -} - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -declare function ansiRegex(options?: ansiRegex.Options): RegExp; - -export = ansiRegex; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js deleted file mode 100644 index 616ff837d3..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/license b/node_modules/string-width-cjs/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/package.json b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json deleted file mode 100644 index 017f53116a..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "ansi-regex", - "version": "5.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.9.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md deleted file mode 100644 index 4d848bc36f..0000000000 --- a/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`
                  -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md deleted file mode 100644 index f10e173335..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) - -_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. - -This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install emoji-regex -``` - -In [Node.js](https://nodejs.org/): - -```js -const emojiRegex = require('emoji-regex'); -// Note: because the regular expression has the global flag set, this module -// exports a function that returns the regex rather than exporting the regular -// expression itself, to make it impossible to (accidentally) mutate the -// original regular expression. - -const text = ` -\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) -\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji -\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) -\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier -`; - -const regex = emojiRegex(); -let match; -while (match = regex.exec(text)) { - const emoji = match[0]; - console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); -} -``` - -Console output: - -``` -Matched sequence ⌚ — code points: 1 -Matched sequence ⌚ — code points: 1 -Matched sequence ↔️ — code points: 2 -Matched sequence ↔️ — code points: 2 -Matched sequence 👩 — code points: 1 -Matched sequence 👩 — code points: 1 -Matched sequence 👩🏿 — code points: 2 -Matched sequence 👩🏿 — code points: 2 -``` - -To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: - -```js -const emojiRegex = require('emoji-regex/text.js'); -``` - -Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: - -```js -const emojiRegex = require('emoji-regex/es2015/index.js'); -const emojiRegexText = require('emoji-regex/es2015/text.js'); -``` - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js deleted file mode 100644 index b4cf3dcd38..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js deleted file mode 100644 index 780309df58..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts deleted file mode 100644 index 1955b4704e..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'emoji-regex' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js deleted file mode 100644 index d993a3a99c..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json deleted file mode 100644 index 6d32352829..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "emoji-regex", - "version": "8.0.0", - "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", - "homepage": "https://mths.be/emoji-regex", - "main": "index.js", - "types": "index.d.ts", - "keywords": [ - "unicode", - "regex", - "regexp", - "regular expressions", - "code points", - "symbols", - "characters", - "emoji" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/emoji-regex.git" - }, - "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", - "files": [ - "LICENSE-MIT.txt", - "index.js", - "index.d.ts", - "text.js", - "es2015/index.js", - "es2015/text.js" - ], - "scripts": { - "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", - "test": "mocha", - "test:watch": "npm run test -- --watch" - }, - "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/preset-env": "^7.3.4", - "mocha": "^6.0.2", - "regexgen": "^1.3.0", - "unicode-12.0.0": "^0.7.9" - } -} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js deleted file mode 100644 index 0a55ce2f23..0000000000 --- a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts deleted file mode 100644 index 907fccc292..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -declare function stripAnsi(string: string): string; - -export = stripAnsi; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js deleted file mode 100644 index 9a593dfcd1..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/license b/node_modules/string-width-cjs/node_modules/strip-ansi/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/package.json b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json deleted file mode 100644 index 1a41108d42..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "strip-ansi", - "version": "6.0.1", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.10.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md deleted file mode 100644 index 7c4b56d46d..0000000000 --- a/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/string-width-cjs/package.json b/node_modules/string-width-cjs/package.json deleted file mode 100644 index 28ba7b4cae..0000000000 --- a/node_modules/string-width-cjs/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "string-width", - "version": "4.2.3", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "string", - "character", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.1", - "xo": "^0.24.0" - } -} diff --git a/node_modules/string-width-cjs/readme.md b/node_modules/string-width-cjs/readme.md deleted file mode 100644 index bdd314129c..0000000000 --- a/node_modules/string-width-cjs/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/string-width/index.d.ts b/node_modules/string-width/index.d.ts deleted file mode 100644 index aed9fdffeb..0000000000 --- a/node_modules/string-width/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export interface Options { - /** - Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). - - @default true - */ - readonly ambiguousIsNarrow: boolean; -} - -/** -Get the visual width of a string - the number of columns required to display it. - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -@example -``` -import stringWidth from 'string-width'; - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` -*/ -export default function stringWidth(string: string, options?: Options): number; diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js deleted file mode 100644 index 9294488f88..0000000000 --- a/node_modules/string-width/index.js +++ /dev/null @@ -1,54 +0,0 @@ -import stripAnsi from 'strip-ansi'; -import eastAsianWidth from 'eastasianwidth'; -import emojiRegex from 'emoji-regex'; - -export default function stringWidth(string, options = {}) { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - options = { - ambiguousIsNarrow: true, - ...options - }; - - string = stripAnsi(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2; - let width = 0; - - for (const character of string) { - const codePoint = character.codePointAt(0); - - // Ignore control characters - if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (codePoint >= 0x300 && codePoint <= 0x36F) { - continue; - } - - const code = eastAsianWidth.eastAsianWidth(character); - switch (code) { - case 'F': - case 'W': - width += 2; - break; - case 'A': - width += ambiguousCharacterWidth; - break; - default: - width += 1; - } - } - - return width; -} diff --git a/node_modules/string-width/license b/node_modules/string-width/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/string-width/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width/package.json b/node_modules/string-width/package.json deleted file mode 100644 index f46d6770f9..0000000000 --- a/node_modules/string-width/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "string-width", - "version": "5.1.2", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "funding": "https://github.com/sponsors/sindresorhus", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "string", - "character", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "devDependencies": { - "ava": "^3.15.0", - "tsd": "^0.14.0", - "xo": "^0.38.2" - } -} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md deleted file mode 100644 index 52910df1ab..0000000000 --- a/node_modules/string-width/readme.md +++ /dev/null @@ -1,67 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - -## Install - -``` -$ npm install string-width -``` - -## Usage - -```js -import stringWidth from 'string-width'; - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - -## API - -### stringWidth(string, options?) - -#### string - -Type: `string` - -The string to be counted. - -#### options - -Type: `object` - -##### ambiguousIsNarrow - -Type: `boolean`\ -Default: `false` - -Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/strip-ansi-cjs/index.d.ts b/node_modules/strip-ansi-cjs/index.d.ts deleted file mode 100644 index 907fccc292..0000000000 --- a/node_modules/strip-ansi-cjs/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -declare function stripAnsi(string: string): string; - -export = stripAnsi; diff --git a/node_modules/strip-ansi-cjs/index.js b/node_modules/strip-ansi-cjs/index.js deleted file mode 100644 index 9a593dfcd1..0000000000 --- a/node_modules/strip-ansi-cjs/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/strip-ansi-cjs/license b/node_modules/strip-ansi-cjs/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/strip-ansi-cjs/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 2dbf6af2b6..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -declare namespace ansiRegex { - interface Options { - /** - Match only the first ANSI escape. - - @default false - */ - onlyFirst: boolean; - } -} - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -declare function ansiRegex(options?: ansiRegex.Options): RegExp; - -export = ansiRegex; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js deleted file mode 100644 index 616ff837d3..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json deleted file mode 100644 index 017f53116a..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "ansi-regex", - "version": "5.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.9.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md deleted file mode 100644 index 4d848bc36f..0000000000 --- a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`
                  -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/strip-ansi-cjs/package.json b/node_modules/strip-ansi-cjs/package.json deleted file mode 100644 index 1a41108d42..0000000000 --- a/node_modules/strip-ansi-cjs/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "strip-ansi", - "version": "6.0.1", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.10.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/strip-ansi-cjs/readme.md b/node_modules/strip-ansi-cjs/readme.md deleted file mode 100644 index 7c4b56d46d..0000000000 --- a/node_modules/strip-ansi-cjs/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/strip-ansi/index.d.ts b/node_modules/strip-ansi/index.d.ts deleted file mode 100644 index 44e954d0c7..0000000000 --- a/node_modules/strip-ansi/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi from 'strip-ansi'; - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -export default function stripAnsi(string: string): string; diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js deleted file mode 100644 index ba19750e64..0000000000 --- a/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import ansiRegex from 'ansi-regex'; - -const regex = ansiRegex(); - -export default function stripAnsi(string) { - if (typeof string !== 'string') { - throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``); - } - - // Even though the regex is global, we don't need to reset the `.lastIndex` - // because unlike `.exec()` and `.test()`, `.replace()` does it automatically - // and doing it manually has a performance penalty. - return string.replace(regex, ''); -} diff --git a/node_modules/strip-ansi/license b/node_modules/strip-ansi/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json deleted file mode 100644 index e1f455c325..0000000000 --- a/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "strip-ansi", - "version": "7.1.0", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "funding": "https://github.com/chalk/strip-ansi?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": "./index.js", - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "devDependencies": { - "ava": "^3.15.0", - "tsd": "^0.17.0", - "xo": "^0.44.0" - } -} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md deleted file mode 100644 index 562785107b..0000000000 --- a/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -# strip-ansi - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - -## Install - -``` -$ npm install strip-ansi -``` - -## Usage - -```js -import stripAnsi from 'strip-ansi'; - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/strip-json-comments/index.d.ts b/node_modules/strip-json-comments/index.d.ts deleted file mode 100644 index 28ba3c8a80..0000000000 --- a/node_modules/strip-json-comments/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -declare namespace stripJsonComments { - interface Options { - /** - Replace comments with whitespace instead of stripping them entirely. - - @default true - */ - readonly whitespace?: boolean; - } -} - -/** -Strip comments from JSON. Lets you use comments in your JSON files! - -It will replace single-line comments `//` and multi-line comments `/**\/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. - -@param jsonString - Accepts a string with JSON. -@returns A JSON string without comments. - -@example -``` -const json = `{ - // Rainbows - "unicorn": "cake" -}`; - -JSON.parse(stripJsonComments(json)); -//=> {unicorn: 'cake'} -``` -*/ -declare function stripJsonComments( - jsonString: string, - options?: stripJsonComments.Options -): string; - -export = stripJsonComments; diff --git a/node_modules/strip-json-comments/index.js b/node_modules/strip-json-comments/index.js deleted file mode 100644 index bb00b38baf..0000000000 --- a/node_modules/strip-json-comments/index.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; -const singleComment = Symbol('singleComment'); -const multiComment = Symbol('multiComment'); -const stripWithoutWhitespace = () => ''; -const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' '); - -const isEscaped = (jsonString, quotePosition) => { - let index = quotePosition - 1; - let backslashCount = 0; - - while (jsonString[index] === '\\') { - index -= 1; - backslashCount += 1; - } - - return Boolean(backslashCount % 2); -}; - -module.exports = (jsonString, options = {}) => { - if (typeof jsonString !== 'string') { - throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``); - } - - const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; - - let insideString = false; - let insideComment = false; - let offset = 0; - let result = ''; - - for (let i = 0; i < jsonString.length; i++) { - const currentCharacter = jsonString[i]; - const nextCharacter = jsonString[i + 1]; - - if (!insideComment && currentCharacter === '"') { - const escaped = isEscaped(jsonString, i); - if (!escaped) { - insideString = !insideString; - } - } - - if (insideString) { - continue; - } - - if (!insideComment && currentCharacter + nextCharacter === '//') { - result += jsonString.slice(offset, i); - offset = i; - insideComment = singleComment; - i++; - } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') { - i++; - insideComment = false; - result += strip(jsonString, offset, i); - offset = i; - continue; - } else if (insideComment === singleComment && currentCharacter === '\n') { - insideComment = false; - result += strip(jsonString, offset, i); - offset = i; - } else if (!insideComment && currentCharacter + nextCharacter === '/*') { - result += jsonString.slice(offset, i); - offset = i; - insideComment = multiComment; - i++; - continue; - } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') { - i++; - insideComment = false; - result += strip(jsonString, offset, i + 1); - offset = i + 1; - continue; - } - } - - return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset)); -}; diff --git a/node_modules/strip-json-comments/license b/node_modules/strip-json-comments/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/strip-json-comments/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strip-json-comments/package.json b/node_modules/strip-json-comments/package.json deleted file mode 100644 index ce7875aa0d..0000000000 --- a/node_modules/strip-json-comments/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "strip-json-comments", - "version": "3.1.1", - "description": "Strip comments from JSON. Lets you use comments in your JSON files!", - "license": "MIT", - "repository": "sindresorhus/strip-json-comments", - "funding": "https://github.com/sponsors/sindresorhus", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "bench": "matcha benchmark.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "json", - "strip", - "comments", - "remove", - "delete", - "trim", - "multiline", - "parse", - "config", - "configuration", - "settings", - "util", - "env", - "environment", - "jsonc" - ], - "devDependencies": { - "ava": "^1.4.1", - "matcha": "^0.7.0", - "tsd": "^0.7.2", - "xo": "^0.24.0" - } -} diff --git a/node_modules/strip-json-comments/readme.md b/node_modules/strip-json-comments/readme.md deleted file mode 100644 index cc542e50cf..0000000000 --- a/node_modules/strip-json-comments/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# strip-json-comments [![Build Status](https://travis-ci.com/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.com/github/sindresorhus/strip-json-comments) - -> Strip comments from JSON. Lets you use comments in your JSON files! - -This is now possible: - -```js -{ - // Rainbows - "unicorn": /* ❤ */ "cake" -} -``` - -It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. - -Also available as a [Gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[Grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[Broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. - -## Install - -``` -$ npm install strip-json-comments -``` - -## Usage - -```js -const json = `{ - // Rainbows - "unicorn": /* ❤ */ "cake" -}`; - -JSON.parse(stripJsonComments(json)); -//=> {unicorn: 'cake'} -``` - -## API - -### stripJsonComments(jsonString, options?) - -#### jsonString - -Type: `string` - -Accepts a string with JSON and returns a string without comments. - -#### options - -Type: `object` - -##### whitespace - -Type: `boolean`\ -Default: `true` - -Replace comments with whitespace instead of stripping them entirely. - -## Benchmark - -``` -$ npm run bench -``` - -## Related - -- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module -- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/uc.micro/LICENSE.txt b/node_modules/uc.micro/LICENSE.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/uc.micro/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/uc.micro/README.md b/node_modules/uc.micro/README.md deleted file mode 100644 index 7707da48cc..0000000000 --- a/node_modules/uc.micro/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# uc.micro - -[![CI](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/uc.micro/actions/workflows/ci.yml) -[![NPM version](https://img.shields.io/npm/v/uc.micro.svg?style=flat)](https://www.npmjs.org/package/uc.micro) - -> Micro subset of unicode data files for [markdown-it](https://github.com/markdown-it) projects. - -Content of this repo is autogenerated from `unicode-` package, -maintained by [Mathias Bynens](https://github.com/mathiasbynens). - -That's just a proxy to reduce dependencies/install size. - -**This package content is ONLY for [markdown-it](https://github.com/markdown-it) -projects needs. Don't ask to extend it!** diff --git a/node_modules/uc.micro/categories/Cc/regex.mjs b/node_modules/uc.micro/categories/Cc/regex.mjs deleted file mode 100644 index 91cd397c32..0000000000 --- a/node_modules/uc.micro/categories/Cc/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\0-\x1F\x7F-\x9F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Cf/regex.mjs b/node_modules/uc.micro/categories/Cf/regex.mjs deleted file mode 100644 index bb58c7d3eb..0000000000 --- a/node_modules/uc.micro/categories/Cf/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/P/regex.mjs b/node_modules/uc.micro/categories/P/regex.mjs deleted file mode 100644 index b084264585..0000000000 --- a/node_modules/uc.micro/categories/P/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[!-#%-\*,-\/:;\?@\[-\]_\{\}\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]|\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\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\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]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/S/regex.mjs b/node_modules/uc.micro/categories/S/regex.mjs deleted file mode 100644 index 45a2624c7e..0000000000 --- a/node_modules/uc.micro/categories/S/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\$\+<->\^`\|~\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-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\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]|\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\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/ \ No newline at end of file diff --git a/node_modules/uc.micro/categories/Z/regex.mjs b/node_modules/uc.micro/categories/Z/regex.mjs deleted file mode 100644 index 6f154197bb..0000000000 --- a/node_modules/uc.micro/categories/Z/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/ \ No newline at end of file diff --git a/node_modules/uc.micro/index.mjs b/node_modules/uc.micro/index.mjs deleted file mode 100644 index 21b80d34ac..0000000000 --- a/node_modules/uc.micro/index.mjs +++ /dev/null @@ -1,8 +0,0 @@ -import Any from './properties/Any/regex.mjs'; -import Cc from './categories/Cc/regex.mjs'; -import Cf from './categories/Cf/regex.mjs'; -import P from './categories/P/regex.mjs'; -import S from './categories/S/regex.mjs'; -import Z from './categories/Z/regex.mjs'; - -export { Any, Cc, Cf, P, S, Z }; diff --git a/node_modules/uc.micro/package.json b/node_modules/uc.micro/package.json deleted file mode 100644 index 73102ce5a5..0000000000 --- a/node_modules/uc.micro/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "uc.micro", - "version": "2.1.0", - "description": "Micro subset of unicode data files for markdown-it projects.", - "repository": "markdown-it/uc.micro", - "license": "MIT", - "main": "build/index.cjs.js", - "module": "index.mjs", - "exports": { - ".": { - "require": "./build/index.cjs.js", - "import": "./index.mjs" - }, - "./*": { - "require": "./*", - "import": "./*" - } - }, - "files": [ - "index.mjs", - "categories/", - "properties/", - "build/" - ], - "scripts": { - "test": "npm run build && mocha", - "build": "rollup -c", - "update": "node update.mjs && npm test", - "prepublishOnly": "npm run build" - }, - "devDependencies": { - "@unicode/unicode-15.1.0": "^1.5.2", - "mocha": "^10.2.0", - "rollup": "^4.6.1", - "shelljs": "^0.8.5" - } -} diff --git a/node_modules/uc.micro/properties/Any/regex.mjs b/node_modules/uc.micro/properties/Any/regex.mjs deleted file mode 100644 index 72d3b16d55..0000000000 --- a/node_modules/uc.micro/properties/Any/regex.mjs +++ /dev/null @@ -1 +0,0 @@ -export default /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ \ No newline at end of file diff --git a/node_modules/which/CHANGELOG.md b/node_modules/which/CHANGELOG.md deleted file mode 100644 index 7fb1f2033c..0000000000 --- a/node_modules/which/CHANGELOG.md +++ /dev/null @@ -1,166 +0,0 @@ -# Changes - - -## 2.0.2 - -* Rename bin to `node-which` - -## 2.0.1 - -* generate changelog and publish on version bump -* enforce 100% test coverage -* Promise interface - -## 2.0.0 - -* Parallel tests, modern JavaScript, and drop support for node < 8 - -## 1.3.1 - -* update deps -* update travis - -## v1.3.0 - -* Add nothrow option to which.sync -* update tap - -## v1.2.14 - -* appveyor: drop node 5 and 0.x -* travis-ci: add node 6, drop 0.x - -## v1.2.13 - -* test: Pass missing option to pass on windows -* update tap -* update isexe to 2.0.0 -* neveragain.tech pledge request - -## v1.2.12 - -* Removed unused require - -## v1.2.11 - -* Prevent changelog script from being included in package - -## v1.2.10 - -* Use env.PATH only, not env.Path - -## v1.2.9 - -* fix for paths starting with ../ -* Remove unused `is-absolute` module - -## v1.2.8 - -* bullet items in changelog that contain (but don't start with) # - -## v1.2.7 - -* strip 'update changelog' changelog entries out of changelog - -## v1.2.6 - -* make the changelog bulleted - -## v1.2.5 - -* make a changelog, and keep it up to date -* don't include tests in package -* Properly handle relative-path executables -* appveyor -* Attach error code to Not Found error -* Make tests pass on Windows - -## v1.2.4 - -* Fix typo - -## v1.2.3 - -* update isexe, fix regression in pathExt handling - -## v1.2.2 - -* update deps, use isexe module, test windows - -## v1.2.1 - -* Sometimes windows PATH entries are quoted -* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode. -* doc cli - -## v1.2.0 - -* Add support for opt.all and -as cli flags -* test the bin -* update travis -* Allow checking for multiple programs in bin/which -* tap 2 - -## v1.1.2 - -* travis -* Refactored and fixed undefined error on Windows -* Support strict mode - -## v1.1.1 - -* test +g exes against secondary groups, if available -* Use windows exe semantics on cygwin & msys -* cwd should be first in path on win32, not last -* Handle lower-case 'env.Path' on Windows -* Update docs -* use single-quotes - -## v1.1.0 - -* Add tests, depend on is-absolute - -## v1.0.9 - -* which.js: root is allowed to execute files owned by anyone - -## v1.0.8 - -* don't use graceful-fs - -## v1.0.7 - -* add license to package.json - -## v1.0.6 - -* isc license - -## 1.0.5 - -* Awful typo - -## 1.0.4 - -* Test for path absoluteness properly -* win: Allow '' as a pathext if cmd has a . in it - -## 1.0.3 - -* Remove references to execPath -* Make `which.sync()` work on Windows by honoring the PATHEXT variable. -* Make `isExe()` always return true on Windows. -* MIT - -## 1.0.2 - -* Only files can be exes - -## 1.0.1 - -* Respect the PATHEXT env for win32 support -* should 0755 the bin -* binary -* guts -* package -* 1st diff --git a/node_modules/which/LICENSE b/node_modules/which/LICENSE deleted file mode 100644 index 19129e315f..0000000000 --- a/node_modules/which/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/which/README.md b/node_modules/which/README.md deleted file mode 100644 index cd833509f3..0000000000 --- a/node_modules/which/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# which - -Like the unix `which` utility. - -Finds the first instance of a specified executable in the PATH -environment variable. Does not cache the results, so `hash -r` is not -needed when the PATH changes. - -## USAGE - -```javascript -var which = require('which') - -// async usage -which('node', function (er, resolvedPath) { - // er is returned if no "node" is found on the PATH - // if it is found, then the absolute path to the exec is returned -}) - -// or promise -which('node').then(resolvedPath => { ... }).catch(er => { ... not found ... }) - -// sync usage -// throws if not found -var resolved = which.sync('node') - -// if nothrow option is used, returns null if not found -resolved = which.sync('node', {nothrow: true}) - -// Pass options to override the PATH and PATHEXT environment vars. -which('node', { path: someOtherPath }, function (er, resolved) { - if (er) - throw er - console.log('found at %j', resolved) -}) -``` - -## CLI USAGE - -Same as the BSD `which(1)` binary. - -``` -usage: which [-as] program ... -``` - -## OPTIONS - -You may pass an options object as the second argument. - -- `path`: Use instead of the `PATH` environment variable. -- `pathExt`: Use instead of the `PATHEXT` environment variable. -- `all`: Return all matches, instead of just the first one. Note that - this means the function returns an array of strings instead of a - single string. diff --git a/node_modules/which/package.json b/node_modules/which/package.json deleted file mode 100644 index 97ad7fbabc..0000000000 --- a/node_modules/which/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "name": "which", - "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", - "version": "2.0.2", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-which.git" - }, - "main": "which.js", - "bin": { - "node-which": "./bin/node-which" - }, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "devDependencies": { - "mkdirp": "^0.5.0", - "rimraf": "^2.6.2", - "tap": "^14.6.9" - }, - "scripts": { - "test": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublish": "npm run changelog", - "prechangelog": "bash gen-changelog.sh", - "changelog": "git add CHANGELOG.md", - "postchangelog": "git commit -m 'update changelog - '${npm_package_version}", - "postpublish": "git push origin --follow-tags" - }, - "files": [ - "which.js", - "bin/node-which" - ], - "tap": { - "check-coverage": true - }, - "engines": { - "node": ">= 8" - } -} diff --git a/node_modules/which/which.js b/node_modules/which/which.js deleted file mode 100644 index 82afffd214..0000000000 --- a/node_modules/which/which.js +++ /dev/null @@ -1,125 +0,0 @@ -const isWindows = process.platform === 'win32' || - process.env.OSTYPE === 'cygwin' || - process.env.OSTYPE === 'msys' - -const path = require('path') -const COLON = isWindows ? ';' : ':' -const isexe = require('isexe') - -const getNotFoundError = (cmd) => - Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) - -const getPathInfo = (cmd, opt) => { - const colon = opt.colon || COLON - - // If it has a slash, then we don't bother searching the pathenv. - // just check the file itself, and that's it. - const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] - : ( - [ - // windows always checks the cwd first - ...(isWindows ? [process.cwd()] : []), - ...(opt.path || process.env.PATH || - /* istanbul ignore next: very unusual */ '').split(colon), - ] - ) - const pathExtExe = isWindows - ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' - : '' - const pathExt = isWindows ? pathExtExe.split(colon) : [''] - - if (isWindows) { - if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') - pathExt.unshift('') - } - - return { - pathEnv, - pathExt, - pathExtExe, - } -} - -const which = (cmd, opt, cb) => { - if (typeof opt === 'function') { - cb = opt - opt = {} - } - if (!opt) - opt = {} - - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] - - const step = i => new Promise((resolve, reject) => { - if (i === pathEnv.length) - return opt.all && found.length ? resolve(found) - : reject(getNotFoundError(cmd)) - - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw - - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd - - resolve(subStep(p, i, 0)) - }) - - const subStep = (p, i, ii) => new Promise((resolve, reject) => { - if (ii === pathExt.length) - return resolve(step(i + 1)) - const ext = pathExt[ii] - isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { - if (!er && is) { - if (opt.all) - found.push(p + ext) - else - return resolve(p + ext) - } - return resolve(subStep(p, i, ii + 1)) - }) - }) - - return cb ? step(0).then(res => cb(null, res), cb) : step(0) -} - -const whichSync = (cmd, opt) => { - opt = opt || {} - - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] - - for (let i = 0; i < pathEnv.length; i ++) { - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw - - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd - - for (let j = 0; j < pathExt.length; j ++) { - const cur = p + pathExt[j] - try { - const is = isexe.sync(cur, { pathExt: pathExtExe }) - if (is) { - if (opt.all) - found.push(cur) - else - return cur - } - } catch (ex) {} - } - } - - if (opt.all && found.length) - return found - - if (opt.nothrow) - return null - - throw getNotFoundError(cmd) -} - -module.exports = which -which.sync = whichSync diff --git a/node_modules/wrap-ansi-cjs/index.js b/node_modules/wrap-ansi-cjs/index.js deleted file mode 100755 index d502255bd1..0000000000 --- a/node_modules/wrap-ansi-cjs/index.js +++ /dev/null @@ -1,216 +0,0 @@ -'use strict'; -const stringWidth = require('string-width'); -const stripAnsi = require('strip-ansi'); -const ansiStyles = require('ansi-styles'); - -const ESCAPES = new Set([ - '\u001B', - '\u009B' -]); - -const END_CODE = 39; - -const ANSI_ESCAPE_BELL = '\u0007'; -const ANSI_CSI = '['; -const ANSI_OSC = ']'; -const ANSI_SGR_TERMINATOR = 'm'; -const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; - -const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; -const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; - -// Calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes -const wordLengths = string => string.split(' ').map(character => stringWidth(character)); - -// Wrap a long word across multiple rows -// Ansi escape codes do not count towards length -const wrapWord = (rows, word, columns) => { - const characters = [...word]; - - let isInsideEscape = false; - let isInsideLinkEscape = false; - let visible = stringWidth(stripAnsi(rows[rows.length - 1])); - - for (const [index, character] of characters.entries()) { - const characterLength = stringWidth(character); - - if (visible + characterLength <= columns) { - rows[rows.length - 1] += character; - } else { - rows.push(character); - visible = 0; - } - - if (ESCAPES.has(character)) { - isInsideEscape = true; - isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); - } - - if (isInsideEscape) { - if (isInsideLinkEscape) { - if (character === ANSI_ESCAPE_BELL) { - isInsideEscape = false; - isInsideLinkEscape = false; - } - } else if (character === ANSI_SGR_TERMINATOR) { - isInsideEscape = false; - } - - continue; - } - - visible += characterLength; - - if (visible === columns && index < characters.length - 1) { - rows.push(''); - visible = 0; - } - } - - // It's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case - if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { - rows[rows.length - 2] += rows.pop(); - } -}; - -// Trims spaces from a string ignoring invisible sequences -const stringVisibleTrimSpacesRight = string => { - const words = string.split(' '); - let last = words.length; - - while (last > 0) { - if (stringWidth(words[last - 1]) > 0) { - break; - } - - last--; - } - - if (last === words.length) { - return string; - } - - return words.slice(0, last).join(' ') + words.slice(last).join(''); -}; - -// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode -// -// 'hard' will never allow a string to take up more than columns characters -// -// 'soft' allows long words to expand past the column length -const exec = (string, columns, options = {}) => { - if (options.trim !== false && string.trim() === '') { - return ''; - } - - let returnValue = ''; - let escapeCode; - let escapeUrl; - - const lengths = wordLengths(string); - let rows = ['']; - - for (const [index, word] of string.split(' ').entries()) { - if (options.trim !== false) { - rows[rows.length - 1] = rows[rows.length - 1].trimStart(); - } - - let rowLength = stringWidth(rows[rows.length - 1]); - - if (index !== 0) { - if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { - // If we start with a new word but the current row length equals the length of the columns, add a new row - rows.push(''); - rowLength = 0; - } - - if (rowLength > 0 || options.trim === false) { - rows[rows.length - 1] += ' '; - rowLength++; - } - } - - // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' - if (options.hard && lengths[index] > columns) { - const remainingColumns = (columns - rowLength); - const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); - const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); - if (breaksStartingNextLine < breaksStartingThisLine) { - rows.push(''); - } - - wrapWord(rows, word, columns); - continue; - } - - if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { - if (options.wordWrap === false && rowLength < columns) { - wrapWord(rows, word, columns); - continue; - } - - rows.push(''); - } - - if (rowLength + lengths[index] > columns && options.wordWrap === false) { - wrapWord(rows, word, columns); - continue; - } - - rows[rows.length - 1] += word; - } - - if (options.trim !== false) { - rows = rows.map(stringVisibleTrimSpacesRight); - } - - const pre = [...rows.join('\n')]; - - for (const [index, character] of pre.entries()) { - returnValue += character; - - if (ESCAPES.has(character)) { - const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; - if (groups.code !== undefined) { - const code = Number.parseFloat(groups.code); - escapeCode = code === END_CODE ? undefined : code; - } else if (groups.uri !== undefined) { - escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; - } - } - - const code = ansiStyles.codes.get(Number(escapeCode)); - - if (pre[index + 1] === '\n') { - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(''); - } - - if (escapeCode && code) { - returnValue += wrapAnsi(code); - } - } else if (character === '\n') { - if (escapeCode && code) { - returnValue += wrapAnsi(escapeCode); - } - - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(escapeUrl); - } - } - } - - return returnValue; -}; - -// For each newline, invoke the method separately -module.exports = (string, columns, options) => { - return String(string) - .normalize() - .replace(/\r\n/g, '\n') - .split('\n') - .map(line => exec(line, columns, options)) - .join('\n'); -}; diff --git a/node_modules/wrap-ansi-cjs/license b/node_modules/wrap-ansi-cjs/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/wrap-ansi-cjs/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts deleted file mode 100644 index 2dbf6af2b6..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -declare namespace ansiRegex { - interface Options { - /** - Match only the first ANSI escape. - - @default false - */ - onlyFirst: boolean; - } -} - -/** -Regular expression for matching ANSI escape codes. - -@example -``` -import ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` -*/ -declare function ansiRegex(options?: ansiRegex.Options): RegExp; - -export = ansiRegex; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js deleted file mode 100644 index 616ff837d3..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = ({onlyFirst = false} = {}) => { - const pattern = [ - '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', - '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' - ].join('|'); - - return new RegExp(pattern, onlyFirst ? undefined : 'g'); -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json deleted file mode 100644 index 017f53116a..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "ansi-regex", - "version": "5.0.1", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": "chalk/ansi-regex", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "view-supported": "node fixtures/view-codes.js" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.9.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md deleted file mode 100644 index 4d848bc36f..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,78 +0,0 @@ -# ansi-regex - -> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install ansi-regex -``` - - -## Usage - -```js -const ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001B[4mcake\u001B[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001B[4mcake\u001B[0m'.match(ansiRegex()); -//=> ['\u001B[4m', '\u001B[0m'] - -'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); -//=> ['\u001B[4m'] - -'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); -//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] -``` - - -## API - -### ansiRegex(options?) - -Returns a regex for matching ANSI escape codes. - -#### options - -Type: `object` - -##### onlyFirst - -Type: `boolean`
                  -Default: `false` *(Matches any ANSI escape codes in a string)* - -Match only the first ANSI escape. - - -## FAQ - -### Why do you test for codes not in the ECMA 48 standard? - -Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. - -On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts deleted file mode 100644 index 44a907e580..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts +++ /dev/null @@ -1,345 +0,0 @@ -declare type CSSColor = - | 'aliceblue' - | 'antiquewhite' - | 'aqua' - | 'aquamarine' - | 'azure' - | 'beige' - | 'bisque' - | 'black' - | 'blanchedalmond' - | 'blue' - | 'blueviolet' - | 'brown' - | 'burlywood' - | 'cadetblue' - | 'chartreuse' - | 'chocolate' - | 'coral' - | 'cornflowerblue' - | 'cornsilk' - | 'crimson' - | 'cyan' - | 'darkblue' - | 'darkcyan' - | 'darkgoldenrod' - | 'darkgray' - | 'darkgreen' - | 'darkgrey' - | 'darkkhaki' - | 'darkmagenta' - | 'darkolivegreen' - | 'darkorange' - | 'darkorchid' - | 'darkred' - | 'darksalmon' - | 'darkseagreen' - | 'darkslateblue' - | 'darkslategray' - | 'darkslategrey' - | 'darkturquoise' - | 'darkviolet' - | 'deeppink' - | 'deepskyblue' - | 'dimgray' - | 'dimgrey' - | 'dodgerblue' - | 'firebrick' - | 'floralwhite' - | 'forestgreen' - | 'fuchsia' - | 'gainsboro' - | 'ghostwhite' - | 'gold' - | 'goldenrod' - | 'gray' - | 'green' - | 'greenyellow' - | 'grey' - | 'honeydew' - | 'hotpink' - | 'indianred' - | 'indigo' - | 'ivory' - | 'khaki' - | 'lavender' - | 'lavenderblush' - | 'lawngreen' - | 'lemonchiffon' - | 'lightblue' - | 'lightcoral' - | 'lightcyan' - | 'lightgoldenrodyellow' - | 'lightgray' - | 'lightgreen' - | 'lightgrey' - | 'lightpink' - | 'lightsalmon' - | 'lightseagreen' - | 'lightskyblue' - | 'lightslategray' - | 'lightslategrey' - | 'lightsteelblue' - | 'lightyellow' - | 'lime' - | 'limegreen' - | 'linen' - | 'magenta' - | 'maroon' - | 'mediumaquamarine' - | 'mediumblue' - | 'mediumorchid' - | 'mediumpurple' - | 'mediumseagreen' - | 'mediumslateblue' - | 'mediumspringgreen' - | 'mediumturquoise' - | 'mediumvioletred' - | 'midnightblue' - | 'mintcream' - | 'mistyrose' - | 'moccasin' - | 'navajowhite' - | 'navy' - | 'oldlace' - | 'olive' - | 'olivedrab' - | 'orange' - | 'orangered' - | 'orchid' - | 'palegoldenrod' - | 'palegreen' - | 'paleturquoise' - | 'palevioletred' - | 'papayawhip' - | 'peachpuff' - | 'peru' - | 'pink' - | 'plum' - | 'powderblue' - | 'purple' - | 'rebeccapurple' - | 'red' - | 'rosybrown' - | 'royalblue' - | 'saddlebrown' - | 'salmon' - | 'sandybrown' - | 'seagreen' - | 'seashell' - | 'sienna' - | 'silver' - | 'skyblue' - | 'slateblue' - | 'slategray' - | 'slategrey' - | 'snow' - | 'springgreen' - | 'steelblue' - | 'tan' - | 'teal' - | 'thistle' - | 'tomato' - | 'turquoise' - | 'violet' - | 'wheat' - | 'white' - | 'whitesmoke' - | 'yellow' - | 'yellowgreen'; - -declare namespace ansiStyles { - interface ColorConvert { - /** - The RGB color space. - - @param red - (`0`-`255`) - @param green - (`0`-`255`) - @param blue - (`0`-`255`) - */ - rgb(red: number, green: number, blue: number): string; - - /** - The RGB HEX color space. - - @param hex - A hexadecimal string containing RGB data. - */ - hex(hex: string): string; - - /** - @param keyword - A CSS color name. - */ - keyword(keyword: CSSColor): string; - - /** - The HSL color space. - - @param hue - (`0`-`360`) - @param saturation - (`0`-`100`) - @param lightness - (`0`-`100`) - */ - hsl(hue: number, saturation: number, lightness: number): string; - - /** - The HSV color space. - - @param hue - (`0`-`360`) - @param saturation - (`0`-`100`) - @param value - (`0`-`100`) - */ - hsv(hue: number, saturation: number, value: number): string; - - /** - The HSV color space. - - @param hue - (`0`-`360`) - @param whiteness - (`0`-`100`) - @param blackness - (`0`-`100`) - */ - hwb(hue: number, whiteness: number, blackness: number): string; - - /** - Use a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color. - */ - ansi(ansi: number): string; - - /** - Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. - */ - ansi256(ansi: number): string; - } - - interface CSPair { - /** - The ANSI terminal control sequence for starting this style. - */ - readonly open: string; - - /** - The ANSI terminal control sequence for ending this style. - */ - readonly close: string; - } - - interface ColorBase { - readonly ansi: ColorConvert; - readonly ansi256: ColorConvert; - readonly ansi16m: ColorConvert; - - /** - The ANSI terminal control sequence for ending this color. - */ - readonly close: string; - } - - interface Modifier { - /** - Resets the current color chain. - */ - readonly reset: CSPair; - - /** - Make text bold. - */ - readonly bold: CSPair; - - /** - Emitting only a small amount of light. - */ - readonly dim: CSPair; - - /** - Make text italic. (Not widely supported) - */ - readonly italic: CSPair; - - /** - Make text underline. (Not widely supported) - */ - readonly underline: CSPair; - - /** - Inverse background and foreground colors. - */ - readonly inverse: CSPair; - - /** - Prints the text, but makes it invisible. - */ - readonly hidden: CSPair; - - /** - Puts a horizontal line through the center of the text. (Not widely supported) - */ - readonly strikethrough: CSPair; - } - - interface ForegroundColor { - readonly black: CSPair; - readonly red: CSPair; - readonly green: CSPair; - readonly yellow: CSPair; - readonly blue: CSPair; - readonly cyan: CSPair; - readonly magenta: CSPair; - readonly white: CSPair; - - /** - Alias for `blackBright`. - */ - readonly gray: CSPair; - - /** - Alias for `blackBright`. - */ - readonly grey: CSPair; - - readonly blackBright: CSPair; - readonly redBright: CSPair; - readonly greenBright: CSPair; - readonly yellowBright: CSPair; - readonly blueBright: CSPair; - readonly cyanBright: CSPair; - readonly magentaBright: CSPair; - readonly whiteBright: CSPair; - } - - interface BackgroundColor { - readonly bgBlack: CSPair; - readonly bgRed: CSPair; - readonly bgGreen: CSPair; - readonly bgYellow: CSPair; - readonly bgBlue: CSPair; - readonly bgCyan: CSPair; - readonly bgMagenta: CSPair; - readonly bgWhite: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGray: CSPair; - - /** - Alias for `bgBlackBright`. - */ - readonly bgGrey: CSPair; - - readonly bgBlackBright: CSPair; - readonly bgRedBright: CSPair; - readonly bgGreenBright: CSPair; - readonly bgYellowBright: CSPair; - readonly bgBlueBright: CSPair; - readonly bgCyanBright: CSPair; - readonly bgMagentaBright: CSPair; - readonly bgWhiteBright: CSPair; - } -} - -declare const ansiStyles: { - readonly modifier: ansiStyles.Modifier; - readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase; - readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase; - readonly codes: ReadonlyMap; -} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier; - -export = ansiStyles; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js deleted file mode 100644 index 5d82581a13..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js +++ /dev/null @@ -1,163 +0,0 @@ -'use strict'; - -const wrapAnsi16 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${code + offset}m`; -}; - -const wrapAnsi256 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${38 + offset};5;${code}m`; -}; - -const wrapAnsi16m = (fn, offset) => (...args) => { - const rgb = fn(...args); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; - -const ansi2ansi = n => n; -const rgb2rgb = (r, g, b) => [r, g, b]; - -const setLazyProperty = (object, property, get) => { - Object.defineProperty(object, property, { - get: () => { - const value = get(); - - Object.defineProperty(object, property, { - value, - enumerable: true, - configurable: true - }); - - return value; - }, - enumerable: true, - configurable: true - }); -}; - -/** @type {typeof import('color-convert')} */ -let colorConvert; -const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { - if (colorConvert === undefined) { - colorConvert = require('color-convert'); - } - - const offset = isBackground ? 10 : 0; - const styles = {}; - - for (const [sourceSpace, suite] of Object.entries(colorConvert)) { - const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; - if (sourceSpace === targetSpace) { - styles[name] = wrap(identity, offset); - } else if (typeof suite === 'object') { - styles[name] = wrap(suite[targetSpace], offset); - } - } - - return styles; -}; - -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - - // Bright color - blackBright: [90, 39], - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; - - // Alias bright black as gray (and grey) - styles.color.gray = styles.color.blackBright; - styles.bgColor.bgGray = styles.bgColor.bgBlackBright; - styles.color.grey = styles.color.blackBright; - styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; - - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; - - group[styleName] = styles[styleName]; - - codes.set(style[0], style[1]); - } - - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); - } - - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); - setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); - - return styles; -} - -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json deleted file mode 100644 index 75393284d7..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "ansi-styles", - "version": "4.3.0", - "description": "ANSI escape codes for styling strings in the terminal", - "license": "MIT", - "repository": "chalk/ansi-styles", - "funding": "https://github.com/chalk/ansi-styles?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd", - "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "color-convert": "^2.0.1" - }, - "devDependencies": { - "@types/color-convert": "^1.9.0", - "ava": "^2.3.0", - "svg-term-cli": "^2.1.1", - "tsd": "^0.11.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md deleted file mode 100644 index 24883de808..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md +++ /dev/null @@ -1,152 +0,0 @@ -# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) - -> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal - -You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. - - - -## Install - -``` -$ npm install ansi-styles -``` - -## Usage - -```js -const style = require('ansi-styles'); - -console.log(`${style.green.open}Hello world!${style.green.close}`); - - -// Color conversion between 16/256/truecolor -// NOTE: If conversion goes to 16 colors or 256 colors, the original color -// may be degraded to fit that color palette. This means terminals -// that do not support 16 million colors will best-match the -// original color. -console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); -console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); -console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close); -``` - -## API - -Each style has an `open` and `close` property. - -## Styles - -### Modifiers - -- `reset` -- `bold` -- `dim` -- `italic` *(Not widely supported)* -- `underline` -- `inverse` -- `hidden` -- `strikethrough` *(Not widely supported)* - -### Colors - -- `black` -- `red` -- `green` -- `yellow` -- `blue` -- `magenta` -- `cyan` -- `white` -- `blackBright` (alias: `gray`, `grey`) -- `redBright` -- `greenBright` -- `yellowBright` -- `blueBright` -- `magentaBright` -- `cyanBright` -- `whiteBright` - -### Background colors - -- `bgBlack` -- `bgRed` -- `bgGreen` -- `bgYellow` -- `bgBlue` -- `bgMagenta` -- `bgCyan` -- `bgWhite` -- `bgBlackBright` (alias: `bgGray`, `bgGrey`) -- `bgRedBright` -- `bgGreenBright` -- `bgYellowBright` -- `bgBlueBright` -- `bgMagentaBright` -- `bgCyanBright` -- `bgWhiteBright` - -## Advanced usage - -By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. - -- `style.modifier` -- `style.color` -- `style.bgColor` - -###### Example - -```js -console.log(style.color.green.open); -``` - -Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. - -###### Example - -```js -console.log(style.codes.get(36)); -//=> 39 -``` - -## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) - -`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. - -The following color spaces from `color-convert` are supported: - -- `rgb` -- `hex` -- `keyword` -- `hsl` -- `hsv` -- `hwb` -- `ansi` -- `ansi256` - -To use these, call the associated conversion function with the intended output, for example: - -```js -style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code -style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code - -style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code -style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code - -style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code -style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code -``` - -## Related - -- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - -## For enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7ef9..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md deleted file mode 100644 index f10e173335..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) - -_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. - -This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install emoji-regex -``` - -In [Node.js](https://nodejs.org/): - -```js -const emojiRegex = require('emoji-regex'); -// Note: because the regular expression has the global flag set, this module -// exports a function that returns the regex rather than exporting the regular -// expression itself, to make it impossible to (accidentally) mutate the -// original regular expression. - -const text = ` -\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) -\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji -\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) -\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier -`; - -const regex = emojiRegex(); -let match; -while (match = regex.exec(text)) { - const emoji = match[0]; - console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); -} -``` - -Console output: - -``` -Matched sequence ⌚ — code points: 1 -Matched sequence ⌚ — code points: 1 -Matched sequence ↔️ — code points: 2 -Matched sequence ↔️ — code points: 2 -Matched sequence 👩 — code points: 1 -Matched sequence 👩 — code points: 1 -Matched sequence 👩🏿 — code points: 2 -Matched sequence 👩🏿 — code points: 2 -``` - -To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: - -```js -const emojiRegex = require('emoji-regex/text.js'); -``` - -Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: - -```js -const emojiRegex = require('emoji-regex/es2015/index.js'); -const emojiRegexText = require('emoji-regex/es2015/text.js'); -``` - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js deleted file mode 100644 index b4cf3dcd38..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js deleted file mode 100644 index 780309df58..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = () => { - // https://mths.be/emoji - return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts deleted file mode 100644 index 1955b4704e..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'emoji-regex' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} - -declare module 'emoji-regex/es2015/text' { - function emojiRegex(): RegExp; - - export default emojiRegex; -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js deleted file mode 100644 index d993a3a99c..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json deleted file mode 100644 index 6d32352829..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "emoji-regex", - "version": "8.0.0", - "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", - "homepage": "https://mths.be/emoji-regex", - "main": "index.js", - "types": "index.d.ts", - "keywords": [ - "unicode", - "regex", - "regexp", - "regular expressions", - "code points", - "symbols", - "characters", - "emoji" - ], - "license": "MIT", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "repository": { - "type": "git", - "url": "https://github.com/mathiasbynens/emoji-regex.git" - }, - "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", - "files": [ - "LICENSE-MIT.txt", - "index.js", - "index.d.ts", - "text.js", - "es2015/index.js", - "es2015/text.js" - ], - "scripts": { - "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", - "test": "mocha", - "test:watch": "npm run test -- --watch" - }, - "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.3.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/preset-env": "^7.3.4", - "mocha": "^6.0.2", - "regexgen": "^1.3.0", - "unicode-12.0.0": "^0.7.9" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js deleted file mode 100644 index 0a55ce2f23..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -module.exports = function () { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; -}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts deleted file mode 100644 index 12b5309751..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -declare const stringWidth: { - /** - Get the visual width of a string - the number of columns required to display it. - - Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - - @example - ``` - import stringWidth = require('string-width'); - - stringWidth('a'); - //=> 1 - - stringWidth('古'); - //=> 2 - - stringWidth('\u001B[1m古\u001B[22m'); - //=> 2 - ``` - */ - (string: string): number; - - // TODO: remove this in the next major version, refactor the whole definition to: - // declare function stringWidth(string: string): number; - // export = stringWidth; - default: typeof stringWidth; -} - -export = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js deleted file mode 100644 index f4d261a96a..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -const stripAnsi = require('strip-ansi'); -const isFullwidthCodePoint = require('is-fullwidth-code-point'); -const emojiRegex = require('emoji-regex'); - -const stringWidth = string => { - if (typeof string !== 'string' || string.length === 0) { - return 0; - } - - string = stripAnsi(string); - - if (string.length === 0) { - return 0; - } - - string = string.replace(emojiRegex(), ' '); - - let width = 0; - - for (let i = 0; i < string.length; i++) { - const code = string.codePointAt(i); - - // Ignore control characters - if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { - continue; - } - - // Ignore combining characters - if (code >= 0x300 && code <= 0x36F) { - continue; - } - - // Surrogates - if (code > 0xFFFF) { - i++; - } - - width += isFullwidthCodePoint(code) ? 2 : 1; - } - - return width; -}; - -module.exports = stringWidth; -// TODO: remove this in the next major version -module.exports.default = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/license b/node_modules/wrap-ansi-cjs/node_modules/string-width/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json deleted file mode 100644 index 28ba7b4cae..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "string-width", - "version": "4.2.3", - "description": "Get the visual width of a string - the number of columns required to display it", - "license": "MIT", - "repository": "sindresorhus/string-width", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "string", - "character", - "unicode", - "width", - "visual", - "column", - "columns", - "fullwidth", - "full-width", - "full", - "ansi", - "escape", - "codes", - "cli", - "command-line", - "terminal", - "console", - "cjk", - "chinese", - "japanese", - "korean", - "fixed-width" - ], - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.1", - "xo": "^0.24.0" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md deleted file mode 100644 index bdd314129c..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# string-width - -> Get the visual width of a string - the number of columns required to display it - -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. - -Useful to be able to measure the actual width of command-line output. - - -## Install - -``` -$ npm install string-width -``` - - -## Usage - -```js -const stringWidth = require('string-width'); - -stringWidth('a'); -//=> 1 - -stringWidth('古'); -//=> 2 - -stringWidth('\u001B[1m古\u001B[22m'); -//=> 2 -``` - - -## Related - -- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module -- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string -- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string - - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts deleted file mode 100644 index 907fccc292..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** -Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. - -@example -``` -import stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` -*/ -declare function stripAnsi(string: string): string; - -export = stripAnsi; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js deleted file mode 100644 index 9a593dfcd1..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -const ansiRegex = require('ansi-regex'); - -module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license deleted file mode 100644 index e7af2f7710..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json deleted file mode 100644 index 1a41108d42..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "strip-ansi", - "version": "6.0.1", - "description": "Strip ANSI escape codes from a string", - "license": "MIT", - "repository": "chalk/strip-ansi", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "strip", - "trim", - "remove", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "devDependencies": { - "ava": "^2.4.0", - "tsd": "^0.10.0", - "xo": "^0.25.3" - } -} diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md deleted file mode 100644 index 7c4b56d46d..0000000000 --- a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) - -> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string - - -## Install - -``` -$ npm install strip-ansi -``` - - -## Usage - -```js -const stripAnsi = require('strip-ansi'); - -stripAnsi('\u001B[4mUnicorn\u001B[0m'); -//=> 'Unicorn' - -stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); -//=> 'Click' -``` - - -## strip-ansi for enterprise - -Available as part of the Tidelift Subscription. - -The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - - -## Related - -- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module -- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module -- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) - diff --git a/node_modules/wrap-ansi-cjs/package.json b/node_modules/wrap-ansi-cjs/package.json deleted file mode 100644 index dfb2f4f108..0000000000 --- a/node_modules/wrap-ansi-cjs/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "wrap-ansi", - "version": "7.0.0", - "description": "Wordwrap a string with ANSI escape codes", - "license": "MIT", - "repository": "chalk/wrap-ansi", - "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "engines": { - "node": ">=10" - }, - "scripts": { - "test": "xo && nyc ava" - }, - "files": [ - "index.js" - ], - "keywords": [ - "wrap", - "break", - "wordwrap", - "wordbreak", - "linewrap", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "devDependencies": { - "ava": "^2.1.0", - "chalk": "^4.0.0", - "coveralls": "^3.0.3", - "has-ansi": "^4.0.0", - "nyc": "^15.0.1", - "xo": "^0.29.1" - } -} diff --git a/node_modules/wrap-ansi-cjs/readme.md b/node_modules/wrap-ansi-cjs/readme.md deleted file mode 100644 index 68779ba5f4..0000000000 --- a/node_modules/wrap-ansi-cjs/readme.md +++ /dev/null @@ -1,91 +0,0 @@ -# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) - -> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) - -## Install - -``` -$ npm install wrap-ansi -``` - -## Usage - -```js -const chalk = require('chalk'); -const wrapAnsi = require('wrap-ansi'); - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` - - - -## API - -### wrapAnsi(string, columns, options?) - -Wrap words to the specified column width. - -#### string - -Type: `string` - -String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. - -#### columns - -Type: `number` - -Number of columns to wrap the text to. - -#### options - -Type: `object` - -##### hard - -Type: `boolean`\ -Default: `false` - -By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - -##### wordWrap - -Type: `boolean`\ -Default: `true` - -By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. - -##### trim - -Type: `boolean`\ -Default: `true` - -Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. - -## Related - -- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes -- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right -- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) -- [Benjamin Coe](https://github.com/bcoe) - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  diff --git a/node_modules/wrap-ansi/index.d.ts b/node_modules/wrap-ansi/index.d.ts deleted file mode 100644 index 95471cade4..0000000000 --- a/node_modules/wrap-ansi/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -export type Options = { - /** - By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - - @default false - */ - readonly hard?: boolean; - - /** - By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. - - @default true - */ - readonly wordWrap?: boolean; - - /** - Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. - - @default true - */ - readonly trim?: boolean; -}; - -/** -Wrap words to the specified column width. - -@param string - String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. -@param columns - Number of columns to wrap the text to. - -@example -``` -import chalk from 'chalk'; -import wrapAnsi from 'wrap-ansi'; - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` -*/ -export default function wrapAnsi(string: string, columns: number, options?: Options): string; diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js deleted file mode 100755 index d80c74c19c..0000000000 --- a/node_modules/wrap-ansi/index.js +++ /dev/null @@ -1,214 +0,0 @@ -import stringWidth from 'string-width'; -import stripAnsi from 'strip-ansi'; -import ansiStyles from 'ansi-styles'; - -const ESCAPES = new Set([ - '\u001B', - '\u009B', -]); - -const END_CODE = 39; -const ANSI_ESCAPE_BELL = '\u0007'; -const ANSI_CSI = '['; -const ANSI_OSC = ']'; -const ANSI_SGR_TERMINATOR = 'm'; -const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; - -const wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; -const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; - -// Calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes -const wordLengths = string => string.split(' ').map(character => stringWidth(character)); - -// Wrap a long word across multiple rows -// Ansi escape codes do not count towards length -const wrapWord = (rows, word, columns) => { - const characters = [...word]; - - let isInsideEscape = false; - let isInsideLinkEscape = false; - let visible = stringWidth(stripAnsi(rows[rows.length - 1])); - - for (const [index, character] of characters.entries()) { - const characterLength = stringWidth(character); - - if (visible + characterLength <= columns) { - rows[rows.length - 1] += character; - } else { - rows.push(character); - visible = 0; - } - - if (ESCAPES.has(character)) { - isInsideEscape = true; - isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); - } - - if (isInsideEscape) { - if (isInsideLinkEscape) { - if (character === ANSI_ESCAPE_BELL) { - isInsideEscape = false; - isInsideLinkEscape = false; - } - } else if (character === ANSI_SGR_TERMINATOR) { - isInsideEscape = false; - } - - continue; - } - - visible += characterLength; - - if (visible === columns && index < characters.length - 1) { - rows.push(''); - visible = 0; - } - } - - // It's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case - if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { - rows[rows.length - 2] += rows.pop(); - } -}; - -// Trims spaces from a string ignoring invisible sequences -const stringVisibleTrimSpacesRight = string => { - const words = string.split(' '); - let last = words.length; - - while (last > 0) { - if (stringWidth(words[last - 1]) > 0) { - break; - } - - last--; - } - - if (last === words.length) { - return string; - } - - return words.slice(0, last).join(' ') + words.slice(last).join(''); -}; - -// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode -// -// 'hard' will never allow a string to take up more than columns characters -// -// 'soft' allows long words to expand past the column length -const exec = (string, columns, options = {}) => { - if (options.trim !== false && string.trim() === '') { - return ''; - } - - let returnValue = ''; - let escapeCode; - let escapeUrl; - - const lengths = wordLengths(string); - let rows = ['']; - - for (const [index, word] of string.split(' ').entries()) { - if (options.trim !== false) { - rows[rows.length - 1] = rows[rows.length - 1].trimStart(); - } - - let rowLength = stringWidth(rows[rows.length - 1]); - - if (index !== 0) { - if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { - // If we start with a new word but the current row length equals the length of the columns, add a new row - rows.push(''); - rowLength = 0; - } - - if (rowLength > 0 || options.trim === false) { - rows[rows.length - 1] += ' '; - rowLength++; - } - } - - // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' - if (options.hard && lengths[index] > columns) { - const remainingColumns = (columns - rowLength); - const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); - const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); - if (breaksStartingNextLine < breaksStartingThisLine) { - rows.push(''); - } - - wrapWord(rows, word, columns); - continue; - } - - if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { - if (options.wordWrap === false && rowLength < columns) { - wrapWord(rows, word, columns); - continue; - } - - rows.push(''); - } - - if (rowLength + lengths[index] > columns && options.wordWrap === false) { - wrapWord(rows, word, columns); - continue; - } - - rows[rows.length - 1] += word; - } - - if (options.trim !== false) { - rows = rows.map(row => stringVisibleTrimSpacesRight(row)); - } - - const pre = [...rows.join('\n')]; - - for (const [index, character] of pre.entries()) { - returnValue += character; - - if (ESCAPES.has(character)) { - const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; - if (groups.code !== undefined) { - const code = Number.parseFloat(groups.code); - escapeCode = code === END_CODE ? undefined : code; - } else if (groups.uri !== undefined) { - escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; - } - } - - const code = ansiStyles.codes.get(Number(escapeCode)); - - if (pre[index + 1] === '\n') { - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(''); - } - - if (escapeCode && code) { - returnValue += wrapAnsiCode(code); - } - } else if (character === '\n') { - if (escapeCode && code) { - returnValue += wrapAnsiCode(escapeCode); - } - - if (escapeUrl) { - returnValue += wrapAnsiHyperlink(escapeUrl); - } - } - } - - return returnValue; -}; - -// For each newline, invoke the method separately -export default function wrapAnsi(string, columns, options) { - return String(string) - .normalize() - .replace(/\r\n/g, '\n') - .split('\n') - .map(line => exec(line, columns, options)) - .join('\n'); -} diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license deleted file mode 100644 index fa7ceba3eb..0000000000 --- a/node_modules/wrap-ansi/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json deleted file mode 100644 index 198a5dbcb7..0000000000 --- a/node_modules/wrap-ansi/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "wrap-ansi", - "version": "8.1.0", - "description": "Wordwrap a string with ANSI escape codes", - "license": "MIT", - "repository": "chalk/wrap-ansi", - "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "https://sindresorhus.com" - }, - "type": "module", - "exports": { - "types": "./index.d.ts", - "default": "./index.js" - }, - "engines": { - "node": ">=12" - }, - "scripts": { - "test": "xo && nyc ava && tsd" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "keywords": [ - "wrap", - "break", - "wordwrap", - "wordbreak", - "linewrap", - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "log", - "logging", - "command-line", - "text" - ], - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "devDependencies": { - "ava": "^3.15.0", - "chalk": "^4.1.2", - "coveralls": "^3.1.1", - "has-ansi": "^5.0.1", - "nyc": "^15.1.0", - "tsd": "^0.25.0", - "xo": "^0.44.0" - } -} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md deleted file mode 100644 index 21f6fed7b6..0000000000 --- a/node_modules/wrap-ansi/readme.md +++ /dev/null @@ -1,91 +0,0 @@ -# wrap-ansi - -> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) - -## Install - -``` -$ npm install wrap-ansi -``` - -## Usage - -```js -import chalk from 'chalk'; -import wrapAnsi from 'wrap-ansi'; - -const input = 'The quick brown ' + chalk.red('fox jumped over ') + - 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); - -console.log(wrapAnsi(input, 20)); -``` - - - -## API - -### wrapAnsi(string, columns, options?) - -Wrap words to the specified column width. - -#### string - -Type: `string` - -String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. - -#### columns - -Type: `number` - -Number of columns to wrap the text to. - -#### options - -Type: `object` - -##### hard - -Type: `boolean`\ -Default: `false` - -By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. - -##### wordWrap - -Type: `boolean`\ -Default: `true` - -By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. - -##### trim - -Type: `boolean`\ -Default: `true` - -Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. - -## Related - -- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes -- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right -- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. - -## Maintainers - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Josh Junon](https://github.com/qix-) -- [Benjamin Coe](https://github.com/bcoe) - ---- - -
                  - - Get professional support for this package with a Tidelift subscription - -
                  - - Tidelift helps make open source sustainable for maintainers while giving companies
                  assurances about security, maintenance, and licensing for their dependencies. -
                  -
                  From 11a25be785e2c635fe383479425b0ae6ec3f3f90 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 15:19:39 -0500 Subject: [PATCH 47/51] updating vendor files --- vendor/fb303/FacebookService.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vendor/fb303/FacebookService.py b/vendor/fb303/FacebookService.py index 16510de70d..91194ae11b 100644 --- a/vendor/fb303/FacebookService.py +++ b/vendor/fb303/FacebookService.py @@ -1,4 +1,3 @@ - # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information From 03a8d108d3128e805af8583cebecd57601058c4f Mon Sep 17 00:00:00 2001 From: mattmartin14 <51217870+mattmartin14@users.noreply.github.com> Date: Wed, 12 Feb 2025 16:18:42 -0500 Subject: [PATCH 48/51] Update vendor/fb303/FacebookService.py Co-authored-by: Fokko Driesprong --- vendor/fb303/FacebookService.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/fb303/FacebookService.py b/vendor/fb303/FacebookService.py index 91194ae11b..c46b0a82a2 100644 --- a/vendor/fb303/FacebookService.py +++ b/vendor/fb303/FacebookService.py @@ -2417,4 +2417,4 @@ def __ne__(self, other): all_structs.append(shutdown_args) shutdown_args.thrift_spec = () fix_spec(all_structs) -del all_structs \ No newline at end of file +del all_structs From 8a2143ca5d72adf9ef39147a97ef644d5749ee31 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 16:20:29 -0500 Subject: [PATCH 49/51] updated vendor files --- vendor/fb303/ttypes.py | 42497 +++++++++++++++++++++++++++++- vendor/hive_metastore/ttypes.py | 2 +- 2 files changed, 42475 insertions(+), 24 deletions(-) diff --git a/vendor/fb303/ttypes.py b/vendor/fb303/ttypes.py index bf2c4e2955..075fed6fa3 100644 --- a/vendor/fb303/ttypes.py +++ b/vendor/fb303/ttypes.py @@ -22,43 +22,42494 @@ # options string: py # +import sys +from thrift.protocol.TProtocol import TProtocolException +from thrift.Thrift import ( + TException, + TType, +) +from thrift.transport import TTransport from thrift.TRecursive import fix_spec all_structs = [] -class fb_status: - """ - Common status reporting mechanism across all services +class HiveObjectType: + GLOBAL = 1 + DATABASE = 2 + TABLE = 3 + PARTITION = 4 + COLUMN = 5 + DATACONNECTOR = 6 + + _VALUES_TO_NAMES = { + 1: "GLOBAL", + 2: "DATABASE", + 3: "TABLE", + 4: "PARTITION", + 5: "COLUMN", + 6: "DATACONNECTOR", + } + + _NAMES_TO_VALUES = { + "GLOBAL": 1, + "DATABASE": 2, + "TABLE": 3, + "PARTITION": 4, + "COLUMN": 5, + "DATACONNECTOR": 6, + } + + +class PrincipalType: + USER = 1 + ROLE = 2 + GROUP = 3 + + _VALUES_TO_NAMES = { + 1: "USER", + 2: "ROLE", + 3: "GROUP", + } + + _NAMES_TO_VALUES = { + "USER": 1, + "ROLE": 2, + "GROUP": 3, + } + + +class PartitionEventType: + LOAD_DONE = 1 + + _VALUES_TO_NAMES = { + 1: "LOAD_DONE", + } + + _NAMES_TO_VALUES = { + "LOAD_DONE": 1, + } + + +class TxnState: + COMMITTED = 1 + ABORTED = 2 + OPEN = 3 + + _VALUES_TO_NAMES = { + 1: "COMMITTED", + 2: "ABORTED", + 3: "OPEN", + } + + _NAMES_TO_VALUES = { + "COMMITTED": 1, + "ABORTED": 2, + "OPEN": 3, + } + + +class LockLevel: + DB = 1 + TABLE = 2 + PARTITION = 3 + + _VALUES_TO_NAMES = { + 1: "DB", + 2: "TABLE", + 3: "PARTITION", + } + + _NAMES_TO_VALUES = { + "DB": 1, + "TABLE": 2, + "PARTITION": 3, + } + + +class LockState: + ACQUIRED = 1 + WAITING = 2 + ABORT = 3 + NOT_ACQUIRED = 4 + + _VALUES_TO_NAMES = { + 1: "ACQUIRED", + 2: "WAITING", + 3: "ABORT", + 4: "NOT_ACQUIRED", + } + + _NAMES_TO_VALUES = { + "ACQUIRED": 1, + "WAITING": 2, + "ABORT": 3, + "NOT_ACQUIRED": 4, + } + + +class LockType: + SHARED_READ = 1 + SHARED_WRITE = 2 + EXCLUSIVE = 3 + EXCL_WRITE = 4 + + _VALUES_TO_NAMES = { + 1: "SHARED_READ", + 2: "SHARED_WRITE", + 3: "EXCLUSIVE", + 4: "EXCL_WRITE", + } + + _NAMES_TO_VALUES = { + "SHARED_READ": 1, + "SHARED_WRITE": 2, + "EXCLUSIVE": 3, + "EXCL_WRITE": 4, + } + + +class CompactionType: + MINOR = 1 + MAJOR = 2 + + _VALUES_TO_NAMES = { + 1: "MINOR", + 2: "MAJOR", + } + + _NAMES_TO_VALUES = { + "MINOR": 1, + "MAJOR": 2, + } + + +class GrantRevokeType: + GRANT = 1 + REVOKE = 2 + + _VALUES_TO_NAMES = { + 1: "GRANT", + 2: "REVOKE", + } + + _NAMES_TO_VALUES = { + "GRANT": 1, + "REVOKE": 2, + } + + +class DataOperationType: + SELECT = 1 + INSERT = 2 + UPDATE = 3 + DELETE = 4 + UNSET = 5 + NO_TXN = 6 + + _VALUES_TO_NAMES = { + 1: "SELECT", + 2: "INSERT", + 3: "UPDATE", + 4: "DELETE", + 5: "UNSET", + 6: "NO_TXN", + } + + _NAMES_TO_VALUES = { + "SELECT": 1, + "INSERT": 2, + "UPDATE": 3, + "DELETE": 4, + "UNSET": 5, + "NO_TXN": 6, + } + + +class EventRequestType: + INSERT = 1 + UPDATE = 2 + DELETE = 3 + + _VALUES_TO_NAMES = { + 1: "INSERT", + 2: "UPDATE", + 3: "DELETE", + } + + _NAMES_TO_VALUES = { + "INSERT": 1, + "UPDATE": 2, + "DELETE": 3, + } + + +class SerdeType: + HIVE = 1 + SCHEMA_REGISTRY = 2 + + _VALUES_TO_NAMES = { + 1: "HIVE", + 2: "SCHEMA_REGISTRY", + } + + _NAMES_TO_VALUES = { + "HIVE": 1, + "SCHEMA_REGISTRY": 2, + } + + +class SchemaType: + HIVE = 1 + AVRO = 2 + + _VALUES_TO_NAMES = { + 1: "HIVE", + 2: "AVRO", + } + + _NAMES_TO_VALUES = { + "HIVE": 1, + "AVRO": 2, + } + + +class SchemaCompatibility: + NONE = 1 + BACKWARD = 2 + FORWARD = 3 + BOTH = 4 + + _VALUES_TO_NAMES = { + 1: "NONE", + 2: "BACKWARD", + 3: "FORWARD", + 4: "BOTH", + } + + _NAMES_TO_VALUES = { + "NONE": 1, + "BACKWARD": 2, + "FORWARD": 3, + "BOTH": 4, + } + + +class SchemaValidation: + LATEST = 1 + ALL = 2 + + _VALUES_TO_NAMES = { + 1: "LATEST", + 2: "ALL", + } + + _NAMES_TO_VALUES = { + "LATEST": 1, + "ALL": 2, + } + + +class SchemaVersionState: + INITIATED = 1 + START_REVIEW = 2 + CHANGES_REQUIRED = 3 + REVIEWED = 4 + ENABLED = 5 + DISABLED = 6 + ARCHIVED = 7 + DELETED = 8 + + _VALUES_TO_NAMES = { + 1: "INITIATED", + 2: "START_REVIEW", + 3: "CHANGES_REQUIRED", + 4: "REVIEWED", + 5: "ENABLED", + 6: "DISABLED", + 7: "ARCHIVED", + 8: "DELETED", + } + + _NAMES_TO_VALUES = { + "INITIATED": 1, + "START_REVIEW": 2, + "CHANGES_REQUIRED": 3, + "REVIEWED": 4, + "ENABLED": 5, + "DISABLED": 6, + "ARCHIVED": 7, + "DELETED": 8, + } - """ - DEAD = 0 - STARTING = 1 - ALIVE = 2 - STOPPING = 3 - STOPPED = 4 - WARNING = 5 +class DatabaseType: + NATIVE = 1 + REMOTE = 2 _VALUES_TO_NAMES = { - 0: "DEAD", - 1: "STARTING", - 2: "ALIVE", - 3: "STOPPING", - 4: "STOPPED", - 5: "WARNING", + 1: "NATIVE", + 2: "REMOTE", } _NAMES_TO_VALUES = { - "DEAD": 0, - "STARTING": 1, - "ALIVE": 2, - "STOPPING": 3, - "STOPPED": 4, - "WARNING": 5, + "NATIVE": 1, + "REMOTE": 2, } +class FunctionType: + JAVA = 1 + + _VALUES_TO_NAMES = { + 1: "JAVA", + } + + _NAMES_TO_VALUES = { + "JAVA": 1, + } + + +class ResourceType: + JAR = 1 + FILE = 2 + ARCHIVE = 3 + + _VALUES_TO_NAMES = { + 1: "JAR", + 2: "FILE", + 3: "ARCHIVE", + } + + _NAMES_TO_VALUES = { + "JAR": 1, + "FILE": 2, + "ARCHIVE": 3, + } + + +class TxnType: + DEFAULT = 0 + REPL_CREATED = 1 + READ_ONLY = 2 + COMPACTION = 3 + MATER_VIEW_REBUILD = 4 + SOFT_DELETE = 5 + + _VALUES_TO_NAMES = { + 0: "DEFAULT", + 1: "REPL_CREATED", + 2: "READ_ONLY", + 3: "COMPACTION", + 4: "MATER_VIEW_REBUILD", + 5: "SOFT_DELETE", + } + + _NAMES_TO_VALUES = { + "DEFAULT": 0, + "REPL_CREATED": 1, + "READ_ONLY": 2, + "COMPACTION": 3, + "MATER_VIEW_REBUILD": 4, + "SOFT_DELETE": 5, + } + + +class GetTablesExtRequestFields: + ACCESS_TYPE = 1 + PROCESSOR_CAPABILITIES = 2 + ALL = 2147483647 + + _VALUES_TO_NAMES = { + 1: "ACCESS_TYPE", + 2: "PROCESSOR_CAPABILITIES", + 2147483647: "ALL", + } + + _NAMES_TO_VALUES = { + "ACCESS_TYPE": 1, + "PROCESSOR_CAPABILITIES": 2, + "ALL": 2147483647, + } + + +class CompactionMetricsMetricType: + NUM_OBSOLETE_DELTAS = 0 + NUM_DELTAS = 1 + NUM_SMALL_DELTAS = 2 + + _VALUES_TO_NAMES = { + 0: "NUM_OBSOLETE_DELTAS", + 1: "NUM_DELTAS", + 2: "NUM_SMALL_DELTAS", + } + + _NAMES_TO_VALUES = { + "NUM_OBSOLETE_DELTAS": 0, + "NUM_DELTAS": 1, + "NUM_SMALL_DELTAS": 2, + } + + +class FileMetadataExprType: + ORC_SARG = 1 + + _VALUES_TO_NAMES = { + 1: "ORC_SARG", + } + + _NAMES_TO_VALUES = { + "ORC_SARG": 1, + } + + +class ClientCapability: + TEST_CAPABILITY = 1 + INSERT_ONLY_TABLES = 2 + + _VALUES_TO_NAMES = { + 1: "TEST_CAPABILITY", + 2: "INSERT_ONLY_TABLES", + } + + _NAMES_TO_VALUES = { + "TEST_CAPABILITY": 1, + "INSERT_ONLY_TABLES": 2, + } + + +class WMResourcePlanStatus: + ACTIVE = 1 + ENABLED = 2 + DISABLED = 3 + + _VALUES_TO_NAMES = { + 1: "ACTIVE", + 2: "ENABLED", + 3: "DISABLED", + } + + _NAMES_TO_VALUES = { + "ACTIVE": 1, + "ENABLED": 2, + "DISABLED": 3, + } + + +class WMPoolSchedulingPolicy: + FAIR = 1 + FIFO = 2 + + _VALUES_TO_NAMES = { + 1: "FAIR", + 2: "FIFO", + } + + _NAMES_TO_VALUES = { + "FAIR": 1, + "FIFO": 2, + } + + +class ScheduledQueryMaintenanceRequestType: + CREATE = 1 + ALTER = 2 + DROP = 3 + + _VALUES_TO_NAMES = { + 1: "CREATE", + 2: "ALTER", + 3: "DROP", + } + + _NAMES_TO_VALUES = { + "CREATE": 1, + "ALTER": 2, + "DROP": 3, + } + + +class QueryState: + INITED = 0 + EXECUTING = 1 + FAILED = 2 + FINISHED = 3 + TIMED_OUT = 4 + AUTO_DISABLED = 5 + + _VALUES_TO_NAMES = { + 0: "INITED", + 1: "EXECUTING", + 2: "FAILED", + 3: "FINISHED", + 4: "TIMED_OUT", + 5: "AUTO_DISABLED", + } + + _NAMES_TO_VALUES = { + "INITED": 0, + "EXECUTING": 1, + "FAILED": 2, + "FINISHED": 3, + "TIMED_OUT": 4, + "AUTO_DISABLED": 5, + } + + +class PartitionFilterMode: + BY_NAMES = 0 + BY_VALUES = 1 + BY_EXPR = 2 + + _VALUES_TO_NAMES = { + 0: "BY_NAMES", + 1: "BY_VALUES", + 2: "BY_EXPR", + } + + _NAMES_TO_VALUES = { + "BY_NAMES": 0, + "BY_VALUES": 1, + "BY_EXPR": 2, + } + + +class Version: + """ + Attributes: + - version + - comments + + """ + + def __init__( + self, + version=None, + comments=None, + ): + self.version = version + self.comments = comments + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.version = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.comments = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Version") + if self.version is not None: + oprot.writeFieldBegin("version", TType.STRING, 1) + oprot.writeString(self.version.encode("utf-8") if sys.version_info[0] == 2 else self.version) + oprot.writeFieldEnd() + if self.comments is not None: + oprot.writeFieldBegin("comments", TType.STRING, 2) + oprot.writeString(self.comments.encode("utf-8") if sys.version_info[0] == 2 else self.comments) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FieldSchema: + """ + Attributes: + - name + - type + - comment + + """ + + def __init__( + self, + name=None, + type=None, + comment=None, + ): + self.name = name + self.type = type + self.comment = comment + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.type = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.comment = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FieldSchema") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.STRING, 2) + oprot.writeString(self.type.encode("utf-8") if sys.version_info[0] == 2 else self.type) + oprot.writeFieldEnd() + if self.comment is not None: + oprot.writeFieldBegin("comment", TType.STRING, 3) + oprot.writeString(self.comment.encode("utf-8") if sys.version_info[0] == 2 else self.comment) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class EnvironmentContext: + """ + Attributes: + - properties + + """ + + def __init__( + self, + properties=None, + ): + self.properties = properties + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.MAP: + self.properties = {} + (_ktype1, _vtype2, _size0) = iprot.readMapBegin() + for _i4 in range(_size0): + _key5 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val6 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.properties[_key5] = _val6 + iprot.readMapEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("EnvironmentContext") + if self.properties is not None: + oprot.writeFieldBegin("properties", TType.MAP, 1) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.properties)) + for kiter7, viter8 in self.properties.items(): + oprot.writeString(kiter7.encode("utf-8") if sys.version_info[0] == 2 else kiter7) + oprot.writeString(viter8.encode("utf-8") if sys.version_info[0] == 2 else viter8) + oprot.writeMapEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLPrimaryKey: + """ + Attributes: + - table_db + - table_name + - column_name + - key_seq + - pk_name + - enable_cstr + - validate_cstr + - rely_cstr + - catName + + """ + + def __init__( + self, + table_db=None, + table_name=None, + column_name=None, + key_seq=None, + pk_name=None, + enable_cstr=None, + validate_cstr=None, + rely_cstr=None, + catName=None, + ): + self.table_db = table_db + self.table_name = table_name + self.column_name = column_name + self.key_seq = key_seq + self.pk_name = pk_name + self.enable_cstr = enable_cstr + self.validate_cstr = validate_cstr + self.rely_cstr = rely_cstr + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.table_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.table_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.column_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.key_seq = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.pk_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.enable_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.validate_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.rely_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLPrimaryKey") + if self.table_db is not None: + oprot.writeFieldBegin("table_db", TType.STRING, 1) + oprot.writeString(self.table_db.encode("utf-8") if sys.version_info[0] == 2 else self.table_db) + oprot.writeFieldEnd() + if self.table_name is not None: + oprot.writeFieldBegin("table_name", TType.STRING, 2) + oprot.writeString(self.table_name.encode("utf-8") if sys.version_info[0] == 2 else self.table_name) + oprot.writeFieldEnd() + if self.column_name is not None: + oprot.writeFieldBegin("column_name", TType.STRING, 3) + oprot.writeString(self.column_name.encode("utf-8") if sys.version_info[0] == 2 else self.column_name) + oprot.writeFieldEnd() + if self.key_seq is not None: + oprot.writeFieldBegin("key_seq", TType.I32, 4) + oprot.writeI32(self.key_seq) + oprot.writeFieldEnd() + if self.pk_name is not None: + oprot.writeFieldBegin("pk_name", TType.STRING, 5) + oprot.writeString(self.pk_name.encode("utf-8") if sys.version_info[0] == 2 else self.pk_name) + oprot.writeFieldEnd() + if self.enable_cstr is not None: + oprot.writeFieldBegin("enable_cstr", TType.BOOL, 6) + oprot.writeBool(self.enable_cstr) + oprot.writeFieldEnd() + if self.validate_cstr is not None: + oprot.writeFieldBegin("validate_cstr", TType.BOOL, 7) + oprot.writeBool(self.validate_cstr) + oprot.writeFieldEnd() + if self.rely_cstr is not None: + oprot.writeFieldBegin("rely_cstr", TType.BOOL, 8) + oprot.writeBool(self.rely_cstr) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 9) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLForeignKey: + """ + Attributes: + - pktable_db + - pktable_name + - pkcolumn_name + - fktable_db + - fktable_name + - fkcolumn_name + - key_seq + - update_rule + - delete_rule + - fk_name + - pk_name + - enable_cstr + - validate_cstr + - rely_cstr + - catName + + """ + + def __init__( + self, + pktable_db=None, + pktable_name=None, + pkcolumn_name=None, + fktable_db=None, + fktable_name=None, + fkcolumn_name=None, + key_seq=None, + update_rule=None, + delete_rule=None, + fk_name=None, + pk_name=None, + enable_cstr=None, + validate_cstr=None, + rely_cstr=None, + catName=None, + ): + self.pktable_db = pktable_db + self.pktable_name = pktable_name + self.pkcolumn_name = pkcolumn_name + self.fktable_db = fktable_db + self.fktable_name = fktable_name + self.fkcolumn_name = fkcolumn_name + self.key_seq = key_seq + self.update_rule = update_rule + self.delete_rule = delete_rule + self.fk_name = fk_name + self.pk_name = pk_name + self.enable_cstr = enable_cstr + self.validate_cstr = validate_cstr + self.rely_cstr = rely_cstr + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.pktable_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.pktable_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.pkcolumn_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.fktable_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.fktable_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.fkcolumn_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.key_seq = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.I32: + self.update_rule = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I32: + self.delete_rule = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.fk_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.STRING: + self.pk_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.BOOL: + self.enable_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.BOOL: + self.validate_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 14: + if ftype == TType.BOOL: + self.rely_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 15: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLForeignKey") + if self.pktable_db is not None: + oprot.writeFieldBegin("pktable_db", TType.STRING, 1) + oprot.writeString(self.pktable_db.encode("utf-8") if sys.version_info[0] == 2 else self.pktable_db) + oprot.writeFieldEnd() + if self.pktable_name is not None: + oprot.writeFieldBegin("pktable_name", TType.STRING, 2) + oprot.writeString(self.pktable_name.encode("utf-8") if sys.version_info[0] == 2 else self.pktable_name) + oprot.writeFieldEnd() + if self.pkcolumn_name is not None: + oprot.writeFieldBegin("pkcolumn_name", TType.STRING, 3) + oprot.writeString(self.pkcolumn_name.encode("utf-8") if sys.version_info[0] == 2 else self.pkcolumn_name) + oprot.writeFieldEnd() + if self.fktable_db is not None: + oprot.writeFieldBegin("fktable_db", TType.STRING, 4) + oprot.writeString(self.fktable_db.encode("utf-8") if sys.version_info[0] == 2 else self.fktable_db) + oprot.writeFieldEnd() + if self.fktable_name is not None: + oprot.writeFieldBegin("fktable_name", TType.STRING, 5) + oprot.writeString(self.fktable_name.encode("utf-8") if sys.version_info[0] == 2 else self.fktable_name) + oprot.writeFieldEnd() + if self.fkcolumn_name is not None: + oprot.writeFieldBegin("fkcolumn_name", TType.STRING, 6) + oprot.writeString(self.fkcolumn_name.encode("utf-8") if sys.version_info[0] == 2 else self.fkcolumn_name) + oprot.writeFieldEnd() + if self.key_seq is not None: + oprot.writeFieldBegin("key_seq", TType.I32, 7) + oprot.writeI32(self.key_seq) + oprot.writeFieldEnd() + if self.update_rule is not None: + oprot.writeFieldBegin("update_rule", TType.I32, 8) + oprot.writeI32(self.update_rule) + oprot.writeFieldEnd() + if self.delete_rule is not None: + oprot.writeFieldBegin("delete_rule", TType.I32, 9) + oprot.writeI32(self.delete_rule) + oprot.writeFieldEnd() + if self.fk_name is not None: + oprot.writeFieldBegin("fk_name", TType.STRING, 10) + oprot.writeString(self.fk_name.encode("utf-8") if sys.version_info[0] == 2 else self.fk_name) + oprot.writeFieldEnd() + if self.pk_name is not None: + oprot.writeFieldBegin("pk_name", TType.STRING, 11) + oprot.writeString(self.pk_name.encode("utf-8") if sys.version_info[0] == 2 else self.pk_name) + oprot.writeFieldEnd() + if self.enable_cstr is not None: + oprot.writeFieldBegin("enable_cstr", TType.BOOL, 12) + oprot.writeBool(self.enable_cstr) + oprot.writeFieldEnd() + if self.validate_cstr is not None: + oprot.writeFieldBegin("validate_cstr", TType.BOOL, 13) + oprot.writeBool(self.validate_cstr) + oprot.writeFieldEnd() + if self.rely_cstr is not None: + oprot.writeFieldBegin("rely_cstr", TType.BOOL, 14) + oprot.writeBool(self.rely_cstr) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 15) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLUniqueConstraint: + """ + Attributes: + - catName + - table_db + - table_name + - column_name + - key_seq + - uk_name + - enable_cstr + - validate_cstr + - rely_cstr + + """ + + def __init__( + self, + catName=None, + table_db=None, + table_name=None, + column_name=None, + key_seq=None, + uk_name=None, + enable_cstr=None, + validate_cstr=None, + rely_cstr=None, + ): + self.catName = catName + self.table_db = table_db + self.table_name = table_name + self.column_name = column_name + self.key_seq = key_seq + self.uk_name = uk_name + self.enable_cstr = enable_cstr + self.validate_cstr = validate_cstr + self.rely_cstr = rely_cstr + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.table_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.column_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.key_seq = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.uk_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.enable_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.validate_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.BOOL: + self.rely_cstr = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLUniqueConstraint") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.table_db is not None: + oprot.writeFieldBegin("table_db", TType.STRING, 2) + oprot.writeString(self.table_db.encode("utf-8") if sys.version_info[0] == 2 else self.table_db) + oprot.writeFieldEnd() + if self.table_name is not None: + oprot.writeFieldBegin("table_name", TType.STRING, 3) + oprot.writeString(self.table_name.encode("utf-8") if sys.version_info[0] == 2 else self.table_name) + oprot.writeFieldEnd() + if self.column_name is not None: + oprot.writeFieldBegin("column_name", TType.STRING, 4) + oprot.writeString(self.column_name.encode("utf-8") if sys.version_info[0] == 2 else self.column_name) + oprot.writeFieldEnd() + if self.key_seq is not None: + oprot.writeFieldBegin("key_seq", TType.I32, 5) + oprot.writeI32(self.key_seq) + oprot.writeFieldEnd() + if self.uk_name is not None: + oprot.writeFieldBegin("uk_name", TType.STRING, 6) + oprot.writeString(self.uk_name.encode("utf-8") if sys.version_info[0] == 2 else self.uk_name) + oprot.writeFieldEnd() + if self.enable_cstr is not None: + oprot.writeFieldBegin("enable_cstr", TType.BOOL, 7) + oprot.writeBool(self.enable_cstr) + oprot.writeFieldEnd() + if self.validate_cstr is not None: + oprot.writeFieldBegin("validate_cstr", TType.BOOL, 8) + oprot.writeBool(self.validate_cstr) + oprot.writeFieldEnd() + if self.rely_cstr is not None: + oprot.writeFieldBegin("rely_cstr", TType.BOOL, 9) + oprot.writeBool(self.rely_cstr) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLNotNullConstraint: + """ + Attributes: + - catName + - table_db + - table_name + - column_name + - nn_name + - enable_cstr + - validate_cstr + - rely_cstr + + """ + + def __init__( + self, + catName=None, + table_db=None, + table_name=None, + column_name=None, + nn_name=None, + enable_cstr=None, + validate_cstr=None, + rely_cstr=None, + ): + self.catName = catName + self.table_db = table_db + self.table_name = table_name + self.column_name = column_name + self.nn_name = nn_name + self.enable_cstr = enable_cstr + self.validate_cstr = validate_cstr + self.rely_cstr = rely_cstr + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.table_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.column_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.nn_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.enable_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.validate_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.rely_cstr = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLNotNullConstraint") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.table_db is not None: + oprot.writeFieldBegin("table_db", TType.STRING, 2) + oprot.writeString(self.table_db.encode("utf-8") if sys.version_info[0] == 2 else self.table_db) + oprot.writeFieldEnd() + if self.table_name is not None: + oprot.writeFieldBegin("table_name", TType.STRING, 3) + oprot.writeString(self.table_name.encode("utf-8") if sys.version_info[0] == 2 else self.table_name) + oprot.writeFieldEnd() + if self.column_name is not None: + oprot.writeFieldBegin("column_name", TType.STRING, 4) + oprot.writeString(self.column_name.encode("utf-8") if sys.version_info[0] == 2 else self.column_name) + oprot.writeFieldEnd() + if self.nn_name is not None: + oprot.writeFieldBegin("nn_name", TType.STRING, 5) + oprot.writeString(self.nn_name.encode("utf-8") if sys.version_info[0] == 2 else self.nn_name) + oprot.writeFieldEnd() + if self.enable_cstr is not None: + oprot.writeFieldBegin("enable_cstr", TType.BOOL, 6) + oprot.writeBool(self.enable_cstr) + oprot.writeFieldEnd() + if self.validate_cstr is not None: + oprot.writeFieldBegin("validate_cstr", TType.BOOL, 7) + oprot.writeBool(self.validate_cstr) + oprot.writeFieldEnd() + if self.rely_cstr is not None: + oprot.writeFieldBegin("rely_cstr", TType.BOOL, 8) + oprot.writeBool(self.rely_cstr) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLDefaultConstraint: + """ + Attributes: + - catName + - table_db + - table_name + - column_name + - default_value + - dc_name + - enable_cstr + - validate_cstr + - rely_cstr + + """ + + def __init__( + self, + catName=None, + table_db=None, + table_name=None, + column_name=None, + default_value=None, + dc_name=None, + enable_cstr=None, + validate_cstr=None, + rely_cstr=None, + ): + self.catName = catName + self.table_db = table_db + self.table_name = table_name + self.column_name = column_name + self.default_value = default_value + self.dc_name = dc_name + self.enable_cstr = enable_cstr + self.validate_cstr = validate_cstr + self.rely_cstr = rely_cstr + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.table_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.column_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.default_value = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.dc_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.enable_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.validate_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.BOOL: + self.rely_cstr = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLDefaultConstraint") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.table_db is not None: + oprot.writeFieldBegin("table_db", TType.STRING, 2) + oprot.writeString(self.table_db.encode("utf-8") if sys.version_info[0] == 2 else self.table_db) + oprot.writeFieldEnd() + if self.table_name is not None: + oprot.writeFieldBegin("table_name", TType.STRING, 3) + oprot.writeString(self.table_name.encode("utf-8") if sys.version_info[0] == 2 else self.table_name) + oprot.writeFieldEnd() + if self.column_name is not None: + oprot.writeFieldBegin("column_name", TType.STRING, 4) + oprot.writeString(self.column_name.encode("utf-8") if sys.version_info[0] == 2 else self.column_name) + oprot.writeFieldEnd() + if self.default_value is not None: + oprot.writeFieldBegin("default_value", TType.STRING, 5) + oprot.writeString(self.default_value.encode("utf-8") if sys.version_info[0] == 2 else self.default_value) + oprot.writeFieldEnd() + if self.dc_name is not None: + oprot.writeFieldBegin("dc_name", TType.STRING, 6) + oprot.writeString(self.dc_name.encode("utf-8") if sys.version_info[0] == 2 else self.dc_name) + oprot.writeFieldEnd() + if self.enable_cstr is not None: + oprot.writeFieldBegin("enable_cstr", TType.BOOL, 7) + oprot.writeBool(self.enable_cstr) + oprot.writeFieldEnd() + if self.validate_cstr is not None: + oprot.writeFieldBegin("validate_cstr", TType.BOOL, 8) + oprot.writeBool(self.validate_cstr) + oprot.writeFieldEnd() + if self.rely_cstr is not None: + oprot.writeFieldBegin("rely_cstr", TType.BOOL, 9) + oprot.writeBool(self.rely_cstr) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLCheckConstraint: + """ + Attributes: + - catName + - table_db + - table_name + - column_name + - check_expression + - dc_name + - enable_cstr + - validate_cstr + - rely_cstr + + """ + + def __init__( + self, + catName=None, + table_db=None, + table_name=None, + column_name=None, + check_expression=None, + dc_name=None, + enable_cstr=None, + validate_cstr=None, + rely_cstr=None, + ): + self.catName = catName + self.table_db = table_db + self.table_name = table_name + self.column_name = column_name + self.check_expression = check_expression + self.dc_name = dc_name + self.enable_cstr = enable_cstr + self.validate_cstr = validate_cstr + self.rely_cstr = rely_cstr + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.table_db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.column_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.check_expression = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.dc_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.enable_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.validate_cstr = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.BOOL: + self.rely_cstr = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLCheckConstraint") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.table_db is not None: + oprot.writeFieldBegin("table_db", TType.STRING, 2) + oprot.writeString(self.table_db.encode("utf-8") if sys.version_info[0] == 2 else self.table_db) + oprot.writeFieldEnd() + if self.table_name is not None: + oprot.writeFieldBegin("table_name", TType.STRING, 3) + oprot.writeString(self.table_name.encode("utf-8") if sys.version_info[0] == 2 else self.table_name) + oprot.writeFieldEnd() + if self.column_name is not None: + oprot.writeFieldBegin("column_name", TType.STRING, 4) + oprot.writeString(self.column_name.encode("utf-8") if sys.version_info[0] == 2 else self.column_name) + oprot.writeFieldEnd() + if self.check_expression is not None: + oprot.writeFieldBegin("check_expression", TType.STRING, 5) + oprot.writeString(self.check_expression.encode("utf-8") if sys.version_info[0] == 2 else self.check_expression) + oprot.writeFieldEnd() + if self.dc_name is not None: + oprot.writeFieldBegin("dc_name", TType.STRING, 6) + oprot.writeString(self.dc_name.encode("utf-8") if sys.version_info[0] == 2 else self.dc_name) + oprot.writeFieldEnd() + if self.enable_cstr is not None: + oprot.writeFieldBegin("enable_cstr", TType.BOOL, 7) + oprot.writeBool(self.enable_cstr) + oprot.writeFieldEnd() + if self.validate_cstr is not None: + oprot.writeFieldBegin("validate_cstr", TType.BOOL, 8) + oprot.writeBool(self.validate_cstr) + oprot.writeFieldEnd() + if self.rely_cstr is not None: + oprot.writeFieldBegin("rely_cstr", TType.BOOL, 9) + oprot.writeBool(self.rely_cstr) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SQLAllTableConstraints: + """ + Attributes: + - primaryKeys + - foreignKeys + - uniqueConstraints + - notNullConstraints + - defaultConstraints + - checkConstraints + + """ + + def __init__( + self, + primaryKeys=None, + foreignKeys=None, + uniqueConstraints=None, + notNullConstraints=None, + defaultConstraints=None, + checkConstraints=None, + ): + self.primaryKeys = primaryKeys + self.foreignKeys = foreignKeys + self.uniqueConstraints = uniqueConstraints + self.notNullConstraints = notNullConstraints + self.defaultConstraints = defaultConstraints + self.checkConstraints = checkConstraints + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.primaryKeys = [] + (_etype12, _size9) = iprot.readListBegin() + for _i13 in range(_size9): + _elem14 = SQLPrimaryKey() + _elem14.read(iprot) + self.primaryKeys.append(_elem14) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.foreignKeys = [] + (_etype18, _size15) = iprot.readListBegin() + for _i19 in range(_size15): + _elem20 = SQLForeignKey() + _elem20.read(iprot) + self.foreignKeys.append(_elem20) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.uniqueConstraints = [] + (_etype24, _size21) = iprot.readListBegin() + for _i25 in range(_size21): + _elem26 = SQLUniqueConstraint() + _elem26.read(iprot) + self.uniqueConstraints.append(_elem26) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.notNullConstraints = [] + (_etype30, _size27) = iprot.readListBegin() + for _i31 in range(_size27): + _elem32 = SQLNotNullConstraint() + _elem32.read(iprot) + self.notNullConstraints.append(_elem32) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.defaultConstraints = [] + (_etype36, _size33) = iprot.readListBegin() + for _i37 in range(_size33): + _elem38 = SQLDefaultConstraint() + _elem38.read(iprot) + self.defaultConstraints.append(_elem38) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.checkConstraints = [] + (_etype42, _size39) = iprot.readListBegin() + for _i43 in range(_size39): + _elem44 = SQLCheckConstraint() + _elem44.read(iprot) + self.checkConstraints.append(_elem44) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SQLAllTableConstraints") + if self.primaryKeys is not None: + oprot.writeFieldBegin("primaryKeys", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.primaryKeys)) + for iter45 in self.primaryKeys: + iter45.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.foreignKeys is not None: + oprot.writeFieldBegin("foreignKeys", TType.LIST, 2) + oprot.writeListBegin(TType.STRUCT, len(self.foreignKeys)) + for iter46 in self.foreignKeys: + iter46.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.uniqueConstraints is not None: + oprot.writeFieldBegin("uniqueConstraints", TType.LIST, 3) + oprot.writeListBegin(TType.STRUCT, len(self.uniqueConstraints)) + for iter47 in self.uniqueConstraints: + iter47.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.notNullConstraints is not None: + oprot.writeFieldBegin("notNullConstraints", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.notNullConstraints)) + for iter48 in self.notNullConstraints: + iter48.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.defaultConstraints is not None: + oprot.writeFieldBegin("defaultConstraints", TType.LIST, 5) + oprot.writeListBegin(TType.STRUCT, len(self.defaultConstraints)) + for iter49 in self.defaultConstraints: + iter49.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.checkConstraints is not None: + oprot.writeFieldBegin("checkConstraints", TType.LIST, 6) + oprot.writeListBegin(TType.STRUCT, len(self.checkConstraints)) + for iter50 in self.checkConstraints: + iter50.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Type: + """ + Attributes: + - name + - type1 + - type2 + - fields + + """ + + def __init__( + self, + name=None, + type1=None, + type2=None, + fields=None, + ): + self.name = name + self.type1 = type1 + self.type2 = type2 + self.fields = fields + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.type1 = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.type2 = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.fields = [] + (_etype54, _size51) = iprot.readListBegin() + for _i55 in range(_size51): + _elem56 = FieldSchema() + _elem56.read(iprot) + self.fields.append(_elem56) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Type") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.type1 is not None: + oprot.writeFieldBegin("type1", TType.STRING, 2) + oprot.writeString(self.type1.encode("utf-8") if sys.version_info[0] == 2 else self.type1) + oprot.writeFieldEnd() + if self.type2 is not None: + oprot.writeFieldBegin("type2", TType.STRING, 3) + oprot.writeString(self.type2.encode("utf-8") if sys.version_info[0] == 2 else self.type2) + oprot.writeFieldEnd() + if self.fields is not None: + oprot.writeFieldBegin("fields", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.fields)) + for iter57 in self.fields: + iter57.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class HiveObjectRef: + """ + Attributes: + - objectType + - dbName + - objectName + - partValues + - columnName + - catName + + """ + + def __init__( + self, + objectType=None, + dbName=None, + objectName=None, + partValues=None, + columnName=None, + catName=None, + ): + self.objectType = objectType + self.dbName = dbName + self.objectName = objectName + self.partValues = partValues + self.columnName = columnName + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.objectType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.objectName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partValues = [] + (_etype61, _size58) = iprot.readListBegin() + for _i62 in range(_size58): + _elem63 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partValues.append(_elem63) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.columnName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("HiveObjectRef") + if self.objectType is not None: + oprot.writeFieldBegin("objectType", TType.I32, 1) + oprot.writeI32(self.objectType) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.objectName is not None: + oprot.writeFieldBegin("objectName", TType.STRING, 3) + oprot.writeString(self.objectName.encode("utf-8") if sys.version_info[0] == 2 else self.objectName) + oprot.writeFieldEnd() + if self.partValues is not None: + oprot.writeFieldBegin("partValues", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.partValues)) + for iter64 in self.partValues: + oprot.writeString(iter64.encode("utf-8") if sys.version_info[0] == 2 else iter64) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.columnName is not None: + oprot.writeFieldBegin("columnName", TType.STRING, 5) + oprot.writeString(self.columnName.encode("utf-8") if sys.version_info[0] == 2 else self.columnName) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 6) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PrivilegeGrantInfo: + """ + Attributes: + - privilege + - createTime + - grantor + - grantorType + - grantOption + + """ + + def __init__( + self, + privilege=None, + createTime=None, + grantor=None, + grantorType=None, + grantOption=None, + ): + self.privilege = privilege + self.createTime = createTime + self.grantor = grantor + self.grantorType = grantorType + self.grantOption = grantOption + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.privilege = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.grantor = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.grantorType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.grantOption = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PrivilegeGrantInfo") + if self.privilege is not None: + oprot.writeFieldBegin("privilege", TType.STRING, 1) + oprot.writeString(self.privilege.encode("utf-8") if sys.version_info[0] == 2 else self.privilege) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 2) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.grantor is not None: + oprot.writeFieldBegin("grantor", TType.STRING, 3) + oprot.writeString(self.grantor.encode("utf-8") if sys.version_info[0] == 2 else self.grantor) + oprot.writeFieldEnd() + if self.grantorType is not None: + oprot.writeFieldBegin("grantorType", TType.I32, 4) + oprot.writeI32(self.grantorType) + oprot.writeFieldEnd() + if self.grantOption is not None: + oprot.writeFieldBegin("grantOption", TType.BOOL, 5) + oprot.writeBool(self.grantOption) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class HiveObjectPrivilege: + """ + Attributes: + - hiveObject + - principalName + - principalType + - grantInfo + - authorizer + + """ + + def __init__( + self, + hiveObject=None, + principalName=None, + principalType=None, + grantInfo=None, + authorizer=None, + ): + self.hiveObject = hiveObject + self.principalName = principalName + self.principalType = principalType + self.grantInfo = grantInfo + self.authorizer = authorizer + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.hiveObject = HiveObjectRef() + self.hiveObject.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.principalName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.principalType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.grantInfo = PrivilegeGrantInfo() + self.grantInfo.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.authorizer = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("HiveObjectPrivilege") + if self.hiveObject is not None: + oprot.writeFieldBegin("hiveObject", TType.STRUCT, 1) + self.hiveObject.write(oprot) + oprot.writeFieldEnd() + if self.principalName is not None: + oprot.writeFieldBegin("principalName", TType.STRING, 2) + oprot.writeString(self.principalName.encode("utf-8") if sys.version_info[0] == 2 else self.principalName) + oprot.writeFieldEnd() + if self.principalType is not None: + oprot.writeFieldBegin("principalType", TType.I32, 3) + oprot.writeI32(self.principalType) + oprot.writeFieldEnd() + if self.grantInfo is not None: + oprot.writeFieldBegin("grantInfo", TType.STRUCT, 4) + self.grantInfo.write(oprot) + oprot.writeFieldEnd() + if self.authorizer is not None: + oprot.writeFieldBegin("authorizer", TType.STRING, 5) + oprot.writeString(self.authorizer.encode("utf-8") if sys.version_info[0] == 2 else self.authorizer) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PrivilegeBag: + """ + Attributes: + - privileges + + """ + + def __init__( + self, + privileges=None, + ): + self.privileges = privileges + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.privileges = [] + (_etype68, _size65) = iprot.readListBegin() + for _i69 in range(_size65): + _elem70 = HiveObjectPrivilege() + _elem70.read(iprot) + self.privileges.append(_elem70) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PrivilegeBag") + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.privileges)) + for iter71 in self.privileges: + iter71.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PrincipalPrivilegeSet: + """ + Attributes: + - userPrivileges + - groupPrivileges + - rolePrivileges + + """ + + def __init__( + self, + userPrivileges=None, + groupPrivileges=None, + rolePrivileges=None, + ): + self.userPrivileges = userPrivileges + self.groupPrivileges = groupPrivileges + self.rolePrivileges = rolePrivileges + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.MAP: + self.userPrivileges = {} + (_ktype73, _vtype74, _size72) = iprot.readMapBegin() + for _i76 in range(_size72): + _key77 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val78 = [] + (_etype82, _size79) = iprot.readListBegin() + for _i83 in range(_size79): + _elem84 = PrivilegeGrantInfo() + _elem84.read(iprot) + _val78.append(_elem84) + iprot.readListEnd() + self.userPrivileges[_key77] = _val78 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.MAP: + self.groupPrivileges = {} + (_ktype86, _vtype87, _size85) = iprot.readMapBegin() + for _i89 in range(_size85): + _key90 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val91 = [] + (_etype95, _size92) = iprot.readListBegin() + for _i96 in range(_size92): + _elem97 = PrivilegeGrantInfo() + _elem97.read(iprot) + _val91.append(_elem97) + iprot.readListEnd() + self.groupPrivileges[_key90] = _val91 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.MAP: + self.rolePrivileges = {} + (_ktype99, _vtype100, _size98) = iprot.readMapBegin() + for _i102 in range(_size98): + _key103 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val104 = [] + (_etype108, _size105) = iprot.readListBegin() + for _i109 in range(_size105): + _elem110 = PrivilegeGrantInfo() + _elem110.read(iprot) + _val104.append(_elem110) + iprot.readListEnd() + self.rolePrivileges[_key103] = _val104 + iprot.readMapEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PrincipalPrivilegeSet") + if self.userPrivileges is not None: + oprot.writeFieldBegin("userPrivileges", TType.MAP, 1) + oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.userPrivileges)) + for kiter111, viter112 in self.userPrivileges.items(): + oprot.writeString(kiter111.encode("utf-8") if sys.version_info[0] == 2 else kiter111) + oprot.writeListBegin(TType.STRUCT, len(viter112)) + for iter113 in viter112: + iter113.write(oprot) + oprot.writeListEnd() + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.groupPrivileges is not None: + oprot.writeFieldBegin("groupPrivileges", TType.MAP, 2) + oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.groupPrivileges)) + for kiter114, viter115 in self.groupPrivileges.items(): + oprot.writeString(kiter114.encode("utf-8") if sys.version_info[0] == 2 else kiter114) + oprot.writeListBegin(TType.STRUCT, len(viter115)) + for iter116 in viter115: + iter116.write(oprot) + oprot.writeListEnd() + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.rolePrivileges is not None: + oprot.writeFieldBegin("rolePrivileges", TType.MAP, 3) + oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.rolePrivileges)) + for kiter117, viter118 in self.rolePrivileges.items(): + oprot.writeString(kiter117.encode("utf-8") if sys.version_info[0] == 2 else kiter117) + oprot.writeListBegin(TType.STRUCT, len(viter118)) + for iter119 in viter118: + iter119.write(oprot) + oprot.writeListEnd() + oprot.writeMapEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GrantRevokePrivilegeRequest: + """ + Attributes: + - requestType + - privileges + - revokeGrantOption + + """ + + def __init__( + self, + requestType=None, + privileges=None, + revokeGrantOption=None, + ): + self.requestType = requestType + self.privileges = privileges + self.revokeGrantOption = revokeGrantOption + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.requestType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.privileges = PrivilegeBag() + self.privileges.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.revokeGrantOption = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GrantRevokePrivilegeRequest") + if self.requestType is not None: + oprot.writeFieldBegin("requestType", TType.I32, 1) + oprot.writeI32(self.requestType) + oprot.writeFieldEnd() + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.STRUCT, 2) + self.privileges.write(oprot) + oprot.writeFieldEnd() + if self.revokeGrantOption is not None: + oprot.writeFieldBegin("revokeGrantOption", TType.BOOL, 3) + oprot.writeBool(self.revokeGrantOption) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GrantRevokePrivilegeResponse: + """ + Attributes: + - success + + """ + + def __init__( + self, + success=None, + ): + self.success = success + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.success = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GrantRevokePrivilegeResponse") + if self.success is not None: + oprot.writeFieldBegin("success", TType.BOOL, 1) + oprot.writeBool(self.success) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TruncateTableRequest: + """ + Attributes: + - dbName + - tableName + - partNames + - writeId + - validWriteIdList + - environmentContext + + """ + + def __init__( + self, + dbName=None, + tableName=None, + partNames=None, + writeId=-1, + validWriteIdList=None, + environmentContext=None, + ): + self.dbName = dbName + self.tableName = tableName + self.partNames = partNames + self.writeId = writeId + self.validWriteIdList = validWriteIdList + self.environmentContext = environmentContext + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.partNames = [] + (_etype123, _size120) = iprot.readListBegin() + for _i124 in range(_size120): + _elem125 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partNames.append(_elem125) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRUCT: + self.environmentContext = EnvironmentContext() + self.environmentContext.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TruncateTableRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 2) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.partNames is not None: + oprot.writeFieldBegin("partNames", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.partNames)) + for iter126 in self.partNames: + oprot.writeString(iter126.encode("utf-8") if sys.version_info[0] == 2 else iter126) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 4) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 5) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.environmentContext is not None: + oprot.writeFieldBegin("environmentContext", TType.STRUCT, 6) + self.environmentContext.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TruncateTableResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TruncateTableResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Role: + """ + Attributes: + - roleName + - createTime + - ownerName + + """ + + def __init__( + self, + roleName=None, + createTime=None, + ownerName=None, + ): + self.roleName = roleName + self.createTime = createTime + self.ownerName = ownerName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.roleName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Role") + if self.roleName is not None: + oprot.writeFieldBegin("roleName", TType.STRING, 1) + oprot.writeString(self.roleName.encode("utf-8") if sys.version_info[0] == 2 else self.roleName) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 2) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 3) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class RolePrincipalGrant: + """ + Attributes: + - roleName + - principalName + - principalType + - grantOption + - grantTime + - grantorName + - grantorPrincipalType + + """ + + def __init__( + self, + roleName=None, + principalName=None, + principalType=None, + grantOption=None, + grantTime=None, + grantorName=None, + grantorPrincipalType=None, + ): + self.roleName = roleName + self.principalName = principalName + self.principalType = principalType + self.grantOption = grantOption + self.grantTime = grantTime + self.grantorName = grantorName + self.grantorPrincipalType = grantorPrincipalType + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.roleName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.principalName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.principalType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.grantOption = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.grantTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.grantorName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.grantorPrincipalType = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("RolePrincipalGrant") + if self.roleName is not None: + oprot.writeFieldBegin("roleName", TType.STRING, 1) + oprot.writeString(self.roleName.encode("utf-8") if sys.version_info[0] == 2 else self.roleName) + oprot.writeFieldEnd() + if self.principalName is not None: + oprot.writeFieldBegin("principalName", TType.STRING, 2) + oprot.writeString(self.principalName.encode("utf-8") if sys.version_info[0] == 2 else self.principalName) + oprot.writeFieldEnd() + if self.principalType is not None: + oprot.writeFieldBegin("principalType", TType.I32, 3) + oprot.writeI32(self.principalType) + oprot.writeFieldEnd() + if self.grantOption is not None: + oprot.writeFieldBegin("grantOption", TType.BOOL, 4) + oprot.writeBool(self.grantOption) + oprot.writeFieldEnd() + if self.grantTime is not None: + oprot.writeFieldBegin("grantTime", TType.I32, 5) + oprot.writeI32(self.grantTime) + oprot.writeFieldEnd() + if self.grantorName is not None: + oprot.writeFieldBegin("grantorName", TType.STRING, 6) + oprot.writeString(self.grantorName.encode("utf-8") if sys.version_info[0] == 2 else self.grantorName) + oprot.writeFieldEnd() + if self.grantorPrincipalType is not None: + oprot.writeFieldBegin("grantorPrincipalType", TType.I32, 7) + oprot.writeI32(self.grantorPrincipalType) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetRoleGrantsForPrincipalRequest: + """ + Attributes: + - principal_name + - principal_type + + """ + + def __init__( + self, + principal_name=None, + principal_type=None, + ): + self.principal_name = principal_name + self.principal_type = principal_type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.principal_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.principal_type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetRoleGrantsForPrincipalRequest") + if self.principal_name is not None: + oprot.writeFieldBegin("principal_name", TType.STRING, 1) + oprot.writeString(self.principal_name.encode("utf-8") if sys.version_info[0] == 2 else self.principal_name) + oprot.writeFieldEnd() + if self.principal_type is not None: + oprot.writeFieldBegin("principal_type", TType.I32, 2) + oprot.writeI32(self.principal_type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.principal_name is None: + raise TProtocolException(message="Required field principal_name is unset!") + if self.principal_type is None: + raise TProtocolException(message="Required field principal_type is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetRoleGrantsForPrincipalResponse: + """ + Attributes: + - principalGrants + + """ + + def __init__( + self, + principalGrants=None, + ): + self.principalGrants = principalGrants + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.principalGrants = [] + (_etype130, _size127) = iprot.readListBegin() + for _i131 in range(_size127): + _elem132 = RolePrincipalGrant() + _elem132.read(iprot) + self.principalGrants.append(_elem132) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetRoleGrantsForPrincipalResponse") + if self.principalGrants is not None: + oprot.writeFieldBegin("principalGrants", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.principalGrants)) + for iter133 in self.principalGrants: + iter133.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.principalGrants is None: + raise TProtocolException(message="Required field principalGrants is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPrincipalsInRoleRequest: + """ + Attributes: + - roleName + + """ + + def __init__( + self, + roleName=None, + ): + self.roleName = roleName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.roleName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPrincipalsInRoleRequest") + if self.roleName is not None: + oprot.writeFieldBegin("roleName", TType.STRING, 1) + oprot.writeString(self.roleName.encode("utf-8") if sys.version_info[0] == 2 else self.roleName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.roleName is None: + raise TProtocolException(message="Required field roleName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPrincipalsInRoleResponse: + """ + Attributes: + - principalGrants + + """ + + def __init__( + self, + principalGrants=None, + ): + self.principalGrants = principalGrants + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.principalGrants = [] + (_etype137, _size134) = iprot.readListBegin() + for _i138 in range(_size134): + _elem139 = RolePrincipalGrant() + _elem139.read(iprot) + self.principalGrants.append(_elem139) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPrincipalsInRoleResponse") + if self.principalGrants is not None: + oprot.writeFieldBegin("principalGrants", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.principalGrants)) + for iter140 in self.principalGrants: + iter140.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.principalGrants is None: + raise TProtocolException(message="Required field principalGrants is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GrantRevokeRoleRequest: + """ + Attributes: + - requestType + - roleName + - principalName + - principalType + - grantor + - grantorType + - grantOption + + """ + + def __init__( + self, + requestType=None, + roleName=None, + principalName=None, + principalType=None, + grantor=None, + grantorType=None, + grantOption=None, + ): + self.requestType = requestType + self.roleName = roleName + self.principalName = principalName + self.principalType = principalType + self.grantor = grantor + self.grantorType = grantorType + self.grantOption = grantOption + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.requestType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.roleName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.principalName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.principalType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.grantor = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.grantorType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.grantOption = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GrantRevokeRoleRequest") + if self.requestType is not None: + oprot.writeFieldBegin("requestType", TType.I32, 1) + oprot.writeI32(self.requestType) + oprot.writeFieldEnd() + if self.roleName is not None: + oprot.writeFieldBegin("roleName", TType.STRING, 2) + oprot.writeString(self.roleName.encode("utf-8") if sys.version_info[0] == 2 else self.roleName) + oprot.writeFieldEnd() + if self.principalName is not None: + oprot.writeFieldBegin("principalName", TType.STRING, 3) + oprot.writeString(self.principalName.encode("utf-8") if sys.version_info[0] == 2 else self.principalName) + oprot.writeFieldEnd() + if self.principalType is not None: + oprot.writeFieldBegin("principalType", TType.I32, 4) + oprot.writeI32(self.principalType) + oprot.writeFieldEnd() + if self.grantor is not None: + oprot.writeFieldBegin("grantor", TType.STRING, 5) + oprot.writeString(self.grantor.encode("utf-8") if sys.version_info[0] == 2 else self.grantor) + oprot.writeFieldEnd() + if self.grantorType is not None: + oprot.writeFieldBegin("grantorType", TType.I32, 6) + oprot.writeI32(self.grantorType) + oprot.writeFieldEnd() + if self.grantOption is not None: + oprot.writeFieldBegin("grantOption", TType.BOOL, 7) + oprot.writeBool(self.grantOption) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GrantRevokeRoleResponse: + """ + Attributes: + - success + + """ + + def __init__( + self, + success=None, + ): + self.success = success + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.success = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GrantRevokeRoleResponse") + if self.success is not None: + oprot.writeFieldBegin("success", TType.BOOL, 1) + oprot.writeBool(self.success) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Catalog: + """ + Attributes: + - name + - description + - locationUri + - createTime + + """ + + def __init__( + self, + name=None, + description=None, + locationUri=None, + createTime=None, + ): + self.name = name + self.description = description + self.locationUri = locationUri + self.createTime = createTime + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.locationUri = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Catalog") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 2) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + if self.locationUri is not None: + oprot.writeFieldBegin("locationUri", TType.STRING, 3) + oprot.writeString(self.locationUri.encode("utf-8") if sys.version_info[0] == 2 else self.locationUri) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 4) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CreateCatalogRequest: + """ + Attributes: + - catalog + + """ + + def __init__( + self, + catalog=None, + ): + self.catalog = catalog + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.catalog = Catalog() + self.catalog.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CreateCatalogRequest") + if self.catalog is not None: + oprot.writeFieldBegin("catalog", TType.STRUCT, 1) + self.catalog.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlterCatalogRequest: + """ + Attributes: + - name + - newCat + + """ + + def __init__( + self, + name=None, + newCat=None, + ): + self.name = name + self.newCat = newCat + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.newCat = Catalog() + self.newCat.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlterCatalogRequest") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.newCat is not None: + oprot.writeFieldBegin("newCat", TType.STRUCT, 2) + self.newCat.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetCatalogRequest: + """ + Attributes: + - name + + """ + + def __init__( + self, + name=None, + ): + self.name = name + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetCatalogRequest") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetCatalogResponse: + """ + Attributes: + - catalog + + """ + + def __init__( + self, + catalog=None, + ): + self.catalog = catalog + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.catalog = Catalog() + self.catalog.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetCatalogResponse") + if self.catalog is not None: + oprot.writeFieldBegin("catalog", TType.STRUCT, 1) + self.catalog.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetCatalogsResponse: + """ + Attributes: + - names + + """ + + def __init__( + self, + names=None, + ): + self.names = names + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.names = [] + (_etype144, _size141) = iprot.readListBegin() + for _i145 in range(_size141): + _elem146 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.names.append(_elem146) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetCatalogsResponse") + if self.names is not None: + oprot.writeFieldBegin("names", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.names)) + for iter147 in self.names: + oprot.writeString(iter147.encode("utf-8") if sys.version_info[0] == 2 else iter147) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropCatalogRequest: + """ + Attributes: + - name + + """ + + def __init__( + self, + name=None, + ): + self.name = name + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropCatalogRequest") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Database: + """ + Attributes: + - name + - description + - locationUri + - parameters + - privileges + - ownerName + - ownerType + - catalogName + - createTime + - managedLocationUri + - type + - connector_name + - remote_dbname + + """ + + def __init__( + self, + name=None, + description=None, + locationUri=None, + parameters=None, + privileges=None, + ownerName=None, + ownerType=None, + catalogName=None, + createTime=None, + managedLocationUri=None, + type=None, + connector_name=None, + remote_dbname=None, + ): + self.name = name + self.description = description + self.locationUri = locationUri + self.parameters = parameters + self.privileges = privileges + self.ownerName = ownerName + self.ownerType = ownerType + self.catalogName = catalogName + self.createTime = createTime + self.managedLocationUri = managedLocationUri + self.type = type + self.connector_name = connector_name + self.remote_dbname = remote_dbname + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.locationUri = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.MAP: + self.parameters = {} + (_ktype149, _vtype150, _size148) = iprot.readMapBegin() + for _i152 in range(_size148): + _key153 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val154 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key153] = _val154 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.privileges = PrincipalPrivilegeSet() + self.privileges.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.ownerType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.catalogName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.managedLocationUri = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.STRING: + self.connector_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.STRING: + self.remote_dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Database") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 2) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + if self.locationUri is not None: + oprot.writeFieldBegin("locationUri", TType.STRING, 3) + oprot.writeString(self.locationUri.encode("utf-8") if sys.version_info[0] == 2 else self.locationUri) + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 4) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter155, viter156 in self.parameters.items(): + oprot.writeString(kiter155.encode("utf-8") if sys.version_info[0] == 2 else kiter155) + oprot.writeString(viter156.encode("utf-8") if sys.version_info[0] == 2 else viter156) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.STRUCT, 5) + self.privileges.write(oprot) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 6) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.ownerType is not None: + oprot.writeFieldBegin("ownerType", TType.I32, 7) + oprot.writeI32(self.ownerType) + oprot.writeFieldEnd() + if self.catalogName is not None: + oprot.writeFieldBegin("catalogName", TType.STRING, 8) + oprot.writeString(self.catalogName.encode("utf-8") if sys.version_info[0] == 2 else self.catalogName) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 9) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.managedLocationUri is not None: + oprot.writeFieldBegin("managedLocationUri", TType.STRING, 10) + oprot.writeString(self.managedLocationUri.encode("utf-8") if sys.version_info[0] == 2 else self.managedLocationUri) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 11) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.connector_name is not None: + oprot.writeFieldBegin("connector_name", TType.STRING, 12) + oprot.writeString(self.connector_name.encode("utf-8") if sys.version_info[0] == 2 else self.connector_name) + oprot.writeFieldEnd() + if self.remote_dbname is not None: + oprot.writeFieldBegin("remote_dbname", TType.STRING, 13) + oprot.writeString(self.remote_dbname.encode("utf-8") if sys.version_info[0] == 2 else self.remote_dbname) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SerDeInfo: + """ + Attributes: + - name + - serializationLib + - parameters + - description + - serializerClass + - deserializerClass + - serdeType + + """ + + def __init__( + self, + name=None, + serializationLib=None, + parameters=None, + description=None, + serializerClass=None, + deserializerClass=None, + serdeType=None, + ): + self.name = name + self.serializationLib = serializationLib + self.parameters = parameters + self.description = description + self.serializerClass = serializerClass + self.deserializerClass = deserializerClass + self.serdeType = serdeType + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.serializationLib = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.MAP: + self.parameters = {} + (_ktype158, _vtype159, _size157) = iprot.readMapBegin() + for _i161 in range(_size157): + _key162 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val163 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key162] = _val163 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.serializerClass = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.deserializerClass = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.serdeType = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SerDeInfo") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.serializationLib is not None: + oprot.writeFieldBegin("serializationLib", TType.STRING, 2) + oprot.writeString(self.serializationLib.encode("utf-8") if sys.version_info[0] == 2 else self.serializationLib) + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 3) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter164, viter165 in self.parameters.items(): + oprot.writeString(kiter164.encode("utf-8") if sys.version_info[0] == 2 else kiter164) + oprot.writeString(viter165.encode("utf-8") if sys.version_info[0] == 2 else viter165) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 4) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + if self.serializerClass is not None: + oprot.writeFieldBegin("serializerClass", TType.STRING, 5) + oprot.writeString(self.serializerClass.encode("utf-8") if sys.version_info[0] == 2 else self.serializerClass) + oprot.writeFieldEnd() + if self.deserializerClass is not None: + oprot.writeFieldBegin("deserializerClass", TType.STRING, 6) + oprot.writeString(self.deserializerClass.encode("utf-8") if sys.version_info[0] == 2 else self.deserializerClass) + oprot.writeFieldEnd() + if self.serdeType is not None: + oprot.writeFieldBegin("serdeType", TType.I32, 7) + oprot.writeI32(self.serdeType) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Order: + """ + Attributes: + - col + - order + + """ + + def __init__( + self, + col=None, + order=None, + ): + self.col = col + self.order = order + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.col = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.order = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Order") + if self.col is not None: + oprot.writeFieldBegin("col", TType.STRING, 1) + oprot.writeString(self.col.encode("utf-8") if sys.version_info[0] == 2 else self.col) + oprot.writeFieldEnd() + if self.order is not None: + oprot.writeFieldBegin("order", TType.I32, 2) + oprot.writeI32(self.order) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SkewedInfo: + """ + Attributes: + - skewedColNames + - skewedColValues + - skewedColValueLocationMaps + + """ + + def __init__( + self, + skewedColNames=None, + skewedColValues=None, + skewedColValueLocationMaps=None, + ): + self.skewedColNames = skewedColNames + self.skewedColValues = skewedColValues + self.skewedColValueLocationMaps = skewedColValueLocationMaps + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.skewedColNames = [] + (_etype169, _size166) = iprot.readListBegin() + for _i170 in range(_size166): + _elem171 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.skewedColNames.append(_elem171) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.skewedColValues = [] + (_etype175, _size172) = iprot.readListBegin() + for _i176 in range(_size172): + _elem177 = [] + (_etype181, _size178) = iprot.readListBegin() + for _i182 in range(_size178): + _elem183 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _elem177.append(_elem183) + iprot.readListEnd() + self.skewedColValues.append(_elem177) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.MAP: + self.skewedColValueLocationMaps = {} + (_ktype185, _vtype186, _size184) = iprot.readMapBegin() + for _i188 in range(_size184): + _key189 = [] + (_etype194, _size191) = iprot.readListBegin() + for _i195 in range(_size191): + _elem196 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _key189.append(_elem196) + iprot.readListEnd() + _val190 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.skewedColValueLocationMaps[_key189] = _val190 + iprot.readMapEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SkewedInfo") + if self.skewedColNames is not None: + oprot.writeFieldBegin("skewedColNames", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.skewedColNames)) + for iter197 in self.skewedColNames: + oprot.writeString(iter197.encode("utf-8") if sys.version_info[0] == 2 else iter197) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.skewedColValues is not None: + oprot.writeFieldBegin("skewedColValues", TType.LIST, 2) + oprot.writeListBegin(TType.LIST, len(self.skewedColValues)) + for iter198 in self.skewedColValues: + oprot.writeListBegin(TType.STRING, len(iter198)) + for iter199 in iter198: + oprot.writeString(iter199.encode("utf-8") if sys.version_info[0] == 2 else iter199) + oprot.writeListEnd() + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.skewedColValueLocationMaps is not None: + oprot.writeFieldBegin("skewedColValueLocationMaps", TType.MAP, 3) + oprot.writeMapBegin(TType.LIST, TType.STRING, len(self.skewedColValueLocationMaps)) + for kiter200, viter201 in self.skewedColValueLocationMaps.items(): + oprot.writeListBegin(TType.STRING, len(kiter200)) + for iter202 in kiter200: + oprot.writeString(iter202.encode("utf-8") if sys.version_info[0] == 2 else iter202) + oprot.writeListEnd() + oprot.writeString(viter201.encode("utf-8") if sys.version_info[0] == 2 else viter201) + oprot.writeMapEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class StorageDescriptor: + """ + Attributes: + - cols + - location + - inputFormat + - outputFormat + - compressed + - numBuckets + - serdeInfo + - bucketCols + - sortCols + - parameters + - skewedInfo + - storedAsSubDirectories + + """ + + def __init__( + self, + cols=None, + location=None, + inputFormat=None, + outputFormat=None, + compressed=None, + numBuckets=None, + serdeInfo=None, + bucketCols=None, + sortCols=None, + parameters=None, + skewedInfo=None, + storedAsSubDirectories=None, + ): + self.cols = cols + self.location = location + self.inputFormat = inputFormat + self.outputFormat = outputFormat + self.compressed = compressed + self.numBuckets = numBuckets + self.serdeInfo = serdeInfo + self.bucketCols = bucketCols + self.sortCols = sortCols + self.parameters = parameters + self.skewedInfo = skewedInfo + self.storedAsSubDirectories = storedAsSubDirectories + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.cols = [] + (_etype206, _size203) = iprot.readListBegin() + for _i207 in range(_size203): + _elem208 = FieldSchema() + _elem208.read(iprot) + self.cols.append(_elem208) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.location = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.inputFormat = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.outputFormat = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.compressed = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.numBuckets = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRUCT: + self.serdeInfo = SerDeInfo() + self.serdeInfo.read(iprot) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.bucketCols = [] + (_etype212, _size209) = iprot.readListBegin() + for _i213 in range(_size209): + _elem214 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.bucketCols.append(_elem214) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.LIST: + self.sortCols = [] + (_etype218, _size215) = iprot.readListBegin() + for _i219 in range(_size215): + _elem220 = Order() + _elem220.read(iprot) + self.sortCols.append(_elem220) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.MAP: + self.parameters = {} + (_ktype222, _vtype223, _size221) = iprot.readMapBegin() + for _i225 in range(_size221): + _key226 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val227 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key226] = _val227 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.STRUCT: + self.skewedInfo = SkewedInfo() + self.skewedInfo.read(iprot) + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.BOOL: + self.storedAsSubDirectories = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("StorageDescriptor") + if self.cols is not None: + oprot.writeFieldBegin("cols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.cols)) + for iter228 in self.cols: + iter228.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.location is not None: + oprot.writeFieldBegin("location", TType.STRING, 2) + oprot.writeString(self.location.encode("utf-8") if sys.version_info[0] == 2 else self.location) + oprot.writeFieldEnd() + if self.inputFormat is not None: + oprot.writeFieldBegin("inputFormat", TType.STRING, 3) + oprot.writeString(self.inputFormat.encode("utf-8") if sys.version_info[0] == 2 else self.inputFormat) + oprot.writeFieldEnd() + if self.outputFormat is not None: + oprot.writeFieldBegin("outputFormat", TType.STRING, 4) + oprot.writeString(self.outputFormat.encode("utf-8") if sys.version_info[0] == 2 else self.outputFormat) + oprot.writeFieldEnd() + if self.compressed is not None: + oprot.writeFieldBegin("compressed", TType.BOOL, 5) + oprot.writeBool(self.compressed) + oprot.writeFieldEnd() + if self.numBuckets is not None: + oprot.writeFieldBegin("numBuckets", TType.I32, 6) + oprot.writeI32(self.numBuckets) + oprot.writeFieldEnd() + if self.serdeInfo is not None: + oprot.writeFieldBegin("serdeInfo", TType.STRUCT, 7) + self.serdeInfo.write(oprot) + oprot.writeFieldEnd() + if self.bucketCols is not None: + oprot.writeFieldBegin("bucketCols", TType.LIST, 8) + oprot.writeListBegin(TType.STRING, len(self.bucketCols)) + for iter229 in self.bucketCols: + oprot.writeString(iter229.encode("utf-8") if sys.version_info[0] == 2 else iter229) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.sortCols is not None: + oprot.writeFieldBegin("sortCols", TType.LIST, 9) + oprot.writeListBegin(TType.STRUCT, len(self.sortCols)) + for iter230 in self.sortCols: + iter230.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 10) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter231, viter232 in self.parameters.items(): + oprot.writeString(kiter231.encode("utf-8") if sys.version_info[0] == 2 else kiter231) + oprot.writeString(viter232.encode("utf-8") if sys.version_info[0] == 2 else viter232) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.skewedInfo is not None: + oprot.writeFieldBegin("skewedInfo", TType.STRUCT, 11) + self.skewedInfo.write(oprot) + oprot.writeFieldEnd() + if self.storedAsSubDirectories is not None: + oprot.writeFieldBegin("storedAsSubDirectories", TType.BOOL, 12) + oprot.writeBool(self.storedAsSubDirectories) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CreationMetadata: + """ + Attributes: + - catName + - dbName + - tblName + - tablesUsed + - validTxnList + - materializationTime + - sourceTables + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + tablesUsed=None, + validTxnList=None, + materializationTime=None, + sourceTables=None, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.tablesUsed = tablesUsed + self.validTxnList = validTxnList + self.materializationTime = materializationTime + self.sourceTables = sourceTables + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.SET: + self.tablesUsed = set() + (_etype236, _size233) = iprot.readSetBegin() + for _i237 in range(_size233): + _elem238 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.tablesUsed.add(_elem238) + iprot.readSetEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validTxnList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.materializationTime = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.LIST: + self.sourceTables = [] + (_etype242, _size239) = iprot.readListBegin() + for _i243 in range(_size239): + _elem244 = SourceTable() + _elem244.read(iprot) + self.sourceTables.append(_elem244) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CreationMetadata") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.tablesUsed is not None: + oprot.writeFieldBegin("tablesUsed", TType.SET, 4) + oprot.writeSetBegin(TType.STRING, len(self.tablesUsed)) + for iter245 in self.tablesUsed: + oprot.writeString(iter245.encode("utf-8") if sys.version_info[0] == 2 else iter245) + oprot.writeSetEnd() + oprot.writeFieldEnd() + if self.validTxnList is not None: + oprot.writeFieldBegin("validTxnList", TType.STRING, 5) + oprot.writeString(self.validTxnList.encode("utf-8") if sys.version_info[0] == 2 else self.validTxnList) + oprot.writeFieldEnd() + if self.materializationTime is not None: + oprot.writeFieldBegin("materializationTime", TType.I64, 6) + oprot.writeI64(self.materializationTime) + oprot.writeFieldEnd() + if self.sourceTables is not None: + oprot.writeFieldBegin("sourceTables", TType.LIST, 7) + oprot.writeListBegin(TType.STRUCT, len(self.sourceTables)) + for iter246 in self.sourceTables: + iter246.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.tablesUsed is None: + raise TProtocolException(message="Required field tablesUsed is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class BooleanColumnStatsData: + """ + Attributes: + - numTrues + - numFalses + - numNulls + - bitVectors + + """ + + def __init__( + self, + numTrues=None, + numFalses=None, + numNulls=None, + bitVectors=None, + ): + self.numTrues = numTrues + self.numFalses = numFalses + self.numNulls = numNulls + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.numTrues = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.numFalses = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("BooleanColumnStatsData") + if self.numTrues is not None: + oprot.writeFieldBegin("numTrues", TType.I64, 1) + oprot.writeI64(self.numTrues) + oprot.writeFieldEnd() + if self.numFalses is not None: + oprot.writeFieldBegin("numFalses", TType.I64, 2) + oprot.writeI64(self.numFalses) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 4) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.numTrues is None: + raise TProtocolException(message="Required field numTrues is unset!") + if self.numFalses is None: + raise TProtocolException(message="Required field numFalses is unset!") + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DoubleColumnStatsData: + """ + Attributes: + - lowValue + - highValue + - numNulls + - numDVs + - bitVectors + + """ + + def __init__( + self, + lowValue=None, + highValue=None, + numNulls=None, + numDVs=None, + bitVectors=None, + ): + self.lowValue = lowValue + self.highValue = highValue + self.numNulls = numNulls + self.numDVs = numDVs + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.DOUBLE: + self.lowValue = iprot.readDouble() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.DOUBLE: + self.highValue = iprot.readDouble() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.numDVs = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DoubleColumnStatsData") + if self.lowValue is not None: + oprot.writeFieldBegin("lowValue", TType.DOUBLE, 1) + oprot.writeDouble(self.lowValue) + oprot.writeFieldEnd() + if self.highValue is not None: + oprot.writeFieldBegin("highValue", TType.DOUBLE, 2) + oprot.writeDouble(self.highValue) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.numDVs is not None: + oprot.writeFieldBegin("numDVs", TType.I64, 4) + oprot.writeI64(self.numDVs) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 5) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + if self.numDVs is None: + raise TProtocolException(message="Required field numDVs is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class LongColumnStatsData: + """ + Attributes: + - lowValue + - highValue + - numNulls + - numDVs + - bitVectors + + """ + + def __init__( + self, + lowValue=None, + highValue=None, + numNulls=None, + numDVs=None, + bitVectors=None, + ): + self.lowValue = lowValue + self.highValue = highValue + self.numNulls = numNulls + self.numDVs = numDVs + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lowValue = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.highValue = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.numDVs = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("LongColumnStatsData") + if self.lowValue is not None: + oprot.writeFieldBegin("lowValue", TType.I64, 1) + oprot.writeI64(self.lowValue) + oprot.writeFieldEnd() + if self.highValue is not None: + oprot.writeFieldBegin("highValue", TType.I64, 2) + oprot.writeI64(self.highValue) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.numDVs is not None: + oprot.writeFieldBegin("numDVs", TType.I64, 4) + oprot.writeI64(self.numDVs) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 5) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + if self.numDVs is None: + raise TProtocolException(message="Required field numDVs is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class StringColumnStatsData: + """ + Attributes: + - maxColLen + - avgColLen + - numNulls + - numDVs + - bitVectors + + """ + + def __init__( + self, + maxColLen=None, + avgColLen=None, + numNulls=None, + numDVs=None, + bitVectors=None, + ): + self.maxColLen = maxColLen + self.avgColLen = avgColLen + self.numNulls = numNulls + self.numDVs = numDVs + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.maxColLen = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.DOUBLE: + self.avgColLen = iprot.readDouble() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.numDVs = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("StringColumnStatsData") + if self.maxColLen is not None: + oprot.writeFieldBegin("maxColLen", TType.I64, 1) + oprot.writeI64(self.maxColLen) + oprot.writeFieldEnd() + if self.avgColLen is not None: + oprot.writeFieldBegin("avgColLen", TType.DOUBLE, 2) + oprot.writeDouble(self.avgColLen) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.numDVs is not None: + oprot.writeFieldBegin("numDVs", TType.I64, 4) + oprot.writeI64(self.numDVs) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 5) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.maxColLen is None: + raise TProtocolException(message="Required field maxColLen is unset!") + if self.avgColLen is None: + raise TProtocolException(message="Required field avgColLen is unset!") + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + if self.numDVs is None: + raise TProtocolException(message="Required field numDVs is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class BinaryColumnStatsData: + """ + Attributes: + - maxColLen + - avgColLen + - numNulls + - bitVectors + + """ + + def __init__( + self, + maxColLen=None, + avgColLen=None, + numNulls=None, + bitVectors=None, + ): + self.maxColLen = maxColLen + self.avgColLen = avgColLen + self.numNulls = numNulls + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.maxColLen = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.DOUBLE: + self.avgColLen = iprot.readDouble() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("BinaryColumnStatsData") + if self.maxColLen is not None: + oprot.writeFieldBegin("maxColLen", TType.I64, 1) + oprot.writeI64(self.maxColLen) + oprot.writeFieldEnd() + if self.avgColLen is not None: + oprot.writeFieldBegin("avgColLen", TType.DOUBLE, 2) + oprot.writeDouble(self.avgColLen) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 4) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.maxColLen is None: + raise TProtocolException(message="Required field maxColLen is unset!") + if self.avgColLen is None: + raise TProtocolException(message="Required field avgColLen is unset!") + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Decimal: + """ + Attributes: + - scale + - unscaled + + """ + + def __init__( + self, + scale=None, + unscaled=None, + ): + self.scale = scale + self.unscaled = unscaled + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 3: + if ftype == TType.I16: + self.scale = iprot.readI16() + else: + iprot.skip(ftype) + elif fid == 1: + if ftype == TType.STRING: + self.unscaled = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Decimal") + if self.unscaled is not None: + oprot.writeFieldBegin("unscaled", TType.STRING, 1) + oprot.writeBinary(self.unscaled) + oprot.writeFieldEnd() + if self.scale is not None: + oprot.writeFieldBegin("scale", TType.I16, 3) + oprot.writeI16(self.scale) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.scale is None: + raise TProtocolException(message="Required field scale is unset!") + if self.unscaled is None: + raise TProtocolException(message="Required field unscaled is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DecimalColumnStatsData: + """ + Attributes: + - lowValue + - highValue + - numNulls + - numDVs + - bitVectors + + """ + + def __init__( + self, + lowValue=None, + highValue=None, + numNulls=None, + numDVs=None, + bitVectors=None, + ): + self.lowValue = lowValue + self.highValue = highValue + self.numNulls = numNulls + self.numDVs = numDVs + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.lowValue = Decimal() + self.lowValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.highValue = Decimal() + self.highValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.numDVs = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DecimalColumnStatsData") + if self.lowValue is not None: + oprot.writeFieldBegin("lowValue", TType.STRUCT, 1) + self.lowValue.write(oprot) + oprot.writeFieldEnd() + if self.highValue is not None: + oprot.writeFieldBegin("highValue", TType.STRUCT, 2) + self.highValue.write(oprot) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.numDVs is not None: + oprot.writeFieldBegin("numDVs", TType.I64, 4) + oprot.writeI64(self.numDVs) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 5) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + if self.numDVs is None: + raise TProtocolException(message="Required field numDVs is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Date: + """ + Attributes: + - daysSinceEpoch + + """ + + def __init__( + self, + daysSinceEpoch=None, + ): + self.daysSinceEpoch = daysSinceEpoch + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.daysSinceEpoch = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Date") + if self.daysSinceEpoch is not None: + oprot.writeFieldBegin("daysSinceEpoch", TType.I64, 1) + oprot.writeI64(self.daysSinceEpoch) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.daysSinceEpoch is None: + raise TProtocolException(message="Required field daysSinceEpoch is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DateColumnStatsData: + """ + Attributes: + - lowValue + - highValue + - numNulls + - numDVs + - bitVectors + + """ + + def __init__( + self, + lowValue=None, + highValue=None, + numNulls=None, + numDVs=None, + bitVectors=None, + ): + self.lowValue = lowValue + self.highValue = highValue + self.numNulls = numNulls + self.numDVs = numDVs + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.lowValue = Date() + self.lowValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.highValue = Date() + self.highValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.numDVs = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DateColumnStatsData") + if self.lowValue is not None: + oprot.writeFieldBegin("lowValue", TType.STRUCT, 1) + self.lowValue.write(oprot) + oprot.writeFieldEnd() + if self.highValue is not None: + oprot.writeFieldBegin("highValue", TType.STRUCT, 2) + self.highValue.write(oprot) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.numDVs is not None: + oprot.writeFieldBegin("numDVs", TType.I64, 4) + oprot.writeI64(self.numDVs) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 5) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + if self.numDVs is None: + raise TProtocolException(message="Required field numDVs is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Timestamp: + """ + Attributes: + - secondsSinceEpoch + + """ + + def __init__( + self, + secondsSinceEpoch=None, + ): + self.secondsSinceEpoch = secondsSinceEpoch + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.secondsSinceEpoch = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Timestamp") + if self.secondsSinceEpoch is not None: + oprot.writeFieldBegin("secondsSinceEpoch", TType.I64, 1) + oprot.writeI64(self.secondsSinceEpoch) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.secondsSinceEpoch is None: + raise TProtocolException(message="Required field secondsSinceEpoch is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TimestampColumnStatsData: + """ + Attributes: + - lowValue + - highValue + - numNulls + - numDVs + - bitVectors + + """ + + def __init__( + self, + lowValue=None, + highValue=None, + numNulls=None, + numDVs=None, + bitVectors=None, + ): + self.lowValue = lowValue + self.highValue = highValue + self.numNulls = numNulls + self.numDVs = numDVs + self.bitVectors = bitVectors + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.lowValue = Timestamp() + self.lowValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.highValue = Timestamp() + self.highValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.numNulls = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.numDVs = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.bitVectors = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TimestampColumnStatsData") + if self.lowValue is not None: + oprot.writeFieldBegin("lowValue", TType.STRUCT, 1) + self.lowValue.write(oprot) + oprot.writeFieldEnd() + if self.highValue is not None: + oprot.writeFieldBegin("highValue", TType.STRUCT, 2) + self.highValue.write(oprot) + oprot.writeFieldEnd() + if self.numNulls is not None: + oprot.writeFieldBegin("numNulls", TType.I64, 3) + oprot.writeI64(self.numNulls) + oprot.writeFieldEnd() + if self.numDVs is not None: + oprot.writeFieldBegin("numDVs", TType.I64, 4) + oprot.writeI64(self.numDVs) + oprot.writeFieldEnd() + if self.bitVectors is not None: + oprot.writeFieldBegin("bitVectors", TType.STRING, 5) + oprot.writeBinary(self.bitVectors) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.numNulls is None: + raise TProtocolException(message="Required field numNulls is unset!") + if self.numDVs is None: + raise TProtocolException(message="Required field numDVs is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ColumnStatisticsData: + """ + Attributes: + - booleanStats + - longStats + - doubleStats + - stringStats + - binaryStats + - decimalStats + - dateStats + - timestampStats + + """ + + def __init__( + self, + booleanStats=None, + longStats=None, + doubleStats=None, + stringStats=None, + binaryStats=None, + decimalStats=None, + dateStats=None, + timestampStats=None, + ): + self.booleanStats = booleanStats + self.longStats = longStats + self.doubleStats = doubleStats + self.stringStats = stringStats + self.binaryStats = binaryStats + self.decimalStats = decimalStats + self.dateStats = dateStats + self.timestampStats = timestampStats + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.booleanStats = BooleanColumnStatsData() + self.booleanStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.longStats = LongColumnStatsData() + self.longStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRUCT: + self.doubleStats = DoubleColumnStatsData() + self.doubleStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.stringStats = StringColumnStatsData() + self.stringStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.binaryStats = BinaryColumnStatsData() + self.binaryStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRUCT: + self.decimalStats = DecimalColumnStatsData() + self.decimalStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRUCT: + self.dateStats = DateColumnStatsData() + self.dateStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRUCT: + self.timestampStats = TimestampColumnStatsData() + self.timestampStats.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ColumnStatisticsData") + if self.booleanStats is not None: + oprot.writeFieldBegin("booleanStats", TType.STRUCT, 1) + self.booleanStats.write(oprot) + oprot.writeFieldEnd() + if self.longStats is not None: + oprot.writeFieldBegin("longStats", TType.STRUCT, 2) + self.longStats.write(oprot) + oprot.writeFieldEnd() + if self.doubleStats is not None: + oprot.writeFieldBegin("doubleStats", TType.STRUCT, 3) + self.doubleStats.write(oprot) + oprot.writeFieldEnd() + if self.stringStats is not None: + oprot.writeFieldBegin("stringStats", TType.STRUCT, 4) + self.stringStats.write(oprot) + oprot.writeFieldEnd() + if self.binaryStats is not None: + oprot.writeFieldBegin("binaryStats", TType.STRUCT, 5) + self.binaryStats.write(oprot) + oprot.writeFieldEnd() + if self.decimalStats is not None: + oprot.writeFieldBegin("decimalStats", TType.STRUCT, 6) + self.decimalStats.write(oprot) + oprot.writeFieldEnd() + if self.dateStats is not None: + oprot.writeFieldBegin("dateStats", TType.STRUCT, 7) + self.dateStats.write(oprot) + oprot.writeFieldEnd() + if self.timestampStats is not None: + oprot.writeFieldBegin("timestampStats", TType.STRUCT, 8) + self.timestampStats.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ColumnStatisticsObj: + """ + Attributes: + - colName + - colType + - statsData + + """ + + def __init__( + self, + colName=None, + colType=None, + statsData=None, + ): + self.colName = colName + self.colType = colType + self.statsData = statsData + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.colName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.colType = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRUCT: + self.statsData = ColumnStatisticsData() + self.statsData.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ColumnStatisticsObj") + if self.colName is not None: + oprot.writeFieldBegin("colName", TType.STRING, 1) + oprot.writeString(self.colName.encode("utf-8") if sys.version_info[0] == 2 else self.colName) + oprot.writeFieldEnd() + if self.colType is not None: + oprot.writeFieldBegin("colType", TType.STRING, 2) + oprot.writeString(self.colType.encode("utf-8") if sys.version_info[0] == 2 else self.colType) + oprot.writeFieldEnd() + if self.statsData is not None: + oprot.writeFieldBegin("statsData", TType.STRUCT, 3) + self.statsData.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.colName is None: + raise TProtocolException(message="Required field colName is unset!") + if self.colType is None: + raise TProtocolException(message="Required field colType is unset!") + if self.statsData is None: + raise TProtocolException(message="Required field statsData is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ColumnStatisticsDesc: + """ + Attributes: + - isTblLevel + - dbName + - tableName + - partName + - lastAnalyzed + - catName + + """ + + def __init__( + self, + isTblLevel=None, + dbName=None, + tableName=None, + partName=None, + lastAnalyzed=None, + catName=None, + ): + self.isTblLevel = isTblLevel + self.dbName = dbName + self.tableName = tableName + self.partName = partName + self.lastAnalyzed = lastAnalyzed + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.isTblLevel = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.partName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.lastAnalyzed = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ColumnStatisticsDesc") + if self.isTblLevel is not None: + oprot.writeFieldBegin("isTblLevel", TType.BOOL, 1) + oprot.writeBool(self.isTblLevel) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 3) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.partName is not None: + oprot.writeFieldBegin("partName", TType.STRING, 4) + oprot.writeString(self.partName.encode("utf-8") if sys.version_info[0] == 2 else self.partName) + oprot.writeFieldEnd() + if self.lastAnalyzed is not None: + oprot.writeFieldBegin("lastAnalyzed", TType.I64, 5) + oprot.writeI64(self.lastAnalyzed) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 6) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.isTblLevel is None: + raise TProtocolException(message="Required field isTblLevel is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ColumnStatistics: + """ + Attributes: + - statsDesc + - statsObj + - isStatsCompliant + - engine + + """ + + def __init__( + self, + statsDesc=None, + statsObj=None, + isStatsCompliant=None, + engine=None, + ): + self.statsDesc = statsDesc + self.statsObj = statsObj + self.isStatsCompliant = isStatsCompliant + self.engine = engine + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.statsDesc = ColumnStatisticsDesc() + self.statsDesc.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.statsObj = [] + (_etype250, _size247) = iprot.readListBegin() + for _i251 in range(_size247): + _elem252 = ColumnStatisticsObj() + _elem252.read(iprot) + self.statsObj.append(_elem252) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.engine = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ColumnStatistics") + if self.statsDesc is not None: + oprot.writeFieldBegin("statsDesc", TType.STRUCT, 1) + self.statsDesc.write(oprot) + oprot.writeFieldEnd() + if self.statsObj is not None: + oprot.writeFieldBegin("statsObj", TType.LIST, 2) + oprot.writeListBegin(TType.STRUCT, len(self.statsObj)) + for iter253 in self.statsObj: + iter253.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 3) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + if self.engine is not None: + oprot.writeFieldBegin("engine", TType.STRING, 4) + oprot.writeString(self.engine.encode("utf-8") if sys.version_info[0] == 2 else self.engine) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.statsDesc is None: + raise TProtocolException(message="Required field statsDesc is unset!") + if self.statsObj is None: + raise TProtocolException(message="Required field statsObj is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FileMetadata: + """ + Attributes: + - type + - version + - data + + """ + + def __init__( + self, + type=1, + version=1, + data=None, + ): + self.type = type + self.version = version + self.data = data + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BYTE: + self.type = iprot.readByte() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BYTE: + self.version = iprot.readByte() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.data = [] + (_etype257, _size254) = iprot.readListBegin() + for _i258 in range(_size254): + _elem259 = iprot.readBinary() + self.data.append(_elem259) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FileMetadata") + if self.type is not None: + oprot.writeFieldBegin("type", TType.BYTE, 1) + oprot.writeByte(self.type) + oprot.writeFieldEnd() + if self.version is not None: + oprot.writeFieldBegin("version", TType.BYTE, 2) + oprot.writeByte(self.version) + oprot.writeFieldEnd() + if self.data is not None: + oprot.writeFieldBegin("data", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.data)) + for iter260 in self.data: + oprot.writeBinary(iter260) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ObjectDictionary: + """ + Attributes: + - values + + """ + + def __init__( + self, + values=None, + ): + self.values = values + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.MAP: + self.values = {} + (_ktype262, _vtype263, _size261) = iprot.readMapBegin() + for _i265 in range(_size261): + _key266 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val267 = [] + (_etype271, _size268) = iprot.readListBegin() + for _i272 in range(_size268): + _elem273 = iprot.readBinary() + _val267.append(_elem273) + iprot.readListEnd() + self.values[_key266] = _val267 + iprot.readMapEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ObjectDictionary") + if self.values is not None: + oprot.writeFieldBegin("values", TType.MAP, 1) + oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.values)) + for kiter274, viter275 in self.values.items(): + oprot.writeString(kiter274.encode("utf-8") if sys.version_info[0] == 2 else kiter274) + oprot.writeListBegin(TType.STRING, len(viter275)) + for iter276 in viter275: + oprot.writeBinary(iter276) + oprot.writeListEnd() + oprot.writeMapEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.values is None: + raise TProtocolException(message="Required field values is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Table: + """ + Attributes: + - tableName + - dbName + - owner + - createTime + - lastAccessTime + - retention + - sd + - partitionKeys + - parameters + - viewOriginalText + - viewExpandedText + - tableType + - privileges + - temporary + - rewriteEnabled + - creationMetadata + - catName + - ownerType + - writeId + - isStatsCompliant + - colStats + - accessType + - requiredReadCapabilities + - requiredWriteCapabilities + - id + - fileMetadata + - dictionary + - txnId + + """ + + def __init__( + self, + tableName=None, + dbName=None, + owner=None, + createTime=None, + lastAccessTime=None, + retention=None, + sd=None, + partitionKeys=None, + parameters=None, + viewOriginalText=None, + viewExpandedText=None, + tableType=None, + privileges=None, + temporary=False, + rewriteEnabled=None, + creationMetadata=None, + catName=None, + ownerType=1, + writeId=-1, + isStatsCompliant=None, + colStats=None, + accessType=None, + requiredReadCapabilities=None, + requiredWriteCapabilities=None, + id=None, + fileMetadata=None, + dictionary=None, + txnId=None, + ): + self.tableName = tableName + self.dbName = dbName + self.owner = owner + self.createTime = createTime + self.lastAccessTime = lastAccessTime + self.retention = retention + self.sd = sd + self.partitionKeys = partitionKeys + self.parameters = parameters + self.viewOriginalText = viewOriginalText + self.viewExpandedText = viewExpandedText + self.tableType = tableType + self.privileges = privileges + self.temporary = temporary + self.rewriteEnabled = rewriteEnabled + self.creationMetadata = creationMetadata + self.catName = catName + self.ownerType = ownerType + self.writeId = writeId + self.isStatsCompliant = isStatsCompliant + self.colStats = colStats + self.accessType = accessType + self.requiredReadCapabilities = requiredReadCapabilities + self.requiredWriteCapabilities = requiredWriteCapabilities + self.id = id + self.fileMetadata = fileMetadata + self.dictionary = dictionary + self.txnId = txnId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.owner = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.lastAccessTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.retention = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRUCT: + self.sd = StorageDescriptor() + self.sd.read(iprot) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.partitionKeys = [] + (_etype280, _size277) = iprot.readListBegin() + for _i281 in range(_size277): + _elem282 = FieldSchema() + _elem282.read(iprot) + self.partitionKeys.append(_elem282) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.MAP: + self.parameters = {} + (_ktype284, _vtype285, _size283) = iprot.readMapBegin() + for _i287 in range(_size283): + _key288 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val289 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key288] = _val289 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.viewOriginalText = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.STRING: + self.viewExpandedText = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.STRING: + self.tableType = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.STRUCT: + self.privileges = PrincipalPrivilegeSet() + self.privileges.read(iprot) + else: + iprot.skip(ftype) + elif fid == 14: + if ftype == TType.BOOL: + self.temporary = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 15: + if ftype == TType.BOOL: + self.rewriteEnabled = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 16: + if ftype == TType.STRUCT: + self.creationMetadata = CreationMetadata() + self.creationMetadata.read(iprot) + else: + iprot.skip(ftype) + elif fid == 17: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 18: + if ftype == TType.I32: + self.ownerType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 19: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 20: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 21: + if ftype == TType.STRUCT: + self.colStats = ColumnStatistics() + self.colStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 22: + if ftype == TType.BYTE: + self.accessType = iprot.readByte() + else: + iprot.skip(ftype) + elif fid == 23: + if ftype == TType.LIST: + self.requiredReadCapabilities = [] + (_etype293, _size290) = iprot.readListBegin() + for _i294 in range(_size290): + _elem295 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.requiredReadCapabilities.append(_elem295) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 24: + if ftype == TType.LIST: + self.requiredWriteCapabilities = [] + (_etype299, _size296) = iprot.readListBegin() + for _i300 in range(_size296): + _elem301 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.requiredWriteCapabilities.append(_elem301) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 25: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 26: + if ftype == TType.STRUCT: + self.fileMetadata = FileMetadata() + self.fileMetadata.read(iprot) + else: + iprot.skip(ftype) + elif fid == 27: + if ftype == TType.STRUCT: + self.dictionary = ObjectDictionary() + self.dictionary.read(iprot) + else: + iprot.skip(ftype) + elif fid == 28: + if ftype == TType.I64: + self.txnId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Table") + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 1) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.owner is not None: + oprot.writeFieldBegin("owner", TType.STRING, 3) + oprot.writeString(self.owner.encode("utf-8") if sys.version_info[0] == 2 else self.owner) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 4) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.lastAccessTime is not None: + oprot.writeFieldBegin("lastAccessTime", TType.I32, 5) + oprot.writeI32(self.lastAccessTime) + oprot.writeFieldEnd() + if self.retention is not None: + oprot.writeFieldBegin("retention", TType.I32, 6) + oprot.writeI32(self.retention) + oprot.writeFieldEnd() + if self.sd is not None: + oprot.writeFieldBegin("sd", TType.STRUCT, 7) + self.sd.write(oprot) + oprot.writeFieldEnd() + if self.partitionKeys is not None: + oprot.writeFieldBegin("partitionKeys", TType.LIST, 8) + oprot.writeListBegin(TType.STRUCT, len(self.partitionKeys)) + for iter302 in self.partitionKeys: + iter302.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 9) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter303, viter304 in self.parameters.items(): + oprot.writeString(kiter303.encode("utf-8") if sys.version_info[0] == 2 else kiter303) + oprot.writeString(viter304.encode("utf-8") if sys.version_info[0] == 2 else viter304) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.viewOriginalText is not None: + oprot.writeFieldBegin("viewOriginalText", TType.STRING, 10) + oprot.writeString(self.viewOriginalText.encode("utf-8") if sys.version_info[0] == 2 else self.viewOriginalText) + oprot.writeFieldEnd() + if self.viewExpandedText is not None: + oprot.writeFieldBegin("viewExpandedText", TType.STRING, 11) + oprot.writeString(self.viewExpandedText.encode("utf-8") if sys.version_info[0] == 2 else self.viewExpandedText) + oprot.writeFieldEnd() + if self.tableType is not None: + oprot.writeFieldBegin("tableType", TType.STRING, 12) + oprot.writeString(self.tableType.encode("utf-8") if sys.version_info[0] == 2 else self.tableType) + oprot.writeFieldEnd() + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.STRUCT, 13) + self.privileges.write(oprot) + oprot.writeFieldEnd() + if self.temporary is not None: + oprot.writeFieldBegin("temporary", TType.BOOL, 14) + oprot.writeBool(self.temporary) + oprot.writeFieldEnd() + if self.rewriteEnabled is not None: + oprot.writeFieldBegin("rewriteEnabled", TType.BOOL, 15) + oprot.writeBool(self.rewriteEnabled) + oprot.writeFieldEnd() + if self.creationMetadata is not None: + oprot.writeFieldBegin("creationMetadata", TType.STRUCT, 16) + self.creationMetadata.write(oprot) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 17) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.ownerType is not None: + oprot.writeFieldBegin("ownerType", TType.I32, 18) + oprot.writeI32(self.ownerType) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 19) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 20) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + if self.colStats is not None: + oprot.writeFieldBegin("colStats", TType.STRUCT, 21) + self.colStats.write(oprot) + oprot.writeFieldEnd() + if self.accessType is not None: + oprot.writeFieldBegin("accessType", TType.BYTE, 22) + oprot.writeByte(self.accessType) + oprot.writeFieldEnd() + if self.requiredReadCapabilities is not None: + oprot.writeFieldBegin("requiredReadCapabilities", TType.LIST, 23) + oprot.writeListBegin(TType.STRING, len(self.requiredReadCapabilities)) + for iter305 in self.requiredReadCapabilities: + oprot.writeString(iter305.encode("utf-8") if sys.version_info[0] == 2 else iter305) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.requiredWriteCapabilities is not None: + oprot.writeFieldBegin("requiredWriteCapabilities", TType.LIST, 24) + oprot.writeListBegin(TType.STRING, len(self.requiredWriteCapabilities)) + for iter306 in self.requiredWriteCapabilities: + oprot.writeString(iter306.encode("utf-8") if sys.version_info[0] == 2 else iter306) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 25) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + if self.fileMetadata is not None: + oprot.writeFieldBegin("fileMetadata", TType.STRUCT, 26) + self.fileMetadata.write(oprot) + oprot.writeFieldEnd() + if self.dictionary is not None: + oprot.writeFieldBegin("dictionary", TType.STRUCT, 27) + self.dictionary.write(oprot) + oprot.writeFieldEnd() + if self.txnId is not None: + oprot.writeFieldBegin("txnId", TType.I64, 28) + oprot.writeI64(self.txnId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SourceTable: + """ + Attributes: + - table + - insertedCount + - updatedCount + - deletedCount + + """ + + def __init__( + self, + table=None, + insertedCount=None, + updatedCount=None, + deletedCount=None, + ): + self.table = table + self.insertedCount = insertedCount + self.updatedCount = updatedCount + self.deletedCount = deletedCount + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.table = Table() + self.table.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.insertedCount = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.updatedCount = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.deletedCount = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SourceTable") + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRUCT, 1) + self.table.write(oprot) + oprot.writeFieldEnd() + if self.insertedCount is not None: + oprot.writeFieldBegin("insertedCount", TType.I64, 2) + oprot.writeI64(self.insertedCount) + oprot.writeFieldEnd() + if self.updatedCount is not None: + oprot.writeFieldBegin("updatedCount", TType.I64, 3) + oprot.writeI64(self.updatedCount) + oprot.writeFieldEnd() + if self.deletedCount is not None: + oprot.writeFieldBegin("deletedCount", TType.I64, 4) + oprot.writeI64(self.deletedCount) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + if self.insertedCount is None: + raise TProtocolException(message="Required field insertedCount is unset!") + if self.updatedCount is None: + raise TProtocolException(message="Required field updatedCount is unset!") + if self.deletedCount is None: + raise TProtocolException(message="Required field deletedCount is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Partition: + """ + Attributes: + - values + - dbName + - tableName + - createTime + - lastAccessTime + - sd + - parameters + - privileges + - catName + - writeId + - isStatsCompliant + - colStats + - fileMetadata + + """ + + def __init__( + self, + values=None, + dbName=None, + tableName=None, + createTime=None, + lastAccessTime=None, + sd=None, + parameters=None, + privileges=None, + catName=None, + writeId=-1, + isStatsCompliant=None, + colStats=None, + fileMetadata=None, + ): + self.values = values + self.dbName = dbName + self.tableName = tableName + self.createTime = createTime + self.lastAccessTime = lastAccessTime + self.sd = sd + self.parameters = parameters + self.privileges = privileges + self.catName = catName + self.writeId = writeId + self.isStatsCompliant = isStatsCompliant + self.colStats = colStats + self.fileMetadata = fileMetadata + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.values = [] + (_etype310, _size307) = iprot.readListBegin() + for _i311 in range(_size307): + _elem312 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.values.append(_elem312) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.lastAccessTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRUCT: + self.sd = StorageDescriptor() + self.sd.read(iprot) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.MAP: + self.parameters = {} + (_ktype314, _vtype315, _size313) = iprot.readMapBegin() + for _i317 in range(_size313): + _key318 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val319 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key318] = _val319 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRUCT: + self.privileges = PrincipalPrivilegeSet() + self.privileges.read(iprot) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.STRUCT: + self.colStats = ColumnStatistics() + self.colStats.read(iprot) + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.STRUCT: + self.fileMetadata = FileMetadata() + self.fileMetadata.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Partition") + if self.values is not None: + oprot.writeFieldBegin("values", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.values)) + for iter320 in self.values: + oprot.writeString(iter320.encode("utf-8") if sys.version_info[0] == 2 else iter320) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 3) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 4) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.lastAccessTime is not None: + oprot.writeFieldBegin("lastAccessTime", TType.I32, 5) + oprot.writeI32(self.lastAccessTime) + oprot.writeFieldEnd() + if self.sd is not None: + oprot.writeFieldBegin("sd", TType.STRUCT, 6) + self.sd.write(oprot) + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 7) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter321, viter322 in self.parameters.items(): + oprot.writeString(kiter321.encode("utf-8") if sys.version_info[0] == 2 else kiter321) + oprot.writeString(viter322.encode("utf-8") if sys.version_info[0] == 2 else viter322) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.STRUCT, 8) + self.privileges.write(oprot) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 9) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 10) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 11) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + if self.colStats is not None: + oprot.writeFieldBegin("colStats", TType.STRUCT, 12) + self.colStats.write(oprot) + oprot.writeFieldEnd() + if self.fileMetadata is not None: + oprot.writeFieldBegin("fileMetadata", TType.STRUCT, 13) + self.fileMetadata.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionWithoutSD: + """ + Attributes: + - values + - createTime + - lastAccessTime + - relativePath + - parameters + - privileges + + """ + + def __init__( + self, + values=None, + createTime=None, + lastAccessTime=None, + relativePath=None, + parameters=None, + privileges=None, + ): + self.values = values + self.createTime = createTime + self.lastAccessTime = lastAccessTime + self.relativePath = relativePath + self.parameters = parameters + self.privileges = privileges + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.values = [] + (_etype326, _size323) = iprot.readListBegin() + for _i327 in range(_size323): + _elem328 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.values.append(_elem328) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.lastAccessTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.relativePath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.MAP: + self.parameters = {} + (_ktype330, _vtype331, _size329) = iprot.readMapBegin() + for _i333 in range(_size329): + _key334 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val335 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key334] = _val335 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRUCT: + self.privileges = PrincipalPrivilegeSet() + self.privileges.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionWithoutSD") + if self.values is not None: + oprot.writeFieldBegin("values", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.values)) + for iter336 in self.values: + oprot.writeString(iter336.encode("utf-8") if sys.version_info[0] == 2 else iter336) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 2) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.lastAccessTime is not None: + oprot.writeFieldBegin("lastAccessTime", TType.I32, 3) + oprot.writeI32(self.lastAccessTime) + oprot.writeFieldEnd() + if self.relativePath is not None: + oprot.writeFieldBegin("relativePath", TType.STRING, 4) + oprot.writeString(self.relativePath.encode("utf-8") if sys.version_info[0] == 2 else self.relativePath) + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 5) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter337, viter338 in self.parameters.items(): + oprot.writeString(kiter337.encode("utf-8") if sys.version_info[0] == 2 else kiter337) + oprot.writeString(viter338.encode("utf-8") if sys.version_info[0] == 2 else viter338) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.STRUCT, 6) + self.privileges.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionSpecWithSharedSD: + """ + Attributes: + - partitions + - sd + + """ + + def __init__( + self, + partitions=None, + sd=None, + ): + self.partitions = partitions + self.sd = sd + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype342, _size339) = iprot.readListBegin() + for _i343 in range(_size339): + _elem344 = PartitionWithoutSD() + _elem344.read(iprot) + self.partitions.append(_elem344) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.sd = StorageDescriptor() + self.sd.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionSpecWithSharedSD") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter345 in self.partitions: + iter345.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.sd is not None: + oprot.writeFieldBegin("sd", TType.STRUCT, 2) + self.sd.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionListComposingSpec: + """ + Attributes: + - partitions + + """ + + def __init__( + self, + partitions=None, + ): + self.partitions = partitions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype349, _size346) = iprot.readListBegin() + for _i350 in range(_size346): + _elem351 = Partition() + _elem351.read(iprot) + self.partitions.append(_elem351) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionListComposingSpec") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter352 in self.partitions: + iter352.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionSpec: + """ + Attributes: + - dbName + - tableName + - rootPath + - sharedSDPartitionSpec + - partitionList + - catName + - writeId + - isStatsCompliant + + """ + + def __init__( + self, + dbName=None, + tableName=None, + rootPath=None, + sharedSDPartitionSpec=None, + partitionList=None, + catName=None, + writeId=-1, + isStatsCompliant=None, + ): + self.dbName = dbName + self.tableName = tableName + self.rootPath = rootPath + self.sharedSDPartitionSpec = sharedSDPartitionSpec + self.partitionList = partitionList + self.catName = catName + self.writeId = writeId + self.isStatsCompliant = isStatsCompliant + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.rootPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.sharedSDPartitionSpec = PartitionSpecWithSharedSD() + self.sharedSDPartitionSpec.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.partitionList = PartitionListComposingSpec() + self.partitionList.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionSpec") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 2) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.rootPath is not None: + oprot.writeFieldBegin("rootPath", TType.STRING, 3) + oprot.writeString(self.rootPath.encode("utf-8") if sys.version_info[0] == 2 else self.rootPath) + oprot.writeFieldEnd() + if self.sharedSDPartitionSpec is not None: + oprot.writeFieldBegin("sharedSDPartitionSpec", TType.STRUCT, 4) + self.sharedSDPartitionSpec.write(oprot) + oprot.writeFieldEnd() + if self.partitionList is not None: + oprot.writeFieldBegin("partitionList", TType.STRUCT, 5) + self.partitionList.write(oprot) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 6) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 7) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 8) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AggrStats: + """ + Attributes: + - colStats + - partsFound + - isStatsCompliant + + """ + + def __init__( + self, + colStats=None, + partsFound=None, + isStatsCompliant=None, + ): + self.colStats = colStats + self.partsFound = partsFound + self.isStatsCompliant = isStatsCompliant + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.colStats = [] + (_etype356, _size353) = iprot.readListBegin() + for _i357 in range(_size353): + _elem358 = ColumnStatisticsObj() + _elem358.read(iprot) + self.colStats.append(_elem358) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.partsFound = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AggrStats") + if self.colStats is not None: + oprot.writeFieldBegin("colStats", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.colStats)) + for iter359 in self.colStats: + iter359.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.partsFound is not None: + oprot.writeFieldBegin("partsFound", TType.I64, 2) + oprot.writeI64(self.partsFound) + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 3) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.colStats is None: + raise TProtocolException(message="Required field colStats is unset!") + if self.partsFound is None: + raise TProtocolException(message="Required field partsFound is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SetPartitionsStatsRequest: + """ + Attributes: + - colStats + - needMerge + - writeId + - validWriteIdList + - engine + + """ + + def __init__( + self, + colStats=None, + needMerge=None, + writeId=-1, + validWriteIdList=None, + engine=None, + ): + self.colStats = colStats + self.needMerge = needMerge + self.writeId = writeId + self.validWriteIdList = validWriteIdList + self.engine = engine + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.colStats = [] + (_etype363, _size360) = iprot.readListBegin() + for _i364 in range(_size360): + _elem365 = ColumnStatistics() + _elem365.read(iprot) + self.colStats.append(_elem365) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.needMerge = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.engine = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SetPartitionsStatsRequest") + if self.colStats is not None: + oprot.writeFieldBegin("colStats", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.colStats)) + for iter366 in self.colStats: + iter366.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.needMerge is not None: + oprot.writeFieldBegin("needMerge", TType.BOOL, 2) + oprot.writeBool(self.needMerge) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 3) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.engine is not None: + oprot.writeFieldBegin("engine", TType.STRING, 5) + oprot.writeString(self.engine.encode("utf-8") if sys.version_info[0] == 2 else self.engine) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.colStats is None: + raise TProtocolException(message="Required field colStats is unset!") + if self.engine is None: + raise TProtocolException(message="Required field engine is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SetPartitionsStatsResponse: + """ + Attributes: + - result + + """ + + def __init__( + self, + result=None, + ): + self.result = result + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.result = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SetPartitionsStatsResponse") + if self.result is not None: + oprot.writeFieldBegin("result", TType.BOOL, 1) + oprot.writeBool(self.result) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.result is None: + raise TProtocolException(message="Required field result is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Schema: + """ + Attributes: + - fieldSchemas + - properties + + """ + + def __init__( + self, + fieldSchemas=None, + properties=None, + ): + self.fieldSchemas = fieldSchemas + self.properties = properties + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fieldSchemas = [] + (_etype370, _size367) = iprot.readListBegin() + for _i371 in range(_size367): + _elem372 = FieldSchema() + _elem372.read(iprot) + self.fieldSchemas.append(_elem372) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.MAP: + self.properties = {} + (_ktype374, _vtype375, _size373) = iprot.readMapBegin() + for _i377 in range(_size373): + _key378 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val379 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.properties[_key378] = _val379 + iprot.readMapEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Schema") + if self.fieldSchemas is not None: + oprot.writeFieldBegin("fieldSchemas", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.fieldSchemas)) + for iter380 in self.fieldSchemas: + iter380.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.properties is not None: + oprot.writeFieldBegin("properties", TType.MAP, 2) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.properties)) + for kiter381, viter382 in self.properties.items(): + oprot.writeString(kiter381.encode("utf-8") if sys.version_info[0] == 2 else kiter381) + oprot.writeString(viter382.encode("utf-8") if sys.version_info[0] == 2 else viter382) + oprot.writeMapEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PrimaryKeysRequest: + """ + Attributes: + - db_name + - tbl_name + - catName + - validWriteIdList + - tableId + + """ + + def __init__( + self, + db_name=None, + tbl_name=None, + catName=None, + validWriteIdList=None, + tableId=-1, + ): + self.db_name = db_name + self.tbl_name = tbl_name + self.catName = catName + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PrimaryKeysRequest") + if self.db_name is not None: + oprot.writeFieldBegin("db_name", TType.STRING, 1) + oprot.writeString(self.db_name.encode("utf-8") if sys.version_info[0] == 2 else self.db_name) + oprot.writeFieldEnd() + if self.tbl_name is not None: + oprot.writeFieldBegin("tbl_name", TType.STRING, 2) + oprot.writeString(self.tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.tbl_name) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 3) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 5) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.db_name is None: + raise TProtocolException(message="Required field db_name is unset!") + if self.tbl_name is None: + raise TProtocolException(message="Required field tbl_name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PrimaryKeysResponse: + """ + Attributes: + - primaryKeys + + """ + + def __init__( + self, + primaryKeys=None, + ): + self.primaryKeys = primaryKeys + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.primaryKeys = [] + (_etype386, _size383) = iprot.readListBegin() + for _i387 in range(_size383): + _elem388 = SQLPrimaryKey() + _elem388.read(iprot) + self.primaryKeys.append(_elem388) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PrimaryKeysResponse") + if self.primaryKeys is not None: + oprot.writeFieldBegin("primaryKeys", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.primaryKeys)) + for iter389 in self.primaryKeys: + iter389.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.primaryKeys is None: + raise TProtocolException(message="Required field primaryKeys is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ForeignKeysRequest: + """ + Attributes: + - parent_db_name + - parent_tbl_name + - foreign_db_name + - foreign_tbl_name + - catName + - validWriteIdList + - tableId + + """ + + def __init__( + self, + parent_db_name=None, + parent_tbl_name=None, + foreign_db_name=None, + foreign_tbl_name=None, + catName=None, + validWriteIdList=None, + tableId=-1, + ): + self.parent_db_name = parent_db_name + self.parent_tbl_name = parent_tbl_name + self.foreign_db_name = foreign_db_name + self.foreign_tbl_name = foreign_tbl_name + self.catName = catName + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.parent_db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.parent_tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.foreign_db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.foreign_tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ForeignKeysRequest") + if self.parent_db_name is not None: + oprot.writeFieldBegin("parent_db_name", TType.STRING, 1) + oprot.writeString(self.parent_db_name.encode("utf-8") if sys.version_info[0] == 2 else self.parent_db_name) + oprot.writeFieldEnd() + if self.parent_tbl_name is not None: + oprot.writeFieldBegin("parent_tbl_name", TType.STRING, 2) + oprot.writeString(self.parent_tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.parent_tbl_name) + oprot.writeFieldEnd() + if self.foreign_db_name is not None: + oprot.writeFieldBegin("foreign_db_name", TType.STRING, 3) + oprot.writeString(self.foreign_db_name.encode("utf-8") if sys.version_info[0] == 2 else self.foreign_db_name) + oprot.writeFieldEnd() + if self.foreign_tbl_name is not None: + oprot.writeFieldBegin("foreign_tbl_name", TType.STRING, 4) + oprot.writeString(self.foreign_tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.foreign_tbl_name) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 5) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 6) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 7) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ForeignKeysResponse: + """ + Attributes: + - foreignKeys + + """ + + def __init__( + self, + foreignKeys=None, + ): + self.foreignKeys = foreignKeys + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.foreignKeys = [] + (_etype393, _size390) = iprot.readListBegin() + for _i394 in range(_size390): + _elem395 = SQLForeignKey() + _elem395.read(iprot) + self.foreignKeys.append(_elem395) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ForeignKeysResponse") + if self.foreignKeys is not None: + oprot.writeFieldBegin("foreignKeys", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.foreignKeys)) + for iter396 in self.foreignKeys: + iter396.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.foreignKeys is None: + raise TProtocolException(message="Required field foreignKeys is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UniqueConstraintsRequest: + """ + Attributes: + - catName + - db_name + - tbl_name + - validWriteIdList + - tableId + + """ + + def __init__( + self, + catName=None, + db_name=None, + tbl_name=None, + validWriteIdList=None, + tableId=-1, + ): + self.catName = catName + self.db_name = db_name + self.tbl_name = tbl_name + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UniqueConstraintsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.db_name is not None: + oprot.writeFieldBegin("db_name", TType.STRING, 2) + oprot.writeString(self.db_name.encode("utf-8") if sys.version_info[0] == 2 else self.db_name) + oprot.writeFieldEnd() + if self.tbl_name is not None: + oprot.writeFieldBegin("tbl_name", TType.STRING, 3) + oprot.writeString(self.tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.tbl_name) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 5) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.db_name is None: + raise TProtocolException(message="Required field db_name is unset!") + if self.tbl_name is None: + raise TProtocolException(message="Required field tbl_name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UniqueConstraintsResponse: + """ + Attributes: + - uniqueConstraints + + """ + + def __init__( + self, + uniqueConstraints=None, + ): + self.uniqueConstraints = uniqueConstraints + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.uniqueConstraints = [] + (_etype400, _size397) = iprot.readListBegin() + for _i401 in range(_size397): + _elem402 = SQLUniqueConstraint() + _elem402.read(iprot) + self.uniqueConstraints.append(_elem402) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UniqueConstraintsResponse") + if self.uniqueConstraints is not None: + oprot.writeFieldBegin("uniqueConstraints", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.uniqueConstraints)) + for iter403 in self.uniqueConstraints: + iter403.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.uniqueConstraints is None: + raise TProtocolException(message="Required field uniqueConstraints is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotNullConstraintsRequest: + """ + Attributes: + - catName + - db_name + - tbl_name + - validWriteIdList + - tableId + + """ + + def __init__( + self, + catName=None, + db_name=None, + tbl_name=None, + validWriteIdList=None, + tableId=-1, + ): + self.catName = catName + self.db_name = db_name + self.tbl_name = tbl_name + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotNullConstraintsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.db_name is not None: + oprot.writeFieldBegin("db_name", TType.STRING, 2) + oprot.writeString(self.db_name.encode("utf-8") if sys.version_info[0] == 2 else self.db_name) + oprot.writeFieldEnd() + if self.tbl_name is not None: + oprot.writeFieldBegin("tbl_name", TType.STRING, 3) + oprot.writeString(self.tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.tbl_name) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 5) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.db_name is None: + raise TProtocolException(message="Required field db_name is unset!") + if self.tbl_name is None: + raise TProtocolException(message="Required field tbl_name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotNullConstraintsResponse: + """ + Attributes: + - notNullConstraints + + """ + + def __init__( + self, + notNullConstraints=None, + ): + self.notNullConstraints = notNullConstraints + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.notNullConstraints = [] + (_etype407, _size404) = iprot.readListBegin() + for _i408 in range(_size404): + _elem409 = SQLNotNullConstraint() + _elem409.read(iprot) + self.notNullConstraints.append(_elem409) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotNullConstraintsResponse") + if self.notNullConstraints is not None: + oprot.writeFieldBegin("notNullConstraints", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.notNullConstraints)) + for iter410 in self.notNullConstraints: + iter410.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.notNullConstraints is None: + raise TProtocolException(message="Required field notNullConstraints is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DefaultConstraintsRequest: + """ + Attributes: + - catName + - db_name + - tbl_name + - validWriteIdList + - tableId + + """ + + def __init__( + self, + catName=None, + db_name=None, + tbl_name=None, + validWriteIdList=None, + tableId=-1, + ): + self.catName = catName + self.db_name = db_name + self.tbl_name = tbl_name + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DefaultConstraintsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.db_name is not None: + oprot.writeFieldBegin("db_name", TType.STRING, 2) + oprot.writeString(self.db_name.encode("utf-8") if sys.version_info[0] == 2 else self.db_name) + oprot.writeFieldEnd() + if self.tbl_name is not None: + oprot.writeFieldBegin("tbl_name", TType.STRING, 3) + oprot.writeString(self.tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.tbl_name) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 5) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.db_name is None: + raise TProtocolException(message="Required field db_name is unset!") + if self.tbl_name is None: + raise TProtocolException(message="Required field tbl_name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DefaultConstraintsResponse: + """ + Attributes: + - defaultConstraints + + """ + + def __init__( + self, + defaultConstraints=None, + ): + self.defaultConstraints = defaultConstraints + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.defaultConstraints = [] + (_etype414, _size411) = iprot.readListBegin() + for _i415 in range(_size411): + _elem416 = SQLDefaultConstraint() + _elem416.read(iprot) + self.defaultConstraints.append(_elem416) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DefaultConstraintsResponse") + if self.defaultConstraints is not None: + oprot.writeFieldBegin("defaultConstraints", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.defaultConstraints)) + for iter417 in self.defaultConstraints: + iter417.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.defaultConstraints is None: + raise TProtocolException(message="Required field defaultConstraints is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CheckConstraintsRequest: + """ + Attributes: + - catName + - db_name + - tbl_name + - validWriteIdList + - tableId + + """ + + def __init__( + self, + catName=None, + db_name=None, + tbl_name=None, + validWriteIdList=None, + tableId=-1, + ): + self.catName = catName + self.db_name = db_name + self.tbl_name = tbl_name + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CheckConstraintsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.db_name is not None: + oprot.writeFieldBegin("db_name", TType.STRING, 2) + oprot.writeString(self.db_name.encode("utf-8") if sys.version_info[0] == 2 else self.db_name) + oprot.writeFieldEnd() + if self.tbl_name is not None: + oprot.writeFieldBegin("tbl_name", TType.STRING, 3) + oprot.writeString(self.tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.tbl_name) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 5) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.db_name is None: + raise TProtocolException(message="Required field db_name is unset!") + if self.tbl_name is None: + raise TProtocolException(message="Required field tbl_name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CheckConstraintsResponse: + """ + Attributes: + - checkConstraints + + """ + + def __init__( + self, + checkConstraints=None, + ): + self.checkConstraints = checkConstraints + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.checkConstraints = [] + (_etype421, _size418) = iprot.readListBegin() + for _i422 in range(_size418): + _elem423 = SQLCheckConstraint() + _elem423.read(iprot) + self.checkConstraints.append(_elem423) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CheckConstraintsResponse") + if self.checkConstraints is not None: + oprot.writeFieldBegin("checkConstraints", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.checkConstraints)) + for iter424 in self.checkConstraints: + iter424.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.checkConstraints is None: + raise TProtocolException(message="Required field checkConstraints is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AllTableConstraintsRequest: + """ + Attributes: + - dbName + - tblName + - catName + - validWriteIdList + - tableId + + """ + + def __init__( + self, + dbName=None, + tblName=None, + catName=None, + validWriteIdList=None, + tableId=-1, + ): + self.dbName = dbName + self.tblName = tblName + self.catName = catName + self.validWriteIdList = validWriteIdList + self.tableId = tableId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AllTableConstraintsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 3) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 4) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 5) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AllTableConstraintsResponse: + """ + Attributes: + - allTableConstraints + + """ + + def __init__( + self, + allTableConstraints=None, + ): + self.allTableConstraints = allTableConstraints + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.allTableConstraints = SQLAllTableConstraints() + self.allTableConstraints.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AllTableConstraintsResponse") + if self.allTableConstraints is not None: + oprot.writeFieldBegin("allTableConstraints", TType.STRUCT, 1) + self.allTableConstraints.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.allTableConstraints is None: + raise TProtocolException(message="Required field allTableConstraints is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropConstraintRequest: + """ + Attributes: + - dbname + - tablename + - constraintname + - catName + + """ + + def __init__( + self, + dbname=None, + tablename=None, + constraintname=None, + catName=None, + ): + self.dbname = dbname + self.tablename = tablename + self.constraintname = constraintname + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.constraintname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropConstraintRequest") + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 1) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 2) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.constraintname is not None: + oprot.writeFieldBegin("constraintname", TType.STRING, 3) + oprot.writeString(self.constraintname.encode("utf-8") if sys.version_info[0] == 2 else self.constraintname) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 4) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tablename is None: + raise TProtocolException(message="Required field tablename is unset!") + if self.constraintname is None: + raise TProtocolException(message="Required field constraintname is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddPrimaryKeyRequest: + """ + Attributes: + - primaryKeyCols + + """ + + def __init__( + self, + primaryKeyCols=None, + ): + self.primaryKeyCols = primaryKeyCols + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.primaryKeyCols = [] + (_etype428, _size425) = iprot.readListBegin() + for _i429 in range(_size425): + _elem430 = SQLPrimaryKey() + _elem430.read(iprot) + self.primaryKeyCols.append(_elem430) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddPrimaryKeyRequest") + if self.primaryKeyCols is not None: + oprot.writeFieldBegin("primaryKeyCols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.primaryKeyCols)) + for iter431 in self.primaryKeyCols: + iter431.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.primaryKeyCols is None: + raise TProtocolException(message="Required field primaryKeyCols is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddForeignKeyRequest: + """ + Attributes: + - foreignKeyCols + + """ + + def __init__( + self, + foreignKeyCols=None, + ): + self.foreignKeyCols = foreignKeyCols + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.foreignKeyCols = [] + (_etype435, _size432) = iprot.readListBegin() + for _i436 in range(_size432): + _elem437 = SQLForeignKey() + _elem437.read(iprot) + self.foreignKeyCols.append(_elem437) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddForeignKeyRequest") + if self.foreignKeyCols is not None: + oprot.writeFieldBegin("foreignKeyCols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.foreignKeyCols)) + for iter438 in self.foreignKeyCols: + iter438.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.foreignKeyCols is None: + raise TProtocolException(message="Required field foreignKeyCols is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddUniqueConstraintRequest: + """ + Attributes: + - uniqueConstraintCols + + """ + + def __init__( + self, + uniqueConstraintCols=None, + ): + self.uniqueConstraintCols = uniqueConstraintCols + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.uniqueConstraintCols = [] + (_etype442, _size439) = iprot.readListBegin() + for _i443 in range(_size439): + _elem444 = SQLUniqueConstraint() + _elem444.read(iprot) + self.uniqueConstraintCols.append(_elem444) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddUniqueConstraintRequest") + if self.uniqueConstraintCols is not None: + oprot.writeFieldBegin("uniqueConstraintCols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.uniqueConstraintCols)) + for iter445 in self.uniqueConstraintCols: + iter445.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.uniqueConstraintCols is None: + raise TProtocolException(message="Required field uniqueConstraintCols is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddNotNullConstraintRequest: + """ + Attributes: + - notNullConstraintCols + + """ + + def __init__( + self, + notNullConstraintCols=None, + ): + self.notNullConstraintCols = notNullConstraintCols + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.notNullConstraintCols = [] + (_etype449, _size446) = iprot.readListBegin() + for _i450 in range(_size446): + _elem451 = SQLNotNullConstraint() + _elem451.read(iprot) + self.notNullConstraintCols.append(_elem451) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddNotNullConstraintRequest") + if self.notNullConstraintCols is not None: + oprot.writeFieldBegin("notNullConstraintCols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.notNullConstraintCols)) + for iter452 in self.notNullConstraintCols: + iter452.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.notNullConstraintCols is None: + raise TProtocolException(message="Required field notNullConstraintCols is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddDefaultConstraintRequest: + """ + Attributes: + - defaultConstraintCols + + """ + + def __init__( + self, + defaultConstraintCols=None, + ): + self.defaultConstraintCols = defaultConstraintCols + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.defaultConstraintCols = [] + (_etype456, _size453) = iprot.readListBegin() + for _i457 in range(_size453): + _elem458 = SQLDefaultConstraint() + _elem458.read(iprot) + self.defaultConstraintCols.append(_elem458) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddDefaultConstraintRequest") + if self.defaultConstraintCols is not None: + oprot.writeFieldBegin("defaultConstraintCols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.defaultConstraintCols)) + for iter459 in self.defaultConstraintCols: + iter459.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.defaultConstraintCols is None: + raise TProtocolException(message="Required field defaultConstraintCols is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddCheckConstraintRequest: + """ + Attributes: + - checkConstraintCols + + """ + + def __init__( + self, + checkConstraintCols=None, + ): + self.checkConstraintCols = checkConstraintCols + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.checkConstraintCols = [] + (_etype463, _size460) = iprot.readListBegin() + for _i464 in range(_size460): + _elem465 = SQLCheckConstraint() + _elem465.read(iprot) + self.checkConstraintCols.append(_elem465) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddCheckConstraintRequest") + if self.checkConstraintCols is not None: + oprot.writeFieldBegin("checkConstraintCols", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.checkConstraintCols)) + for iter466 in self.checkConstraintCols: + iter466.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.checkConstraintCols is None: + raise TProtocolException(message="Required field checkConstraintCols is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsByExprResult: + """ + Attributes: + - partitions + - hasUnknownPartitions + + """ + + def __init__( + self, + partitions=None, + hasUnknownPartitions=None, + ): + self.partitions = partitions + self.hasUnknownPartitions = hasUnknownPartitions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype470, _size467) = iprot.readListBegin() + for _i471 in range(_size467): + _elem472 = Partition() + _elem472.read(iprot) + self.partitions.append(_elem472) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.hasUnknownPartitions = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsByExprResult") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter473 in self.partitions: + iter473.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.hasUnknownPartitions is not None: + oprot.writeFieldBegin("hasUnknownPartitions", TType.BOOL, 2) + oprot.writeBool(self.hasUnknownPartitions) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partitions is None: + raise TProtocolException(message="Required field partitions is unset!") + if self.hasUnknownPartitions is None: + raise TProtocolException(message="Required field hasUnknownPartitions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsSpecByExprResult: + """ + Attributes: + - partitionsSpec + - hasUnknownPartitions + + """ + + def __init__( + self, + partitionsSpec=None, + hasUnknownPartitions=None, + ): + self.partitionsSpec = partitionsSpec + self.hasUnknownPartitions = hasUnknownPartitions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitionsSpec = [] + (_etype477, _size474) = iprot.readListBegin() + for _i478 in range(_size474): + _elem479 = PartitionSpec() + _elem479.read(iprot) + self.partitionsSpec.append(_elem479) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.hasUnknownPartitions = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsSpecByExprResult") + if self.partitionsSpec is not None: + oprot.writeFieldBegin("partitionsSpec", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitionsSpec)) + for iter480 in self.partitionsSpec: + iter480.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.hasUnknownPartitions is not None: + oprot.writeFieldBegin("hasUnknownPartitions", TType.BOOL, 2) + oprot.writeBool(self.hasUnknownPartitions) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partitionsSpec is None: + raise TProtocolException(message="Required field partitionsSpec is unset!") + if self.hasUnknownPartitions is None: + raise TProtocolException(message="Required field hasUnknownPartitions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsByExprRequest: + """ + Attributes: + - dbName + - tblName + - expr + - defaultPartitionName + - maxParts + - catName + - order + - validWriteIdList + - id + + """ + + def __init__( + self, + dbName=None, + tblName=None, + expr=None, + defaultPartitionName=None, + maxParts=-1, + catName=None, + order=None, + validWriteIdList=None, + id=-1, + ): + self.dbName = dbName + self.tblName = tblName + self.expr = expr + self.defaultPartitionName = defaultPartitionName + self.maxParts = maxParts + self.catName = catName + self.order = order + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.expr = iprot.readBinary() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.defaultPartitionName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I16: + self.maxParts = iprot.readI16() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.order = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsByExprRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.expr is not None: + oprot.writeFieldBegin("expr", TType.STRING, 3) + oprot.writeBinary(self.expr) + oprot.writeFieldEnd() + if self.defaultPartitionName is not None: + oprot.writeFieldBegin("defaultPartitionName", TType.STRING, 4) + oprot.writeString( + self.defaultPartitionName.encode("utf-8") if sys.version_info[0] == 2 else self.defaultPartitionName + ) + oprot.writeFieldEnd() + if self.maxParts is not None: + oprot.writeFieldBegin("maxParts", TType.I16, 5) + oprot.writeI16(self.maxParts) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 6) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.order is not None: + oprot.writeFieldBegin("order", TType.STRING, 7) + oprot.writeString(self.order.encode("utf-8") if sys.version_info[0] == 2 else self.order) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 8) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 9) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.expr is None: + raise TProtocolException(message="Required field expr is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TableStatsResult: + """ + Attributes: + - tableStats + - isStatsCompliant + + """ + + def __init__( + self, + tableStats=None, + isStatsCompliant=None, + ): + self.tableStats = tableStats + self.isStatsCompliant = isStatsCompliant + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.tableStats = [] + (_etype484, _size481) = iprot.readListBegin() + for _i485 in range(_size481): + _elem486 = ColumnStatisticsObj() + _elem486.read(iprot) + self.tableStats.append(_elem486) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TableStatsResult") + if self.tableStats is not None: + oprot.writeFieldBegin("tableStats", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.tableStats)) + for iter487 in self.tableStats: + iter487.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 2) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.tableStats is None: + raise TProtocolException(message="Required field tableStats is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsStatsResult: + """ + Attributes: + - partStats + - isStatsCompliant + + """ + + def __init__( + self, + partStats=None, + isStatsCompliant=None, + ): + self.partStats = partStats + self.isStatsCompliant = isStatsCompliant + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.MAP: + self.partStats = {} + (_ktype489, _vtype490, _size488) = iprot.readMapBegin() + for _i492 in range(_size488): + _key493 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val494 = [] + (_etype498, _size495) = iprot.readListBegin() + for _i499 in range(_size495): + _elem500 = ColumnStatisticsObj() + _elem500.read(iprot) + _val494.append(_elem500) + iprot.readListEnd() + self.partStats[_key493] = _val494 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsStatsResult") + if self.partStats is not None: + oprot.writeFieldBegin("partStats", TType.MAP, 1) + oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.partStats)) + for kiter501, viter502 in self.partStats.items(): + oprot.writeString(kiter501.encode("utf-8") if sys.version_info[0] == 2 else kiter501) + oprot.writeListBegin(TType.STRUCT, len(viter502)) + for iter503 in viter502: + iter503.write(oprot) + oprot.writeListEnd() + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 2) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partStats is None: + raise TProtocolException(message="Required field partStats is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TableStatsRequest: + """ + Attributes: + - dbName + - tblName + - colNames + - catName + - validWriteIdList + - engine + - id + + """ + + def __init__( + self, + dbName=None, + tblName=None, + colNames=None, + catName=None, + validWriteIdList=None, + engine=None, + id=-1, + ): + self.dbName = dbName + self.tblName = tblName + self.colNames = colNames + self.catName = catName + self.validWriteIdList = validWriteIdList + self.engine = engine + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.colNames = [] + (_etype507, _size504) = iprot.readListBegin() + for _i508 in range(_size504): + _elem509 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.colNames.append(_elem509) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.engine = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TableStatsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.colNames is not None: + oprot.writeFieldBegin("colNames", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.colNames)) + for iter510 in self.colNames: + oprot.writeString(iter510.encode("utf-8") if sys.version_info[0] == 2 else iter510) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 4) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 5) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.engine is not None: + oprot.writeFieldBegin("engine", TType.STRING, 6) + oprot.writeString(self.engine.encode("utf-8") if sys.version_info[0] == 2 else self.engine) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 7) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.colNames is None: + raise TProtocolException(message="Required field colNames is unset!") + if self.engine is None: + raise TProtocolException(message="Required field engine is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsStatsRequest: + """ + Attributes: + - dbName + - tblName + - colNames + - partNames + - catName + - validWriteIdList + - engine + + """ + + def __init__( + self, + dbName=None, + tblName=None, + colNames=None, + partNames=None, + catName=None, + validWriteIdList=None, + engine=None, + ): + self.dbName = dbName + self.tblName = tblName + self.colNames = colNames + self.partNames = partNames + self.catName = catName + self.validWriteIdList = validWriteIdList + self.engine = engine + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.colNames = [] + (_etype514, _size511) = iprot.readListBegin() + for _i515 in range(_size511): + _elem516 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.colNames.append(_elem516) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partNames = [] + (_etype520, _size517) = iprot.readListBegin() + for _i521 in range(_size517): + _elem522 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partNames.append(_elem522) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.engine = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsStatsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.colNames is not None: + oprot.writeFieldBegin("colNames", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.colNames)) + for iter523 in self.colNames: + oprot.writeString(iter523.encode("utf-8") if sys.version_info[0] == 2 else iter523) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.partNames is not None: + oprot.writeFieldBegin("partNames", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.partNames)) + for iter524 in self.partNames: + oprot.writeString(iter524.encode("utf-8") if sys.version_info[0] == 2 else iter524) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 5) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 6) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.engine is not None: + oprot.writeFieldBegin("engine", TType.STRING, 7) + oprot.writeString(self.engine.encode("utf-8") if sys.version_info[0] == 2 else self.engine) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.colNames is None: + raise TProtocolException(message="Required field colNames is unset!") + if self.partNames is None: + raise TProtocolException(message="Required field partNames is unset!") + if self.engine is None: + raise TProtocolException(message="Required field engine is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddPartitionsResult: + """ + Attributes: + - partitions + - isStatsCompliant + + """ + + def __init__( + self, + partitions=None, + isStatsCompliant=None, + ): + self.partitions = partitions + self.isStatsCompliant = isStatsCompliant + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype528, _size525) = iprot.readListBegin() + for _i529 in range(_size525): + _elem530 = Partition() + _elem530.read(iprot) + self.partitions.append(_elem530) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddPartitionsResult") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter531 in self.partitions: + iter531.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 2) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddPartitionsRequest: + """ + Attributes: + - dbName + - tblName + - parts + - ifNotExists + - needResult + - catName + - validWriteIdList + + """ + + def __init__( + self, + dbName=None, + tblName=None, + parts=None, + ifNotExists=None, + needResult=True, + catName=None, + validWriteIdList=None, + ): + self.dbName = dbName + self.tblName = tblName + self.parts = parts + self.ifNotExists = ifNotExists + self.needResult = needResult + self.catName = catName + self.validWriteIdList = validWriteIdList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.parts = [] + (_etype535, _size532) = iprot.readListBegin() + for _i536 in range(_size532): + _elem537 = Partition() + _elem537.read(iprot) + self.parts.append(_elem537) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.ifNotExists = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.needResult = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddPartitionsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.parts is not None: + oprot.writeFieldBegin("parts", TType.LIST, 3) + oprot.writeListBegin(TType.STRUCT, len(self.parts)) + for iter538 in self.parts: + iter538.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.ifNotExists is not None: + oprot.writeFieldBegin("ifNotExists", TType.BOOL, 4) + oprot.writeBool(self.ifNotExists) + oprot.writeFieldEnd() + if self.needResult is not None: + oprot.writeFieldBegin("needResult", TType.BOOL, 5) + oprot.writeBool(self.needResult) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 6) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 7) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.parts is None: + raise TProtocolException(message="Required field parts is unset!") + if self.ifNotExists is None: + raise TProtocolException(message="Required field ifNotExists is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropPartitionsResult: + """ + Attributes: + - partitions + + """ + + def __init__( + self, + partitions=None, + ): + self.partitions = partitions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype542, _size539) = iprot.readListBegin() + for _i543 in range(_size539): + _elem544 = Partition() + _elem544.read(iprot) + self.partitions.append(_elem544) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropPartitionsResult") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter545 in self.partitions: + iter545.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropPartitionsExpr: + """ + Attributes: + - expr + - partArchiveLevel + + """ + + def __init__( + self, + expr=None, + partArchiveLevel=None, + ): + self.expr = expr + self.partArchiveLevel = partArchiveLevel + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.expr = iprot.readBinary() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.partArchiveLevel = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropPartitionsExpr") + if self.expr is not None: + oprot.writeFieldBegin("expr", TType.STRING, 1) + oprot.writeBinary(self.expr) + oprot.writeFieldEnd() + if self.partArchiveLevel is not None: + oprot.writeFieldBegin("partArchiveLevel", TType.I32, 2) + oprot.writeI32(self.partArchiveLevel) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.expr is None: + raise TProtocolException(message="Required field expr is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class RequestPartsSpec: + """ + Attributes: + - names + - exprs + + """ + + def __init__( + self, + names=None, + exprs=None, + ): + self.names = names + self.exprs = exprs + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.names = [] + (_etype549, _size546) = iprot.readListBegin() + for _i550 in range(_size546): + _elem551 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.names.append(_elem551) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.exprs = [] + (_etype555, _size552) = iprot.readListBegin() + for _i556 in range(_size552): + _elem557 = DropPartitionsExpr() + _elem557.read(iprot) + self.exprs.append(_elem557) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("RequestPartsSpec") + if self.names is not None: + oprot.writeFieldBegin("names", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.names)) + for iter558 in self.names: + oprot.writeString(iter558.encode("utf-8") if sys.version_info[0] == 2 else iter558) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.exprs is not None: + oprot.writeFieldBegin("exprs", TType.LIST, 2) + oprot.writeListBegin(TType.STRUCT, len(self.exprs)) + for iter559 in self.exprs: + iter559.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropPartitionsRequest: + """ + Attributes: + - dbName + - tblName + - parts + - deleteData + - ifExists + - ignoreProtection + - environmentContext + - needResult + - catName + + """ + + def __init__( + self, + dbName=None, + tblName=None, + parts=None, + deleteData=None, + ifExists=True, + ignoreProtection=None, + environmentContext=None, + needResult=True, + catName=None, + ): + self.dbName = dbName + self.tblName = tblName + self.parts = parts + self.deleteData = deleteData + self.ifExists = ifExists + self.ignoreProtection = ignoreProtection + self.environmentContext = environmentContext + self.needResult = needResult + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRUCT: + self.parts = RequestPartsSpec() + self.parts.read(iprot) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.deleteData = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.ifExists = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.ignoreProtection = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRUCT: + self.environmentContext = EnvironmentContext() + self.environmentContext.read(iprot) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.needResult = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropPartitionsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.parts is not None: + oprot.writeFieldBegin("parts", TType.STRUCT, 3) + self.parts.write(oprot) + oprot.writeFieldEnd() + if self.deleteData is not None: + oprot.writeFieldBegin("deleteData", TType.BOOL, 4) + oprot.writeBool(self.deleteData) + oprot.writeFieldEnd() + if self.ifExists is not None: + oprot.writeFieldBegin("ifExists", TType.BOOL, 5) + oprot.writeBool(self.ifExists) + oprot.writeFieldEnd() + if self.ignoreProtection is not None: + oprot.writeFieldBegin("ignoreProtection", TType.BOOL, 6) + oprot.writeBool(self.ignoreProtection) + oprot.writeFieldEnd() + if self.environmentContext is not None: + oprot.writeFieldBegin("environmentContext", TType.STRUCT, 7) + self.environmentContext.write(oprot) + oprot.writeFieldEnd() + if self.needResult is not None: + oprot.writeFieldBegin("needResult", TType.BOOL, 8) + oprot.writeBool(self.needResult) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 9) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.parts is None: + raise TProtocolException(message="Required field parts is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionValuesRequest: + """ + Attributes: + - dbName + - tblName + - partitionKeys + - applyDistinct + - filter + - partitionOrder + - ascending + - maxParts + - catName + - validWriteIdList + + """ + + def __init__( + self, + dbName=None, + tblName=None, + partitionKeys=None, + applyDistinct=True, + filter=None, + partitionOrder=None, + ascending=True, + maxParts=-1, + catName=None, + validWriteIdList=None, + ): + self.dbName = dbName + self.tblName = tblName + self.partitionKeys = partitionKeys + self.applyDistinct = applyDistinct + self.filter = filter + self.partitionOrder = partitionOrder + self.ascending = ascending + self.maxParts = maxParts + self.catName = catName + self.validWriteIdList = validWriteIdList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.partitionKeys = [] + (_etype563, _size560) = iprot.readListBegin() + for _i564 in range(_size560): + _elem565 = FieldSchema() + _elem565.read(iprot) + self.partitionKeys.append(_elem565) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.applyDistinct = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.filter = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.partitionOrder = [] + (_etype569, _size566) = iprot.readListBegin() + for _i570 in range(_size566): + _elem571 = FieldSchema() + _elem571.read(iprot) + self.partitionOrder.append(_elem571) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.ascending = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.I64: + self.maxParts = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionValuesRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.partitionKeys is not None: + oprot.writeFieldBegin("partitionKeys", TType.LIST, 3) + oprot.writeListBegin(TType.STRUCT, len(self.partitionKeys)) + for iter572 in self.partitionKeys: + iter572.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.applyDistinct is not None: + oprot.writeFieldBegin("applyDistinct", TType.BOOL, 4) + oprot.writeBool(self.applyDistinct) + oprot.writeFieldEnd() + if self.filter is not None: + oprot.writeFieldBegin("filter", TType.STRING, 5) + oprot.writeString(self.filter.encode("utf-8") if sys.version_info[0] == 2 else self.filter) + oprot.writeFieldEnd() + if self.partitionOrder is not None: + oprot.writeFieldBegin("partitionOrder", TType.LIST, 6) + oprot.writeListBegin(TType.STRUCT, len(self.partitionOrder)) + for iter573 in self.partitionOrder: + iter573.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.ascending is not None: + oprot.writeFieldBegin("ascending", TType.BOOL, 7) + oprot.writeBool(self.ascending) + oprot.writeFieldEnd() + if self.maxParts is not None: + oprot.writeFieldBegin("maxParts", TType.I64, 8) + oprot.writeI64(self.maxParts) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 9) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 10) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.partitionKeys is None: + raise TProtocolException(message="Required field partitionKeys is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionValuesRow: + """ + Attributes: + - row + + """ + + def __init__( + self, + row=None, + ): + self.row = row + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.row = [] + (_etype577, _size574) = iprot.readListBegin() + for _i578 in range(_size574): + _elem579 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.row.append(_elem579) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionValuesRow") + if self.row is not None: + oprot.writeFieldBegin("row", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.row)) + for iter580 in self.row: + oprot.writeString(iter580.encode("utf-8") if sys.version_info[0] == 2 else iter580) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.row is None: + raise TProtocolException(message="Required field row is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionValuesResponse: + """ + Attributes: + - partitionValues + + """ + + def __init__( + self, + partitionValues=None, + ): + self.partitionValues = partitionValues + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitionValues = [] + (_etype584, _size581) = iprot.readListBegin() + for _i585 in range(_size581): + _elem586 = PartitionValuesRow() + _elem586.read(iprot) + self.partitionValues.append(_elem586) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionValuesResponse") + if self.partitionValues is not None: + oprot.writeFieldBegin("partitionValues", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitionValues)) + for iter587 in self.partitionValues: + iter587.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partitionValues is None: + raise TProtocolException(message="Required field partitionValues is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsByNamesRequest: + """ + Attributes: + - db_name + - tbl_name + - names + - get_col_stats + - processorCapabilities + - processorIdentifier + - engine + - validWriteIdList + - getFileMetadata + - id + + """ + + def __init__( + self, + db_name=None, + tbl_name=None, + names=None, + get_col_stats=None, + processorCapabilities=None, + processorIdentifier=None, + engine=None, + validWriteIdList=None, + getFileMetadata=None, + id=-1, + ): + self.db_name = db_name + self.tbl_name = tbl_name + self.names = names + self.get_col_stats = get_col_stats + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + self.engine = engine + self.validWriteIdList = validWriteIdList + self.getFileMetadata = getFileMetadata + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.db_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tbl_name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.names = [] + (_etype591, _size588) = iprot.readListBegin() + for _i592 in range(_size588): + _elem593 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.names.append(_elem593) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.get_col_stats = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype597, _size594) = iprot.readListBegin() + for _i598 in range(_size594): + _elem599 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem599) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.engine = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.BOOL: + self.getFileMetadata = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsByNamesRequest") + if self.db_name is not None: + oprot.writeFieldBegin("db_name", TType.STRING, 1) + oprot.writeString(self.db_name.encode("utf-8") if sys.version_info[0] == 2 else self.db_name) + oprot.writeFieldEnd() + if self.tbl_name is not None: + oprot.writeFieldBegin("tbl_name", TType.STRING, 2) + oprot.writeString(self.tbl_name.encode("utf-8") if sys.version_info[0] == 2 else self.tbl_name) + oprot.writeFieldEnd() + if self.names is not None: + oprot.writeFieldBegin("names", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.names)) + for iter600 in self.names: + oprot.writeString(iter600.encode("utf-8") if sys.version_info[0] == 2 else iter600) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.get_col_stats is not None: + oprot.writeFieldBegin("get_col_stats", TType.BOOL, 4) + oprot.writeBool(self.get_col_stats) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 5) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter601 in self.processorCapabilities: + oprot.writeString(iter601.encode("utf-8") if sys.version_info[0] == 2 else iter601) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 6) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + if self.engine is not None: + oprot.writeFieldBegin("engine", TType.STRING, 7) + oprot.writeString(self.engine.encode("utf-8") if sys.version_info[0] == 2 else self.engine) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 8) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.getFileMetadata is not None: + oprot.writeFieldBegin("getFileMetadata", TType.BOOL, 9) + oprot.writeBool(self.getFileMetadata) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 10) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.db_name is None: + raise TProtocolException(message="Required field db_name is unset!") + if self.tbl_name is None: + raise TProtocolException(message="Required field tbl_name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsByNamesResult: + """ + Attributes: + - partitions + - dictionary + + """ + + def __init__( + self, + partitions=None, + dictionary=None, + ): + self.partitions = partitions + self.dictionary = dictionary + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype605, _size602) = iprot.readListBegin() + for _i606 in range(_size602): + _elem607 = Partition() + _elem607.read(iprot) + self.partitions.append(_elem607) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.dictionary = ObjectDictionary() + self.dictionary.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsByNamesResult") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter608 in self.partitions: + iter608.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.dictionary is not None: + oprot.writeFieldBegin("dictionary", TType.STRUCT, 2) + self.dictionary.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partitions is None: + raise TProtocolException(message="Required field partitions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DataConnector: + """ + Attributes: + - name + - type + - url + - description + - parameters + - ownerName + - ownerType + - createTime + + """ + + def __init__( + self, + name=None, + type=None, + url=None, + description=None, + parameters=None, + ownerName=None, + ownerType=None, + createTime=None, + ): + self.name = name + self.type = type + self.url = url + self.description = description + self.parameters = parameters + self.ownerName = ownerName + self.ownerType = ownerType + self.createTime = createTime + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.type = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.url = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.MAP: + self.parameters = {} + (_ktype610, _vtype611, _size609) = iprot.readMapBegin() + for _i613 in range(_size609): + _key614 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val615 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key614] = _val615 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.ownerType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DataConnector") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.STRING, 2) + oprot.writeString(self.type.encode("utf-8") if sys.version_info[0] == 2 else self.type) + oprot.writeFieldEnd() + if self.url is not None: + oprot.writeFieldBegin("url", TType.STRING, 3) + oprot.writeString(self.url.encode("utf-8") if sys.version_info[0] == 2 else self.url) + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 4) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 5) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter616, viter617 in self.parameters.items(): + oprot.writeString(kiter616.encode("utf-8") if sys.version_info[0] == 2 else kiter616) + oprot.writeString(viter617.encode("utf-8") if sys.version_info[0] == 2 else viter617) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 6) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.ownerType is not None: + oprot.writeFieldBegin("ownerType", TType.I32, 7) + oprot.writeI32(self.ownerType) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 8) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ResourceUri: + """ + Attributes: + - resourceType + - uri + + """ + + def __init__( + self, + resourceType=None, + uri=None, + ): + self.resourceType = resourceType + self.uri = uri + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.resourceType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.uri = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ResourceUri") + if self.resourceType is not None: + oprot.writeFieldBegin("resourceType", TType.I32, 1) + oprot.writeI32(self.resourceType) + oprot.writeFieldEnd() + if self.uri is not None: + oprot.writeFieldBegin("uri", TType.STRING, 2) + oprot.writeString(self.uri.encode("utf-8") if sys.version_info[0] == 2 else self.uri) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Function: + """ + Attributes: + - functionName + - dbName + - className + - ownerName + - ownerType + - createTime + - functionType + - resourceUris + - catName + + """ + + def __init__( + self, + functionName=None, + dbName=None, + className=None, + ownerName=None, + ownerType=None, + createTime=None, + functionType=None, + resourceUris=None, + catName=None, + ): + self.functionName = functionName + self.dbName = dbName + self.className = className + self.ownerName = ownerName + self.ownerType = ownerType + self.createTime = createTime + self.functionType = functionType + self.resourceUris = resourceUris + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.functionName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.className = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.ownerType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.functionType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.resourceUris = [] + (_etype621, _size618) = iprot.readListBegin() + for _i622 in range(_size618): + _elem623 = ResourceUri() + _elem623.read(iprot) + self.resourceUris.append(_elem623) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Function") + if self.functionName is not None: + oprot.writeFieldBegin("functionName", TType.STRING, 1) + oprot.writeString(self.functionName.encode("utf-8") if sys.version_info[0] == 2 else self.functionName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.className is not None: + oprot.writeFieldBegin("className", TType.STRING, 3) + oprot.writeString(self.className.encode("utf-8") if sys.version_info[0] == 2 else self.className) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 4) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.ownerType is not None: + oprot.writeFieldBegin("ownerType", TType.I32, 5) + oprot.writeI32(self.ownerType) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 6) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.functionType is not None: + oprot.writeFieldBegin("functionType", TType.I32, 7) + oprot.writeI32(self.functionType) + oprot.writeFieldEnd() + if self.resourceUris is not None: + oprot.writeFieldBegin("resourceUris", TType.LIST, 8) + oprot.writeListBegin(TType.STRUCT, len(self.resourceUris)) + for iter624 in self.resourceUris: + iter624.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 9) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TxnInfo: + """ + Attributes: + - id + - state + - user + - hostname + - agentInfo + - heartbeatCount + - metaInfo + - startedTime + - lastHeartbeatTime + + """ + + def __init__( + self, + id=None, + state=None, + user=None, + hostname=None, + agentInfo="Unknown", + heartbeatCount=0, + metaInfo=None, + startedTime=None, + lastHeartbeatTime=None, + ): + self.id = id + self.state = state + self.user = user + self.hostname = hostname + self.agentInfo = agentInfo + self.heartbeatCount = heartbeatCount + self.metaInfo = metaInfo + self.startedTime = startedTime + self.lastHeartbeatTime = lastHeartbeatTime + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.state = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.hostname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.agentInfo = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.heartbeatCount = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.metaInfo = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.I64: + self.startedTime = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I64: + self.lastHeartbeatTime = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TxnInfo") + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 1) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.I32, 2) + oprot.writeI32(self.state) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 3) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.hostname is not None: + oprot.writeFieldBegin("hostname", TType.STRING, 4) + oprot.writeString(self.hostname.encode("utf-8") if sys.version_info[0] == 2 else self.hostname) + oprot.writeFieldEnd() + if self.agentInfo is not None: + oprot.writeFieldBegin("agentInfo", TType.STRING, 5) + oprot.writeString(self.agentInfo.encode("utf-8") if sys.version_info[0] == 2 else self.agentInfo) + oprot.writeFieldEnd() + if self.heartbeatCount is not None: + oprot.writeFieldBegin("heartbeatCount", TType.I32, 6) + oprot.writeI32(self.heartbeatCount) + oprot.writeFieldEnd() + if self.metaInfo is not None: + oprot.writeFieldBegin("metaInfo", TType.STRING, 7) + oprot.writeString(self.metaInfo.encode("utf-8") if sys.version_info[0] == 2 else self.metaInfo) + oprot.writeFieldEnd() + if self.startedTime is not None: + oprot.writeFieldBegin("startedTime", TType.I64, 8) + oprot.writeI64(self.startedTime) + oprot.writeFieldEnd() + if self.lastHeartbeatTime is not None: + oprot.writeFieldBegin("lastHeartbeatTime", TType.I64, 9) + oprot.writeI64(self.lastHeartbeatTime) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.id is None: + raise TProtocolException(message="Required field id is unset!") + if self.state is None: + raise TProtocolException(message="Required field state is unset!") + if self.user is None: + raise TProtocolException(message="Required field user is unset!") + if self.hostname is None: + raise TProtocolException(message="Required field hostname is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetOpenTxnsInfoResponse: + """ + Attributes: + - txn_high_water_mark + - open_txns + + """ + + def __init__( + self, + txn_high_water_mark=None, + open_txns=None, + ): + self.txn_high_water_mark = txn_high_water_mark + self.open_txns = open_txns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txn_high_water_mark = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.open_txns = [] + (_etype628, _size625) = iprot.readListBegin() + for _i629 in range(_size625): + _elem630 = TxnInfo() + _elem630.read(iprot) + self.open_txns.append(_elem630) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetOpenTxnsInfoResponse") + if self.txn_high_water_mark is not None: + oprot.writeFieldBegin("txn_high_water_mark", TType.I64, 1) + oprot.writeI64(self.txn_high_water_mark) + oprot.writeFieldEnd() + if self.open_txns is not None: + oprot.writeFieldBegin("open_txns", TType.LIST, 2) + oprot.writeListBegin(TType.STRUCT, len(self.open_txns)) + for iter631 in self.open_txns: + iter631.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txn_high_water_mark is None: + raise TProtocolException(message="Required field txn_high_water_mark is unset!") + if self.open_txns is None: + raise TProtocolException(message="Required field open_txns is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetOpenTxnsResponse: + """ + Attributes: + - txn_high_water_mark + - open_txns + - min_open_txn + - abortedBits + + """ + + def __init__( + self, + txn_high_water_mark=None, + open_txns=None, + min_open_txn=None, + abortedBits=None, + ): + self.txn_high_water_mark = txn_high_water_mark + self.open_txns = open_txns + self.min_open_txn = min_open_txn + self.abortedBits = abortedBits + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txn_high_water_mark = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.open_txns = [] + (_etype635, _size632) = iprot.readListBegin() + for _i636 in range(_size632): + _elem637 = iprot.readI64() + self.open_txns.append(_elem637) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.min_open_txn = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.abortedBits = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetOpenTxnsResponse") + if self.txn_high_water_mark is not None: + oprot.writeFieldBegin("txn_high_water_mark", TType.I64, 1) + oprot.writeI64(self.txn_high_water_mark) + oprot.writeFieldEnd() + if self.open_txns is not None: + oprot.writeFieldBegin("open_txns", TType.LIST, 2) + oprot.writeListBegin(TType.I64, len(self.open_txns)) + for iter638 in self.open_txns: + oprot.writeI64(iter638) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.min_open_txn is not None: + oprot.writeFieldBegin("min_open_txn", TType.I64, 3) + oprot.writeI64(self.min_open_txn) + oprot.writeFieldEnd() + if self.abortedBits is not None: + oprot.writeFieldBegin("abortedBits", TType.STRING, 4) + oprot.writeBinary(self.abortedBits) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txn_high_water_mark is None: + raise TProtocolException(message="Required field txn_high_water_mark is unset!") + if self.open_txns is None: + raise TProtocolException(message="Required field open_txns is unset!") + if self.abortedBits is None: + raise TProtocolException(message="Required field abortedBits is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class OpenTxnRequest: + """ + Attributes: + - num_txns + - user + - hostname + - agentInfo + - replPolicy + - replSrcTxnIds + - txn_type + + """ + + def __init__( + self, + num_txns=None, + user=None, + hostname=None, + agentInfo="Unknown", + replPolicy=None, + replSrcTxnIds=None, + txn_type=0, + ): + self.num_txns = num_txns + self.user = user + self.hostname = hostname + self.agentInfo = agentInfo + self.replPolicy = replPolicy + self.replSrcTxnIds = replSrcTxnIds + self.txn_type = txn_type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.num_txns = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.hostname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.agentInfo = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.replPolicy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.replSrcTxnIds = [] + (_etype642, _size639) = iprot.readListBegin() + for _i643 in range(_size639): + _elem644 = iprot.readI64() + self.replSrcTxnIds.append(_elem644) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.txn_type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("OpenTxnRequest") + if self.num_txns is not None: + oprot.writeFieldBegin("num_txns", TType.I32, 1) + oprot.writeI32(self.num_txns) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 2) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.hostname is not None: + oprot.writeFieldBegin("hostname", TType.STRING, 3) + oprot.writeString(self.hostname.encode("utf-8") if sys.version_info[0] == 2 else self.hostname) + oprot.writeFieldEnd() + if self.agentInfo is not None: + oprot.writeFieldBegin("agentInfo", TType.STRING, 4) + oprot.writeString(self.agentInfo.encode("utf-8") if sys.version_info[0] == 2 else self.agentInfo) + oprot.writeFieldEnd() + if self.replPolicy is not None: + oprot.writeFieldBegin("replPolicy", TType.STRING, 5) + oprot.writeString(self.replPolicy.encode("utf-8") if sys.version_info[0] == 2 else self.replPolicy) + oprot.writeFieldEnd() + if self.replSrcTxnIds is not None: + oprot.writeFieldBegin("replSrcTxnIds", TType.LIST, 6) + oprot.writeListBegin(TType.I64, len(self.replSrcTxnIds)) + for iter645 in self.replSrcTxnIds: + oprot.writeI64(iter645) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.txn_type is not None: + oprot.writeFieldBegin("txn_type", TType.I32, 7) + oprot.writeI32(self.txn_type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.num_txns is None: + raise TProtocolException(message="Required field num_txns is unset!") + if self.user is None: + raise TProtocolException(message="Required field user is unset!") + if self.hostname is None: + raise TProtocolException(message="Required field hostname is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class OpenTxnsResponse: + """ + Attributes: + - txn_ids + + """ + + def __init__( + self, + txn_ids=None, + ): + self.txn_ids = txn_ids + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.txn_ids = [] + (_etype649, _size646) = iprot.readListBegin() + for _i650 in range(_size646): + _elem651 = iprot.readI64() + self.txn_ids.append(_elem651) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("OpenTxnsResponse") + if self.txn_ids is not None: + oprot.writeFieldBegin("txn_ids", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.txn_ids)) + for iter652 in self.txn_ids: + oprot.writeI64(iter652) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txn_ids is None: + raise TProtocolException(message="Required field txn_ids is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AbortTxnRequest: + """ + Attributes: + - txnid + - replPolicy + - txn_type + + """ + + def __init__( + self, + txnid=None, + replPolicy=None, + txn_type=None, + ): + self.txnid = txnid + self.replPolicy = replPolicy + self.txn_type = txn_type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.replPolicy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.txn_type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AbortTxnRequest") + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 1) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.replPolicy is not None: + oprot.writeFieldBegin("replPolicy", TType.STRING, 2) + oprot.writeString(self.replPolicy.encode("utf-8") if sys.version_info[0] == 2 else self.replPolicy) + oprot.writeFieldEnd() + if self.txn_type is not None: + oprot.writeFieldBegin("txn_type", TType.I32, 3) + oprot.writeI32(self.txn_type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnid is None: + raise TProtocolException(message="Required field txnid is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AbortTxnsRequest: + """ + Attributes: + - txn_ids + + """ + + def __init__( + self, + txn_ids=None, + ): + self.txn_ids = txn_ids + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.txn_ids = [] + (_etype656, _size653) = iprot.readListBegin() + for _i657 in range(_size653): + _elem658 = iprot.readI64() + self.txn_ids.append(_elem658) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AbortTxnsRequest") + if self.txn_ids is not None: + oprot.writeFieldBegin("txn_ids", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.txn_ids)) + for iter659 in self.txn_ids: + oprot.writeI64(iter659) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txn_ids is None: + raise TProtocolException(message="Required field txn_ids is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CommitTxnKeyValue: + """ + Attributes: + - tableId + - key + - value + + """ + + def __init__( + self, + tableId=None, + key=None, + value=None, + ): + self.tableId = tableId + self.key = key + self.value = value + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.key = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.value = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CommitTxnKeyValue") + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 1) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + if self.key is not None: + oprot.writeFieldBegin("key", TType.STRING, 2) + oprot.writeString(self.key.encode("utf-8") if sys.version_info[0] == 2 else self.key) + oprot.writeFieldEnd() + if self.value is not None: + oprot.writeFieldBegin("value", TType.STRING, 3) + oprot.writeString(self.value.encode("utf-8") if sys.version_info[0] == 2 else self.value) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.tableId is None: + raise TProtocolException(message="Required field tableId is unset!") + if self.key is None: + raise TProtocolException(message="Required field key is unset!") + if self.value is None: + raise TProtocolException(message="Required field value is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WriteEventInfo: + """ + Attributes: + - writeId + - database + - table + - files + - partition + - tableObj + - partitionObj + + """ + + def __init__( + self, + writeId=None, + database=None, + table=None, + files=None, + partition=None, + tableObj=None, + partitionObj=None, + ): + self.writeId = writeId + self.database = database + self.table = table + self.files = files + self.partition = partition + self.tableObj = tableObj + self.partitionObj = partitionObj + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.database = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.files = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.partition = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.tableObj = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.partitionObj = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WriteEventInfo") + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 1) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.database is not None: + oprot.writeFieldBegin("database", TType.STRING, 2) + oprot.writeString(self.database.encode("utf-8") if sys.version_info[0] == 2 else self.database) + oprot.writeFieldEnd() + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRING, 3) + oprot.writeString(self.table.encode("utf-8") if sys.version_info[0] == 2 else self.table) + oprot.writeFieldEnd() + if self.files is not None: + oprot.writeFieldBegin("files", TType.STRING, 4) + oprot.writeString(self.files.encode("utf-8") if sys.version_info[0] == 2 else self.files) + oprot.writeFieldEnd() + if self.partition is not None: + oprot.writeFieldBegin("partition", TType.STRING, 5) + oprot.writeString(self.partition.encode("utf-8") if sys.version_info[0] == 2 else self.partition) + oprot.writeFieldEnd() + if self.tableObj is not None: + oprot.writeFieldBegin("tableObj", TType.STRING, 6) + oprot.writeString(self.tableObj.encode("utf-8") if sys.version_info[0] == 2 else self.tableObj) + oprot.writeFieldEnd() + if self.partitionObj is not None: + oprot.writeFieldBegin("partitionObj", TType.STRING, 7) + oprot.writeString(self.partitionObj.encode("utf-8") if sys.version_info[0] == 2 else self.partitionObj) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.writeId is None: + raise TProtocolException(message="Required field writeId is unset!") + if self.database is None: + raise TProtocolException(message="Required field database is unset!") + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + if self.files is None: + raise TProtocolException(message="Required field files is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ReplLastIdInfo: + """ + Attributes: + - database + - lastReplId + - table + - catalog + - partitionList + + """ + + def __init__( + self, + database=None, + lastReplId=None, + table=None, + catalog=None, + partitionList=None, + ): + self.database = database + self.lastReplId = lastReplId + self.table = table + self.catalog = catalog + self.partitionList = partitionList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.database = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.lastReplId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.catalog = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.partitionList = [] + (_etype663, _size660) = iprot.readListBegin() + for _i664 in range(_size660): + _elem665 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partitionList.append(_elem665) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ReplLastIdInfo") + if self.database is not None: + oprot.writeFieldBegin("database", TType.STRING, 1) + oprot.writeString(self.database.encode("utf-8") if sys.version_info[0] == 2 else self.database) + oprot.writeFieldEnd() + if self.lastReplId is not None: + oprot.writeFieldBegin("lastReplId", TType.I64, 2) + oprot.writeI64(self.lastReplId) + oprot.writeFieldEnd() + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRING, 3) + oprot.writeString(self.table.encode("utf-8") if sys.version_info[0] == 2 else self.table) + oprot.writeFieldEnd() + if self.catalog is not None: + oprot.writeFieldBegin("catalog", TType.STRING, 4) + oprot.writeString(self.catalog.encode("utf-8") if sys.version_info[0] == 2 else self.catalog) + oprot.writeFieldEnd() + if self.partitionList is not None: + oprot.writeFieldBegin("partitionList", TType.LIST, 5) + oprot.writeListBegin(TType.STRING, len(self.partitionList)) + for iter666 in self.partitionList: + oprot.writeString(iter666.encode("utf-8") if sys.version_info[0] == 2 else iter666) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.database is None: + raise TProtocolException(message="Required field database is unset!") + if self.lastReplId is None: + raise TProtocolException(message="Required field lastReplId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UpdateTransactionalStatsRequest: + """ + Attributes: + - tableId + - insertCount + - updatedCount + - deletedCount + + """ + + def __init__( + self, + tableId=None, + insertCount=None, + updatedCount=None, + deletedCount=None, + ): + self.tableId = tableId + self.insertCount = insertCount + self.updatedCount = updatedCount + self.deletedCount = deletedCount + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.tableId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.insertCount = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.updatedCount = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.deletedCount = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UpdateTransactionalStatsRequest") + if self.tableId is not None: + oprot.writeFieldBegin("tableId", TType.I64, 1) + oprot.writeI64(self.tableId) + oprot.writeFieldEnd() + if self.insertCount is not None: + oprot.writeFieldBegin("insertCount", TType.I64, 2) + oprot.writeI64(self.insertCount) + oprot.writeFieldEnd() + if self.updatedCount is not None: + oprot.writeFieldBegin("updatedCount", TType.I64, 3) + oprot.writeI64(self.updatedCount) + oprot.writeFieldEnd() + if self.deletedCount is not None: + oprot.writeFieldBegin("deletedCount", TType.I64, 4) + oprot.writeI64(self.deletedCount) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.tableId is None: + raise TProtocolException(message="Required field tableId is unset!") + if self.insertCount is None: + raise TProtocolException(message="Required field insertCount is unset!") + if self.updatedCount is None: + raise TProtocolException(message="Required field updatedCount is unset!") + if self.deletedCount is None: + raise TProtocolException(message="Required field deletedCount is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CommitTxnRequest: + """ + Attributes: + - txnid + - replPolicy + - writeEventInfos + - replLastIdInfo + - keyValue + - exclWriteEnabled + - txn_type + + """ + + def __init__( + self, + txnid=None, + replPolicy=None, + writeEventInfos=None, + replLastIdInfo=None, + keyValue=None, + exclWriteEnabled=True, + txn_type=None, + ): + self.txnid = txnid + self.replPolicy = replPolicy + self.writeEventInfos = writeEventInfos + self.replLastIdInfo = replLastIdInfo + self.keyValue = keyValue + self.exclWriteEnabled = exclWriteEnabled + self.txn_type = txn_type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.replPolicy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.writeEventInfos = [] + (_etype670, _size667) = iprot.readListBegin() + for _i671 in range(_size667): + _elem672 = WriteEventInfo() + _elem672.read(iprot) + self.writeEventInfos.append(_elem672) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.replLastIdInfo = ReplLastIdInfo() + self.replLastIdInfo.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.keyValue = CommitTxnKeyValue() + self.keyValue.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.exclWriteEnabled = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.txn_type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CommitTxnRequest") + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 1) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.replPolicy is not None: + oprot.writeFieldBegin("replPolicy", TType.STRING, 2) + oprot.writeString(self.replPolicy.encode("utf-8") if sys.version_info[0] == 2 else self.replPolicy) + oprot.writeFieldEnd() + if self.writeEventInfos is not None: + oprot.writeFieldBegin("writeEventInfos", TType.LIST, 3) + oprot.writeListBegin(TType.STRUCT, len(self.writeEventInfos)) + for iter673 in self.writeEventInfos: + iter673.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.replLastIdInfo is not None: + oprot.writeFieldBegin("replLastIdInfo", TType.STRUCT, 4) + self.replLastIdInfo.write(oprot) + oprot.writeFieldEnd() + if self.keyValue is not None: + oprot.writeFieldBegin("keyValue", TType.STRUCT, 5) + self.keyValue.write(oprot) + oprot.writeFieldEnd() + if self.exclWriteEnabled is not None: + oprot.writeFieldBegin("exclWriteEnabled", TType.BOOL, 6) + oprot.writeBool(self.exclWriteEnabled) + oprot.writeFieldEnd() + if self.txn_type is not None: + oprot.writeFieldBegin("txn_type", TType.I32, 7) + oprot.writeI32(self.txn_type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnid is None: + raise TProtocolException(message="Required field txnid is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ReplTblWriteIdStateRequest: + """ + Attributes: + - validWriteIdlist + - user + - hostName + - dbName + - tableName + - partNames + + """ + + def __init__( + self, + validWriteIdlist=None, + user=None, + hostName=None, + dbName=None, + tableName=None, + partNames=None, + ): + self.validWriteIdlist = validWriteIdlist + self.user = user + self.hostName = hostName + self.dbName = dbName + self.tableName = tableName + self.partNames = partNames + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.validWriteIdlist = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.hostName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.partNames = [] + (_etype677, _size674) = iprot.readListBegin() + for _i678 in range(_size674): + _elem679 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partNames.append(_elem679) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ReplTblWriteIdStateRequest") + if self.validWriteIdlist is not None: + oprot.writeFieldBegin("validWriteIdlist", TType.STRING, 1) + oprot.writeString(self.validWriteIdlist.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdlist) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 2) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.hostName is not None: + oprot.writeFieldBegin("hostName", TType.STRING, 3) + oprot.writeString(self.hostName.encode("utf-8") if sys.version_info[0] == 2 else self.hostName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 4) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 5) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.partNames is not None: + oprot.writeFieldBegin("partNames", TType.LIST, 6) + oprot.writeListBegin(TType.STRING, len(self.partNames)) + for iter680 in self.partNames: + oprot.writeString(iter680.encode("utf-8") if sys.version_info[0] == 2 else iter680) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.validWriteIdlist is None: + raise TProtocolException(message="Required field validWriteIdlist is unset!") + if self.user is None: + raise TProtocolException(message="Required field user is unset!") + if self.hostName is None: + raise TProtocolException(message="Required field hostName is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetValidWriteIdsRequest: + """ + Attributes: + - fullTableNames + - validTxnList + - writeId + + """ + + def __init__( + self, + fullTableNames=None, + validTxnList=None, + writeId=None, + ): + self.fullTableNames = fullTableNames + self.validTxnList = validTxnList + self.writeId = writeId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fullTableNames = [] + (_etype684, _size681) = iprot.readListBegin() + for _i685 in range(_size681): + _elem686 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.fullTableNames.append(_elem686) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.validTxnList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetValidWriteIdsRequest") + if self.fullTableNames is not None: + oprot.writeFieldBegin("fullTableNames", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.fullTableNames)) + for iter687 in self.fullTableNames: + oprot.writeString(iter687.encode("utf-8") if sys.version_info[0] == 2 else iter687) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.validTxnList is not None: + oprot.writeFieldBegin("validTxnList", TType.STRING, 2) + oprot.writeString(self.validTxnList.encode("utf-8") if sys.version_info[0] == 2 else self.validTxnList) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 3) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fullTableNames is None: + raise TProtocolException(message="Required field fullTableNames is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TableValidWriteIds: + """ + Attributes: + - fullTableName + - writeIdHighWaterMark + - invalidWriteIds + - minOpenWriteId + - abortedBits + + """ + + def __init__( + self, + fullTableName=None, + writeIdHighWaterMark=None, + invalidWriteIds=None, + minOpenWriteId=None, + abortedBits=None, + ): + self.fullTableName = fullTableName + self.writeIdHighWaterMark = writeIdHighWaterMark + self.invalidWriteIds = invalidWriteIds + self.minOpenWriteId = minOpenWriteId + self.abortedBits = abortedBits + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.fullTableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.writeIdHighWaterMark = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.invalidWriteIds = [] + (_etype691, _size688) = iprot.readListBegin() + for _i692 in range(_size688): + _elem693 = iprot.readI64() + self.invalidWriteIds.append(_elem693) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.minOpenWriteId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.abortedBits = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TableValidWriteIds") + if self.fullTableName is not None: + oprot.writeFieldBegin("fullTableName", TType.STRING, 1) + oprot.writeString(self.fullTableName.encode("utf-8") if sys.version_info[0] == 2 else self.fullTableName) + oprot.writeFieldEnd() + if self.writeIdHighWaterMark is not None: + oprot.writeFieldBegin("writeIdHighWaterMark", TType.I64, 2) + oprot.writeI64(self.writeIdHighWaterMark) + oprot.writeFieldEnd() + if self.invalidWriteIds is not None: + oprot.writeFieldBegin("invalidWriteIds", TType.LIST, 3) + oprot.writeListBegin(TType.I64, len(self.invalidWriteIds)) + for iter694 in self.invalidWriteIds: + oprot.writeI64(iter694) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.minOpenWriteId is not None: + oprot.writeFieldBegin("minOpenWriteId", TType.I64, 4) + oprot.writeI64(self.minOpenWriteId) + oprot.writeFieldEnd() + if self.abortedBits is not None: + oprot.writeFieldBegin("abortedBits", TType.STRING, 5) + oprot.writeBinary(self.abortedBits) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fullTableName is None: + raise TProtocolException(message="Required field fullTableName is unset!") + if self.writeIdHighWaterMark is None: + raise TProtocolException(message="Required field writeIdHighWaterMark is unset!") + if self.invalidWriteIds is None: + raise TProtocolException(message="Required field invalidWriteIds is unset!") + if self.abortedBits is None: + raise TProtocolException(message="Required field abortedBits is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetValidWriteIdsResponse: + """ + Attributes: + - tblValidWriteIds + + """ + + def __init__( + self, + tblValidWriteIds=None, + ): + self.tblValidWriteIds = tblValidWriteIds + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.tblValidWriteIds = [] + (_etype698, _size695) = iprot.readListBegin() + for _i699 in range(_size695): + _elem700 = TableValidWriteIds() + _elem700.read(iprot) + self.tblValidWriteIds.append(_elem700) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetValidWriteIdsResponse") + if self.tblValidWriteIds is not None: + oprot.writeFieldBegin("tblValidWriteIds", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.tblValidWriteIds)) + for iter701 in self.tblValidWriteIds: + iter701.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.tblValidWriteIds is None: + raise TProtocolException(message="Required field tblValidWriteIds is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TxnToWriteId: + """ + Attributes: + - txnId + - writeId + + """ + + def __init__( + self, + txnId=None, + writeId=None, + ): + self.txnId = txnId + self.writeId = writeId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txnId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TxnToWriteId") + if self.txnId is not None: + oprot.writeFieldBegin("txnId", TType.I64, 1) + oprot.writeI64(self.txnId) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 2) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnId is None: + raise TProtocolException(message="Required field txnId is unset!") + if self.writeId is None: + raise TProtocolException(message="Required field writeId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AllocateTableWriteIdsRequest: + """ + Attributes: + - dbName + - tableName + - txnIds + - replPolicy + - srcTxnToWriteIdList + + """ + + def __init__( + self, + dbName=None, + tableName=None, + txnIds=None, + replPolicy=None, + srcTxnToWriteIdList=None, + ): + self.dbName = dbName + self.tableName = tableName + self.txnIds = txnIds + self.replPolicy = replPolicy + self.srcTxnToWriteIdList = srcTxnToWriteIdList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.txnIds = [] + (_etype705, _size702) = iprot.readListBegin() + for _i706 in range(_size702): + _elem707 = iprot.readI64() + self.txnIds.append(_elem707) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.replPolicy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.srcTxnToWriteIdList = [] + (_etype711, _size708) = iprot.readListBegin() + for _i712 in range(_size708): + _elem713 = TxnToWriteId() + _elem713.read(iprot) + self.srcTxnToWriteIdList.append(_elem713) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AllocateTableWriteIdsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 2) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.txnIds is not None: + oprot.writeFieldBegin("txnIds", TType.LIST, 3) + oprot.writeListBegin(TType.I64, len(self.txnIds)) + for iter714 in self.txnIds: + oprot.writeI64(iter714) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.replPolicy is not None: + oprot.writeFieldBegin("replPolicy", TType.STRING, 4) + oprot.writeString(self.replPolicy.encode("utf-8") if sys.version_info[0] == 2 else self.replPolicy) + oprot.writeFieldEnd() + if self.srcTxnToWriteIdList is not None: + oprot.writeFieldBegin("srcTxnToWriteIdList", TType.LIST, 5) + oprot.writeListBegin(TType.STRUCT, len(self.srcTxnToWriteIdList)) + for iter715 in self.srcTxnToWriteIdList: + iter715.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AllocateTableWriteIdsResponse: + """ + Attributes: + - txnToWriteIds + + """ + + def __init__( + self, + txnToWriteIds=None, + ): + self.txnToWriteIds = txnToWriteIds + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.txnToWriteIds = [] + (_etype719, _size716) = iprot.readListBegin() + for _i720 in range(_size716): + _elem721 = TxnToWriteId() + _elem721.read(iprot) + self.txnToWriteIds.append(_elem721) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AllocateTableWriteIdsResponse") + if self.txnToWriteIds is not None: + oprot.writeFieldBegin("txnToWriteIds", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.txnToWriteIds)) + for iter722 in self.txnToWriteIds: + iter722.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnToWriteIds is None: + raise TProtocolException(message="Required field txnToWriteIds is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class MaxAllocatedTableWriteIdRequest: + """ + Attributes: + - dbName + - tableName + + """ + + def __init__( + self, + dbName=None, + tableName=None, + ): + self.dbName = dbName + self.tableName = tableName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("MaxAllocatedTableWriteIdRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 2) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class MaxAllocatedTableWriteIdResponse: + """ + Attributes: + - maxWriteId + + """ + + def __init__( + self, + maxWriteId=None, + ): + self.maxWriteId = maxWriteId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.maxWriteId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("MaxAllocatedTableWriteIdResponse") + if self.maxWriteId is not None: + oprot.writeFieldBegin("maxWriteId", TType.I64, 1) + oprot.writeI64(self.maxWriteId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.maxWriteId is None: + raise TProtocolException(message="Required field maxWriteId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SeedTableWriteIdsRequest: + """ + Attributes: + - dbName + - tableName + - seedWriteId + + """ + + def __init__( + self, + dbName=None, + tableName=None, + seedWriteId=None, + ): + self.dbName = dbName + self.tableName = tableName + self.seedWriteId = seedWriteId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.seedWriteId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SeedTableWriteIdsRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 2) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.seedWriteId is not None: + oprot.writeFieldBegin("seedWriteId", TType.I64, 3) + oprot.writeI64(self.seedWriteId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + if self.seedWriteId is None: + raise TProtocolException(message="Required field seedWriteId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SeedTxnIdRequest: + """ + Attributes: + - seedTxnId + + """ + + def __init__( + self, + seedTxnId=None, + ): + self.seedTxnId = seedTxnId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.seedTxnId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SeedTxnIdRequest") + if self.seedTxnId is not None: + oprot.writeFieldBegin("seedTxnId", TType.I64, 1) + oprot.writeI64(self.seedTxnId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.seedTxnId is None: + raise TProtocolException(message="Required field seedTxnId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class LockComponent: + """ + Attributes: + - type + - level + - dbname + - tablename + - partitionname + - operationType + - isTransactional + - isDynamicPartitionWrite + + """ + + def __init__( + self, + type=None, + level=None, + dbname=None, + tablename=None, + partitionname=None, + operationType=5, + isTransactional=False, + isDynamicPartitionWrite=False, + ): + self.type = type + self.level = level + self.dbname = dbname + self.tablename = tablename + self.partitionname = partitionname + self.operationType = operationType + self.isTransactional = isTransactional + self.isDynamicPartitionWrite = isDynamicPartitionWrite + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.level = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.partitionname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.operationType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.isTransactional = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.isDynamicPartitionWrite = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("LockComponent") + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 1) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.level is not None: + oprot.writeFieldBegin("level", TType.I32, 2) + oprot.writeI32(self.level) + oprot.writeFieldEnd() + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 3) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 4) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionname is not None: + oprot.writeFieldBegin("partitionname", TType.STRING, 5) + oprot.writeString(self.partitionname.encode("utf-8") if sys.version_info[0] == 2 else self.partitionname) + oprot.writeFieldEnd() + if self.operationType is not None: + oprot.writeFieldBegin("operationType", TType.I32, 6) + oprot.writeI32(self.operationType) + oprot.writeFieldEnd() + if self.isTransactional is not None: + oprot.writeFieldBegin("isTransactional", TType.BOOL, 7) + oprot.writeBool(self.isTransactional) + oprot.writeFieldEnd() + if self.isDynamicPartitionWrite is not None: + oprot.writeFieldBegin("isDynamicPartitionWrite", TType.BOOL, 8) + oprot.writeBool(self.isDynamicPartitionWrite) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + if self.level is None: + raise TProtocolException(message="Required field level is unset!") + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class LockRequest: + """ + Attributes: + - component + - txnid + - user + - hostname + - agentInfo + - zeroWaitReadEnabled + - exclusiveCTAS + + """ + + def __init__( + self, + component=None, + txnid=None, + user=None, + hostname=None, + agentInfo="Unknown", + zeroWaitReadEnabled=False, + exclusiveCTAS=False, + ): + self.component = component + self.txnid = txnid + self.user = user + self.hostname = hostname + self.agentInfo = agentInfo + self.zeroWaitReadEnabled = zeroWaitReadEnabled + self.exclusiveCTAS = exclusiveCTAS + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.component = [] + (_etype726, _size723) = iprot.readListBegin() + for _i727 in range(_size723): + _elem728 = LockComponent() + _elem728.read(iprot) + self.component.append(_elem728) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.hostname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.agentInfo = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.zeroWaitReadEnabled = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.exclusiveCTAS = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("LockRequest") + if self.component is not None: + oprot.writeFieldBegin("component", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.component)) + for iter729 in self.component: + iter729.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 2) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 3) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.hostname is not None: + oprot.writeFieldBegin("hostname", TType.STRING, 4) + oprot.writeString(self.hostname.encode("utf-8") if sys.version_info[0] == 2 else self.hostname) + oprot.writeFieldEnd() + if self.agentInfo is not None: + oprot.writeFieldBegin("agentInfo", TType.STRING, 5) + oprot.writeString(self.agentInfo.encode("utf-8") if sys.version_info[0] == 2 else self.agentInfo) + oprot.writeFieldEnd() + if self.zeroWaitReadEnabled is not None: + oprot.writeFieldBegin("zeroWaitReadEnabled", TType.BOOL, 6) + oprot.writeBool(self.zeroWaitReadEnabled) + oprot.writeFieldEnd() + if self.exclusiveCTAS is not None: + oprot.writeFieldBegin("exclusiveCTAS", TType.BOOL, 7) + oprot.writeBool(self.exclusiveCTAS) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.component is None: + raise TProtocolException(message="Required field component is unset!") + if self.user is None: + raise TProtocolException(message="Required field user is unset!") + if self.hostname is None: + raise TProtocolException(message="Required field hostname is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class LockResponse: + """ + Attributes: + - lockid + - state + - errorMessage + + """ + + def __init__( + self, + lockid=None, + state=None, + errorMessage=None, + ): + self.lockid = lockid + self.state = state + self.errorMessage = errorMessage + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lockid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.state = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.errorMessage = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("LockResponse") + if self.lockid is not None: + oprot.writeFieldBegin("lockid", TType.I64, 1) + oprot.writeI64(self.lockid) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.I32, 2) + oprot.writeI32(self.state) + oprot.writeFieldEnd() + if self.errorMessage is not None: + oprot.writeFieldBegin("errorMessage", TType.STRING, 3) + oprot.writeString(self.errorMessage.encode("utf-8") if sys.version_info[0] == 2 else self.errorMessage) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.lockid is None: + raise TProtocolException(message="Required field lockid is unset!") + if self.state is None: + raise TProtocolException(message="Required field state is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CheckLockRequest: + """ + Attributes: + - lockid + - txnid + - elapsed_ms + + """ + + def __init__( + self, + lockid=None, + txnid=None, + elapsed_ms=None, + ): + self.lockid = lockid + self.txnid = txnid + self.elapsed_ms = elapsed_ms + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lockid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.elapsed_ms = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CheckLockRequest") + if self.lockid is not None: + oprot.writeFieldBegin("lockid", TType.I64, 1) + oprot.writeI64(self.lockid) + oprot.writeFieldEnd() + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 2) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.elapsed_ms is not None: + oprot.writeFieldBegin("elapsed_ms", TType.I64, 3) + oprot.writeI64(self.elapsed_ms) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.lockid is None: + raise TProtocolException(message="Required field lockid is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UnlockRequest: + """ + Attributes: + - lockid + + """ + + def __init__( + self, + lockid=None, + ): + self.lockid = lockid + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lockid = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UnlockRequest") + if self.lockid is not None: + oprot.writeFieldBegin("lockid", TType.I64, 1) + oprot.writeI64(self.lockid) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.lockid is None: + raise TProtocolException(message="Required field lockid is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ShowLocksRequest: + """ + Attributes: + - dbname + - tablename + - partname + - isExtended + - txnid + + """ + + def __init__( + self, + dbname=None, + tablename=None, + partname=None, + isExtended=False, + txnid=None, + ): + self.dbname = dbname + self.tablename = tablename + self.partname = partname + self.isExtended = isExtended + self.txnid = txnid + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.partname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.isExtended = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ShowLocksRequest") + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 1) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 2) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partname is not None: + oprot.writeFieldBegin("partname", TType.STRING, 3) + oprot.writeString(self.partname.encode("utf-8") if sys.version_info[0] == 2 else self.partname) + oprot.writeFieldEnd() + if self.isExtended is not None: + oprot.writeFieldBegin("isExtended", TType.BOOL, 4) + oprot.writeBool(self.isExtended) + oprot.writeFieldEnd() + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 5) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ShowLocksResponseElement: + """ + Attributes: + - lockid + - dbname + - tablename + - partname + - state + - type + - txnid + - lastheartbeat + - acquiredat + - user + - hostname + - heartbeatCount + - agentInfo + - blockedByExtId + - blockedByIntId + - lockIdInternal + + """ + + def __init__( + self, + lockid=None, + dbname=None, + tablename=None, + partname=None, + state=None, + type=None, + txnid=None, + lastheartbeat=None, + acquiredat=None, + user=None, + hostname=None, + heartbeatCount=0, + agentInfo=None, + blockedByExtId=None, + blockedByIntId=None, + lockIdInternal=None, + ): + self.lockid = lockid + self.dbname = dbname + self.tablename = tablename + self.partname = partname + self.state = state + self.type = type + self.txnid = txnid + self.lastheartbeat = lastheartbeat + self.acquiredat = acquiredat + self.user = user + self.hostname = hostname + self.heartbeatCount = heartbeatCount + self.agentInfo = agentInfo + self.blockedByExtId = blockedByExtId + self.blockedByIntId = blockedByIntId + self.lockIdInternal = lockIdInternal + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lockid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.partname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.state = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.I64: + self.lastheartbeat = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I64: + self.acquiredat = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.STRING: + self.hostname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.I32: + self.heartbeatCount = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.STRING: + self.agentInfo = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 14: + if ftype == TType.I64: + self.blockedByExtId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 15: + if ftype == TType.I64: + self.blockedByIntId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 16: + if ftype == TType.I64: + self.lockIdInternal = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ShowLocksResponseElement") + if self.lockid is not None: + oprot.writeFieldBegin("lockid", TType.I64, 1) + oprot.writeI64(self.lockid) + oprot.writeFieldEnd() + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 2) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 3) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partname is not None: + oprot.writeFieldBegin("partname", TType.STRING, 4) + oprot.writeString(self.partname.encode("utf-8") if sys.version_info[0] == 2 else self.partname) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.I32, 5) + oprot.writeI32(self.state) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 6) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 7) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.lastheartbeat is not None: + oprot.writeFieldBegin("lastheartbeat", TType.I64, 8) + oprot.writeI64(self.lastheartbeat) + oprot.writeFieldEnd() + if self.acquiredat is not None: + oprot.writeFieldBegin("acquiredat", TType.I64, 9) + oprot.writeI64(self.acquiredat) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 10) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.hostname is not None: + oprot.writeFieldBegin("hostname", TType.STRING, 11) + oprot.writeString(self.hostname.encode("utf-8") if sys.version_info[0] == 2 else self.hostname) + oprot.writeFieldEnd() + if self.heartbeatCount is not None: + oprot.writeFieldBegin("heartbeatCount", TType.I32, 12) + oprot.writeI32(self.heartbeatCount) + oprot.writeFieldEnd() + if self.agentInfo is not None: + oprot.writeFieldBegin("agentInfo", TType.STRING, 13) + oprot.writeString(self.agentInfo.encode("utf-8") if sys.version_info[0] == 2 else self.agentInfo) + oprot.writeFieldEnd() + if self.blockedByExtId is not None: + oprot.writeFieldBegin("blockedByExtId", TType.I64, 14) + oprot.writeI64(self.blockedByExtId) + oprot.writeFieldEnd() + if self.blockedByIntId is not None: + oprot.writeFieldBegin("blockedByIntId", TType.I64, 15) + oprot.writeI64(self.blockedByIntId) + oprot.writeFieldEnd() + if self.lockIdInternal is not None: + oprot.writeFieldBegin("lockIdInternal", TType.I64, 16) + oprot.writeI64(self.lockIdInternal) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.lockid is None: + raise TProtocolException(message="Required field lockid is unset!") + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.state is None: + raise TProtocolException(message="Required field state is unset!") + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + if self.lastheartbeat is None: + raise TProtocolException(message="Required field lastheartbeat is unset!") + if self.user is None: + raise TProtocolException(message="Required field user is unset!") + if self.hostname is None: + raise TProtocolException(message="Required field hostname is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ShowLocksResponse: + """ + Attributes: + - locks + + """ + + def __init__( + self, + locks=None, + ): + self.locks = locks + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.locks = [] + (_etype733, _size730) = iprot.readListBegin() + for _i734 in range(_size730): + _elem735 = ShowLocksResponseElement() + _elem735.read(iprot) + self.locks.append(_elem735) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ShowLocksResponse") + if self.locks is not None: + oprot.writeFieldBegin("locks", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.locks)) + for iter736 in self.locks: + iter736.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class HeartbeatRequest: + """ + Attributes: + - lockid + - txnid + + """ + + def __init__( + self, + lockid=None, + txnid=None, + ): + self.lockid = lockid + self.txnid = txnid + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lockid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("HeartbeatRequest") + if self.lockid is not None: + oprot.writeFieldBegin("lockid", TType.I64, 1) + oprot.writeI64(self.lockid) + oprot.writeFieldEnd() + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 2) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class HeartbeatTxnRangeRequest: + """ + Attributes: + - min + - max + + """ + + def __init__( + self, + min=None, + max=None, + ): + self.min = min + self.max = max + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.min = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.max = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("HeartbeatTxnRangeRequest") + if self.min is not None: + oprot.writeFieldBegin("min", TType.I64, 1) + oprot.writeI64(self.min) + oprot.writeFieldEnd() + if self.max is not None: + oprot.writeFieldBegin("max", TType.I64, 2) + oprot.writeI64(self.max) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.min is None: + raise TProtocolException(message="Required field min is unset!") + if self.max is None: + raise TProtocolException(message="Required field max is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class HeartbeatTxnRangeResponse: + """ + Attributes: + - aborted + - nosuch + + """ + + def __init__( + self, + aborted=None, + nosuch=None, + ): + self.aborted = aborted + self.nosuch = nosuch + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.SET: + self.aborted = set() + (_etype740, _size737) = iprot.readSetBegin() + for _i741 in range(_size737): + _elem742 = iprot.readI64() + self.aborted.add(_elem742) + iprot.readSetEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.SET: + self.nosuch = set() + (_etype746, _size743) = iprot.readSetBegin() + for _i747 in range(_size743): + _elem748 = iprot.readI64() + self.nosuch.add(_elem748) + iprot.readSetEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("HeartbeatTxnRangeResponse") + if self.aborted is not None: + oprot.writeFieldBegin("aborted", TType.SET, 1) + oprot.writeSetBegin(TType.I64, len(self.aborted)) + for iter749 in self.aborted: + oprot.writeI64(iter749) + oprot.writeSetEnd() + oprot.writeFieldEnd() + if self.nosuch is not None: + oprot.writeFieldBegin("nosuch", TType.SET, 2) + oprot.writeSetBegin(TType.I64, len(self.nosuch)) + for iter750 in self.nosuch: + oprot.writeI64(iter750) + oprot.writeSetEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.aborted is None: + raise TProtocolException(message="Required field aborted is unset!") + if self.nosuch is None: + raise TProtocolException(message="Required field nosuch is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CompactionRequest: + """ + Attributes: + - dbname + - tablename + - partitionname + - type + - runas + - properties + - initiatorId + - initiatorVersion + + """ + + def __init__( + self, + dbname=None, + tablename=None, + partitionname=None, + type=None, + runas=None, + properties=None, + initiatorId=None, + initiatorVersion=None, + ): + self.dbname = dbname + self.tablename = tablename + self.partitionname = partitionname + self.type = type + self.runas = runas + self.properties = properties + self.initiatorId = initiatorId + self.initiatorVersion = initiatorVersion + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.partitionname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.runas = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.MAP: + self.properties = {} + (_ktype752, _vtype753, _size751) = iprot.readMapBegin() + for _i755 in range(_size751): + _key756 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val757 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.properties[_key756] = _val757 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.initiatorId = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.initiatorVersion = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CompactionRequest") + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 1) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 2) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionname is not None: + oprot.writeFieldBegin("partitionname", TType.STRING, 3) + oprot.writeString(self.partitionname.encode("utf-8") if sys.version_info[0] == 2 else self.partitionname) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 4) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.runas is not None: + oprot.writeFieldBegin("runas", TType.STRING, 5) + oprot.writeString(self.runas.encode("utf-8") if sys.version_info[0] == 2 else self.runas) + oprot.writeFieldEnd() + if self.properties is not None: + oprot.writeFieldBegin("properties", TType.MAP, 6) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.properties)) + for kiter758, viter759 in self.properties.items(): + oprot.writeString(kiter758.encode("utf-8") if sys.version_info[0] == 2 else kiter758) + oprot.writeString(viter759.encode("utf-8") if sys.version_info[0] == 2 else viter759) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.initiatorId is not None: + oprot.writeFieldBegin("initiatorId", TType.STRING, 7) + oprot.writeString(self.initiatorId.encode("utf-8") if sys.version_info[0] == 2 else self.initiatorId) + oprot.writeFieldEnd() + if self.initiatorVersion is not None: + oprot.writeFieldBegin("initiatorVersion", TType.STRING, 8) + oprot.writeString(self.initiatorVersion.encode("utf-8") if sys.version_info[0] == 2 else self.initiatorVersion) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tablename is None: + raise TProtocolException(message="Required field tablename is unset!") + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CompactionInfoStruct: + """ + Attributes: + - id + - dbname + - tablename + - partitionname + - type + - runas + - properties + - toomanyaborts + - state + - workerId + - start + - highestWriteId + - errorMessage + - hasoldabort + - enqueueTime + - retryRetention + + """ + + def __init__( + self, + id=None, + dbname=None, + tablename=None, + partitionname=None, + type=None, + runas=None, + properties=None, + toomanyaborts=None, + state=None, + workerId=None, + start=None, + highestWriteId=None, + errorMessage=None, + hasoldabort=None, + enqueueTime=None, + retryRetention=None, + ): + self.id = id + self.dbname = dbname + self.tablename = tablename + self.partitionname = partitionname + self.type = type + self.runas = runas + self.properties = properties + self.toomanyaborts = toomanyaborts + self.state = state + self.workerId = workerId + self.start = start + self.highestWriteId = highestWriteId + self.errorMessage = errorMessage + self.hasoldabort = hasoldabort + self.enqueueTime = enqueueTime + self.retryRetention = retryRetention + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.partitionname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.runas = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.properties = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.toomanyaborts = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.state = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.workerId = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.I64: + self.start = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.I64: + self.highestWriteId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.STRING: + self.errorMessage = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 14: + if ftype == TType.BOOL: + self.hasoldabort = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 15: + if ftype == TType.I64: + self.enqueueTime = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 16: + if ftype == TType.I64: + self.retryRetention = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CompactionInfoStruct") + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 1) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 2) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 3) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionname is not None: + oprot.writeFieldBegin("partitionname", TType.STRING, 4) + oprot.writeString(self.partitionname.encode("utf-8") if sys.version_info[0] == 2 else self.partitionname) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 5) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.runas is not None: + oprot.writeFieldBegin("runas", TType.STRING, 6) + oprot.writeString(self.runas.encode("utf-8") if sys.version_info[0] == 2 else self.runas) + oprot.writeFieldEnd() + if self.properties is not None: + oprot.writeFieldBegin("properties", TType.STRING, 7) + oprot.writeString(self.properties.encode("utf-8") if sys.version_info[0] == 2 else self.properties) + oprot.writeFieldEnd() + if self.toomanyaborts is not None: + oprot.writeFieldBegin("toomanyaborts", TType.BOOL, 8) + oprot.writeBool(self.toomanyaborts) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.STRING, 9) + oprot.writeString(self.state.encode("utf-8") if sys.version_info[0] == 2 else self.state) + oprot.writeFieldEnd() + if self.workerId is not None: + oprot.writeFieldBegin("workerId", TType.STRING, 10) + oprot.writeString(self.workerId.encode("utf-8") if sys.version_info[0] == 2 else self.workerId) + oprot.writeFieldEnd() + if self.start is not None: + oprot.writeFieldBegin("start", TType.I64, 11) + oprot.writeI64(self.start) + oprot.writeFieldEnd() + if self.highestWriteId is not None: + oprot.writeFieldBegin("highestWriteId", TType.I64, 12) + oprot.writeI64(self.highestWriteId) + oprot.writeFieldEnd() + if self.errorMessage is not None: + oprot.writeFieldBegin("errorMessage", TType.STRING, 13) + oprot.writeString(self.errorMessage.encode("utf-8") if sys.version_info[0] == 2 else self.errorMessage) + oprot.writeFieldEnd() + if self.hasoldabort is not None: + oprot.writeFieldBegin("hasoldabort", TType.BOOL, 14) + oprot.writeBool(self.hasoldabort) + oprot.writeFieldEnd() + if self.enqueueTime is not None: + oprot.writeFieldBegin("enqueueTime", TType.I64, 15) + oprot.writeI64(self.enqueueTime) + oprot.writeFieldEnd() + if self.retryRetention is not None: + oprot.writeFieldBegin("retryRetention", TType.I64, 16) + oprot.writeI64(self.retryRetention) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.id is None: + raise TProtocolException(message="Required field id is unset!") + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tablename is None: + raise TProtocolException(message="Required field tablename is unset!") + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class OptionalCompactionInfoStruct: + """ + Attributes: + - ci + + """ + + def __init__( + self, + ci=None, + ): + self.ci = ci + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.ci = CompactionInfoStruct() + self.ci.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("OptionalCompactionInfoStruct") + if self.ci is not None: + oprot.writeFieldBegin("ci", TType.STRUCT, 1) + self.ci.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CompactionMetricsDataStruct: + """ + Attributes: + - dbname + - tblname + - partitionname + - type + - metricvalue + - version + - threshold + + """ + + def __init__( + self, + dbname=None, + tblname=None, + partitionname=None, + type=None, + metricvalue=None, + version=None, + threshold=None, + ): + self.dbname = dbname + self.tblname = tblname + self.partitionname = partitionname + self.type = type + self.metricvalue = metricvalue + self.version = version + self.threshold = threshold + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.partitionname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.metricvalue = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.version = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.threshold = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CompactionMetricsDataStruct") + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 1) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tblname is not None: + oprot.writeFieldBegin("tblname", TType.STRING, 2) + oprot.writeString(self.tblname.encode("utf-8") if sys.version_info[0] == 2 else self.tblname) + oprot.writeFieldEnd() + if self.partitionname is not None: + oprot.writeFieldBegin("partitionname", TType.STRING, 3) + oprot.writeString(self.partitionname.encode("utf-8") if sys.version_info[0] == 2 else self.partitionname) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 4) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.metricvalue is not None: + oprot.writeFieldBegin("metricvalue", TType.I32, 5) + oprot.writeI32(self.metricvalue) + oprot.writeFieldEnd() + if self.version is not None: + oprot.writeFieldBegin("version", TType.I32, 6) + oprot.writeI32(self.version) + oprot.writeFieldEnd() + if self.threshold is not None: + oprot.writeFieldBegin("threshold", TType.I32, 7) + oprot.writeI32(self.threshold) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tblname is None: + raise TProtocolException(message="Required field tblname is unset!") + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + if self.metricvalue is None: + raise TProtocolException(message="Required field metricvalue is unset!") + if self.version is None: + raise TProtocolException(message="Required field version is unset!") + if self.threshold is None: + raise TProtocolException(message="Required field threshold is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CompactionMetricsDataResponse: + """ + Attributes: + - data + + """ + + def __init__( + self, + data=None, + ): + self.data = data + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.data = CompactionMetricsDataStruct() + self.data.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CompactionMetricsDataResponse") + if self.data is not None: + oprot.writeFieldBegin("data", TType.STRUCT, 1) + self.data.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CompactionMetricsDataRequest: + """ + Attributes: + - dbName + - tblName + - partitionName + - type + + """ + + def __init__( + self, + dbName=None, + tblName=None, + partitionName=None, + type=None, + ): + self.dbName = dbName + self.tblName = tblName + self.partitionName = partitionName + self.type = type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.partitionName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CompactionMetricsDataRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.partitionName is not None: + oprot.writeFieldBegin("partitionName", TType.STRING, 3) + oprot.writeString(self.partitionName.encode("utf-8") if sys.version_info[0] == 2 else self.partitionName) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 4) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CompactionResponse: + """ + Attributes: + - id + - state + - accepted + - errormessage + + """ + + def __init__( + self, + id=None, + state=None, + accepted=None, + errormessage=None, + ): + self.id = id + self.state = state + self.accepted = accepted + self.errormessage = errormessage + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.state = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.accepted = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.errormessage = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CompactionResponse") + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 1) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.STRING, 2) + oprot.writeString(self.state.encode("utf-8") if sys.version_info[0] == 2 else self.state) + oprot.writeFieldEnd() + if self.accepted is not None: + oprot.writeFieldBegin("accepted", TType.BOOL, 3) + oprot.writeBool(self.accepted) + oprot.writeFieldEnd() + if self.errormessage is not None: + oprot.writeFieldBegin("errormessage", TType.STRING, 4) + oprot.writeString(self.errormessage.encode("utf-8") if sys.version_info[0] == 2 else self.errormessage) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.id is None: + raise TProtocolException(message="Required field id is unset!") + if self.state is None: + raise TProtocolException(message="Required field state is unset!") + if self.accepted is None: + raise TProtocolException(message="Required field accepted is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ShowCompactRequest: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ShowCompactRequest") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ShowCompactResponseElement: + """ + Attributes: + - dbname + - tablename + - partitionname + - type + - state + - workerid + - start + - runAs + - hightestTxnId + - metaInfo + - endTime + - hadoopJobId + - id + - errorMessage + - enqueueTime + - workerVersion + - initiatorId + - initiatorVersion + - cleanerStart + + """ + + def __init__( + self, + dbname=None, + tablename=None, + partitionname=None, + type=None, + state=None, + workerid=None, + start=None, + runAs=None, + hightestTxnId=None, + metaInfo=None, + endTime=None, + hadoopJobId="None", + id=None, + errorMessage=None, + enqueueTime=None, + workerVersion=None, + initiatorId=None, + initiatorVersion=None, + cleanerStart=None, + ): + self.dbname = dbname + self.tablename = tablename + self.partitionname = partitionname + self.type = type + self.state = state + self.workerid = workerid + self.start = start + self.runAs = runAs + self.hightestTxnId = hightestTxnId + self.metaInfo = metaInfo + self.endTime = endTime + self.hadoopJobId = hadoopJobId + self.id = id + self.errorMessage = errorMessage + self.enqueueTime = enqueueTime + self.workerVersion = workerVersion + self.initiatorId = initiatorId + self.initiatorVersion = initiatorVersion + self.cleanerStart = cleanerStart + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.partitionname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.state = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.workerid = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.start = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.runAs = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I64: + self.hightestTxnId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.metaInfo = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.I64: + self.endTime = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.STRING: + self.hadoopJobId = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 13: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 14: + if ftype == TType.STRING: + self.errorMessage = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 15: + if ftype == TType.I64: + self.enqueueTime = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 16: + if ftype == TType.STRING: + self.workerVersion = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 17: + if ftype == TType.STRING: + self.initiatorId = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 18: + if ftype == TType.STRING: + self.initiatorVersion = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 19: + if ftype == TType.I64: + self.cleanerStart = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ShowCompactResponseElement") + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 1) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 2) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionname is not None: + oprot.writeFieldBegin("partitionname", TType.STRING, 3) + oprot.writeString(self.partitionname.encode("utf-8") if sys.version_info[0] == 2 else self.partitionname) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 4) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.STRING, 5) + oprot.writeString(self.state.encode("utf-8") if sys.version_info[0] == 2 else self.state) + oprot.writeFieldEnd() + if self.workerid is not None: + oprot.writeFieldBegin("workerid", TType.STRING, 6) + oprot.writeString(self.workerid.encode("utf-8") if sys.version_info[0] == 2 else self.workerid) + oprot.writeFieldEnd() + if self.start is not None: + oprot.writeFieldBegin("start", TType.I64, 7) + oprot.writeI64(self.start) + oprot.writeFieldEnd() + if self.runAs is not None: + oprot.writeFieldBegin("runAs", TType.STRING, 8) + oprot.writeString(self.runAs.encode("utf-8") if sys.version_info[0] == 2 else self.runAs) + oprot.writeFieldEnd() + if self.hightestTxnId is not None: + oprot.writeFieldBegin("hightestTxnId", TType.I64, 9) + oprot.writeI64(self.hightestTxnId) + oprot.writeFieldEnd() + if self.metaInfo is not None: + oprot.writeFieldBegin("metaInfo", TType.STRING, 10) + oprot.writeString(self.metaInfo.encode("utf-8") if sys.version_info[0] == 2 else self.metaInfo) + oprot.writeFieldEnd() + if self.endTime is not None: + oprot.writeFieldBegin("endTime", TType.I64, 11) + oprot.writeI64(self.endTime) + oprot.writeFieldEnd() + if self.hadoopJobId is not None: + oprot.writeFieldBegin("hadoopJobId", TType.STRING, 12) + oprot.writeString(self.hadoopJobId.encode("utf-8") if sys.version_info[0] == 2 else self.hadoopJobId) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 13) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + if self.errorMessage is not None: + oprot.writeFieldBegin("errorMessage", TType.STRING, 14) + oprot.writeString(self.errorMessage.encode("utf-8") if sys.version_info[0] == 2 else self.errorMessage) + oprot.writeFieldEnd() + if self.enqueueTime is not None: + oprot.writeFieldBegin("enqueueTime", TType.I64, 15) + oprot.writeI64(self.enqueueTime) + oprot.writeFieldEnd() + if self.workerVersion is not None: + oprot.writeFieldBegin("workerVersion", TType.STRING, 16) + oprot.writeString(self.workerVersion.encode("utf-8") if sys.version_info[0] == 2 else self.workerVersion) + oprot.writeFieldEnd() + if self.initiatorId is not None: + oprot.writeFieldBegin("initiatorId", TType.STRING, 17) + oprot.writeString(self.initiatorId.encode("utf-8") if sys.version_info[0] == 2 else self.initiatorId) + oprot.writeFieldEnd() + if self.initiatorVersion is not None: + oprot.writeFieldBegin("initiatorVersion", TType.STRING, 18) + oprot.writeString(self.initiatorVersion.encode("utf-8") if sys.version_info[0] == 2 else self.initiatorVersion) + oprot.writeFieldEnd() + if self.cleanerStart is not None: + oprot.writeFieldBegin("cleanerStart", TType.I64, 19) + oprot.writeI64(self.cleanerStart) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tablename is None: + raise TProtocolException(message="Required field tablename is unset!") + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + if self.state is None: + raise TProtocolException(message="Required field state is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ShowCompactResponse: + """ + Attributes: + - compacts + + """ + + def __init__( + self, + compacts=None, + ): + self.compacts = compacts + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.compacts = [] + (_etype763, _size760) = iprot.readListBegin() + for _i764 in range(_size760): + _elem765 = ShowCompactResponseElement() + _elem765.read(iprot) + self.compacts.append(_elem765) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ShowCompactResponse") + if self.compacts is not None: + oprot.writeFieldBegin("compacts", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.compacts)) + for iter766 in self.compacts: + iter766.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.compacts is None: + raise TProtocolException(message="Required field compacts is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetLatestCommittedCompactionInfoRequest: + """ + Attributes: + - dbname + - tablename + - partitionnames + - lastCompactionId + + """ + + def __init__( + self, + dbname=None, + tablename=None, + partitionnames=None, + lastCompactionId=None, + ): + self.dbname = dbname + self.tablename = tablename + self.partitionnames = partitionnames + self.lastCompactionId = lastCompactionId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.partitionnames = [] + (_etype770, _size767) = iprot.readListBegin() + for _i771 in range(_size767): + _elem772 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partitionnames.append(_elem772) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.lastCompactionId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetLatestCommittedCompactionInfoRequest") + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 1) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 2) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionnames is not None: + oprot.writeFieldBegin("partitionnames", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.partitionnames)) + for iter773 in self.partitionnames: + oprot.writeString(iter773.encode("utf-8") if sys.version_info[0] == 2 else iter773) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.lastCompactionId is not None: + oprot.writeFieldBegin("lastCompactionId", TType.I64, 4) + oprot.writeI64(self.lastCompactionId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tablename is None: + raise TProtocolException(message="Required field tablename is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetLatestCommittedCompactionInfoResponse: + """ + Attributes: + - compactions + + """ + + def __init__( + self, + compactions=None, + ): + self.compactions = compactions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.compactions = [] + (_etype777, _size774) = iprot.readListBegin() + for _i778 in range(_size774): + _elem779 = CompactionInfoStruct() + _elem779.read(iprot) + self.compactions.append(_elem779) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetLatestCommittedCompactionInfoResponse") + if self.compactions is not None: + oprot.writeFieldBegin("compactions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.compactions)) + for iter780 in self.compactions: + iter780.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.compactions is None: + raise TProtocolException(message="Required field compactions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FindNextCompactRequest: + """ + Attributes: + - workerId + - workerVersion + + """ + + def __init__( + self, + workerId=None, + workerVersion=None, + ): + self.workerId = workerId + self.workerVersion = workerVersion + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.workerId = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.workerVersion = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FindNextCompactRequest") + if self.workerId is not None: + oprot.writeFieldBegin("workerId", TType.STRING, 1) + oprot.writeString(self.workerId.encode("utf-8") if sys.version_info[0] == 2 else self.workerId) + oprot.writeFieldEnd() + if self.workerVersion is not None: + oprot.writeFieldBegin("workerVersion", TType.STRING, 2) + oprot.writeString(self.workerVersion.encode("utf-8") if sys.version_info[0] == 2 else self.workerVersion) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddDynamicPartitions: + """ + Attributes: + - txnid + - writeid + - dbname + - tablename + - partitionnames + - operationType + + """ + + def __init__( + self, + txnid=None, + writeid=None, + dbname=None, + tablename=None, + partitionnames=None, + operationType=5, + ): + self.txnid = txnid + self.writeid = writeid + self.dbname = dbname + self.tablename = tablename + self.partitionnames = partitionnames + self.operationType = operationType + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.writeid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.partitionnames = [] + (_etype784, _size781) = iprot.readListBegin() + for _i785 in range(_size781): + _elem786 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partitionnames.append(_elem786) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.operationType = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddDynamicPartitions") + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 1) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.writeid is not None: + oprot.writeFieldBegin("writeid", TType.I64, 2) + oprot.writeI64(self.writeid) + oprot.writeFieldEnd() + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 3) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 4) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionnames is not None: + oprot.writeFieldBegin("partitionnames", TType.LIST, 5) + oprot.writeListBegin(TType.STRING, len(self.partitionnames)) + for iter787 in self.partitionnames: + oprot.writeString(iter787.encode("utf-8") if sys.version_info[0] == 2 else iter787) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.operationType is not None: + oprot.writeFieldBegin("operationType", TType.I32, 6) + oprot.writeI32(self.operationType) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnid is None: + raise TProtocolException(message="Required field txnid is unset!") + if self.writeid is None: + raise TProtocolException(message="Required field writeid is unset!") + if self.dbname is None: + raise TProtocolException(message="Required field dbname is unset!") + if self.tablename is None: + raise TProtocolException(message="Required field tablename is unset!") + if self.partitionnames is None: + raise TProtocolException(message="Required field partitionnames is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class BasicTxnInfo: + """ + Attributes: + - isnull + - time + - txnid + - dbname + - tablename + - partitionname + + """ + + def __init__( + self, + isnull=None, + time=None, + txnid=None, + dbname=None, + tablename=None, + partitionname=None, + ): + self.isnull = isnull + self.time = time + self.txnid = txnid + self.dbname = dbname + self.tablename = tablename + self.partitionname = partitionname + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.isnull = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.time = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.txnid = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.dbname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.tablename = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.partitionname = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("BasicTxnInfo") + if self.isnull is not None: + oprot.writeFieldBegin("isnull", TType.BOOL, 1) + oprot.writeBool(self.isnull) + oprot.writeFieldEnd() + if self.time is not None: + oprot.writeFieldBegin("time", TType.I64, 2) + oprot.writeI64(self.time) + oprot.writeFieldEnd() + if self.txnid is not None: + oprot.writeFieldBegin("txnid", TType.I64, 3) + oprot.writeI64(self.txnid) + oprot.writeFieldEnd() + if self.dbname is not None: + oprot.writeFieldBegin("dbname", TType.STRING, 4) + oprot.writeString(self.dbname.encode("utf-8") if sys.version_info[0] == 2 else self.dbname) + oprot.writeFieldEnd() + if self.tablename is not None: + oprot.writeFieldBegin("tablename", TType.STRING, 5) + oprot.writeString(self.tablename.encode("utf-8") if sys.version_info[0] == 2 else self.tablename) + oprot.writeFieldEnd() + if self.partitionname is not None: + oprot.writeFieldBegin("partitionname", TType.STRING, 6) + oprot.writeString(self.partitionname.encode("utf-8") if sys.version_info[0] == 2 else self.partitionname) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.isnull is None: + raise TProtocolException(message="Required field isnull is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotificationEventRequest: + """ + Attributes: + - lastEvent + - maxEvents + - eventTypeSkipList + + """ + + def __init__( + self, + lastEvent=None, + maxEvents=None, + eventTypeSkipList=None, + ): + self.lastEvent = lastEvent + self.maxEvents = maxEvents + self.eventTypeSkipList = eventTypeSkipList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.lastEvent = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.maxEvents = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.eventTypeSkipList = [] + (_etype791, _size788) = iprot.readListBegin() + for _i792 in range(_size788): + _elem793 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.eventTypeSkipList.append(_elem793) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotificationEventRequest") + if self.lastEvent is not None: + oprot.writeFieldBegin("lastEvent", TType.I64, 1) + oprot.writeI64(self.lastEvent) + oprot.writeFieldEnd() + if self.maxEvents is not None: + oprot.writeFieldBegin("maxEvents", TType.I32, 2) + oprot.writeI32(self.maxEvents) + oprot.writeFieldEnd() + if self.eventTypeSkipList is not None: + oprot.writeFieldBegin("eventTypeSkipList", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.eventTypeSkipList)) + for iter794 in self.eventTypeSkipList: + oprot.writeString(iter794.encode("utf-8") if sys.version_info[0] == 2 else iter794) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.lastEvent is None: + raise TProtocolException(message="Required field lastEvent is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotificationEvent: + """ + Attributes: + - eventId + - eventTime + - eventType + - dbName + - tableName + - message + - messageFormat + - catName + + """ + + def __init__( + self, + eventId=None, + eventTime=None, + eventType=None, + dbName=None, + tableName=None, + message=None, + messageFormat=None, + catName=None, + ): + self.eventId = eventId + self.eventTime = eventTime + self.eventType = eventType + self.dbName = dbName + self.tableName = tableName + self.message = message + self.messageFormat = messageFormat + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.eventId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.eventTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.eventType = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.messageFormat = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotificationEvent") + if self.eventId is not None: + oprot.writeFieldBegin("eventId", TType.I64, 1) + oprot.writeI64(self.eventId) + oprot.writeFieldEnd() + if self.eventTime is not None: + oprot.writeFieldBegin("eventTime", TType.I32, 2) + oprot.writeI32(self.eventTime) + oprot.writeFieldEnd() + if self.eventType is not None: + oprot.writeFieldBegin("eventType", TType.STRING, 3) + oprot.writeString(self.eventType.encode("utf-8") if sys.version_info[0] == 2 else self.eventType) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 4) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 5) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 6) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + if self.messageFormat is not None: + oprot.writeFieldBegin("messageFormat", TType.STRING, 7) + oprot.writeString(self.messageFormat.encode("utf-8") if sys.version_info[0] == 2 else self.messageFormat) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 8) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.eventId is None: + raise TProtocolException(message="Required field eventId is unset!") + if self.eventTime is None: + raise TProtocolException(message="Required field eventTime is unset!") + if self.eventType is None: + raise TProtocolException(message="Required field eventType is unset!") + if self.message is None: + raise TProtocolException(message="Required field message is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotificationEventResponse: + """ + Attributes: + - events + + """ + + def __init__( + self, + events=None, + ): + self.events = events + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.events = [] + (_etype798, _size795) = iprot.readListBegin() + for _i799 in range(_size795): + _elem800 = NotificationEvent() + _elem800.read(iprot) + self.events.append(_elem800) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotificationEventResponse") + if self.events is not None: + oprot.writeFieldBegin("events", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.events)) + for iter801 in self.events: + iter801.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.events is None: + raise TProtocolException(message="Required field events is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CurrentNotificationEventId: + """ + Attributes: + - eventId + + """ + + def __init__( + self, + eventId=None, + ): + self.eventId = eventId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.eventId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CurrentNotificationEventId") + if self.eventId is not None: + oprot.writeFieldBegin("eventId", TType.I64, 1) + oprot.writeI64(self.eventId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.eventId is None: + raise TProtocolException(message="Required field eventId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotificationEventsCountRequest: + """ + Attributes: + - fromEventId + - dbName + - catName + - toEventId + - limit + + """ + + def __init__( + self, + fromEventId=None, + dbName=None, + catName=None, + toEventId=None, + limit=None, + ): + self.fromEventId = fromEventId + self.dbName = dbName + self.catName = catName + self.toEventId = toEventId + self.limit = limit + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.fromEventId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I64: + self.toEventId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I64: + self.limit = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotificationEventsCountRequest") + if self.fromEventId is not None: + oprot.writeFieldBegin("fromEventId", TType.I64, 1) + oprot.writeI64(self.fromEventId) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 3) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.toEventId is not None: + oprot.writeFieldBegin("toEventId", TType.I64, 4) + oprot.writeI64(self.toEventId) + oprot.writeFieldEnd() + if self.limit is not None: + oprot.writeFieldBegin("limit", TType.I64, 5) + oprot.writeI64(self.limit) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fromEventId is None: + raise TProtocolException(message="Required field fromEventId is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NotificationEventsCountResponse: + """ + Attributes: + - eventsCount + + """ + + def __init__( + self, + eventsCount=None, + ): + self.eventsCount = eventsCount + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.eventsCount = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NotificationEventsCountResponse") + if self.eventsCount is not None: + oprot.writeFieldBegin("eventsCount", TType.I64, 1) + oprot.writeI64(self.eventsCount) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.eventsCount is None: + raise TProtocolException(message="Required field eventsCount is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class InsertEventRequestData: + """ + Attributes: + - replace + - filesAdded + - filesAddedChecksum + - subDirectoryList + - partitionVal + + """ + + def __init__( + self, + replace=None, + filesAdded=None, + filesAddedChecksum=None, + subDirectoryList=None, + partitionVal=None, + ): + self.replace = replace + self.filesAdded = filesAdded + self.filesAddedChecksum = filesAddedChecksum + self.subDirectoryList = subDirectoryList + self.partitionVal = partitionVal + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.replace = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.filesAdded = [] + (_etype805, _size802) = iprot.readListBegin() + for _i806 in range(_size802): + _elem807 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.filesAdded.append(_elem807) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.filesAddedChecksum = [] + (_etype811, _size808) = iprot.readListBegin() + for _i812 in range(_size808): + _elem813 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.filesAddedChecksum.append(_elem813) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.subDirectoryList = [] + (_etype817, _size814) = iprot.readListBegin() + for _i818 in range(_size814): + _elem819 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.subDirectoryList.append(_elem819) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.partitionVal = [] + (_etype823, _size820) = iprot.readListBegin() + for _i824 in range(_size820): + _elem825 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partitionVal.append(_elem825) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("InsertEventRequestData") + if self.replace is not None: + oprot.writeFieldBegin("replace", TType.BOOL, 1) + oprot.writeBool(self.replace) + oprot.writeFieldEnd() + if self.filesAdded is not None: + oprot.writeFieldBegin("filesAdded", TType.LIST, 2) + oprot.writeListBegin(TType.STRING, len(self.filesAdded)) + for iter826 in self.filesAdded: + oprot.writeString(iter826.encode("utf-8") if sys.version_info[0] == 2 else iter826) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.filesAddedChecksum is not None: + oprot.writeFieldBegin("filesAddedChecksum", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.filesAddedChecksum)) + for iter827 in self.filesAddedChecksum: + oprot.writeString(iter827.encode("utf-8") if sys.version_info[0] == 2 else iter827) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.subDirectoryList is not None: + oprot.writeFieldBegin("subDirectoryList", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.subDirectoryList)) + for iter828 in self.subDirectoryList: + oprot.writeString(iter828.encode("utf-8") if sys.version_info[0] == 2 else iter828) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.partitionVal is not None: + oprot.writeFieldBegin("partitionVal", TType.LIST, 5) + oprot.writeListBegin(TType.STRING, len(self.partitionVal)) + for iter829 in self.partitionVal: + oprot.writeString(iter829.encode("utf-8") if sys.version_info[0] == 2 else iter829) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.filesAdded is None: + raise TProtocolException(message="Required field filesAdded is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FireEventRequestData: + """ + Attributes: + - insertData + - insertDatas + + """ + + def __init__( + self, + insertData=None, + insertDatas=None, + ): + self.insertData = insertData + self.insertDatas = insertDatas + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.insertData = InsertEventRequestData() + self.insertData.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.insertDatas = [] + (_etype833, _size830) = iprot.readListBegin() + for _i834 in range(_size830): + _elem835 = InsertEventRequestData() + _elem835.read(iprot) + self.insertDatas.append(_elem835) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FireEventRequestData") + if self.insertData is not None: + oprot.writeFieldBegin("insertData", TType.STRUCT, 1) + self.insertData.write(oprot) + oprot.writeFieldEnd() + if self.insertDatas is not None: + oprot.writeFieldBegin("insertDatas", TType.LIST, 2) + oprot.writeListBegin(TType.STRUCT, len(self.insertDatas)) + for iter836 in self.insertDatas: + iter836.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FireEventRequest: + """ + Attributes: + - successful + - data + - dbName + - tableName + - partitionVals + - catName + + """ + + def __init__( + self, + successful=None, + data=None, + dbName=None, + tableName=None, + partitionVals=None, + catName=None, + ): + self.successful = successful + self.data = data + self.dbName = dbName + self.tableName = tableName + self.partitionVals = partitionVals + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.successful = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.data = FireEventRequestData() + self.data.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.partitionVals = [] + (_etype840, _size837) = iprot.readListBegin() + for _i841 in range(_size837): + _elem842 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partitionVals.append(_elem842) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FireEventRequest") + if self.successful is not None: + oprot.writeFieldBegin("successful", TType.BOOL, 1) + oprot.writeBool(self.successful) + oprot.writeFieldEnd() + if self.data is not None: + oprot.writeFieldBegin("data", TType.STRUCT, 2) + self.data.write(oprot) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 3) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 4) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.partitionVals is not None: + oprot.writeFieldBegin("partitionVals", TType.LIST, 5) + oprot.writeListBegin(TType.STRING, len(self.partitionVals)) + for iter843 in self.partitionVals: + oprot.writeString(iter843.encode("utf-8") if sys.version_info[0] == 2 else iter843) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 6) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.successful is None: + raise TProtocolException(message="Required field successful is unset!") + if self.data is None: + raise TProtocolException(message="Required field data is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FireEventResponse: + """ + Attributes: + - eventIds + + """ + + def __init__( + self, + eventIds=None, + ): + self.eventIds = eventIds + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.eventIds = [] + (_etype847, _size844) = iprot.readListBegin() + for _i848 in range(_size844): + _elem849 = iprot.readI64() + self.eventIds.append(_elem849) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FireEventResponse") + if self.eventIds is not None: + oprot.writeFieldBegin("eventIds", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.eventIds)) + for iter850 in self.eventIds: + oprot.writeI64(iter850) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WriteNotificationLogRequest: + """ + Attributes: + - txnId + - writeId + - db + - table + - fileInfo + - partitionVals + + """ + + def __init__( + self, + txnId=None, + writeId=None, + db=None, + table=None, + fileInfo=None, + partitionVals=None, + ): + self.txnId = txnId + self.writeId = writeId + self.db = db + self.table = table + self.fileInfo = fileInfo + self.partitionVals = partitionVals + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txnId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.table = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.fileInfo = InsertEventRequestData() + self.fileInfo.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.partitionVals = [] + (_etype854, _size851) = iprot.readListBegin() + for _i855 in range(_size851): + _elem856 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partitionVals.append(_elem856) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WriteNotificationLogRequest") + if self.txnId is not None: + oprot.writeFieldBegin("txnId", TType.I64, 1) + oprot.writeI64(self.txnId) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 2) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.db is not None: + oprot.writeFieldBegin("db", TType.STRING, 3) + oprot.writeString(self.db.encode("utf-8") if sys.version_info[0] == 2 else self.db) + oprot.writeFieldEnd() + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRING, 4) + oprot.writeString(self.table.encode("utf-8") if sys.version_info[0] == 2 else self.table) + oprot.writeFieldEnd() + if self.fileInfo is not None: + oprot.writeFieldBegin("fileInfo", TType.STRUCT, 5) + self.fileInfo.write(oprot) + oprot.writeFieldEnd() + if self.partitionVals is not None: + oprot.writeFieldBegin("partitionVals", TType.LIST, 6) + oprot.writeListBegin(TType.STRING, len(self.partitionVals)) + for iter857 in self.partitionVals: + oprot.writeString(iter857.encode("utf-8") if sys.version_info[0] == 2 else iter857) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnId is None: + raise TProtocolException(message="Required field txnId is unset!") + if self.writeId is None: + raise TProtocolException(message="Required field writeId is unset!") + if self.db is None: + raise TProtocolException(message="Required field db is unset!") + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + if self.fileInfo is None: + raise TProtocolException(message="Required field fileInfo is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WriteNotificationLogResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WriteNotificationLogResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WriteNotificationLogBatchRequest: + """ + Attributes: + - catalog + - db + - table + - requestList + + """ + + def __init__( + self, + catalog=None, + db=None, + table=None, + requestList=None, + ): + self.catalog = catalog + self.db = db + self.table = table + self.requestList = requestList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catalog = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.db = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.table = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.requestList = [] + (_etype861, _size858) = iprot.readListBegin() + for _i862 in range(_size858): + _elem863 = WriteNotificationLogRequest() + _elem863.read(iprot) + self.requestList.append(_elem863) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WriteNotificationLogBatchRequest") + if self.catalog is not None: + oprot.writeFieldBegin("catalog", TType.STRING, 1) + oprot.writeString(self.catalog.encode("utf-8") if sys.version_info[0] == 2 else self.catalog) + oprot.writeFieldEnd() + if self.db is not None: + oprot.writeFieldBegin("db", TType.STRING, 2) + oprot.writeString(self.db.encode("utf-8") if sys.version_info[0] == 2 else self.db) + oprot.writeFieldEnd() + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRING, 3) + oprot.writeString(self.table.encode("utf-8") if sys.version_info[0] == 2 else self.table) + oprot.writeFieldEnd() + if self.requestList is not None: + oprot.writeFieldBegin("requestList", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.requestList)) + for iter864 in self.requestList: + iter864.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catalog is None: + raise TProtocolException(message="Required field catalog is unset!") + if self.db is None: + raise TProtocolException(message="Required field db is unset!") + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + if self.requestList is None: + raise TProtocolException(message="Required field requestList is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WriteNotificationLogBatchResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WriteNotificationLogBatchResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class MetadataPpdResult: + """ + Attributes: + - metadata + - includeBitset + + """ + + def __init__( + self, + metadata=None, + includeBitset=None, + ): + self.metadata = metadata + self.includeBitset = includeBitset + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.metadata = iprot.readBinary() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.includeBitset = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("MetadataPpdResult") + if self.metadata is not None: + oprot.writeFieldBegin("metadata", TType.STRING, 1) + oprot.writeBinary(self.metadata) + oprot.writeFieldEnd() + if self.includeBitset is not None: + oprot.writeFieldBegin("includeBitset", TType.STRING, 2) + oprot.writeBinary(self.includeBitset) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetFileMetadataByExprResult: + """ + Attributes: + - metadata + - isSupported + + """ + + def __init__( + self, + metadata=None, + isSupported=None, + ): + self.metadata = metadata + self.isSupported = isSupported + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.MAP: + self.metadata = {} + (_ktype866, _vtype867, _size865) = iprot.readMapBegin() + for _i869 in range(_size865): + _key870 = iprot.readI64() + _val871 = MetadataPpdResult() + _val871.read(iprot) + self.metadata[_key870] = _val871 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.isSupported = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetFileMetadataByExprResult") + if self.metadata is not None: + oprot.writeFieldBegin("metadata", TType.MAP, 1) + oprot.writeMapBegin(TType.I64, TType.STRUCT, len(self.metadata)) + for kiter872, viter873 in self.metadata.items(): + oprot.writeI64(kiter872) + viter873.write(oprot) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.isSupported is not None: + oprot.writeFieldBegin("isSupported", TType.BOOL, 2) + oprot.writeBool(self.isSupported) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.metadata is None: + raise TProtocolException(message="Required field metadata is unset!") + if self.isSupported is None: + raise TProtocolException(message="Required field isSupported is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetFileMetadataByExprRequest: + """ + Attributes: + - fileIds + - expr + - doGetFooters + - type + + """ + + def __init__( + self, + fileIds=None, + expr=None, + doGetFooters=None, + type=None, + ): + self.fileIds = fileIds + self.expr = expr + self.doGetFooters = doGetFooters + self.type = type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fileIds = [] + (_etype877, _size874) = iprot.readListBegin() + for _i878 in range(_size874): + _elem879 = iprot.readI64() + self.fileIds.append(_elem879) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.expr = iprot.readBinary() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.doGetFooters = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetFileMetadataByExprRequest") + if self.fileIds is not None: + oprot.writeFieldBegin("fileIds", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.fileIds)) + for iter880 in self.fileIds: + oprot.writeI64(iter880) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.expr is not None: + oprot.writeFieldBegin("expr", TType.STRING, 2) + oprot.writeBinary(self.expr) + oprot.writeFieldEnd() + if self.doGetFooters is not None: + oprot.writeFieldBegin("doGetFooters", TType.BOOL, 3) + oprot.writeBool(self.doGetFooters) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 4) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fileIds is None: + raise TProtocolException(message="Required field fileIds is unset!") + if self.expr is None: + raise TProtocolException(message="Required field expr is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetFileMetadataResult: + """ + Attributes: + - metadata + - isSupported + + """ + + def __init__( + self, + metadata=None, + isSupported=None, + ): + self.metadata = metadata + self.isSupported = isSupported + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.MAP: + self.metadata = {} + (_ktype882, _vtype883, _size881) = iprot.readMapBegin() + for _i885 in range(_size881): + _key886 = iprot.readI64() + _val887 = iprot.readBinary() + self.metadata[_key886] = _val887 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.isSupported = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetFileMetadataResult") + if self.metadata is not None: + oprot.writeFieldBegin("metadata", TType.MAP, 1) + oprot.writeMapBegin(TType.I64, TType.STRING, len(self.metadata)) + for kiter888, viter889 in self.metadata.items(): + oprot.writeI64(kiter888) + oprot.writeBinary(viter889) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.isSupported is not None: + oprot.writeFieldBegin("isSupported", TType.BOOL, 2) + oprot.writeBool(self.isSupported) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.metadata is None: + raise TProtocolException(message="Required field metadata is unset!") + if self.isSupported is None: + raise TProtocolException(message="Required field isSupported is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetFileMetadataRequest: + """ + Attributes: + - fileIds + + """ + + def __init__( + self, + fileIds=None, + ): + self.fileIds = fileIds + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fileIds = [] + (_etype893, _size890) = iprot.readListBegin() + for _i894 in range(_size890): + _elem895 = iprot.readI64() + self.fileIds.append(_elem895) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetFileMetadataRequest") + if self.fileIds is not None: + oprot.writeFieldBegin("fileIds", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.fileIds)) + for iter896 in self.fileIds: + oprot.writeI64(iter896) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fileIds is None: + raise TProtocolException(message="Required field fileIds is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PutFileMetadataResult: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PutFileMetadataResult") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PutFileMetadataRequest: + """ + Attributes: + - fileIds + - metadata + - type + + """ + + def __init__( + self, + fileIds=None, + metadata=None, + type=None, + ): + self.fileIds = fileIds + self.metadata = metadata + self.type = type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fileIds = [] + (_etype900, _size897) = iprot.readListBegin() + for _i901 in range(_size897): + _elem902 = iprot.readI64() + self.fileIds.append(_elem902) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.metadata = [] + (_etype906, _size903) = iprot.readListBegin() + for _i907 in range(_size903): + _elem908 = iprot.readBinary() + self.metadata.append(_elem908) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PutFileMetadataRequest") + if self.fileIds is not None: + oprot.writeFieldBegin("fileIds", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.fileIds)) + for iter909 in self.fileIds: + oprot.writeI64(iter909) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.metadata is not None: + oprot.writeFieldBegin("metadata", TType.LIST, 2) + oprot.writeListBegin(TType.STRING, len(self.metadata)) + for iter910 in self.metadata: + oprot.writeBinary(iter910) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 3) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fileIds is None: + raise TProtocolException(message="Required field fileIds is unset!") + if self.metadata is None: + raise TProtocolException(message="Required field metadata is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ClearFileMetadataResult: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ClearFileMetadataResult") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ClearFileMetadataRequest: + """ + Attributes: + - fileIds + + """ + + def __init__( + self, + fileIds=None, + ): + self.fileIds = fileIds + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fileIds = [] + (_etype914, _size911) = iprot.readListBegin() + for _i915 in range(_size911): + _elem916 = iprot.readI64() + self.fileIds.append(_elem916) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ClearFileMetadataRequest") + if self.fileIds is not None: + oprot.writeFieldBegin("fileIds", TType.LIST, 1) + oprot.writeListBegin(TType.I64, len(self.fileIds)) + for iter917 in self.fileIds: + oprot.writeI64(iter917) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fileIds is None: + raise TProtocolException(message="Required field fileIds is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CacheFileMetadataResult: + """ + Attributes: + - isSupported + + """ + + def __init__( + self, + isSupported=None, + ): + self.isSupported = isSupported + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.isSupported = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CacheFileMetadataResult") + if self.isSupported is not None: + oprot.writeFieldBegin("isSupported", TType.BOOL, 1) + oprot.writeBool(self.isSupported) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.isSupported is None: + raise TProtocolException(message="Required field isSupported is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CacheFileMetadataRequest: + """ + Attributes: + - dbName + - tblName + - partName + - isAllParts + + """ + + def __init__( + self, + dbName=None, + tblName=None, + partName=None, + isAllParts=None, + ): + self.dbName = dbName + self.tblName = tblName + self.partName = partName + self.isAllParts = isAllParts + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.partName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.isAllParts = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CacheFileMetadataRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.partName is not None: + oprot.writeFieldBegin("partName", TType.STRING, 3) + oprot.writeString(self.partName.encode("utf-8") if sys.version_info[0] == 2 else self.partName) + oprot.writeFieldEnd() + if self.isAllParts is not None: + oprot.writeFieldBegin("isAllParts", TType.BOOL, 4) + oprot.writeBool(self.isAllParts) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetAllFunctionsResponse: + """ + Attributes: + - functions + + """ + + def __init__( + self, + functions=None, + ): + self.functions = functions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.functions = [] + (_etype921, _size918) = iprot.readListBegin() + for _i922 in range(_size918): + _elem923 = Function() + _elem923.read(iprot) + self.functions.append(_elem923) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetAllFunctionsResponse") + if self.functions is not None: + oprot.writeFieldBegin("functions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.functions)) + for iter924 in self.functions: + iter924.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ClientCapabilities: + """ + Attributes: + - values + + """ + + def __init__( + self, + values=None, + ): + self.values = values + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.values = [] + (_etype928, _size925) = iprot.readListBegin() + for _i929 in range(_size925): + _elem930 = iprot.readI32() + self.values.append(_elem930) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ClientCapabilities") + if self.values is not None: + oprot.writeFieldBegin("values", TType.LIST, 1) + oprot.writeListBegin(TType.I32, len(self.values)) + for iter931 in self.values: + oprot.writeI32(iter931) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.values is None: + raise TProtocolException(message="Required field values is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetProjectionsSpec: + """ + Attributes: + - fieldList + - includeParamKeyPattern + - excludeParamKeyPattern + + """ + + def __init__( + self, + fieldList=None, + includeParamKeyPattern=None, + excludeParamKeyPattern=None, + ): + self.fieldList = fieldList + self.includeParamKeyPattern = includeParamKeyPattern + self.excludeParamKeyPattern = excludeParamKeyPattern + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fieldList = [] + (_etype935, _size932) = iprot.readListBegin() + for _i936 in range(_size932): + _elem937 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.fieldList.append(_elem937) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.includeParamKeyPattern = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.excludeParamKeyPattern = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetProjectionsSpec") + if self.fieldList is not None: + oprot.writeFieldBegin("fieldList", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.fieldList)) + for iter938 in self.fieldList: + oprot.writeString(iter938.encode("utf-8") if sys.version_info[0] == 2 else iter938) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.includeParamKeyPattern is not None: + oprot.writeFieldBegin("includeParamKeyPattern", TType.STRING, 2) + oprot.writeString( + self.includeParamKeyPattern.encode("utf-8") if sys.version_info[0] == 2 else self.includeParamKeyPattern + ) + oprot.writeFieldEnd() + if self.excludeParamKeyPattern is not None: + oprot.writeFieldBegin("excludeParamKeyPattern", TType.STRING, 3) + oprot.writeString( + self.excludeParamKeyPattern.encode("utf-8") if sys.version_info[0] == 2 else self.excludeParamKeyPattern + ) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetTableRequest: + """ + Attributes: + - dbName + - tblName + - capabilities + - catName + - validWriteIdList + - getColumnStats + - processorCapabilities + - processorIdentifier + - engine + - id + + """ + + def __init__( + self, + dbName=None, + tblName=None, + capabilities=None, + catName=None, + validWriteIdList=None, + getColumnStats=None, + processorCapabilities=None, + processorIdentifier=None, + engine=None, + id=-1, + ): + self.dbName = dbName + self.tblName = tblName + self.capabilities = capabilities + self.catName = catName + self.validWriteIdList = validWriteIdList + self.getColumnStats = getColumnStats + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + self.engine = engine + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRUCT: + self.capabilities = ClientCapabilities() + self.capabilities.read(iprot) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.getColumnStats = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype942, _size939) = iprot.readListBegin() + for _i943 in range(_size939): + _elem944 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem944) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.engine = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetTableRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 2) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.capabilities is not None: + oprot.writeFieldBegin("capabilities", TType.STRUCT, 3) + self.capabilities.write(oprot) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 4) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 6) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.getColumnStats is not None: + oprot.writeFieldBegin("getColumnStats", TType.BOOL, 7) + oprot.writeBool(self.getColumnStats) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 8) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter945 in self.processorCapabilities: + oprot.writeString(iter945.encode("utf-8") if sys.version_info[0] == 2 else iter945) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 9) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + if self.engine is not None: + oprot.writeFieldBegin("engine", TType.STRING, 10) + oprot.writeString(self.engine.encode("utf-8") if sys.version_info[0] == 2 else self.engine) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 11) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetTableResult: + """ + Attributes: + - table + - isStatsCompliant + + """ + + def __init__( + self, + table=None, + isStatsCompliant=None, + ): + self.table = table + self.isStatsCompliant = isStatsCompliant + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.table = Table() + self.table.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.isStatsCompliant = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetTableResult") + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRUCT, 1) + self.table.write(oprot) + oprot.writeFieldEnd() + if self.isStatsCompliant is not None: + oprot.writeFieldBegin("isStatsCompliant", TType.BOOL, 2) + oprot.writeBool(self.isStatsCompliant) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetTablesRequest: + """ + Attributes: + - dbName + - tblNames + - capabilities + - catName + - processorCapabilities + - processorIdentifier + - projectionSpec + - tablesPattern + + """ + + def __init__( + self, + dbName=None, + tblNames=None, + capabilities=None, + catName=None, + processorCapabilities=None, + processorIdentifier=None, + projectionSpec=None, + tablesPattern=None, + ): + self.dbName = dbName + self.tblNames = tblNames + self.capabilities = capabilities + self.catName = catName + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + self.projectionSpec = projectionSpec + self.tablesPattern = tablesPattern + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.tblNames = [] + (_etype949, _size946) = iprot.readListBegin() + for _i950 in range(_size946): + _elem951 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.tblNames.append(_elem951) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRUCT: + self.capabilities = ClientCapabilities() + self.capabilities.read(iprot) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype955, _size952) = iprot.readListBegin() + for _i956 in range(_size952): + _elem957 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem957) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRUCT: + self.projectionSpec = GetProjectionsSpec() + self.projectionSpec.read(iprot) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.tablesPattern = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetTablesRequest") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblNames is not None: + oprot.writeFieldBegin("tblNames", TType.LIST, 2) + oprot.writeListBegin(TType.STRING, len(self.tblNames)) + for iter958 in self.tblNames: + oprot.writeString(iter958.encode("utf-8") if sys.version_info[0] == 2 else iter958) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.capabilities is not None: + oprot.writeFieldBegin("capabilities", TType.STRUCT, 3) + self.capabilities.write(oprot) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 4) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 5) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter959 in self.processorCapabilities: + oprot.writeString(iter959.encode("utf-8") if sys.version_info[0] == 2 else iter959) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 6) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + if self.projectionSpec is not None: + oprot.writeFieldBegin("projectionSpec", TType.STRUCT, 7) + self.projectionSpec.write(oprot) + oprot.writeFieldEnd() + if self.tablesPattern is not None: + oprot.writeFieldBegin("tablesPattern", TType.STRING, 8) + oprot.writeString(self.tablesPattern.encode("utf-8") if sys.version_info[0] == 2 else self.tablesPattern) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetTablesResult: + """ + Attributes: + - tables + + """ + + def __init__( + self, + tables=None, + ): + self.tables = tables + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.tables = [] + (_etype963, _size960) = iprot.readListBegin() + for _i964 in range(_size960): + _elem965 = Table() + _elem965.read(iprot) + self.tables.append(_elem965) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetTablesResult") + if self.tables is not None: + oprot.writeFieldBegin("tables", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.tables)) + for iter966 in self.tables: + iter966.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.tables is None: + raise TProtocolException(message="Required field tables is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetTablesExtRequest: + """ + Attributes: + - catalog + - database + - tableNamePattern + - requestedFields + - limit + - processorCapabilities + - processorIdentifier + + """ + + def __init__( + self, + catalog=None, + database=None, + tableNamePattern=None, + requestedFields=None, + limit=None, + processorCapabilities=None, + processorIdentifier=None, + ): + self.catalog = catalog + self.database = database + self.tableNamePattern = tableNamePattern + self.requestedFields = requestedFields + self.limit = limit + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catalog = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.database = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableNamePattern = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.requestedFields = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.limit = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype970, _size967) = iprot.readListBegin() + for _i971 in range(_size967): + _elem972 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem972) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetTablesExtRequest") + if self.catalog is not None: + oprot.writeFieldBegin("catalog", TType.STRING, 1) + oprot.writeString(self.catalog.encode("utf-8") if sys.version_info[0] == 2 else self.catalog) + oprot.writeFieldEnd() + if self.database is not None: + oprot.writeFieldBegin("database", TType.STRING, 2) + oprot.writeString(self.database.encode("utf-8") if sys.version_info[0] == 2 else self.database) + oprot.writeFieldEnd() + if self.tableNamePattern is not None: + oprot.writeFieldBegin("tableNamePattern", TType.STRING, 3) + oprot.writeString(self.tableNamePattern.encode("utf-8") if sys.version_info[0] == 2 else self.tableNamePattern) + oprot.writeFieldEnd() + if self.requestedFields is not None: + oprot.writeFieldBegin("requestedFields", TType.I32, 4) + oprot.writeI32(self.requestedFields) + oprot.writeFieldEnd() + if self.limit is not None: + oprot.writeFieldBegin("limit", TType.I32, 5) + oprot.writeI32(self.limit) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 6) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter973 in self.processorCapabilities: + oprot.writeString(iter973.encode("utf-8") if sys.version_info[0] == 2 else iter973) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 7) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catalog is None: + raise TProtocolException(message="Required field catalog is unset!") + if self.database is None: + raise TProtocolException(message="Required field database is unset!") + if self.tableNamePattern is None: + raise TProtocolException(message="Required field tableNamePattern is unset!") + if self.requestedFields is None: + raise TProtocolException(message="Required field requestedFields is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ExtendedTableInfo: + """ + Attributes: + - tblName + - accessType + - requiredReadCapabilities + - requiredWriteCapabilities + + """ + + def __init__( + self, + tblName=None, + accessType=None, + requiredReadCapabilities=None, + requiredWriteCapabilities=None, + ): + self.tblName = tblName + self.accessType = accessType + self.requiredReadCapabilities = requiredReadCapabilities + self.requiredWriteCapabilities = requiredWriteCapabilities + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.accessType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.requiredReadCapabilities = [] + (_etype977, _size974) = iprot.readListBegin() + for _i978 in range(_size974): + _elem979 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.requiredReadCapabilities.append(_elem979) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.requiredWriteCapabilities = [] + (_etype983, _size980) = iprot.readListBegin() + for _i984 in range(_size980): + _elem985 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.requiredWriteCapabilities.append(_elem985) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ExtendedTableInfo") + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 1) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.accessType is not None: + oprot.writeFieldBegin("accessType", TType.I32, 2) + oprot.writeI32(self.accessType) + oprot.writeFieldEnd() + if self.requiredReadCapabilities is not None: + oprot.writeFieldBegin("requiredReadCapabilities", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.requiredReadCapabilities)) + for iter986 in self.requiredReadCapabilities: + oprot.writeString(iter986.encode("utf-8") if sys.version_info[0] == 2 else iter986) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.requiredWriteCapabilities is not None: + oprot.writeFieldBegin("requiredWriteCapabilities", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.requiredWriteCapabilities)) + for iter987 in self.requiredWriteCapabilities: + oprot.writeString(iter987.encode("utf-8") if sys.version_info[0] == 2 else iter987) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetDatabaseRequest: + """ + Attributes: + - name + - catalogName + - processorCapabilities + - processorIdentifier + + """ + + def __init__( + self, + name=None, + catalogName=None, + processorCapabilities=None, + processorIdentifier=None, + ): + self.name = name + self.catalogName = catalogName + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.catalogName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype991, _size988) = iprot.readListBegin() + for _i992 in range(_size988): + _elem993 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem993) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetDatabaseRequest") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.catalogName is not None: + oprot.writeFieldBegin("catalogName", TType.STRING, 2) + oprot.writeString(self.catalogName.encode("utf-8") if sys.version_info[0] == 2 else self.catalogName) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 3) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter994 in self.processorCapabilities: + oprot.writeString(iter994.encode("utf-8") if sys.version_info[0] == 2 else iter994) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 4) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropDatabaseRequest: + """ + Attributes: + - name + - catalogName + - ignoreUnknownDb + - deleteData + - cascade + - softDelete + - txnId + - deleteManagedDir + + """ + + def __init__( + self, + name=None, + catalogName=None, + ignoreUnknownDb=None, + deleteData=None, + cascade=None, + softDelete=False, + txnId=0, + deleteManagedDir=True, + ): + self.name = name + self.catalogName = catalogName + self.ignoreUnknownDb = ignoreUnknownDb + self.deleteData = deleteData + self.cascade = cascade + self.softDelete = softDelete + self.txnId = txnId + self.deleteManagedDir = deleteManagedDir + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.catalogName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.ignoreUnknownDb = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.deleteData = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.cascade = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.softDelete = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.txnId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.deleteManagedDir = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropDatabaseRequest") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.catalogName is not None: + oprot.writeFieldBegin("catalogName", TType.STRING, 2) + oprot.writeString(self.catalogName.encode("utf-8") if sys.version_info[0] == 2 else self.catalogName) + oprot.writeFieldEnd() + if self.ignoreUnknownDb is not None: + oprot.writeFieldBegin("ignoreUnknownDb", TType.BOOL, 3) + oprot.writeBool(self.ignoreUnknownDb) + oprot.writeFieldEnd() + if self.deleteData is not None: + oprot.writeFieldBegin("deleteData", TType.BOOL, 4) + oprot.writeBool(self.deleteData) + oprot.writeFieldEnd() + if self.cascade is not None: + oprot.writeFieldBegin("cascade", TType.BOOL, 5) + oprot.writeBool(self.cascade) + oprot.writeFieldEnd() + if self.softDelete is not None: + oprot.writeFieldBegin("softDelete", TType.BOOL, 6) + oprot.writeBool(self.softDelete) + oprot.writeFieldEnd() + if self.txnId is not None: + oprot.writeFieldBegin("txnId", TType.I64, 7) + oprot.writeI64(self.txnId) + oprot.writeFieldEnd() + if self.deleteManagedDir is not None: + oprot.writeFieldBegin("deleteManagedDir", TType.BOOL, 8) + oprot.writeBool(self.deleteManagedDir) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.name is None: + raise TProtocolException(message="Required field name is unset!") + if self.ignoreUnknownDb is None: + raise TProtocolException(message="Required field ignoreUnknownDb is unset!") + if self.deleteData is None: + raise TProtocolException(message="Required field deleteData is unset!") + if self.cascade is None: + raise TProtocolException(message="Required field cascade is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CmRecycleRequest: + """ + Attributes: + - dataPath + - purge + + """ + + def __init__( + self, + dataPath=None, + purge=None, + ): + self.dataPath = dataPath + self.purge = purge + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dataPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.purge = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CmRecycleRequest") + if self.dataPath is not None: + oprot.writeFieldBegin("dataPath", TType.STRING, 1) + oprot.writeString(self.dataPath.encode("utf-8") if sys.version_info[0] == 2 else self.dataPath) + oprot.writeFieldEnd() + if self.purge is not None: + oprot.writeFieldBegin("purge", TType.BOOL, 2) + oprot.writeBool(self.purge) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dataPath is None: + raise TProtocolException(message="Required field dataPath is unset!") + if self.purge is None: + raise TProtocolException(message="Required field purge is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CmRecycleResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CmRecycleResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TableMeta: + """ + Attributes: + - dbName + - tableName + - tableType + - comments + - catName + + """ + + def __init__( + self, + dbName=None, + tableName=None, + tableType=None, + comments=None, + catName=None, + ): + self.dbName = dbName + self.tableName = tableName + self.tableType = tableType + self.comments = comments + self.catName = catName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableType = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.comments = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TableMeta") + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 1) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 2) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.tableType is not None: + oprot.writeFieldBegin("tableType", TType.STRING, 3) + oprot.writeString(self.tableType.encode("utf-8") if sys.version_info[0] == 2 else self.tableType) + oprot.writeFieldEnd() + if self.comments is not None: + oprot.writeFieldBegin("comments", TType.STRING, 4) + oprot.writeString(self.comments.encode("utf-8") if sys.version_info[0] == 2 else self.comments) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 5) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + if self.tableType is None: + raise TProtocolException(message="Required field tableType is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Materialization: + """ + Attributes: + - sourceTablesUpdateDeleteModified + - sourceTablesCompacted + + """ + + def __init__( + self, + sourceTablesUpdateDeleteModified=None, + sourceTablesCompacted=None, + ): + self.sourceTablesUpdateDeleteModified = sourceTablesUpdateDeleteModified + self.sourceTablesCompacted = sourceTablesCompacted + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.BOOL: + self.sourceTablesUpdateDeleteModified = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.sourceTablesCompacted = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Materialization") + if self.sourceTablesUpdateDeleteModified is not None: + oprot.writeFieldBegin("sourceTablesUpdateDeleteModified", TType.BOOL, 1) + oprot.writeBool(self.sourceTablesUpdateDeleteModified) + oprot.writeFieldEnd() + if self.sourceTablesCompacted is not None: + oprot.writeFieldBegin("sourceTablesCompacted", TType.BOOL, 2) + oprot.writeBool(self.sourceTablesCompacted) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.sourceTablesUpdateDeleteModified is None: + raise TProtocolException(message="Required field sourceTablesUpdateDeleteModified is unset!") + if self.sourceTablesCompacted is None: + raise TProtocolException(message="Required field sourceTablesCompacted is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMResourcePlan: + """ + Attributes: + - name + - status + - queryParallelism + - defaultPoolPath + - ns + + """ + + def __init__( + self, + name=None, + status=None, + queryParallelism=None, + defaultPoolPath=None, + ns=None, + ): + self.name = name + self.status = status + self.queryParallelism = queryParallelism + self.defaultPoolPath = defaultPoolPath + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.status = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I32: + self.queryParallelism = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.defaultPoolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMResourcePlan") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.status is not None: + oprot.writeFieldBegin("status", TType.I32, 2) + oprot.writeI32(self.status) + oprot.writeFieldEnd() + if self.queryParallelism is not None: + oprot.writeFieldBegin("queryParallelism", TType.I32, 3) + oprot.writeI32(self.queryParallelism) + oprot.writeFieldEnd() + if self.defaultPoolPath is not None: + oprot.writeFieldBegin("defaultPoolPath", TType.STRING, 4) + oprot.writeString(self.defaultPoolPath.encode("utf-8") if sys.version_info[0] == 2 else self.defaultPoolPath) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 5) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.name is None: + raise TProtocolException(message="Required field name is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMNullableResourcePlan: + """ + Attributes: + - name + - status + - queryParallelism + - isSetQueryParallelism + - defaultPoolPath + - isSetDefaultPoolPath + - ns + + """ + + def __init__( + self, + name=None, + status=None, + queryParallelism=None, + isSetQueryParallelism=None, + defaultPoolPath=None, + isSetDefaultPoolPath=None, + ns=None, + ): + self.name = name + self.status = status + self.queryParallelism = queryParallelism + self.isSetQueryParallelism = isSetQueryParallelism + self.defaultPoolPath = defaultPoolPath + self.isSetDefaultPoolPath = isSetDefaultPoolPath + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.status = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.queryParallelism = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.isSetQueryParallelism = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.defaultPoolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.isSetDefaultPoolPath = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMNullableResourcePlan") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.status is not None: + oprot.writeFieldBegin("status", TType.I32, 2) + oprot.writeI32(self.status) + oprot.writeFieldEnd() + if self.queryParallelism is not None: + oprot.writeFieldBegin("queryParallelism", TType.I32, 4) + oprot.writeI32(self.queryParallelism) + oprot.writeFieldEnd() + if self.isSetQueryParallelism is not None: + oprot.writeFieldBegin("isSetQueryParallelism", TType.BOOL, 5) + oprot.writeBool(self.isSetQueryParallelism) + oprot.writeFieldEnd() + if self.defaultPoolPath is not None: + oprot.writeFieldBegin("defaultPoolPath", TType.STRING, 6) + oprot.writeString(self.defaultPoolPath.encode("utf-8") if sys.version_info[0] == 2 else self.defaultPoolPath) + oprot.writeFieldEnd() + if self.isSetDefaultPoolPath is not None: + oprot.writeFieldBegin("isSetDefaultPoolPath", TType.BOOL, 7) + oprot.writeBool(self.isSetDefaultPoolPath) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 8) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMPool: + """ + Attributes: + - resourcePlanName + - poolPath + - allocFraction + - queryParallelism + - schedulingPolicy + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + poolPath=None, + allocFraction=None, + queryParallelism=None, + schedulingPolicy=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.poolPath = poolPath + self.allocFraction = allocFraction + self.queryParallelism = queryParallelism + self.schedulingPolicy = schedulingPolicy + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.poolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.DOUBLE: + self.allocFraction = iprot.readDouble() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.queryParallelism = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.schedulingPolicy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMPool") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.poolPath is not None: + oprot.writeFieldBegin("poolPath", TType.STRING, 2) + oprot.writeString(self.poolPath.encode("utf-8") if sys.version_info[0] == 2 else self.poolPath) + oprot.writeFieldEnd() + if self.allocFraction is not None: + oprot.writeFieldBegin("allocFraction", TType.DOUBLE, 3) + oprot.writeDouble(self.allocFraction) + oprot.writeFieldEnd() + if self.queryParallelism is not None: + oprot.writeFieldBegin("queryParallelism", TType.I32, 4) + oprot.writeI32(self.queryParallelism) + oprot.writeFieldEnd() + if self.schedulingPolicy is not None: + oprot.writeFieldBegin("schedulingPolicy", TType.STRING, 5) + oprot.writeString(self.schedulingPolicy.encode("utf-8") if sys.version_info[0] == 2 else self.schedulingPolicy) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 6) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.resourcePlanName is None: + raise TProtocolException(message="Required field resourcePlanName is unset!") + if self.poolPath is None: + raise TProtocolException(message="Required field poolPath is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMNullablePool: + """ + Attributes: + - resourcePlanName + - poolPath + - allocFraction + - queryParallelism + - schedulingPolicy + - isSetSchedulingPolicy + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + poolPath=None, + allocFraction=None, + queryParallelism=None, + schedulingPolicy=None, + isSetSchedulingPolicy=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.poolPath = poolPath + self.allocFraction = allocFraction + self.queryParallelism = queryParallelism + self.schedulingPolicy = schedulingPolicy + self.isSetSchedulingPolicy = isSetSchedulingPolicy + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.poolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.DOUBLE: + self.allocFraction = iprot.readDouble() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I32: + self.queryParallelism = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.schedulingPolicy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.BOOL: + self.isSetSchedulingPolicy = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMNullablePool") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.poolPath is not None: + oprot.writeFieldBegin("poolPath", TType.STRING, 2) + oprot.writeString(self.poolPath.encode("utf-8") if sys.version_info[0] == 2 else self.poolPath) + oprot.writeFieldEnd() + if self.allocFraction is not None: + oprot.writeFieldBegin("allocFraction", TType.DOUBLE, 3) + oprot.writeDouble(self.allocFraction) + oprot.writeFieldEnd() + if self.queryParallelism is not None: + oprot.writeFieldBegin("queryParallelism", TType.I32, 4) + oprot.writeI32(self.queryParallelism) + oprot.writeFieldEnd() + if self.schedulingPolicy is not None: + oprot.writeFieldBegin("schedulingPolicy", TType.STRING, 5) + oprot.writeString(self.schedulingPolicy.encode("utf-8") if sys.version_info[0] == 2 else self.schedulingPolicy) + oprot.writeFieldEnd() + if self.isSetSchedulingPolicy is not None: + oprot.writeFieldBegin("isSetSchedulingPolicy", TType.BOOL, 6) + oprot.writeBool(self.isSetSchedulingPolicy) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 7) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.resourcePlanName is None: + raise TProtocolException(message="Required field resourcePlanName is unset!") + if self.poolPath is None: + raise TProtocolException(message="Required field poolPath is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMTrigger: + """ + Attributes: + - resourcePlanName + - triggerName + - triggerExpression + - actionExpression + - isInUnmanaged + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + triggerName=None, + triggerExpression=None, + actionExpression=None, + isInUnmanaged=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.triggerName = triggerName + self.triggerExpression = triggerExpression + self.actionExpression = actionExpression + self.isInUnmanaged = isInUnmanaged + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.triggerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.triggerExpression = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.actionExpression = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.isInUnmanaged = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMTrigger") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.triggerName is not None: + oprot.writeFieldBegin("triggerName", TType.STRING, 2) + oprot.writeString(self.triggerName.encode("utf-8") if sys.version_info[0] == 2 else self.triggerName) + oprot.writeFieldEnd() + if self.triggerExpression is not None: + oprot.writeFieldBegin("triggerExpression", TType.STRING, 3) + oprot.writeString(self.triggerExpression.encode("utf-8") if sys.version_info[0] == 2 else self.triggerExpression) + oprot.writeFieldEnd() + if self.actionExpression is not None: + oprot.writeFieldBegin("actionExpression", TType.STRING, 4) + oprot.writeString(self.actionExpression.encode("utf-8") if sys.version_info[0] == 2 else self.actionExpression) + oprot.writeFieldEnd() + if self.isInUnmanaged is not None: + oprot.writeFieldBegin("isInUnmanaged", TType.BOOL, 5) + oprot.writeBool(self.isInUnmanaged) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 6) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.resourcePlanName is None: + raise TProtocolException(message="Required field resourcePlanName is unset!") + if self.triggerName is None: + raise TProtocolException(message="Required field triggerName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMMapping: + """ + Attributes: + - resourcePlanName + - entityType + - entityName + - poolPath + - ordering + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + entityType=None, + entityName=None, + poolPath=None, + ordering=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.entityType = entityType + self.entityName = entityName + self.poolPath = poolPath + self.ordering = ordering + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.entityType = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.entityName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.poolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.ordering = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMMapping") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.entityType is not None: + oprot.writeFieldBegin("entityType", TType.STRING, 2) + oprot.writeString(self.entityType.encode("utf-8") if sys.version_info[0] == 2 else self.entityType) + oprot.writeFieldEnd() + if self.entityName is not None: + oprot.writeFieldBegin("entityName", TType.STRING, 3) + oprot.writeString(self.entityName.encode("utf-8") if sys.version_info[0] == 2 else self.entityName) + oprot.writeFieldEnd() + if self.poolPath is not None: + oprot.writeFieldBegin("poolPath", TType.STRING, 4) + oprot.writeString(self.poolPath.encode("utf-8") if sys.version_info[0] == 2 else self.poolPath) + oprot.writeFieldEnd() + if self.ordering is not None: + oprot.writeFieldBegin("ordering", TType.I32, 5) + oprot.writeI32(self.ordering) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 6) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.resourcePlanName is None: + raise TProtocolException(message="Required field resourcePlanName is unset!") + if self.entityType is None: + raise TProtocolException(message="Required field entityType is unset!") + if self.entityName is None: + raise TProtocolException(message="Required field entityName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMPoolTrigger: + """ + Attributes: + - pool + - trigger + - ns + + """ + + def __init__( + self, + pool=None, + trigger=None, + ns=None, + ): + self.pool = pool + self.trigger = trigger + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.pool = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.trigger = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMPoolTrigger") + if self.pool is not None: + oprot.writeFieldBegin("pool", TType.STRING, 1) + oprot.writeString(self.pool.encode("utf-8") if sys.version_info[0] == 2 else self.pool) + oprot.writeFieldEnd() + if self.trigger is not None: + oprot.writeFieldBegin("trigger", TType.STRING, 2) + oprot.writeString(self.trigger.encode("utf-8") if sys.version_info[0] == 2 else self.trigger) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 3) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.pool is None: + raise TProtocolException(message="Required field pool is unset!") + if self.trigger is None: + raise TProtocolException(message="Required field trigger is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMFullResourcePlan: + """ + Attributes: + - plan + - pools + - mappings + - triggers + - poolTriggers + + """ + + def __init__( + self, + plan=None, + pools=None, + mappings=None, + triggers=None, + poolTriggers=None, + ): + self.plan = plan + self.pools = pools + self.mappings = mappings + self.triggers = triggers + self.poolTriggers = poolTriggers + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.plan = WMResourcePlan() + self.plan.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.pools = [] + (_etype998, _size995) = iprot.readListBegin() + for _i999 in range(_size995): + _elem1000 = WMPool() + _elem1000.read(iprot) + self.pools.append(_elem1000) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.mappings = [] + (_etype1004, _size1001) = iprot.readListBegin() + for _i1005 in range(_size1001): + _elem1006 = WMMapping() + _elem1006.read(iprot) + self.mappings.append(_elem1006) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.triggers = [] + (_etype1010, _size1007) = iprot.readListBegin() + for _i1011 in range(_size1007): + _elem1012 = WMTrigger() + _elem1012.read(iprot) + self.triggers.append(_elem1012) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.poolTriggers = [] + (_etype1016, _size1013) = iprot.readListBegin() + for _i1017 in range(_size1013): + _elem1018 = WMPoolTrigger() + _elem1018.read(iprot) + self.poolTriggers.append(_elem1018) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMFullResourcePlan") + if self.plan is not None: + oprot.writeFieldBegin("plan", TType.STRUCT, 1) + self.plan.write(oprot) + oprot.writeFieldEnd() + if self.pools is not None: + oprot.writeFieldBegin("pools", TType.LIST, 2) + oprot.writeListBegin(TType.STRUCT, len(self.pools)) + for iter1019 in self.pools: + iter1019.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.mappings is not None: + oprot.writeFieldBegin("mappings", TType.LIST, 3) + oprot.writeListBegin(TType.STRUCT, len(self.mappings)) + for iter1020 in self.mappings: + iter1020.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.triggers is not None: + oprot.writeFieldBegin("triggers", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.triggers)) + for iter1021 in self.triggers: + iter1021.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.poolTriggers is not None: + oprot.writeFieldBegin("poolTriggers", TType.LIST, 5) + oprot.writeListBegin(TType.STRUCT, len(self.poolTriggers)) + for iter1022 in self.poolTriggers: + iter1022.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.plan is None: + raise TProtocolException(message="Required field plan is unset!") + if self.pools is None: + raise TProtocolException(message="Required field pools is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateResourcePlanRequest: + """ + Attributes: + - resourcePlan + - copyFrom + + """ + + def __init__( + self, + resourcePlan=None, + copyFrom=None, + ): + self.resourcePlan = resourcePlan + self.copyFrom = copyFrom + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.resourcePlan = WMResourcePlan() + self.resourcePlan.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.copyFrom = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateResourcePlanRequest") + if self.resourcePlan is not None: + oprot.writeFieldBegin("resourcePlan", TType.STRUCT, 1) + self.resourcePlan.write(oprot) + oprot.writeFieldEnd() + if self.copyFrom is not None: + oprot.writeFieldBegin("copyFrom", TType.STRING, 2) + oprot.writeString(self.copyFrom.encode("utf-8") if sys.version_info[0] == 2 else self.copyFrom) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateResourcePlanResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateResourcePlanResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetActiveResourcePlanRequest: + """ + Attributes: + - ns + + """ + + def __init__( + self, + ns=None, + ): + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetActiveResourcePlanRequest") + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 1) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetActiveResourcePlanResponse: + """ + Attributes: + - resourcePlan + + """ + + def __init__( + self, + resourcePlan=None, + ): + self.resourcePlan = resourcePlan + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.resourcePlan = WMFullResourcePlan() + self.resourcePlan.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetActiveResourcePlanResponse") + if self.resourcePlan is not None: + oprot.writeFieldBegin("resourcePlan", TType.STRUCT, 1) + self.resourcePlan.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetResourcePlanRequest: + """ + Attributes: + - resourcePlanName + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetResourcePlanRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 2) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetResourcePlanResponse: + """ + Attributes: + - resourcePlan + + """ + + def __init__( + self, + resourcePlan=None, + ): + self.resourcePlan = resourcePlan + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.resourcePlan = WMFullResourcePlan() + self.resourcePlan.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetResourcePlanResponse") + if self.resourcePlan is not None: + oprot.writeFieldBegin("resourcePlan", TType.STRUCT, 1) + self.resourcePlan.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetAllResourcePlanRequest: + """ + Attributes: + - ns + + """ + + def __init__( + self, + ns=None, + ): + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetAllResourcePlanRequest") + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 1) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetAllResourcePlanResponse: + """ + Attributes: + - resourcePlans + + """ + + def __init__( + self, + resourcePlans=None, + ): + self.resourcePlans = resourcePlans + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.resourcePlans = [] + (_etype1026, _size1023) = iprot.readListBegin() + for _i1027 in range(_size1023): + _elem1028 = WMResourcePlan() + _elem1028.read(iprot) + self.resourcePlans.append(_elem1028) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetAllResourcePlanResponse") + if self.resourcePlans is not None: + oprot.writeFieldBegin("resourcePlans", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.resourcePlans)) + for iter1029 in self.resourcePlans: + iter1029.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMAlterResourcePlanRequest: + """ + Attributes: + - resourcePlanName + - resourcePlan + - isEnableAndActivate + - isForceDeactivate + - isReplace + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + resourcePlan=None, + isEnableAndActivate=None, + isForceDeactivate=None, + isReplace=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.resourcePlan = resourcePlan + self.isEnableAndActivate = isEnableAndActivate + self.isForceDeactivate = isForceDeactivate + self.isReplace = isReplace + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.resourcePlan = WMNullableResourcePlan() + self.resourcePlan.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.BOOL: + self.isEnableAndActivate = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.isForceDeactivate = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.BOOL: + self.isReplace = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMAlterResourcePlanRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.resourcePlan is not None: + oprot.writeFieldBegin("resourcePlan", TType.STRUCT, 2) + self.resourcePlan.write(oprot) + oprot.writeFieldEnd() + if self.isEnableAndActivate is not None: + oprot.writeFieldBegin("isEnableAndActivate", TType.BOOL, 3) + oprot.writeBool(self.isEnableAndActivate) + oprot.writeFieldEnd() + if self.isForceDeactivate is not None: + oprot.writeFieldBegin("isForceDeactivate", TType.BOOL, 4) + oprot.writeBool(self.isForceDeactivate) + oprot.writeFieldEnd() + if self.isReplace is not None: + oprot.writeFieldBegin("isReplace", TType.BOOL, 5) + oprot.writeBool(self.isReplace) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 6) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMAlterResourcePlanResponse: + """ + Attributes: + - fullResourcePlan + + """ + + def __init__( + self, + fullResourcePlan=None, + ): + self.fullResourcePlan = fullResourcePlan + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.fullResourcePlan = WMFullResourcePlan() + self.fullResourcePlan.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMAlterResourcePlanResponse") + if self.fullResourcePlan is not None: + oprot.writeFieldBegin("fullResourcePlan", TType.STRUCT, 1) + self.fullResourcePlan.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMValidateResourcePlanRequest: + """ + Attributes: + - resourcePlanName + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMValidateResourcePlanRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 2) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMValidateResourcePlanResponse: + """ + Attributes: + - errors + - warnings + + """ + + def __init__( + self, + errors=None, + warnings=None, + ): + self.errors = errors + self.warnings = warnings + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.errors = [] + (_etype1033, _size1030) = iprot.readListBegin() + for _i1034 in range(_size1030): + _elem1035 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.errors.append(_elem1035) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.LIST: + self.warnings = [] + (_etype1039, _size1036) = iprot.readListBegin() + for _i1040 in range(_size1036): + _elem1041 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.warnings.append(_elem1041) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMValidateResourcePlanResponse") + if self.errors is not None: + oprot.writeFieldBegin("errors", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.errors)) + for iter1042 in self.errors: + oprot.writeString(iter1042.encode("utf-8") if sys.version_info[0] == 2 else iter1042) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.warnings is not None: + oprot.writeFieldBegin("warnings", TType.LIST, 2) + oprot.writeListBegin(TType.STRING, len(self.warnings)) + for iter1043 in self.warnings: + oprot.writeString(iter1043.encode("utf-8") if sys.version_info[0] == 2 else iter1043) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropResourcePlanRequest: + """ + Attributes: + - resourcePlanName + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropResourcePlanRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 2) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropResourcePlanResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropResourcePlanResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateTriggerRequest: + """ + Attributes: + - trigger + + """ + + def __init__( + self, + trigger=None, + ): + self.trigger = trigger + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.trigger = WMTrigger() + self.trigger.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateTriggerRequest") + if self.trigger is not None: + oprot.writeFieldBegin("trigger", TType.STRUCT, 1) + self.trigger.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateTriggerResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateTriggerResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMAlterTriggerRequest: + """ + Attributes: + - trigger + + """ + + def __init__( + self, + trigger=None, + ): + self.trigger = trigger + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.trigger = WMTrigger() + self.trigger.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMAlterTriggerRequest") + if self.trigger is not None: + oprot.writeFieldBegin("trigger", TType.STRUCT, 1) + self.trigger.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMAlterTriggerResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMAlterTriggerResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropTriggerRequest: + """ + Attributes: + - resourcePlanName + - triggerName + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + triggerName=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.triggerName = triggerName + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.triggerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropTriggerRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.triggerName is not None: + oprot.writeFieldBegin("triggerName", TType.STRING, 2) + oprot.writeString(self.triggerName.encode("utf-8") if sys.version_info[0] == 2 else self.triggerName) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 3) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropTriggerResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropTriggerResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetTriggersForResourePlanRequest: + """ + Attributes: + - resourcePlanName + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetTriggersForResourePlanRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 2) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMGetTriggersForResourePlanResponse: + """ + Attributes: + - triggers + + """ + + def __init__( + self, + triggers=None, + ): + self.triggers = triggers + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.triggers = [] + (_etype1047, _size1044) = iprot.readListBegin() + for _i1048 in range(_size1044): + _elem1049 = WMTrigger() + _elem1049.read(iprot) + self.triggers.append(_elem1049) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMGetTriggersForResourePlanResponse") + if self.triggers is not None: + oprot.writeFieldBegin("triggers", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.triggers)) + for iter1050 in self.triggers: + iter1050.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreatePoolRequest: + """ + Attributes: + - pool + + """ + + def __init__( + self, + pool=None, + ): + self.pool = pool + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.pool = WMPool() + self.pool.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreatePoolRequest") + if self.pool is not None: + oprot.writeFieldBegin("pool", TType.STRUCT, 1) + self.pool.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreatePoolResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreatePoolResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMAlterPoolRequest: + """ + Attributes: + - pool + - poolPath + + """ + + def __init__( + self, + pool=None, + poolPath=None, + ): + self.pool = pool + self.poolPath = poolPath + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.pool = WMNullablePool() + self.pool.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.poolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMAlterPoolRequest") + if self.pool is not None: + oprot.writeFieldBegin("pool", TType.STRUCT, 1) + self.pool.write(oprot) + oprot.writeFieldEnd() + if self.poolPath is not None: + oprot.writeFieldBegin("poolPath", TType.STRING, 2) + oprot.writeString(self.poolPath.encode("utf-8") if sys.version_info[0] == 2 else self.poolPath) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMAlterPoolResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMAlterPoolResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropPoolRequest: + """ + Attributes: + - resourcePlanName + - poolPath + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + poolPath=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.poolPath = poolPath + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.poolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropPoolRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.poolPath is not None: + oprot.writeFieldBegin("poolPath", TType.STRING, 2) + oprot.writeString(self.poolPath.encode("utf-8") if sys.version_info[0] == 2 else self.poolPath) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 3) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropPoolResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropPoolResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateOrUpdateMappingRequest: + """ + Attributes: + - mapping + - update + + """ + + def __init__( + self, + mapping=None, + update=None, + ): + self.mapping = mapping + self.update = update + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.mapping = WMMapping() + self.mapping.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.update = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateOrUpdateMappingRequest") + if self.mapping is not None: + oprot.writeFieldBegin("mapping", TType.STRUCT, 1) + self.mapping.write(oprot) + oprot.writeFieldEnd() + if self.update is not None: + oprot.writeFieldBegin("update", TType.BOOL, 2) + oprot.writeBool(self.update) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateOrUpdateMappingResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateOrUpdateMappingResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropMappingRequest: + """ + Attributes: + - mapping + + """ + + def __init__( + self, + mapping=None, + ): + self.mapping = mapping + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.mapping = WMMapping() + self.mapping.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropMappingRequest") + if self.mapping is not None: + oprot.writeFieldBegin("mapping", TType.STRUCT, 1) + self.mapping.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMDropMappingResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMDropMappingResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateOrDropTriggerToPoolMappingRequest: + """ + Attributes: + - resourcePlanName + - triggerName + - poolPath + - drop + - ns + + """ + + def __init__( + self, + resourcePlanName=None, + triggerName=None, + poolPath=None, + drop=None, + ns=None, + ): + self.resourcePlanName = resourcePlanName + self.triggerName = triggerName + self.poolPath = poolPath + self.drop = drop + self.ns = ns + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.resourcePlanName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.triggerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.poolPath = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.drop = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.ns = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateOrDropTriggerToPoolMappingRequest") + if self.resourcePlanName is not None: + oprot.writeFieldBegin("resourcePlanName", TType.STRING, 1) + oprot.writeString(self.resourcePlanName.encode("utf-8") if sys.version_info[0] == 2 else self.resourcePlanName) + oprot.writeFieldEnd() + if self.triggerName is not None: + oprot.writeFieldBegin("triggerName", TType.STRING, 2) + oprot.writeString(self.triggerName.encode("utf-8") if sys.version_info[0] == 2 else self.triggerName) + oprot.writeFieldEnd() + if self.poolPath is not None: + oprot.writeFieldBegin("poolPath", TType.STRING, 3) + oprot.writeString(self.poolPath.encode("utf-8") if sys.version_info[0] == 2 else self.poolPath) + oprot.writeFieldEnd() + if self.drop is not None: + oprot.writeFieldBegin("drop", TType.BOOL, 4) + oprot.writeBool(self.drop) + oprot.writeFieldEnd() + if self.ns is not None: + oprot.writeFieldBegin("ns", TType.STRING, 5) + oprot.writeString(self.ns.encode("utf-8") if sys.version_info[0] == 2 else self.ns) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class WMCreateOrDropTriggerToPoolMappingResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("WMCreateOrDropTriggerToPoolMappingResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ISchema: + """ + Attributes: + - schemaType + - name + - catName + - dbName + - compatibility + - validationLevel + - canEvolve + - schemaGroup + - description + + """ + + def __init__( + self, + schemaType=None, + name=None, + catName=None, + dbName=None, + compatibility=None, + validationLevel=None, + canEvolve=None, + schemaGroup=None, + description=None, + ): + self.schemaType = schemaType + self.name = name + self.catName = catName + self.dbName = dbName + self.compatibility = compatibility + self.validationLevel = validationLevel + self.canEvolve = canEvolve + self.schemaGroup = schemaGroup + self.description = description + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.schemaType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.compatibility = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I32: + self.validationLevel = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.BOOL: + self.canEvolve = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.schemaGroup = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ISchema") + if self.schemaType is not None: + oprot.writeFieldBegin("schemaType", TType.I32, 1) + oprot.writeI32(self.schemaType) + oprot.writeFieldEnd() + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 2) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 3) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 4) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.compatibility is not None: + oprot.writeFieldBegin("compatibility", TType.I32, 5) + oprot.writeI32(self.compatibility) + oprot.writeFieldEnd() + if self.validationLevel is not None: + oprot.writeFieldBegin("validationLevel", TType.I32, 6) + oprot.writeI32(self.validationLevel) + oprot.writeFieldEnd() + if self.canEvolve is not None: + oprot.writeFieldBegin("canEvolve", TType.BOOL, 7) + oprot.writeBool(self.canEvolve) + oprot.writeFieldEnd() + if self.schemaGroup is not None: + oprot.writeFieldBegin("schemaGroup", TType.STRING, 8) + oprot.writeString(self.schemaGroup.encode("utf-8") if sys.version_info[0] == 2 else self.schemaGroup) + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 9) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ISchemaName: + """ + Attributes: + - catName + - dbName + - schemaName + + """ + + def __init__( + self, + catName=None, + dbName=None, + schemaName=None, + ): + self.catName = catName + self.dbName = dbName + self.schemaName = schemaName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.schemaName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ISchemaName") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.schemaName is not None: + oprot.writeFieldBegin("schemaName", TType.STRING, 3) + oprot.writeString(self.schemaName.encode("utf-8") if sys.version_info[0] == 2 else self.schemaName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlterISchemaRequest: + """ + Attributes: + - name + - newSchema + + """ + + def __init__( + self, + name=None, + newSchema=None, + ): + self.name = name + self.newSchema = newSchema + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.name = ISchemaName() + self.name.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRUCT: + self.newSchema = ISchema() + self.newSchema.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlterISchemaRequest") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRUCT, 1) + self.name.write(oprot) + oprot.writeFieldEnd() + if self.newSchema is not None: + oprot.writeFieldBegin("newSchema", TType.STRUCT, 3) + self.newSchema.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SchemaVersion: + """ + Attributes: + - schema + - version + - createdAt + - cols + - state + - description + - schemaText + - fingerprint + - name + - serDe + + """ + + def __init__( + self, + schema=None, + version=None, + createdAt=None, + cols=None, + state=None, + description=None, + schemaText=None, + fingerprint=None, + name=None, + serDe=None, + ): + self.schema = schema + self.version = version + self.createdAt = createdAt + self.cols = cols + self.state = state + self.description = description + self.schemaText = schemaText + self.fingerprint = fingerprint + self.name = name + self.serDe = serDe + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.schema = ISchemaName() + self.schema.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.version = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.createdAt = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.cols = [] + (_etype1054, _size1051) = iprot.readListBegin() + for _i1055 in range(_size1051): + _elem1056 = FieldSchema() + _elem1056.read(iprot) + self.cols.append(_elem1056) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I32: + self.state = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.schemaText = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.fingerprint = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRUCT: + self.serDe = SerDeInfo() + self.serDe.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SchemaVersion") + if self.schema is not None: + oprot.writeFieldBegin("schema", TType.STRUCT, 1) + self.schema.write(oprot) + oprot.writeFieldEnd() + if self.version is not None: + oprot.writeFieldBegin("version", TType.I32, 2) + oprot.writeI32(self.version) + oprot.writeFieldEnd() + if self.createdAt is not None: + oprot.writeFieldBegin("createdAt", TType.I64, 3) + oprot.writeI64(self.createdAt) + oprot.writeFieldEnd() + if self.cols is not None: + oprot.writeFieldBegin("cols", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.cols)) + for iter1057 in self.cols: + iter1057.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.I32, 5) + oprot.writeI32(self.state) + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 6) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + if self.schemaText is not None: + oprot.writeFieldBegin("schemaText", TType.STRING, 7) + oprot.writeString(self.schemaText.encode("utf-8") if sys.version_info[0] == 2 else self.schemaText) + oprot.writeFieldEnd() + if self.fingerprint is not None: + oprot.writeFieldBegin("fingerprint", TType.STRING, 8) + oprot.writeString(self.fingerprint.encode("utf-8") if sys.version_info[0] == 2 else self.fingerprint) + oprot.writeFieldEnd() + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 9) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.serDe is not None: + oprot.writeFieldBegin("serDe", TType.STRUCT, 10) + self.serDe.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SchemaVersionDescriptor: + """ + Attributes: + - schema + - version + + """ + + def __init__( + self, + schema=None, + version=None, + ): + self.schema = schema + self.version = version + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.schema = ISchemaName() + self.schema.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.version = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SchemaVersionDescriptor") + if self.schema is not None: + oprot.writeFieldBegin("schema", TType.STRUCT, 1) + self.schema.write(oprot) + oprot.writeFieldEnd() + if self.version is not None: + oprot.writeFieldBegin("version", TType.I32, 2) + oprot.writeI32(self.version) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FindSchemasByColsRqst: + """ + Attributes: + - colName + - colNamespace + - type + + """ + + def __init__( + self, + colName=None, + colNamespace=None, + type=None, + ): + self.colName = colName + self.colNamespace = colNamespace + self.type = type + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.colName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.colNamespace = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.type = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FindSchemasByColsRqst") + if self.colName is not None: + oprot.writeFieldBegin("colName", TType.STRING, 1) + oprot.writeString(self.colName.encode("utf-8") if sys.version_info[0] == 2 else self.colName) + oprot.writeFieldEnd() + if self.colNamespace is not None: + oprot.writeFieldBegin("colNamespace", TType.STRING, 2) + oprot.writeString(self.colNamespace.encode("utf-8") if sys.version_info[0] == 2 else self.colNamespace) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.STRING, 3) + oprot.writeString(self.type.encode("utf-8") if sys.version_info[0] == 2 else self.type) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class FindSchemasByColsResp: + """ + Attributes: + - schemaVersions + + """ + + def __init__( + self, + schemaVersions=None, + ): + self.schemaVersions = schemaVersions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.schemaVersions = [] + (_etype1061, _size1058) = iprot.readListBegin() + for _i1062 in range(_size1058): + _elem1063 = SchemaVersionDescriptor() + _elem1063.read(iprot) + self.schemaVersions.append(_elem1063) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("FindSchemasByColsResp") + if self.schemaVersions is not None: + oprot.writeFieldBegin("schemaVersions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.schemaVersions)) + for iter1064 in self.schemaVersions: + iter1064.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class MapSchemaVersionToSerdeRequest: + """ + Attributes: + - schemaVersion + - serdeName + + """ + + def __init__( + self, + schemaVersion=None, + serdeName=None, + ): + self.schemaVersion = schemaVersion + self.serdeName = serdeName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.schemaVersion = SchemaVersionDescriptor() + self.schemaVersion.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.serdeName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("MapSchemaVersionToSerdeRequest") + if self.schemaVersion is not None: + oprot.writeFieldBegin("schemaVersion", TType.STRUCT, 1) + self.schemaVersion.write(oprot) + oprot.writeFieldEnd() + if self.serdeName is not None: + oprot.writeFieldBegin("serdeName", TType.STRING, 2) + oprot.writeString(self.serdeName.encode("utf-8") if sys.version_info[0] == 2 else self.serdeName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class SetSchemaVersionStateRequest: + """ + Attributes: + - schemaVersion + - state + + """ + + def __init__( + self, + schemaVersion=None, + state=None, + ): + self.schemaVersion = schemaVersion + self.state = state + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.schemaVersion = SchemaVersionDescriptor() + self.schemaVersion.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.state = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("SetSchemaVersionStateRequest") + if self.schemaVersion is not None: + oprot.writeFieldBegin("schemaVersion", TType.STRUCT, 1) + self.schemaVersion.write(oprot) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.I32, 2) + oprot.writeI32(self.state) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetSerdeRequest: + """ + Attributes: + - serdeName + + """ + + def __init__( + self, + serdeName=None, + ): + self.serdeName = serdeName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.serdeName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetSerdeRequest") + if self.serdeName is not None: + oprot.writeFieldBegin("serdeName", TType.STRING, 1) + oprot.writeString(self.serdeName.encode("utf-8") if sys.version_info[0] == 2 else self.serdeName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class RuntimeStat: + """ + Attributes: + - createTime + - weight + - payload + + """ + + def __init__( + self, + createTime=None, + weight=None, + payload=None, + ): + self.createTime = createTime + self.weight = weight + self.payload = payload + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.weight = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.payload = iprot.readBinary() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("RuntimeStat") + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 1) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.weight is not None: + oprot.writeFieldBegin("weight", TType.I32, 2) + oprot.writeI32(self.weight) + oprot.writeFieldEnd() + if self.payload is not None: + oprot.writeFieldBegin("payload", TType.STRING, 3) + oprot.writeBinary(self.payload) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.weight is None: + raise TProtocolException(message="Required field weight is unset!") + if self.payload is None: + raise TProtocolException(message="Required field payload is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetRuntimeStatsRequest: + """ + Attributes: + - maxWeight + - maxCreateTime + + """ + + def __init__( + self, + maxWeight=None, + maxCreateTime=None, + ): + self.maxWeight = maxWeight + self.maxCreateTime = maxCreateTime + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.maxWeight = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.maxCreateTime = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetRuntimeStatsRequest") + if self.maxWeight is not None: + oprot.writeFieldBegin("maxWeight", TType.I32, 1) + oprot.writeI32(self.maxWeight) + oprot.writeFieldEnd() + if self.maxCreateTime is not None: + oprot.writeFieldBegin("maxCreateTime", TType.I32, 2) + oprot.writeI32(self.maxCreateTime) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.maxWeight is None: + raise TProtocolException(message="Required field maxWeight is unset!") + if self.maxCreateTime is None: + raise TProtocolException(message="Required field maxCreateTime is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CreateTableRequest: + """ + Attributes: + - table + - envContext + - primaryKeys + - foreignKeys + - uniqueConstraints + - notNullConstraints + - defaultConstraints + - checkConstraints + - processorCapabilities + - processorIdentifier + + """ + + def __init__( + self, + table=None, + envContext=None, + primaryKeys=None, + foreignKeys=None, + uniqueConstraints=None, + notNullConstraints=None, + defaultConstraints=None, + checkConstraints=None, + processorCapabilities=None, + processorIdentifier=None, + ): + self.table = table + self.envContext = envContext + self.primaryKeys = primaryKeys + self.foreignKeys = foreignKeys + self.uniqueConstraints = uniqueConstraints + self.notNullConstraints = notNullConstraints + self.defaultConstraints = defaultConstraints + self.checkConstraints = checkConstraints + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.table = Table() + self.table.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.envContext = EnvironmentContext() + self.envContext.read(iprot) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.LIST: + self.primaryKeys = [] + (_etype1068, _size1065) = iprot.readListBegin() + for _i1069 in range(_size1065): + _elem1070 = SQLPrimaryKey() + _elem1070.read(iprot) + self.primaryKeys.append(_elem1070) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.foreignKeys = [] + (_etype1074, _size1071) = iprot.readListBegin() + for _i1075 in range(_size1071): + _elem1076 = SQLForeignKey() + _elem1076.read(iprot) + self.foreignKeys.append(_elem1076) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.LIST: + self.uniqueConstraints = [] + (_etype1080, _size1077) = iprot.readListBegin() + for _i1081 in range(_size1077): + _elem1082 = SQLUniqueConstraint() + _elem1082.read(iprot) + self.uniqueConstraints.append(_elem1082) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.notNullConstraints = [] + (_etype1086, _size1083) = iprot.readListBegin() + for _i1087 in range(_size1083): + _elem1088 = SQLNotNullConstraint() + _elem1088.read(iprot) + self.notNullConstraints.append(_elem1088) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.LIST: + self.defaultConstraints = [] + (_etype1092, _size1089) = iprot.readListBegin() + for _i1093 in range(_size1089): + _elem1094 = SQLDefaultConstraint() + _elem1094.read(iprot) + self.defaultConstraints.append(_elem1094) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.checkConstraints = [] + (_etype1098, _size1095) = iprot.readListBegin() + for _i1099 in range(_size1095): + _elem1100 = SQLCheckConstraint() + _elem1100.read(iprot) + self.checkConstraints.append(_elem1100) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype1104, _size1101) = iprot.readListBegin() + for _i1105 in range(_size1101): + _elem1106 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem1106) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CreateTableRequest") + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRUCT, 1) + self.table.write(oprot) + oprot.writeFieldEnd() + if self.envContext is not None: + oprot.writeFieldBegin("envContext", TType.STRUCT, 2) + self.envContext.write(oprot) + oprot.writeFieldEnd() + if self.primaryKeys is not None: + oprot.writeFieldBegin("primaryKeys", TType.LIST, 3) + oprot.writeListBegin(TType.STRUCT, len(self.primaryKeys)) + for iter1107 in self.primaryKeys: + iter1107.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.foreignKeys is not None: + oprot.writeFieldBegin("foreignKeys", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.foreignKeys)) + for iter1108 in self.foreignKeys: + iter1108.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.uniqueConstraints is not None: + oprot.writeFieldBegin("uniqueConstraints", TType.LIST, 5) + oprot.writeListBegin(TType.STRUCT, len(self.uniqueConstraints)) + for iter1109 in self.uniqueConstraints: + iter1109.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.notNullConstraints is not None: + oprot.writeFieldBegin("notNullConstraints", TType.LIST, 6) + oprot.writeListBegin(TType.STRUCT, len(self.notNullConstraints)) + for iter1110 in self.notNullConstraints: + iter1110.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.defaultConstraints is not None: + oprot.writeFieldBegin("defaultConstraints", TType.LIST, 7) + oprot.writeListBegin(TType.STRUCT, len(self.defaultConstraints)) + for iter1111 in self.defaultConstraints: + iter1111.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.checkConstraints is not None: + oprot.writeFieldBegin("checkConstraints", TType.LIST, 8) + oprot.writeListBegin(TType.STRUCT, len(self.checkConstraints)) + for iter1112 in self.checkConstraints: + iter1112.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 9) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter1113 in self.processorCapabilities: + oprot.writeString(iter1113.encode("utf-8") if sys.version_info[0] == 2 else iter1113) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 10) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CreateDatabaseRequest: + """ + Attributes: + - databaseName + - description + - locationUri + - parameters + - privileges + - ownerName + - ownerType + - catalogName + - createTime + - managedLocationUri + - type + - dataConnectorName + + """ + + def __init__( + self, + databaseName=None, + description=None, + locationUri=None, + parameters=None, + privileges=None, + ownerName=None, + ownerType=None, + catalogName=None, + createTime=None, + managedLocationUri=None, + type=None, + dataConnectorName=None, + ): + self.databaseName = databaseName + self.description = description + self.locationUri = locationUri + self.parameters = parameters + self.privileges = privileges + self.ownerName = ownerName + self.ownerType = ownerType + self.catalogName = catalogName + self.createTime = createTime + self.managedLocationUri = managedLocationUri + self.type = type + self.dataConnectorName = dataConnectorName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.databaseName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.description = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.locationUri = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.MAP: + self.parameters = {} + (_ktype1115, _vtype1116, _size1114) = iprot.readMapBegin() + for _i1118 in range(_size1114): + _key1119 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + _val1120 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.parameters[_key1119] = _val1120 + iprot.readMapEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.privileges = PrincipalPrivilegeSet() + self.privileges.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.ownerType = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.catalogName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I32: + self.createTime = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.managedLocationUri = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.STRING: + self.type = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 12: + if ftype == TType.STRING: + self.dataConnectorName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CreateDatabaseRequest") + if self.databaseName is not None: + oprot.writeFieldBegin("databaseName", TType.STRING, 1) + oprot.writeString(self.databaseName.encode("utf-8") if sys.version_info[0] == 2 else self.databaseName) + oprot.writeFieldEnd() + if self.description is not None: + oprot.writeFieldBegin("description", TType.STRING, 2) + oprot.writeString(self.description.encode("utf-8") if sys.version_info[0] == 2 else self.description) + oprot.writeFieldEnd() + if self.locationUri is not None: + oprot.writeFieldBegin("locationUri", TType.STRING, 3) + oprot.writeString(self.locationUri.encode("utf-8") if sys.version_info[0] == 2 else self.locationUri) + oprot.writeFieldEnd() + if self.parameters is not None: + oprot.writeFieldBegin("parameters", TType.MAP, 4) + oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters)) + for kiter1121, viter1122 in self.parameters.items(): + oprot.writeString(kiter1121.encode("utf-8") if sys.version_info[0] == 2 else kiter1121) + oprot.writeString(viter1122.encode("utf-8") if sys.version_info[0] == 2 else viter1122) + oprot.writeMapEnd() + oprot.writeFieldEnd() + if self.privileges is not None: + oprot.writeFieldBegin("privileges", TType.STRUCT, 5) + self.privileges.write(oprot) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 6) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.ownerType is not None: + oprot.writeFieldBegin("ownerType", TType.I32, 7) + oprot.writeI32(self.ownerType) + oprot.writeFieldEnd() + if self.catalogName is not None: + oprot.writeFieldBegin("catalogName", TType.STRING, 8) + oprot.writeString(self.catalogName.encode("utf-8") if sys.version_info[0] == 2 else self.catalogName) + oprot.writeFieldEnd() + if self.createTime is not None: + oprot.writeFieldBegin("createTime", TType.I32, 9) + oprot.writeI32(self.createTime) + oprot.writeFieldEnd() + if self.managedLocationUri is not None: + oprot.writeFieldBegin("managedLocationUri", TType.STRING, 10) + oprot.writeString(self.managedLocationUri.encode("utf-8") if sys.version_info[0] == 2 else self.managedLocationUri) + oprot.writeFieldEnd() + if self.type is not None: + oprot.writeFieldBegin("type", TType.STRING, 11) + oprot.writeString(self.type.encode("utf-8") if sys.version_info[0] == 2 else self.type) + oprot.writeFieldEnd() + if self.dataConnectorName is not None: + oprot.writeFieldBegin("dataConnectorName", TType.STRING, 12) + oprot.writeString(self.dataConnectorName.encode("utf-8") if sys.version_info[0] == 2 else self.dataConnectorName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.databaseName is None: + raise TProtocolException(message="Required field databaseName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class CreateDataConnectorRequest: + """ + Attributes: + - connector + + """ + + def __init__( + self, + connector=None, + ): + self.connector = connector + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.connector = DataConnector() + self.connector.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("CreateDataConnectorRequest") + if self.connector is not None: + oprot.writeFieldBegin("connector", TType.STRUCT, 1) + self.connector.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetDataConnectorRequest: + """ + Attributes: + - connectorName + + """ + + def __init__( + self, + connectorName=None, + ): + self.connectorName = connectorName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.connectorName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetDataConnectorRequest") + if self.connectorName is not None: + oprot.writeFieldBegin("connectorName", TType.STRING, 1) + oprot.writeString(self.connectorName.encode("utf-8") if sys.version_info[0] == 2 else self.connectorName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.connectorName is None: + raise TProtocolException(message="Required field connectorName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ScheduledQueryPollRequest: + """ + Attributes: + - clusterNamespace + + """ + + def __init__( + self, + clusterNamespace=None, + ): + self.clusterNamespace = clusterNamespace + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.clusterNamespace = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ScheduledQueryPollRequest") + if self.clusterNamespace is not None: + oprot.writeFieldBegin("clusterNamespace", TType.STRING, 1) + oprot.writeString(self.clusterNamespace.encode("utf-8") if sys.version_info[0] == 2 else self.clusterNamespace) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.clusterNamespace is None: + raise TProtocolException(message="Required field clusterNamespace is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ScheduledQueryKey: + """ + Attributes: + - scheduleName + - clusterNamespace + + """ + + def __init__( + self, + scheduleName=None, + clusterNamespace=None, + ): + self.scheduleName = scheduleName + self.clusterNamespace = clusterNamespace + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.scheduleName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.clusterNamespace = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ScheduledQueryKey") + if self.scheduleName is not None: + oprot.writeFieldBegin("scheduleName", TType.STRING, 1) + oprot.writeString(self.scheduleName.encode("utf-8") if sys.version_info[0] == 2 else self.scheduleName) + oprot.writeFieldEnd() + if self.clusterNamespace is not None: + oprot.writeFieldBegin("clusterNamespace", TType.STRING, 2) + oprot.writeString(self.clusterNamespace.encode("utf-8") if sys.version_info[0] == 2 else self.clusterNamespace) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.scheduleName is None: + raise TProtocolException(message="Required field scheduleName is unset!") + if self.clusterNamespace is None: + raise TProtocolException(message="Required field clusterNamespace is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ScheduledQueryPollResponse: + """ + Attributes: + - scheduleKey + - executionId + - query + - user + + """ + + def __init__( + self, + scheduleKey=None, + executionId=None, + query=None, + user=None, + ): + self.scheduleKey = scheduleKey + self.executionId = executionId + self.query = query + self.user = user + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.scheduleKey = ScheduledQueryKey() + self.scheduleKey.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I64: + self.executionId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.query = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ScheduledQueryPollResponse") + if self.scheduleKey is not None: + oprot.writeFieldBegin("scheduleKey", TType.STRUCT, 1) + self.scheduleKey.write(oprot) + oprot.writeFieldEnd() + if self.executionId is not None: + oprot.writeFieldBegin("executionId", TType.I64, 2) + oprot.writeI64(self.executionId) + oprot.writeFieldEnd() + if self.query is not None: + oprot.writeFieldBegin("query", TType.STRING, 3) + oprot.writeString(self.query.encode("utf-8") if sys.version_info[0] == 2 else self.query) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 4) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ScheduledQuery: + """ + Attributes: + - scheduleKey + - enabled + - schedule + - user + - query + - nextExecution + + """ + + def __init__( + self, + scheduleKey=None, + enabled=None, + schedule=None, + user=None, + query=None, + nextExecution=None, + ): + self.scheduleKey = scheduleKey + self.enabled = enabled + self.schedule = schedule + self.user = user + self.query = query + self.nextExecution = nextExecution + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.scheduleKey = ScheduledQueryKey() + self.scheduleKey.read(iprot) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.BOOL: + self.enabled = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.schedule = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.query = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I32: + self.nextExecution = iprot.readI32() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ScheduledQuery") + if self.scheduleKey is not None: + oprot.writeFieldBegin("scheduleKey", TType.STRUCT, 1) + self.scheduleKey.write(oprot) + oprot.writeFieldEnd() + if self.enabled is not None: + oprot.writeFieldBegin("enabled", TType.BOOL, 2) + oprot.writeBool(self.enabled) + oprot.writeFieldEnd() + if self.schedule is not None: + oprot.writeFieldBegin("schedule", TType.STRING, 4) + oprot.writeString(self.schedule.encode("utf-8") if sys.version_info[0] == 2 else self.schedule) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 5) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.query is not None: + oprot.writeFieldBegin("query", TType.STRING, 6) + oprot.writeString(self.query.encode("utf-8") if sys.version_info[0] == 2 else self.query) + oprot.writeFieldEnd() + if self.nextExecution is not None: + oprot.writeFieldBegin("nextExecution", TType.I32, 7) + oprot.writeI32(self.nextExecution) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.scheduleKey is None: + raise TProtocolException(message="Required field scheduleKey is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ScheduledQueryMaintenanceRequest: + """ + Attributes: + - type + - scheduledQuery + + """ + + def __init__( + self, + type=None, + scheduledQuery=None, + ): + self.type = type + self.scheduledQuery = scheduledQuery + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I32: + self.type = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRUCT: + self.scheduledQuery = ScheduledQuery() + self.scheduledQuery.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ScheduledQueryMaintenanceRequest") + if self.type is not None: + oprot.writeFieldBegin("type", TType.I32, 1) + oprot.writeI32(self.type) + oprot.writeFieldEnd() + if self.scheduledQuery is not None: + oprot.writeFieldBegin("scheduledQuery", TType.STRUCT, 2) + self.scheduledQuery.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.type is None: + raise TProtocolException(message="Required field type is unset!") + if self.scheduledQuery is None: + raise TProtocolException(message="Required field scheduledQuery is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ScheduledQueryProgressInfo: + """ + Attributes: + - scheduledExecutionId + - state + - executorQueryId + - errorMessage + + """ + + def __init__( + self, + scheduledExecutionId=None, + state=None, + executorQueryId=None, + errorMessage=None, + ): + self.scheduledExecutionId = scheduledExecutionId + self.state = state + self.executorQueryId = executorQueryId + self.errorMessage = errorMessage + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.scheduledExecutionId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.I32: + self.state = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.executorQueryId = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.errorMessage = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ScheduledQueryProgressInfo") + if self.scheduledExecutionId is not None: + oprot.writeFieldBegin("scheduledExecutionId", TType.I64, 1) + oprot.writeI64(self.scheduledExecutionId) + oprot.writeFieldEnd() + if self.state is not None: + oprot.writeFieldBegin("state", TType.I32, 2) + oprot.writeI32(self.state) + oprot.writeFieldEnd() + if self.executorQueryId is not None: + oprot.writeFieldBegin("executorQueryId", TType.STRING, 3) + oprot.writeString(self.executorQueryId.encode("utf-8") if sys.version_info[0] == 2 else self.executorQueryId) + oprot.writeFieldEnd() + if self.errorMessage is not None: + oprot.writeFieldBegin("errorMessage", TType.STRING, 4) + oprot.writeString(self.errorMessage.encode("utf-8") if sys.version_info[0] == 2 else self.errorMessage) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.scheduledExecutionId is None: + raise TProtocolException(message="Required field scheduledExecutionId is unset!") + if self.state is None: + raise TProtocolException(message="Required field state is unset!") + if self.executorQueryId is None: + raise TProtocolException(message="Required field executorQueryId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlterPartitionsRequest: + """ + Attributes: + - catName + - dbName + - tableName + - partitions + - environmentContext + - writeId + - validWriteIdList + + """ + + def __init__( + self, + catName=None, + dbName=None, + tableName=None, + partitions=None, + environmentContext=None, + writeId=-1, + validWriteIdList=None, + ): + self.catName = catName + self.dbName = dbName + self.tableName = tableName + self.partitions = partitions + self.environmentContext = environmentContext + self.writeId = writeId + self.validWriteIdList = validWriteIdList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partitions = [] + (_etype1126, _size1123) = iprot.readListBegin() + for _i1127 in range(_size1123): + _elem1128 = Partition() + _elem1128.read(iprot) + self.partitions.append(_elem1128) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.environmentContext = EnvironmentContext() + self.environmentContext.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlterPartitionsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 3) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 4) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter1129 in self.partitions: + iter1129.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.environmentContext is not None: + oprot.writeFieldBegin("environmentContext", TType.STRUCT, 5) + self.environmentContext.write(oprot) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 6) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 7) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + if self.partitions is None: + raise TProtocolException(message="Required field partitions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlterPartitionsResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlterPartitionsResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class RenamePartitionRequest: + """ + Attributes: + - catName + - dbName + - tableName + - partVals + - newPart + - validWriteIdList + - txnId + - clonePart + + """ + + def __init__( + self, + catName=None, + dbName=None, + tableName=None, + partVals=None, + newPart=None, + validWriteIdList=None, + txnId=None, + clonePart=None, + ): + self.catName = catName + self.dbName = dbName + self.tableName = tableName + self.partVals = partVals + self.newPart = newPart + self.validWriteIdList = validWriteIdList + self.txnId = txnId + self.clonePart = clonePart + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partVals = [] + (_etype1133, _size1130) = iprot.readListBegin() + for _i1134 in range(_size1130): + _elem1135 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partVals.append(_elem1135) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.newPart = Partition() + self.newPart.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.txnId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.BOOL: + self.clonePart = iprot.readBool() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("RenamePartitionRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 3) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.partVals is not None: + oprot.writeFieldBegin("partVals", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.partVals)) + for iter1136 in self.partVals: + oprot.writeString(iter1136.encode("utf-8") if sys.version_info[0] == 2 else iter1136) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.newPart is not None: + oprot.writeFieldBegin("newPart", TType.STRUCT, 5) + self.newPart.write(oprot) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 6) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.txnId is not None: + oprot.writeFieldBegin("txnId", TType.I64, 7) + oprot.writeI64(self.txnId) + oprot.writeFieldEnd() + if self.clonePart is not None: + oprot.writeFieldBegin("clonePart", TType.BOOL, 8) + oprot.writeBool(self.clonePart) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + if self.partVals is None: + raise TProtocolException(message="Required field partVals is unset!") + if self.newPart is None: + raise TProtocolException(message="Required field newPart is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class RenamePartitionResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("RenamePartitionResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlterTableRequest: + """ + Attributes: + - catName + - dbName + - tableName + - table + - environmentContext + - writeId + - validWriteIdList + - processorCapabilities + - processorIdentifier + + """ + + def __init__( + self, + catName=None, + dbName=None, + tableName=None, + table=None, + environmentContext=None, + writeId=-1, + validWriteIdList=None, + processorCapabilities=None, + processorIdentifier=None, + ): + self.catName = catName + self.dbName = dbName + self.tableName = tableName + self.table = table + self.environmentContext = environmentContext + self.writeId = writeId + self.validWriteIdList = validWriteIdList + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.table = Table() + self.table.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRUCT: + self.environmentContext = EnvironmentContext() + self.environmentContext.read(iprot) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.writeId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype1140, _size1137) = iprot.readListBegin() + for _i1141 in range(_size1137): + _elem1142 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem1142) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlterTableRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 3) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + if self.table is not None: + oprot.writeFieldBegin("table", TType.STRUCT, 4) + self.table.write(oprot) + oprot.writeFieldEnd() + if self.environmentContext is not None: + oprot.writeFieldBegin("environmentContext", TType.STRUCT, 5) + self.environmentContext.write(oprot) + oprot.writeFieldEnd() + if self.writeId is not None: + oprot.writeFieldBegin("writeId", TType.I64, 6) + oprot.writeI64(self.writeId) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 7) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 8) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter1143 in self.processorCapabilities: + oprot.writeString(iter1143.encode("utf-8") if sys.version_info[0] == 2 else iter1143) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 9) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tableName is None: + raise TProtocolException(message="Required field tableName is unset!") + if self.table is None: + raise TProtocolException(message="Required field table is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlterTableResponse: + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlterTableResponse") + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsFilterSpec: + """ + Attributes: + - filterMode + - filters + + """ + + def __init__( + self, + filterMode=None, + filters=None, + ): + self.filterMode = filterMode + self.filters = filters + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 7: + if ftype == TType.I32: + self.filterMode = iprot.readI32() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.LIST: + self.filters = [] + (_etype1147, _size1144) = iprot.readListBegin() + for _i1148 in range(_size1144): + _elem1149 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.filters.append(_elem1149) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsFilterSpec") + if self.filterMode is not None: + oprot.writeFieldBegin("filterMode", TType.I32, 7) + oprot.writeI32(self.filterMode) + oprot.writeFieldEnd() + if self.filters is not None: + oprot.writeFieldBegin("filters", TType.LIST, 8) + oprot.writeListBegin(TType.STRING, len(self.filters)) + for iter1150 in self.filters: + oprot.writeString(iter1150.encode("utf-8") if sys.version_info[0] == 2 else iter1150) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsResponse: + """ + Attributes: + - partitionSpec + + """ + + def __init__( + self, + partitionSpec=None, + ): + self.partitionSpec = partitionSpec + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitionSpec = [] + (_etype1154, _size1151) = iprot.readListBegin() + for _i1155 in range(_size1151): + _elem1156 = PartitionSpec() + _elem1156.read(iprot) + self.partitionSpec.append(_elem1156) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsResponse") + if self.partitionSpec is not None: + oprot.writeFieldBegin("partitionSpec", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitionSpec)) + for iter1157 in self.partitionSpec: + iter1157.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsRequest: + """ + Attributes: + - catName + - dbName + - tblName + - withAuth + - user + - groupNames + - projectionSpec + - filterSpec + - processorCapabilities + - processorIdentifier + - validWriteIdList + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + withAuth=None, + user=None, + groupNames=None, + projectionSpec=None, + filterSpec=None, + processorCapabilities=None, + processorIdentifier=None, + validWriteIdList=None, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.withAuth = withAuth + self.user = user + self.groupNames = groupNames + self.projectionSpec = projectionSpec + self.filterSpec = filterSpec + self.processorCapabilities = processorCapabilities + self.processorIdentifier = processorIdentifier + self.validWriteIdList = validWriteIdList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.BOOL: + self.withAuth = iprot.readBool() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.user = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.LIST: + self.groupNames = [] + (_etype1161, _size1158) = iprot.readListBegin() + for _i1162 in range(_size1158): + _elem1163 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.groupNames.append(_elem1163) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.STRUCT: + self.projectionSpec = GetProjectionsSpec() + self.projectionSpec.read(iprot) + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRUCT: + self.filterSpec = GetPartitionsFilterSpec() + self.filterSpec.read(iprot) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.LIST: + self.processorCapabilities = [] + (_etype1167, _size1164) = iprot.readListBegin() + for _i1168 in range(_size1164): + _elem1169 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.processorCapabilities.append(_elem1169) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 10: + if ftype == TType.STRING: + self.processorIdentifier = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 11: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.withAuth is not None: + oprot.writeFieldBegin("withAuth", TType.BOOL, 4) + oprot.writeBool(self.withAuth) + oprot.writeFieldEnd() + if self.user is not None: + oprot.writeFieldBegin("user", TType.STRING, 5) + oprot.writeString(self.user.encode("utf-8") if sys.version_info[0] == 2 else self.user) + oprot.writeFieldEnd() + if self.groupNames is not None: + oprot.writeFieldBegin("groupNames", TType.LIST, 6) + oprot.writeListBegin(TType.STRING, len(self.groupNames)) + for iter1170 in self.groupNames: + oprot.writeString(iter1170.encode("utf-8") if sys.version_info[0] == 2 else iter1170) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.projectionSpec is not None: + oprot.writeFieldBegin("projectionSpec", TType.STRUCT, 7) + self.projectionSpec.write(oprot) + oprot.writeFieldEnd() + if self.filterSpec is not None: + oprot.writeFieldBegin("filterSpec", TType.STRUCT, 8) + self.filterSpec.write(oprot) + oprot.writeFieldEnd() + if self.processorCapabilities is not None: + oprot.writeFieldBegin("processorCapabilities", TType.LIST, 9) + oprot.writeListBegin(TType.STRING, len(self.processorCapabilities)) + for iter1171 in self.processorCapabilities: + oprot.writeString(iter1171.encode("utf-8") if sys.version_info[0] == 2 else iter1171) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.processorIdentifier is not None: + oprot.writeFieldBegin("processorIdentifier", TType.STRING, 10) + oprot.writeString(self.processorIdentifier.encode("utf-8") if sys.version_info[0] == 2 else self.processorIdentifier) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 11) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetFieldsRequest: + """ + Attributes: + - catName + - dbName + - tblName + - envContext + - validWriteIdList + - id + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + envContext=None, + validWriteIdList=None, + id=-1, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.envContext = envContext + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.envContext = EnvironmentContext() + self.envContext.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetFieldsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.envContext is not None: + oprot.writeFieldBegin("envContext", TType.STRUCT, 4) + self.envContext.write(oprot) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 5) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 6) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetFieldsResponse: + """ + Attributes: + - fields + + """ + + def __init__( + self, + fields=None, + ): + self.fields = fields + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fields = [] + (_etype1175, _size1172) = iprot.readListBegin() + for _i1176 in range(_size1172): + _elem1177 = FieldSchema() + _elem1177.read(iprot) + self.fields.append(_elem1177) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetFieldsResponse") + if self.fields is not None: + oprot.writeFieldBegin("fields", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.fields)) + for iter1178 in self.fields: + iter1178.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fields is None: + raise TProtocolException(message="Required field fields is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetSchemaRequest: + """ + Attributes: + - catName + - dbName + - tblName + - envContext + - validWriteIdList + - id + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + envContext=None, + validWriteIdList=None, + id=-1, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.envContext = envContext + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRUCT: + self.envContext = EnvironmentContext() + self.envContext.read(iprot) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetSchemaRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.envContext is not None: + oprot.writeFieldBegin("envContext", TType.STRUCT, 4) + self.envContext.write(oprot) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 5) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 6) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetSchemaResponse: + """ + Attributes: + - fields + + """ + + def __init__( + self, + fields=None, + ): + self.fields = fields + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.fields = [] + (_etype1182, _size1179) = iprot.readListBegin() + for _i1183 in range(_size1179): + _elem1184 = FieldSchema() + _elem1184.read(iprot) + self.fields.append(_elem1184) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetSchemaResponse") + if self.fields is not None: + oprot.writeFieldBegin("fields", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.fields)) + for iter1185 in self.fields: + iter1185.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.fields is None: + raise TProtocolException(message="Required field fields is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionRequest: + """ + Attributes: + - catName + - dbName + - tblName + - partVals + - validWriteIdList + - id + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + partVals=None, + validWriteIdList=None, + id=-1, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.partVals = partVals + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partVals = [] + (_etype1189, _size1186) = iprot.readListBegin() + for _i1190 in range(_size1186): + _elem1191 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partVals.append(_elem1191) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.partVals is not None: + oprot.writeFieldBegin("partVals", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.partVals)) + for iter1192 in self.partVals: + oprot.writeString(iter1192.encode("utf-8") if sys.version_info[0] == 2 else iter1192) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 5) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 6) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + if self.partVals is None: + raise TProtocolException(message="Required field partVals is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionResponse: + """ + Attributes: + - partition + + """ + + def __init__( + self, + partition=None, + ): + self.partition = partition + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRUCT: + self.partition = Partition() + self.partition.read(iprot) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionResponse") + if self.partition is not None: + oprot.writeFieldBegin("partition", TType.STRUCT, 1) + self.partition.write(oprot) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partition is None: + raise TProtocolException(message="Required field partition is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsRequest: + """ + Attributes: + - catName + - dbName + - tblName + - maxParts + - validWriteIdList + - id + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + maxParts=-1, + validWriteIdList=None, + id=-1, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.maxParts = maxParts + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.I16: + self.maxParts = iprot.readI16() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.maxParts is not None: + oprot.writeFieldBegin("maxParts", TType.I16, 4) + oprot.writeI16(self.maxParts) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 5) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 6) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class PartitionsResponse: + """ + Attributes: + - partitions + + """ + + def __init__( + self, + partitions=None, + ): + self.partitions = partitions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype1196, _size1193) = iprot.readListBegin() + for _i1197 in range(_size1193): + _elem1198 = Partition() + _elem1198.read(iprot) + self.partitions.append(_elem1198) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("PartitionsResponse") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter1199 in self.partitions: + iter1199.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partitions is None: + raise TProtocolException(message="Required field partitions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionNamesPsRequest: + """ + Attributes: + - catName + - dbName + - tblName + - partValues + - maxParts + - validWriteIdList + - id + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + partValues=None, + maxParts=-1, + validWriteIdList=None, + id=-1, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.partValues = partValues + self.maxParts = maxParts + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partValues = [] + (_etype1203, _size1200) = iprot.readListBegin() + for _i1204 in range(_size1200): + _elem1205 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partValues.append(_elem1205) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I16: + self.maxParts = iprot.readI16() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionNamesPsRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.partValues is not None: + oprot.writeFieldBegin("partValues", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.partValues)) + for iter1206 in self.partValues: + oprot.writeString(iter1206.encode("utf-8") if sys.version_info[0] == 2 else iter1206) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.maxParts is not None: + oprot.writeFieldBegin("maxParts", TType.I16, 5) + oprot.writeI16(self.maxParts) + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 6) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 7) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionNamesPsResponse: + """ + Attributes: + - names + + """ + + def __init__( + self, + names=None, + ): + self.names = names + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.names = [] + (_etype1210, _size1207) = iprot.readListBegin() + for _i1211 in range(_size1207): + _elem1212 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.names.append(_elem1212) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionNamesPsResponse") + if self.names is not None: + oprot.writeFieldBegin("names", TType.LIST, 1) + oprot.writeListBegin(TType.STRING, len(self.names)) + for iter1213 in self.names: + oprot.writeString(iter1213.encode("utf-8") if sys.version_info[0] == 2 else iter1213) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.names is None: + raise TProtocolException(message="Required field names is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsPsWithAuthRequest: + """ + Attributes: + - catName + - dbName + - tblName + - partVals + - maxParts + - userName + - groupNames + - validWriteIdList + - id + + """ + + def __init__( + self, + catName=None, + dbName=None, + tblName=None, + partVals=None, + maxParts=-1, + userName=None, + groupNames=None, + validWriteIdList=None, + id=-1, + ): + self.catName = catName + self.dbName = dbName + self.tblName = tblName + self.partVals = partVals + self.maxParts = maxParts + self.userName = userName + self.groupNames = groupNames + self.validWriteIdList = validWriteIdList + self.id = id + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tblName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.LIST: + self.partVals = [] + (_etype1217, _size1214) = iprot.readListBegin() + for _i1218 in range(_size1214): + _elem1219 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.partVals.append(_elem1219) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.I16: + self.maxParts = iprot.readI16() + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.userName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 7: + if ftype == TType.LIST: + self.groupNames = [] + (_etype1223, _size1220) = iprot.readListBegin() + for _i1224 in range(_size1220): + _elem1225 = ( + iprot.readString().decode("utf-8", errors="replace") + if sys.version_info[0] == 2 + else iprot.readString() + ) + self.groupNames.append(_elem1225) + iprot.readListEnd() + else: + iprot.skip(ftype) + elif fid == 8: + if ftype == TType.STRING: + self.validWriteIdList = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 9: + if ftype == TType.I64: + self.id = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsPsWithAuthRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tblName is not None: + oprot.writeFieldBegin("tblName", TType.STRING, 3) + oprot.writeString(self.tblName.encode("utf-8") if sys.version_info[0] == 2 else self.tblName) + oprot.writeFieldEnd() + if self.partVals is not None: + oprot.writeFieldBegin("partVals", TType.LIST, 4) + oprot.writeListBegin(TType.STRING, len(self.partVals)) + for iter1226 in self.partVals: + oprot.writeString(iter1226.encode("utf-8") if sys.version_info[0] == 2 else iter1226) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.maxParts is not None: + oprot.writeFieldBegin("maxParts", TType.I16, 5) + oprot.writeI16(self.maxParts) + oprot.writeFieldEnd() + if self.userName is not None: + oprot.writeFieldBegin("userName", TType.STRING, 6) + oprot.writeString(self.userName.encode("utf-8") if sys.version_info[0] == 2 else self.userName) + oprot.writeFieldEnd() + if self.groupNames is not None: + oprot.writeFieldBegin("groupNames", TType.LIST, 7) + oprot.writeListBegin(TType.STRING, len(self.groupNames)) + for iter1227 in self.groupNames: + oprot.writeString(iter1227.encode("utf-8") if sys.version_info[0] == 2 else iter1227) + oprot.writeListEnd() + oprot.writeFieldEnd() + if self.validWriteIdList is not None: + oprot.writeFieldBegin("validWriteIdList", TType.STRING, 8) + oprot.writeString(self.validWriteIdList.encode("utf-8") if sys.version_info[0] == 2 else self.validWriteIdList) + oprot.writeFieldEnd() + if self.id is not None: + oprot.writeFieldBegin("id", TType.I64, 9) + oprot.writeI64(self.id) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.tblName is None: + raise TProtocolException(message="Required field tblName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPartitionsPsWithAuthResponse: + """ + Attributes: + - partitions + + """ + + def __init__( + self, + partitions=None, + ): + self.partitions = partitions + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.partitions = [] + (_etype1231, _size1228) = iprot.readListBegin() + for _i1232 in range(_size1228): + _elem1233 = Partition() + _elem1233.read(iprot) + self.partitions.append(_elem1233) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPartitionsPsWithAuthResponse") + if self.partitions is not None: + oprot.writeFieldBegin("partitions", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.partitions)) + for iter1234 in self.partitions: + iter1234.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.partitions is None: + raise TProtocolException(message="Required field partitions is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ReplicationMetrics: + """ + Attributes: + - scheduledExecutionId + - policy + - dumpExecutionId + - metadata + - progress + - messageFormat + + """ + + def __init__( + self, + scheduledExecutionId=None, + policy=None, + dumpExecutionId=None, + metadata=None, + progress=None, + messageFormat=None, + ): + self.scheduledExecutionId = scheduledExecutionId + self.policy = policy + self.dumpExecutionId = dumpExecutionId + self.metadata = metadata + self.progress = progress + self.messageFormat = messageFormat + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.scheduledExecutionId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.policy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.dumpExecutionId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.metadata = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.progress = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.messageFormat = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ReplicationMetrics") + if self.scheduledExecutionId is not None: + oprot.writeFieldBegin("scheduledExecutionId", TType.I64, 1) + oprot.writeI64(self.scheduledExecutionId) + oprot.writeFieldEnd() + if self.policy is not None: + oprot.writeFieldBegin("policy", TType.STRING, 2) + oprot.writeString(self.policy.encode("utf-8") if sys.version_info[0] == 2 else self.policy) + oprot.writeFieldEnd() + if self.dumpExecutionId is not None: + oprot.writeFieldBegin("dumpExecutionId", TType.I64, 3) + oprot.writeI64(self.dumpExecutionId) + oprot.writeFieldEnd() + if self.metadata is not None: + oprot.writeFieldBegin("metadata", TType.STRING, 4) + oprot.writeString(self.metadata.encode("utf-8") if sys.version_info[0] == 2 else self.metadata) + oprot.writeFieldEnd() + if self.progress is not None: + oprot.writeFieldBegin("progress", TType.STRING, 5) + oprot.writeString(self.progress.encode("utf-8") if sys.version_info[0] == 2 else self.progress) + oprot.writeFieldEnd() + if self.messageFormat is not None: + oprot.writeFieldBegin("messageFormat", TType.STRING, 6) + oprot.writeString(self.messageFormat.encode("utf-8") if sys.version_info[0] == 2 else self.messageFormat) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.scheduledExecutionId is None: + raise TProtocolException(message="Required field scheduledExecutionId is unset!") + if self.policy is None: + raise TProtocolException(message="Required field policy is unset!") + if self.dumpExecutionId is None: + raise TProtocolException(message="Required field dumpExecutionId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ReplicationMetricList: + """ + Attributes: + - replicationMetricList + + """ + + def __init__( + self, + replicationMetricList=None, + ): + self.replicationMetricList = replicationMetricList + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.replicationMetricList = [] + (_etype1238, _size1235) = iprot.readListBegin() + for _i1239 in range(_size1235): + _elem1240 = ReplicationMetrics() + _elem1240.read(iprot) + self.replicationMetricList.append(_elem1240) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ReplicationMetricList") + if self.replicationMetricList is not None: + oprot.writeFieldBegin("replicationMetricList", TType.LIST, 1) + oprot.writeListBegin(TType.STRUCT, len(self.replicationMetricList)) + for iter1241 in self.replicationMetricList: + iter1241.write(oprot) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.replicationMetricList is None: + raise TProtocolException(message="Required field replicationMetricList is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetReplicationMetricsRequest: + """ + Attributes: + - scheduledExecutionId + - policy + - dumpExecutionId + + """ + + def __init__( + self, + scheduledExecutionId=None, + policy=None, + dumpExecutionId=None, + ): + self.scheduledExecutionId = scheduledExecutionId + self.policy = policy + self.dumpExecutionId = dumpExecutionId + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.scheduledExecutionId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.policy = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.I64: + self.dumpExecutionId = iprot.readI64() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetReplicationMetricsRequest") + if self.scheduledExecutionId is not None: + oprot.writeFieldBegin("scheduledExecutionId", TType.I64, 1) + oprot.writeI64(self.scheduledExecutionId) + oprot.writeFieldEnd() + if self.policy is not None: + oprot.writeFieldBegin("policy", TType.STRING, 2) + oprot.writeString(self.policy.encode("utf-8") if sys.version_info[0] == 2 else self.policy) + oprot.writeFieldEnd() + if self.dumpExecutionId is not None: + oprot.writeFieldBegin("dumpExecutionId", TType.I64, 3) + oprot.writeI64(self.dumpExecutionId) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetOpenTxnsRequest: + """ + Attributes: + - excludeTxnTypes + + """ + + def __init__( + self, + excludeTxnTypes=None, + ): + self.excludeTxnTypes = excludeTxnTypes + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.LIST: + self.excludeTxnTypes = [] + (_etype1245, _size1242) = iprot.readListBegin() + for _i1246 in range(_size1242): + _elem1247 = iprot.readI32() + self.excludeTxnTypes.append(_elem1247) + iprot.readListEnd() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetOpenTxnsRequest") + if self.excludeTxnTypes is not None: + oprot.writeFieldBegin("excludeTxnTypes", TType.LIST, 1) + oprot.writeListBegin(TType.I32, len(self.excludeTxnTypes)) + for iter1248 in self.excludeTxnTypes: + oprot.writeI32(iter1248) + oprot.writeListEnd() + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class StoredProcedureRequest: + """ + Attributes: + - catName + - dbName + - procName + + """ + + def __init__( + self, + catName=None, + dbName=None, + procName=None, + ): + self.catName = catName + self.dbName = dbName + self.procName = procName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.procName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("StoredProcedureRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.procName is not None: + oprot.writeFieldBegin("procName", TType.STRING, 3) + oprot.writeString(self.procName.encode("utf-8") if sys.version_info[0] == 2 else self.procName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.procName is None: + raise TProtocolException(message="Required field procName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ListStoredProcedureRequest: + """ + Attributes: + - catName + - dbName + + """ + + def __init__( + self, + catName=None, + dbName=None, + ): + self.catName = catName + self.dbName = dbName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ListStoredProcedureRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class StoredProcedure: + """ + Attributes: + - name + - dbName + - catName + - ownerName + - source + + """ + + def __init__( + self, + name=None, + dbName=None, + catName=None, + ownerName=None, + source=None, + ): + self.name = name + self.dbName = dbName + self.catName = catName + self.ownerName = ownerName + self.source = source + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.name = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.source = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("StoredProcedure") + if self.name is not None: + oprot.writeFieldBegin("name", TType.STRING, 1) + oprot.writeString(self.name.encode("utf-8") if sys.version_info[0] == 2 else self.name) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 3) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 4) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.source is not None: + oprot.writeFieldBegin("source", TType.STRING, 5) + oprot.writeString(self.source.encode("utf-8") if sys.version_info[0] == 2 else self.source) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AddPackageRequest: + """ + Attributes: + - catName + - dbName + - packageName + - ownerName + - header + - body + + """ + + def __init__( + self, + catName=None, + dbName=None, + packageName=None, + ownerName=None, + header=None, + body=None, + ): + self.catName = catName + self.dbName = dbName + self.packageName = packageName + self.ownerName = ownerName + self.header = header + self.body = body + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.packageName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.header = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.body = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AddPackageRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.packageName is not None: + oprot.writeFieldBegin("packageName", TType.STRING, 3) + oprot.writeString(self.packageName.encode("utf-8") if sys.version_info[0] == 2 else self.packageName) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 4) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.header is not None: + oprot.writeFieldBegin("header", TType.STRING, 5) + oprot.writeString(self.header.encode("utf-8") if sys.version_info[0] == 2 else self.header) + oprot.writeFieldEnd() + if self.body is not None: + oprot.writeFieldBegin("body", TType.STRING, 6) + oprot.writeString(self.body.encode("utf-8") if sys.version_info[0] == 2 else self.body) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetPackageRequest: + """ + Attributes: + - catName + - dbName + - packageName + + """ + + def __init__( + self, + catName=None, + dbName=None, + packageName=None, + ): + self.catName = catName + self.dbName = dbName + self.packageName = packageName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.packageName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetPackageRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.packageName is not None: + oprot.writeFieldBegin("packageName", TType.STRING, 3) + oprot.writeString(self.packageName.encode("utf-8") if sys.version_info[0] == 2 else self.packageName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.packageName is None: + raise TProtocolException(message="Required field packageName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class DropPackageRequest: + """ + Attributes: + - catName + - dbName + - packageName + + """ + + def __init__( + self, + catName=None, + dbName=None, + packageName=None, + ): + self.catName = catName + self.dbName = dbName + self.packageName = packageName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.packageName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("DropPackageRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.packageName is not None: + oprot.writeFieldBegin("packageName", TType.STRING, 3) + oprot.writeString(self.packageName.encode("utf-8") if sys.version_info[0] == 2 else self.packageName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + if self.dbName is None: + raise TProtocolException(message="Required field dbName is unset!") + if self.packageName is None: + raise TProtocolException(message="Required field packageName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ListPackageRequest: + """ + Attributes: + - catName + - dbName + + """ + + def __init__( + self, + catName=None, + dbName=None, + ): + self.catName = catName + self.dbName = dbName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ListPackageRequest") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.catName is None: + raise TProtocolException(message="Required field catName is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class Package: + """ + Attributes: + - catName + - dbName + - packageName + - ownerName + - header + - body + + """ + + def __init__( + self, + catName=None, + dbName=None, + packageName=None, + ownerName=None, + header=None, + body=None, + ): + self.catName = catName + self.dbName = dbName + self.packageName = packageName + self.ownerName = ownerName + self.header = header + self.body = body + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.catName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.packageName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.ownerName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 5: + if ftype == TType.STRING: + self.header = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 6: + if ftype == TType.STRING: + self.body = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("Package") + if self.catName is not None: + oprot.writeFieldBegin("catName", TType.STRING, 1) + oprot.writeString(self.catName.encode("utf-8") if sys.version_info[0] == 2 else self.catName) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.packageName is not None: + oprot.writeFieldBegin("packageName", TType.STRING, 3) + oprot.writeString(self.packageName.encode("utf-8") if sys.version_info[0] == 2 else self.packageName) + oprot.writeFieldEnd() + if self.ownerName is not None: + oprot.writeFieldBegin("ownerName", TType.STRING, 4) + oprot.writeString(self.ownerName.encode("utf-8") if sys.version_info[0] == 2 else self.ownerName) + oprot.writeFieldEnd() + if self.header is not None: + oprot.writeFieldBegin("header", TType.STRING, 5) + oprot.writeString(self.header.encode("utf-8") if sys.version_info[0] == 2 else self.header) + oprot.writeFieldEnd() + if self.body is not None: + oprot.writeFieldBegin("body", TType.STRING, 6) + oprot.writeString(self.body.encode("utf-8") if sys.version_info[0] == 2 else self.body) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class GetAllWriteEventInfoRequest: + """ + Attributes: + - txnId + - dbName + - tableName + + """ + + def __init__( + self, + txnId=None, + dbName=None, + tableName=None, + ): + self.txnId = txnId + self.dbName = dbName + self.tableName = tableName + + def read(self, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and self.thrift_spec is not None + ): + iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec]) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.I64: + self.txnId = iprot.readI64() + else: + iprot.skip(ftype) + elif fid == 2: + if ftype == TType.STRING: + self.dbName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + elif fid == 3: + if ftype == TType.STRING: + self.tableName = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("GetAllWriteEventInfoRequest") + if self.txnId is not None: + oprot.writeFieldBegin("txnId", TType.I64, 1) + oprot.writeI64(self.txnId) + oprot.writeFieldEnd() + if self.dbName is not None: + oprot.writeFieldBegin("dbName", TType.STRING, 2) + oprot.writeString(self.dbName.encode("utf-8") if sys.version_info[0] == 2 else self.dbName) + oprot.writeFieldEnd() + if self.tableName is not None: + oprot.writeFieldBegin("tableName", TType.STRING, 3) + oprot.writeString(self.tableName.encode("utf-8") if sys.version_info[0] == 2 else self.tableName) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + if self.txnId is None: + raise TProtocolException(message="Required field txnId is unset!") + return + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class MetaException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("MetaException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UnknownTableException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UnknownTableException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UnknownDBException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UnknownDBException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class AlreadyExistsException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("AlreadyExistsException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class InvalidPartitionException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("InvalidPartitionException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class UnknownPartitionException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("UnknownPartitionException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class InvalidObjectException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("InvalidObjectException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NoSuchObjectException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NoSuchObjectException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class InvalidOperationException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("InvalidOperationException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class ConfigValSecurityException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("ConfigValSecurityException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class InvalidInputException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("InvalidInputException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NoSuchTxnException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NoSuchTxnException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TxnAbortedException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TxnAbortedException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class TxnOpenException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("TxnOpenException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +class NoSuchLockException(TException): + """ + Attributes: + - message + + """ + + def __init__( + self, + message=None, + ): + super().__setattr__("message", message) + + def __setattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __delattr__(self, *args): + raise TypeError("can't modify immutable instance") + + def __hash__(self): + return hash(self.__class__) ^ hash((self.message,)) + + @classmethod + def read(cls, iprot): + if ( + iprot._fast_decode is not None + and isinstance(iprot.trans, TTransport.CReadableTransport) + and cls.thrift_spec is not None + ): + return iprot._fast_decode(None, iprot, [cls, cls.thrift_spec]) + iprot.readStructBegin() + message = None + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + message = ( + iprot.readString().decode("utf-8", errors="replace") if sys.version_info[0] == 2 else iprot.readString() + ) + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + return cls( + message=message, + ) + + def write(self, oprot): + if oprot._fast_encode is not None and self.thrift_spec is not None: + oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec])) + return + oprot.writeStructBegin("NoSuchLockException") + if self.message is not None: + oprot.writeFieldBegin("message", TType.STRING, 1) + oprot.writeString(self.message.encode("utf-8") if sys.version_info[0] == 2 else self.message) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + def __str__(self): + return repr(self) + + def __repr__(self): + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + return "{}({})".format(self.__class__.__name__, ", ".join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) + + +all_structs.append(Version) +Version.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "version", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "comments", + "UTF8", + None, + ), # 2 +) +all_structs.append(FieldSchema) +FieldSchema.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "type", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "comment", + "UTF8", + None, + ), # 3 +) +all_structs.append(EnvironmentContext) +EnvironmentContext.thrift_spec = ( + None, # 0 + ( + 1, + TType.MAP, + "properties", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 1 +) +all_structs.append(SQLPrimaryKey) +SQLPrimaryKey.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "table_db", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "table_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "column_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "key_seq", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "pk_name", + "UTF8", + None, + ), # 5 + ( + 6, + TType.BOOL, + "enable_cstr", + None, + None, + ), # 6 + ( + 7, + TType.BOOL, + "validate_cstr", + None, + None, + ), # 7 + ( + 8, + TType.BOOL, + "rely_cstr", + None, + None, + ), # 8 + ( + 9, + TType.STRING, + "catName", + "UTF8", + None, + ), # 9 +) +all_structs.append(SQLForeignKey) +SQLForeignKey.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "pktable_db", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "pktable_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "pkcolumn_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "fktable_db", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "fktable_name", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "fkcolumn_name", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "key_seq", + None, + None, + ), # 7 + ( + 8, + TType.I32, + "update_rule", + None, + None, + ), # 8 + ( + 9, + TType.I32, + "delete_rule", + None, + None, + ), # 9 + ( + 10, + TType.STRING, + "fk_name", + "UTF8", + None, + ), # 10 + ( + 11, + TType.STRING, + "pk_name", + "UTF8", + None, + ), # 11 + ( + 12, + TType.BOOL, + "enable_cstr", + None, + None, + ), # 12 + ( + 13, + TType.BOOL, + "validate_cstr", + None, + None, + ), # 13 + ( + 14, + TType.BOOL, + "rely_cstr", + None, + None, + ), # 14 + ( + 15, + TType.STRING, + "catName", + "UTF8", + None, + ), # 15 +) +all_structs.append(SQLUniqueConstraint) +SQLUniqueConstraint.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "table_db", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "table_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "column_name", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I32, + "key_seq", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "uk_name", + "UTF8", + None, + ), # 6 + ( + 7, + TType.BOOL, + "enable_cstr", + None, + None, + ), # 7 + ( + 8, + TType.BOOL, + "validate_cstr", + None, + None, + ), # 8 + ( + 9, + TType.BOOL, + "rely_cstr", + None, + None, + ), # 9 +) +all_structs.append(SQLNotNullConstraint) +SQLNotNullConstraint.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "table_db", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "table_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "column_name", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "nn_name", + "UTF8", + None, + ), # 5 + ( + 6, + TType.BOOL, + "enable_cstr", + None, + None, + ), # 6 + ( + 7, + TType.BOOL, + "validate_cstr", + None, + None, + ), # 7 + ( + 8, + TType.BOOL, + "rely_cstr", + None, + None, + ), # 8 +) +all_structs.append(SQLDefaultConstraint) +SQLDefaultConstraint.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "table_db", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "table_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "column_name", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "default_value", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "dc_name", + "UTF8", + None, + ), # 6 + ( + 7, + TType.BOOL, + "enable_cstr", + None, + None, + ), # 7 + ( + 8, + TType.BOOL, + "validate_cstr", + None, + None, + ), # 8 + ( + 9, + TType.BOOL, + "rely_cstr", + None, + None, + ), # 9 +) +all_structs.append(SQLCheckConstraint) +SQLCheckConstraint.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "table_db", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "table_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "column_name", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "check_expression", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "dc_name", + "UTF8", + None, + ), # 6 + ( + 7, + TType.BOOL, + "enable_cstr", + None, + None, + ), # 7 + ( + 8, + TType.BOOL, + "validate_cstr", + None, + None, + ), # 8 + ( + 9, + TType.BOOL, + "rely_cstr", + None, + None, + ), # 9 +) +all_structs.append(SQLAllTableConstraints) +SQLAllTableConstraints.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "primaryKeys", + (TType.STRUCT, [SQLPrimaryKey, None], False), + None, + ), # 1 + ( + 2, + TType.LIST, + "foreignKeys", + (TType.STRUCT, [SQLForeignKey, None], False), + None, + ), # 2 + ( + 3, + TType.LIST, + "uniqueConstraints", + (TType.STRUCT, [SQLUniqueConstraint, None], False), + None, + ), # 3 + ( + 4, + TType.LIST, + "notNullConstraints", + (TType.STRUCT, [SQLNotNullConstraint, None], False), + None, + ), # 4 + ( + 5, + TType.LIST, + "defaultConstraints", + (TType.STRUCT, [SQLDefaultConstraint, None], False), + None, + ), # 5 + ( + 6, + TType.LIST, + "checkConstraints", + (TType.STRUCT, [SQLCheckConstraint, None], False), + None, + ), # 6 +) +all_structs.append(Type) +Type.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "type1", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "type2", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "fields", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 4 +) +all_structs.append(HiveObjectRef) +HiveObjectRef.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "objectType", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "objectName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "partValues", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRING, + "columnName", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "catName", + "UTF8", + None, + ), # 6 +) +all_structs.append(PrivilegeGrantInfo) +PrivilegeGrantInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "privilege", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "createTime", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "grantor", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "grantorType", + None, + None, + ), # 4 + ( + 5, + TType.BOOL, + "grantOption", + None, + None, + ), # 5 +) +all_structs.append(HiveObjectPrivilege) +HiveObjectPrivilege.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "hiveObject", + [HiveObjectRef, None], + None, + ), # 1 + ( + 2, + TType.STRING, + "principalName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I32, + "principalType", + None, + None, + ), # 3 + ( + 4, + TType.STRUCT, + "grantInfo", + [PrivilegeGrantInfo, None], + None, + ), # 4 + ( + 5, + TType.STRING, + "authorizer", + "UTF8", + None, + ), # 5 +) +all_structs.append(PrivilegeBag) +PrivilegeBag.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "privileges", + (TType.STRUCT, [HiveObjectPrivilege, None], False), + None, + ), # 1 +) +all_structs.append(PrincipalPrivilegeSet) +PrincipalPrivilegeSet.thrift_spec = ( + None, # 0 + ( + 1, + TType.MAP, + "userPrivileges", + (TType.STRING, "UTF8", TType.LIST, (TType.STRUCT, [PrivilegeGrantInfo, None], False), False), + None, + ), # 1 + ( + 2, + TType.MAP, + "groupPrivileges", + (TType.STRING, "UTF8", TType.LIST, (TType.STRUCT, [PrivilegeGrantInfo, None], False), False), + None, + ), # 2 + ( + 3, + TType.MAP, + "rolePrivileges", + (TType.STRING, "UTF8", TType.LIST, (TType.STRUCT, [PrivilegeGrantInfo, None], False), False), + None, + ), # 3 +) +all_structs.append(GrantRevokePrivilegeRequest) +GrantRevokePrivilegeRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "requestType", + None, + None, + ), # 1 + ( + 2, + TType.STRUCT, + "privileges", + [PrivilegeBag, None], + None, + ), # 2 + ( + 3, + TType.BOOL, + "revokeGrantOption", + None, + None, + ), # 3 +) +all_structs.append(GrantRevokePrivilegeResponse) +GrantRevokePrivilegeResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "success", + None, + None, + ), # 1 +) +all_structs.append(TruncateTableRequest) +TruncateTableRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "partNames", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.I64, + "writeId", + None, + -1, + ), # 4 + ( + 5, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRUCT, + "environmentContext", + [EnvironmentContext, None], + None, + ), # 6 +) +all_structs.append(TruncateTableResponse) +TruncateTableResponse.thrift_spec = () +all_structs.append(Role) +Role.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "roleName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "createTime", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 3 +) +all_structs.append(RolePrincipalGrant) +RolePrincipalGrant.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "roleName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "principalName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I32, + "principalType", + None, + None, + ), # 3 + ( + 4, + TType.BOOL, + "grantOption", + None, + None, + ), # 4 + ( + 5, + TType.I32, + "grantTime", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "grantorName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "grantorPrincipalType", + None, + None, + ), # 7 +) +all_structs.append(GetRoleGrantsForPrincipalRequest) +GetRoleGrantsForPrincipalRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "principal_name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "principal_type", + None, + None, + ), # 2 +) +all_structs.append(GetRoleGrantsForPrincipalResponse) +GetRoleGrantsForPrincipalResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "principalGrants", + (TType.STRUCT, [RolePrincipalGrant, None], False), + None, + ), # 1 +) +all_structs.append(GetPrincipalsInRoleRequest) +GetPrincipalsInRoleRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "roleName", + "UTF8", + None, + ), # 1 +) +all_structs.append(GetPrincipalsInRoleResponse) +GetPrincipalsInRoleResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "principalGrants", + (TType.STRUCT, [RolePrincipalGrant, None], False), + None, + ), # 1 +) +all_structs.append(GrantRevokeRoleRequest) +GrantRevokeRoleRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "requestType", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "roleName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "principalName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "principalType", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "grantor", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I32, + "grantorType", + None, + None, + ), # 6 + ( + 7, + TType.BOOL, + "grantOption", + None, + None, + ), # 7 +) +all_structs.append(GrantRevokeRoleResponse) +GrantRevokeRoleResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "success", + None, + None, + ), # 1 +) +all_structs.append(Catalog) +Catalog.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "description", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "locationUri", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "createTime", + None, + None, + ), # 4 +) +all_structs.append(CreateCatalogRequest) +CreateCatalogRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "catalog", + [Catalog, None], + None, + ), # 1 +) +all_structs.append(AlterCatalogRequest) +AlterCatalogRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRUCT, + "newCat", + [Catalog, None], + None, + ), # 2 +) +all_structs.append(GetCatalogRequest) +GetCatalogRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 +) +all_structs.append(GetCatalogResponse) +GetCatalogResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "catalog", + [Catalog, None], + None, + ), # 1 +) +all_structs.append(GetCatalogsResponse) +GetCatalogsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "names", + (TType.STRING, "UTF8", False), + None, + ), # 1 +) +all_structs.append(DropCatalogRequest) +DropCatalogRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 +) +all_structs.append(Database) +Database.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "description", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "locationUri", + "UTF8", + None, + ), # 3 + ( + 4, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRUCT, + "privileges", + [PrincipalPrivilegeSet, None], + None, + ), # 5 + ( + 6, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "ownerType", + None, + None, + ), # 7 + ( + 8, + TType.STRING, + "catalogName", + "UTF8", + None, + ), # 8 + ( + 9, + TType.I32, + "createTime", + None, + None, + ), # 9 + ( + 10, + TType.STRING, + "managedLocationUri", + "UTF8", + None, + ), # 10 + ( + 11, + TType.I32, + "type", + None, + None, + ), # 11 + ( + 12, + TType.STRING, + "connector_name", + "UTF8", + None, + ), # 12 + ( + 13, + TType.STRING, + "remote_dbname", + "UTF8", + None, + ), # 13 +) +all_structs.append(SerDeInfo) +SerDeInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "serializationLib", + "UTF8", + None, + ), # 2 + ( + 3, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.STRING, + "description", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "serializerClass", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "deserializerClass", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "serdeType", + None, + None, + ), # 7 +) +all_structs.append(Order) +Order.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "col", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "order", + None, + None, + ), # 2 +) +all_structs.append(SkewedInfo) +SkewedInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "skewedColNames", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.LIST, + "skewedColValues", + (TType.LIST, (TType.STRING, "UTF8", False), False), + None, + ), # 2 + ( + 3, + TType.MAP, + "skewedColValueLocationMaps", + (TType.LIST, (TType.STRING, "UTF8", False), TType.STRING, "UTF8", False), + None, + ), # 3 +) +all_structs.append(StorageDescriptor) +StorageDescriptor.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "cols", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 1 + ( + 2, + TType.STRING, + "location", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "inputFormat", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "outputFormat", + "UTF8", + None, + ), # 4 + ( + 5, + TType.BOOL, + "compressed", + None, + None, + ), # 5 + ( + 6, + TType.I32, + "numBuckets", + None, + None, + ), # 6 + ( + 7, + TType.STRUCT, + "serdeInfo", + [SerDeInfo, None], + None, + ), # 7 + ( + 8, + TType.LIST, + "bucketCols", + (TType.STRING, "UTF8", False), + None, + ), # 8 + ( + 9, + TType.LIST, + "sortCols", + (TType.STRUCT, [Order, None], False), + None, + ), # 9 + ( + 10, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 10 + ( + 11, + TType.STRUCT, + "skewedInfo", + [SkewedInfo, None], + None, + ), # 11 + ( + 12, + TType.BOOL, + "storedAsSubDirectories", + None, + None, + ), # 12 +) +all_structs.append(CreationMetadata) +CreationMetadata.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.SET, + "tablesUsed", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRING, + "validTxnList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I64, + "materializationTime", + None, + None, + ), # 6 + ( + 7, + TType.LIST, + "sourceTables", + (TType.STRUCT, [SourceTable, None], False), + None, + ), # 7 +) +all_structs.append(BooleanColumnStatsData) +BooleanColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "numTrues", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "numFalses", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 4 +) +all_structs.append(DoubleColumnStatsData) +DoubleColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.DOUBLE, + "lowValue", + None, + None, + ), # 1 + ( + 2, + TType.DOUBLE, + "highValue", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "numDVs", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 5 +) +all_structs.append(LongColumnStatsData) +LongColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lowValue", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "highValue", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "numDVs", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 5 +) +all_structs.append(StringColumnStatsData) +StringColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "maxColLen", + None, + None, + ), # 1 + ( + 2, + TType.DOUBLE, + "avgColLen", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "numDVs", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 5 +) +all_structs.append(BinaryColumnStatsData) +BinaryColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "maxColLen", + None, + None, + ), # 1 + ( + 2, + TType.DOUBLE, + "avgColLen", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 4 +) +all_structs.append(Decimal) +Decimal.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "unscaled", + "BINARY", + None, + ), # 1 + None, # 2 + ( + 3, + TType.I16, + "scale", + None, + None, + ), # 3 +) +all_structs.append(DecimalColumnStatsData) +DecimalColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "lowValue", + [Decimal, None], + None, + ), # 1 + ( + 2, + TType.STRUCT, + "highValue", + [Decimal, None], + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "numDVs", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 5 +) +all_structs.append(Date) +Date.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "daysSinceEpoch", + None, + None, + ), # 1 +) +all_structs.append(DateColumnStatsData) +DateColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "lowValue", + [Date, None], + None, + ), # 1 + ( + 2, + TType.STRUCT, + "highValue", + [Date, None], + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "numDVs", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 5 +) +all_structs.append(Timestamp) +Timestamp.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "secondsSinceEpoch", + None, + None, + ), # 1 +) +all_structs.append(TimestampColumnStatsData) +TimestampColumnStatsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "lowValue", + [Timestamp, None], + None, + ), # 1 + ( + 2, + TType.STRUCT, + "highValue", + [Timestamp, None], + None, + ), # 2 + ( + 3, + TType.I64, + "numNulls", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "numDVs", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "bitVectors", + "BINARY", + None, + ), # 5 +) +all_structs.append(ColumnStatisticsData) +ColumnStatisticsData.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "booleanStats", + [BooleanColumnStatsData, None], + None, + ), # 1 + ( + 2, + TType.STRUCT, + "longStats", + [LongColumnStatsData, None], + None, + ), # 2 + ( + 3, + TType.STRUCT, + "doubleStats", + [DoubleColumnStatsData, None], + None, + ), # 3 + ( + 4, + TType.STRUCT, + "stringStats", + [StringColumnStatsData, None], + None, + ), # 4 + ( + 5, + TType.STRUCT, + "binaryStats", + [BinaryColumnStatsData, None], + None, + ), # 5 + ( + 6, + TType.STRUCT, + "decimalStats", + [DecimalColumnStatsData, None], + None, + ), # 6 + ( + 7, + TType.STRUCT, + "dateStats", + [DateColumnStatsData, None], + None, + ), # 7 + ( + 8, + TType.STRUCT, + "timestampStats", + [TimestampColumnStatsData, None], + None, + ), # 8 +) +all_structs.append(ColumnStatisticsObj) +ColumnStatisticsObj.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "colName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "colType", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRUCT, + "statsData", + [ColumnStatisticsData, None], + None, + ), # 3 +) +all_structs.append(ColumnStatisticsDesc) +ColumnStatisticsDesc.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "isTblLevel", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "partName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "lastAnalyzed", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "catName", + "UTF8", + None, + ), # 6 +) +all_structs.append(ColumnStatistics) +ColumnStatistics.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "statsDesc", + [ColumnStatisticsDesc, None], + None, + ), # 1 + ( + 2, + TType.LIST, + "statsObj", + (TType.STRUCT, [ColumnStatisticsObj, None], False), + None, + ), # 2 + ( + 3, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "engine", + "UTF8", + None, + ), # 4 +) +all_structs.append(FileMetadata) +FileMetadata.thrift_spec = ( + None, # 0 + ( + 1, + TType.BYTE, + "type", + None, + 1, + ), # 1 + ( + 2, + TType.BYTE, + "version", + None, + 1, + ), # 2 + ( + 3, + TType.LIST, + "data", + (TType.STRING, "BINARY", False), + None, + ), # 3 +) +all_structs.append(ObjectDictionary) +ObjectDictionary.thrift_spec = ( + None, # 0 + ( + 1, + TType.MAP, + "values", + (TType.STRING, "UTF8", TType.LIST, (TType.STRING, "BINARY", False), False), + None, + ), # 1 +) +all_structs.append(Table) +Table.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "owner", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "createTime", + None, + None, + ), # 4 + ( + 5, + TType.I32, + "lastAccessTime", + None, + None, + ), # 5 + ( + 6, + TType.I32, + "retention", + None, + None, + ), # 6 + ( + 7, + TType.STRUCT, + "sd", + [StorageDescriptor, None], + None, + ), # 7 + ( + 8, + TType.LIST, + "partitionKeys", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 8 + ( + 9, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 9 + ( + 10, + TType.STRING, + "viewOriginalText", + "UTF8", + None, + ), # 10 + ( + 11, + TType.STRING, + "viewExpandedText", + "UTF8", + None, + ), # 11 + ( + 12, + TType.STRING, + "tableType", + "UTF8", + None, + ), # 12 + ( + 13, + TType.STRUCT, + "privileges", + [PrincipalPrivilegeSet, None], + None, + ), # 13 + ( + 14, + TType.BOOL, + "temporary", + None, + False, + ), # 14 + ( + 15, + TType.BOOL, + "rewriteEnabled", + None, + None, + ), # 15 + ( + 16, + TType.STRUCT, + "creationMetadata", + [CreationMetadata, None], + None, + ), # 16 + ( + 17, + TType.STRING, + "catName", + "UTF8", + None, + ), # 17 + ( + 18, + TType.I32, + "ownerType", + None, + 1, + ), # 18 + ( + 19, + TType.I64, + "writeId", + None, + -1, + ), # 19 + ( + 20, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 20 + ( + 21, + TType.STRUCT, + "colStats", + [ColumnStatistics, None], + None, + ), # 21 + ( + 22, + TType.BYTE, + "accessType", + None, + None, + ), # 22 + ( + 23, + TType.LIST, + "requiredReadCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 23 + ( + 24, + TType.LIST, + "requiredWriteCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 24 + ( + 25, + TType.I64, + "id", + None, + None, + ), # 25 + ( + 26, + TType.STRUCT, + "fileMetadata", + [FileMetadata, None], + None, + ), # 26 + ( + 27, + TType.STRUCT, + "dictionary", + [ObjectDictionary, None], + None, + ), # 27 + ( + 28, + TType.I64, + "txnId", + None, + None, + ), # 28 +) +all_structs.append(SourceTable) +SourceTable.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "table", + [Table, None], + None, + ), # 1 + ( + 2, + TType.I64, + "insertedCount", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "updatedCount", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "deletedCount", + None, + None, + ), # 4 +) +all_structs.append(Partition) +Partition.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "values", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "createTime", + None, + None, + ), # 4 + ( + 5, + TType.I32, + "lastAccessTime", + None, + None, + ), # 5 + ( + 6, + TType.STRUCT, + "sd", + [StorageDescriptor, None], + None, + ), # 6 + ( + 7, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 7 + ( + 8, + TType.STRUCT, + "privileges", + [PrincipalPrivilegeSet, None], + None, + ), # 8 + ( + 9, + TType.STRING, + "catName", + "UTF8", + None, + ), # 9 + ( + 10, + TType.I64, + "writeId", + None, + -1, + ), # 10 + ( + 11, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 11 + ( + 12, + TType.STRUCT, + "colStats", + [ColumnStatistics, None], + None, + ), # 12 + ( + 13, + TType.STRUCT, + "fileMetadata", + [FileMetadata, None], + None, + ), # 13 +) +all_structs.append(PartitionWithoutSD) +PartitionWithoutSD.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "values", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.I32, + "createTime", + None, + None, + ), # 2 + ( + 3, + TType.I32, + "lastAccessTime", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "relativePath", + "UTF8", + None, + ), # 4 + ( + 5, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 5 + ( + 6, + TType.STRUCT, + "privileges", + [PrincipalPrivilegeSet, None], + None, + ), # 6 +) +all_structs.append(PartitionSpecWithSharedSD) +PartitionSpecWithSharedSD.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [PartitionWithoutSD, None], False), + None, + ), # 1 + ( + 2, + TType.STRUCT, + "sd", + [StorageDescriptor, None], + None, + ), # 2 +) +all_structs.append(PartitionListComposingSpec) +PartitionListComposingSpec.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 +) +all_structs.append(PartitionSpec) +PartitionSpec.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "rootPath", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRUCT, + "sharedSDPartitionSpec", + [PartitionSpecWithSharedSD, None], + None, + ), # 4 + ( + 5, + TType.STRUCT, + "partitionList", + [PartitionListComposingSpec, None], + None, + ), # 5 + ( + 6, + TType.STRING, + "catName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I64, + "writeId", + None, + -1, + ), # 7 + ( + 8, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 8 +) +all_structs.append(AggrStats) +AggrStats.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "colStats", + (TType.STRUCT, [ColumnStatisticsObj, None], False), + None, + ), # 1 + ( + 2, + TType.I64, + "partsFound", + None, + None, + ), # 2 + ( + 3, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 3 +) +all_structs.append(SetPartitionsStatsRequest) +SetPartitionsStatsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "colStats", + (TType.STRUCT, [ColumnStatistics, None], False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "needMerge", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "writeId", + None, + -1, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "engine", + "UTF8", + None, + ), # 5 +) +all_structs.append(SetPartitionsStatsResponse) +SetPartitionsStatsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "result", + None, + None, + ), # 1 +) +all_structs.append(Schema) +Schema.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fieldSchemas", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 1 + ( + 2, + TType.MAP, + "properties", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 2 +) +all_structs.append(PrimaryKeysRequest) +PrimaryKeysRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "db_name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tbl_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "catName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "tableId", + None, + -1, + ), # 5 +) +all_structs.append(PrimaryKeysResponse) +PrimaryKeysResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "primaryKeys", + (TType.STRUCT, [SQLPrimaryKey, None], False), + None, + ), # 1 +) +all_structs.append(ForeignKeysRequest) +ForeignKeysRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "parent_db_name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "parent_tbl_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "foreign_db_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "foreign_tbl_name", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "catName", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I64, + "tableId", + None, + -1, + ), # 7 +) +all_structs.append(ForeignKeysResponse) +ForeignKeysResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "foreignKeys", + (TType.STRUCT, [SQLForeignKey, None], False), + None, + ), # 1 +) +all_structs.append(UniqueConstraintsRequest) +UniqueConstraintsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "db_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tbl_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "tableId", + None, + -1, + ), # 5 +) +all_structs.append(UniqueConstraintsResponse) +UniqueConstraintsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "uniqueConstraints", + (TType.STRUCT, [SQLUniqueConstraint, None], False), + None, + ), # 1 +) +all_structs.append(NotNullConstraintsRequest) +NotNullConstraintsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "db_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tbl_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "tableId", + None, + -1, + ), # 5 +) +all_structs.append(NotNullConstraintsResponse) +NotNullConstraintsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "notNullConstraints", + (TType.STRUCT, [SQLNotNullConstraint, None], False), + None, + ), # 1 +) +all_structs.append(DefaultConstraintsRequest) +DefaultConstraintsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "db_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tbl_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "tableId", + None, + -1, + ), # 5 +) +all_structs.append(DefaultConstraintsResponse) +DefaultConstraintsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "defaultConstraints", + (TType.STRUCT, [SQLDefaultConstraint, None], False), + None, + ), # 1 +) +all_structs.append(CheckConstraintsRequest) +CheckConstraintsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "db_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tbl_name", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "tableId", + None, + -1, + ), # 5 +) +all_structs.append(CheckConstraintsResponse) +CheckConstraintsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "checkConstraints", + (TType.STRUCT, [SQLCheckConstraint, None], False), + None, + ), # 1 +) +all_structs.append(AllTableConstraintsRequest) +AllTableConstraintsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "catName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I64, + "tableId", + None, + -1, + ), # 5 +) +all_structs.append(AllTableConstraintsResponse) +AllTableConstraintsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "allTableConstraints", + [SQLAllTableConstraints, None], + None, + ), # 1 +) +all_structs.append(DropConstraintRequest) +DropConstraintRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "constraintname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "catName", + "UTF8", + None, + ), # 4 +) +all_structs.append(AddPrimaryKeyRequest) +AddPrimaryKeyRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "primaryKeyCols", + (TType.STRUCT, [SQLPrimaryKey, None], False), + None, + ), # 1 +) +all_structs.append(AddForeignKeyRequest) +AddForeignKeyRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "foreignKeyCols", + (TType.STRUCT, [SQLForeignKey, None], False), + None, + ), # 1 +) +all_structs.append(AddUniqueConstraintRequest) +AddUniqueConstraintRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "uniqueConstraintCols", + (TType.STRUCT, [SQLUniqueConstraint, None], False), + None, + ), # 1 +) +all_structs.append(AddNotNullConstraintRequest) +AddNotNullConstraintRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "notNullConstraintCols", + (TType.STRUCT, [SQLNotNullConstraint, None], False), + None, + ), # 1 +) +all_structs.append(AddDefaultConstraintRequest) +AddDefaultConstraintRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "defaultConstraintCols", + (TType.STRUCT, [SQLDefaultConstraint, None], False), + None, + ), # 1 +) +all_structs.append(AddCheckConstraintRequest) +AddCheckConstraintRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "checkConstraintCols", + (TType.STRUCT, [SQLCheckConstraint, None], False), + None, + ), # 1 +) +all_structs.append(PartitionsByExprResult) +PartitionsByExprResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "hasUnknownPartitions", + None, + None, + ), # 2 +) +all_structs.append(PartitionsSpecByExprResult) +PartitionsSpecByExprResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitionsSpec", + (TType.STRUCT, [PartitionSpec, None], False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "hasUnknownPartitions", + None, + None, + ), # 2 +) +all_structs.append(PartitionsByExprRequest) +PartitionsByExprRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "expr", + "BINARY", + None, + ), # 3 + ( + 4, + TType.STRING, + "defaultPartitionName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I16, + "maxParts", + None, + -1, + ), # 5 + ( + 6, + TType.STRING, + "catName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "order", + "UTF8", + None, + ), # 7 + ( + 8, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 8 + ( + 9, + TType.I64, + "id", + None, + -1, + ), # 9 +) +all_structs.append(TableStatsResult) +TableStatsResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "tableStats", + (TType.STRUCT, [ColumnStatisticsObj, None], False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 2 +) +all_structs.append(PartitionsStatsResult) +PartitionsStatsResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.MAP, + "partStats", + (TType.STRING, "UTF8", TType.LIST, (TType.STRUCT, [ColumnStatisticsObj, None], False), False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 2 +) +all_structs.append(TableStatsRequest) +TableStatsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "colNames", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.STRING, + "catName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "engine", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I64, + "id", + None, + -1, + ), # 7 +) +all_structs.append(PartitionsStatsRequest) +PartitionsStatsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "colNames", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.LIST, + "partNames", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRING, + "catName", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "engine", + "UTF8", + None, + ), # 7 +) +all_structs.append(AddPartitionsResult) +AddPartitionsResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 2 +) +all_structs.append(AddPartitionsRequest) +AddPartitionsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "parts", + (TType.STRUCT, [Partition, None], False), + None, + ), # 3 + ( + 4, + TType.BOOL, + "ifNotExists", + None, + None, + ), # 4 + ( + 5, + TType.BOOL, + "needResult", + None, + True, + ), # 5 + ( + 6, + TType.STRING, + "catName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 7 +) +all_structs.append(DropPartitionsResult) +DropPartitionsResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 +) +all_structs.append(DropPartitionsExpr) +DropPartitionsExpr.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "expr", + "BINARY", + None, + ), # 1 + ( + 2, + TType.I32, + "partArchiveLevel", + None, + None, + ), # 2 +) +all_structs.append(RequestPartsSpec) +RequestPartsSpec.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "names", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.LIST, + "exprs", + (TType.STRUCT, [DropPartitionsExpr, None], False), + None, + ), # 2 +) +all_structs.append(DropPartitionsRequest) +DropPartitionsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRUCT, + "parts", + [RequestPartsSpec, None], + None, + ), # 3 + ( + 4, + TType.BOOL, + "deleteData", + None, + None, + ), # 4 + ( + 5, + TType.BOOL, + "ifExists", + None, + True, + ), # 5 + ( + 6, + TType.BOOL, + "ignoreProtection", + None, + None, + ), # 6 + ( + 7, + TType.STRUCT, + "environmentContext", + [EnvironmentContext, None], + None, + ), # 7 + ( + 8, + TType.BOOL, + "needResult", + None, + True, + ), # 8 + ( + 9, + TType.STRING, + "catName", + "UTF8", + None, + ), # 9 +) +all_structs.append(PartitionValuesRequest) +PartitionValuesRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "partitionKeys", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 3 + ( + 4, + TType.BOOL, + "applyDistinct", + None, + True, + ), # 4 + ( + 5, + TType.STRING, + "filter", + "UTF8", + None, + ), # 5 + ( + 6, + TType.LIST, + "partitionOrder", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 6 + ( + 7, + TType.BOOL, + "ascending", + None, + True, + ), # 7 + ( + 8, + TType.I64, + "maxParts", + None, + -1, + ), # 8 + ( + 9, + TType.STRING, + "catName", + "UTF8", + None, + ), # 9 + ( + 10, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 10 +) +all_structs.append(PartitionValuesRow) +PartitionValuesRow.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "row", + (TType.STRING, "UTF8", False), + None, + ), # 1 +) +all_structs.append(PartitionValuesResponse) +PartitionValuesResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitionValues", + (TType.STRUCT, [PartitionValuesRow, None], False), + None, + ), # 1 +) +all_structs.append(GetPartitionsByNamesRequest) +GetPartitionsByNamesRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "db_name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tbl_name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "names", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.BOOL, + "get_col_stats", + None, + None, + ), # 4 + ( + 5, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 5 + ( + 6, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "engine", + "UTF8", + None, + ), # 7 + ( + 8, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 8 + ( + 9, + TType.BOOL, + "getFileMetadata", + None, + None, + ), # 9 + ( + 10, + TType.I64, + "id", + None, + -1, + ), # 10 +) +all_structs.append(GetPartitionsByNamesResult) +GetPartitionsByNamesResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 + ( + 2, + TType.STRUCT, + "dictionary", + [ObjectDictionary, None], + None, + ), # 2 +) +all_structs.append(DataConnector) +DataConnector.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "type", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "url", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "description", + "UTF8", + None, + ), # 4 + ( + 5, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 5 + ( + 6, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "ownerType", + None, + None, + ), # 7 + ( + 8, + TType.I32, + "createTime", + None, + None, + ), # 8 +) +all_structs.append(ResourceUri) +ResourceUri.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "resourceType", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "uri", + "UTF8", + None, + ), # 2 +) +all_structs.append(Function) +Function.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "functionName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "className", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I32, + "ownerType", + None, + None, + ), # 5 + ( + 6, + TType.I32, + "createTime", + None, + None, + ), # 6 + ( + 7, + TType.I32, + "functionType", + None, + None, + ), # 7 + ( + 8, + TType.LIST, + "resourceUris", + (TType.STRUCT, [ResourceUri, None], False), + None, + ), # 8 + ( + 9, + TType.STRING, + "catName", + "UTF8", + None, + ), # 9 +) +all_structs.append(TxnInfo) +TxnInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "id", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "state", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "user", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "hostname", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "agentInfo", + "UTF8", + "Unknown", + ), # 5 + ( + 6, + TType.I32, + "heartbeatCount", + None, + 0, + ), # 6 + ( + 7, + TType.STRING, + "metaInfo", + "UTF8", + None, + ), # 7 + ( + 8, + TType.I64, + "startedTime", + None, + None, + ), # 8 + ( + 9, + TType.I64, + "lastHeartbeatTime", + None, + None, + ), # 9 +) +all_structs.append(GetOpenTxnsInfoResponse) +GetOpenTxnsInfoResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txn_high_water_mark", + None, + None, + ), # 1 + ( + 2, + TType.LIST, + "open_txns", + (TType.STRUCT, [TxnInfo, None], False), + None, + ), # 2 +) +all_structs.append(GetOpenTxnsResponse) +GetOpenTxnsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txn_high_water_mark", + None, + None, + ), # 1 + ( + 2, + TType.LIST, + "open_txns", + (TType.I64, None, False), + None, + ), # 2 + ( + 3, + TType.I64, + "min_open_txn", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "abortedBits", + "BINARY", + None, + ), # 4 +) +all_structs.append(OpenTxnRequest) +OpenTxnRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "num_txns", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "user", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "hostname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "agentInfo", + "UTF8", + "Unknown", + ), # 4 + ( + 5, + TType.STRING, + "replPolicy", + "UTF8", + None, + ), # 5 + ( + 6, + TType.LIST, + "replSrcTxnIds", + (TType.I64, None, False), + None, + ), # 6 + ( + 7, + TType.I32, + "txn_type", + None, + 0, + ), # 7 +) +all_structs.append(OpenTxnsResponse) +OpenTxnsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "txn_ids", + (TType.I64, None, False), + None, + ), # 1 +) +all_structs.append(AbortTxnRequest) +AbortTxnRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txnid", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "replPolicy", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I32, + "txn_type", + None, + None, + ), # 3 +) +all_structs.append(AbortTxnsRequest) +AbortTxnsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "txn_ids", + (TType.I64, None, False), + None, + ), # 1 +) +all_structs.append(CommitTxnKeyValue) +CommitTxnKeyValue.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "tableId", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "key", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "value", + "UTF8", + None, + ), # 3 +) +all_structs.append(WriteEventInfo) +WriteEventInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "writeId", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "database", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "table", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "files", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "partition", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "tableObj", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "partitionObj", + "UTF8", + None, + ), # 7 +) +all_structs.append(ReplLastIdInfo) +ReplLastIdInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "database", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I64, + "lastReplId", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "table", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "catalog", + "UTF8", + None, + ), # 4 + ( + 5, + TType.LIST, + "partitionList", + (TType.STRING, "UTF8", False), + None, + ), # 5 +) +all_structs.append(UpdateTransactionalStatsRequest) +UpdateTransactionalStatsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "tableId", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "insertCount", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "updatedCount", + None, + None, + ), # 3 + ( + 4, + TType.I64, + "deletedCount", + None, + None, + ), # 4 +) +all_structs.append(CommitTxnRequest) +CommitTxnRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txnid", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "replPolicy", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "writeEventInfos", + (TType.STRUCT, [WriteEventInfo, None], False), + None, + ), # 3 + ( + 4, + TType.STRUCT, + "replLastIdInfo", + [ReplLastIdInfo, None], + None, + ), # 4 + ( + 5, + TType.STRUCT, + "keyValue", + [CommitTxnKeyValue, None], + None, + ), # 5 + ( + 6, + TType.BOOL, + "exclWriteEnabled", + None, + True, + ), # 6 + ( + 7, + TType.I32, + "txn_type", + None, + None, + ), # 7 +) +all_structs.append(ReplTblWriteIdStateRequest) +ReplTblWriteIdStateRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "validWriteIdlist", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "user", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "hostName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 5 + ( + 6, + TType.LIST, + "partNames", + (TType.STRING, "UTF8", False), + None, + ), # 6 +) +all_structs.append(GetValidWriteIdsRequest) +GetValidWriteIdsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fullTableNames", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.STRING, + "validTxnList", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I64, + "writeId", + None, + None, + ), # 3 +) +all_structs.append(TableValidWriteIds) +TableValidWriteIds.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "fullTableName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I64, + "writeIdHighWaterMark", + None, + None, + ), # 2 + ( + 3, + TType.LIST, + "invalidWriteIds", + (TType.I64, None, False), + None, + ), # 3 + ( + 4, + TType.I64, + "minOpenWriteId", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "abortedBits", + "BINARY", + None, + ), # 5 +) +all_structs.append(GetValidWriteIdsResponse) +GetValidWriteIdsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "tblValidWriteIds", + (TType.STRUCT, [TableValidWriteIds, None], False), + None, + ), # 1 +) +all_structs.append(TxnToWriteId) +TxnToWriteId.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txnId", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "writeId", + None, + None, + ), # 2 +) +all_structs.append(AllocateTableWriteIdsRequest) +AllocateTableWriteIdsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "txnIds", + (TType.I64, None, False), + None, + ), # 3 + ( + 4, + TType.STRING, + "replPolicy", + "UTF8", + None, + ), # 4 + ( + 5, + TType.LIST, + "srcTxnToWriteIdList", + (TType.STRUCT, [TxnToWriteId, None], False), + None, + ), # 5 +) +all_structs.append(AllocateTableWriteIdsResponse) +AllocateTableWriteIdsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "txnToWriteIds", + (TType.STRUCT, [TxnToWriteId, None], False), + None, + ), # 1 +) +all_structs.append(MaxAllocatedTableWriteIdRequest) +MaxAllocatedTableWriteIdRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 2 +) +all_structs.append(MaxAllocatedTableWriteIdResponse) +MaxAllocatedTableWriteIdResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "maxWriteId", + None, + None, + ), # 1 +) +all_structs.append(SeedTableWriteIdsRequest) +SeedTableWriteIdsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I64, + "seedWriteId", + None, + None, + ), # 3 +) +all_structs.append(SeedTxnIdRequest) +SeedTxnIdRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "seedTxnId", + None, + None, + ), # 1 +) +all_structs.append(LockComponent) +LockComponent.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "type", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "level", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "partitionname", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I32, + "operationType", + None, + 5, + ), # 6 + ( + 7, + TType.BOOL, + "isTransactional", + None, + False, + ), # 7 + ( + 8, + TType.BOOL, + "isDynamicPartitionWrite", + None, + False, + ), # 8 +) +all_structs.append(LockRequest) +LockRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "component", + (TType.STRUCT, [LockComponent, None], False), + None, + ), # 1 + ( + 2, + TType.I64, + "txnid", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "user", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "hostname", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "agentInfo", + "UTF8", + "Unknown", + ), # 5 + ( + 6, + TType.BOOL, + "zeroWaitReadEnabled", + None, + False, + ), # 6 + ( + 7, + TType.BOOL, + "exclusiveCTAS", + None, + False, + ), # 7 +) +all_structs.append(LockResponse) +LockResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lockid", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "state", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "errorMessage", + "UTF8", + None, + ), # 3 +) +all_structs.append(CheckLockRequest) +CheckLockRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lockid", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "txnid", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "elapsed_ms", + None, + None, + ), # 3 +) +all_structs.append(UnlockRequest) +UnlockRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lockid", + None, + None, + ), # 1 +) +all_structs.append(ShowLocksRequest) +ShowLocksRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "partname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.BOOL, + "isExtended", + None, + False, + ), # 4 + ( + 5, + TType.I64, + "txnid", + None, + None, + ), # 5 +) +all_structs.append(ShowLocksResponseElement) +ShowLocksResponseElement.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lockid", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "partname", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I32, + "state", + None, + None, + ), # 5 + ( + 6, + TType.I32, + "type", + None, + None, + ), # 6 + ( + 7, + TType.I64, + "txnid", + None, + None, + ), # 7 + ( + 8, + TType.I64, + "lastheartbeat", + None, + None, + ), # 8 + ( + 9, + TType.I64, + "acquiredat", + None, + None, + ), # 9 + ( + 10, + TType.STRING, + "user", + "UTF8", + None, + ), # 10 + ( + 11, + TType.STRING, + "hostname", + "UTF8", + None, + ), # 11 + ( + 12, + TType.I32, + "heartbeatCount", + None, + 0, + ), # 12 + ( + 13, + TType.STRING, + "agentInfo", + "UTF8", + None, + ), # 13 + ( + 14, + TType.I64, + "blockedByExtId", + None, + None, + ), # 14 + ( + 15, + TType.I64, + "blockedByIntId", + None, + None, + ), # 15 + ( + 16, + TType.I64, + "lockIdInternal", + None, + None, + ), # 16 +) +all_structs.append(ShowLocksResponse) +ShowLocksResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "locks", + (TType.STRUCT, [ShowLocksResponseElement, None], False), + None, + ), # 1 +) +all_structs.append(HeartbeatRequest) +HeartbeatRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lockid", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "txnid", + None, + None, + ), # 2 +) +all_structs.append(HeartbeatTxnRangeRequest) +HeartbeatTxnRangeRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "min", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "max", + None, + None, + ), # 2 +) +all_structs.append(HeartbeatTxnRangeResponse) +HeartbeatTxnRangeResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.SET, + "aborted", + (TType.I64, None, False), + None, + ), # 1 + ( + 2, + TType.SET, + "nosuch", + (TType.I64, None, False), + None, + ), # 2 +) +all_structs.append(CompactionRequest) +CompactionRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "partitionname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "type", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "runas", + "UTF8", + None, + ), # 5 + ( + 6, + TType.MAP, + "properties", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 6 + ( + 7, + TType.STRING, + "initiatorId", + "UTF8", + None, + ), # 7 + ( + 8, + TType.STRING, + "initiatorVersion", + "UTF8", + None, + ), # 8 +) +all_structs.append(CompactionInfoStruct) +CompactionInfoStruct.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "id", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "partitionname", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I32, + "type", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "runas", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "properties", + "UTF8", + None, + ), # 7 + ( + 8, + TType.BOOL, + "toomanyaborts", + None, + None, + ), # 8 + ( + 9, + TType.STRING, + "state", + "UTF8", + None, + ), # 9 + ( + 10, + TType.STRING, + "workerId", + "UTF8", + None, + ), # 10 + ( + 11, + TType.I64, + "start", + None, + None, + ), # 11 + ( + 12, + TType.I64, + "highestWriteId", + None, + None, + ), # 12 + ( + 13, + TType.STRING, + "errorMessage", + "UTF8", + None, + ), # 13 + ( + 14, + TType.BOOL, + "hasoldabort", + None, + None, + ), # 14 + ( + 15, + TType.I64, + "enqueueTime", + None, + None, + ), # 15 + ( + 16, + TType.I64, + "retryRetention", + None, + None, + ), # 16 +) +all_structs.append(OptionalCompactionInfoStruct) +OptionalCompactionInfoStruct.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "ci", + [CompactionInfoStruct, None], + None, + ), # 1 +) +all_structs.append(CompactionMetricsDataStruct) +CompactionMetricsDataStruct.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblname", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "partitionname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "type", + None, + None, + ), # 4 + ( + 5, + TType.I32, + "metricvalue", + None, + None, + ), # 5 + ( + 6, + TType.I32, + "version", + None, + None, + ), # 6 + ( + 7, + TType.I32, + "threshold", + None, + None, + ), # 7 +) +all_structs.append(CompactionMetricsDataResponse) +CompactionMetricsDataResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "data", + [CompactionMetricsDataStruct, None], + None, + ), # 1 +) +all_structs.append(CompactionMetricsDataRequest) +CompactionMetricsDataRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "partitionName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "type", + None, + None, + ), # 4 +) +all_structs.append(CompactionResponse) +CompactionResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "id", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "state", + "UTF8", + None, + ), # 2 + ( + 3, + TType.BOOL, + "accepted", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "errormessage", + "UTF8", + None, + ), # 4 +) +all_structs.append(ShowCompactRequest) +ShowCompactRequest.thrift_spec = () +all_structs.append(ShowCompactResponseElement) +ShowCompactResponseElement.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "partitionname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "type", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "state", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "workerid", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I64, + "start", + None, + None, + ), # 7 + ( + 8, + TType.STRING, + "runAs", + "UTF8", + None, + ), # 8 + ( + 9, + TType.I64, + "hightestTxnId", + None, + None, + ), # 9 + ( + 10, + TType.STRING, + "metaInfo", + "UTF8", + None, + ), # 10 + ( + 11, + TType.I64, + "endTime", + None, + None, + ), # 11 + ( + 12, + TType.STRING, + "hadoopJobId", + "UTF8", + "None", + ), # 12 + ( + 13, + TType.I64, + "id", + None, + None, + ), # 13 + ( + 14, + TType.STRING, + "errorMessage", + "UTF8", + None, + ), # 14 + ( + 15, + TType.I64, + "enqueueTime", + None, + None, + ), # 15 + ( + 16, + TType.STRING, + "workerVersion", + "UTF8", + None, + ), # 16 + ( + 17, + TType.STRING, + "initiatorId", + "UTF8", + None, + ), # 17 + ( + 18, + TType.STRING, + "initiatorVersion", + "UTF8", + None, + ), # 18 + ( + 19, + TType.I64, + "cleanerStart", + None, + None, + ), # 19 +) +all_structs.append(ShowCompactResponse) +ShowCompactResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "compacts", + (TType.STRUCT, [ShowCompactResponseElement, None], False), + None, + ), # 1 +) +all_structs.append(GetLatestCommittedCompactionInfoRequest) +GetLatestCommittedCompactionInfoRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "partitionnames", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.I64, + "lastCompactionId", + None, + None, + ), # 4 +) +all_structs.append(GetLatestCommittedCompactionInfoResponse) +GetLatestCommittedCompactionInfoResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "compactions", + (TType.STRUCT, [CompactionInfoStruct, None], False), + None, + ), # 1 +) +all_structs.append(FindNextCompactRequest) +FindNextCompactRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "workerId", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "workerVersion", + "UTF8", + None, + ), # 2 +) +all_structs.append(AddDynamicPartitions) +AddDynamicPartitions.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txnid", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "writeid", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 4 + ( + 5, + TType.LIST, + "partitionnames", + (TType.STRING, "UTF8", False), + None, + ), # 5 + ( + 6, + TType.I32, + "operationType", + None, + 5, + ), # 6 +) +all_structs.append(BasicTxnInfo) +BasicTxnInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "isnull", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "time", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "txnid", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "dbname", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "tablename", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "partitionname", + "UTF8", + None, + ), # 6 +) +all_structs.append(NotificationEventRequest) +NotificationEventRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "lastEvent", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "maxEvents", + None, + None, + ), # 2 + ( + 3, + TType.LIST, + "eventTypeSkipList", + (TType.STRING, "UTF8", False), + None, + ), # 3 +) +all_structs.append(NotificationEvent) +NotificationEvent.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "eventId", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "eventTime", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "eventType", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "message", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "messageFormat", + "UTF8", + None, + ), # 7 + ( + 8, + TType.STRING, + "catName", + "UTF8", + None, + ), # 8 +) +all_structs.append(NotificationEventResponse) +NotificationEventResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "events", + (TType.STRUCT, [NotificationEvent, None], False), + None, + ), # 1 +) +all_structs.append(CurrentNotificationEventId) +CurrentNotificationEventId.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "eventId", + None, + None, + ), # 1 +) +all_structs.append(NotificationEventsCountRequest) +NotificationEventsCountRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "fromEventId", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "catName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I64, + "toEventId", + None, + None, + ), # 4 + ( + 5, + TType.I64, + "limit", + None, + None, + ), # 5 +) +all_structs.append(NotificationEventsCountResponse) +NotificationEventsCountResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "eventsCount", + None, + None, + ), # 1 +) +all_structs.append(InsertEventRequestData) +InsertEventRequestData.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "replace", + None, + None, + ), # 1 + ( + 2, + TType.LIST, + "filesAdded", + (TType.STRING, "UTF8", False), + None, + ), # 2 + ( + 3, + TType.LIST, + "filesAddedChecksum", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.LIST, + "subDirectoryList", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.LIST, + "partitionVal", + (TType.STRING, "UTF8", False), + None, + ), # 5 +) +all_structs.append(FireEventRequestData) +FireEventRequestData.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "insertData", + [InsertEventRequestData, None], + None, + ), # 1 + ( + 2, + TType.LIST, + "insertDatas", + (TType.STRUCT, [InsertEventRequestData, None], False), + None, + ), # 2 +) +all_structs.append(FireEventRequest) +FireEventRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "successful", + None, + None, + ), # 1 + ( + 2, + TType.STRUCT, + "data", + [FireEventRequestData, None], + None, + ), # 2 + ( + 3, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.LIST, + "partitionVals", + (TType.STRING, "UTF8", False), + None, + ), # 5 + ( + 6, + TType.STRING, + "catName", + "UTF8", + None, + ), # 6 +) +all_structs.append(FireEventResponse) +FireEventResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "eventIds", + (TType.I64, None, False), + None, + ), # 1 +) +all_structs.append(WriteNotificationLogRequest) +WriteNotificationLogRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txnId", + None, + None, + ), # 1 + ( + 2, + TType.I64, + "writeId", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "db", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "table", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRUCT, + "fileInfo", + [InsertEventRequestData, None], + None, + ), # 5 + ( + 6, + TType.LIST, + "partitionVals", + (TType.STRING, "UTF8", False), + None, + ), # 6 +) +all_structs.append(WriteNotificationLogResponse) +WriteNotificationLogResponse.thrift_spec = () +all_structs.append(WriteNotificationLogBatchRequest) +WriteNotificationLogBatchRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catalog", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "db", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "table", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "requestList", + (TType.STRUCT, [WriteNotificationLogRequest, None], False), + None, + ), # 4 +) +all_structs.append(WriteNotificationLogBatchResponse) +WriteNotificationLogBatchResponse.thrift_spec = () +all_structs.append(MetadataPpdResult) +MetadataPpdResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "metadata", + "BINARY", + None, + ), # 1 + ( + 2, + TType.STRING, + "includeBitset", + "BINARY", + None, + ), # 2 +) +all_structs.append(GetFileMetadataByExprResult) +GetFileMetadataByExprResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.MAP, + "metadata", + (TType.I64, None, TType.STRUCT, [MetadataPpdResult, None], False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "isSupported", + None, + None, + ), # 2 +) +all_structs.append(GetFileMetadataByExprRequest) +GetFileMetadataByExprRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fileIds", + (TType.I64, None, False), + None, + ), # 1 + ( + 2, + TType.STRING, + "expr", + "BINARY", + None, + ), # 2 + ( + 3, + TType.BOOL, + "doGetFooters", + None, + None, + ), # 3 + ( + 4, + TType.I32, + "type", + None, + None, + ), # 4 +) +all_structs.append(GetFileMetadataResult) +GetFileMetadataResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.MAP, + "metadata", + (TType.I64, None, TType.STRING, "BINARY", False), + None, + ), # 1 + ( + 2, + TType.BOOL, + "isSupported", + None, + None, + ), # 2 +) +all_structs.append(GetFileMetadataRequest) +GetFileMetadataRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fileIds", + (TType.I64, None, False), + None, + ), # 1 +) +all_structs.append(PutFileMetadataResult) +PutFileMetadataResult.thrift_spec = () +all_structs.append(PutFileMetadataRequest) +PutFileMetadataRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fileIds", + (TType.I64, None, False), + None, + ), # 1 + ( + 2, + TType.LIST, + "metadata", + (TType.STRING, "BINARY", False), + None, + ), # 2 + ( + 3, + TType.I32, + "type", + None, + None, + ), # 3 +) +all_structs.append(ClearFileMetadataResult) +ClearFileMetadataResult.thrift_spec = () +all_structs.append(ClearFileMetadataRequest) +ClearFileMetadataRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fileIds", + (TType.I64, None, False), + None, + ), # 1 +) +all_structs.append(CacheFileMetadataResult) +CacheFileMetadataResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "isSupported", + None, + None, + ), # 1 +) +all_structs.append(CacheFileMetadataRequest) +CacheFileMetadataRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "partName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.BOOL, + "isAllParts", + None, + None, + ), # 4 +) +all_structs.append(GetAllFunctionsResponse) +GetAllFunctionsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "functions", + (TType.STRUCT, [Function, None], False), + None, + ), # 1 +) +all_structs.append(ClientCapabilities) +ClientCapabilities.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "values", + (TType.I32, None, False), + None, + ), # 1 +) +all_structs.append(GetProjectionsSpec) +GetProjectionsSpec.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fieldList", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.STRING, + "includeParamKeyPattern", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "excludeParamKeyPattern", + "UTF8", + None, + ), # 3 +) +all_structs.append(GetTableRequest) +GetTableRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRUCT, + "capabilities", + [ClientCapabilities, None], + None, + ), # 3 + ( + 4, + TType.STRING, + "catName", + "UTF8", + None, + ), # 4 + None, # 5 + ( + 6, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 6 + ( + 7, + TType.BOOL, + "getColumnStats", + None, + None, + ), # 7 + ( + 8, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 8 + ( + 9, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 9 + ( + 10, + TType.STRING, + "engine", + "UTF8", + None, + ), # 10 + ( + 11, + TType.I64, + "id", + None, + -1, + ), # 11 +) +all_structs.append(GetTableResult) +GetTableResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "table", + [Table, None], + None, + ), # 1 + ( + 2, + TType.BOOL, + "isStatsCompliant", + None, + None, + ), # 2 +) +all_structs.append(GetTablesRequest) +GetTablesRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.LIST, + "tblNames", + (TType.STRING, "UTF8", False), + None, + ), # 2 + ( + 3, + TType.STRUCT, + "capabilities", + [ClientCapabilities, None], + None, + ), # 3 + ( + 4, + TType.STRING, + "catName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 5 + ( + 6, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRUCT, + "projectionSpec", + [GetProjectionsSpec, None], + None, + ), # 7 + ( + 8, + TType.STRING, + "tablesPattern", + "UTF8", + None, + ), # 8 +) +all_structs.append(GetTablesResult) +GetTablesResult.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "tables", + (TType.STRUCT, [Table, None], False), + None, + ), # 1 +) +all_structs.append(GetTablesExtRequest) +GetTablesExtRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catalog", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "database", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableNamePattern", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I32, + "requestedFields", + None, + None, + ), # 4 + ( + 5, + TType.I32, + "limit", + None, + None, + ), # 5 + ( + 6, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 6 + ( + 7, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 7 +) +all_structs.append(ExtendedTableInfo) +ExtendedTableInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "accessType", + None, + None, + ), # 2 + ( + 3, + TType.LIST, + "requiredReadCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.LIST, + "requiredWriteCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 4 +) +all_structs.append(GetDatabaseRequest) +GetDatabaseRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "catalogName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 3 + ( + 4, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 4 +) +all_structs.append(DropDatabaseRequest) +DropDatabaseRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "catalogName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.BOOL, + "ignoreUnknownDb", + None, + None, + ), # 3 + ( + 4, + TType.BOOL, + "deleteData", + None, + None, + ), # 4 + ( + 5, + TType.BOOL, + "cascade", + None, + None, + ), # 5 + ( + 6, + TType.BOOL, + "softDelete", + None, + False, + ), # 6 + ( + 7, + TType.I64, + "txnId", + None, + 0, + ), # 7 + ( + 8, + TType.BOOL, + "deleteManagedDir", + None, + True, + ), # 8 +) +all_structs.append(CmRecycleRequest) +CmRecycleRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dataPath", + "UTF8", + None, + ), # 1 + ( + 2, + TType.BOOL, + "purge", + None, + None, + ), # 2 +) +all_structs.append(CmRecycleResponse) +CmRecycleResponse.thrift_spec = () +all_structs.append(TableMeta) +TableMeta.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableType", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "comments", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "catName", + "UTF8", + None, + ), # 5 +) +all_structs.append(Materialization) +Materialization.thrift_spec = ( + None, # 0 + ( + 1, + TType.BOOL, + "sourceTablesUpdateDeleteModified", + None, + None, + ), # 1 + ( + 2, + TType.BOOL, + "sourceTablesCompacted", + None, + None, + ), # 2 +) +all_structs.append(WMResourcePlan) +WMResourcePlan.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "status", + None, + None, + ), # 2 + ( + 3, + TType.I32, + "queryParallelism", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "defaultPoolPath", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "ns", + "UTF8", + None, + ), # 5 +) +all_structs.append(WMNullableResourcePlan) +WMNullableResourcePlan.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.I32, + "status", + None, + None, + ), # 2 + None, # 3 + ( + 4, + TType.I32, + "queryParallelism", + None, + None, + ), # 4 + ( + 5, + TType.BOOL, + "isSetQueryParallelism", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "defaultPoolPath", + "UTF8", + None, + ), # 6 + ( + 7, + TType.BOOL, + "isSetDefaultPoolPath", + None, + None, + ), # 7 + ( + 8, + TType.STRING, + "ns", + "UTF8", + None, + ), # 8 +) +all_structs.append(WMPool) +WMPool.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "poolPath", + "UTF8", + None, + ), # 2 + ( + 3, + TType.DOUBLE, + "allocFraction", + None, + None, + ), # 3 + ( + 4, + TType.I32, + "queryParallelism", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "schedulingPolicy", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "ns", + "UTF8", + None, + ), # 6 +) +all_structs.append(WMNullablePool) +WMNullablePool.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "poolPath", + "UTF8", + None, + ), # 2 + ( + 3, + TType.DOUBLE, + "allocFraction", + None, + None, + ), # 3 + ( + 4, + TType.I32, + "queryParallelism", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "schedulingPolicy", + "UTF8", + None, + ), # 5 + ( + 6, + TType.BOOL, + "isSetSchedulingPolicy", + None, + None, + ), # 6 + ( + 7, + TType.STRING, + "ns", + "UTF8", + None, + ), # 7 +) +all_structs.append(WMTrigger) +WMTrigger.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "triggerName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "triggerExpression", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "actionExpression", + "UTF8", + None, + ), # 4 + ( + 5, + TType.BOOL, + "isInUnmanaged", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "ns", + "UTF8", + None, + ), # 6 +) +all_structs.append(WMMapping) +WMMapping.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "entityType", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "entityName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "poolPath", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I32, + "ordering", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "ns", + "UTF8", + None, + ), # 6 +) +all_structs.append(WMPoolTrigger) +WMPoolTrigger.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "pool", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "trigger", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "ns", + "UTF8", + None, + ), # 3 +) +all_structs.append(WMFullResourcePlan) +WMFullResourcePlan.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "plan", + [WMResourcePlan, None], + None, + ), # 1 + ( + 2, + TType.LIST, + "pools", + (TType.STRUCT, [WMPool, None], False), + None, + ), # 2 + ( + 3, + TType.LIST, + "mappings", + (TType.STRUCT, [WMMapping, None], False), + None, + ), # 3 + ( + 4, + TType.LIST, + "triggers", + (TType.STRUCT, [WMTrigger, None], False), + None, + ), # 4 + ( + 5, + TType.LIST, + "poolTriggers", + (TType.STRUCT, [WMPoolTrigger, None], False), + None, + ), # 5 +) +all_structs.append(WMCreateResourcePlanRequest) +WMCreateResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "resourcePlan", + [WMResourcePlan, None], + None, + ), # 1 + ( + 2, + TType.STRING, + "copyFrom", + "UTF8", + None, + ), # 2 +) +all_structs.append(WMCreateResourcePlanResponse) +WMCreateResourcePlanResponse.thrift_spec = () +all_structs.append(WMGetActiveResourcePlanRequest) +WMGetActiveResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "ns", + "UTF8", + None, + ), # 1 +) +all_structs.append(WMGetActiveResourcePlanResponse) +WMGetActiveResourcePlanResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "resourcePlan", + [WMFullResourcePlan, None], + None, + ), # 1 +) +all_structs.append(WMGetResourcePlanRequest) +WMGetResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "ns", + "UTF8", + None, + ), # 2 +) +all_structs.append(WMGetResourcePlanResponse) +WMGetResourcePlanResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "resourcePlan", + [WMFullResourcePlan, None], + None, + ), # 1 +) +all_structs.append(WMGetAllResourcePlanRequest) +WMGetAllResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "ns", + "UTF8", + None, + ), # 1 +) +all_structs.append(WMGetAllResourcePlanResponse) +WMGetAllResourcePlanResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "resourcePlans", + (TType.STRUCT, [WMResourcePlan, None], False), + None, + ), # 1 +) +all_structs.append(WMAlterResourcePlanRequest) +WMAlterResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRUCT, + "resourcePlan", + [WMNullableResourcePlan, None], + None, + ), # 2 + ( + 3, + TType.BOOL, + "isEnableAndActivate", + None, + None, + ), # 3 + ( + 4, + TType.BOOL, + "isForceDeactivate", + None, + None, + ), # 4 + ( + 5, + TType.BOOL, + "isReplace", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "ns", + "UTF8", + None, + ), # 6 +) +all_structs.append(WMAlterResourcePlanResponse) +WMAlterResourcePlanResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "fullResourcePlan", + [WMFullResourcePlan, None], + None, + ), # 1 +) +all_structs.append(WMValidateResourcePlanRequest) +WMValidateResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "ns", + "UTF8", + None, + ), # 2 +) +all_structs.append(WMValidateResourcePlanResponse) +WMValidateResourcePlanResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "errors", + (TType.STRING, "UTF8", False), + None, + ), # 1 + ( + 2, + TType.LIST, + "warnings", + (TType.STRING, "UTF8", False), + None, + ), # 2 +) +all_structs.append(WMDropResourcePlanRequest) +WMDropResourcePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "ns", + "UTF8", + None, + ), # 2 +) +all_structs.append(WMDropResourcePlanResponse) +WMDropResourcePlanResponse.thrift_spec = () +all_structs.append(WMCreateTriggerRequest) +WMCreateTriggerRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "trigger", + [WMTrigger, None], + None, + ), # 1 +) +all_structs.append(WMCreateTriggerResponse) +WMCreateTriggerResponse.thrift_spec = () +all_structs.append(WMAlterTriggerRequest) +WMAlterTriggerRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "trigger", + [WMTrigger, None], + None, + ), # 1 +) +all_structs.append(WMAlterTriggerResponse) +WMAlterTriggerResponse.thrift_spec = () +all_structs.append(WMDropTriggerRequest) +WMDropTriggerRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "triggerName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "ns", + "UTF8", + None, + ), # 3 +) +all_structs.append(WMDropTriggerResponse) +WMDropTriggerResponse.thrift_spec = () +all_structs.append(WMGetTriggersForResourePlanRequest) +WMGetTriggersForResourePlanRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "ns", + "UTF8", + None, + ), # 2 +) +all_structs.append(WMGetTriggersForResourePlanResponse) +WMGetTriggersForResourePlanResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "triggers", + (TType.STRUCT, [WMTrigger, None], False), + None, + ), # 1 +) +all_structs.append(WMCreatePoolRequest) +WMCreatePoolRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "pool", + [WMPool, None], + None, + ), # 1 +) +all_structs.append(WMCreatePoolResponse) +WMCreatePoolResponse.thrift_spec = () +all_structs.append(WMAlterPoolRequest) +WMAlterPoolRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "pool", + [WMNullablePool, None], + None, + ), # 1 + ( + 2, + TType.STRING, + "poolPath", + "UTF8", + None, + ), # 2 +) +all_structs.append(WMAlterPoolResponse) +WMAlterPoolResponse.thrift_spec = () +all_structs.append(WMDropPoolRequest) +WMDropPoolRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "poolPath", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "ns", + "UTF8", + None, + ), # 3 +) +all_structs.append(WMDropPoolResponse) +WMDropPoolResponse.thrift_spec = () +all_structs.append(WMCreateOrUpdateMappingRequest) +WMCreateOrUpdateMappingRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "mapping", + [WMMapping, None], + None, + ), # 1 + ( + 2, + TType.BOOL, + "update", + None, + None, + ), # 2 +) +all_structs.append(WMCreateOrUpdateMappingResponse) +WMCreateOrUpdateMappingResponse.thrift_spec = () +all_structs.append(WMDropMappingRequest) +WMDropMappingRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "mapping", + [WMMapping, None], + None, + ), # 1 +) +all_structs.append(WMDropMappingResponse) +WMDropMappingResponse.thrift_spec = () +all_structs.append(WMCreateOrDropTriggerToPoolMappingRequest) +WMCreateOrDropTriggerToPoolMappingRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "resourcePlanName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "triggerName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "poolPath", + "UTF8", + None, + ), # 3 + ( + 4, + TType.BOOL, + "drop", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "ns", + "UTF8", + None, + ), # 5 +) +all_structs.append(WMCreateOrDropTriggerToPoolMappingResponse) +WMCreateOrDropTriggerToPoolMappingResponse.thrift_spec = () +all_structs.append(ISchema) +ISchema.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "schemaType", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "name", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "catName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.I32, + "compatibility", + None, + None, + ), # 5 + ( + 6, + TType.I32, + "validationLevel", + None, + None, + ), # 6 + ( + 7, + TType.BOOL, + "canEvolve", + None, + None, + ), # 7 + ( + 8, + TType.STRING, + "schemaGroup", + "UTF8", + None, + ), # 8 + ( + 9, + TType.STRING, + "description", + "UTF8", + None, + ), # 9 +) +all_structs.append(ISchemaName) +ISchemaName.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "schemaName", + "UTF8", + None, + ), # 3 +) +all_structs.append(AlterISchemaRequest) +AlterISchemaRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "name", + [ISchemaName, None], + None, + ), # 1 + None, # 2 + ( + 3, + TType.STRUCT, + "newSchema", + [ISchema, None], + None, + ), # 3 +) +all_structs.append(SchemaVersion) +SchemaVersion.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "schema", + [ISchemaName, None], + None, + ), # 1 + ( + 2, + TType.I32, + "version", + None, + None, + ), # 2 + ( + 3, + TType.I64, + "createdAt", + None, + None, + ), # 3 + ( + 4, + TType.LIST, + "cols", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 4 + ( + 5, + TType.I32, + "state", + None, + None, + ), # 5 + ( + 6, + TType.STRING, + "description", + "UTF8", + None, + ), # 6 + ( + 7, + TType.STRING, + "schemaText", + "UTF8", + None, + ), # 7 + ( + 8, + TType.STRING, + "fingerprint", + "UTF8", + None, + ), # 8 + ( + 9, + TType.STRING, + "name", + "UTF8", + None, + ), # 9 + ( + 10, + TType.STRUCT, + "serDe", + [SerDeInfo, None], + None, + ), # 10 +) +all_structs.append(SchemaVersionDescriptor) +SchemaVersionDescriptor.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "schema", + [ISchemaName, None], + None, + ), # 1 + ( + 2, + TType.I32, + "version", + None, + None, + ), # 2 +) +all_structs.append(FindSchemasByColsRqst) +FindSchemasByColsRqst.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "colName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "colNamespace", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "type", + "UTF8", + None, + ), # 3 +) +all_structs.append(FindSchemasByColsResp) +FindSchemasByColsResp.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "schemaVersions", + (TType.STRUCT, [SchemaVersionDescriptor, None], False), + None, + ), # 1 +) +all_structs.append(MapSchemaVersionToSerdeRequest) +MapSchemaVersionToSerdeRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "schemaVersion", + [SchemaVersionDescriptor, None], + None, + ), # 1 + ( + 2, + TType.STRING, + "serdeName", + "UTF8", + None, + ), # 2 +) +all_structs.append(SetSchemaVersionStateRequest) +SetSchemaVersionStateRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "schemaVersion", + [SchemaVersionDescriptor, None], + None, + ), # 1 + ( + 2, + TType.I32, + "state", + None, + None, + ), # 2 +) +all_structs.append(GetSerdeRequest) +GetSerdeRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "serdeName", + "UTF8", + None, + ), # 1 +) +all_structs.append(RuntimeStat) +RuntimeStat.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "createTime", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "weight", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "payload", + "BINARY", + None, + ), # 3 +) +all_structs.append(GetRuntimeStatsRequest) +GetRuntimeStatsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "maxWeight", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "maxCreateTime", + None, + None, + ), # 2 +) +all_structs.append(CreateTableRequest) +CreateTableRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "table", + [Table, None], + None, + ), # 1 + ( + 2, + TType.STRUCT, + "envContext", + [EnvironmentContext, None], + None, + ), # 2 + ( + 3, + TType.LIST, + "primaryKeys", + (TType.STRUCT, [SQLPrimaryKey, None], False), + None, + ), # 3 + ( + 4, + TType.LIST, + "foreignKeys", + (TType.STRUCT, [SQLForeignKey, None], False), + None, + ), # 4 + ( + 5, + TType.LIST, + "uniqueConstraints", + (TType.STRUCT, [SQLUniqueConstraint, None], False), + None, + ), # 5 + ( + 6, + TType.LIST, + "notNullConstraints", + (TType.STRUCT, [SQLNotNullConstraint, None], False), + None, + ), # 6 + ( + 7, + TType.LIST, + "defaultConstraints", + (TType.STRUCT, [SQLDefaultConstraint, None], False), + None, + ), # 7 + ( + 8, + TType.LIST, + "checkConstraints", + (TType.STRUCT, [SQLCheckConstraint, None], False), + None, + ), # 8 + ( + 9, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 9 + ( + 10, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 10 +) +all_structs.append(CreateDatabaseRequest) +CreateDatabaseRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "databaseName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "description", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "locationUri", + "UTF8", + None, + ), # 3 + ( + 4, + TType.MAP, + "parameters", + (TType.STRING, "UTF8", TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRUCT, + "privileges", + [PrincipalPrivilegeSet, None], + None, + ), # 5 + ( + 6, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "ownerType", + None, + None, + ), # 7 + ( + 8, + TType.STRING, + "catalogName", + "UTF8", + None, + ), # 8 + ( + 9, + TType.I32, + "createTime", + None, + None, + ), # 9 + ( + 10, + TType.STRING, + "managedLocationUri", + "UTF8", + None, + ), # 10 + ( + 11, + TType.STRING, + "type", + "UTF8", + None, + ), # 11 + ( + 12, + TType.STRING, + "dataConnectorName", + "UTF8", + None, + ), # 12 +) +all_structs.append(CreateDataConnectorRequest) +CreateDataConnectorRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "connector", + [DataConnector, None], + None, + ), # 1 +) +all_structs.append(GetDataConnectorRequest) +GetDataConnectorRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "connectorName", + "UTF8", + None, + ), # 1 +) +all_structs.append(ScheduledQueryPollRequest) +ScheduledQueryPollRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "clusterNamespace", + "UTF8", + None, + ), # 1 +) +all_structs.append(ScheduledQueryKey) +ScheduledQueryKey.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "scheduleName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "clusterNamespace", + "UTF8", + None, + ), # 2 +) +all_structs.append(ScheduledQueryPollResponse) +ScheduledQueryPollResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "scheduleKey", + [ScheduledQueryKey, None], + None, + ), # 1 + ( + 2, + TType.I64, + "executionId", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "query", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "user", + "UTF8", + None, + ), # 4 +) +all_structs.append(ScheduledQuery) +ScheduledQuery.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "scheduleKey", + [ScheduledQueryKey, None], + None, + ), # 1 + ( + 2, + TType.BOOL, + "enabled", + None, + None, + ), # 2 + None, # 3 + ( + 4, + TType.STRING, + "schedule", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "user", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "query", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I32, + "nextExecution", + None, + None, + ), # 7 +) +all_structs.append(ScheduledQueryMaintenanceRequest) +ScheduledQueryMaintenanceRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I32, + "type", + None, + None, + ), # 1 + ( + 2, + TType.STRUCT, + "scheduledQuery", + [ScheduledQuery, None], + None, + ), # 2 +) +all_structs.append(ScheduledQueryProgressInfo) +ScheduledQueryProgressInfo.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "scheduledExecutionId", + None, + None, + ), # 1 + ( + 2, + TType.I32, + "state", + None, + None, + ), # 2 + ( + 3, + TType.STRING, + "executorQueryId", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "errorMessage", + "UTF8", + None, + ), # 4 +) +all_structs.append(AlterPartitionsRequest) +AlterPartitionsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 4 + ( + 5, + TType.STRUCT, + "environmentContext", + [EnvironmentContext, None], + None, + ), # 5 + ( + 6, + TType.I64, + "writeId", + None, + -1, + ), # 6 + ( + 7, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 7 +) +all_structs.append(AlterPartitionsResponse) +AlterPartitionsResponse.thrift_spec = () +all_structs.append(RenamePartitionRequest) +RenamePartitionRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "partVals", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRUCT, + "newPart", + [Partition, None], + None, + ), # 5 + ( + 6, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I64, + "txnId", + None, + None, + ), # 7 + ( + 8, + TType.BOOL, + "clonePart", + None, + None, + ), # 8 +) +all_structs.append(RenamePartitionResponse) +RenamePartitionResponse.thrift_spec = () +all_structs.append(AlterTableRequest) +AlterTableRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRUCT, + "table", + [Table, None], + None, + ), # 4 + ( + 5, + TType.STRUCT, + "environmentContext", + [EnvironmentContext, None], + None, + ), # 5 + ( + 6, + TType.I64, + "writeId", + None, + -1, + ), # 6 + ( + 7, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 7 + ( + 8, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 8 + ( + 9, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 9 +) +all_structs.append(AlterTableResponse) +AlterTableResponse.thrift_spec = () +all_structs.append(GetPartitionsFilterSpec) +GetPartitionsFilterSpec.thrift_spec = ( + None, # 0 + None, # 1 + None, # 2 + None, # 3 + None, # 4 + None, # 5 + None, # 6 + ( + 7, + TType.I32, + "filterMode", + None, + None, + ), # 7 + ( + 8, + TType.LIST, + "filters", + (TType.STRING, "UTF8", False), + None, + ), # 8 +) +all_structs.append(GetPartitionsResponse) +GetPartitionsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitionSpec", + (TType.STRUCT, [PartitionSpec, None], False), + None, + ), # 1 +) +all_structs.append(GetPartitionsRequest) +GetPartitionsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.BOOL, + "withAuth", + None, + None, + ), # 4 + ( + 5, + TType.STRING, + "user", + "UTF8", + None, + ), # 5 + ( + 6, + TType.LIST, + "groupNames", + (TType.STRING, "UTF8", False), + None, + ), # 6 + ( + 7, + TType.STRUCT, + "projectionSpec", + [GetProjectionsSpec, None], + None, + ), # 7 + ( + 8, + TType.STRUCT, + "filterSpec", + [GetPartitionsFilterSpec, None], + None, + ), # 8 + ( + 9, + TType.LIST, + "processorCapabilities", + (TType.STRING, "UTF8", False), + None, + ), # 9 + ( + 10, + TType.STRING, + "processorIdentifier", + "UTF8", + None, + ), # 10 + ( + 11, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 11 +) +all_structs.append(GetFieldsRequest) +GetFieldsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRUCT, + "envContext", + [EnvironmentContext, None], + None, + ), # 4 + ( + 5, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I64, + "id", + None, + -1, + ), # 6 +) +all_structs.append(GetFieldsResponse) +GetFieldsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fields", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 1 +) +all_structs.append(GetSchemaRequest) +GetSchemaRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRUCT, + "envContext", + [EnvironmentContext, None], + None, + ), # 4 + ( + 5, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I64, + "id", + None, + -1, + ), # 6 +) +all_structs.append(GetSchemaResponse) +GetSchemaResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "fields", + (TType.STRUCT, [FieldSchema, None], False), + None, + ), # 1 +) +all_structs.append(GetPartitionRequest) +GetPartitionRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "partVals", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I64, + "id", + None, + -1, + ), # 6 +) +all_structs.append(GetPartitionResponse) +GetPartitionResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRUCT, + "partition", + [Partition, None], + None, + ), # 1 +) +all_structs.append(PartitionsRequest) +PartitionsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.I16, + "maxParts", + None, + -1, + ), # 4 + ( + 5, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 5 + ( + 6, + TType.I64, + "id", + None, + -1, + ), # 6 +) +all_structs.append(PartitionsResponse) +PartitionsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 +) +all_structs.append(GetPartitionNamesPsRequest) +GetPartitionNamesPsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "partValues", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.I16, + "maxParts", + None, + -1, + ), # 5 + ( + 6, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 6 + ( + 7, + TType.I64, + "id", + None, + -1, + ), # 7 +) +all_structs.append(GetPartitionNamesPsResponse) +GetPartitionNamesPsResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "names", + (TType.STRING, "UTF8", False), + None, + ), # 1 +) +all_structs.append(GetPartitionsPsWithAuthRequest) +GetPartitionsPsWithAuthRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tblName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.LIST, + "partVals", + (TType.STRING, "UTF8", False), + None, + ), # 4 + ( + 5, + TType.I16, + "maxParts", + None, + -1, + ), # 5 + ( + 6, + TType.STRING, + "userName", + "UTF8", + None, + ), # 6 + ( + 7, + TType.LIST, + "groupNames", + (TType.STRING, "UTF8", False), + None, + ), # 7 + ( + 8, + TType.STRING, + "validWriteIdList", + "UTF8", + None, + ), # 8 + ( + 9, + TType.I64, + "id", + None, + -1, + ), # 9 +) +all_structs.append(GetPartitionsPsWithAuthResponse) +GetPartitionsPsWithAuthResponse.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "partitions", + (TType.STRUCT, [Partition, None], False), + None, + ), # 1 +) +all_structs.append(ReplicationMetrics) +ReplicationMetrics.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "scheduledExecutionId", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "policy", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I64, + "dumpExecutionId", + None, + None, + ), # 3 + ( + 4, + TType.STRING, + "metadata", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "progress", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "messageFormat", + "UTF8", + None, + ), # 6 +) +all_structs.append(ReplicationMetricList) +ReplicationMetricList.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "replicationMetricList", + (TType.STRUCT, [ReplicationMetrics, None], False), + None, + ), # 1 +) +all_structs.append(GetReplicationMetricsRequest) +GetReplicationMetricsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "scheduledExecutionId", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "policy", + "UTF8", + None, + ), # 2 + ( + 3, + TType.I64, + "dumpExecutionId", + None, + None, + ), # 3 +) +all_structs.append(GetOpenTxnsRequest) +GetOpenTxnsRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.LIST, + "excludeTxnTypes", + (TType.I32, None, False), + None, + ), # 1 +) +all_structs.append(StoredProcedureRequest) +StoredProcedureRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "procName", + "UTF8", + None, + ), # 3 +) +all_structs.append(ListStoredProcedureRequest) +ListStoredProcedureRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 +) +all_structs.append(StoredProcedure) +StoredProcedure.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "name", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "catName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "source", + "UTF8", + None, + ), # 5 +) +all_structs.append(AddPackageRequest) +AddPackageRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "packageName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "header", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "body", + "UTF8", + None, + ), # 6 +) +all_structs.append(GetPackageRequest) +GetPackageRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "packageName", + "UTF8", + None, + ), # 3 +) +all_structs.append(DropPackageRequest) +DropPackageRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "packageName", + "UTF8", + None, + ), # 3 +) +all_structs.append(ListPackageRequest) +ListPackageRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 +) +all_structs.append(Package) +Package.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "catName", + "UTF8", + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "packageName", + "UTF8", + None, + ), # 3 + ( + 4, + TType.STRING, + "ownerName", + "UTF8", + None, + ), # 4 + ( + 5, + TType.STRING, + "header", + "UTF8", + None, + ), # 5 + ( + 6, + TType.STRING, + "body", + "UTF8", + None, + ), # 6 +) +all_structs.append(GetAllWriteEventInfoRequest) +GetAllWriteEventInfoRequest.thrift_spec = ( + None, # 0 + ( + 1, + TType.I64, + "txnId", + None, + None, + ), # 1 + ( + 2, + TType.STRING, + "dbName", + "UTF8", + None, + ), # 2 + ( + 3, + TType.STRING, + "tableName", + "UTF8", + None, + ), # 3 +) +all_structs.append(MetaException) +MetaException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(UnknownTableException) +UnknownTableException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(UnknownDBException) +UnknownDBException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(AlreadyExistsException) +AlreadyExistsException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(InvalidPartitionException) +InvalidPartitionException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(UnknownPartitionException) +UnknownPartitionException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(InvalidObjectException) +InvalidObjectException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(NoSuchObjectException) +NoSuchObjectException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(InvalidOperationException) +InvalidOperationException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(ConfigValSecurityException) +ConfigValSecurityException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(InvalidInputException) +InvalidInputException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(NoSuchTxnException) +NoSuchTxnException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(TxnAbortedException) +TxnAbortedException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(TxnOpenException) +TxnOpenException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) +all_structs.append(NoSuchLockException) +NoSuchLockException.thrift_spec = ( + None, # 0 + ( + 1, + TType.STRING, + "message", + "UTF8", + None, + ), # 1 +) fix_spec(all_structs) -del all_structs +del all_structs \ No newline at end of file diff --git a/vendor/hive_metastore/ttypes.py b/vendor/hive_metastore/ttypes.py index 075fed6fa3..dca7aaadc7 100644 --- a/vendor/hive_metastore/ttypes.py +++ b/vendor/hive_metastore/ttypes.py @@ -42512,4 +42512,4 @@ def __ne__(self, other): ), # 1 ) fix_spec(all_structs) -del all_structs \ No newline at end of file +del all_structs From e719cf8dbfe1c260d453460e5309301efc5464a9 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 16:22:10 -0500 Subject: [PATCH 50/51] updated vendor files --- vendor/hive_metastore/ThriftHiveMetastore.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/hive_metastore/ThriftHiveMetastore.py b/vendor/hive_metastore/ThriftHiveMetastore.py index a4804c1a8e..4d25c087c7 100644 --- a/vendor/hive_metastore/ThriftHiveMetastore.py +++ b/vendor/hive_metastore/ThriftHiveMetastore.py @@ -72957,4 +72957,4 @@ def __ne__(self, other): ), # 1 ) fix_spec(all_structs) -del all_structs \ No newline at end of file +del all_structs From 245b4a9c30e2ee110b51f9abbe4c354046abdd20 Mon Sep 17 00:00:00 2001 From: VAA7RQ Date: Wed, 12 Feb 2025 17:29:31 -0500 Subject: [PATCH 51/51] attempting to update poetry files --- poetry.lock | 5 +- pyproject.toml | 766 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 770 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index e5b091a2fa..3a3d4d2f3f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2181,6 +2181,8 @@ python-versions = "*" groups = ["dev"] files = [ {file = "jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c"}, + {file = "jsonpath_ng-1.7.0-py2-none-any.whl", hash = "sha256:898c93fc173f0c336784a3fa63d7434297544b7198124a68f9a3ef9597b0ae6e"}, + {file = "jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6"}, ] [package.dependencies] @@ -3618,6 +3620,7 @@ files = [ {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bb89f0a835bcfc1d42ccd5f41f04870c1b936d8507c6df12b7737febc40f0909"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f0c2d907a1e102526dd2986df638343388b94c33860ff3bbe1384130828714b1"}, {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:eb09aa7f9cecb45027683bb55aebaaf45a0df8bf6de68801a6afdc7947bb09d4"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b73d6d7f0ccdad7bc43e6d34273f70d587ef62f824d7261c4ae9b8b1b6af90e8"}, {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce5ab4bf46a211a8e924d307c1b1fcda82368586a19d0a24f8ae166f5c784864"}, @@ -5655,4 +5658,4 @@ zstandard = ["zstandard"] [metadata] lock-version = "2.1" python-versions = "^3.9.2, !=3.9.7" -content-hash = "33d632240f5521ea647ea1e1f6936f48c369f457be139faa7e4351267aa7e86f" +content-hash = "8ff3349420375238c1f289f282b3af7c9b581c0094e0b16e4f1c1bca824481cc" diff --git a/pyproject.toml b/pyproject.toml index 6f5e219d10..ebd2ca15f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -112,6 +112,12 @@ mkdocs-material = "9.6.3" mkdocs-material-extensions = "1.3.1" mkdocs-section-index = "0.3.9" + +[[tool.poetry.source]] +name = "jfrog" +url = "https://packages.ic1.statefarm/artifactory/api/pypi/pypi-virtual/simple/" +priority = "explicit" + [[tool.mypy.overrides]] module = "pytest_mock.*" ignore_missing_imports = true @@ -1188,6 +1194,766 @@ ignore_missing_imports = true module = "datafusion.*" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyarrow.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pandas.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "snappy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "zstandard.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pydantic_core.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pytest.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fastavro.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mmh3.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "hive_metastore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "thrift.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "requests_mock.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "click.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "rich.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "fsspec.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "s3fs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "azure.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "adlfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "gcsfs.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "packaging.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tests.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "boto3" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "botocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "mypy_boto3_glue.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "moto" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiobotocore.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "aiohttp.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "duckdb.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "ray.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "daft.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyparsing.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "pyspark.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "strictyaml.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sortedcontainers.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "sqlalchemy.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "Cython.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "setuptools.*" +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "tenacity.*" +ignore_missing_imports = true + [tool.poetry.scripts] pyiceberg = "pyiceberg.cli.console:run"